diff --git a/server/.eslintrc.js b/server/.eslintrc.js
new file mode 100644
index 0000000000000000000000000000000000000000..0289590cf83d0398290d1e4005e2ec6708ddf6a7
--- /dev/null
+++ b/server/.eslintrc.js
@@ -0,0 +1,16 @@
+module.exports = {
+    "env": {
+        "browser": true,
+        "es2021": true
+    },
+    "extends": "plugin:vue/essential",
+    "parserOptions": {
+        "ecmaVersion": 12,
+        "sourceType": "module"
+    },
+    "plugins": [
+        "vue"
+    ],
+    "rules": {
+    }
+};
diff --git a/server/node_modules/@eslint/eslintrc/node_modules/ignore/CHANGELOG.md b/server/node_modules/@eslint/eslintrc/node_modules/ignore/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..2b250132c08c4d9e60d432e6334ab1246692b5f4
--- /dev/null
+++ b/server/node_modules/@eslint/eslintrc/node_modules/ignore/CHANGELOG.md
@@ -0,0 +1,19 @@
+# `node-ignore` 4 ChangeLog
+
+# 4.x
+
+## 2018-06-22, Version 4.0.0
+
+- **SEMVER-MAJOR**: Drop support for node < 6 by default.
+- **FEATURE**: supports the missing character ranges and sets, such as `*.[a-z]` and `*.[jJ][pP][gG]`
+- **FEATURE**: new option: `ignorecase` to make `ignore` case sensitive.
+- **FEATURE**: supports question mark which matches a single character.
+- **PATCH**: fixes typescript declaration.
+
+## ~ 2018-08-09, Version 4.0.1 - 4.0.5
+
+- **PATCH**: updates README.md about frequent asked quesions from github issues.
+
+## 2018-08-12, Version 4.0.6
+
+- **PATCH**: `Object.prototype` methods will not ruin the result any more.
diff --git a/server/node_modules/@eslint/eslintrc/node_modules/ignore/LICENSE-MIT b/server/node_modules/@eslint/eslintrc/node_modules/ignore/LICENSE-MIT
new file mode 100644
index 0000000000000000000000000000000000000000..825533e337fa1d8e6fccfe70318c4abf52600d25
--- /dev/null
+++ b/server/node_modules/@eslint/eslintrc/node_modules/ignore/LICENSE-MIT
@@ -0,0 +1,21 @@
+Copyright (c) 2013 Kael Zhang <i@kael.me>, contributors
+http://kael.me/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/server/node_modules/@eslint/eslintrc/node_modules/ignore/README.md b/server/node_modules/@eslint/eslintrc/node_modules/ignore/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..c4d8230ccbe5c317105fa115ffd61ec45b45e759
--- /dev/null
+++ b/server/node_modules/@eslint/eslintrc/node_modules/ignore/README.md
@@ -0,0 +1,307 @@
+<table><thead>
+  <tr>
+    <th>Linux</th>
+    <th>OS X</th>
+    <th>Windows</th>
+    <th>Coverage</th>
+    <th>Downloads</th>
+  </tr>
+</thead><tbody><tr>
+  <td colspan="2" align="center">
+    <a href="https://travis-ci.org/kaelzhang/node-ignore">
+    <img
+      src="https://travis-ci.org/kaelzhang/node-ignore.svg?branch=master"
+      alt="Build Status" /></a>
+  </td>
+  <td align="center">
+    <a href="https://ci.appveyor.com/project/kaelzhang/node-ignore">
+    <img
+      src="https://ci.appveyor.com/api/projects/status/github/kaelzhang/node-ignore?branch=master&svg=true"
+      alt="Windows Build Status" /></a>
+  </td>
+  <td align="center">
+    <a href="https://codecov.io/gh/kaelzhang/node-ignore">
+    <img
+      src="https://codecov.io/gh/kaelzhang/node-ignore/branch/master/graph/badge.svg"
+      alt="Coverage Status" /></a>
+  </td>
+  <td align="center">
+    <a href="https://www.npmjs.org/package/ignore">
+    <img
+      src="http://img.shields.io/npm/dm/ignore.svg"
+      alt="npm module downloads per month" /></a>
+  </td>
+</tr></tbody></table>
+
+# ignore
+
+`ignore` is a manager, filter and parser which implemented in pure JavaScript according to the .gitignore [spec](http://git-scm.com/docs/gitignore).
+
+Pay attention that [`minimatch`](https://www.npmjs.org/package/minimatch) does not work in the gitignore way. To filter filenames according to .gitignore file, I recommend this module.
+
+##### Tested on
+
+- Linux + Node: `0.8` - `7.x`
+- Windows + Node: `0.10` - `7.x`, node < `0.10` is not tested due to the lack of support of appveyor.
+
+Actually, `ignore` does not rely on any versions of node specially.
+
+Since `4.0.0`, ignore will no longer support `node < 6` by default, to use in node < 6, `require('ignore/legacy')`. For details, see [CHANGELOG](https://github.com/kaelzhang/node-ignore/blob/master/CHANGELOG.md).
+
+## Table Of Main Contents
+
+- [Usage](#usage)
+- [`Pathname` Conventions](#pathname-conventions)
+- [Guide for 2.x -> 3.x](#upgrade-2x---3x)
+- [Guide for 3.x -> 4.x](#upgrade-3x---4x)
+- See Also:
+  - [`glob-gitignore`](https://www.npmjs.com/package/glob-gitignore) matches files using patterns and filters them according to gitignore rules.
+
+## Usage
+
+```js
+import ignore from 'ignore'
+const ig = ignore().add(['.abc/*', '!.abc/d/'])
+```
+
+### Filter the given paths
+
+```js
+const paths = [
+  '.abc/a.js',    // filtered out
+  '.abc/d/e.js'   // included
+]
+
+ig.filter(paths)        // ['.abc/d/e.js']
+ig.ignores('.abc/a.js') // true
+```
+
+### As the filter function
+
+```js
+paths.filter(ig.createFilter()); // ['.abc/d/e.js']
+```
+
+### Win32 paths will be handled
+
+```js
+ig.filter(['.abc\\a.js', '.abc\\d\\e.js'])
+// if the code above runs on windows, the result will be
+// ['.abc\\d\\e.js']
+```
+
+## Why another ignore?
+
+- `ignore` is a standalone module, and is much simpler so that it could easy work with other programs, unlike [isaacs](https://npmjs.org/~isaacs)'s [fstream-ignore](https://npmjs.org/package/fstream-ignore) which must work with the modules of the fstream family.
+
+- `ignore` only contains utility methods to filter paths according to the specified ignore rules, so
+  - `ignore` never try to find out ignore rules by traversing directories or fetching from git configurations.
+  - `ignore` don't cares about sub-modules of git projects.
+
+- Exactly according to [gitignore man page](http://git-scm.com/docs/gitignore), fixes some known matching issues of fstream-ignore, such as:
+  - '`/*.js`' should only match '`a.js`', but not '`abc/a.js`'.
+  - '`**/foo`' should match '`foo`' anywhere.
+  - Prevent re-including a file if a parent directory of that file is excluded.
+  - Handle trailing whitespaces:
+    - `'a '`(one space) should not match `'a  '`(two spaces).
+    - `'a \ '` matches `'a  '`
+  - All test cases are verified with the result of `git check-ignore`.
+
+# Methods
+
+## .add(pattern: string | Ignore): this
+## .add(patterns: Array<string | Ignore>): this
+
+- **pattern** `String | Ignore` An ignore pattern string, or the `Ignore` instance
+- **patterns** `Array<String | Ignore>` Array of ignore patterns.
+
+Adds a rule or several rules to the current manager.
+
+Returns `this`
+
+Notice that a line starting with `'#'`(hash) is treated as a comment. Put a backslash (`'\'`) in front of the first hash for patterns that begin with a hash, if you want to ignore a file with a hash at the beginning of the filename.
+
+```js
+ignore().add('#abc').ignores('#abc')    // false
+ignore().add('\#abc').ignores('#abc')   // true
+```
+
+`pattern` could either be a line of ignore pattern or a string of multiple ignore patterns, which means we could just `ignore().add()` the content of a ignore file:
+
+```js
+ignore()
+.add(fs.readFileSync(filenameOfGitignore).toString())
+.filter(filenames)
+```
+
+`pattern` could also be an `ignore` instance, so that we could easily inherit the rules of another `Ignore` instance.
+
+## <strike>.addIgnoreFile(path)</strike>
+
+REMOVED in `3.x` for now.
+
+To upgrade `ignore@2.x` up to `3.x`, use
+
+```js
+import fs from 'fs'
+
+if (fs.existsSync(filename)) {
+  ignore().add(fs.readFileSync(filename).toString())
+}
+```
+
+instead.
+
+## .filter(paths: Array<Pathname>): Array<Pathname>
+
+```ts
+type Pathname = string
+```
+
+Filters the given array of pathnames, and returns the filtered array.
+
+- **paths** `Array.<Pathname>` The array of `pathname`s to be filtered.
+
+### `Pathname` Conventions:
+
+#### 1. `Pathname` should be a `path.relative()`d pathname
+
+`Pathname` should be a string that have been `path.join()`ed, or the return value of `path.relative()` to the current directory.
+
+```js
+// WRONG
+ig.ignores('./abc')
+
+// WRONG, for it will never happen.
+// If the gitignore rule locates at the root directory,
+// `'/abc'` should be changed to `'abc'`.
+// ```
+// path.relative('/', '/abc')  -> 'abc'
+// ```
+ig.ignores('/abc')
+
+// Right
+ig.ignores('abc')
+
+// Right
+ig.ignores(path.join('./abc'))  // path.join('./abc') -> 'abc'
+```
+
+In other words, each `Pathname` here should be a relative path to the directory of the gitignore rules.
+
+Suppose the dir structure is:
+
+```
+/path/to/your/repo
+    |-- a
+    |   |-- a.js
+    |
+    |-- .b
+    |
+    |-- .c
+         |-- .DS_store
+```
+
+Then the `paths` might be like this:
+
+```js
+[
+  'a/a.js'
+  '.b',
+  '.c/.DS_store'
+]
+```
+
+Usually, you could use [`glob`](http://npmjs.org/package/glob) with `option.mark = true` to fetch the structure of the current directory:
+
+```js
+import glob from 'glob'
+
+glob('**', {
+  // Adds a / character to directory matches.
+  mark: true
+}, (err, files) => {
+  if (err) {
+    return console.error(err)
+  }
+
+  let filtered = ignore().add(patterns).filter(files)
+  console.log(filtered)
+})
+```
+
+#### 2. filenames and dirnames
+
+`node-ignore` does NO `fs.stat` during path matching, so for the example below:
+
+```js
+ig.add('config/')
+
+// `ig` does NOT know if 'config' is a normal file, directory or something
+ig.ignores('config')    // And it returns `false`
+
+ig.ignores('config/')   // returns `true`
+```
+
+Specially for people who develop some library based on `node-ignore`, it is important to understand that.
+
+## .ignores(pathname: Pathname): boolean
+
+> new in 3.2.0
+
+Returns `Boolean` whether `pathname` should be ignored.
+
+```js
+ig.ignores('.abc/a.js')    // true
+```
+
+## .createFilter()
+
+Creates a filter function which could filter an array of paths with `Array.prototype.filter`.
+
+Returns `function(path)` the filter function.
+
+## `options.ignorecase` since 4.0.0
+
+Similar as the `core.ignorecase` option of [git-config](https://git-scm.com/docs/git-config), `node-ignore` will be case insensitive if `options.ignorecase` is set to `true` (default value), otherwise case sensitive.
+
+```js
+const ig = ignore({
+  ignorecase: false
+})
+
+ig.add('*.png')
+
+ig.ignores('*.PNG')  // false
+```
+
+****
+
+# Upgrade Guide
+
+## Upgrade 2.x -> 3.x
+
+- All `options` of 2.x are unnecessary and removed, so just remove them.
+- `ignore()` instance is no longer an [`EventEmitter`](nodejs.org/api/events.html), and all events are unnecessary and removed.
+- `.addIgnoreFile()` is removed, see the [.addIgnoreFile](#addignorefilepath) section for details.
+
+## Upgrade 3.x -> 4.x
+
+Since `4.0.0`, `ignore` will no longer support node < 6, to use `ignore` in node < 6:
+
+```js
+var ignore = require('ignore/legacy')
+```
+
+****
+
+# Collaborators
+
+- [@whitecolor](https://github.com/whitecolor) *Alex*
+- [@SamyPesse](https://github.com/SamyPesse) *Samy Pessé*
+- [@azproduction](https://github.com/azproduction) *Mikhail Davydov*
+- [@TrySound](https://github.com/TrySound) *Bogdan Chadkin*
+- [@JanMattner](https://github.com/JanMattner) *Jan Mattner*
+- [@ntwb](https://github.com/ntwb) *Stephen Edgar*
+- [@kasperisager](https://github.com/kasperisager) *Kasper Isager*
+- [@sandersn](https://github.com/sandersn) *Nathan Shively-Sanders*
diff --git a/server/node_modules/@eslint/eslintrc/node_modules/ignore/index.d.ts b/server/node_modules/@eslint/eslintrc/node_modules/ignore/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..be9d5f8eacd18a43f53948f7fc76ef7862a3f90f
--- /dev/null
+++ b/server/node_modules/@eslint/eslintrc/node_modules/ignore/index.d.ts
@@ -0,0 +1,45 @@
+interface Ignore {
+  /**
+   * Adds a rule rules to the current manager.
+   * @param  {string | Ignore} pattern
+   * @returns IgnoreBase
+   */
+  add(pattern: string | Ignore): Ignore
+  /**
+   * Adds several rules to the current manager.
+   * @param  {string[]} patterns
+   * @returns IgnoreBase
+   */
+  add(patterns: (string | Ignore)[]): Ignore
+
+  /**
+   * Filters the given array of pathnames, and returns the filtered array.
+   * NOTICE that each path here should be a relative path to the root of your repository.
+   * @param paths the array of paths to be filtered.
+   * @returns The filtered array of paths
+   */
+  filter(paths: string[]): string[]
+  /**
+   * Creates a filter function which could filter
+   * an array of paths with Array.prototype.filter.
+   */
+  createFilter(): (path: string) => boolean
+
+  /**
+   * Returns Boolean whether pathname should be ignored.
+   * @param  {string} pathname a path to check
+   * @returns boolean
+   */
+  ignores(pathname: string): boolean
+}
+
+interface Options {
+  ignorecase?: boolean
+}
+
+/**
+ * Creates new ignore manager.
+ */
+declare function ignore(options?: Options): Ignore
+
+export default ignore
diff --git a/server/node_modules/@eslint/eslintrc/node_modules/ignore/index.js b/server/node_modules/@eslint/eslintrc/node_modules/ignore/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..62c5cf71ec2809f5bc92121eba5ea1ee38257de2
--- /dev/null
+++ b/server/node_modules/@eslint/eslintrc/node_modules/ignore/index.js
@@ -0,0 +1,463 @@
+// A simple implementation of make-array
+function make_array (subject) {
+  return Array.isArray(subject)
+    ? subject
+    : [subject]
+}
+
+const REGEX_BLANK_LINE = /^\s+$/
+const REGEX_LEADING_EXCAPED_EXCLAMATION = /^\\!/
+const REGEX_LEADING_EXCAPED_HASH = /^\\#/
+const SLASH = '/'
+const KEY_IGNORE = typeof Symbol !== 'undefined'
+  ? Symbol.for('node-ignore')
+  /* istanbul ignore next */
+  : 'node-ignore'
+
+const define = (object, key, value) =>
+  Object.defineProperty(object, key, {value})
+
+const REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g
+
+// Sanitize the range of a regular expression
+// The cases are complicated, see test cases for details
+const sanitizeRange = range => range.replace(
+  REGEX_REGEXP_RANGE,
+  (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0)
+    ? match
+    // Invalid range (out of order) which is ok for gitignore rules but
+    //   fatal for JavaScript regular expression, so eliminate it.
+    : ''
+)
+
+// > If the pattern ends with a slash,
+// > it is removed for the purpose of the following description,
+// > but it would only find a match with a directory.
+// > In other words, foo/ will match a directory foo and paths underneath it,
+// > but will not match a regular file or a symbolic link foo
+// >  (this is consistent with the way how pathspec works in general in Git).
+// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'
+// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call
+//      you could use option `mark: true` with `glob`
+
+// '`foo/`' should not continue with the '`..`'
+const DEFAULT_REPLACER_PREFIX = [
+
+  // > Trailing spaces are ignored unless they are quoted with backslash ("\")
+  [
+    // (a\ ) -> (a )
+    // (a  ) -> (a)
+    // (a \ ) -> (a  )
+    /\\?\s+$/,
+    match => match.indexOf('\\') === 0
+      ? ' '
+      : ''
+  ],
+
+  // replace (\ ) with ' '
+  [
+    /\\\s/g,
+    () => ' '
+  ],
+
+  // Escape metacharacters
+  // which is written down by users but means special for regular expressions.
+
+  // > There are 12 characters with special meanings:
+  // > - the backslash \,
+  // > - the caret ^,
+  // > - the dollar sign $,
+  // > - the period or dot .,
+  // > - the vertical bar or pipe symbol |,
+  // > - the question mark ?,
+  // > - the asterisk or star *,
+  // > - the plus sign +,
+  // > - the opening parenthesis (,
+  // > - the closing parenthesis ),
+  // > - and the opening square bracket [,
+  // > - the opening curly brace {,
+  // > These special characters are often called "metacharacters".
+  [
+    /[\\^$.|*+(){]/g,
+    match => `\\${match}`
+  ],
+
+  [
+    // > [abc] matches any character inside the brackets
+    // >    (in this case a, b, or c);
+    /\[([^\]/]*)($|\])/g,
+    (match, p1, p2) => p2 === ']'
+      ? `[${sanitizeRange(p1)}]`
+      : `\\${match}`
+  ],
+
+  [
+    // > a question mark (?) matches a single character
+    /(?!\\)\?/g,
+    () => '[^/]'
+  ],
+
+  // leading slash
+  [
+
+    // > A leading slash matches the beginning of the pathname.
+    // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".
+    // A leading slash matches the beginning of the pathname
+    /^\//,
+    () => '^'
+  ],
+
+  // replace special metacharacter slash after the leading slash
+  [
+    /\//g,
+    () => '\\/'
+  ],
+
+  [
+    // > A leading "**" followed by a slash means match in all directories.
+    // > For example, "**/foo" matches file or directory "foo" anywhere,
+    // > the same as pattern "foo".
+    // > "**/foo/bar" matches file or directory "bar" anywhere that is directly
+    // >   under directory "foo".
+    // Notice that the '*'s have been replaced as '\\*'
+    /^\^*\\\*\\\*\\\//,
+
+    // '**/foo' <-> 'foo'
+    () => '^(?:.*\\/)?'
+  ]
+]
+
+const DEFAULT_REPLACER_SUFFIX = [
+  // starting
+  [
+    // there will be no leading '/'
+    //   (which has been replaced by section "leading slash")
+    // If starts with '**', adding a '^' to the regular expression also works
+    /^(?=[^^])/,
+    function startingReplacer () {
+      return !/\/(?!$)/.test(this)
+        // > If the pattern does not contain a slash /,
+        // >   Git treats it as a shell glob pattern
+        // Actually, if there is only a trailing slash,
+        //   git also treats it as a shell glob pattern
+        ? '(?:^|\\/)'
+
+        // > Otherwise, Git treats the pattern as a shell glob suitable for
+        // >   consumption by fnmatch(3)
+        : '^'
+    }
+  ],
+
+  // two globstars
+  [
+    // Use lookahead assertions so that we could match more than one `'/**'`
+    /\\\/\\\*\\\*(?=\\\/|$)/g,
+
+    // Zero, one or several directories
+    // should not use '*', or it will be replaced by the next replacer
+
+    // Check if it is not the last `'/**'`
+    (match, index, str) => index + 6 < str.length
+
+      // case: /**/
+      // > A slash followed by two consecutive asterisks then a slash matches
+      // >   zero or more directories.
+      // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on.
+      // '/**/'
+      ? '(?:\\/[^\\/]+)*'
+
+      // case: /**
+      // > A trailing `"/**"` matches everything inside.
+
+      // #21: everything inside but it should not include the current folder
+      : '\\/.+'
+  ],
+
+  // intermediate wildcards
+  [
+    // Never replace escaped '*'
+    // ignore rule '\*' will match the path '*'
+
+    // 'abc.*/' -> go
+    // 'abc.*'  -> skip this rule
+    /(^|[^\\]+)\\\*(?=.+)/g,
+
+    // '*.js' matches '.js'
+    // '*.js' doesn't match 'abc'
+    (match, p1) => `${p1}[^\\/]*`
+  ],
+
+  // trailing wildcard
+  [
+    /(\^|\\\/)?\\\*$/,
+    (match, p1) => {
+      const prefix = p1
+        // '\^':
+        // '/*' does not match ''
+        // '/*' does not match everything
+
+        // '\\\/':
+        // 'abc/*' does not match 'abc/'
+        ? `${p1}[^/]+`
+
+        // 'a*' matches 'a'
+        // 'a*' matches 'aa'
+        : '[^/]*'
+
+      return `${prefix}(?=$|\\/$)`
+    }
+  ],
+
+  [
+    // unescape
+    /\\\\\\/g,
+    () => '\\'
+  ]
+]
+
+const POSITIVE_REPLACERS = [
+  ...DEFAULT_REPLACER_PREFIX,
+
+  // 'f'
+  // matches
+  // - /f(end)
+  // - /f/
+  // - (start)f(end)
+  // - (start)f/
+  // doesn't match
+  // - oof
+  // - foo
+  // pseudo:
+  // -> (^|/)f(/|$)
+
+  // ending
+  [
+    // 'js' will not match 'js.'
+    // 'ab' will not match 'abc'
+    /(?:[^*/])$/,
+
+    // 'js*' will not match 'a.js'
+    // 'js/' will not match 'a.js'
+    // 'js' will match 'a.js' and 'a.js/'
+    match => `${match}(?=$|\\/)`
+  ],
+
+  ...DEFAULT_REPLACER_SUFFIX
+]
+
+const NEGATIVE_REPLACERS = [
+  ...DEFAULT_REPLACER_PREFIX,
+
+  // #24, #38
+  // The MISSING rule of [gitignore docs](https://git-scm.com/docs/gitignore)
+  // A negative pattern without a trailing wildcard should not
+  // re-include the things inside that directory.
+
+  // eg:
+  // ['node_modules/*', '!node_modules']
+  // should ignore `node_modules/a.js`
+  [
+    /(?:[^*])$/,
+    match => `${match}(?=$|\\/$)`
+  ],
+
+  ...DEFAULT_REPLACER_SUFFIX
+]
+
+// A simple cache, because an ignore rule only has only one certain meaning
+const cache = Object.create(null)
+
+// @param {pattern}
+const make_regex = (pattern, negative, ignorecase) => {
+  const r = cache[pattern]
+  if (r) {
+    return r
+  }
+
+  const replacers = negative
+    ? NEGATIVE_REPLACERS
+    : POSITIVE_REPLACERS
+
+  const source = replacers.reduce(
+    (prev, current) => prev.replace(current[0], current[1].bind(pattern)),
+    pattern
+  )
+
+  return cache[pattern] = ignorecase
+    ? new RegExp(source, 'i')
+    : new RegExp(source)
+}
+
+// > A blank line matches no files, so it can serve as a separator for readability.
+const checkPattern = pattern => pattern
+  && typeof pattern === 'string'
+  && !REGEX_BLANK_LINE.test(pattern)
+
+  // > A line starting with # serves as a comment.
+  && pattern.indexOf('#') !== 0
+
+const createRule = (pattern, ignorecase) => {
+  const origin = pattern
+  let negative = false
+
+  // > An optional prefix "!" which negates the pattern;
+  if (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"`.
+  .replace(REGEX_LEADING_EXCAPED_EXCLAMATION, '!')
+  // > Put a backslash ("\") in front of the first hash for patterns that
+  // >   begin with a hash.
+  .replace(REGEX_LEADING_EXCAPED_HASH, '#')
+
+  const regex = make_regex(pattern, negative, ignorecase)
+
+  return {
+    origin,
+    pattern,
+    negative,
+    regex
+  }
+}
+
+class IgnoreBase {
+  constructor ({
+    ignorecase = true
+  } = {}) {
+    this._rules = []
+    this._ignorecase = ignorecase
+    define(this, KEY_IGNORE, true)
+    this._initCache()
+  }
+
+  _initCache () {
+    this._cache = Object.create(null)
+  }
+
+  // @param {Array.<string>|string|Ignore} pattern
+  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,
+    // making the behavior changed.
+    if (this._added) {
+      this._initCache()
+    }
+
+    return this
+  }
+
+  // legacy
+  addPattern (pattern) {
+    return this.add(pattern)
+  }
+
+  _addPattern (pattern) {
+    // #32
+    if (pattern && pattern[KEY_IGNORE]) {
+      this._rules = this._rules.concat(pattern._rules)
+      this._added = true
+      return
+    }
+
+    if (checkPattern(pattern)) {
+      const rule = createRule(pattern, this._ignorecase)
+      this._added = true
+      this._rules.push(rule)
+    }
+  }
+
+  filter (paths) {
+    return make_array(paths).filter(path => this._filter(path))
+  }
+
+  createFilter () {
+    return path => this._filter(path)
+  }
+
+  ignores (path) {
+    return !this._filter(path)
+  }
+
+  // @returns `Boolean` true if the `path` is NOT ignored
+  _filter (path, slices) {
+    if (!path) {
+      return false
+    }
+
+    if (path in this._cache) {
+      return this._cache[path]
+    }
+
+    if (!slices) {
+      // path/to/a.js
+      // ['path', 'to', 'a.js']
+      slices = path.split(SLASH)
+    }
+
+    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.
+      // If the path contains a parent directory, check the parent first
+      ? this._filter(slices.join(SLASH) + SLASH, slices)
+        && this._test(path)
+
+      // Or only test the path
+      : this._test(path)
+  }
+
+  // @returns {Boolean} true if a file is NOT ignored
+  _test (path) {
+    // Explicitly define variable type by setting matched to `0`
+    let matched = 0
+
+    this._rules.forEach(rule => {
+      // if matched = true, then we only test negative rules
+      // if matched = false, then we test non-negative rules
+      if (!(matched ^ rule.negative)) {
+        matched = rule.negative ^ rule.regex.test(path)
+      }
+    })
+
+    return !matched
+  }
+}
+
+// Windows
+// --------------------------------------------------------------
+/* istanbul ignore if  */
+if (
+  // Detect `process` so that it can run in browsers.
+  typeof process !== 'undefined'
+  && (
+    process.env && process.env.IGNORE_TEST_WIN32
+    || process.platform === 'win32'
+  )
+) {
+  const filter = IgnoreBase.prototype._filter
+
+  /* eslint no-control-regex: "off" */
+  const make_posix = str => /^\\\\\?\\/.test(str)
+  || /[^\x00-\x80]+/.test(str)
+    ? str
+    : str.replace(/\\/g, '/')
+
+  IgnoreBase.prototype._filter = function filterWin32 (path, slices) {
+    path = make_posix(path)
+    return filter.call(this, path, slices)
+  }
+}
+
+module.exports = options => new IgnoreBase(options)
diff --git a/server/node_modules/@eslint/eslintrc/node_modules/ignore/legacy.js b/server/node_modules/@eslint/eslintrc/node_modules/ignore/legacy.js
new file mode 100644
index 0000000000000000000000000000000000000000..14f377d77fa5a3d429c146607e2ed7473f0eff76
--- /dev/null
+++ b/server/node_modules/@eslint/eslintrc/node_modules/ignore/legacy.js
@@ -0,0 +1,466 @@
+'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; Object.defineProperty(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"); } }
+
+// A simple implementation of make-array
+function 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 KEY_IGNORE = typeof Symbol !== 'undefined' ? Symbol.for('node-ignore')
+/* istanbul ignore next */
+: 'node-ignore';
+
+var define = function define(object, key, value) {
+  return Object.defineProperty(object, key, { value });
+};
+
+var REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g;
+
+// Sanitize the range of a regular expression
+// The cases are complicated, see test cases for details
+var sanitizeRange = function sanitizeRange(range) {
+  return range.replace(REGEX_REGEXP_RANGE, function (match, from, to) {
+    return from.charCodeAt(0) <= to.charCodeAt(0) ? match
+    // Invalid range (out of order) which is ok for gitignore rules but
+    //   fatal for JavaScript regular expression, so eliminate it.
+    : '';
+  });
+};
+
+// > If the pattern ends with a slash,
+// > it is removed for the purpose of the following description,
+// > but it would only find a match with a directory.
+// > In other words, foo/ will match a directory foo and paths underneath it,
+// > but will not match a regular file or a symbolic link foo
+// >  (this is consistent with the way how pathspec works in general in Git).
+// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'
+// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call
+//      you could use option `mark: true` with `glob`
+
+// '`foo/`' should not continue with the '`..`'
+var DEFAULT_REPLACER_PREFIX = [
+
+// > Trailing spaces are ignored unless they are quoted with backslash ("\")
+[
+// (a\ ) -> (a )
+// (a  ) -> (a)
+// (a \ ) -> (a  )
+/\\?\s+$/, function (match) {
+  return match.indexOf('\\') === 0 ? ' ' : '';
+}],
+
+// replace (\ ) with ' '
+[/\\\s/g, function () {
+  return ' ';
+}],
+
+// Escape metacharacters
+// which is written down by users but means special for regular expressions.
+
+// > There are 12 characters with special meanings:
+// > - the backslash \,
+// > - the caret ^,
+// > - the dollar sign $,
+// > - the period or dot .,
+// > - the vertical bar or pipe symbol |,
+// > - the question mark ?,
+// > - the asterisk or star *,
+// > - the plus sign +,
+// > - the opening parenthesis (,
+// > - the closing parenthesis ),
+// > - and the opening square bracket [,
+// > - the opening curly brace {,
+// > These special characters are often called "metacharacters".
+[/[\\^$.|*+(){]/g, function (match) {
+  return `\\${match}`;
+}], [
+// > [abc] matches any character inside the brackets
+// >    (in this case a, b, or c);
+/\[([^\]/]*)($|\])/g, function (match, p1, p2) {
+  return p2 === ']' ? `[${sanitizeRange(p1)}]` : `\\${match}`;
+}], [
+// > a question mark (?) matches a single character
+/(?!\\)\?/g, function () {
+  return '[^/]';
+}],
+
+// leading slash
+[
+
+// > A leading slash matches the beginning of the pathname.
+// > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".
+// A leading slash matches the beginning of the pathname
+/^\//, function () {
+  return '^';
+}],
+
+// replace special metacharacter slash after the leading slash
+[/\//g, function () {
+  return '\\/';
+}], [
+// > A leading "**" followed by a slash means match in all directories.
+// > For example, "**/foo" matches file or directory "foo" anywhere,
+// > the same as pattern "foo".
+// > "**/foo/bar" matches file or directory "bar" anywhere that is directly
+// >   under directory "foo".
+// Notice that the '*'s have been replaced as '\\*'
+/^\^*\\\*\\\*\\\//,
+
+// '**/foo' <-> 'foo'
+function () {
+  return '^(?:.*\\/)?';
+}]];
+
+var DEFAULT_REPLACER_SUFFIX = [
+// starting
+[
+// there will be no leading '/'
+//   (which has been replaced by section "leading slash")
+// If starts with '**', adding a '^' to the regular expression also works
+/^(?=[^^])/, function startingReplacer() {
+  return !/\/(?!$)/.test(this)
+  // > If the pattern does not contain a slash /,
+  // >   Git treats it as a shell glob pattern
+  // Actually, if there is only a trailing slash,
+  //   git also treats it as a shell glob pattern
+  ? '(?:^|\\/)'
+
+  // > Otherwise, Git treats the pattern as a shell glob suitable for
+  // >   consumption by fnmatch(3)
+  : '^';
+}],
+
+// two globstars
+[
+// Use lookahead assertions so that we could match more than one `'/**'`
+/\\\/\\\*\\\*(?=\\\/|$)/g,
+
+// Zero, one or several directories
+// should not use '*', or it will be replaced by the next replacer
+
+// Check if it is not the last `'/**'`
+function (match, index, str) {
+  return index + 6 < str.length
+
+  // case: /**/
+  // > A slash followed by two consecutive asterisks then a slash matches
+  // >   zero or more directories.
+  // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on.
+  // '/**/'
+  ? '(?:\\/[^\\/]+)*'
+
+  // case: /**
+  // > A trailing `"/**"` matches everything inside.
+
+  // #21: everything inside but it should not include the current folder
+  : '\\/.+';
+}],
+
+// intermediate wildcards
+[
+// Never replace escaped '*'
+// ignore rule '\*' will match the path '*'
+
+// 'abc.*/' -> go
+// 'abc.*'  -> skip this rule
+/(^|[^\\]+)\\\*(?=.+)/g,
+
+// '*.js' matches '.js'
+// '*.js' doesn't match 'abc'
+function (match, p1) {
+  return `${p1}[^\\/]*`;
+}],
+
+// trailing wildcard
+[/(\^|\\\/)?\\\*$/, function (match, p1) {
+  var prefix = p1
+  // '\^':
+  // '/*' does not match ''
+  // '/*' does not match everything
+
+  // '\\\/':
+  // 'abc/*' does not match 'abc/'
+  ? `${p1}[^/]+`
+
+  // 'a*' matches 'a'
+  // 'a*' matches 'aa'
+  : '[^/]*';
+
+  return `${prefix}(?=$|\\/$)`;
+}], [
+// unescape
+/\\\\\\/g, function () {
+  return '\\';
+}]];
+
+var POSITIVE_REPLACERS = [].concat(DEFAULT_REPLACER_PREFIX, [
+
+// 'f'
+// matches
+// - /f(end)
+// - /f/
+// - (start)f(end)
+// - (start)f/
+// doesn't match
+// - oof
+// - foo
+// pseudo:
+// -> (^|/)f(/|$)
+
+// ending
+[
+// 'js' will not match 'js.'
+// 'ab' will not match 'abc'
+/(?:[^*/])$/,
+
+// 'js*' will not match 'a.js'
+// 'js/' will not match 'a.js'
+// 'js' will match 'a.js' and 'a.js/'
+function (match) {
+  return `${match}(?=$|\\/)`;
+}]], DEFAULT_REPLACER_SUFFIX);
+
+var NEGATIVE_REPLACERS = [].concat(DEFAULT_REPLACER_PREFIX, [
+
+// #24, #38
+// The MISSING rule of [gitignore docs](https://git-scm.com/docs/gitignore)
+// A negative pattern without a trailing wildcard should not
+// re-include the things inside that directory.
+
+// eg:
+// ['node_modules/*', '!node_modules']
+// should ignore `node_modules/a.js`
+[/(?:[^*])$/, function (match) {
+  return `${match}(?=$|\\/$)`;
+}]], DEFAULT_REPLACER_SUFFIX);
+
+// A simple cache, because an ignore rule only has only one certain meaning
+var cache = Object.create(null);
+
+// @param {pattern}
+var make_regex = function make_regex(pattern, negative, ignorecase) {
+  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] = ignorecase ? new RegExp(source, 'i') : new RegExp(source);
+};
+
+// > A blank line matches no files, so it can serve as a separator for readability.
+var checkPattern = function checkPattern(pattern) {
+  return pattern && typeof pattern === 'string' && !REGEX_BLANK_LINE.test(pattern)
+
+  // > A line starting with # serves as a comment.
+  && pattern.indexOf('#') !== 0;
+};
+
+var createRule = function createRule(pattern, ignorecase) {
+  var origin = pattern;
+  var negative = false;
+
+  // > An optional prefix "!" which negates the pattern;
+  if (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"`.
+  .replace(REGEX_LEADING_EXCAPED_EXCLAMATION, '!')
+  // > Put a backslash ("\") in front of the first hash for patterns that
+  // >   begin with a hash.
+  .replace(REGEX_LEADING_EXCAPED_HASH, '#');
+
+  var regex = make_regex(pattern, negative, ignorecase);
+
+  return {
+    origin,
+    pattern,
+    negative,
+    regex
+  };
+};
+
+var IgnoreBase = function () {
+  function IgnoreBase() {
+    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
+        _ref$ignorecase = _ref.ignorecase,
+        ignorecase = _ref$ignorecase === undefined ? true : _ref$ignorecase;
+
+    _classCallCheck(this, IgnoreBase);
+
+    this._rules = [];
+    this._ignorecase = ignorecase;
+    define(this, KEY_IGNORE, true);
+    this._initCache();
+  }
+
+  _createClass(IgnoreBase, [{
+    key: '_initCache',
+    value: function _initCache() {
+      this._cache = Object.create(null);
+    }
+
+    // @param {Array.<string>|string|Ignore} pattern
+
+  }, {
+    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,
+      // making the behavior changed.
+      if (this._added) {
+        this._initCache();
+      }
+
+      return this;
+    }
+
+    // legacy
+
+  }, {
+    key: 'addPattern',
+    value: function addPattern(pattern) {
+      return this.add(pattern);
+    }
+  }, {
+    key: '_addPattern',
+    value: function _addPattern(pattern) {
+      // #32
+      if (pattern && pattern[KEY_IGNORE]) {
+        this._rules = this._rules.concat(pattern._rules);
+        this._added = true;
+        return;
+      }
+
+      if (checkPattern(pattern)) {
+        var rule = createRule(pattern, this._ignorecase);
+        this._added = true;
+        this._rules.push(rule);
+      }
+    }
+  }, {
+    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);
+    }
+
+    // @returns `Boolean` true if the `path` is NOT ignored
+
+  }, {
+    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
+        // ['path', 'to', 'a.js']
+        slices = path.split(SLASH);
+      }
+
+      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.
+      // If the path contains a parent directory, check the parent first
+      ? this._filter(slices.join(SLASH) + SLASH, slices) && this._test(path)
+
+      // Or only test the path
+      : this._test(path);
+    }
+
+    // @returns {Boolean} true if a file is NOT ignored
+
+  }, {
+    key: '_test',
+    value: function _test(path) {
+      // Explicitly define variable type by setting matched to `0`
+      var matched = 0;
+
+      this._rules.forEach(function (rule) {
+        // if matched = true, then we only test negative rules
+        // if matched = false, then we test non-negative rules
+        if (!(matched ^ rule.negative)) {
+          matched = rule.negative ^ rule.regex.test(path);
+        }
+      });
+
+      return !matched;
+    }
+  }]);
+
+  return IgnoreBase;
+}();
+
+// Windows
+// --------------------------------------------------------------
+/* istanbul ignore if  */
+
+
+if (
+// Detect `process` so that it can run in browsers.
+typeof process !== 'undefined' && (process.env && process.env.IGNORE_TEST_WIN32 || process.platform === 'win32')) {
+  var filter = IgnoreBase.prototype._filter;
+
+  /* eslint no-control-regex: "off" */
+  var make_posix = function make_posix(str) {
+    return (/^\\\\\?\\/.test(str) || /[^\x00-\x80]+/.test(str) ? str : str.replace(/\\/g, '/')
+    );
+  };
+
+  IgnoreBase.prototype._filter = function filterWin32(path, slices) {
+    path = make_posix(path);
+    return filter.call(this, path, slices);
+  };
+}
+
+module.exports = function (options) {
+  return new IgnoreBase(options);
+};
diff --git a/server/node_modules/@eslint/eslintrc/node_modules/ignore/package.json b/server/node_modules/@eslint/eslintrc/node_modules/ignore/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..94b0db9a6256a65c4ea11a35e17182fdf601f14a
--- /dev/null
+++ b/server/node_modules/@eslint/eslintrc/node_modules/ignore/package.json
@@ -0,0 +1,92 @@
+{
+  "_from": "ignore@^4.0.6",
+  "_id": "ignore@4.0.6",
+  "_inBundle": false,
+  "_integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+  "_location": "/@eslint/eslintrc/ignore",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "ignore@^4.0.6",
+    "name": "ignore",
+    "escapedName": "ignore",
+    "rawSpec": "^4.0.6",
+    "saveSpec": null,
+    "fetchSpec": "^4.0.6"
+  },
+  "_requiredBy": [
+    "/@eslint/eslintrc"
+  ],
+  "_resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+  "_shasum": "750e3db5862087b4737ebac8207ffd1ef27b25fc",
+  "_spec": "ignore@^4.0.6",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\@eslint\\eslintrc",
+  "author": {
+    "name": "kael"
+  },
+  "bugs": {
+    "url": "https://github.com/kaelzhang/node-ignore/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Ignore is a manager and filter for .gitignore rules.",
+  "devDependencies": {
+    "babel-cli": "^6.26.0",
+    "babel-preset-env": "^1.7.0",
+    "codecov": "^3.0.4",
+    "eslint": "^5.3.0",
+    "eslint-config-ostai": "^1.3.2",
+    "eslint-plugin-import": "^2.13.0",
+    "mkdirp": "^0.5.1",
+    "pre-suf": "^1.1.0",
+    "rimraf": "^2.6.2",
+    "spawn-sync": "^2.0.0",
+    "tap": "^12.0.1",
+    "tmp": "0.0.33",
+    "typescript": "^3.0.1"
+  },
+  "engines": {
+    "node": ">= 4"
+  },
+  "files": [
+    "legacy.js",
+    "index.js",
+    "index.d.ts",
+    "LICENSE-MIT"
+  ],
+  "homepage": "https://github.com/kaelzhang/node-ignore#readme",
+  "keywords": [
+    "ignore",
+    ".gitignore",
+    "gitignore",
+    "npmignore",
+    "rules",
+    "manager",
+    "filter",
+    "regexp",
+    "regex",
+    "fnmatch",
+    "glob",
+    "asterisks",
+    "regular-expression"
+  ],
+  "license": "MIT",
+  "name": "ignore",
+  "repository": {
+    "type": "git",
+    "url": "git+ssh://git@github.com/kaelzhang/node-ignore.git"
+  },
+  "scripts": {
+    "build": "babel -o legacy.js index.js",
+    "posttest": "tap --coverage-report=html && codecov",
+    "prepublish": "npm run build",
+    "test": "npm run test-no-cov",
+    "test-no-cov": "npm run test:lint && npm run test:tsc && tap test/*.js --coverage",
+    "test:git": "tap test/git-check-ignore.js",
+    "test:ignore": "tap test/ignore.js --coverage",
+    "test:lint": "eslint .",
+    "test:tsc": "tsc ./test/ts/simple.ts"
+  },
+  "version": "4.0.6"
+}
diff --git a/server/node_modules/@nodelib/fs.scandir/LICENSE b/server/node_modules/@nodelib/fs.scandir/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..65a999460170355f6383b8f122da09e66e485165
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Denis Malinochkin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/server/node_modules/@nodelib/fs.scandir/README.md b/server/node_modules/@nodelib/fs.scandir/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e0b218b9f090cbf38b4a75f1f6b83b46bf8e4476
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/README.md
@@ -0,0 +1,171 @@
+# @nodelib/fs.scandir
+
+> List files and directories inside the specified directory.
+
+## :bulb: Highlights
+
+The package is aimed at obtaining information about entries in the directory.
+
+* :moneybag: Returns useful information: `name`, `path`, `dirent` and `stats` (optional).
+* :gear: On Node.js 10.10+ uses the mechanism without additional calls to determine the entry type. See [`old` and `modern` mode](#old-and-modern-mode).
+* :link: Can safely work with broken symbolic links.
+
+## Install
+
+```console
+npm install @nodelib/fs.scandir
+```
+
+## Usage
+
+```ts
+import * as fsScandir from '@nodelib/fs.scandir';
+
+fsScandir.scandir('path', (error, stats) => { /* … */ });
+```
+
+## API
+
+### .scandir(path, [optionsOrSettings], callback)
+
+Returns an array of plain objects ([`Entry`](#entry)) with information about entry for provided path with standard callback-style.
+
+```ts
+fsScandir.scandir('path', (error, entries) => { /* … */ });
+fsScandir.scandir('path', {}, (error, entries) => { /* … */ });
+fsScandir.scandir('path', new fsScandir.Settings(), (error, entries) => { /* … */ });
+```
+
+### .scandirSync(path, [optionsOrSettings])
+
+Returns an array of plain objects ([`Entry`](#entry)) with information about entry for provided path.
+
+```ts
+const entries = fsScandir.scandirSync('path');
+const entries = fsScandir.scandirSync('path', {});
+const entries = fsScandir.scandirSync(('path', new fsScandir.Settings());
+```
+
+#### path
+
+* Required: `true`
+* Type: `string | Buffer | URL`
+
+A path to a file. If a URL is provided, it must use the `file:` protocol.
+
+#### optionsOrSettings
+
+* Required: `false`
+* Type: `Options | Settings`
+* Default: An instance of `Settings` class
+
+An [`Options`](#options) object or an instance of [`Settings`](#settingsoptions) class.
+
+> :book: When you pass a plain object, an instance of the `Settings` class will be created automatically. If you plan to call the method frequently, use a pre-created instance of the `Settings` class.
+
+### Settings([options])
+
+A class of full settings of the package.
+
+```ts
+const settings = new fsScandir.Settings({ followSymbolicLinks: false });
+
+const entries = fsScandir.scandirSync('path', settings);
+```
+
+## Entry
+
+* `name` — The name of the entry (`unknown.txt`).
+* `path` — The path of the entry relative to call directory (`root/unknown.txt`).
+* `dirent` — An instance of [`fs.Dirent`](./src/types/index.ts) class. On Node.js below 10.10 will be emulated by [`DirentFromStats`](./src/utils/fs.ts) class.
+* `stats` (optional) — An instance of `fs.Stats` class.
+
+For example, the `scandir` call for `tools` directory with one directory inside:
+
+```ts
+{
+	dirent: Dirent { name: 'typedoc', /* … */ },
+	name: 'typedoc',
+	path: 'tools/typedoc'
+}
+```
+
+## Options
+
+### stats
+
+* Type: `boolean`
+* Default: `false`
+
+Adds an instance of `fs.Stats` class to the [`Entry`](#entry).
+
+> :book: Always use `fs.readdir` without the `withFileTypes` option. ??TODO??
+
+### followSymbolicLinks
+
+* Type: `boolean`
+* Default: `false`
+
+Follow symbolic links or not. Call `fs.stat` on symbolic link if `true`.
+
+### `throwErrorOnBrokenSymbolicLink`
+
+* Type: `boolean`
+* Default: `true`
+
+Throw an error when symbolic link is broken if `true` or safely use `lstat` call if `false`.
+
+### `pathSegmentSeparator`
+
+* Type: `string`
+* Default: `path.sep`
+
+By default, this package uses the correct path separator for your OS (`\` on Windows, `/` on Unix-like systems). But you can set this option to any separator character(s) that you want to use instead.
+
+### `fs`
+
+* Type: [`FileSystemAdapter`](./src/adapters/fs.ts)
+* Default: A default FS methods
+
+By default, the built-in Node.js module (`fs`) is used to work with the file system. You can replace any method with your own.
+
+```ts
+interface FileSystemAdapter {
+	lstat?: typeof fs.lstat;
+	stat?: typeof fs.stat;
+	lstatSync?: typeof fs.lstatSync;
+	statSync?: typeof fs.statSync;
+	readdir?: typeof fs.readdir;
+	readdirSync?: typeof fs.readdirSync;
+}
+
+const settings = new fsScandir.Settings({
+	fs: { lstat: fakeLstat }
+});
+```
+
+## `old` and `modern` mode
+
+This package has two modes that are used depending on the environment and parameters of use.
+
+### old
+
+* Node.js below `10.10` or when the `stats` option is enabled
+
+When working in the old mode, the directory is read first (`fs.readdir`), then the type of entries is determined (`fs.lstat` and/or `fs.stat` for symbolic links).
+
+### modern
+
+* Node.js 10.10+ and the `stats` option is disabled
+
+In the modern mode, reading the directory (`fs.readdir` with the `withFileTypes` option) is combined with obtaining information about its entries. An additional call for symbolic links (`fs.stat`) is still present.
+
+This mode makes fewer calls to the file system. It's faster.
+
+## Changelog
+
+See the [Releases section of our GitHub project](https://github.com/nodelib/nodelib/releases) for changelog for each release version.
+
+## License
+
+This software is released under the terms of the MIT license.
diff --git a/server/node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts b/server/node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6a0bb76c9724e2741f0e734961ff7e1f8c6509c2
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts
@@ -0,0 +1,13 @@
+/// <reference types="node" />
+import * as fs from 'fs';
+export declare type FileSystemAdapter = {
+    lstat: typeof fs.lstat;
+    stat: typeof fs.stat;
+    lstatSync: typeof fs.lstatSync;
+    statSync: typeof fs.statSync;
+    readdir: typeof fs.readdir;
+    readdirSync: typeof fs.readdirSync;
+};
+export declare const FILE_SYSTEM_ADAPTER: FileSystemAdapter;
+export declare function createFileSystemAdapter(fsMethods?: Partial<FileSystemAdapter>): FileSystemAdapter;
+//# sourceMappingURL=fs.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.scandir/out/adapters/fs.js b/server/node_modules/@nodelib/fs.scandir/out/adapters/fs.js
new file mode 100644
index 0000000000000000000000000000000000000000..a4e8d2b89719ffb678640732d016f035118181fe
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/adapters/fs.js
@@ -0,0 +1,18 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs = require("fs");
+exports.FILE_SYSTEM_ADAPTER = {
+    lstat: fs.lstat,
+    stat: fs.stat,
+    lstatSync: fs.lstatSync,
+    statSync: fs.statSync,
+    readdir: fs.readdir,
+    readdirSync: fs.readdirSync
+};
+function createFileSystemAdapter(fsMethods) {
+    if (fsMethods === undefined) {
+        return exports.FILE_SYSTEM_ADAPTER;
+    }
+    return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
+}
+exports.createFileSystemAdapter = createFileSystemAdapter;
diff --git a/server/node_modules/@nodelib/fs.scandir/out/constants.d.ts b/server/node_modules/@nodelib/fs.scandir/out/constants.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8cb5129d75eefb18b2125f39e1ff296b02fd8c9b
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/constants.d.ts
@@ -0,0 +1,5 @@
+/**
+ * IS `true` for Node.js 10.10 and greater.
+ */
+export declare const IS_SUPPORT_READDIR_WITH_FILE_TYPES: boolean;
+//# sourceMappingURL=constants.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.scandir/out/constants.js b/server/node_modules/@nodelib/fs.scandir/out/constants.js
new file mode 100644
index 0000000000000000000000000000000000000000..9df78396fce9bb482016933b84bf2633c1594b63
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/constants.js
@@ -0,0 +1,13 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');
+const MAJOR_VERSION = parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);
+const MINOR_VERSION = parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);
+const SUPPORTED_MAJOR_VERSION = 10;
+const SUPPORTED_MINOR_VERSION = 10;
+const IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;
+const IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;
+/**
+ * IS `true` for Node.js 10.10 and greater.
+ */
+exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;
diff --git a/server/node_modules/@nodelib/fs.scandir/out/index.d.ts b/server/node_modules/@nodelib/fs.scandir/out/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2a5ba216343be2fa6054f05a029663af6587db1f
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/index.d.ts
@@ -0,0 +1,13 @@
+import { FileSystemAdapter } from './adapters/fs';
+import * as async from './providers/async';
+import Settings, { Options } from './settings';
+import { Dirent, Entry } from './types';
+declare type AsyncCallback = async.AsyncCallback;
+declare function scandir(path: string, callback: AsyncCallback): void;
+declare function scandir(path: string, optionsOrSettings: Options | Settings, callback: AsyncCallback): void;
+declare namespace scandir {
+    function __promisify__(path: string, optionsOrSettings?: Options | Settings): Promise<Entry[]>;
+}
+declare function scandirSync(path: string, optionsOrSettings?: Options | Settings): Entry[];
+export { scandir, scandirSync, Settings, AsyncCallback, Dirent, Entry, FileSystemAdapter, Options };
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.scandir/out/index.js b/server/node_modules/@nodelib/fs.scandir/out/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..a1e95f95eb4aca8c1900c1dfef78aa04a7be8e3c
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/index.js
@@ -0,0 +1,24 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const async = require("./providers/async");
+const sync = require("./providers/sync");
+const settings_1 = require("./settings");
+exports.Settings = settings_1.default;
+function scandir(path, optionsOrSettingsOrCallback, callback) {
+    if (typeof optionsOrSettingsOrCallback === 'function') {
+        return async.read(path, getSettings(), optionsOrSettingsOrCallback);
+    }
+    async.read(path, getSettings(optionsOrSettingsOrCallback), callback);
+}
+exports.scandir = scandir;
+function scandirSync(path, optionsOrSettings) {
+    const settings = getSettings(optionsOrSettings);
+    return sync.read(path, settings);
+}
+exports.scandirSync = scandirSync;
+function getSettings(settingsOrOptions = {}) {
+    if (settingsOrOptions instanceof settings_1.default) {
+        return settingsOrOptions;
+    }
+    return new settings_1.default(settingsOrOptions);
+}
diff --git a/server/node_modules/@nodelib/fs.scandir/out/providers/async.d.ts b/server/node_modules/@nodelib/fs.scandir/out/providers/async.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9b1e307d507fe50b90b5a917d46bd37bae633511
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/providers/async.d.ts
@@ -0,0 +1,8 @@
+/// <reference types="node" />
+import Settings from '../settings';
+import { Entry } from '../types';
+export declare type AsyncCallback = (err: NodeJS.ErrnoException, entries: Entry[]) => void;
+export declare function read(directory: string, settings: Settings, callback: AsyncCallback): void;
+export declare function readdirWithFileTypes(directory: string, settings: Settings, callback: AsyncCallback): void;
+export declare function readdir(directory: string, settings: Settings, callback: AsyncCallback): void;
+//# sourceMappingURL=async.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.scandir/out/providers/async.js b/server/node_modules/@nodelib/fs.scandir/out/providers/async.js
new file mode 100644
index 0000000000000000000000000000000000000000..18a613ee982d0a7522e48d04ea892d029cf13364
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/providers/async.js
@@ -0,0 +1,90 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const fsStat = require("@nodelib/fs.stat");
+const rpl = require("run-parallel");
+const constants_1 = require("../constants");
+const utils = require("../utils");
+function read(directory, settings, callback) {
+    if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
+        return readdirWithFileTypes(directory, settings, callback);
+    }
+    return readdir(directory, settings, callback);
+}
+exports.read = read;
+function readdirWithFileTypes(directory, settings, callback) {
+    settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {
+        if (readdirError !== null) {
+            return callFailureCallback(callback, readdirError);
+        }
+        const entries = dirents.map((dirent) => ({
+            dirent,
+            name: dirent.name,
+            path: `${directory}${settings.pathSegmentSeparator}${dirent.name}`
+        }));
+        if (!settings.followSymbolicLinks) {
+            return callSuccessCallback(callback, entries);
+        }
+        const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));
+        rpl(tasks, (rplError, rplEntries) => {
+            if (rplError !== null) {
+                return callFailureCallback(callback, rplError);
+            }
+            callSuccessCallback(callback, rplEntries);
+        });
+    });
+}
+exports.readdirWithFileTypes = readdirWithFileTypes;
+function makeRplTaskEntry(entry, settings) {
+    return (done) => {
+        if (!entry.dirent.isSymbolicLink()) {
+            return done(null, entry);
+        }
+        settings.fs.stat(entry.path, (statError, stats) => {
+            if (statError !== null) {
+                if (settings.throwErrorOnBrokenSymbolicLink) {
+                    return done(statError);
+                }
+                return done(null, entry);
+            }
+            entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
+            return done(null, entry);
+        });
+    };
+}
+function readdir(directory, settings, callback) {
+    settings.fs.readdir(directory, (readdirError, names) => {
+        if (readdirError !== null) {
+            return callFailureCallback(callback, readdirError);
+        }
+        const filepaths = names.map((name) => `${directory}${settings.pathSegmentSeparator}${name}`);
+        const tasks = filepaths.map((filepath) => {
+            return (done) => fsStat.stat(filepath, settings.fsStatSettings, done);
+        });
+        rpl(tasks, (rplError, results) => {
+            if (rplError !== null) {
+                return callFailureCallback(callback, rplError);
+            }
+            const entries = [];
+            names.forEach((name, index) => {
+                const stats = results[index];
+                const entry = {
+                    name,
+                    path: filepaths[index],
+                    dirent: utils.fs.createDirentFromStats(name, stats)
+                };
+                if (settings.stats) {
+                    entry.stats = stats;
+                }
+                entries.push(entry);
+            });
+            callSuccessCallback(callback, entries);
+        });
+    });
+}
+exports.readdir = readdir;
+function callFailureCallback(callback, error) {
+    callback(error);
+}
+function callSuccessCallback(callback, result) {
+    callback(null, result);
+}
diff --git a/server/node_modules/@nodelib/fs.scandir/out/providers/sync.d.ts b/server/node_modules/@nodelib/fs.scandir/out/providers/sync.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5c461358bd57d2f2d8cf07596d894f0dfa8981fb
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/providers/sync.d.ts
@@ -0,0 +1,6 @@
+import Settings from '../settings';
+import { Entry } from '../types';
+export declare function read(directory: string, settings: Settings): Entry[];
+export declare function readdirWithFileTypes(directory: string, settings: Settings): Entry[];
+export declare function readdir(directory: string, settings: Settings): Entry[];
+//# sourceMappingURL=sync.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.scandir/out/providers/sync.js b/server/node_modules/@nodelib/fs.scandir/out/providers/sync.js
new file mode 100644
index 0000000000000000000000000000000000000000..46a003269131e3a036622678b0c92ad49eb3a31e
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/providers/sync.js
@@ -0,0 +1,52 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const fsStat = require("@nodelib/fs.stat");
+const constants_1 = require("../constants");
+const utils = require("../utils");
+function read(directory, settings) {
+    if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
+        return readdirWithFileTypes(directory, settings);
+    }
+    return readdir(directory, settings);
+}
+exports.read = read;
+function readdirWithFileTypes(directory, settings) {
+    const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });
+    return dirents.map((dirent) => {
+        const entry = {
+            dirent,
+            name: dirent.name,
+            path: `${directory}${settings.pathSegmentSeparator}${dirent.name}`
+        };
+        if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {
+            try {
+                const stats = settings.fs.statSync(entry.path);
+                entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
+            }
+            catch (error) {
+                if (settings.throwErrorOnBrokenSymbolicLink) {
+                    throw error;
+                }
+            }
+        }
+        return entry;
+    });
+}
+exports.readdirWithFileTypes = readdirWithFileTypes;
+function readdir(directory, settings) {
+    const names = settings.fs.readdirSync(directory);
+    return names.map((name) => {
+        const entryPath = `${directory}${settings.pathSegmentSeparator}${name}`;
+        const stats = fsStat.statSync(entryPath, settings.fsStatSettings);
+        const entry = {
+            name,
+            path: entryPath,
+            dirent: utils.fs.createDirentFromStats(name, stats)
+        };
+        if (settings.stats) {
+            entry.stats = stats;
+        }
+        return entry;
+    });
+}
+exports.readdir = readdir;
diff --git a/server/node_modules/@nodelib/fs.scandir/out/settings.d.ts b/server/node_modules/@nodelib/fs.scandir/out/settings.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1e4d12cbcb364b3e80ae0f58ebab4178adc507d1
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/settings.d.ts
@@ -0,0 +1,21 @@
+import * as fsStat from '@nodelib/fs.stat';
+import * as fs from './adapters/fs';
+export declare type Options = {
+    followSymbolicLinks?: boolean;
+    fs?: Partial<fs.FileSystemAdapter>;
+    pathSegmentSeparator?: string;
+    stats?: boolean;
+    throwErrorOnBrokenSymbolicLink?: boolean;
+};
+export default class Settings {
+    private readonly _options;
+    readonly followSymbolicLinks: boolean;
+    readonly fs: fs.FileSystemAdapter;
+    readonly pathSegmentSeparator: string;
+    readonly stats: boolean;
+    readonly throwErrorOnBrokenSymbolicLink: boolean;
+    readonly fsStatSettings: fsStat.Settings;
+    constructor(_options?: Options);
+    private _getValue;
+}
+//# sourceMappingURL=settings.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.scandir/out/settings.js b/server/node_modules/@nodelib/fs.scandir/out/settings.js
new file mode 100644
index 0000000000000000000000000000000000000000..08764a87f421ce0fd65592fba49fba6be817840c
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/settings.js
@@ -0,0 +1,24 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const path = require("path");
+const fsStat = require("@nodelib/fs.stat");
+const fs = require("./adapters/fs");
+class Settings {
+    constructor(_options = {}) {
+        this._options = _options;
+        this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);
+        this.fs = fs.createFileSystemAdapter(this._options.fs);
+        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);
+        this.stats = this._getValue(this._options.stats, false);
+        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
+        this.fsStatSettings = new fsStat.Settings({
+            followSymbolicLink: this.followSymbolicLinks,
+            fs: this.fs,
+            throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink
+        });
+    }
+    _getValue(option, value) {
+        return option === undefined ? value : option;
+    }
+}
+exports.default = Settings;
diff --git a/server/node_modules/@nodelib/fs.scandir/out/types/index.d.ts b/server/node_modules/@nodelib/fs.scandir/out/types/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..52721c9d0161a575674c66384e1a41b343ce9b59
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/types/index.d.ts
@@ -0,0 +1,20 @@
+/// <reference types="node" />
+import * as fs from 'fs';
+export declare type Entry = {
+    dirent: Dirent;
+    name: string;
+    path: string;
+    stats?: Stats;
+};
+export declare type Stats = fs.Stats;
+export declare type Dirent = {
+    isBlockDevice(): boolean;
+    isCharacterDevice(): boolean;
+    isDirectory(): boolean;
+    isFIFO(): boolean;
+    isFile(): boolean;
+    isSocket(): boolean;
+    isSymbolicLink(): boolean;
+    name: string;
+};
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.scandir/out/types/index.js b/server/node_modules/@nodelib/fs.scandir/out/types/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8ad2e549bdc6801e0d1c80b0308d4b9bd4985ce
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/types/index.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/server/node_modules/@nodelib/fs.scandir/out/utils/fs.d.ts b/server/node_modules/@nodelib/fs.scandir/out/utils/fs.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..26af98077f76f612e48df57d16c6e51f1e323005
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/utils/fs.d.ts
@@ -0,0 +1,3 @@
+import { Dirent, Stats } from '../types';
+export declare function createDirentFromStats(name: string, stats: Stats): Dirent;
+//# sourceMappingURL=fs.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.scandir/out/utils/fs.js b/server/node_modules/@nodelib/fs.scandir/out/utils/fs.js
new file mode 100644
index 0000000000000000000000000000000000000000..92d7fbfba14f1f69adeb3a052718cdb717c3ca45
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/utils/fs.js
@@ -0,0 +1,18 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+class DirentFromStats {
+    constructor(name, stats) {
+        this.name = name;
+        this.isBlockDevice = stats.isBlockDevice.bind(stats);
+        this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
+        this.isDirectory = stats.isDirectory.bind(stats);
+        this.isFIFO = stats.isFIFO.bind(stats);
+        this.isFile = stats.isFile.bind(stats);
+        this.isSocket = stats.isSocket.bind(stats);
+        this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
+    }
+}
+function createDirentFromStats(name, stats) {
+    return new DirentFromStats(name, stats);
+}
+exports.createDirentFromStats = createDirentFromStats;
diff --git a/server/node_modules/@nodelib/fs.scandir/out/utils/index.d.ts b/server/node_modules/@nodelib/fs.scandir/out/utils/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f5f39aa1bfc8bced8b0afe23b6fa9a53e02f0ba4
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/utils/index.d.ts
@@ -0,0 +1,3 @@
+import * as fs from './fs';
+export { fs };
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.scandir/out/utils/index.js b/server/node_modules/@nodelib/fs.scandir/out/utils/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..53cd02a40d4937d9e757d300cf578087f770cb8a
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/out/utils/index.js
@@ -0,0 +1,4 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs = require("./fs");
+exports.fs = fs;
diff --git a/server/node_modules/@nodelib/fs.scandir/package.json b/server/node_modules/@nodelib/fs.scandir/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..cee352639211204a89b62fabfb0f2b8e7ec163dd
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.scandir/package.json
@@ -0,0 +1,64 @@
+{
+  "_from": "@nodelib/fs.scandir@2.1.3",
+  "_id": "@nodelib/fs.scandir@2.1.3",
+  "_inBundle": false,
+  "_integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
+  "_location": "/@nodelib/fs.scandir",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "@nodelib/fs.scandir@2.1.3",
+    "name": "@nodelib/fs.scandir",
+    "escapedName": "@nodelib%2ffs.scandir",
+    "scope": "@nodelib",
+    "rawSpec": "2.1.3",
+    "saveSpec": null,
+    "fetchSpec": "2.1.3"
+  },
+  "_requiredBy": [
+    "/@nodelib/fs.walk"
+  ],
+  "_resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
+  "_shasum": "3a582bdb53804c6ba6d146579c46e52130cf4a3b",
+  "_spec": "@nodelib/fs.scandir@2.1.3",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\@nodelib\\fs.walk",
+  "bundleDependencies": false,
+  "dependencies": {
+    "@nodelib/fs.stat": "2.0.3",
+    "run-parallel": "^1.1.9"
+  },
+  "deprecated": false,
+  "description": "List files and directories inside the specified directory",
+  "engines": {
+    "node": ">= 8"
+  },
+  "gitHead": "3b1ef7554ad7c061b3580858101d483fba847abf",
+  "keywords": [
+    "NodeLib",
+    "fs",
+    "FileSystem",
+    "file system",
+    "scandir",
+    "readdir",
+    "dirent"
+  ],
+  "license": "MIT",
+  "main": "out/index.js",
+  "name": "@nodelib/fs.scandir",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.scandir"
+  },
+  "scripts": {
+    "build": "npm run clean && npm run compile && npm run lint && npm test",
+    "clean": "rimraf {tsconfig.tsbuildinfo,out}",
+    "compile": "tsc -b .",
+    "compile:watch": "tsc -p . --watch --sourceMap",
+    "lint": "eslint \"src/**/*.ts\" --cache",
+    "test": "mocha \"out/**/*.spec.js\" -s 0",
+    "watch": "npm run clean && npm run compile:watch"
+  },
+  "typings": "out/index.d.ts",
+  "version": "2.1.3"
+}
diff --git a/server/node_modules/@nodelib/fs.stat/LICENSE b/server/node_modules/@nodelib/fs.stat/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..65a999460170355f6383b8f122da09e66e485165
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.stat/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Denis Malinochkin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/server/node_modules/@nodelib/fs.stat/README.md b/server/node_modules/@nodelib/fs.stat/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..686f0471d40f2f522e53db44f5a5b7a73a65e9df
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.stat/README.md
@@ -0,0 +1,126 @@
+# @nodelib/fs.stat
+
+> Get the status of a file with some features.
+
+## :bulb: Highlights
+
+Wrapper around standard method `fs.lstat` and `fs.stat` with some features.
+
+* :beginner: Normally follows symbolic link.
+* :gear: Can safely work with broken symbolic link.
+
+## Install
+
+```console
+npm install @nodelib/fs.stat
+```
+
+## Usage
+
+```ts
+import * as fsStat from '@nodelib/fs.stat';
+
+fsStat.stat('path', (error, stats) => { /* … */ });
+```
+
+## API
+
+### .stat(path, [optionsOrSettings], callback)
+
+Returns an instance of `fs.Stats` class for provided path with standard callback-style.
+
+```ts
+fsStat.stat('path', (error, stats) => { /* … */ });
+fsStat.stat('path', {}, (error, stats) => { /* … */ });
+fsStat.stat('path', new fsStat.Settings(), (error, stats) => { /* … */ });
+```
+
+### .statSync(path, [optionsOrSettings])
+
+Returns an instance of `fs.Stats` class for provided path.
+
+```ts
+const stats = fsStat.stat('path');
+const stats = fsStat.stat('path', {});
+const stats = fsStat.stat('path', new fsStat.Settings());
+```
+
+#### path
+
+* Required: `true`
+* Type: `string | Buffer | URL`
+
+A path to a file. If a URL is provided, it must use the `file:` protocol.
+
+#### optionsOrSettings
+
+* Required: `false`
+* Type: `Options | Settings`
+* Default: An instance of `Settings` class
+
+An [`Options`](#options) object or an instance of [`Settings`](#settings) class.
+
+> :book: When you pass a plain object, an instance of the `Settings` class will be created automatically. If you plan to call the method frequently, use a pre-created instance of the `Settings` class.
+
+### Settings([options])
+
+A class of full settings of the package.
+
+```ts
+const settings = new fsStat.Settings({ followSymbolicLink: false });
+
+const stats = fsStat.stat('path', settings);
+```
+
+## Options
+
+### `followSymbolicLink`
+
+* Type: `boolean`
+* Default: `true`
+
+Follow symbolic link or not. Call `fs.stat` on symbolic link if `true`.
+
+### `markSymbolicLink`
+
+* Type: `boolean`
+* Default: `false`
+
+Mark symbolic link by setting the return value of `isSymbolicLink` function to always `true` (even after `fs.stat`).
+
+> :book: Can be used if you want to know what is hidden behind a symbolic link, but still continue to know that it is a symbolic link.
+
+### `throwErrorOnBrokenSymbolicLink`
+
+* Type: `boolean`
+* Default: `true`
+
+Throw an error when symbolic link is broken if `true` or safely return `lstat` call if `false`.
+
+### `fs`
+
+* Type: [`FileSystemAdapter`](./src/adapters/fs.ts)
+* Default: A default FS methods
+
+By default, the built-in Node.js module (`fs`) is used to work with the file system. You can replace any method with your own.
+
+```ts
+interface FileSystemAdapter {
+	lstat?: typeof fs.lstat;
+	stat?: typeof fs.stat;
+	lstatSync?: typeof fs.lstatSync;
+	statSync?: typeof fs.statSync;
+}
+
+const settings = new fsStat.Settings({
+	fs: { lstat: fakeLstat }
+});
+```
+
+## Changelog
+
+See the [Releases section of our GitHub project](https://github.com/nodelib/nodelib/releases) for changelog for each release version.
+
+## License
+
+This software is released under the terms of the MIT license.
diff --git a/server/node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts b/server/node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dbb8986af0ac5978dc460ac5398070f99b902c5e
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts
@@ -0,0 +1,11 @@
+/// <reference types="node" />
+import * as fs from 'fs';
+export declare type FileSystemAdapter = {
+    lstat: typeof fs.lstat;
+    stat: typeof fs.stat;
+    lstatSync: typeof fs.lstatSync;
+    statSync: typeof fs.statSync;
+};
+export declare const FILE_SYSTEM_ADAPTER: FileSystemAdapter;
+export declare function createFileSystemAdapter(fsMethods?: Partial<FileSystemAdapter>): FileSystemAdapter;
+//# sourceMappingURL=fs.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.stat/out/adapters/fs.js b/server/node_modules/@nodelib/fs.stat/out/adapters/fs.js
new file mode 100644
index 0000000000000000000000000000000000000000..80e3427d7765478ec65a921cf022e08e9c1fb12b
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.stat/out/adapters/fs.js
@@ -0,0 +1,16 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs = require("fs");
+exports.FILE_SYSTEM_ADAPTER = {
+    lstat: fs.lstat,
+    stat: fs.stat,
+    lstatSync: fs.lstatSync,
+    statSync: fs.statSync
+};
+function createFileSystemAdapter(fsMethods) {
+    if (fsMethods === undefined) {
+        return exports.FILE_SYSTEM_ADAPTER;
+    }
+    return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
+}
+exports.createFileSystemAdapter = createFileSystemAdapter;
diff --git a/server/node_modules/@nodelib/fs.stat/out/index.d.ts b/server/node_modules/@nodelib/fs.stat/out/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..97d5ed739d5dcb1225e021d6045885ebc6168be3
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.stat/out/index.d.ts
@@ -0,0 +1,13 @@
+import { FileSystemAdapter } from './adapters/fs';
+import * as async from './providers/async';
+import Settings, { Options } from './settings';
+import { Stats } from './types';
+declare type AsyncCallback = async.AsyncCallback;
+declare function stat(path: string, callback: AsyncCallback): void;
+declare function stat(path: string, optionsOrSettings: Options | Settings, callback: AsyncCallback): void;
+declare namespace stat {
+    function __promisify__(path: string, optionsOrSettings?: Options | Settings): Promise<Stats>;
+}
+declare function statSync(path: string, optionsOrSettings?: Options | Settings): Stats;
+export { Settings, stat, statSync, AsyncCallback, FileSystemAdapter, Options, Stats };
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.stat/out/index.js b/server/node_modules/@nodelib/fs.stat/out/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..40491a4911c98846bd3301a3eba3ae2fdf162110
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.stat/out/index.js
@@ -0,0 +1,24 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const async = require("./providers/async");
+const sync = require("./providers/sync");
+const settings_1 = require("./settings");
+exports.Settings = settings_1.default;
+function stat(path, optionsOrSettingsOrCallback, callback) {
+    if (typeof optionsOrSettingsOrCallback === 'function') {
+        return async.read(path, getSettings(), optionsOrSettingsOrCallback);
+    }
+    async.read(path, getSettings(optionsOrSettingsOrCallback), callback);
+}
+exports.stat = stat;
+function statSync(path, optionsOrSettings) {
+    const settings = getSettings(optionsOrSettings);
+    return sync.read(path, settings);
+}
+exports.statSync = statSync;
+function getSettings(settingsOrOptions = {}) {
+    if (settingsOrOptions instanceof settings_1.default) {
+        return settingsOrOptions;
+    }
+    return new settings_1.default(settingsOrOptions);
+}
diff --git a/server/node_modules/@nodelib/fs.stat/out/providers/async.d.ts b/server/node_modules/@nodelib/fs.stat/out/providers/async.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9914f7c5d5d17f01bbcfc001042756798ae4eefe
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.stat/out/providers/async.d.ts
@@ -0,0 +1,5 @@
+import Settings from '../settings';
+import { ErrnoException, Stats } from '../types';
+export declare type AsyncCallback = (err: ErrnoException, stats: Stats) => void;
+export declare function read(path: string, settings: Settings, callback: AsyncCallback): void;
+//# sourceMappingURL=async.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.stat/out/providers/async.js b/server/node_modules/@nodelib/fs.stat/out/providers/async.js
new file mode 100644
index 0000000000000000000000000000000000000000..39a2d787c878aecd195adad60472110a180f6964
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.stat/out/providers/async.js
@@ -0,0 +1,31 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+function read(path, settings, callback) {
+    settings.fs.lstat(path, (lstatError, lstat) => {
+        if (lstatError !== null) {
+            return callFailureCallback(callback, lstatError);
+        }
+        if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
+            return callSuccessCallback(callback, lstat);
+        }
+        settings.fs.stat(path, (statError, stat) => {
+            if (statError !== null) {
+                if (settings.throwErrorOnBrokenSymbolicLink) {
+                    return callFailureCallback(callback, statError);
+                }
+                return callSuccessCallback(callback, lstat);
+            }
+            if (settings.markSymbolicLink) {
+                stat.isSymbolicLink = () => true;
+            }
+            callSuccessCallback(callback, stat);
+        });
+    });
+}
+exports.read = read;
+function callFailureCallback(callback, error) {
+    callback(error);
+}
+function callSuccessCallback(callback, result) {
+    callback(null, result);
+}
diff --git a/server/node_modules/@nodelib/fs.stat/out/providers/sync.d.ts b/server/node_modules/@nodelib/fs.stat/out/providers/sync.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6dcce9d109679f3c8ec93341a7eb81e1701cc041
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.stat/out/providers/sync.d.ts
@@ -0,0 +1,4 @@
+import Settings from '../settings';
+import { Stats } from '../types';
+export declare function read(path: string, settings: Settings): Stats;
+//# sourceMappingURL=sync.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.stat/out/providers/sync.js b/server/node_modules/@nodelib/fs.stat/out/providers/sync.js
new file mode 100644
index 0000000000000000000000000000000000000000..6200dcc782586eff1db6c89c6be4b976552e3ad9
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.stat/out/providers/sync.js
@@ -0,0 +1,22 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+function read(path, settings) {
+    const lstat = settings.fs.lstatSync(path);
+    if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
+        return lstat;
+    }
+    try {
+        const stat = settings.fs.statSync(path);
+        if (settings.markSymbolicLink) {
+            stat.isSymbolicLink = () => true;
+        }
+        return stat;
+    }
+    catch (error) {
+        if (!settings.throwErrorOnBrokenSymbolicLink) {
+            return lstat;
+        }
+        throw error;
+    }
+}
+exports.read = read;
diff --git a/server/node_modules/@nodelib/fs.stat/out/settings.d.ts b/server/node_modules/@nodelib/fs.stat/out/settings.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a7fd1b4069ea30e5afb6fac7f055eaaa8a8bd477
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.stat/out/settings.d.ts
@@ -0,0 +1,17 @@
+import * as fs from './adapters/fs';
+export declare type Options = {
+    followSymbolicLink?: boolean;
+    fs?: Partial<fs.FileSystemAdapter>;
+    markSymbolicLink?: boolean;
+    throwErrorOnBrokenSymbolicLink?: boolean;
+};
+export default class Settings {
+    private readonly _options;
+    readonly followSymbolicLink: boolean;
+    readonly fs: fs.FileSystemAdapter;
+    readonly markSymbolicLink: boolean;
+    readonly throwErrorOnBrokenSymbolicLink: boolean;
+    constructor(_options?: Options);
+    private _getValue;
+}
+//# sourceMappingURL=settings.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.stat/out/settings.js b/server/node_modules/@nodelib/fs.stat/out/settings.js
new file mode 100644
index 0000000000000000000000000000000000000000..d3603a3e36b1913bc536d37bc593c4652646cf77
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.stat/out/settings.js
@@ -0,0 +1,16 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs = require("./adapters/fs");
+class Settings {
+    constructor(_options = {}) {
+        this._options = _options;
+        this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);
+        this.fs = fs.createFileSystemAdapter(this._options.fs);
+        this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);
+        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
+    }
+    _getValue(option, value) {
+        return option === undefined ? value : option;
+    }
+}
+exports.default = Settings;
diff --git a/server/node_modules/@nodelib/fs.stat/out/types/index.d.ts b/server/node_modules/@nodelib/fs.stat/out/types/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0f34b0937ee8c47d349ed10fa818093bd351d185
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.stat/out/types/index.d.ts
@@ -0,0 +1,5 @@
+/// <reference types="node" />
+import * as fs from 'fs';
+export declare type Stats = fs.Stats;
+export declare type ErrnoException = NodeJS.ErrnoException;
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.stat/out/types/index.js b/server/node_modules/@nodelib/fs.stat/out/types/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8ad2e549bdc6801e0d1c80b0308d4b9bd4985ce
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.stat/out/types/index.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/server/node_modules/@nodelib/fs.stat/package.json b/server/node_modules/@nodelib/fs.stat/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..2b214506a64a70e5d020ea8a2330861a25331ea2
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.stat/package.json
@@ -0,0 +1,59 @@
+{
+  "_from": "@nodelib/fs.stat@^2.0.2",
+  "_id": "@nodelib/fs.stat@2.0.3",
+  "_inBundle": false,
+  "_integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
+  "_location": "/@nodelib/fs.stat",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@nodelib/fs.stat@^2.0.2",
+    "name": "@nodelib/fs.stat",
+    "escapedName": "@nodelib%2ffs.stat",
+    "scope": "@nodelib",
+    "rawSpec": "^2.0.2",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.2"
+  },
+  "_requiredBy": [
+    "/@nodelib/fs.scandir",
+    "/fast-glob"
+  ],
+  "_resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
+  "_shasum": "34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3",
+  "_spec": "@nodelib/fs.stat@^2.0.2",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\fast-glob",
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Get the status of a file with some features",
+  "engines": {
+    "node": ">= 8"
+  },
+  "gitHead": "3b1ef7554ad7c061b3580858101d483fba847abf",
+  "keywords": [
+    "NodeLib",
+    "fs",
+    "FileSystem",
+    "file system",
+    "stat"
+  ],
+  "license": "MIT",
+  "main": "out/index.js",
+  "name": "@nodelib/fs.stat",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat"
+  },
+  "scripts": {
+    "build": "npm run clean && npm run compile && npm run lint && npm test",
+    "clean": "rimraf {tsconfig.tsbuildinfo,out}",
+    "compile": "tsc -b .",
+    "compile:watch": "tsc -p . --watch --sourceMap",
+    "lint": "eslint \"src/**/*.ts\" --cache",
+    "test": "mocha \"out/**/*.spec.js\" -s 0",
+    "watch": "npm run clean && npm run compile:watch"
+  },
+  "typings": "out/index.d.ts",
+  "version": "2.0.3"
+}
diff --git a/server/node_modules/@nodelib/fs.walk/LICENSE b/server/node_modules/@nodelib/fs.walk/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..65a999460170355f6383b8f122da09e66e485165
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Denis Malinochkin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/server/node_modules/@nodelib/fs.walk/README.md b/server/node_modules/@nodelib/fs.walk/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..6ccc08db4a10bca492f2db7b547b98a7f22a4e8c
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/README.md
@@ -0,0 +1,215 @@
+# @nodelib/fs.walk
+
+> A library for efficiently walking a directory recursively.
+
+## :bulb: Highlights
+
+* :moneybag: Returns useful information: `name`, `path`, `dirent` and `stats` (optional).
+* :rocket: On Node.js 10.10+ uses the mechanism without additional calls to determine the entry type for performance reasons. See [`old` and `modern` mode](https://github.com/nodelib/nodelib/blob/master/packages/fs/fs.scandir/README.md#old-and-modern-mode).
+* :gear: Built-in directories/files and error filtering system.
+* :link: Can safely work with broken symbolic links.
+
+## Install
+
+```console
+npm install @nodelib/fs.walk
+```
+
+## Usage
+
+```ts
+import * as fsWalk from '@nodelib/fs.walk';
+
+fsWalk.walk('path', (error, entries) => { /* … */ });
+```
+
+## API
+
+### .walk(path, [optionsOrSettings], callback)
+
+Reads the directory recursively and asynchronously. Requires a callback function.
+
+> :book: If you want to use the Promise API, use `util.promisify`.
+
+```ts
+fsWalk.walk('path', (error, entries) => { /* … */ });
+fsWalk.walk('path', {}, (error, entries) => { /* … */ });
+fsWalk.walk('path', new fsWalk.Settings(), (error, entries) => { /* … */ });
+```
+
+### .walkStream(path, [optionsOrSettings])
+
+Reads the directory recursively and asynchronously. [Readable Stream](https://nodejs.org/dist/latest-v12.x/docs/api/stream.html#stream_readable_streams) is used as a provider.
+
+```ts
+const stream = fsWalk.walkStream('path');
+const stream = fsWalk.walkStream('path', {});
+const stream = fsWalk.walkStream('path', new fsWalk.Settings());
+```
+
+### .walkSync(path, [optionsOrSettings])
+
+Reads the directory recursively and synchronously. Returns an array of entries.
+
+```ts
+const entries = fsWalk.walkSync('path');
+const entries = fsWalk.walkSync('path', {});
+const entries = fsWalk.walkSync('path', new fsWalk.Settings());
+```
+
+#### path
+
+* Required: `true`
+* Type: `string | Buffer | URL`
+
+A path to a file. If a URL is provided, it must use the `file:` protocol.
+
+#### optionsOrSettings
+
+* Required: `false`
+* Type: `Options | Settings`
+* Default: An instance of `Settings` class
+
+An [`Options`](#options) object or an instance of [`Settings`](#settings) class.
+
+> :book: When you pass a plain object, an instance of the `Settings` class will be created automatically. If you plan to call the method frequently, use a pre-created instance of the `Settings` class.
+
+### Settings([options])
+
+A class of full settings of the package.
+
+```ts
+const settings = new fsWalk.Settings({ followSymbolicLinks: true });
+
+const entries = fsWalk.walkSync('path', settings);
+```
+
+## Entry
+
+* `name` — The name of the entry (`unknown.txt`).
+* `path` — The path of the entry relative to call directory (`root/unknown.txt`).
+* `dirent` — An instance of [`fs.Dirent`](./src/types/index.ts) class.
+* [`stats`] — An instance of `fs.Stats` class.
+
+## Options
+
+### basePath
+
+* Type: `string`
+* Default: `undefined`
+
+By default, all paths are built relative to the root path. You can use this option to set custom root path.
+
+In the example below we read the files from the `root` directory, but in the results the root path will be `custom`.
+
+```ts
+fsWalk.walkSync('root'); // → ['root/file.txt']
+fsWalk.walkSync('root', { basePath: 'custom' }); // → ['custom/file.txt']
+```
+
+### concurrency
+
+* Type: `number`
+* Default: `Infinity`
+
+The maximum number of concurrent calls to `fs.readdir`.
+
+> :book: The higher the number, the higher performance and the load on the File System. If you want to read in quiet mode, set the value to `4 * os.cpus().length` (4 is default size of [thread pool work scheduling](http://docs.libuv.org/en/v1.x/threadpool.html#thread-pool-work-scheduling)).
+
+### deepFilter
+
+* Type: [`DeepFilterFunction`](./src/settings.ts)
+* Default: `undefined`
+
+A function that indicates whether the directory will be read deep or not.
+
+```ts
+// Skip all directories that starts with `node_modules`
+const filter: DeepFilterFunction = (entry) => !entry.path.startsWith('node_modules');
+```
+
+### entryFilter
+
+* Type: [`EntryFilterFunction`](./src/settings.ts)
+* Default: `undefined`
+
+A function that indicates whether the entry will be included to results or not.
+
+```ts
+// Exclude all `.js` files from results
+const filter: EntryFilterFunction = (entry) => !entry.name.endsWith('.js');
+```
+
+### errorFilter
+
+* Type: [`ErrorFilterFunction`](./src/settings.ts)
+* Default: `undefined`
+
+A function that allows you to skip errors that occur when reading directories.
+
+For example, you can skip `ENOENT` errors if required:
+
+```ts
+// Skip all ENOENT errors
+const filter: ErrorFilterFunction = (error) => error.code == 'ENOENT';
+```
+
+### stats
+
+* Type: `boolean`
+* Default: `false`
+
+Adds an instance of `fs.Stats` class to the [`Entry`](#entry).
+
+> :book: Always use `fs.readdir` with additional `fs.lstat/fs.stat` calls to determine the entry type.
+
+### followSymbolicLinks
+
+* Type: `boolean`
+* Default: `false`
+
+Follow symbolic links or not. Call `fs.stat` on symbolic link if `true`.
+
+### `throwErrorOnBrokenSymbolicLink`
+
+* Type: `boolean`
+* Default: `true`
+
+Throw an error when symbolic link is broken if `true` or safely return `lstat` call if `false`.
+
+### `pathSegmentSeparator`
+
+* Type: `string`
+* Default: `path.sep`
+
+By default, this package uses the correct path separator for your OS (`\` on Windows, `/` on Unix-like systems). But you can set this option to any separator character(s) that you want to use instead.
+
+### `fs`
+
+* Type: `FileSystemAdapter`
+* Default: A default FS methods
+
+By default, the built-in Node.js module (`fs`) is used to work with the file system. You can replace any method with your own.
+
+```ts
+interface FileSystemAdapter {
+	lstat: typeof fs.lstat;
+	stat: typeof fs.stat;
+	lstatSync: typeof fs.lstatSync;
+	statSync: typeof fs.statSync;
+	readdir: typeof fs.readdir;
+	readdirSync: typeof fs.readdirSync;
+}
+
+const settings = new fsWalk.Settings({
+	fs: { lstat: fakeLstat }
+});
+```
+
+## Changelog
+
+See the [Releases section of our GitHub project](https://github.com/nodelib/nodelib/releases) for changelog for each release version.
+
+## License
+
+This software is released under the terms of the MIT license.
diff --git a/server/node_modules/@nodelib/fs.walk/out/index.d.ts b/server/node_modules/@nodelib/fs.walk/out/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7eaca007bc30fe16e7fdbacff6281ec4c191d5b9
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/index.d.ts
@@ -0,0 +1,15 @@
+/// <reference types="node" />
+import { Readable } from 'stream';
+import { Dirent, FileSystemAdapter } from '@nodelib/fs.scandir';
+import { AsyncCallback } from './providers/async';
+import Settings, { DeepFilterFunction, EntryFilterFunction, ErrorFilterFunction, Options } from './settings';
+import { Entry } from './types';
+declare function walk(directory: string, callback: AsyncCallback): void;
+declare function walk(directory: string, optionsOrSettings: Options | Settings, callback: AsyncCallback): void;
+declare namespace walk {
+    function __promisify__(directory: string, optionsOrSettings?: Options | Settings): Promise<Entry[]>;
+}
+declare function walkSync(directory: string, optionsOrSettings?: Options | Settings): Entry[];
+declare function walkStream(directory: string, optionsOrSettings?: Options | Settings): Readable;
+export { walk, walkSync, walkStream, Settings, AsyncCallback, Dirent, Entry, FileSystemAdapter, Options, DeepFilterFunction, EntryFilterFunction, ErrorFilterFunction };
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.walk/out/index.js b/server/node_modules/@nodelib/fs.walk/out/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..72f1147d04376b50d005205856e6d8846f435717
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/index.js
@@ -0,0 +1,32 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const async_1 = require("./providers/async");
+const stream_1 = require("./providers/stream");
+const sync_1 = require("./providers/sync");
+const settings_1 = require("./settings");
+exports.Settings = settings_1.default;
+function walk(directory, optionsOrSettingsOrCallback, callback) {
+    if (typeof optionsOrSettingsOrCallback === 'function') {
+        return new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);
+    }
+    new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);
+}
+exports.walk = walk;
+function walkSync(directory, optionsOrSettings) {
+    const settings = getSettings(optionsOrSettings);
+    const provider = new sync_1.default(directory, settings);
+    return provider.read();
+}
+exports.walkSync = walkSync;
+function walkStream(directory, optionsOrSettings) {
+    const settings = getSettings(optionsOrSettings);
+    const provider = new stream_1.default(directory, settings);
+    return provider.read();
+}
+exports.walkStream = walkStream;
+function getSettings(settingsOrOptions = {}) {
+    if (settingsOrOptions instanceof settings_1.default) {
+        return settingsOrOptions;
+    }
+    return new settings_1.default(settingsOrOptions);
+}
diff --git a/server/node_modules/@nodelib/fs.walk/out/providers/async.d.ts b/server/node_modules/@nodelib/fs.walk/out/providers/async.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d990f0f4784c3d1328dac56ccbc6e613d0933569
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/providers/async.d.ts
@@ -0,0 +1,13 @@
+import AsyncReader from '../readers/async';
+import Settings from '../settings';
+import { Entry, Errno } from '../types';
+export declare type AsyncCallback = (err: Errno, entries: Entry[]) => void;
+export default class AsyncProvider {
+    private readonly _root;
+    private readonly _settings;
+    protected readonly _reader: AsyncReader;
+    private readonly _storage;
+    constructor(_root: string, _settings: Settings);
+    read(callback: AsyncCallback): void;
+}
+//# sourceMappingURL=async.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.walk/out/providers/async.js b/server/node_modules/@nodelib/fs.walk/out/providers/async.js
new file mode 100644
index 0000000000000000000000000000000000000000..e09da8347b2408dd32d02ae24832c2295c6b1994
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/providers/async.js
@@ -0,0 +1,30 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const async_1 = require("../readers/async");
+class AsyncProvider {
+    constructor(_root, _settings) {
+        this._root = _root;
+        this._settings = _settings;
+        this._reader = new async_1.default(this._root, this._settings);
+        this._storage = new Set();
+    }
+    read(callback) {
+        this._reader.onError((error) => {
+            callFailureCallback(callback, error);
+        });
+        this._reader.onEntry((entry) => {
+            this._storage.add(entry);
+        });
+        this._reader.onEnd(() => {
+            callSuccessCallback(callback, [...this._storage]);
+        });
+        this._reader.read();
+    }
+}
+exports.default = AsyncProvider;
+function callFailureCallback(callback, error) {
+    callback(error);
+}
+function callSuccessCallback(callback, entries) {
+    callback(null, entries);
+}
diff --git a/server/node_modules/@nodelib/fs.walk/out/providers/index.d.ts b/server/node_modules/@nodelib/fs.walk/out/providers/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cd77cde210ad0d83c91ed34b908a5d9f112badfe
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/providers/index.d.ts
@@ -0,0 +1,5 @@
+import AsyncProvider from './async';
+import StreamProvider from './stream';
+import SyncProvider from './sync';
+export { AsyncProvider, StreamProvider, SyncProvider };
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.walk/out/providers/index.js b/server/node_modules/@nodelib/fs.walk/out/providers/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..212180430d11437aaba20214981670aec0b1789f
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/providers/index.js
@@ -0,0 +1,8 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const async_1 = require("./async");
+exports.AsyncProvider = async_1.default;
+const stream_1 = require("./stream");
+exports.StreamProvider = stream_1.default;
+const sync_1 = require("./sync");
+exports.SyncProvider = sync_1.default;
diff --git a/server/node_modules/@nodelib/fs.walk/out/providers/stream.d.ts b/server/node_modules/@nodelib/fs.walk/out/providers/stream.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..05de732fb20e9eb09b3d02261d11919c0b6cb705
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/providers/stream.d.ts
@@ -0,0 +1,13 @@
+/// <reference types="node" />
+import { Readable } from 'stream';
+import AsyncReader from '../readers/async';
+import Settings from '../settings';
+export default class StreamProvider {
+    private readonly _root;
+    private readonly _settings;
+    protected readonly _reader: AsyncReader;
+    protected readonly _stream: Readable;
+    constructor(_root: string, _settings: Settings);
+    read(): Readable;
+}
+//# sourceMappingURL=stream.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.walk/out/providers/stream.js b/server/node_modules/@nodelib/fs.walk/out/providers/stream.js
new file mode 100644
index 0000000000000000000000000000000000000000..627806373ea9b7524478c581f1309c872e80ce89
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/providers/stream.js
@@ -0,0 +1,30 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const stream_1 = require("stream");
+const async_1 = require("../readers/async");
+class StreamProvider {
+    constructor(_root, _settings) {
+        this._root = _root;
+        this._settings = _settings;
+        this._reader = new async_1.default(this._root, this._settings);
+        this._stream = new stream_1.Readable({
+            objectMode: true,
+            read: () => { },
+            destroy: this._reader.destroy.bind(this._reader)
+        });
+    }
+    read() {
+        this._reader.onError((error) => {
+            this._stream.emit('error', error);
+        });
+        this._reader.onEntry((entry) => {
+            this._stream.push(entry);
+        });
+        this._reader.onEnd(() => {
+            this._stream.push(null);
+        });
+        this._reader.read();
+        return this._stream;
+    }
+}
+exports.default = StreamProvider;
diff --git a/server/node_modules/@nodelib/fs.walk/out/providers/sync.d.ts b/server/node_modules/@nodelib/fs.walk/out/providers/sync.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6103045671aa0a7007b8e8d1e4e2d275620a60cf
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/providers/sync.d.ts
@@ -0,0 +1,11 @@
+import SyncReader from '../readers/sync';
+import Settings from '../settings';
+import { Entry } from '../types';
+export default class SyncProvider {
+    private readonly _root;
+    private readonly _settings;
+    protected readonly _reader: SyncReader;
+    constructor(_root: string, _settings: Settings);
+    read(): Entry[];
+}
+//# sourceMappingURL=sync.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.walk/out/providers/sync.js b/server/node_modules/@nodelib/fs.walk/out/providers/sync.js
new file mode 100644
index 0000000000000000000000000000000000000000..faab6ca2ad4262e2d9d5539b8c6ce0017090fd29
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/providers/sync.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const sync_1 = require("../readers/sync");
+class SyncProvider {
+    constructor(_root, _settings) {
+        this._root = _root;
+        this._settings = _settings;
+        this._reader = new sync_1.default(this._root, this._settings);
+    }
+    read() {
+        return this._reader.read();
+    }
+}
+exports.default = SyncProvider;
diff --git a/server/node_modules/@nodelib/fs.walk/out/readers/async.d.ts b/server/node_modules/@nodelib/fs.walk/out/readers/async.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b6a47bee45ad0bed03be897b0916cb07848a4d67
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/readers/async.d.ts
@@ -0,0 +1,30 @@
+/// <reference types="node" />
+import { EventEmitter } from 'events';
+import * as fsScandir from '@nodelib/fs.scandir';
+import Settings from '../settings';
+import { Entry, Errno } from '../types';
+import Reader from './reader';
+declare type EntryEventCallback = (entry: Entry) => void;
+declare type ErrorEventCallback = (error: Errno) => void;
+declare type EndEventCallback = () => void;
+export default class AsyncReader extends Reader {
+    protected readonly _settings: Settings;
+    protected readonly _scandir: typeof fsScandir.scandir;
+    protected readonly _emitter: EventEmitter;
+    private readonly _queue;
+    private _isFatalError;
+    private _isDestroyed;
+    constructor(_root: string, _settings: Settings);
+    read(): EventEmitter;
+    destroy(): void;
+    onEntry(callback: EntryEventCallback): void;
+    onError(callback: ErrorEventCallback): void;
+    onEnd(callback: EndEventCallback): void;
+    private _pushToQueue;
+    private _worker;
+    private _handleError;
+    private _handleEntry;
+    private _emitEntry;
+}
+export {};
+//# sourceMappingURL=async.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.walk/out/readers/async.js b/server/node_modules/@nodelib/fs.walk/out/readers/async.js
new file mode 100644
index 0000000000000000000000000000000000000000..5df82c97e528a8e837810d7baffcdfdd08153a5c
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/readers/async.js
@@ -0,0 +1,93 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const events_1 = require("events");
+const fsScandir = require("@nodelib/fs.scandir");
+const fastq = require("fastq");
+const common = require("./common");
+const reader_1 = require("./reader");
+class AsyncReader extends reader_1.default {
+    constructor(_root, _settings) {
+        super(_root, _settings);
+        this._settings = _settings;
+        this._scandir = fsScandir.scandir;
+        this._emitter = new events_1.EventEmitter();
+        this._queue = fastq(this._worker.bind(this), this._settings.concurrency);
+        this._isFatalError = false;
+        this._isDestroyed = false;
+        this._queue.drain = () => {
+            if (!this._isFatalError) {
+                this._emitter.emit('end');
+            }
+        };
+    }
+    read() {
+        this._isFatalError = false;
+        this._isDestroyed = false;
+        setImmediate(() => {
+            this._pushToQueue(this._root, this._settings.basePath);
+        });
+        return this._emitter;
+    }
+    destroy() {
+        if (this._isDestroyed) {
+            throw new Error('The reader is already destroyed');
+        }
+        this._isDestroyed = true;
+        this._queue.killAndDrain();
+    }
+    onEntry(callback) {
+        this._emitter.on('entry', callback);
+    }
+    onError(callback) {
+        this._emitter.once('error', callback);
+    }
+    onEnd(callback) {
+        this._emitter.once('end', callback);
+    }
+    _pushToQueue(directory, base) {
+        const queueItem = { directory, base };
+        this._queue.push(queueItem, (error) => {
+            if (error !== null) {
+                this._handleError(error);
+            }
+        });
+    }
+    _worker(item, done) {
+        this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {
+            if (error !== null) {
+                return done(error, undefined);
+            }
+            for (const entry of entries) {
+                this._handleEntry(entry, item.base);
+            }
+            done(null, undefined);
+        });
+    }
+    _handleError(error) {
+        if (!common.isFatalError(this._settings, error)) {
+            return;
+        }
+        this._isFatalError = true;
+        this._isDestroyed = true;
+        this._emitter.emit('error', error);
+    }
+    _handleEntry(entry, base) {
+        if (this._isDestroyed || this._isFatalError) {
+            return;
+        }
+        const fullpath = entry.path;
+        if (base !== undefined) {
+            entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
+        }
+        if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
+            this._emitEntry(entry);
+        }
+        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
+            this._pushToQueue(fullpath, entry.path);
+        }
+    }
+    _emitEntry(entry) {
+        this._emitter.emit('entry', entry);
+    }
+}
+exports.default = AsyncReader;
diff --git a/server/node_modules/@nodelib/fs.walk/out/readers/common.d.ts b/server/node_modules/@nodelib/fs.walk/out/readers/common.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3caef857f1ca05611dd8c98356b9297218b4e1d5
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/readers/common.d.ts
@@ -0,0 +1,7 @@
+import Settings, { FilterFunction } from '../settings';
+import { Errno } from '../types';
+export declare function isFatalError(settings: Settings, error: Errno): boolean;
+export declare function isAppliedFilter<T>(filter: FilterFunction<T> | null, value: T): boolean;
+export declare function replacePathSegmentSeparator(filepath: string, separator: string): string;
+export declare function joinPathSegments(a: string, b: string, separator: string): string;
+//# sourceMappingURL=common.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.walk/out/readers/common.js b/server/node_modules/@nodelib/fs.walk/out/readers/common.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a00577472251c86ae52b9320059b89ce2d2f687
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/readers/common.js
@@ -0,0 +1,24 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+function isFatalError(settings, error) {
+    if (settings.errorFilter === null) {
+        return true;
+    }
+    return !settings.errorFilter(error);
+}
+exports.isFatalError = isFatalError;
+function isAppliedFilter(filter, value) {
+    return filter === null || filter(value);
+}
+exports.isAppliedFilter = isAppliedFilter;
+function replacePathSegmentSeparator(filepath, separator) {
+    return filepath.split(/[\\/]/).join(separator);
+}
+exports.replacePathSegmentSeparator = replacePathSegmentSeparator;
+function joinPathSegments(a, b, separator) {
+    if (a === '') {
+        return b;
+    }
+    return a + separator + b;
+}
+exports.joinPathSegments = joinPathSegments;
diff --git a/server/node_modules/@nodelib/fs.walk/out/readers/reader.d.ts b/server/node_modules/@nodelib/fs.walk/out/readers/reader.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8b726d155d993dbd192935fb3490646924459fb3
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/readers/reader.d.ts
@@ -0,0 +1,7 @@
+import Settings from '../settings';
+export default class Reader {
+    protected readonly _root: string;
+    protected readonly _settings: Settings;
+    constructor(_root: string, _settings: Settings);
+}
+//# sourceMappingURL=reader.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.walk/out/readers/reader.js b/server/node_modules/@nodelib/fs.walk/out/readers/reader.js
new file mode 100644
index 0000000000000000000000000000000000000000..782f07cbfab62ff2469f26b2fc98050a38b21f27
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/readers/reader.js
@@ -0,0 +1,11 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const common = require("./common");
+class Reader {
+    constructor(_root, _settings) {
+        this._root = _root;
+        this._settings = _settings;
+        this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);
+    }
+}
+exports.default = Reader;
diff --git a/server/node_modules/@nodelib/fs.walk/out/readers/sync.d.ts b/server/node_modules/@nodelib/fs.walk/out/readers/sync.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..19b71cdeb06a444c0519c90f90de10531c3dfe29
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/readers/sync.d.ts
@@ -0,0 +1,16 @@
+import * as fsScandir from '@nodelib/fs.scandir';
+import { Entry } from '../types';
+import Reader from './reader';
+export default class SyncReader extends Reader {
+    protected readonly _scandir: typeof fsScandir.scandirSync;
+    private readonly _storage;
+    private readonly _queue;
+    read(): Entry[];
+    private _pushToQueue;
+    private _handleQueue;
+    private _handleDirectory;
+    private _handleError;
+    private _handleEntry;
+    private _pushToStorage;
+}
+//# sourceMappingURL=sync.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.walk/out/readers/sync.js b/server/node_modules/@nodelib/fs.walk/out/readers/sync.js
new file mode 100644
index 0000000000000000000000000000000000000000..e99df328d50040a1fc33a4a8adc12adf6e34c810
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/readers/sync.js
@@ -0,0 +1,59 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const fsScandir = require("@nodelib/fs.scandir");
+const common = require("./common");
+const reader_1 = require("./reader");
+class SyncReader extends reader_1.default {
+    constructor() {
+        super(...arguments);
+        this._scandir = fsScandir.scandirSync;
+        this._storage = new Set();
+        this._queue = new Set();
+    }
+    read() {
+        this._pushToQueue(this._root, this._settings.basePath);
+        this._handleQueue();
+        return [...this._storage];
+    }
+    _pushToQueue(directory, base) {
+        this._queue.add({ directory, base });
+    }
+    _handleQueue() {
+        for (const item of this._queue.values()) {
+            this._handleDirectory(item.directory, item.base);
+        }
+    }
+    _handleDirectory(directory, base) {
+        try {
+            const entries = this._scandir(directory, this._settings.fsScandirSettings);
+            for (const entry of entries) {
+                this._handleEntry(entry, base);
+            }
+        }
+        catch (error) {
+            this._handleError(error);
+        }
+    }
+    _handleError(error) {
+        if (!common.isFatalError(this._settings, error)) {
+            return;
+        }
+        throw error;
+    }
+    _handleEntry(entry, base) {
+        const fullpath = entry.path;
+        if (base !== undefined) {
+            entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
+        }
+        if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
+            this._pushToStorage(entry);
+        }
+        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
+            this._pushToQueue(fullpath, entry.path);
+        }
+    }
+    _pushToStorage(entry) {
+        this._storage.add(entry);
+    }
+}
+exports.default = SyncReader;
diff --git a/server/node_modules/@nodelib/fs.walk/out/settings.d.ts b/server/node_modules/@nodelib/fs.walk/out/settings.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5c4fd1c6bdff07705397c0d21acdbb80397e806a
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/settings.d.ts
@@ -0,0 +1,31 @@
+import * as fsScandir from '@nodelib/fs.scandir';
+import { Entry, Errno } from './types';
+export declare type FilterFunction<T> = (value: T) => boolean;
+export declare type DeepFilterFunction = FilterFunction<Entry>;
+export declare type EntryFilterFunction = FilterFunction<Entry>;
+export declare type ErrorFilterFunction = FilterFunction<Errno>;
+export declare type Options = {
+    basePath?: string;
+    concurrency?: number;
+    deepFilter?: DeepFilterFunction;
+    entryFilter?: EntryFilterFunction;
+    errorFilter?: ErrorFilterFunction;
+    followSymbolicLinks?: boolean;
+    fs?: Partial<fsScandir.FileSystemAdapter>;
+    pathSegmentSeparator?: string;
+    stats?: boolean;
+    throwErrorOnBrokenSymbolicLink?: boolean;
+};
+export default class Settings {
+    private readonly _options;
+    readonly basePath?: string;
+    readonly concurrency: number;
+    readonly deepFilter: DeepFilterFunction | null;
+    readonly entryFilter: EntryFilterFunction | null;
+    readonly errorFilter: ErrorFilterFunction | null;
+    readonly pathSegmentSeparator: string;
+    readonly fsScandirSettings: fsScandir.Settings;
+    constructor(_options?: Options);
+    private _getValue;
+}
+//# sourceMappingURL=settings.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.walk/out/settings.js b/server/node_modules/@nodelib/fs.walk/out/settings.js
new file mode 100644
index 0000000000000000000000000000000000000000..8abddf87d61b3413761e5dc8ba39e31a47df717f
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/settings.js
@@ -0,0 +1,26 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const path = require("path");
+const fsScandir = require("@nodelib/fs.scandir");
+class Settings {
+    constructor(_options = {}) {
+        this._options = _options;
+        this.basePath = this._getValue(this._options.basePath, undefined);
+        this.concurrency = this._getValue(this._options.concurrency, Infinity);
+        this.deepFilter = this._getValue(this._options.deepFilter, null);
+        this.entryFilter = this._getValue(this._options.entryFilter, null);
+        this.errorFilter = this._getValue(this._options.errorFilter, null);
+        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);
+        this.fsScandirSettings = new fsScandir.Settings({
+            followSymbolicLinks: this._options.followSymbolicLinks,
+            fs: this._options.fs,
+            pathSegmentSeparator: this._options.pathSegmentSeparator,
+            stats: this._options.stats,
+            throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink
+        });
+    }
+    _getValue(option, value) {
+        return option === undefined ? value : option;
+    }
+}
+exports.default = Settings;
diff --git a/server/node_modules/@nodelib/fs.walk/out/types/index.d.ts b/server/node_modules/@nodelib/fs.walk/out/types/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5dc1f239b250505fd9c33d269f7f563b967da7d1
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/types/index.d.ts
@@ -0,0 +1,9 @@
+/// <reference types="node" />
+import * as scandir from '@nodelib/fs.scandir';
+export declare type Entry = scandir.Entry;
+export declare type Errno = NodeJS.ErrnoException;
+export declare type QueueItem = {
+    directory: string;
+    base?: string;
+};
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@nodelib/fs.walk/out/types/index.js b/server/node_modules/@nodelib/fs.walk/out/types/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8ad2e549bdc6801e0d1c80b0308d4b9bd4985ce
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/out/types/index.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/server/node_modules/@nodelib/fs.walk/package.json b/server/node_modules/@nodelib/fs.walk/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..cda0c6628aef52b6b8146dd08522de29b1cdca9d
--- /dev/null
+++ b/server/node_modules/@nodelib/fs.walk/package.json
@@ -0,0 +1,64 @@
+{
+  "_from": "@nodelib/fs.walk@^1.2.3",
+  "_id": "@nodelib/fs.walk@1.2.4",
+  "_inBundle": false,
+  "_integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
+  "_location": "/@nodelib/fs.walk",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@nodelib/fs.walk@^1.2.3",
+    "name": "@nodelib/fs.walk",
+    "escapedName": "@nodelib%2ffs.walk",
+    "scope": "@nodelib",
+    "rawSpec": "^1.2.3",
+    "saveSpec": null,
+    "fetchSpec": "^1.2.3"
+  },
+  "_requiredBy": [
+    "/fast-glob"
+  ],
+  "_resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
+  "_shasum": "011b9202a70a6366e436ca5c065844528ab04976",
+  "_spec": "@nodelib/fs.walk@^1.2.3",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\fast-glob",
+  "bundleDependencies": false,
+  "dependencies": {
+    "@nodelib/fs.scandir": "2.1.3",
+    "fastq": "^1.6.0"
+  },
+  "deprecated": false,
+  "description": "A library for efficiently walking a directory recursively",
+  "engines": {
+    "node": ">= 8"
+  },
+  "gitHead": "3b1ef7554ad7c061b3580858101d483fba847abf",
+  "keywords": [
+    "NodeLib",
+    "fs",
+    "FileSystem",
+    "file system",
+    "walk",
+    "scanner",
+    "crawler"
+  ],
+  "license": "MIT",
+  "main": "out/index.js",
+  "name": "@nodelib/fs.walk",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.walk"
+  },
+  "scripts": {
+    "build": "npm run clean && npm run compile && npm run lint && npm test",
+    "clean": "rimraf {tsconfig.tsbuildinfo,out}",
+    "compile": "tsc -b .",
+    "compile:watch": "tsc -p . --watch --sourceMap",
+    "lint": "eslint \"src/**/*.ts\" --cache",
+    "test": "mocha \"out/**/*.spec.js\" -s 0",
+    "watch": "npm run clean && npm run compile:watch"
+  },
+  "typings": "out/index.d.ts",
+  "version": "1.2.4"
+}
diff --git a/server/node_modules/@types/json-schema/LICENSE b/server/node_modules/@types/json-schema/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..9e841e7a26e4eb057b24511e7b92d42b257a80e5
--- /dev/null
+++ b/server/node_modules/@types/json-schema/LICENSE
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
diff --git a/server/node_modules/@types/json-schema/README.md b/server/node_modules/@types/json-schema/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..7dd268ce6f9cf6c3ea575598abd238fdb3d52951
--- /dev/null
+++ b/server/node_modules/@types/json-schema/README.md
@@ -0,0 +1,16 @@
+# Installation
+> `npm install --save @types/json-schema`
+
+# Summary
+This package contains type definitions for json-schema 4.0, 6.0 and (https://github.com/kriszyp/json-schema).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/json-schema.
+
+### Additional Details
+ * Last updated: Mon, 31 Aug 2020 21:41:49 GMT
+ * Dependencies: none
+ * Global values: none
+
+# Credits
+These definitions were written by [Boris Cherny](https://github.com/bcherny), [Cyrille Tuzi](https://github.com/cyrilletuzi), [Lucian Buzzo](https://github.com/lucianbuzzo), [Roland Groza](https://github.com/rolandjitsu), and [Jason Kwok](https://github.com/JasonHK).
diff --git a/server/node_modules/@types/json-schema/index.d.ts b/server/node_modules/@types/json-schema/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..be735fbf88868b5903d221fb4c0e83dddbadf50c
--- /dev/null
+++ b/server/node_modules/@types/json-schema/index.d.ts
@@ -0,0 +1,747 @@
+// Type definitions for json-schema 4.0, 6.0 and 7.0
+// Project: https://github.com/kriszyp/json-schema
+// Definitions by: Boris Cherny <https://github.com/bcherny>
+//                 Cyrille Tuzi <https://github.com/cyrilletuzi>
+//                 Lucian Buzzo <https://github.com/lucianbuzzo>
+//                 Roland Groza <https://github.com/rolandjitsu>
+//                 Jason Kwok <https://github.com/JasonHK>
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+// TypeScript Version: 2.2
+
+//==================================================================================================
+// JSON Schema Draft 04
+//==================================================================================================
+
+/**
+ * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.1
+ */
+export type JSONSchema4TypeName =
+    | 'string'
+    | 'number'
+    | 'integer'
+    | 'boolean'
+    | 'object'
+    | 'array'
+    | 'null'
+    | 'any';
+
+/**
+ * @see https://tools.ietf.org/html/draft-zyp-json-schema-04#section-3.5
+ */
+export type JSONSchema4Type =
+    | string
+    | number
+    | boolean
+    | JSONSchema4Object
+    | JSONSchema4Array
+    | null;
+
+// Workaround for infinite type recursion
+export interface JSONSchema4Object {
+    [key: string]: JSONSchema4Type;
+}
+
+// Workaround for infinite type recursion
+// https://github.com/Microsoft/TypeScript/issues/3496#issuecomment-128553540
+export interface JSONSchema4Array extends Array<JSONSchema4Type> {}
+
+/**
+ * Meta schema
+ *
+ * Recommended values:
+ * - 'http://json-schema.org/schema#'
+ * - 'http://json-schema.org/hyper-schema#'
+ * - 'http://json-schema.org/draft-04/schema#'
+ * - 'http://json-schema.org/draft-04/hyper-schema#'
+ * - 'http://json-schema.org/draft-03/schema#'
+ * - 'http://json-schema.org/draft-03/hyper-schema#'
+ *
+ * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-5
+ */
+export type JSONSchema4Version = string;
+
+/**
+ * JSON Schema V4
+ * @see https://tools.ietf.org/html/draft-zyp-json-schema-04
+ */
+export interface JSONSchema4 {
+    id?: string
+    $ref?: string
+    $schema?: JSONSchema4Version
+
+    /**
+     * This attribute is a string that provides a short description of the
+     * instance property.
+     *
+     * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.21
+     */
+    title?: string
+
+    /**
+     * This attribute is a string that provides a full description of the of
+     * purpose the instance property.
+     *
+     * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.22
+     */
+    description?: string
+
+    default?: JSONSchema4Type
+    multipleOf?: number
+    maximum?: number
+    exclusiveMaximum?: boolean
+    minimum?: number
+    exclusiveMinimum?: boolean
+    maxLength?: number
+    minLength?: number
+    pattern?: string
+
+    /**
+     * May only be defined when "items" is defined, and is a tuple of JSONSchemas.
+     *
+     * This provides a definition for additional items in an array instance
+     * when tuple definitions of the items is provided.  This can be false
+     * to indicate additional items in the array are not allowed, or it can
+     * be a schema that defines the schema of the additional items.
+     *
+     * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.6
+     */
+    additionalItems?: boolean | JSONSchema4
+
+    /**
+     * This attribute defines the allowed items in an instance array, and
+     * MUST be a schema or an array of schemas.  The default value is an
+     * empty schema which allows any value for items in the instance array.
+     *
+     * When this attribute value is a schema and the instance value is an
+     * array, then all the items in the array MUST be valid according to the
+     * schema.
+     *
+     * When this attribute value is an array of schemas and the instance
+     * value is an array, each position in the instance array MUST conform
+     * to the schema in the corresponding position for this array.  This
+     * called tuple typing.  When tuple typing is used, additional items are
+     * allowed, disallowed, or constrained by the "additionalItems"
+     * (Section 5.6) attribute using the same rules as
+     * "additionalProperties" (Section 5.4) for objects.
+     *
+     * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.5
+     */
+    items?: JSONSchema4 | JSONSchema4[]
+
+    maxItems?: number
+    minItems?: number
+    uniqueItems?: boolean
+    maxProperties?: number
+    minProperties?: number
+
+    /**
+     * This attribute indicates if the instance must have a value, and not
+     * be undefined. This is false by default, making the instance
+     * optional.
+     *
+     * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.7
+     */
+    required?: false | string[]
+
+    /**
+     * This attribute defines a schema for all properties that are not
+     * explicitly defined in an object type definition. If specified, the
+     * value MUST be a schema or a boolean. If false is provided, no
+     * additional properties are allowed beyond the properties defined in
+     * the schema. The default value is an empty schema which allows any
+     * value for additional properties.
+     *
+     * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.4
+     */
+    additionalProperties?: boolean | JSONSchema4
+
+    definitions?: {
+        [k: string]: JSONSchema4
+    }
+
+    /**
+     * This attribute is an object with property definitions that define the
+     * valid values of instance object property values. When the instance
+     * value is an object, the property values of the instance object MUST
+     * conform to the property definitions in this object. In this object,
+     * each property definition's value MUST be a schema, and the property's
+     * name MUST be the name of the instance property that it defines.  The
+     * instance property value MUST be valid according to the schema from
+     * the property definition. Properties are considered unordered, the
+     * order of the instance properties MAY be in any order.
+     *
+     * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.2
+     */
+    properties?: {
+        [k: string]: JSONSchema4
+    }
+
+    /**
+     * This attribute is an object that defines the schema for a set of
+     * property names of an object instance. The name of each property of
+     * this attribute's object is a regular expression pattern in the ECMA
+     * 262/Perl 5 format, while the value is a schema. If the pattern
+     * matches the name of a property on the instance object, the value of
+     * the instance's property MUST be valid against the pattern name's
+     * schema value.
+     *
+     * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.3
+     */
+    patternProperties?: {
+        [k: string]: JSONSchema4
+    }
+    dependencies?: {
+        [k: string]: JSONSchema4 | string[]
+    }
+
+    /**
+     * This provides an enumeration of all possible values that are valid
+     * for the instance property. This MUST be an array, and each item in
+     * the array represents a possible value for the instance value. If
+     * this attribute is defined, the instance value MUST be one of the
+     * values in the array in order for the schema to be valid.
+     *
+     * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.19
+     */
+    enum?: JSONSchema4Type[]
+
+    /**
+     * A single type, or a union of simple types
+     */
+    type?: JSONSchema4TypeName | JSONSchema4TypeName[]
+
+    allOf?: JSONSchema4[]
+    anyOf?: JSONSchema4[]
+    oneOf?: JSONSchema4[]
+    not?: JSONSchema4
+
+    /**
+     * The value of this property MUST be another schema which will provide
+     * a base schema which the current schema will inherit from.  The
+     * inheritance rules are such that any instance that is valid according
+     * to the current schema MUST be valid according to the referenced
+     * schema.  This MAY also be an array, in which case, the instance MUST
+     * be valid for all the schemas in the array.  A schema that extends
+     * another schema MAY define additional attributes, constrain existing
+     * attributes, or add other constraints.
+     *
+     * Conceptually, the behavior of extends can be seen as validating an
+     * instance against all constraints in the extending schema as well as
+     * the extended schema(s).
+     *
+     * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.26
+     */
+    extends?: string | string[]
+
+    /**
+     * @see https://tools.ietf.org/html/draft-zyp-json-schema-04#section-5.6
+     */
+    [k: string]: any
+
+    format?: string
+}
+
+//==================================================================================================
+// JSON Schema Draft 06
+//==================================================================================================
+
+export type JSONSchema6TypeName =
+    | 'string'
+    | 'number'
+    | 'integer'
+    | 'boolean'
+    | 'object'
+    | 'array'
+    | 'null'
+    | 'any';
+
+export type JSONSchema6Type =
+    | string
+    | number
+    | boolean
+    | JSONSchema6Object
+    | JSONSchema6Array
+    | null;
+
+// Workaround for infinite type recursion
+export interface JSONSchema6Object {
+    [key: string]: JSONSchema6Type;
+}
+
+// Workaround for infinite type recursion
+// https://github.com/Microsoft/TypeScript/issues/3496#issuecomment-128553540
+export interface JSONSchema6Array extends Array<JSONSchema6Type> {}
+
+/**
+ * Meta schema
+ *
+ * Recommended values:
+ * - 'http://json-schema.org/schema#'
+ * - 'http://json-schema.org/hyper-schema#'
+ * - 'http://json-schema.org/draft-06/schema#'
+ * - 'http://json-schema.org/draft-06/hyper-schema#'
+ *
+ * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-5
+ */
+export type JSONSchema6Version = string;
+
+/**
+ * JSON Schema V6
+ * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01
+ */
+export type JSONSchema6Definition = JSONSchema6 | boolean;
+export interface JSONSchema6 {
+    $id?: string
+    $ref?: string
+    $schema?: JSONSchema6Version
+
+    /**
+     * Must be strictly greater than 0.
+     * A numeric instance is valid only if division by this keyword's value results in an integer.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.1
+     */
+    multipleOf?: number
+
+    /**
+     * Representing an inclusive upper limit for a numeric instance.
+     * This keyword validates only if the instance is less than or exactly equal to "maximum".
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.2
+     */
+    maximum?: number
+
+    /**
+     * Representing an exclusive upper limit for a numeric instance.
+     * This keyword validates only if the instance is strictly less than (not equal to) to "exclusiveMaximum".
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.3
+     */
+    exclusiveMaximum?: number
+
+    /**
+     * Representing an inclusive lower limit for a numeric instance.
+     * This keyword validates only if the instance is greater than or exactly equal to "minimum".
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.4
+     */
+    minimum?: number
+
+    /**
+     * Representing an exclusive lower limit for a numeric instance.
+     * This keyword validates only if the instance is strictly greater than (not equal to) to "exclusiveMinimum".
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.5
+     */
+    exclusiveMinimum?: number
+
+    /**
+     * Must be a non-negative integer.
+     * A string instance is valid against this keyword if its length is less than, or equal to, the value of this keyword.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.6
+     */
+    maxLength?: number
+
+    /**
+     * Must be a non-negative integer.
+     * A string instance is valid against this keyword if its length is greater than, or equal to, the value of this keyword.
+     * Omitting this keyword has the same behavior as a value of 0.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.7
+     */
+    minLength?: number
+
+    /**
+     * Should be a valid regular expression, according to the ECMA 262 regular expression dialect.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.8
+     */
+    pattern?: string
+
+    /**
+     * This keyword determines how child instances validate for arrays, and does not directly validate the immediate instance itself.
+     * Omitting this keyword has the same behavior as an empty schema.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.9
+     */
+    items?: JSONSchema6Definition | JSONSchema6Definition[]
+
+    /**
+     * This keyword determines how child instances validate for arrays, and does not directly validate the immediate instance itself.
+     * If "items" is an array of schemas, validation succeeds if every instance element
+     * at a position greater than the size of "items" validates against "additionalItems".
+     * Otherwise, "additionalItems" MUST be ignored, as the "items" schema
+     * (possibly the default value of an empty schema) is applied to all elements.
+     * Omitting this keyword has the same behavior as an empty schema.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.10
+     */
+    additionalItems?: JSONSchema6Definition
+
+    /**
+     * Must be a non-negative integer.
+     * An array instance is valid against "maxItems" if its size is less than, or equal to, the value of this keyword.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.11
+     */
+    maxItems?: number
+
+    /**
+     * Must be a non-negative integer.
+     * An array instance is valid against "maxItems" if its size is greater than, or equal to, the value of this keyword.
+     * Omitting this keyword has the same behavior as a value of 0.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.12
+     */
+    minItems?: number
+
+    /**
+     * If this keyword has boolean value false, the instance validates successfully.
+     * If it has boolean value true, the instance validates successfully if all of its elements are unique.
+     * Omitting this keyword has the same behavior as a value of false.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.13
+     */
+    uniqueItems?: boolean
+
+    /**
+     * An array instance is valid against "contains" if at least one of its elements is valid against the given schema.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.14
+     */
+    contains?: JSONSchema6Definition
+
+    /**
+     * Must be a non-negative integer.
+     * An object instance is valid against "maxProperties" if its number of properties is less than, or equal to, the value of this keyword.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.15
+     */
+    maxProperties?: number
+
+    /**
+     * Must be a non-negative integer.
+     * An object instance is valid against "maxProperties" if its number of properties is greater than,
+     * or equal to, the value of this keyword.
+     * Omitting this keyword has the same behavior as a value of 0.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.16
+     */
+    minProperties?: number
+
+    /**
+     * Elements of this array must be unique.
+     * An object instance is valid against this keyword if every item in the array is the name of a property in the instance.
+     * Omitting this keyword has the same behavior as an empty array.
+     *
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.17
+     */
+    required?: string[]
+
+    /**
+     * This keyword determines how child instances validate for objects, and does not directly validate the immediate instance itself.
+     * Validation succeeds if, for each name that appears in both the instance and as a name within this keyword's value,
+     * the child instance for that name successfully validates against the corresponding schema.
+     * Omitting this keyword has the same behavior as an empty object.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.18
+     */
+    properties?: {
+        [k: string]: JSONSchema6Definition
+    }
+
+    /**
+     * This attribute is an object that defines the schema for a set of property names of an object instance.
+     * The name of each property of this attribute's object is a regular expression pattern in the ECMA 262, while the value is a schema.
+     * If the pattern matches the name of a property on the instance object, the value of the instance's property
+     * MUST be valid against the pattern name's schema value.
+     * Omitting this keyword has the same behavior as an empty object.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.19
+     */
+    patternProperties?: {
+        [k: string]: JSONSchema6Definition
+    }
+
+    /**
+     * This attribute defines a schema for all properties that are not explicitly defined in an object type definition.
+     * If specified, the value MUST be a schema or a boolean.
+     * If false is provided, no additional properties are allowed beyond the properties defined in the schema.
+     * The default value is an empty schema which allows any value for additional properties.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.20
+     */
+    additionalProperties?: JSONSchema6Definition
+
+    /**
+     * This keyword specifies rules that are evaluated if the instance is an object and contains a certain property.
+     * Each property specifies a dependency.
+     * If the dependency value is an array, each element in the array must be unique.
+     * Omitting this keyword has the same behavior as an empty object.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.21
+     */
+    dependencies?: {
+        [k: string]: JSONSchema6Definition | string[]
+    }
+
+    /**
+     * Takes a schema which validates the names of all properties rather than their values.
+     * Note the property name that the schema is testing will always be a string.
+     * Omitting this keyword has the same behavior as an empty schema.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.22
+     */
+    propertyNames?: JSONSchema6Definition
+
+    /**
+     * This provides an enumeration of all possible values that are valid
+     * for the instance property. This MUST be an array, and each item in
+     * the array represents a possible value for the instance value. If
+     * this attribute is defined, the instance value MUST be one of the
+     * values in the array in order for the schema to be valid.
+     *
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.23
+     */
+    enum?: JSONSchema6Type[]
+
+    /**
+     * More readable form of a one-element "enum"
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.24
+     */
+    const?: JSONSchema6Type
+
+    /**
+     * A single type, or a union of simple types
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.25
+     */
+    type?: JSONSchema6TypeName | JSONSchema6TypeName[]
+
+    /**
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.26
+     */
+    allOf?: JSONSchema6Definition[]
+
+    /**
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.27
+     */
+    anyOf?: JSONSchema6Definition[]
+
+    /**
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.28
+     */
+    oneOf?: JSONSchema6Definition[]
+
+    /**
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.29
+     */
+    not?: JSONSchema6Definition
+
+    /**
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-7.1
+     */
+    definitions?: {
+        [k: string]: JSONSchema6Definition
+    }
+
+    /**
+     * This attribute is a string that provides a short description of the instance property.
+     *
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-7.2
+     */
+    title?: string
+
+    /**
+     * This attribute is a string that provides a full description of the of purpose the instance property.
+     *
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-7.2
+     */
+    description?: string
+
+    /**
+     * This keyword can be used to supply a default JSON value associated with a particular schema.
+     * It is RECOMMENDED that a default value be valid against the associated schema.
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-7.3
+     */
+    default?: JSONSchema6Type
+
+    /**
+     * Array of examples with no validation effect the value of "default" is usable as an example without repeating it under this keyword
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-7.4
+     */
+    examples?: JSONSchema6Type[]
+
+    /**
+     * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-8
+     */
+    format?: string
+}
+
+//==================================================================================================
+// JSON Schema Draft 07
+//==================================================================================================
+// https://tools.ietf.org/html/draft-handrews-json-schema-validation-01
+//--------------------------------------------------------------------------------------------------
+
+/**
+ * Primitive type
+ * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.1.1
+ */
+export type JSONSchema7TypeName =
+    | 'string'
+    | 'number'
+    | 'integer'
+    | 'boolean'
+    | 'object'
+    | 'array'
+    | 'null';
+
+/**
+ * Primitive type
+ * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.1.1
+ */
+export type JSONSchema7Type =
+    | string
+    | number
+    | boolean
+    | JSONSchema7Object
+    | JSONSchema7Array
+    | null;
+
+// Workaround for infinite type recursion
+export interface JSONSchema7Object {
+    [key: string]: JSONSchema7Type;
+}
+
+// Workaround for infinite type recursion
+// https://github.com/Microsoft/TypeScript/issues/3496#issuecomment-128553540
+export interface JSONSchema7Array extends Array<JSONSchema7Type> {}
+
+/**
+ * Meta schema
+ *
+ * Recommended values:
+ * - 'http://json-schema.org/schema#'
+ * - 'http://json-schema.org/hyper-schema#'
+ * - 'http://json-schema.org/draft-07/schema#'
+ * - 'http://json-schema.org/draft-07/hyper-schema#'
+ *
+ * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-5
+ */
+export type JSONSchema7Version = string;
+
+/**
+ * JSON Schema v7
+ * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01
+ */
+export type JSONSchema7Definition = JSONSchema7 | boolean;
+export interface JSONSchema7 {
+    $id?: string;
+    $ref?: string;
+    $schema?: JSONSchema7Version;
+    $comment?: string;
+
+    /**
+     * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.1
+     */
+    type?: JSONSchema7TypeName | JSONSchema7TypeName[];
+    enum?: JSONSchema7Type[];
+    const?: JSONSchema7Type;
+
+    /**
+     * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.2
+     */
+    multipleOf?: number;
+    maximum?: number;
+    exclusiveMaximum?: number;
+    minimum?: number;
+    exclusiveMinimum?: number;
+
+    /**
+     * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.3
+     */
+    maxLength?: number;
+    minLength?: number;
+    pattern?: string;
+
+    /**
+     * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.4
+     */
+    items?: JSONSchema7Definition | JSONSchema7Definition[];
+    additionalItems?: JSONSchema7Definition;
+    maxItems?: number;
+    minItems?: number;
+    uniqueItems?: boolean;
+    contains?: JSONSchema7;
+
+    /**
+     * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.5
+     */
+    maxProperties?: number;
+    minProperties?: number;
+    required?: string[];
+    properties?: {
+        [key: string]: JSONSchema7Definition;
+    };
+    patternProperties?: {
+        [key: string]: JSONSchema7Definition;
+    };
+    additionalProperties?: JSONSchema7Definition;
+    dependencies?: {
+        [key: string]: JSONSchema7Definition | string[];
+    };
+    propertyNames?: JSONSchema7Definition;
+
+    /**
+     * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.6
+     */
+    if?: JSONSchema7Definition;
+    then?: JSONSchema7Definition;
+    else?: JSONSchema7Definition;
+
+    /**
+     * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.7
+     */
+    allOf?: JSONSchema7Definition[];
+    anyOf?: JSONSchema7Definition[];
+    oneOf?: JSONSchema7Definition[];
+    not?: JSONSchema7Definition;
+
+    /**
+     * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7
+     */
+    format?: string;
+
+    /**
+     * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-8
+     */
+    contentMediaType?: string;
+    contentEncoding?: string;
+
+    /**
+     * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-9
+     */
+    definitions?: {
+        [key: string]: JSONSchema7Definition;
+    };
+
+    /**
+     * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-10
+     */
+    title?: string;
+    description?: string;
+    default?: JSONSchema7Type;
+    readOnly?: boolean;
+    writeOnly?: boolean;
+    examples?: JSONSchema7Type;
+}
+
+export interface ValidationResult {
+    valid: boolean;
+    errors: ValidationError[];
+}
+
+export interface ValidationError {
+    property: string;
+    message: string;
+}
+
+/**
+ * To use the validator call JSONSchema.validate with an instance object and an optional schema object.
+ * If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating),
+ * that schema will be used to validate and the schema parameter is not necessary (if both exist,
+ * both validations will occur).
+ */
+export function validate(instance: {}, schema: JSONSchema4 | JSONSchema6 | JSONSchema7): ValidationResult;
+
+/**
+ * The checkPropertyChange method will check to see if an value can legally be in property with the given schema
+ * This is slightly different than the validate method in that it will fail if the schema is readonly and it will
+ * not check for self-validation, it is assumed that the passed in value is already internally valid.
+ */
+export function checkPropertyChange(value: any, schema: JSONSchema4 | JSONSchema6 | JSONSchema7, property: string): ValidationResult;
+
+/**
+ * This checks to ensure that the result is valid and will throw an appropriate error message if it is not.
+ */
+export function mustBeValid(result: ValidationResult): void;
diff --git a/server/node_modules/@types/json-schema/package.json b/server/node_modules/@types/json-schema/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..1dbb318bbb8cada24bc3a5832776c3e0220fa2e8
--- /dev/null
+++ b/server/node_modules/@types/json-schema/package.json
@@ -0,0 +1,69 @@
+{
+  "_from": "@types/json-schema@^7.0.3",
+  "_id": "@types/json-schema@7.0.6",
+  "_inBundle": false,
+  "_integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==",
+  "_location": "/@types/json-schema",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@types/json-schema@^7.0.3",
+    "name": "@types/json-schema",
+    "escapedName": "@types%2fjson-schema",
+    "scope": "@types",
+    "rawSpec": "^7.0.3",
+    "saveSpec": null,
+    "fetchSpec": "^7.0.3"
+  },
+  "_requiredBy": [
+    "/@typescript-eslint/experimental-utils"
+  ],
+  "_resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz",
+  "_shasum": "f4c7ec43e81b319a9815115031709f26987891f0",
+  "_spec": "@types/json-schema@^7.0.3",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\@typescript-eslint\\experimental-utils",
+  "bugs": {
+    "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Boris Cherny",
+      "url": "https://github.com/bcherny"
+    },
+    {
+      "name": "Cyrille Tuzi",
+      "url": "https://github.com/cyrilletuzi"
+    },
+    {
+      "name": "Lucian Buzzo",
+      "url": "https://github.com/lucianbuzzo"
+    },
+    {
+      "name": "Roland Groza",
+      "url": "https://github.com/rolandjitsu"
+    },
+    {
+      "name": "Jason Kwok",
+      "url": "https://github.com/JasonHK"
+    }
+  ],
+  "dependencies": {},
+  "deprecated": false,
+  "description": "TypeScript definitions for json-schema 4.0, 6.0 and",
+  "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped#readme",
+  "license": "MIT",
+  "main": "",
+  "name": "@types/json-schema",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+    "directory": "types/json-schema"
+  },
+  "scripts": {},
+  "typeScriptVersion": "3.1",
+  "types": "index.d.ts",
+  "typesPublisherContentHash": "bb4b22e70ee94bf7b787307444fcee2f57a8869f012a460ed8f15b5b6985ed70",
+  "version": "7.0.6"
+}
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/CHANGELOG.md b/server/node_modules/@typescript-eslint/eslint-plugin/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..32fb4d7cc3267a5d889c20aa27b83ad1f6816fd4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/CHANGELOG.md
@@ -0,0 +1,1680 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [4.11.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.10.0...v4.11.0) (2020-12-21)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [non-nullable-type-assertion-style] handle const assertion ([#2881](https://github.com/typescript-eslint/typescript-eslint/issues/2881)) ([53dc34d](https://github.com/typescript-eslint/typescript-eslint/commit/53dc34d3917b90c8ab0324fe8054619ddee98003))
+
+
+### Features
+
+* **eslint-plugin:** [prom-func-async] add automatic fix ([#2845](https://github.com/typescript-eslint/typescript-eslint/issues/2845)) ([717e718](https://github.com/typescript-eslint/typescript-eslint/commit/717e718e91df2165422228c02dfa248cf55f65a1))
+
+
+
+
+
+# [4.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.9.1...v4.10.0) (2020-12-14)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [naming-convention] fix wrong member of `method` and `property` meta selectors ([#2856](https://github.com/typescript-eslint/typescript-eslint/issues/2856)) ([9a6c362](https://github.com/typescript-eslint/typescript-eslint/commit/9a6c3628a2f3a7748b7a4b9b0c55400c8d7dfeae))
+
+
+### Features
+
+* **eslint-plugin:** add rule `non-nullable-type-assertion-style` ([#2624](https://github.com/typescript-eslint/typescript-eslint/issues/2624)) ([7eee44f](https://github.com/typescript-eslint/typescript-eslint/commit/7eee44fff3041a9725d34bf2fcbfc6fd40a60c61))
+
+
+
+
+
+## [4.9.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.9.0...v4.9.1) (2020-12-07)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [method-signature-style] fix crash with methods without a return type ([#2836](https://github.com/typescript-eslint/typescript-eslint/issues/2836)) ([fed89f2](https://github.com/typescript-eslint/typescript-eslint/commit/fed89f24ebe42a6412f0eb19949d5d4771656189)), closes [#2834](https://github.com/typescript-eslint/typescript-eslint/issues/2834)
+* **eslint-plugin:** [no-unused-vars] false-positive with class expressions ([#2833](https://github.com/typescript-eslint/typescript-eslint/issues/2833)) ([aadb39f](https://github.com/typescript-eslint/typescript-eslint/commit/aadb39f0ff500ee99ea80e9009ab61283ca9c8cd)), closes [#2831](https://github.com/typescript-eslint/typescript-eslint/issues/2831)
+* **eslint-plugin:** [no-unused-vars] fix race condition between naming-convention and no-unused-vars ([#2848](https://github.com/typescript-eslint/typescript-eslint/issues/2848)) ([ccb6b94](https://github.com/typescript-eslint/typescript-eslint/commit/ccb6b9499a4a4077f2e3d81d0844860a25244a0f)), closes [#2844](https://github.com/typescript-eslint/typescript-eslint/issues/2844)
+
+
+
+
+
+# [4.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.2...v4.9.0) (2020-11-30)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [consistent-indexed-object-style] convert readonly index signature to readonly record ([#2798](https://github.com/typescript-eslint/typescript-eslint/issues/2798)) ([29428a4](https://github.com/typescript-eslint/typescript-eslint/commit/29428a4dbef133563f2ee54b22908a01ab9a9472))
+* **eslint-plugin:** [consistent-type-imports] crash when using both default and namespace in one import ([#2778](https://github.com/typescript-eslint/typescript-eslint/issues/2778)) ([c816b84](https://github.com/typescript-eslint/typescript-eslint/commit/c816b84814214f7504a0d89a5cd3b08c595bfb50))
+* **eslint-plugin:** [explicit-module-boundary-types] ignore functions exported within typed object/array literals ([#2805](https://github.com/typescript-eslint/typescript-eslint/issues/2805)) ([73a63ee](https://github.com/typescript-eslint/typescript-eslint/commit/73a63ee9ea00b2db0a29f148d7863c3778e4a483))
+* **eslint-plugin:** [no-use-before-define] allow class references if they're within a class decorator ([#2827](https://github.com/typescript-eslint/typescript-eslint/issues/2827)) ([050023a](https://github.com/typescript-eslint/typescript-eslint/commit/050023aa7bd791d0be7b5788a9dcd8e61a00ce79)), closes [#2842](https://github.com/typescript-eslint/typescript-eslint/issues/2842)
+* **eslint-plugin:** [triple-slash-reference] fix crash with external module reference ([#2788](https://github.com/typescript-eslint/typescript-eslint/issues/2788)) ([32b1b68](https://github.com/typescript-eslint/typescript-eslint/commit/32b1b6839fb32d93b7faa8fec74c9cb68ea587bb))
+* **scope-manager:** fix assertion assignments not being marked as write references ([#2809](https://github.com/typescript-eslint/typescript-eslint/issues/2809)) ([fa68492](https://github.com/typescript-eslint/typescript-eslint/commit/fa6849245ca55ca407dc031afbad456f2925a8e9)), closes [#2804](https://github.com/typescript-eslint/typescript-eslint/issues/2804)
+
+
+### Features
+
+* **eslint-plugin:** [naming-convention] add `requireDouble`, `allowDouble`, `allowSingleOrDouble` options for underscores ([#2812](https://github.com/typescript-eslint/typescript-eslint/issues/2812)) ([dd0576a](https://github.com/typescript-eslint/typescript-eslint/commit/dd0576a66c34810bc60e0958948c9a8104a3f1a3))
+* **eslint-plugin:** [naming-convention] add `requiresQuotes` modifier ([#2813](https://github.com/typescript-eslint/typescript-eslint/issues/2813)) ([6fc8409](https://github.com/typescript-eslint/typescript-eslint/commit/6fc84094928c3645a0e04c31bd4d759fdfbdcb74)), closes [#2761](https://github.com/typescript-eslint/typescript-eslint/issues/2761) [#1483](https://github.com/typescript-eslint/typescript-eslint/issues/1483)
+* **eslint-plugin:** [naming-convention] add modifier `unused` ([#2810](https://github.com/typescript-eslint/typescript-eslint/issues/2810)) ([6a06944](https://github.com/typescript-eslint/typescript-eslint/commit/6a06944e60677a402e7ab432e6ac1209737a7027))
+* **eslint-plugin:** [naming-convention] add modifiers `exported`, `global`, and `destructured` ([#2808](https://github.com/typescript-eslint/typescript-eslint/issues/2808)) ([fb254a1](https://github.com/typescript-eslint/typescript-eslint/commit/fb254a1036b89f9b78f927d607358e65e81a2250)), closes [#2239](https://github.com/typescript-eslint/typescript-eslint/issues/2239) [#2512](https://github.com/typescript-eslint/typescript-eslint/issues/2512) [#2318](https://github.com/typescript-eslint/typescript-eslint/issues/2318) [#2802](https://github.com/typescript-eslint/typescript-eslint/issues/2802)
+* **eslint-plugin:** [naming-convention] allow `destructured` modifier for `parameter` selector ([#2829](https://github.com/typescript-eslint/typescript-eslint/issues/2829)) ([525d2ff](https://github.com/typescript-eslint/typescript-eslint/commit/525d2ff9292d89e1445b273b5378159bca323a1e)), closes [#2828](https://github.com/typescript-eslint/typescript-eslint/issues/2828)
+* **eslint-plugin:** [naming-convention] split `property` and `method` selectors into more granular `classXXX`, `objectLiteralXXX`, `typeXXX` ([#2807](https://github.com/typescript-eslint/typescript-eslint/issues/2807)) ([665b6d4](https://github.com/typescript-eslint/typescript-eslint/commit/665b6d4023fb9d821f348c39aefff0d7571a98bf)), closes [#1477](https://github.com/typescript-eslint/typescript-eslint/issues/1477) [#2802](https://github.com/typescript-eslint/typescript-eslint/issues/2802)
+* **eslint-plugin:** [no-unused-vars] fork the base rule ([#2768](https://github.com/typescript-eslint/typescript-eslint/issues/2768)) ([a8227a6](https://github.com/typescript-eslint/typescript-eslint/commit/a8227a6185dd24de4bfc7d766931643871155021)), closes [#2782](https://github.com/typescript-eslint/typescript-eslint/issues/2782) [#2714](https://github.com/typescript-eslint/typescript-eslint/issues/2714) [#2648](https://github.com/typescript-eslint/typescript-eslint/issues/2648)
+* **eslint-plugin:** [unbound-method] add support for methods with a `this: void` parameter ([#2796](https://github.com/typescript-eslint/typescript-eslint/issues/2796)) ([878dd4a](https://github.com/typescript-eslint/typescript-eslint/commit/878dd4ae8c408f1eb42790a8fac37f85040b7f3c))
+
+
+
+
+
+## [4.8.2](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.1...v4.8.2) (2020-11-23)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [prefer-literal-enum-member] allow pure template literal strings ([#2786](https://github.com/typescript-eslint/typescript-eslint/issues/2786)) ([f3bf6a1](https://github.com/typescript-eslint/typescript-eslint/commit/f3bf6a1791c9dc64bb18d45712f07767c9f96cbd))
+
+
+
+
+
+## [4.8.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.0...v4.8.1) (2020-11-17)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-unnecessary-condition] false positive when array predicate returns unknown ([#2772](https://github.com/typescript-eslint/typescript-eslint/issues/2772)) ([111c244](https://github.com/typescript-eslint/typescript-eslint/commit/111c244c3eb157efeb5c43ff39f12633b27f091e))
+
+
+
+
+
+# [4.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.7.0...v4.8.0) (2020-11-16)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [consistent-type-definitions] remove fixer when the interface is within a global module declaration ([#2739](https://github.com/typescript-eslint/typescript-eslint/issues/2739)) ([2326238](https://github.com/typescript-eslint/typescript-eslint/commit/2326238738c95acfc14c17f9b16798f1de6d267f))
+* **eslint-plugin:** [no-unsafe-member-access] ignore MemberExpression's whose parents are either TSClassImplements or TSInterfaceHeritage ([#2753](https://github.com/typescript-eslint/typescript-eslint/issues/2753)) ([535db3b](https://github.com/typescript-eslint/typescript-eslint/commit/535db3bf27ee1d7824ada9acd91d1b7833064628))
+
+
+
+
+
+# [4.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.6.1...v4.7.0) (2020-11-09)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [array-type] parenthesize ReadonlyArray fix ([#2747](https://github.com/typescript-eslint/typescript-eslint/issues/2747)) ([83385ac](https://github.com/typescript-eslint/typescript-eslint/commit/83385ac351f45d3bcbd19f72711838e9a8473827))
+* **eslint-plugin:** [no-extra-non-null-assertion] false positive with non-nullable computed key ([#2737](https://github.com/typescript-eslint/typescript-eslint/issues/2737)) ([e82698c](https://github.com/typescript-eslint/typescript-eslint/commit/e82698c0ec796e460e40c3dd90a30bd100db05c2))
+
+
+### Features
+
+* **eslint-plugin:** add rule `no-confusing-void-expression` ([#2605](https://github.com/typescript-eslint/typescript-eslint/issues/2605)) ([c8a4dad](https://github.com/typescript-eslint/typescript-eslint/commit/c8a4dadeab8a64fb4768deda8f65475435dd2cad))
+* support TS4.1 features ([#2748](https://github.com/typescript-eslint/typescript-eslint/issues/2748)) ([2be354b](https://github.com/typescript-eslint/typescript-eslint/commit/2be354bb15f9013a2da1b13a0c0836e9ef057e16)), closes [#2583](https://github.com/typescript-eslint/typescript-eslint/issues/2583)
+
+
+
+
+
+## [4.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.6.0...v4.6.1) (2020-11-02)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [consistent-indexed-object-style] fix wrong autofix behaviour with generics ([#2722](https://github.com/typescript-eslint/typescript-eslint/issues/2722)) ([73d9713](https://github.com/typescript-eslint/typescript-eslint/commit/73d97130afe79b8a458c215581ce86c62009ad8b))
+* **eslint-plugin:** [no-shadow] ignore global module augmentation ([#2729](https://github.com/typescript-eslint/typescript-eslint/issues/2729)) ([d8c67a5](https://github.com/typescript-eslint/typescript-eslint/commit/d8c67a564a4cada5add8587f655aee2305cbc562))
+
+
+
+
+
+# [4.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.5.0...v4.6.0) (2020-10-26)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [method-signature-style] correct fixer for overloads in an object literal type ([#2708](https://github.com/typescript-eslint/typescript-eslint/issues/2708)) ([0763913](https://github.com/typescript-eslint/typescript-eslint/commit/0763913c4a0d1061465ae3329704f1a7de4b9326))
+* **eslint-plugin:** [method-signature-style] don't auto-fix interfaces within namespaces ([#2678](https://github.com/typescript-eslint/typescript-eslint/issues/2678)) ([e012049](https://github.com/typescript-eslint/typescript-eslint/commit/e01204931e460f5e6731abc443c88d666ca0b07a))
+* **eslint-plugin:** [prefer-string-starts-ends-with] Check negative indices in the second position for slice ([#2696](https://github.com/typescript-eslint/typescript-eslint/issues/2696)) ([66e9c6e](https://github.com/typescript-eslint/typescript-eslint/commit/66e9c6e29f9f56bbd178ba6405f47053be591258))
+
+
+### Features
+
+* **eslint-plugin:** [ban-types] support banning `[]` ([#2704](https://github.com/typescript-eslint/typescript-eslint/issues/2704)) ([ef8b5a7](https://github.com/typescript-eslint/typescript-eslint/commit/ef8b5a7e09cca4bdacf205da28f99f2b1a419d00)), closes [#2582](https://github.com/typescript-eslint/typescript-eslint/issues/2582)
+* **eslint-plugin:** add `no-unnecessary-type-constraint` rule ([#2516](https://github.com/typescript-eslint/typescript-eslint/issues/2516)) ([880ac75](https://github.com/typescript-eslint/typescript-eslint/commit/880ac753b90d63034f0a33f8f512d9fabc17c8f9))
+* **eslint-plugin:** add extension rule `space-infix-ops` ([#2593](https://github.com/typescript-eslint/typescript-eslint/issues/2593)) ([343d20d](https://github.com/typescript-eslint/typescript-eslint/commit/343d20db23a1640e3bca8cf52b7db1fa46e092e6))
+
+
+
+
+
+# [4.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.4.1...v4.5.0) (2020-10-19)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [array-type] fix issues with readonly option ([#2667](https://github.com/typescript-eslint/typescript-eslint/issues/2667)) ([63d1d81](https://github.com/typescript-eslint/typescript-eslint/commit/63d1d8189c829c6543c7966a864b62c07fbd61a0))
+* **eslint-plugin:** [lines-between-class-members] fix typo in schema ([#2681](https://github.com/typescript-eslint/typescript-eslint/issues/2681)) ([a2a2514](https://github.com/typescript-eslint/typescript-eslint/commit/a2a2514f8a8eee478c8697c4ce42d3c586599b14))
+* **eslint-plugin:** [naming-convention] check bodyless function parameters ([#2675](https://github.com/typescript-eslint/typescript-eslint/issues/2675)) ([c505863](https://github.com/typescript-eslint/typescript-eslint/commit/c505863ac41755383e08893ba0bc4c0fd937eb1d))
+* **eslint-plugin:** [no-invalid-this] allow "this" in class property definitions ([#2685](https://github.com/typescript-eslint/typescript-eslint/issues/2685)) ([dccb6ee](https://github.com/typescript-eslint/typescript-eslint/commit/dccb6ee9f1cd9519c26808d10a5bed8291d0a8e4))
+* **eslint-plugin:** [no-misused-promises] False negative in LogicalExpression ([#2682](https://github.com/typescript-eslint/typescript-eslint/issues/2682)) ([30a6951](https://github.com/typescript-eslint/typescript-eslint/commit/30a695103e99d214fd40847aaa51c1631981c226)), closes [#2544](https://github.com/typescript-eslint/typescript-eslint/issues/2544)
+* **eslint-plugin:** [no-unnecessary-type-assertion] correct fixer for vue files ([#2680](https://github.com/typescript-eslint/typescript-eslint/issues/2680)) ([55111af](https://github.com/typescript-eslint/typescript-eslint/commit/55111afd7819d29d65da4f41cc6a129f34aaeb3e))
+* **eslint-plugin:** [return-await] do not auto-fix when type is `any`/`unknown` ([#2671](https://github.com/typescript-eslint/typescript-eslint/issues/2671)) ([d690c8d](https://github.com/typescript-eslint/typescript-eslint/commit/d690c8dff3636d8c8a9a38bd422e0bedbd1d72cb))
+
+
+### Features
+
+* **eslint-plugin:** [dot-notation] add `allowProtectedClassPropertyAccess` option ([#2622](https://github.com/typescript-eslint/typescript-eslint/issues/2622)) ([bbc9e35](https://github.com/typescript-eslint/typescript-eslint/commit/bbc9e3540576891552dc2dc54b2acbc54104be9d))
+* **eslint-plugin:** [prefer-readonly-parameter-types] add `ignoreInferredTypes` option ([#2668](https://github.com/typescript-eslint/typescript-eslint/issues/2668)) ([91010e8](https://github.com/typescript-eslint/typescript-eslint/commit/91010e88258bf47a0438e842c8ddca19e0414b48))
+* **eslint-plugin:** [restrict-plus-operands] add intersection type determination logic ([#2628](https://github.com/typescript-eslint/typescript-eslint/issues/2628)) ([da71362](https://github.com/typescript-eslint/typescript-eslint/commit/da713627c88354229f245866ccf1018fb56b6e53))
+* **typescript-estree:** add flag EXPERIMENTAL_useSourceOfProjectReferenceRedirect ([#2669](https://github.com/typescript-eslint/typescript-eslint/issues/2669)) ([90a5878](https://github.com/typescript-eslint/typescript-eslint/commit/90a587845088da1b205e4d7d77dbc3f9447b1c5a))
+
+
+
+
+
+## [4.4.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.4.0...v4.4.1) (2020-10-12)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [ban-ts-comment] support block comments ([#2644](https://github.com/typescript-eslint/typescript-eslint/issues/2644)) ([9c3c686](https://github.com/typescript-eslint/typescript-eslint/commit/9c3c686b59b4b8fd02c479a534b5ca9b33c5ff40))
+* **eslint-plugin:** [ban-types] allow banning types with specific parameters ([#2662](https://github.com/typescript-eslint/typescript-eslint/issues/2662)) ([77732a2](https://github.com/typescript-eslint/typescript-eslint/commit/77732a2f3979f638e471b6de327b2ea0e976d568))
+* **eslint-plugin:** [consistent-type-assertions] check type assertion in jsx props ([#2653](https://github.com/typescript-eslint/typescript-eslint/issues/2653)) ([393e925](https://github.com/typescript-eslint/typescript-eslint/commit/393e92573fbde849369af1d10b9f25299ec92eaf))
+* **eslint-plugin:** [no-duplicate-imports] distinguish member, default ([#2637](https://github.com/typescript-eslint/typescript-eslint/issues/2637)) ([c71f423](https://github.com/typescript-eslint/typescript-eslint/commit/c71f423b89bf034caf2a4f1bb3ed0389b72f3aa9))
+* **eslint-plugin:** [no-throw-literal] false positive with logical expressions ([#2645](https://github.com/typescript-eslint/typescript-eslint/issues/2645)) ([57aa6c7](https://github.com/typescript-eslint/typescript-eslint/commit/57aa6c7642320074ed2b6a15e7f38e66a2fb13d1))
+* **eslint-plugin:** [no-unused-vars] fix false positives for duplicated names in namespaces ([#2659](https://github.com/typescript-eslint/typescript-eslint/issues/2659)) ([0d696c7](https://github.com/typescript-eslint/typescript-eslint/commit/0d696c72c5c9c3446902a63509d499ee95483e81))
+* **eslint-plugin:** [no-use-before-define] correctly handle typeof type references ([#2623](https://github.com/typescript-eslint/typescript-eslint/issues/2623)) ([8e44c78](https://github.com/typescript-eslint/typescript-eslint/commit/8e44c78a20410457851e5b7fe9a24777876c0aaf))
+* **scope-manager:** don't create a variable for global augmentation ([#2639](https://github.com/typescript-eslint/typescript-eslint/issues/2639)) ([6bc9325](https://github.com/typescript-eslint/typescript-eslint/commit/6bc93257ec876214743a165093b6666d713379f6))
+
+
+
+
+
+# [4.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.3.0...v4.4.0) (2020-10-05)
+
+
+### Features
+
+* **eslint-plugin:** add `consistent-indexed-object-style` rule ([#2401](https://github.com/typescript-eslint/typescript-eslint/issues/2401)) ([d7dc108](https://github.com/typescript-eslint/typescript-eslint/commit/d7dc108580cdcb9890ac0539e7223aedbff4a0ed))
+* **eslint-plugin:** add extension rule `no-duplicate-imports` ([#2609](https://github.com/typescript-eslint/typescript-eslint/issues/2609)) ([498f397](https://github.com/typescript-eslint/typescript-eslint/commit/498f397ff3898dde631f37311615b555f38a414e))
+
+
+
+
+
+# [4.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.2.0...v4.3.0) (2020-09-28)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** added safe getTypeOfPropertyOfType wrapper ([#2567](https://github.com/typescript-eslint/typescript-eslint/issues/2567)) ([7cba2de](https://github.com/typescript-eslint/typescript-eslint/commit/7cba2de138542563d678fbfc738cd1b3ebf01e07))
+* **experimental-utils:** treat RuleTester arrays as readonly ([#2601](https://github.com/typescript-eslint/typescript-eslint/issues/2601)) ([8025777](https://github.com/typescript-eslint/typescript-eslint/commit/80257776b78bd2b2b4389d6bd530b009a75fb520))
+
+
+### Features
+
+* **eslint-plugin:** [no-invalid-void-type] add option to allow `this: void` ([#2481](https://github.com/typescript-eslint/typescript-eslint/issues/2481)) ([ddf5660](https://github.com/typescript-eslint/typescript-eslint/commit/ddf5660846784003cab4b10ae7a5e510b9dd562b))
+
+
+
+
+
+# [4.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.1.1...v4.2.0) (2020-09-21)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [naming-convention] ignore properties inside object patterns ([#2566](https://github.com/typescript-eslint/typescript-eslint/issues/2566)) ([53a3cbc](https://github.com/typescript-eslint/typescript-eslint/commit/53a3cbc6f002e55135efbdf4982a3ad308ac708b))
+* **eslint-plugin:** [prefer-ts-expect-error] support block comments ([#2541](https://github.com/typescript-eslint/typescript-eslint/issues/2541)) ([c6f72fb](https://github.com/typescript-eslint/typescript-eslint/commit/c6f72fbd3ccc19e39954cfe3d36d358ef43b7daa))
+* **scope-manager:** correct analysis of inferred types in conditional types ([#2537](https://github.com/typescript-eslint/typescript-eslint/issues/2537)) ([4f660fd](https://github.com/typescript-eslint/typescript-eslint/commit/4f660fd31acbb88b30719f925dcb2b3022cc2bab))
+
+
+### Features
+
+* **eslint-plugin:** add extension rule `comma-dangle` ([#2416](https://github.com/typescript-eslint/typescript-eslint/issues/2416)) ([f7babcf](https://github.com/typescript-eslint/typescript-eslint/commit/f7babcf4e6da3e5cba8f2c75d57abf8089432d05))
+
+
+
+
+
+## [4.1.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.1.0...v4.1.1) (2020-09-14)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [naming-convention] allow an array of selectors with types and modifiers ([#2415](https://github.com/typescript-eslint/typescript-eslint/issues/2415)) ([7ca54c3](https://github.com/typescript-eslint/typescript-eslint/commit/7ca54c3e4601ad07db5b882a67965cd67a18c4b3))
+* **eslint-plugin:** [no-implied-eval] handle the `Function` type ([#2435](https://github.com/typescript-eslint/typescript-eslint/issues/2435)) ([e1401dc](https://github.com/typescript-eslint/typescript-eslint/commit/e1401dc5897d01da516802cfb2333cf4bc6d0e93))
+* **eslint-plugin:** [no-unused-vars] better handling for declared modules ([#2553](https://github.com/typescript-eslint/typescript-eslint/issues/2553)) ([02d72d4](https://github.com/typescript-eslint/typescript-eslint/commit/02d72d480be7a8f7ddc66a028338cfb996886f3c)), closes [#2523](https://github.com/typescript-eslint/typescript-eslint/issues/2523)
+* **eslint-plugin:** [no-use-before-define] false positive for function type arguments ([#2554](https://github.com/typescript-eslint/typescript-eslint/issues/2554)) ([189162d](https://github.com/typescript-eslint/typescript-eslint/commit/189162d46ecb116c420232937a7f86df913f4e79)), closes [#2527](https://github.com/typescript-eslint/typescript-eslint/issues/2527)
+* **eslint-plugin:** [prefer-function-type] handle `this` return ([#2437](https://github.com/typescript-eslint/typescript-eslint/issues/2437)) ([7c6fcee](https://github.com/typescript-eslint/typescript-eslint/commit/7c6fcee657dffd041e389e0aeaa4f3e278e92986))
+* **eslint-plugin:** [return-await] don't error for `in-try-catch` if the return is in a `catch` without a `finally` ([#2356](https://github.com/typescript-eslint/typescript-eslint/issues/2356)) ([efdd521](https://github.com/typescript-eslint/typescript-eslint/commit/efdd5213ceaef332cf0b2c26573176f844d22a09))
+
+
+
+
+
+# [4.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.0.1...v4.1.0) (2020-09-07)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [explicit-module-boundary-types] cyclical reference infinite recursion crash ([#2482](https://github.com/typescript-eslint/typescript-eslint/issues/2482)) ([8693653](https://github.com/typescript-eslint/typescript-eslint/commit/86936537bd6f1075cbceeb8d2d4e254d75188409))
+* **eslint-plugin:** [no-unused-vars] correct detection of unused vars in a declared module with `export =` ([#2505](https://github.com/typescript-eslint/typescript-eslint/issues/2505)) ([3d07a99](https://github.com/typescript-eslint/typescript-eslint/commit/3d07a99faa0a5fc1b44acdb43ddbfc90a5105833))
+* **eslint-plugin:** [no-unused-vars] properly handle ambient declaration exports ([#2496](https://github.com/typescript-eslint/typescript-eslint/issues/2496)) ([4d3ce5f](https://github.com/typescript-eslint/typescript-eslint/commit/4d3ce5f696985389bf53a31d62766041c703c70c))
+* **eslint-plugin:** [no-use-before-define] false positive with jsx pragma reference ([#2503](https://github.com/typescript-eslint/typescript-eslint/issues/2503)) ([5afeeab](https://github.com/typescript-eslint/typescript-eslint/commit/5afeeab24ad013142f2431750f24e6085d0a6f3a)), closes [#2502](https://github.com/typescript-eslint/typescript-eslint/issues/2502)
+* **eslint-plugin:** [typedef] false positive for rest parameter with array destructuring ([#2441](https://github.com/typescript-eslint/typescript-eslint/issues/2441)) ([2ada5af](https://github.com/typescript-eslint/typescript-eslint/commit/2ada5aff1ef37bc260d7a0eaafe9ff04f8a08fe4))
+* **eslint-plugin:** handle missing message IDs in eslint v5/v6 ([#2461](https://github.com/typescript-eslint/typescript-eslint/issues/2461)) ([ffdfade](https://github.com/typescript-eslint/typescript-eslint/commit/ffdfade106d602bcc12b074bdfa489e9f661491e))
+* **scope-manager:** add `const` as a global type variable ([#2499](https://github.com/typescript-eslint/typescript-eslint/issues/2499)) ([eb3f6e3](https://github.com/typescript-eslint/typescript-eslint/commit/eb3f6e39391d62ac424baa305a15e61806b2fd65))
+* **scope-manager:** correctly handle inferred types in nested type scopes ([#2497](https://github.com/typescript-eslint/typescript-eslint/issues/2497)) ([95f6bf4](https://github.com/typescript-eslint/typescript-eslint/commit/95f6bf4818cdec48a0583bf82f928c598af22736))
+* **scope-manager:** don't create references for intrinsic JSX elements ([#2504](https://github.com/typescript-eslint/typescript-eslint/issues/2504)) ([cdb9807](https://github.com/typescript-eslint/typescript-eslint/commit/cdb9807a5a368a136856cd03048b68e0f2dfb405))
+* **scope-manager:** support rest function type parameters ([#2491](https://github.com/typescript-eslint/typescript-eslint/issues/2491)) ([9d8b4c4](https://github.com/typescript-eslint/typescript-eslint/commit/9d8b4c479c98623e4198aa07639321929a8a876f)), closes [#2449](https://github.com/typescript-eslint/typescript-eslint/issues/2449)
+* **scope-manager:** support tagged template string generic type parameters ([#2492](https://github.com/typescript-eslint/typescript-eslint/issues/2492)) ([a2686c0](https://github.com/typescript-eslint/typescript-eslint/commit/a2686c04293ab9070c1500a0dab7e205bd1fa9d2))
+* **scope-manager:** support type predicates ([#2493](https://github.com/typescript-eslint/typescript-eslint/issues/2493)) ([a40f54c](https://github.com/typescript-eslint/typescript-eslint/commit/a40f54c39d59096a0d12a492807dcd52fbcdc384)), closes [#2462](https://github.com/typescript-eslint/typescript-eslint/issues/2462)
+* **scope-manager:** treat type imports as both values and types ([#2494](https://github.com/typescript-eslint/typescript-eslint/issues/2494)) ([916e95a](https://github.com/typescript-eslint/typescript-eslint/commit/916e95a505689746dda38a67148c95cc7d207d9f)), closes [#2453](https://github.com/typescript-eslint/typescript-eslint/issues/2453)
+
+
+### Features
+
+* **eslint-plugin:** [no-shadow] add option `ignoreFunctionTypeParameterNameValueShadow` ([#2470](https://github.com/typescript-eslint/typescript-eslint/issues/2470)) ([bfe255f](https://github.com/typescript-eslint/typescript-eslint/commit/bfe255fde0cb5fe5e32c02eb5ba35d27fb23d9ea))
+* **eslint-plugin:** add extension rule `no-loop-func` ([#2490](https://github.com/typescript-eslint/typescript-eslint/issues/2490)) ([36305df](https://github.com/typescript-eslint/typescript-eslint/commit/36305df74b3c26b60364f7ec13390be492b4b2ec))
+* **scope-manager:** add support for JSX scope analysis ([#2498](https://github.com/typescript-eslint/typescript-eslint/issues/2498)) ([f887ab5](https://github.com/typescript-eslint/typescript-eslint/commit/f887ab51f58c1b3571f9a14832864bc0ca59623f)), closes [#2455](https://github.com/typescript-eslint/typescript-eslint/issues/2455) [#2477](https://github.com/typescript-eslint/typescript-eslint/issues/2477)
+
+
+
+
+
+## [4.0.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.0.0...v4.0.1) (2020-08-31)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** update parser dependency range ([#2445](https://github.com/typescript-eslint/typescript-eslint/issues/2445)) ([2cb6620](https://github.com/typescript-eslint/typescript-eslint/commit/2cb66205de797479d9b2d362652c42fe032e913b)), closes [#2444](https://github.com/typescript-eslint/typescript-eslint/issues/2444)
+
+
+
+
+
+# [4.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.10.1...v4.0.0) (2020-08-31)
+
+## [Please see the release notes for v4.0.0](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v4.0.0)
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-shadow] fix false-positive on enum declaration ([#2374](https://github.com/typescript-eslint/typescript-eslint/issues/2374)) ([9de669f](https://github.com/typescript-eslint/typescript-eslint/commit/9de669f339fef62a98f745dc08b833aa5c632e62))
+* **eslint-plugin:** [no-unused-vars] handle TSCallSignature ([#2336](https://github.com/typescript-eslint/typescript-eslint/issues/2336)) ([c70f54f](https://github.com/typescript-eslint/typescript-eslint/commit/c70f54fd3a46a12060ae3aec0faae872c431dd88))
+* correct decorator traversal for AssignmentPattern ([#2375](https://github.com/typescript-eslint/typescript-eslint/issues/2375)) ([d738fa4](https://github.com/typescript-eslint/typescript-eslint/commit/d738fa4eff0a5c4cfc9b30b1c0502f8d1e78d7b6))
+* **scope-manager:** correct analysis of abstract class properties ([#2420](https://github.com/typescript-eslint/typescript-eslint/issues/2420)) ([cd84549](https://github.com/typescript-eslint/typescript-eslint/commit/cd84549beba3cf471d75cfd9ba26f80366842ed5))
+* **typescript-estree:** correct ChainExpression interaction with parentheses and non-nulls ([#2380](https://github.com/typescript-eslint/typescript-eslint/issues/2380)) ([762bc99](https://github.com/typescript-eslint/typescript-eslint/commit/762bc99584ede4d0b8099a743991e957aec86aa8))
+
+
+### Features
+
+* consume new scope analysis package ([#2039](https://github.com/typescript-eslint/typescript-eslint/issues/2039)) ([3be125d](https://github.com/typescript-eslint/typescript-eslint/commit/3be125d9bdbee1984ac6037874edf619213bd3d0))
+* support ESTree optional chaining representation ([#2308](https://github.com/typescript-eslint/typescript-eslint/issues/2308)) ([e9d2ab6](https://github.com/typescript-eslint/typescript-eslint/commit/e9d2ab638b6767700b52797e74b814ea059beaae))
+* **eslint-plugin:** [ban-ts-comment] change default for `ts-expect-error` to `allow-with-description` ([#2351](https://github.com/typescript-eslint/typescript-eslint/issues/2351)) ([a3f163a](https://github.com/typescript-eslint/typescript-eslint/commit/a3f163abc03f0fefc6dca1f205b728a4425209e4)), closes [#2146](https://github.com/typescript-eslint/typescript-eslint/issues/2146)
+* **eslint-plugin:** [no-unnecessary-condition][strict-boolean-expressions] add option to make the rules error on files without `strictNullChecks` turned on ([#2345](https://github.com/typescript-eslint/typescript-eslint/issues/2345)) ([9273441](https://github.com/typescript-eslint/typescript-eslint/commit/9273441f7592b52620e10432cb2dd4dc5c3b4db1))
+* **eslint-plugin:** [typedef] remove all defaults ([#2352](https://github.com/typescript-eslint/typescript-eslint/issues/2352)) ([a9cd6fb](https://github.com/typescript-eslint/typescript-eslint/commit/a9cd6fb893074e4f2ca9ad3497eaddfacb3cfd25))
+* **eslint-plugin:** add `consistent-type-imports` rule ([#2367](https://github.com/typescript-eslint/typescript-eslint/issues/2367)) ([58b1c2d](https://github.com/typescript-eslint/typescript-eslint/commit/58b1c2d463f34895798b9a61340e49ffc3ec4f1a))
+
+
+### BREAKING CHANGES
+
+* - Removed decorators property from several Nodes that could never semantically have them (FunctionDeclaration, TSEnumDeclaration, and TSInterfaceDeclaration)
+- Removed AST_NODE_TYPES.Import. This is a minor breaking change as the node type that used this was removed ages ago.
+* **eslint-plugin:** Default rule options is a breaking change.
+
+
+
+
+
+## [3.10.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.10.0...v3.10.1) (2020-08-25)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-unnecessary-condition] correct regression with unary negations ([#2422](https://github.com/typescript-eslint/typescript-eslint/issues/2422)) ([d1f0887](https://github.com/typescript-eslint/typescript-eslint/commit/d1f08879338c825a1a20406fe47c051a287d6519)), closes [#2421](https://github.com/typescript-eslint/typescript-eslint/issues/2421)
+
+
+
+
+
+# [3.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.9.1...v3.10.0) (2020-08-24)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [explicit-module-boundary-types] ignore abstract setters ([#2410](https://github.com/typescript-eslint/typescript-eslint/issues/2410)) ([3764248](https://github.com/typescript-eslint/typescript-eslint/commit/3764248084455409f085c5bc4706079405cef618))
+* **eslint-plugin:** [explicit-module-boundary-types] ignore all bodyless setters ([#2413](https://github.com/typescript-eslint/typescript-eslint/issues/2413)) ([a53f8c6](https://github.com/typescript-eslint/typescript-eslint/commit/a53f8c6ff37aa47b3fc1b729e359d81ea079ff75))
+* **eslint-plugin:** [no-unnecessary-condition] better handling for unary negation ([#2382](https://github.com/typescript-eslint/typescript-eslint/issues/2382)) ([32fe2bb](https://github.com/typescript-eslint/typescript-eslint/commit/32fe2bb4fe5524355eef4f3a9bd85c824e9d7f46))
+
+
+### Features
+
+* **eslint-plugin:** add `no-implicit-any-catch` rule ([#2202](https://github.com/typescript-eslint/typescript-eslint/issues/2202)) ([fde89d4](https://github.com/typescript-eslint/typescript-eslint/commit/fde89d4d392ef35cac2bc09f2774bfe397b20100))
+
+
+
+
+
+## [3.9.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.9.0...v3.9.1) (2020-08-17)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-unnecessary-condition] fix false positive with nullish coalescing ([#2385](https://github.com/typescript-eslint/typescript-eslint/issues/2385)) ([092c969](https://github.com/typescript-eslint/typescript-eslint/commit/092c96967fd9b58fb2d8d325e1dbc750ccbeb746))
+* **eslint-plugin:** [prefer-includes] don't auto fix when `test` method's argument type doesn't have an 'includes' method ([#2391](https://github.com/typescript-eslint/typescript-eslint/issues/2391)) ([71c4c72](https://github.com/typescript-eslint/typescript-eslint/commit/71c4c729e90e308e0afd70af7db5e9d9ff238527))
+
+
+
+
+
+# [3.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.8.0...v3.9.0) (2020-08-10)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-throw-literal] support type assertions ([#2354](https://github.com/typescript-eslint/typescript-eslint/issues/2354)) ([470174a](https://github.com/typescript-eslint/typescript-eslint/commit/470174ad51fdb12d82129a896559075513f6c912))
+
+
+### Features
+
+* **eslint-plugin:** [no-unsafe-assignment/return] allow assigning any => unknown ([#2371](https://github.com/typescript-eslint/typescript-eslint/issues/2371)) ([e7528e6](https://github.com/typescript-eslint/typescript-eslint/commit/e7528e686f5fe5cce8504fc15d3cd06b8733712e))
+* **typescript-estree:** support TSv4 labelled tuple members ([#2378](https://github.com/typescript-eslint/typescript-eslint/issues/2378)) ([00d84ff](https://github.com/typescript-eslint/typescript-eslint/commit/00d84ffbcbe9d0ec98bdb2f2ce59959a27ce4dbe))
+
+
+
+
+
+# [3.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.7.1...v3.8.0) (2020-08-03)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-implied-eval] don't report when `Function` is imported ([#2348](https://github.com/typescript-eslint/typescript-eslint/issues/2348)) ([fa169e7](https://github.com/typescript-eslint/typescript-eslint/commit/fa169e79661821f0e0e64a56d6db9da42c3c8654))
+* **eslint-plugin:** [no-unsafe-assignment] fix typo in message ([#2347](https://github.com/typescript-eslint/typescript-eslint/issues/2347)) ([2027bb1](https://github.com/typescript-eslint/typescript-eslint/commit/2027bb11689b76c297f93ba8a918b35fe68e5b9d))
+
+
+### Features
+
+* **eslint-plugin:** [naming-convention] allow specifying an array of selectors ([#2335](https://github.com/typescript-eslint/typescript-eslint/issues/2335)) ([3ef6bd5](https://github.com/typescript-eslint/typescript-eslint/commit/3ef6bd5cadc225e42ef1330d15919a39f53f2a2b))
+* **eslint-plugin:** add `prefer-enum-initializers` rule ([#2326](https://github.com/typescript-eslint/typescript-eslint/issues/2326)) ([4f38ea3](https://github.com/typescript-eslint/typescript-eslint/commit/4f38ea39c97289db11501d6368d01db8c5787257))
+
+
+
+
+
+## [3.7.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.7.0...v3.7.1) (2020-07-27)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [adjacent-overload-signatures] fix false positive on call signatures and a method named `call` ([#2313](https://github.com/typescript-eslint/typescript-eslint/issues/2313)) ([30fafb0](https://github.com/typescript-eslint/typescript-eslint/commit/30fafb09422b3aca881f4785d89b0536092d4952))
+* **eslint-plugin:** [no-extra-parens] stop reporting on calling generic functions with one argument and type parameters containing parentheses ([#2319](https://github.com/typescript-eslint/typescript-eslint/issues/2319)) ([616a841](https://github.com/typescript-eslint/typescript-eslint/commit/616a841032bec310d9f31f1c987888273df27008))
+
+
+
+
+
+# [3.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.6.1...v3.7.0) (2020-07-20)
+
+
+### Features
+
+* **eslint-plugin:** [naming-convention] allow selecting only `const` variables ([#2291](https://github.com/typescript-eslint/typescript-eslint/issues/2291)) ([156d058](https://github.com/typescript-eslint/typescript-eslint/commit/156d058fee835fdf1ed827a5ad4a80d57190cc54))
+* **eslint-plugin:** [no-empty-function] add `decoratedFunctions` option ([#2295](https://github.com/typescript-eslint/typescript-eslint/issues/2295)) ([88f08f4](https://github.com/typescript-eslint/typescript-eslint/commit/88f08f410760f58fdc2de58ecd9dab9610821642))
+
+
+
+
+
+## [3.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.6.0...v3.6.1) (2020-07-13)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-unnecessary-condition] handle computed member access ([#2288](https://github.com/typescript-eslint/typescript-eslint/issues/2288)) ([3a187ca](https://github.com/typescript-eslint/typescript-eslint/commit/3a187cafb7302a3c05de0e6a236dd142a5e2d741))
+* **eslint-plugin:** [prefer-literal-enum-member] allow negative numbers ([#2277](https://github.com/typescript-eslint/typescript-eslint/issues/2277)) ([00ac9c3](https://github.com/typescript-eslint/typescript-eslint/commit/00ac9c3ccaad27bab08ec3c3a104f612bb593df5))
+* **eslint-plugin:** [space-before-function-paren] incorrect handling of abstract methods ([#2275](https://github.com/typescript-eslint/typescript-eslint/issues/2275)) ([ced6591](https://github.com/typescript-eslint/typescript-eslint/commit/ced65918b16f46c383496a9b4bd43eca8a76baf6)), closes [#2274](https://github.com/typescript-eslint/typescript-eslint/issues/2274)
+* **eslint-plugin:** [switch-exhaustiveness-check] handle special characters in enum keys ([#2207](https://github.com/typescript-eslint/typescript-eslint/issues/2207)) ([98ab010](https://github.com/typescript-eslint/typescript-eslint/commit/98ab010fb7fca884984bb4200fd806ecee8071b6))
+
+
+
+
+
+# [3.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.5.0...v3.6.0) (2020-07-06)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-namespace] allow namespaces in nested declarations with `allowDeclarations` ([#2238](https://github.com/typescript-eslint/typescript-eslint/issues/2238)) ([c1df669](https://github.com/typescript-eslint/typescript-eslint/commit/c1df6694f7866d3ef7ede0b1c6c9dd6f3955e682))
+* **eslint-plugin:** [space-before-function-paren] handle abstract functions ([#2199](https://github.com/typescript-eslint/typescript-eslint/issues/2199)) ([88a3edf](https://github.com/typescript-eslint/typescript-eslint/commit/88a3edfce8349f871b7b660d2b76508b67c94eda))
+
+
+### Features
+
+* **eslint-plugin:** add rule `prefer-literal-enum-member` ([#1898](https://github.com/typescript-eslint/typescript-eslint/issues/1898)) ([fe2b2ec](https://github.com/typescript-eslint/typescript-eslint/commit/fe2b2ec39ef04ac8b73eef9d29d12fd1b24fa183))
+
+
+
+
+
+# [3.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.4.0...v3.5.0) (2020-06-29)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [naming-convention] support unicode in regex ([#2241](https://github.com/typescript-eslint/typescript-eslint/issues/2241)) ([5fdd21a](https://github.com/typescript-eslint/typescript-eslint/commit/5fdd21a1726fb6928098c4152aec55a30df960d4))
+
+
+### Features
+
+* add package scope-manager ([#1939](https://github.com/typescript-eslint/typescript-eslint/issues/1939)) ([682eb7e](https://github.com/typescript-eslint/typescript-eslint/commit/682eb7e009c3f22a542882dfd3602196a60d2a1e))
+
+
+
+
+
+# [3.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.3.0...v3.4.0) (2020-06-22)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-base-to-string] handle intersection types ([#2170](https://github.com/typescript-eslint/typescript-eslint/issues/2170)) ([9cca3a9](https://github.com/typescript-eslint/typescript-eslint/commit/9cca3a9584d5d5ef0536219c5a734f4e87efb543))
+* **eslint-plugin:** [unbound-method] handling destructuring ([#2228](https://github.com/typescript-eslint/typescript-eslint/issues/2228)) ([c3753c2](https://github.com/typescript-eslint/typescript-eslint/commit/c3753c21768d355ecdb9e7ae8e0bfdfbbc1d3bbe))
+
+
+### Features
+
+* **eslint-plugin:** [no-unnecessary-boolean-literal-compare] add option to check nullable booleans ([#1983](https://github.com/typescript-eslint/typescript-eslint/issues/1983)) ([c0b3057](https://github.com/typescript-eslint/typescript-eslint/commit/c0b3057b7f7d515891ad2efe32e4ef8c01e0478f))
+* **eslint-plugin:** add extension rule `no-loss-of-precision` ([#2196](https://github.com/typescript-eslint/typescript-eslint/issues/2196)) ([535b0f2](https://github.com/typescript-eslint/typescript-eslint/commit/535b0f2ddd82efa6a2c40307a61c480f4b3cdea3))
+
+
+
+
+
+# [3.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.2.0...v3.3.0) (2020-06-15)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-unused-expressions] handle ternary and short-circuit options ([#2194](https://github.com/typescript-eslint/typescript-eslint/issues/2194)) ([ee9f100](https://github.com/typescript-eslint/typescript-eslint/commit/ee9f100a2f9a874c2b361482742686eeaa9bdac7))
+
+
+### Features
+
+* **eslint-plugin:** [naming-convention] better error message and docs for prefix/suffix ([#2195](https://github.com/typescript-eslint/typescript-eslint/issues/2195)) ([a2ffe55](https://github.com/typescript-eslint/typescript-eslint/commit/a2ffe5568df0f7224bfe9141d298e538383d5f09))
+
+
+
+
+
+# [3.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.1.0...v3.2.0) (2020-06-08)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [explicit-module-boundary-types] dont report return type errors on constructor overloads ([#2158](https://github.com/typescript-eslint/typescript-eslint/issues/2158)) ([53232d7](https://github.com/typescript-eslint/typescript-eslint/commit/53232d775ca0b808e2d75d9501f4411a868b2b48))
+* **eslint-plugin:** [explicit-module-boundary-types] handle bodyless arrow functions with explicit return types that return functions ([#2169](https://github.com/typescript-eslint/typescript-eslint/issues/2169)) ([58db655](https://github.com/typescript-eslint/typescript-eslint/commit/58db655133aaae006efe3e3ceee971cf88dc348f))
+* **eslint-plugin:** [explicit-module-boundary-types] handle nested functions and functions expressions in a typed variable declaration ([#2176](https://github.com/typescript-eslint/typescript-eslint/issues/2176)) ([6ff450d](https://github.com/typescript-eslint/typescript-eslint/commit/6ff450da3abec93223a33f6b52484c9ca99b7abe))
+* **eslint-plugin:** [no-extra-non-null-assertion] dont report for assertions not followed by the optional chain ([#2167](https://github.com/typescript-eslint/typescript-eslint/issues/2167)) ([e4c1834](https://github.com/typescript-eslint/typescript-eslint/commit/e4c1834c7c5934332dd1d58c09018453568c4889))
+* **eslint-plugin:** [no-unnecessary-conditionals] Handle comparison of generics and loose comparisons with undefined values ([#2152](https://github.com/typescript-eslint/typescript-eslint/issues/2152)) ([c86e2a2](https://github.com/typescript-eslint/typescript-eslint/commit/c86e2a235372149db9b1700d39c2145e0ce5221a))
+* **eslint-plugin:** [prefer-optional-chain] handling first member expression ([#2156](https://github.com/typescript-eslint/typescript-eslint/issues/2156)) ([de18660](https://github.com/typescript-eslint/typescript-eslint/commit/de18660a8cf8f7033798646d8c5b0938d1accb12))
+* **eslint-plugin:** [return-await] correct handling of ternaries ([#2168](https://github.com/typescript-eslint/typescript-eslint/issues/2168)) ([fe4c0bf](https://github.com/typescript-eslint/typescript-eslint/commit/fe4c0bf8c04f070d6642fbe86c5e5614bc88e8fd))
+
+
+### Features
+
+* **eslint-plugin:** [naming-convention] put identifiers in quotes in error messages ([#2182](https://github.com/typescript-eslint/typescript-eslint/issues/2182)) ([fc61932](https://github.com/typescript-eslint/typescript-eslint/commit/fc619326eedf7ef2efa51444ecdead81a36a204f)), closes [#2178](https://github.com/typescript-eslint/typescript-eslint/issues/2178)
+* **eslint-plugin:** [require-array-sort-compare] add `ignoreStringArrays` option ([#1972](https://github.com/typescript-eslint/typescript-eslint/issues/1972)) ([6dee784](https://github.com/typescript-eslint/typescript-eslint/commit/6dee7840a3af1dfe4c38a128d1c4655bdac625df))
+* **eslint-plugin:** add rule `ban-tslint-comment` ([#2140](https://github.com/typescript-eslint/typescript-eslint/issues/2140)) ([43ee226](https://github.com/typescript-eslint/typescript-eslint/commit/43ee226ffbaaa3e7126081db9476c24b89ec16e9))
+* **eslint-plugin:** add rule `no-confusing-non-null-assertion` ([#1941](https://github.com/typescript-eslint/typescript-eslint/issues/1941)) ([9b51c44](https://github.com/typescript-eslint/typescript-eslint/commit/9b51c44f29d8b3e95a510985544e8ded8a14404d))
+
+
+
+
+
+# [3.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.0.2...v3.1.0) (2020-06-01)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [explicit-module-boundary-types] don't check returned functions if parent function has return type ([#2084](https://github.com/typescript-eslint/typescript-eslint/issues/2084)) ([d7d4eeb](https://github.com/typescript-eslint/typescript-eslint/commit/d7d4eeb03f2918d5d9e361fdb47c2d42e83bd593))
+* **eslint-plugin:** [no-unnecessary-condition] handle comparison of any, unknown and loose comparisons with nullish values ([#2123](https://github.com/typescript-eslint/typescript-eslint/issues/2123)) ([1ae1d01](https://github.com/typescript-eslint/typescript-eslint/commit/1ae1d01e5603ec7cef8051ed018c3c3c88b29867))
+* **eslint-plugin:** [no-unnecessary-condition] improve optional chain handling ([#2111](https://github.com/typescript-eslint/typescript-eslint/issues/2111)) ([9ee399b](https://github.com/typescript-eslint/typescript-eslint/commit/9ee399b5906e82f346ff89141207a6630786de54))
+* **eslint-plugin:** [no-unnecessary-condition] improve optional chain handling 2 - electric boogaloo ([#2138](https://github.com/typescript-eslint/typescript-eslint/issues/2138)) ([c87cfaf](https://github.com/typescript-eslint/typescript-eslint/commit/c87cfaf6746775bb8ad9eb45b0002f068a822dbe))
+* **eslint-plugin:** [no-unused-expressions] ignore import expressions ([#2130](https://github.com/typescript-eslint/typescript-eslint/issues/2130)) ([e383691](https://github.com/typescript-eslint/typescript-eslint/commit/e3836910efdafd9edf04daed149c9e839c08047e))
+* **eslint-plugin:** [no-var-requires] false negative for TSAsExpression and MemberExpression ([#2139](https://github.com/typescript-eslint/typescript-eslint/issues/2139)) ([df95338](https://github.com/typescript-eslint/typescript-eslint/commit/df953388913b22d45242e65ce231d92a8b8a0080))
+* **experimental-utils:** downlevel type declarations for versions older than 3.8 ([#2133](https://github.com/typescript-eslint/typescript-eslint/issues/2133)) ([7925823](https://github.com/typescript-eslint/typescript-eslint/commit/792582326a8065270b69a0ffcaad5a7b4b103ff3))
+
+
+### Features
+
+* **eslint-plugin:** [ban-ts-comments] add "allow-with-description" option ([#2099](https://github.com/typescript-eslint/typescript-eslint/issues/2099)) ([8a0fd18](https://github.com/typescript-eslint/typescript-eslint/commit/8a0fd1899f544470a35afb3117f4c71aad7e4e42))
+* **eslint-plugin:** [ban-types] allow selective disable of default options with `false` value ([#2137](https://github.com/typescript-eslint/typescript-eslint/issues/2137)) ([1cb8ca4](https://github.com/typescript-eslint/typescript-eslint/commit/1cb8ca483d029935310e6904580df8501837084d))
+* **eslint-plugin:** [explicit-module-boundary-types] improve accuracy and coverage ([#2135](https://github.com/typescript-eslint/typescript-eslint/issues/2135)) ([caaa859](https://github.com/typescript-eslint/typescript-eslint/commit/caaa8599284d02ab3341e282cad35a52d0fb86c7))
+
+
+
+
+
+## [3.0.2](https://github.com/typescript-eslint/typescript-eslint/compare/v3.0.1...v3.0.2) (2020-05-27)
+
+**Note:** Version bump only for package @typescript-eslint/eslint-plugin
+
+
+
+
+
+## [3.0.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.0.0...v3.0.1) (2020-05-25)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [naming-convention] handle no options correctly ([#2095](https://github.com/typescript-eslint/typescript-eslint/issues/2095)) ([fd7d02b](https://github.com/typescript-eslint/typescript-eslint/commit/fd7d02b31ebd995b7fdd857d7c054042aa4f2001))
+* **eslint-plugin:** [no-throw-literal] handle intersection and union types ([#2085](https://github.com/typescript-eslint/typescript-eslint/issues/2085)) ([cae037f](https://github.com/typescript-eslint/typescript-eslint/commit/cae037ff9b20363b970cc600a09505b98bf10a14))
+* **eslint-plugin:** [unbound-method] fix crash due to missing `Intl` ([#2090](https://github.com/typescript-eslint/typescript-eslint/issues/2090)) ([f2fa82c](https://github.com/typescript-eslint/typescript-eslint/commit/f2fa82c532ae858ccfb064268cfcc9df657a54be))
+
+
+
+
+
+# [3.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.34.0...v3.0.0) (2020-05-21)
+
+## [Please see the release notes for v3.0.0](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v3.0.0)
+
+### Bug Fixes
+
+* **eslint-plugin:** [dot-notation] fix typo in schema ([#2040](https://github.com/typescript-eslint/typescript-eslint/issues/2040)) ([242328f](https://github.com/typescript-eslint/typescript-eslint/commit/242328fa749ee4c72af93433a9bef95f329ac62f))
+* **eslint-plugin:** correct parser peerDep version ([fe59f69](https://github.com/typescript-eslint/typescript-eslint/commit/fe59f69381a0915a4f5135e2e88637a5eea246ba))
+* **experimental-utils:** add back SourceCode.isSpaceBetweenTokens ([ae82ea4](https://github.com/typescript-eslint/typescript-eslint/commit/ae82ea4a85a4ca332ebe6104e96c59dba30411be))
+* **typescript-estree:** remove now defunct `Import` node type ([f199cbd](https://github.com/typescript-eslint/typescript-eslint/commit/f199cbdbbd892b5ba03bfff66f463f3d9c92ee9b))
+* **typescript-estree:** use `TSEmptyBodyFunctionExpression` for body-less nodes ([#1289](https://github.com/typescript-eslint/typescript-eslint/issues/1289)) ([82e7163](https://github.com/typescript-eslint/typescript-eslint/commit/82e7163214b56ccde93ba97807b161669a50a60b))
+
+
+### Features
+
+* **eslint-plugin:** [ban-types] rework default options ([#848](https://github.com/typescript-eslint/typescript-eslint/issues/848)) ([8e31d5d](https://github.com/typescript-eslint/typescript-eslint/commit/8e31d5dbe9fe5227fdbefcecfd50ce5dd51360c3))
+* **eslint-plugin:** [no-floating-promises] ignore void operator by default ([#2003](https://github.com/typescript-eslint/typescript-eslint/issues/2003)) ([3626a67](https://github.com/typescript-eslint/typescript-eslint/commit/3626a673cf8117cc995245cd86e466e2553e9b0e))
+* **eslint-plugin:** [prefer-nullish-coalescing][prefer-optional-chain] remove unsafe fixers ([52b6085](https://github.com/typescript-eslint/typescript-eslint/commit/52b60852d0ba6bb6abe519c9d3ec1b231793e91d))
+* **experimental-utils:** upgrade eslint types for v7 ([#2023](https://github.com/typescript-eslint/typescript-eslint/issues/2023)) ([06869c9](https://github.com/typescript-eslint/typescript-eslint/commit/06869c9656fa37936126666845aee40aad546ebd))
+* upgrade to ESLint v7 ([#2022](https://github.com/typescript-eslint/typescript-eslint/issues/2022)) ([208de71](https://github.com/typescript-eslint/typescript-eslint/commit/208de71059746bf38e94bd460346ffb2698a3e12))
+* **eslint-plugin:** [no-unnecessary-condition] remove `checkArrayPredicates` and always check it ([#1579](https://github.com/typescript-eslint/typescript-eslint/issues/1579)) ([bfd9b60](https://github.com/typescript-eslint/typescript-eslint/commit/bfd9b606d17d30d5694967a1f01e0e1501ba1022))
+* **eslint-plugin:** [no-unnecessary-condition] remove option `ignoreRHS` ([#1163](https://github.com/typescript-eslint/typescript-eslint/issues/1163)) ([ee8dd8f](https://github.com/typescript-eslint/typescript-eslint/commit/ee8dd8f8a9e6c25ac426ce9bb71c5f012c51f264))
+* **eslint-plugin:** [no-unnecessary-condition] report when non-nullish is compared to `null`/`undefined` ([#1659](https://github.com/typescript-eslint/typescript-eslint/issues/1659)) ([7fa9060](https://github.com/typescript-eslint/typescript-eslint/commit/7fa906073903c5eb70609c25f1a91ada14dcdc71))
+* **eslint-plugin:** [restrict-template-expressions] `allowNumber: true` by default ([#2005](https://github.com/typescript-eslint/typescript-eslint/issues/2005)) ([643ec24](https://github.com/typescript-eslint/typescript-eslint/commit/643ec240bd901295d9e9ea5c43fc20109c33e982))
+* **eslint-plugin:** [restrict-template-expressions] rename `allowNullable` to `allowNullish` ([#2006](https://github.com/typescript-eslint/typescript-eslint/issues/2006)) ([264b017](https://github.com/typescript-eslint/typescript-eslint/commit/264b017c11c2ab132fcbad18b42a9a0fe639386e))
+* **eslint-plugin:** [strict-boolean-expression] rework options ([#1631](https://github.com/typescript-eslint/typescript-eslint/issues/1631)) ([cd14482](https://github.com/typescript-eslint/typescript-eslint/commit/cd1448240dca11762fcb9c10e18bb6541a840485))
+* **eslint-plugin:** delete deprecated rules ([#2002](https://github.com/typescript-eslint/typescript-eslint/issues/2002)) ([da0aec2](https://github.com/typescript-eslint/typescript-eslint/commit/da0aec2cfa27902aae7c438a2fe91343c822e4ae))
+* **eslint-plugin:** eslint-recommended: disable no-func-assign ([#984](https://github.com/typescript-eslint/typescript-eslint/issues/984)) ([ae9b8a9](https://github.com/typescript-eslint/typescript-eslint/commit/ae9b8a9c73c0328287de956466257d8bbfbdb20f))
+* **eslint-plugin:** eslint-recommended: disable no-obj-calls ([#1000](https://github.com/typescript-eslint/typescript-eslint/issues/1000)) ([b9ca14c](https://github.com/typescript-eslint/typescript-eslint/commit/b9ca14c5f5ec28a3fde1a9b2d2f6a4dc74d903e4))
+* **eslint-plugin:** update `eslint-recommended` set ([#1996](https://github.com/typescript-eslint/typescript-eslint/issues/1996)) ([9a96e18](https://github.com/typescript-eslint/typescript-eslint/commit/9a96e18400e0a0d738d159d9d01faf41d3586249))
+* **eslint-plugin:** update recommended sets ([#2001](https://github.com/typescript-eslint/typescript-eslint/issues/2001)) ([0126b4f](https://github.com/typescript-eslint/typescript-eslint/commit/0126b4f56f9197d561e90b09962ccceb4f88bc41))
+* **typescript-estree:** align nodes with estree 2020 ([#1389](https://github.com/typescript-eslint/typescript-eslint/issues/1389)) ([aff5b62](https://github.com/typescript-eslint/typescript-eslint/commit/aff5b62044f9b93f2087a1d261e9be3f8d6fd54d))
+* drop support for node v8 ([#1997](https://github.com/typescript-eslint/typescript-eslint/issues/1997)) ([b6c3b7b](https://github.com/typescript-eslint/typescript-eslint/commit/b6c3b7b84b8d199fa75a46432febd4a364a63217))
+* **typescript-estree:** always return parserServices ([#716](https://github.com/typescript-eslint/typescript-eslint/issues/716)) ([5b23443](https://github.com/typescript-eslint/typescript-eslint/commit/5b23443c48f3f62424db3e742243f3568080b946))
+* **typescript-estree:** handle 3.9's non-null assertion changes ([#2036](https://github.com/typescript-eslint/typescript-eslint/issues/2036)) ([06bec63](https://github.com/typescript-eslint/typescript-eslint/commit/06bec63c56536db070608ab136d2ad57083f0c6a))
+
+
+
+
+
+# [2.34.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.33.0...v2.34.0) (2020-05-18)
+
+
+### Features
+
+* **eslint-plugin:** [no-invalid-void-type] allow union of void and `allowInGenericTypeArguments` ([#1960](https://github.com/typescript-eslint/typescript-eslint/issues/1960)) ([1bc105a](https://github.com/typescript-eslint/typescript-eslint/commit/1bc105a2c6ae3fde9596f0419fed0de699dc57c7))
+* **eslint-plugin:** [restrict-template-expressions] improve error message ([#1926](https://github.com/typescript-eslint/typescript-eslint/issues/1926)) ([1af59ba](https://github.com/typescript-eslint/typescript-eslint/commit/1af59ba8ac0ceabb008d9c61556acf7db0a1d352))
+* **experimental-utils:** add `suggestion` property for rule  modules ([#2033](https://github.com/typescript-eslint/typescript-eslint/issues/2033)) ([f42a5b0](https://github.com/typescript-eslint/typescript-eslint/commit/f42a5b09ebfa173f418a99c552b0cbe221567194))
+
+
+
+
+
+# [2.33.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.32.0...v2.33.0) (2020-05-12)
+
+
+### Features
+
+* **eslint-plugin:** add extension rule `lines-between-class-members` ([#1684](https://github.com/typescript-eslint/typescript-eslint/issues/1684)) ([08f93e6](https://github.com/typescript-eslint/typescript-eslint/commit/08f93e69347a8e7f3a7e8a1455bb5d069c2faeef))
+
+
+
+
+
+# [2.32.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.31.0...v2.32.0) (2020-05-11)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-base-to-string] support boolean in unions ([#1979](https://github.com/typescript-eslint/typescript-eslint/issues/1979)) ([6987ecc](https://github.com/typescript-eslint/typescript-eslint/commit/6987ecc1dacfb45c0f8ed3e81d08aa708eb96ad1))
+* **eslint-plugin:** [no-type-alias] handle readonly types in aliases ([#1990](https://github.com/typescript-eslint/typescript-eslint/issues/1990)) ([56d9870](https://github.com/typescript-eslint/typescript-eslint/commit/56d987070f83d1b6410b04750b20a761fd793073))
+* **eslint-plugin:** [no-unused-expressions] inherit `messages` from base rule ([#1992](https://github.com/typescript-eslint/typescript-eslint/issues/1992)) ([51ca404](https://github.com/typescript-eslint/typescript-eslint/commit/51ca404af645eed194269ab7f8f67b97bd52e32d))
+
+
+### Features
+
+* bump dependencies and align AST ([#2007](https://github.com/typescript-eslint/typescript-eslint/issues/2007)) ([18668b7](https://github.com/typescript-eslint/typescript-eslint/commit/18668b78fd7d1e5281af7fc26c76e0ca53297f69))
+
+
+
+
+
+# [2.31.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.30.0...v2.31.0) (2020-05-04)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [dot-notation] handle missing declarations ([#1947](https://github.com/typescript-eslint/typescript-eslint/issues/1947)) ([383f931](https://github.com/typescript-eslint/typescript-eslint/commit/383f93182599c00e231a0f0d36575ca0e19369a6))
+* **eslint-plugin:** [method-signature-style] fix overloaded methods to an intersection type ([#1966](https://github.com/typescript-eslint/typescript-eslint/issues/1966)) ([7f3fba3](https://github.com/typescript-eslint/typescript-eslint/commit/7f3fba348d432d7637e1c737df943ee1f9105062))
+* **eslint-plugin:** [return-await] await in a normal function ([#1962](https://github.com/typescript-eslint/typescript-eslint/issues/1962)) ([f82fd7b](https://github.com/typescript-eslint/typescript-eslint/commit/f82fd7bb81f986c4861d0b4e2ecdb0c496d7a602))
+* **eslint-plugin:** [unbound-method] false positives for unary expressions ([#1964](https://github.com/typescript-eslint/typescript-eslint/issues/1964)) ([b35070e](https://github.com/typescript-eslint/typescript-eslint/commit/b35070ec6f84ad5ce606386cdb6eeb91488dfdd7))
+* **eslint-plugin:** no-base-to-string boolean expression detect ([#1969](https://github.com/typescript-eslint/typescript-eslint/issues/1969)) ([f78f13a](https://github.com/typescript-eslint/typescript-eslint/commit/f78f13aedd59d5b5880903d48c779a6c50fd937e))
+
+
+### Features
+
+* **eslint-plugin:** [member-ordering] add decorators support ([#1870](https://github.com/typescript-eslint/typescript-eslint/issues/1870)) ([f7ec192](https://github.com/typescript-eslint/typescript-eslint/commit/f7ec1920607cb8eec8020b08cd7247de0bf19ce1))
+* **eslint-plugin:** [prefer-optional-chain] added option to convert to suggestion fixer ([#1965](https://github.com/typescript-eslint/typescript-eslint/issues/1965)) ([2f0824b](https://github.com/typescript-eslint/typescript-eslint/commit/2f0824b0a41f3043b6242fc1d49faae540abaf22))
+* **eslint-plugin:** new extended rule 'no-invalid-this' ([#1823](https://github.com/typescript-eslint/typescript-eslint/issues/1823)) ([b18bc35](https://github.com/typescript-eslint/typescript-eslint/commit/b18bc357507337b9725f8d9c1b549513075a0da5))
+* **experimental-utils:** expose our RuleTester extension ([#1948](https://github.com/typescript-eslint/typescript-eslint/issues/1948)) ([2dd1638](https://github.com/typescript-eslint/typescript-eslint/commit/2dd1638aaa2658ba99b2341861146b586f489121))
+
+
+
+
+
+# [2.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.29.0...v2.30.0) (2020-04-27)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [prefer-string-starts-ends-with] check for negative start index in slice ([#1920](https://github.com/typescript-eslint/typescript-eslint/issues/1920)) ([ed2bd60](https://github.com/typescript-eslint/typescript-eslint/commit/ed2bd6067f74ae33e36a084719bb91efedfba599))
+* **eslint-plugin:** fix no-base-to-string boolean literal check ([#1850](https://github.com/typescript-eslint/typescript-eslint/issues/1850)) ([2f45e99](https://github.com/typescript-eslint/typescript-eslint/commit/2f45e9992a8f12b6233716e77a6159f9cea2c879))
+
+
+### Features
+
+* **eslint-plugin:** add extension rule `dot-notation` ([#1867](https://github.com/typescript-eslint/typescript-eslint/issues/1867)) ([a85c3e1](https://github.com/typescript-eslint/typescript-eslint/commit/a85c3e1515d735b6c245cc658cdaec6deb05d630))
+* **eslint-plugin:** create `no-invalid-void-type` rule ([#1847](https://github.com/typescript-eslint/typescript-eslint/issues/1847)) ([f667ff1](https://github.com/typescript-eslint/typescript-eslint/commit/f667ff1708d4ed28b7ea5beea742889da69a76d9))
+
+
+
+
+
+# [2.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.28.0...v2.29.0) (2020-04-20)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-base-to-string] soft remove `ignoreTaggedTemplateExpressions` option ([#1916](https://github.com/typescript-eslint/typescript-eslint/issues/1916)) ([369978e](https://github.com/typescript-eslint/typescript-eslint/commit/369978e9685bacb3e3882b0510ff06eaf8df4ca1))
+
+
+### Features
+
+* **eslint-plugin:** [no-floating-promise] add option to ignore IIFEs ([#1799](https://github.com/typescript-eslint/typescript-eslint/issues/1799)) ([cea51bf](https://github.com/typescript-eslint/typescript-eslint/commit/cea51bf130d6d3c2935f5e2dcc468196f2ad9d00))
+* **eslint-plugin:** [restrict-template-expressions] add support for intersection types ([#1803](https://github.com/typescript-eslint/typescript-eslint/issues/1803)) ([cc70e4f](https://github.com/typescript-eslint/typescript-eslint/commit/cc70e4fbadd0b15fd6af913a2e1e2ddd346fa558))
+* **eslint-plugin:** add extension rule `init-declarations` ([#1814](https://github.com/typescript-eslint/typescript-eslint/issues/1814)) ([b01f5e7](https://github.com/typescript-eslint/typescript-eslint/commit/b01f5e778ac28e0797a3734fc58d025bb224f418))
+* **eslint-plugin:** add extension rule `keyword-spacing` ([#1739](https://github.com/typescript-eslint/typescript-eslint/issues/1739)) ([c5106dd](https://github.com/typescript-eslint/typescript-eslint/commit/c5106dd4bf2bc8846cc39aa8bb50c33bec026d4d))
+
+
+
+
+
+# [2.28.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.27.0...v2.28.0) (2020-04-13)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [method-signature-style] handle multiline params ([#1861](https://github.com/typescript-eslint/typescript-eslint/issues/1861)) ([5832a86](https://github.com/typescript-eslint/typescript-eslint/commit/5832a8643bbe174ec02df5966bb333e506e45f5d))
+* **eslint-plugin:** [no-empty-interface] use suggestion fixer for ambient contexts ([#1880](https://github.com/typescript-eslint/typescript-eslint/issues/1880)) ([62b2278](https://github.com/typescript-eslint/typescript-eslint/commit/62b2278aec0011c93eae17bed8b278114d3379a2))
+* **eslint-plugin:** [unbound-method] false positive on property function initializer ([#1890](https://github.com/typescript-eslint/typescript-eslint/issues/1890)) ([f1c3b18](https://github.com/typescript-eslint/typescript-eslint/commit/f1c3b18f7aadc81f7dca7aa32aa1a8fe424e04e7))
+* **eslint-plugin:** [unbound-method] ignore assignments _to_ methods ([#1736](https://github.com/typescript-eslint/typescript-eslint/issues/1736)) ([6b4680b](https://github.com/typescript-eslint/typescript-eslint/commit/6b4680b6e7343d9d98fa1de170f387a36d98b73e))
+* **eslint-plugin:** no-empty-interface autofix ([#1865](https://github.com/typescript-eslint/typescript-eslint/issues/1865)) ([829a2f7](https://github.com/typescript-eslint/typescript-eslint/commit/829a2f728f876d356908e2338c2d6620e58f9943)), closes [#1864](https://github.com/typescript-eslint/typescript-eslint/issues/1864)
+* **eslint-plugin:** use `isTypeArrayTypeOrUnionOfArrayTypes` util for checking if type is array ([#1728](https://github.com/typescript-eslint/typescript-eslint/issues/1728)) ([05030f8](https://github.com/typescript-eslint/typescript-eslint/commit/05030f8d2bd5a50e95053bc61380891da71cc567))
+
+
+### Features
+
+* **eslint-plugin:** [ban-ts-comment] support `ts-expect-error` ([#1706](https://github.com/typescript-eslint/typescript-eslint/issues/1706)) ([469cff3](https://github.com/typescript-eslint/typescript-eslint/commit/469cff332c041f38f60de052769287342455cff1))
+* **eslint-plugin:** [consistent-type-assertions] always allow `const` assertions ([#1713](https://github.com/typescript-eslint/typescript-eslint/issues/1713)) ([af2c00d](https://github.com/typescript-eslint/typescript-eslint/commit/af2c00de62f7e31eaeb88996ebf3f330cc8473b9))
+* **eslint-plugin:** [explicit-function-return-type] add option to allow concise arrows that start with void ([#1732](https://github.com/typescript-eslint/typescript-eslint/issues/1732)) ([2e9c202](https://github.com/typescript-eslint/typescript-eslint/commit/2e9c2028a8a0b226e0f87d4bcc997fa259ca3ebd))
+* **eslint-plugin:** [explicit-module-boundary-types] add optio… ([#1778](https://github.com/typescript-eslint/typescript-eslint/issues/1778)) ([3eee804](https://github.com/typescript-eslint/typescript-eslint/commit/3eee804461d017ea6189cd7f64fcd473623684b4))
+* **eslint-plugin:** [no-base-to-string] add option to ignore tagged templates ([#1763](https://github.com/typescript-eslint/typescript-eslint/issues/1763)) ([f5edb99](https://github.com/typescript-eslint/typescript-eslint/commit/f5edb9938c33f8b68f026eba00db3abe9359ced3))
+* **eslint-plugin:** [restrict-template-expressions] add option `allowAny` ([#1762](https://github.com/typescript-eslint/typescript-eslint/issues/1762)) ([d44c0f9](https://github.com/typescript-eslint/typescript-eslint/commit/d44c0f9bed2404ca00b020b35fd825929e213398))
+* **eslint-plugin:** add rule `prefer-reduce-type-parameter` ([#1707](https://github.com/typescript-eslint/typescript-eslint/issues/1707)) ([c92d240](https://github.com/typescript-eslint/typescript-eslint/commit/c92d240e49113779053eac32038382b282812afc))
+* **eslint-plugin:** add rule `prefer-ts-expect-error` ([#1705](https://github.com/typescript-eslint/typescript-eslint/issues/1705)) ([7021f21](https://github.com/typescript-eslint/typescript-eslint/commit/7021f2151a25db2a8edf17e06cd6f21e90761ec8))
+* **eslint-plugin:** add rule no-unsafe-assignment ([#1694](https://github.com/typescript-eslint/typescript-eslint/issues/1694)) ([a49b860](https://github.com/typescript-eslint/typescript-eslint/commit/a49b860cbbb2c7d718b99f561e2fb6eaadf16f17))
+
+
+
+
+
+# [2.27.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.26.0...v2.27.0) (2020-04-06)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-throw-literal] fix crash caused by getBaseTypes ([#1830](https://github.com/typescript-eslint/typescript-eslint/issues/1830)) ([9d53c76](https://github.com/typescript-eslint/typescript-eslint/commit/9d53c761983dd964109b9f13eb9bfe20caf9defb))
+* **eslint-plugin:** [no-unsafe-call] fix incorrect selector ([#1826](https://github.com/typescript-eslint/typescript-eslint/issues/1826)) ([8ec53a3](https://github.com/typescript-eslint/typescript-eslint/commit/8ec53a3579fcb59cdffea0c60fbb755d056f4c8a))
+* **eslint-plugin:** [require-await] handle async generators ([#1782](https://github.com/typescript-eslint/typescript-eslint/issues/1782)) ([9642d9d](https://github.com/typescript-eslint/typescript-eslint/commit/9642d9dce693befac89a4e9d8bf8dd18f4361e2a))
+* **eslint-plugin:** no-explicit-any constructor functions (& mo… ([#1711](https://github.com/typescript-eslint/typescript-eslint/issues/1711)) ([ab8572e](https://github.com/typescript-eslint/typescript-eslint/commit/ab8572e30e14ebda91c8437be5ee35e7dc9add2e))
+
+
+### Features
+
+* **eslint-plugin:** new rule method-signature-style ([#1685](https://github.com/typescript-eslint/typescript-eslint/issues/1685)) ([c49d771](https://github.com/typescript-eslint/typescript-eslint/commit/c49d771ba62f1a21d3c1aec106341daddfcd3c9a))
+* **eslint-plugin:** sort members alphabetically ([#263](https://github.com/typescript-eslint/typescript-eslint/issues/263)) ([485e902](https://github.com/typescript-eslint/typescript-eslint/commit/485e90213a0f8baac0587f7d56925448883fc5bd))
+* **eslint-plugin-internal:** add plugin-test-formatting rule ([#1821](https://github.com/typescript-eslint/typescript-eslint/issues/1821)) ([9b0023a](https://github.com/typescript-eslint/typescript-eslint/commit/9b0023a4996ecdd7dfcb30abd1678091a78f3064))
+
+
+
+
+
+# [2.26.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.25.0...v2.26.0) (2020-03-30)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-explicit-any] error with ignoreRestArgs ([#1796](https://github.com/typescript-eslint/typescript-eslint/issues/1796)) ([638d84d](https://github.com/typescript-eslint/typescript-eslint/commit/638d84ddd77d07117b3ec7c5431f3b0e44b1995d))
+* **eslint-plugin:** [no-unsafe-call] allow import expressions ([#1800](https://github.com/typescript-eslint/typescript-eslint/issues/1800)) ([4fa7107](https://github.com/typescript-eslint/typescript-eslint/commit/4fa710754ecc412b65ac3864fe0c7857c254ac1b))
+* **eslint-plugin:** [no-unsafe-return] error with <TS3.7 ([#1815](https://github.com/typescript-eslint/typescript-eslint/issues/1815)) ([f3160b4](https://github.com/typescript-eslint/typescript-eslint/commit/f3160b471f8247e157555b6cf5b40a1f6ccdc233))
+
+
+
+
+
+# [2.25.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.24.0...v2.25.0) (2020-03-23)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [quotes] false positive with backtick in import equals statement ([#1769](https://github.com/typescript-eslint/typescript-eslint/issues/1769)) ([199863d](https://github.com/typescript-eslint/typescript-eslint/commit/199863d35cb36bdb7178b8116d146258506644c7))
+* **eslint-plugin:** fix message of no-base-to-string ([#1755](https://github.com/typescript-eslint/typescript-eslint/issues/1755)) ([6646959](https://github.com/typescript-eslint/typescript-eslint/commit/6646959b255b08afe5175bba6621bad11b9e1d5e))
+
+
+### Features
+
+* **eslint-plugin:** [no-unnec-type-assertion] allow const assertions ([#1741](https://github.com/typescript-eslint/typescript-eslint/issues/1741)) ([f76a1b3](https://github.com/typescript-eslint/typescript-eslint/commit/f76a1b3e63afda9f239e46f4ad5b36c1d7a6e8da))
+* **eslint-plugin:** [no-unnecessary-condition] ignore basic array indexing false positives ([#1534](https://github.com/typescript-eslint/typescript-eslint/issues/1534)) ([2b9603d](https://github.com/typescript-eslint/typescript-eslint/commit/2b9603d868c57556d8cd6087685e798d74cb6f26))
+* **eslint-plugin:** add `class-literal-property-style` rule ([#1582](https://github.com/typescript-eslint/typescript-eslint/issues/1582)) ([b2dbd89](https://github.com/typescript-eslint/typescript-eslint/commit/b2dbd890a5bef81aa6978d68c166457838ee04a1))
+* **experimental-utils:** expose ast utility functions ([#1670](https://github.com/typescript-eslint/typescript-eslint/issues/1670)) ([3eb5d45](https://github.com/typescript-eslint/typescript-eslint/commit/3eb5d4525e95c8ab990f55588b8d830a02ce5a9c))
+
+
+
+
+
+# [2.24.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.23.0...v2.24.0) (2020-03-16)
+
+**Note:** Version bump only for package @typescript-eslint/eslint-plugin
+
+
+
+
+
+# [2.23.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.22.0...v2.23.0) (2020-03-09)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [prefer-readonly-parameter-types] handle recursive types ([#1672](https://github.com/typescript-eslint/typescript-eslint/issues/1672)) ([e5db36f](https://github.com/typescript-eslint/typescript-eslint/commit/e5db36f140b6463965858ad4ed77f71a9a00c5a7)), closes [#1665](https://github.com/typescript-eslint/typescript-eslint/issues/1665)
+* **eslint-plugin:** [type-annotation-spacing] handle constructor types ([#1664](https://github.com/typescript-eslint/typescript-eslint/issues/1664)) ([fbf1640](https://github.com/typescript-eslint/typescript-eslint/commit/fbf1640c5ab67770a1ace5a9bad2bddfa35bd88d)), closes [#1663](https://github.com/typescript-eslint/typescript-eslint/issues/1663)
+* **eslint-plugin:** fix autofixer for computed properties ([#1662](https://github.com/typescript-eslint/typescript-eslint/issues/1662)) ([ba22ea7](https://github.com/typescript-eslint/typescript-eslint/commit/ba22ea7f604b236828ce4dcff75831ec1da01ec1))
+* **eslint-plugin:** fix placeholder in `ban-ts-comment` ([#1703](https://github.com/typescript-eslint/typescript-eslint/issues/1703)) ([144345c](https://github.com/typescript-eslint/typescript-eslint/commit/144345c4774c0664752116ef2cf28f46cf52052f))
+
+
+### Features
+
+* **eslint-plugin:** [no-unsafe-call] support tagged templates ([#1680](https://github.com/typescript-eslint/typescript-eslint/issues/1680)) ([55a58ff](https://github.com/typescript-eslint/typescript-eslint/commit/55a58ff0ae0434970537657ec2cb0bc7ab64c13d))
+* **eslint-plugin:** [no-unsafe-member-access] report any typed… ([#1683](https://github.com/typescript-eslint/typescript-eslint/issues/1683)) ([1543117](https://github.com/typescript-eslint/typescript-eslint/commit/1543117874047726a6bc1b71bd2f68779f266591))
+* **eslint-plugin:** add rule no-unsafe-call ([#1647](https://github.com/typescript-eslint/typescript-eslint/issues/1647)) ([91423e4](https://github.com/typescript-eslint/typescript-eslint/commit/91423e49d19163fae7b03cbc79bb3cd3db8c2c6d))
+* **eslint-plugin:** add rule no-unsafe-member-access ([#1643](https://github.com/typescript-eslint/typescript-eslint/issues/1643)) ([608a750](https://github.com/typescript-eslint/typescript-eslint/commit/608a750d53c39e892fdb982aeea9e4f9c5e2382d))
+* **eslint-plugin:** add rule no-unsafe-return ([#1644](https://github.com/typescript-eslint/typescript-eslint/issues/1644)) ([cfc3ef1](https://github.com/typescript-eslint/typescript-eslint/commit/cfc3ef10941f46cdbc084e99e1d48d6d3a928903))
+
+
+
+
+
+# [2.22.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.21.0...v2.22.0) (2020-03-02)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [ban-types] add option extendDefaults ([#1379](https://github.com/typescript-eslint/typescript-eslint/issues/1379)) ([ae7f7c5](https://github.com/typescript-eslint/typescript-eslint/commit/ae7f7c5637124b1167efd63755df92e219bbbb24))
+* **eslint-plugin:** [default-param-last] handle param props ([#1650](https://github.com/typescript-eslint/typescript-eslint/issues/1650)) ([3534c6e](https://github.com/typescript-eslint/typescript-eslint/commit/3534c6ea09f0cb2162017660a90c6a4ad704da6b))
+* **eslint-plugin:** [no-implied-eval] correct logic for ts3.8 ([#1652](https://github.com/typescript-eslint/typescript-eslint/issues/1652)) ([33e3e6f](https://github.com/typescript-eslint/typescript-eslint/commit/33e3e6f79ea21792ccb60b7f1ada74057ceb52e9))
+
+
+### Features
+
+* **eslint-plugin:** [explicit-member-accessibility] autofix no-public ([#1548](https://github.com/typescript-eslint/typescript-eslint/issues/1548)) ([dd233b5](https://github.com/typescript-eslint/typescript-eslint/commit/dd233b52dcd5a39d842123af6fc775574abf2bc2))
+* **eslint-plugin:** [typedef] add variable-declaration-ignore-function ([#1578](https://github.com/typescript-eslint/typescript-eslint/issues/1578)) ([fc0a55e](https://github.com/typescript-eslint/typescript-eslint/commit/fc0a55e8b78203972d01a7c9b79ed6b470c5c1a0))
+* **eslint-plugin:** add new no-base-to-string rule ([#1522](https://github.com/typescript-eslint/typescript-eslint/issues/1522)) ([8333d41](https://github.com/typescript-eslint/typescript-eslint/commit/8333d41d5d472ef338fb41a29ccbfc6b16e47627))
+* **eslint-plugin:** add prefer-readonly-parameters ([#1513](https://github.com/typescript-eslint/typescript-eslint/issues/1513)) ([3be9854](https://github.com/typescript-eslint/typescript-eslint/commit/3be98542afd7553cbbec66c4be215173d7f7ffcf))
+* **eslint-plugin:** additional annotation spacing rules for va… ([#1496](https://github.com/typescript-eslint/typescript-eslint/issues/1496)) ([b097245](https://github.com/typescript-eslint/typescript-eslint/commit/b097245df35114906b1f9c60c3ad4cd698d957b8))
+
+
+
+
+
+# [2.21.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.20.0...v2.21.0) (2020-02-24)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [embt] ignore JSX callbacks ([#1630](https://github.com/typescript-eslint/typescript-eslint/issues/1630)) ([4d45b33](https://github.com/typescript-eslint/typescript-eslint/commit/4d45b331b920113c97a90df7dc703f8dfbcc04f3))
+* **eslint-plugin:** [no-floating-promises] handle finally callback ([#1620](https://github.com/typescript-eslint/typescript-eslint/issues/1620)) ([1aa7135](https://github.com/typescript-eslint/typescript-eslint/commit/1aa7135bbfbf55cec52925fc0224188cd3c319e7))
+* **eslint-plugin:** [typedef] allow array/object destructuring in for/of ([#1570](https://github.com/typescript-eslint/typescript-eslint/issues/1570)) ([660bace](https://github.com/typescript-eslint/typescript-eslint/commit/660bace4c3da569d71cf1e296ac4f6ed35bdfc44))
+
+
+### Features
+
+* **eslint-plugin:** [require-await] add --fix support ([#1561](https://github.com/typescript-eslint/typescript-eslint/issues/1561)) ([9edd863](https://github.com/typescript-eslint/typescript-eslint/commit/9edd863b2a66ee44bd4a439903973e6c207480aa))
+
+
+
+
+
+# [2.20.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.19.2...v2.20.0) (2020-02-17)
+
+
+### Features
+
+* **eslint-plugin:** [ban-types] allow banning null and undefined ([#821](https://github.com/typescript-eslint/typescript-eslint/issues/821)) ([0b2b887](https://github.com/typescript-eslint/typescript-eslint/commit/0b2b887c06f2582d812a45f7a8deb82f52d82a84))
+* **eslint-plugin:** [strict-boolean-expressions] refactor, add clearer error messages ([#1480](https://github.com/typescript-eslint/typescript-eslint/issues/1480)) ([db4b530](https://github.com/typescript-eslint/typescript-eslint/commit/db4b530f3f049267d679e89d9e75acfcb86faaf2))
+
+
+
+
+
+## [2.19.2](https://github.com/typescript-eslint/typescript-eslint/compare/v2.19.1...v2.19.2) (2020-02-10)
+
+**Note:** Version bump only for package @typescript-eslint/eslint-plugin
+
+
+
+
+
+## [2.19.1](https://github.com/typescript-eslint/typescript-eslint/compare/v2.19.0...v2.19.1) (2020-02-10)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [unbound-method] blacklist a few unbound natives ([#1562](https://github.com/typescript-eslint/typescript-eslint/issues/1562)) ([4670aab](https://github.com/typescript-eslint/typescript-eslint/commit/4670aabef31d9017ad302f206b9c2f18d53c8ee4))
+
+
+
+
+
+# [2.19.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.18.0...v2.19.0) (2020-02-03)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [embt] fix allowTypedFunctionExpressions ([#1553](https://github.com/typescript-eslint/typescript-eslint/issues/1553)) ([9e7d161](https://github.com/typescript-eslint/typescript-eslint/commit/9e7d1616d78a0f94521f4e6d4b48344e5df2d9f7))
+* **eslint-plugin:** [require-await] improve performance ([#1536](https://github.com/typescript-eslint/typescript-eslint/issues/1536)) ([45ae0b9](https://github.com/typescript-eslint/typescript-eslint/commit/45ae0b9565ee6e9d01e82107d85ad7151a15af7b))
+
+
+### Features
+
+* **eslint-plugin:** [no-extra-non-null-assert] add fixer ([#1468](https://github.com/typescript-eslint/typescript-eslint/issues/1468)) ([54201ab](https://github.com/typescript-eslint/typescript-eslint/commit/54201aba37b2865c0ba4981be79d1fd989806133))
+* **eslint-plugin:** [no-float-prom] fixer + msg for ignoreVoid ([#1473](https://github.com/typescript-eslint/typescript-eslint/issues/1473)) ([159b16e](https://github.com/typescript-eslint/typescript-eslint/commit/159b16ec3a66f05478080c397df5c3f6e29535e4))
+* **eslint-plugin:** [unbound-method] support bound builtins ([#1526](https://github.com/typescript-eslint/typescript-eslint/issues/1526)) ([0a110eb](https://github.com/typescript-eslint/typescript-eslint/commit/0a110eb680749c8c4a2a3dc1375c1a83056e4c14))
+* **eslint-plugin:** add extension [no-dupe-class-members] ([#1492](https://github.com/typescript-eslint/typescript-eslint/issues/1492)) ([b22424e](https://github.com/typescript-eslint/typescript-eslint/commit/b22424e7d4a16042a027557f44e9191e0722b38b))
+* **eslint-plugin:** add no-unnecessary-boolean-literal-compare ([#242](https://github.com/typescript-eslint/typescript-eslint/issues/242)) ([6bebb1d](https://github.com/typescript-eslint/typescript-eslint/commit/6bebb1dc47897ee0e1f075d7e5dd89d8b0590f31))
+* **eslint-plugin:** add switch-exhaustiveness-check rule ([#972](https://github.com/typescript-eslint/typescript-eslint/issues/972)) ([9e0f6dd](https://github.com/typescript-eslint/typescript-eslint/commit/9e0f6ddef7cd29f355f398c90f1986e51c4854f7))
+* **eslint-plugin:** support negative matches for `filter` ([#1517](https://github.com/typescript-eslint/typescript-eslint/issues/1517)) ([b24fbe8](https://github.com/typescript-eslint/typescript-eslint/commit/b24fbe8790b540998e4085174251fb4d61bf96b0))
+
+
+
+
+
+# [2.18.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.17.0...v2.18.0) (2020-01-27)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [explicit-module-boundary-types] false positive for returned fns ([#1490](https://github.com/typescript-eslint/typescript-eslint/issues/1490)) ([5562ad5](https://github.com/typescript-eslint/typescript-eslint/commit/5562ad5ed902102d7c09a7fd47ca4ea7e50d6654))
+* improve token types and add missing type guards ([#1497](https://github.com/typescript-eslint/typescript-eslint/issues/1497)) ([ce41d7d](https://github.com/typescript-eslint/typescript-eslint/commit/ce41d7de33bcb7ccf96c03ac1438304c5a49ff54))
+* **eslint-plugin:** [naming-convention] fix filter option ([#1482](https://github.com/typescript-eslint/typescript-eslint/issues/1482)) ([718cd88](https://github.com/typescript-eslint/typescript-eslint/commit/718cd889c155a75413c571ac006c33fbc271dcc5))
+* **eslint-plugin:** fix property access on undefined error ([#1507](https://github.com/typescript-eslint/typescript-eslint/issues/1507)) ([d89e8e8](https://github.com/typescript-eslint/typescript-eslint/commit/d89e8e8a1114989e2727351bee7aadb6579f312b))
+
+
+### Features
+
+* **eslint-plugin:** add comma-spacing ([#1495](https://github.com/typescript-eslint/typescript-eslint/issues/1495)) ([1fd86be](https://github.com/typescript-eslint/typescript-eslint/commit/1fd86befa6a940a0354c619dd2da08a5c5d69fb4))
+* **eslint-plugin:** add new rule prefer-as-const ([#1431](https://github.com/typescript-eslint/typescript-eslint/issues/1431)) ([420db96](https://github.com/typescript-eslint/typescript-eslint/commit/420db96921435e8bf7fb484ae74552a912a6adde))
+* **eslint-plugin:** create `ban-ts-comment` rule ([#1361](https://github.com/typescript-eslint/typescript-eslint/issues/1361)) ([2a83d13](https://github.com/typescript-eslint/typescript-eslint/commit/2a83d138a966cd5ce787d1eecf595b59b78232d4))
+* **experimental-utils:** make RuleMetaData.docs optional ([#1462](https://github.com/typescript-eslint/typescript-eslint/issues/1462)) ([cde97ac](https://github.com/typescript-eslint/typescript-eslint/commit/cde97aca24df5a0f28f37006ed130ebc217fb2ad))
+
+
+
+
+
+# [2.17.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.16.0...v2.17.0) (2020-01-20)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [naming-convention] handle empty array-pattern ([#1450](https://github.com/typescript-eslint/typescript-eslint/issues/1450)) ([4726605](https://github.com/typescript-eslint/typescript-eslint/commit/4726605))
+* **eslint-plugin:** [unbound-method] handling of logical expr ([#1440](https://github.com/typescript-eslint/typescript-eslint/issues/1440)) ([9c5b857](https://github.com/typescript-eslint/typescript-eslint/commit/9c5b857))
+* **eslint-plugin:** set default-param-last as an extension rule ([#1445](https://github.com/typescript-eslint/typescript-eslint/issues/1445)) ([b5ef704](https://github.com/typescript-eslint/typescript-eslint/commit/b5ef704))
+* **typescript-estree:** correct type of `ArrayPattern.elements` ([#1451](https://github.com/typescript-eslint/typescript-eslint/issues/1451)) ([62e4ca0](https://github.com/typescript-eslint/typescript-eslint/commit/62e4ca0))
+
+
+### Features
+
+* **eslint-plugin:** [naming-convention] allow not check format ([#1455](https://github.com/typescript-eslint/typescript-eslint/issues/1455)) ([61eb434](https://github.com/typescript-eslint/typescript-eslint/commit/61eb434))
+* **eslint-plugin:** [naming-convention] correct example ([#1455](https://github.com/typescript-eslint/typescript-eslint/issues/1455)) ([60683d7](https://github.com/typescript-eslint/typescript-eslint/commit/60683d7))
+* **eslint-plugin:** [no-extra-!-assert] flag ?. after !-assert ([#1460](https://github.com/typescript-eslint/typescript-eslint/issues/1460)) ([58c7c25](https://github.com/typescript-eslint/typescript-eslint/commit/58c7c25))
+* **eslint-plugin:** add explicit-module-boundary-types rule ([#1020](https://github.com/typescript-eslint/typescript-eslint/issues/1020)) ([bb0a846](https://github.com/typescript-eslint/typescript-eslint/commit/bb0a846))
+* **eslint-plugin:** add no-non-null-asserted-optional-chain ([#1469](https://github.com/typescript-eslint/typescript-eslint/issues/1469)) ([498aa24](https://github.com/typescript-eslint/typescript-eslint/commit/498aa24))
+* **experimental-utils:** expose getParserServices from utils ([#1448](https://github.com/typescript-eslint/typescript-eslint/issues/1448)) ([982c8bc](https://github.com/typescript-eslint/typescript-eslint/commit/982c8bc))
+
+
+
+
+
+# [2.16.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.15.0...v2.16.0) (2020-01-13)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-magic-numbers] handle UnaryExpression for enums ([#1415](https://github.com/typescript-eslint/typescript-eslint/issues/1415)) ([852fc31](https://github.com/typescript-eslint/typescript-eslint/commit/852fc31))
+* **eslint-plugin:** [no-unnec-type-assert] handle JSX attributes ([#1002](https://github.com/typescript-eslint/typescript-eslint/issues/1002)) ([3c5659b](https://github.com/typescript-eslint/typescript-eslint/commit/3c5659b))
+* **eslint-plugin:** handle error classes using generics ([#1428](https://github.com/typescript-eslint/typescript-eslint/issues/1428)) ([b139540](https://github.com/typescript-eslint/typescript-eslint/commit/b139540))
+* **typescript-estree:** resolve path relative to tsconfigRootDir ([#1439](https://github.com/typescript-eslint/typescript-eslint/issues/1439)) ([c709056](https://github.com/typescript-eslint/typescript-eslint/commit/c709056))
+
+
+### Features
+
+* **eslint-plugin:** [no-unnec-cond] array predicate callbacks ([#1206](https://github.com/typescript-eslint/typescript-eslint/issues/1206)) ([f7ad716](https://github.com/typescript-eslint/typescript-eslint/commit/f7ad716))
+* **eslint-plugin:** add default-param-last rule ([#1418](https://github.com/typescript-eslint/typescript-eslint/issues/1418)) ([a37ff9f](https://github.com/typescript-eslint/typescript-eslint/commit/a37ff9f))
+* **eslint-plugin:** add rule naming-conventions ([#1318](https://github.com/typescript-eslint/typescript-eslint/issues/1318)) ([9eab26f](https://github.com/typescript-eslint/typescript-eslint/commit/9eab26f))
+* **typescript-estree:** add strict type mapping to esTreeNodeToTSNodeMap ([#1382](https://github.com/typescript-eslint/typescript-eslint/issues/1382)) ([d3d70a3](https://github.com/typescript-eslint/typescript-eslint/commit/d3d70a3))
+
+
+
+
+
+# [2.15.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.14.0...v2.15.0) (2020-01-06)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** crash in no-unnecessary-type-arguments ([#1401](https://github.com/typescript-eslint/typescript-eslint/issues/1401)) ([01c939f](https://github.com/typescript-eslint/typescript-eslint/commit/01c939f))
+
+
+### Features
+
+* **eslint-plugin:** [strict-bool-expr] add allowSafe option ([#1385](https://github.com/typescript-eslint/typescript-eslint/issues/1385)) ([9344233](https://github.com/typescript-eslint/typescript-eslint/commit/9344233))
+* **eslint-plugin:** add no-implied-eval ([#1375](https://github.com/typescript-eslint/typescript-eslint/issues/1375)) ([254d276](https://github.com/typescript-eslint/typescript-eslint/commit/254d276))
+
+
+
+
+
+# [2.14.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.13.0...v2.14.0) (2019-12-30)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** type assertion in rule no-extra-parens ([#1376](https://github.com/typescript-eslint/typescript-eslint/issues/1376)) ([f40639e](https://github.com/typescript-eslint/typescript-eslint/commit/f40639e))
+
+
+### Features
+
+* add internal eslint plugin for repo-specific lint rules ([#1373](https://github.com/typescript-eslint/typescript-eslint/issues/1373)) ([3a15413](https://github.com/typescript-eslint/typescript-eslint/commit/3a15413))
+
+
+
+
+
+# [2.13.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.12.0...v2.13.0) (2019-12-23)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [quotes] ignore backticks for Enum members ([#1355](https://github.com/typescript-eslint/typescript-eslint/issues/1355)) ([e51048c](https://github.com/typescript-eslint/typescript-eslint/commit/e51048c))
+* **eslint-plugin:** [type-annotation-spacing] typo in messages ([#1354](https://github.com/typescript-eslint/typescript-eslint/issues/1354)) ([82e0dbc](https://github.com/typescript-eslint/typescript-eslint/commit/82e0dbc))
+* **eslint-plugin:** add isTypeAssertion utility function ([#1369](https://github.com/typescript-eslint/typescript-eslint/issues/1369)) ([bb1671e](https://github.com/typescript-eslint/typescript-eslint/commit/bb1671e))
+* **eslint-plugin:** use AST_NODE_TYPES enum instead of strings ([#1366](https://github.com/typescript-eslint/typescript-eslint/issues/1366)) ([bd0276b](https://github.com/typescript-eslint/typescript-eslint/commit/bd0276b))
+
+
+### Features
+
+* **eslint-plugin:** [ban-types] handle empty type literal {} ([#1348](https://github.com/typescript-eslint/typescript-eslint/issues/1348)) ([1c0ce9b](https://github.com/typescript-eslint/typescript-eslint/commit/1c0ce9b))
+* **eslint-plugin:** [no-use-before-define] opt to ignore enum ([#1242](https://github.com/typescript-eslint/typescript-eslint/issues/1242)) ([6edd911](https://github.com/typescript-eslint/typescript-eslint/commit/6edd911))
+* **eslint-plugin:** [pref-str-starts/ends-with] optional chain… ([#1357](https://github.com/typescript-eslint/typescript-eslint/issues/1357)) ([fd37bc3](https://github.com/typescript-eslint/typescript-eslint/commit/fd37bc3))
+* **eslint-plugin:** add no-extra-semi [extension] ([#1237](https://github.com/typescript-eslint/typescript-eslint/issues/1237)) ([425f65c](https://github.com/typescript-eslint/typescript-eslint/commit/425f65c))
+* **eslint-plugin:** add no-throw-literal [extension] ([#1331](https://github.com/typescript-eslint/typescript-eslint/issues/1331)) ([2aa696c](https://github.com/typescript-eslint/typescript-eslint/commit/2aa696c))
+* **eslint-plugin:** more optional chain support in rules ([#1363](https://github.com/typescript-eslint/typescript-eslint/issues/1363)) ([3dd1b02](https://github.com/typescript-eslint/typescript-eslint/commit/3dd1b02))
+* **typescript-estree:** computed members discriminated unions ([#1349](https://github.com/typescript-eslint/typescript-eslint/issues/1349)) ([013df9a](https://github.com/typescript-eslint/typescript-eslint/commit/013df9a))
+* **typescript-estree:** tighten prop name and destructure types ([#1346](https://github.com/typescript-eslint/typescript-eslint/issues/1346)) ([f335c50](https://github.com/typescript-eslint/typescript-eslint/commit/f335c50))
+
+
+
+
+
+# [2.12.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.11.0...v2.12.0) (2019-12-16)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [prefer-null-coal] fixer w/ mixed logicals ([#1326](https://github.com/typescript-eslint/typescript-eslint/issues/1326)) ([f9a9fbf](https://github.com/typescript-eslint/typescript-eslint/commit/f9a9fbf))
+* **eslint-plugin:** [quotes] ignore backticks for interface properties ([#1311](https://github.com/typescript-eslint/typescript-eslint/issues/1311)) ([3923a09](https://github.com/typescript-eslint/typescript-eslint/commit/3923a09))
+
+
+### Features
+
+* **eslint-plugin:** [no-unnec-cond] check optional chaining ([#1315](https://github.com/typescript-eslint/typescript-eslint/issues/1315)) ([a2a8a0a](https://github.com/typescript-eslint/typescript-eslint/commit/a2a8a0a))
+
+
+
+
+
+# [2.11.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.10.0...v2.11.0) (2019-12-09)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [brace-style] handle enum declarations ([#1281](https://github.com/typescript-eslint/typescript-eslint/issues/1281)) ([3ddf1a2](https://github.com/typescript-eslint/typescript-eslint/commit/3ddf1a2))
+
+
+### Features
+
+* **eslint-plugin:** [member-ordering] add index signature ([#1190](https://github.com/typescript-eslint/typescript-eslint/issues/1190)) ([b5a52a3](https://github.com/typescript-eslint/typescript-eslint/commit/b5a52a3))
+
+
+
+
+
+# [2.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.9.0...v2.10.0) (2019-12-02)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-empty-function] add missed node types ([#1271](https://github.com/typescript-eslint/typescript-eslint/issues/1271)) ([e9d44f5](https://github.com/typescript-eslint/typescript-eslint/commit/e9d44f5))
+* **eslint-plugin:** [no-untyped-pub-sig] ignore set return ([#1264](https://github.com/typescript-eslint/typescript-eslint/issues/1264)) ([6daff10](https://github.com/typescript-eslint/typescript-eslint/commit/6daff10))
+* **eslint-plugin:** [no-unused-expressions] ignore directives ([#1285](https://github.com/typescript-eslint/typescript-eslint/issues/1285)) ([ce4c803](https://github.com/typescript-eslint/typescript-eslint/commit/ce4c803))
+* **eslint-plugin:** [prefer-optional-chain] allow $ in identifiers ([c72c3c1](https://github.com/typescript-eslint/typescript-eslint/commit/c72c3c1))
+* **eslint-plugin:** [prefer-optional-chain] handle more cases ([#1261](https://github.com/typescript-eslint/typescript-eslint/issues/1261)) ([57ddba3](https://github.com/typescript-eslint/typescript-eslint/commit/57ddba3))
+* **eslint-plugin:** [return-await] allow Any and Unknown ([#1270](https://github.com/typescript-eslint/typescript-eslint/issues/1270)) ([ebf5e0a](https://github.com/typescript-eslint/typescript-eslint/commit/ebf5e0a))
+* **eslint-plugin:** [strict-bool-expr] allow nullish coalescing ([#1275](https://github.com/typescript-eslint/typescript-eslint/issues/1275)) ([3b39340](https://github.com/typescript-eslint/typescript-eslint/commit/3b39340))
+
+
+### Features
+
+* **eslint-plugin:** [no-empty-func] private/protected construct ([#1267](https://github.com/typescript-eslint/typescript-eslint/issues/1267)) ([3b931ac](https://github.com/typescript-eslint/typescript-eslint/commit/3b931ac))
+* **eslint-plugin:** [no-non-null-assert] add suggestion fixer ([#1260](https://github.com/typescript-eslint/typescript-eslint/issues/1260)) ([e350a21](https://github.com/typescript-eslint/typescript-eslint/commit/e350a21))
+* **eslint-plugin:** [no-unnec-cond] support nullish coalescing ([#1148](https://github.com/typescript-eslint/typescript-eslint/issues/1148)) ([96ef1e7](https://github.com/typescript-eslint/typescript-eslint/commit/96ef1e7))
+* **eslint-plugin:** [prefer-null-coal] opt for suggestion fixer ([#1272](https://github.com/typescript-eslint/typescript-eslint/issues/1272)) ([f84eb96](https://github.com/typescript-eslint/typescript-eslint/commit/f84eb96))
+
+
+
+
+
+# [2.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.8.0...v2.9.0) (2019-11-25)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-dynamic-delete] correct invalid fixer for identifiers ([#1244](https://github.com/typescript-eslint/typescript-eslint/issues/1244)) ([5b1300d](https://github.com/typescript-eslint/typescript-eslint/commit/5b1300d))
+* **eslint-plugin:** [no-untyped-pub-sig] constructor return ([#1231](https://github.com/typescript-eslint/typescript-eslint/issues/1231)) ([6cfd468](https://github.com/typescript-eslint/typescript-eslint/commit/6cfd468))
+* **eslint-plugin:** [prefer-optional-chain] unhandled cases ([b1a065f](https://github.com/typescript-eslint/typescript-eslint/commit/b1a065f))
+* **eslint-plugin:** [req-await] crash on nonasync promise return ([#1228](https://github.com/typescript-eslint/typescript-eslint/issues/1228)) ([56c00b3](https://github.com/typescript-eslint/typescript-eslint/commit/56c00b3))
+
+
+### Features
+
+* **eslint-plugin:** [camelcase] add genericType option ([#925](https://github.com/typescript-eslint/typescript-eslint/issues/925)) ([d785c61](https://github.com/typescript-eslint/typescript-eslint/commit/d785c61))
+* **eslint-plugin:** [no-empty-interface] noEmptyWithSuper fixer ([#1247](https://github.com/typescript-eslint/typescript-eslint/issues/1247)) ([b91b0ba](https://github.com/typescript-eslint/typescript-eslint/commit/b91b0ba))
+* **eslint-plugin:** [no-extran-class] add allowWithDecorator opt ([#886](https://github.com/typescript-eslint/typescript-eslint/issues/886)) ([f1ab9a2](https://github.com/typescript-eslint/typescript-eslint/commit/f1ab9a2))
+* **eslint-plugin:** [no-unnece-cond] Add allowConstantLoopConditions ([#1029](https://github.com/typescript-eslint/typescript-eslint/issues/1029)) ([ceb6f1c](https://github.com/typescript-eslint/typescript-eslint/commit/ceb6f1c))
+* **eslint-plugin:** [restrict-plus-operands] check += ([#892](https://github.com/typescript-eslint/typescript-eslint/issues/892)) ([fa88cb9](https://github.com/typescript-eslint/typescript-eslint/commit/fa88cb9))
+* suggestion types, suggestions for no-explicit-any ([#1250](https://github.com/typescript-eslint/typescript-eslint/issues/1250)) ([b16a4b6](https://github.com/typescript-eslint/typescript-eslint/commit/b16a4b6))
+* **eslint-plugin:** add no-extra-non-null-assertion ([#1183](https://github.com/typescript-eslint/typescript-eslint/issues/1183)) ([2b3b5d6](https://github.com/typescript-eslint/typescript-eslint/commit/2b3b5d6))
+* **eslint-plugin:** add no-unused-vars-experimental ([#688](https://github.com/typescript-eslint/typescript-eslint/issues/688)) ([05ebea5](https://github.com/typescript-eslint/typescript-eslint/commit/05ebea5))
+* **eslint-plugin:** add prefer-nullish-coalescing ([#1069](https://github.com/typescript-eslint/typescript-eslint/issues/1069)) ([a9cd399](https://github.com/typescript-eslint/typescript-eslint/commit/a9cd399))
+* **eslint-plugin:** add return-await rule ([#1050](https://github.com/typescript-eslint/typescript-eslint/issues/1050)) ([0ff4620](https://github.com/typescript-eslint/typescript-eslint/commit/0ff4620))
+* **eslint-plugin:** add rule prefer-optional-chain ([#1213](https://github.com/typescript-eslint/typescript-eslint/issues/1213)) ([ad7e1a7](https://github.com/typescript-eslint/typescript-eslint/commit/ad7e1a7))
+* **eslint-plugin:** optional chain support in rules (part 1) ([#1253](https://github.com/typescript-eslint/typescript-eslint/issues/1253)) ([f5c0e02](https://github.com/typescript-eslint/typescript-eslint/commit/f5c0e02))
+
+
+
+
+
+# [2.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.7.0...v2.8.0) (2019-11-18)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [camelcase] handle optional member expr ([#1204](https://github.com/typescript-eslint/typescript-eslint/issues/1204)) ([9c8203f](https://github.com/typescript-eslint/typescript-eslint/commit/9c8203f))
+* **eslint-plugin:** [indent] fix decorator type ([#1189](https://github.com/typescript-eslint/typescript-eslint/issues/1189)) ([e2008e3](https://github.com/typescript-eslint/typescript-eslint/commit/e2008e3))
+* **eslint-plugin:** [indent] handle empty generic declarations ([#1211](https://github.com/typescript-eslint/typescript-eslint/issues/1211)) ([9aee06c](https://github.com/typescript-eslint/typescript-eslint/commit/9aee06c))
+* **eslint-plugin:** [no-type-alias] handle constructor aliases ([#1198](https://github.com/typescript-eslint/typescript-eslint/issues/1198)) ([1bb4d63](https://github.com/typescript-eslint/typescript-eslint/commit/1bb4d63))
+* **eslint-plugin:** [no-unnec-type-arg] throwing on call/new expr ([#1217](https://github.com/typescript-eslint/typescript-eslint/issues/1217)) ([42a48de](https://github.com/typescript-eslint/typescript-eslint/commit/42a48de))
+* **eslint-plugin:** [no-unnecessary-cond] fix naked type param ([#1207](https://github.com/typescript-eslint/typescript-eslint/issues/1207)) ([4fac6c5](https://github.com/typescript-eslint/typescript-eslint/commit/4fac6c5))
+* **eslint-plugin:** [nuta] correctly handle null/undefined separation ([#1201](https://github.com/typescript-eslint/typescript-eslint/issues/1201)) ([9829dd3](https://github.com/typescript-eslint/typescript-eslint/commit/9829dd3))
+* **eslint-plugin:** [require-await] better handle nesting ([#1193](https://github.com/typescript-eslint/typescript-eslint/issues/1193)) ([eb83af1](https://github.com/typescript-eslint/typescript-eslint/commit/eb83af1))
+* **eslint-plugin:** [unified-signatures] crash: cannot read pro… ([#1096](https://github.com/typescript-eslint/typescript-eslint/issues/1096)) ([d1de3a7](https://github.com/typescript-eslint/typescript-eslint/commit/d1de3a7))
+* **eslint-plugin:** disable base no-unused-expressions in all config ([ecb3f4e](https://github.com/typescript-eslint/typescript-eslint/commit/ecb3f4e))
+
+
+### Features
+
+* **eslint-plugin:** [no-type-alias] handle conditional types ([#953](https://github.com/typescript-eslint/typescript-eslint/issues/953)) ([259ff20](https://github.com/typescript-eslint/typescript-eslint/commit/259ff20))
+* **eslint-plugin:** add rule restrict-template-expressions ([#850](https://github.com/typescript-eslint/typescript-eslint/issues/850)) ([46b58b4](https://github.com/typescript-eslint/typescript-eslint/commit/46b58b4))
+* **eslint-plugin:** add space-before-function-paren [extension] ([#924](https://github.com/typescript-eslint/typescript-eslint/issues/924)) ([d8b07a7](https://github.com/typescript-eslint/typescript-eslint/commit/d8b07a7))
+* **eslint-plugin:** added new rule no-dynamic-delete ([#565](https://github.com/typescript-eslint/typescript-eslint/issues/565)) ([864c811](https://github.com/typescript-eslint/typescript-eslint/commit/864c811))
+* **eslint-plugin:** added new rule no-untyped-public-signature ([#801](https://github.com/typescript-eslint/typescript-eslint/issues/801)) ([c5835f3](https://github.com/typescript-eslint/typescript-eslint/commit/c5835f3))
+
+
+
+
+
+# [2.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.6.1...v2.7.0) (2019-11-11)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** crash fixing readonly arrays to generic ([#1172](https://github.com/typescript-eslint/typescript-eslint/issues/1172)) ([2b2f2d7](https://github.com/typescript-eslint/typescript-eslint/commit/2b2f2d7))
+
+
+### Features
+
+* **eslint-plugin:** [no-unused-expressions] extend for optional chaining ([#1175](https://github.com/typescript-eslint/typescript-eslint/issues/1175)) ([57d63b7](https://github.com/typescript-eslint/typescript-eslint/commit/57d63b7))
+* **parser:** handle optional chaining in scope analysis ([#1169](https://github.com/typescript-eslint/typescript-eslint/issues/1169)) ([026ceb9](https://github.com/typescript-eslint/typescript-eslint/commit/026ceb9))
+
+
+
+
+
+## [2.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v2.6.0...v2.6.1) (2019-11-04)
+
+**Note:** Version bump only for package @typescript-eslint/eslint-plugin
+
+
+
+
+
+# [2.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.5.0...v2.6.0) (2019-10-28)
+
+
+### Features
+
+* **typescript-estree:** add support for declare class properties ([#1136](https://github.com/typescript-eslint/typescript-eslint/issues/1136)) ([1508670](https://github.com/typescript-eslint/typescript-eslint/commit/1508670))
+
+
+
+
+
+# [2.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.4.0...v2.5.0) (2019-10-21)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-magic-numbers] Support negative numbers ([#1072](https://github.com/typescript-eslint/typescript-eslint/issues/1072)) ([0c85ac3](https://github.com/typescript-eslint/typescript-eslint/commit/0c85ac3))
+
+
+### Features
+
+* **eslint-plugin:** Support abstract members in member-ordering rule ([#395](https://github.com/typescript-eslint/typescript-eslint/issues/395)) ([#1004](https://github.com/typescript-eslint/typescript-eslint/issues/1004)) ([5f093ac](https://github.com/typescript-eslint/typescript-eslint/commit/5f093ac))
+* **typescript-estree:** support long running lint without watch ([#1106](https://github.com/typescript-eslint/typescript-eslint/issues/1106)) ([ed5564d](https://github.com/typescript-eslint/typescript-eslint/commit/ed5564d))
+
+
+
+
+
+# [2.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.3...v2.4.0) (2019-10-14)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [promise-function-async] Should not report… ([#1023](https://github.com/typescript-eslint/typescript-eslint/issues/1023)) ([514bed9](https://github.com/typescript-eslint/typescript-eslint/commit/514bed9))
+* support long running "watch" lint sessions ([#973](https://github.com/typescript-eslint/typescript-eslint/issues/973)) ([854620e](https://github.com/typescript-eslint/typescript-eslint/commit/854620e))
+
+
+### Features
+
+* **typescript-estree:** support for parsing 3.7 features ([#1045](https://github.com/typescript-eslint/typescript-eslint/issues/1045)) ([623febf](https://github.com/typescript-eslint/typescript-eslint/commit/623febf))
+
+
+
+
+
+## [2.3.3](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.2...v2.3.3) (2019-10-07)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [class-name-casing] allow unicode letters ([#1043](https://github.com/typescript-eslint/typescript-eslint/issues/1043)) ([47895c0](https://github.com/typescript-eslint/typescript-eslint/commit/47895c0))
+* **eslint-plugin:** [efrt] support constructor arguments ([#1021](https://github.com/typescript-eslint/typescript-eslint/issues/1021)) ([60943e6](https://github.com/typescript-eslint/typescript-eslint/commit/60943e6))
+
+
+
+
+
+## [2.3.2](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.1...v2.3.2) (2019-09-30)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-unnec-type-arg] undefined symbol crash ([#1007](https://github.com/typescript-eslint/typescript-eslint/issues/1007)) ([cdf9294](https://github.com/typescript-eslint/typescript-eslint/commit/cdf9294))
+* **typescript-estree:** correct ClassDeclarationBase type ([#1008](https://github.com/typescript-eslint/typescript-eslint/issues/1008)) ([8ce3a81](https://github.com/typescript-eslint/typescript-eslint/commit/8ce3a81))
+
+
+
+
+
+## [2.3.1](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.0...v2.3.1) (2019-09-23)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [cons-type-assns] handle namespaced types ([#975](https://github.com/typescript-eslint/typescript-eslint/issues/975)) ([c3c8b86](https://github.com/typescript-eslint/typescript-eslint/commit/c3c8b86))
+* **eslint-plugin:** [pfa] Allow async getter/setter in classes ([#980](https://github.com/typescript-eslint/typescript-eslint/issues/980)) ([e348cb2](https://github.com/typescript-eslint/typescript-eslint/commit/e348cb2))
+
+
+
+
+
+# [2.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.2.0...v2.3.0) (2019-09-16)
+
+
+### Bug Fixes
+
+* **typescript-estree:** ImportDeclaration.specifier to Literal ([#974](https://github.com/typescript-eslint/typescript-eslint/issues/974)) ([2bf8231](https://github.com/typescript-eslint/typescript-eslint/commit/2bf8231))
+
+
+### Features
+
+* **eslint-plugin:** [explicit-member-accessibility] add support of "ignoredMethodNames" ([#895](https://github.com/typescript-eslint/typescript-eslint/issues/895)) ([46ee4c9](https://github.com/typescript-eslint/typescript-eslint/commit/46ee4c9))
+* **eslint-plugin:** [no-floating-promises] Add ignoreVoid option ([#796](https://github.com/typescript-eslint/typescript-eslint/issues/796)) ([6a55921](https://github.com/typescript-eslint/typescript-eslint/commit/6a55921))
+* **eslint-plugin:** [no-magic-numbers] add ignoreReadonlyClassProperties option ([#938](https://github.com/typescript-eslint/typescript-eslint/issues/938)) ([aeea4cd](https://github.com/typescript-eslint/typescript-eslint/commit/aeea4cd))
+* **eslint-plugin:** [strict-boolean-expressions] Add allowNullable option ([#794](https://github.com/typescript-eslint/typescript-eslint/issues/794)) ([c713ca4](https://github.com/typescript-eslint/typescript-eslint/commit/c713ca4))
+* **eslint-plugin:** add no-unnecessary-condition rule ([#699](https://github.com/typescript-eslint/typescript-eslint/issues/699)) ([5715482](https://github.com/typescript-eslint/typescript-eslint/commit/5715482))
+
+
+
+
+
+# [2.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.1.0...v2.2.0) (2019-09-09)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [efrt] allowExpressions - check functions in class field properties ([#952](https://github.com/typescript-eslint/typescript-eslint/issues/952)) ([f1059d8](https://github.com/typescript-eslint/typescript-eslint/commit/f1059d8))
+* **eslint-plugin:** [expl-member-a11y] fix parameter properties ([#912](https://github.com/typescript-eslint/typescript-eslint/issues/912)) ([ccb98d8](https://github.com/typescript-eslint/typescript-eslint/commit/ccb98d8))
+* **eslint-plugin:** [prefer-readonly] add handling for destructuring assignments ([e011e90](https://github.com/typescript-eslint/typescript-eslint/commit/e011e90))
+
+
+### Features
+
+* **eslint-plugin:** add brace-style [extension] ([#810](https://github.com/typescript-eslint/typescript-eslint/issues/810)) ([e01dc5f](https://github.com/typescript-eslint/typescript-eslint/commit/e01dc5f))
+
+
+
+
+
+# [2.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.0.0...v2.1.0) (2019-09-02)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [member-naming] should match constructor args ([#771](https://github.com/typescript-eslint/typescript-eslint/issues/771)) ([b006667](https://github.com/typescript-eslint/typescript-eslint/commit/b006667))
+* **eslint-plugin:** [no-inferrable-types] ignore optional props ([#918](https://github.com/typescript-eslint/typescript-eslint/issues/918)) ([a4e625f](https://github.com/typescript-eslint/typescript-eslint/commit/a4e625f))
+* **eslint-plugin:** [promise-function-async] Allow async get/set ([#820](https://github.com/typescript-eslint/typescript-eslint/issues/820)) ([cddfdca](https://github.com/typescript-eslint/typescript-eslint/commit/cddfdca))
+* **eslint-plugin:** [require-await] Allow concise arrow function bodies ([#826](https://github.com/typescript-eslint/typescript-eslint/issues/826)) ([29fddfd](https://github.com/typescript-eslint/typescript-eslint/commit/29fddfd))
+* **eslint-plugin:** [typedef] don't flag destructuring when variables is disabled ([#819](https://github.com/typescript-eslint/typescript-eslint/issues/819)) ([5603473](https://github.com/typescript-eslint/typescript-eslint/commit/5603473))
+* **eslint-plugin:** [typedef] handle AssignmentPattern inside TSParameterProperty ([#923](https://github.com/typescript-eslint/typescript-eslint/issues/923)) ([6bd7f2d](https://github.com/typescript-eslint/typescript-eslint/commit/6bd7f2d))
+* **eslint-plugin:** [unbound-method] Allow typeof expressions (Fixes [#692](https://github.com/typescript-eslint/typescript-eslint/issues/692)) ([#904](https://github.com/typescript-eslint/typescript-eslint/issues/904)) ([344bafe](https://github.com/typescript-eslint/typescript-eslint/commit/344bafe))
+* **eslint-plugin:** [unbound-method] false positive in equality comparisons ([#914](https://github.com/typescript-eslint/typescript-eslint/issues/914)) ([29a01b8](https://github.com/typescript-eslint/typescript-eslint/commit/29a01b8))
+* **eslint-plugin:** [unified-signatures] type comparison and exported nodes ([#839](https://github.com/typescript-eslint/typescript-eslint/issues/839)) ([580eceb](https://github.com/typescript-eslint/typescript-eslint/commit/580eceb))
+* **eslint-plugin:** readme typo ([#867](https://github.com/typescript-eslint/typescript-eslint/issues/867)) ([5eb40dc](https://github.com/typescript-eslint/typescript-eslint/commit/5eb40dc))
+* **typescript-estree:** improve missing project file error msg ([#866](https://github.com/typescript-eslint/typescript-eslint/issues/866)) ([8f3b0a8](https://github.com/typescript-eslint/typescript-eslint/commit/8f3b0a8)), closes [#853](https://github.com/typescript-eslint/typescript-eslint/issues/853)
+
+
+### Features
+
+* [no-unnecessary-type-assertion] allow `as const` arrow functions ([#876](https://github.com/typescript-eslint/typescript-eslint/issues/876)) ([14c6f80](https://github.com/typescript-eslint/typescript-eslint/commit/14c6f80))
+* **eslint-plugin:** [expl-func-ret-type] make error loc smaller ([#919](https://github.com/typescript-eslint/typescript-eslint/issues/919)) ([65eb993](https://github.com/typescript-eslint/typescript-eslint/commit/65eb993))
+* **eslint-plugin:** [no-type-alias] support tuples ([#775](https://github.com/typescript-eslint/typescript-eslint/issues/775)) ([c68e033](https://github.com/typescript-eslint/typescript-eslint/commit/c68e033))
+* **eslint-plugin:** add quotes [extension] ([#762](https://github.com/typescript-eslint/typescript-eslint/issues/762)) ([9f82099](https://github.com/typescript-eslint/typescript-eslint/commit/9f82099))
+
+
+
+
+
+# [2.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.13.0...v2.0.0) (2019-08-13)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [efrt] flag default export w/allowExpressions ([#831](https://github.com/typescript-eslint/typescript-eslint/issues/831)) ([ebbcc01](https://github.com/typescript-eslint/typescript-eslint/commit/ebbcc01))
+* **eslint-plugin:** [no-explicit-any] Fix ignoreRestArgs for interfaces ([#777](https://github.com/typescript-eslint/typescript-eslint/issues/777)) ([22e9ae5](https://github.com/typescript-eslint/typescript-eslint/commit/22e9ae5))
+* **eslint-plugin:** [no-useless-constructor] handle bodyless constructor ([#685](https://github.com/typescript-eslint/typescript-eslint/issues/685)) ([55e788c](https://github.com/typescript-eslint/typescript-eslint/commit/55e788c))
+* **eslint-plugin:** [prefer-readonly] TypeError when having comp… ([#761](https://github.com/typescript-eslint/typescript-eslint/issues/761)) ([211b1b5](https://github.com/typescript-eslint/typescript-eslint/commit/211b1b5))
+* **eslint-plugin:** [typedef] support "for..in", "for..of" ([#787](https://github.com/typescript-eslint/typescript-eslint/issues/787)) ([39e41b5](https://github.com/typescript-eslint/typescript-eslint/commit/39e41b5))
+* **eslint-plugin:** [typedef] support default value for parameter ([#785](https://github.com/typescript-eslint/typescript-eslint/issues/785)) ([84916e6](https://github.com/typescript-eslint/typescript-eslint/commit/84916e6))
+
+
+* feat(eslint-plugin)!: recommended-requiring-type-checking config (#846) ([d3470c9](https://github.com/typescript-eslint/typescript-eslint/commit/d3470c9)), closes [#846](https://github.com/typescript-eslint/typescript-eslint/issues/846)
+* feat(eslint-plugin)!: change recommended config (#729) ([428567d](https://github.com/typescript-eslint/typescript-eslint/commit/428567d)), closes [#729](https://github.com/typescript-eslint/typescript-eslint/issues/729)
+* feat(typescript-estree)!: throw error on file not in project when `project` set (#760) ([3777b77](https://github.com/typescript-eslint/typescript-eslint/commit/3777b77)), closes [#760](https://github.com/typescript-eslint/typescript-eslint/issues/760)
+* feat(eslint-plugin)!: add rule `consistent-type-assertions` (#731) ([92e98de](https://github.com/typescript-eslint/typescript-eslint/commit/92e98de)), closes [#731](https://github.com/typescript-eslint/typescript-eslint/issues/731)
+* feat(eslint-plugin)!: [array-type] rework options (#654) ([1389393](https://github.com/typescript-eslint/typescript-eslint/commit/1389393)), closes [#654](https://github.com/typescript-eslint/typescript-eslint/issues/654) [#635](https://github.com/typescript-eslint/typescript-eslint/issues/635)
+
+
+### Features
+
+* explicitly support eslint v6 ([#645](https://github.com/typescript-eslint/typescript-eslint/issues/645)) ([34a7cf6](https://github.com/typescript-eslint/typescript-eslint/commit/34a7cf6))
+* **eslint-plugin:** [interface-name-prefix, class-name-casing] Add allowUnderscorePrefix option to support private declarations ([#790](https://github.com/typescript-eslint/typescript-eslint/issues/790)) ([0c4f474](https://github.com/typescript-eslint/typescript-eslint/commit/0c4f474))
+* **eslint-plugin:** [no-var-requires] report on foo(require('')) ([#725](https://github.com/typescript-eslint/typescript-eslint/issues/725)) ([b2ca20d](https://github.com/typescript-eslint/typescript-eslint/commit/b2ca20d)), closes [#665](https://github.com/typescript-eslint/typescript-eslint/issues/665)
+* **eslint-plugin:** [promise-function-async] make allowAny default true ([#733](https://github.com/typescript-eslint/typescript-eslint/issues/733)) ([590ca50](https://github.com/typescript-eslint/typescript-eslint/commit/590ca50))
+* **eslint-plugin:** [strict-boolean-expressions] add ignoreRhs option ([#691](https://github.com/typescript-eslint/typescript-eslint/issues/691)) ([fd6be42](https://github.com/typescript-eslint/typescript-eslint/commit/fd6be42))
+* **eslint-plugin:** add support for object props in CallExpressions ([#728](https://github.com/typescript-eslint/typescript-eslint/issues/728)) ([8141f01](https://github.com/typescript-eslint/typescript-eslint/commit/8141f01))
+* **eslint-plugin:** added new rule typedef ([#581](https://github.com/typescript-eslint/typescript-eslint/issues/581)) ([35cc99b](https://github.com/typescript-eslint/typescript-eslint/commit/35cc99b))
+* **eslint-plugin:** added new rule use-default-type-parameter ([#562](https://github.com/typescript-eslint/typescript-eslint/issues/562)) ([2b942ba](https://github.com/typescript-eslint/typescript-eslint/commit/2b942ba))
+* **eslint-plugin:** move opinionated rules between configs ([#595](https://github.com/typescript-eslint/typescript-eslint/issues/595)) ([4893aec](https://github.com/typescript-eslint/typescript-eslint/commit/4893aec))
+* **eslint-plugin:** remove deprecated rules ([#739](https://github.com/typescript-eslint/typescript-eslint/issues/739)) ([e32c7ad](https://github.com/typescript-eslint/typescript-eslint/commit/e32c7ad))
+
+
+### BREAKING CHANGES
+
+* removed some rules from recommended config
+* recommended config changes are considered breaking
+* by default we will now throw when a file is not in the `project` provided
+* Merges both no-angle-bracket-type-assertion and no-object-literal-type-assertion into one rule
+* **eslint-plugin:** both 'eslint-recommended' and 'recommended' have changed.
+* **eslint-plugin:** removing rules
+* changes config structure
+
+```ts
+type ArrayOption = 'array' | 'generic' | 'array-simple';
+type Options = [
+  {
+    // default case for all arrays
+    default: ArrayOption,
+    // optional override for readonly arrays
+    readonly?: ArrayOption,
+  },
+];
+```
+* **eslint-plugin:** changing default rule config
+* Node 6 is no longer supported
+
+
+
+
+
+# [1.13.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.12.0...v1.13.0) (2019-07-21)
+
+
+### Bug Fixes
+
+* Correct `@types/json-schema` dependency ([#675](https://github.com/typescript-eslint/typescript-eslint/issues/675)) ([a5398ce](https://github.com/typescript-eslint/typescript-eslint/commit/a5398ce))
+* **eslint-plugin:** remove imports from typescript-estree ([#706](https://github.com/typescript-eslint/typescript-eslint/issues/706)) ([ceb2d32](https://github.com/typescript-eslint/typescript-eslint/commit/ceb2d32)), closes [#705](https://github.com/typescript-eslint/typescript-eslint/issues/705)
+* **eslint-plugin:** undo breaking changes to recommended config ([93f72e3](https://github.com/typescript-eslint/typescript-eslint/commit/93f72e3))
+
+
+### Features
+
+* **eslint-plugin:** add new rule no-misused-promises ([#612](https://github.com/typescript-eslint/typescript-eslint/issues/612)) ([28a131d](https://github.com/typescript-eslint/typescript-eslint/commit/28a131d))
+* **eslint-plugin:** add new rule require-await ([#674](https://github.com/typescript-eslint/typescript-eslint/issues/674)) ([807bc2d](https://github.com/typescript-eslint/typescript-eslint/commit/807bc2d))
+
+
+
+
+
+# [1.12.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.11.0...v1.12.0) (2019-07-12)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** handle `const;` ([#633](https://github.com/typescript-eslint/typescript-eslint/issues/633)) ([430d628](https://github.com/typescript-eslint/typescript-eslint/commit/430d628)), closes [#441](https://github.com/typescript-eslint/typescript-eslint/issues/441)
+
+
+### Features
+
+* **eslint-plugin:** [ban-types] Support namespaced type ([#616](https://github.com/typescript-eslint/typescript-eslint/issues/616)) ([e325b72](https://github.com/typescript-eslint/typescript-eslint/commit/e325b72))
+* **eslint-plugin:** [explicit-function-return-type] add handling for usage as arguments ([#680](https://github.com/typescript-eslint/typescript-eslint/issues/680)) ([e0aeb18](https://github.com/typescript-eslint/typescript-eslint/commit/e0aeb18))
+* **eslint-plugin:** [no-explicit-any] Add an optional fixer ([#609](https://github.com/typescript-eslint/typescript-eslint/issues/609)) ([606fc70](https://github.com/typescript-eslint/typescript-eslint/commit/606fc70))
+* **eslint-plugin:** Add rule no-reference-import ([#625](https://github.com/typescript-eslint/typescript-eslint/issues/625)) ([af70a59](https://github.com/typescript-eslint/typescript-eslint/commit/af70a59))
+* **eslint-plugin:** add rule strict-boolean-expressions ([#579](https://github.com/typescript-eslint/typescript-eslint/issues/579)) ([34e7d1e](https://github.com/typescript-eslint/typescript-eslint/commit/34e7d1e))
+* **eslint-plugin:** added new rule prefer-readonly ([#555](https://github.com/typescript-eslint/typescript-eslint/issues/555)) ([76b89a5](https://github.com/typescript-eslint/typescript-eslint/commit/76b89a5))
+
+
+
+
+
+# [1.11.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.10.2...v1.11.0) (2019-06-23)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-magic-numbers] add support for enums ([#543](https://github.com/typescript-eslint/typescript-eslint/issues/543)) ([5c40d01](https://github.com/typescript-eslint/typescript-eslint/commit/5c40d01))
+* **eslint-plugin:** [promise-function-async] allow any as return value ([#553](https://github.com/typescript-eslint/typescript-eslint/issues/553)) ([9a387b0](https://github.com/typescript-eslint/typescript-eslint/commit/9a387b0))
+
+
+### Features
+
+* **eslint-plugin:** [no-explicit-any] ignoreRestArgs ([#548](https://github.com/typescript-eslint/typescript-eslint/issues/548)) ([753ad75](https://github.com/typescript-eslint/typescript-eslint/commit/753ad75))
+* **eslint-plugin:** add `consistent-type-definitions` rule ([#463](https://github.com/typescript-eslint/typescript-eslint/issues/463)) ([ec87d06](https://github.com/typescript-eslint/typescript-eslint/commit/ec87d06))
+* **eslint-plugin:** add new rule no-empty-function ([#626](https://github.com/typescript-eslint/typescript-eslint/issues/626)) ([747bfcb](https://github.com/typescript-eslint/typescript-eslint/commit/747bfcb))
+* **eslint-plugin:** add new rule no-floating-promises ([#495](https://github.com/typescript-eslint/typescript-eslint/issues/495)) ([61e6385](https://github.com/typescript-eslint/typescript-eslint/commit/61e6385))
+
+
+
+
+
+## [1.10.2](https://github.com/typescript-eslint/typescript-eslint/compare/v1.10.1...v1.10.2) (2019-06-10)
+
+### Bug Fixes
+
+- **eslint-plugin:** peerDep should specify semver major range ([#602](https://github.com/typescript-eslint/typescript-eslint/issues/602)) ([5589938](https://github.com/typescript-eslint/typescript-eslint/commit/5589938))
+
+## [1.10.1](https://github.com/typescript-eslint/typescript-eslint/compare/v1.10.0...v1.10.1) (2019-06-09)
+
+**Note:** Version bump only for package @typescript-eslint/eslint-plugin
+
+# [1.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.9.0...v1.10.0) (2019-06-09)
+
+### Bug Fixes
+
+- **eslint-plugin:** [explicit-function-return-type] Fix obj setter prop ([8c8497c](https://github.com/typescript-eslint/typescript-eslint/commit/8c8497c)), closes [#525](https://github.com/typescript-eslint/typescript-eslint/issues/525)
+- **eslint-plugin:** [no-extra-parens] Fix crash default switch case crash ([5ec2b32](https://github.com/typescript-eslint/typescript-eslint/commit/5ec2b32)), closes [#509](https://github.com/typescript-eslint/typescript-eslint/issues/509)
+- **eslint-plugin:** [no-type-alias] Fix parenthesized type handling ([#576](https://github.com/typescript-eslint/typescript-eslint/issues/576)) ([6489293](https://github.com/typescript-eslint/typescript-eslint/commit/6489293))
+- **eslint-plugin:** [NUTA] false positive for null assign to undefined ([#536](https://github.com/typescript-eslint/typescript-eslint/issues/536)) ([b16409a](https://github.com/typescript-eslint/typescript-eslint/commit/b16409a)), closes [#529](https://github.com/typescript-eslint/typescript-eslint/issues/529)
+- **eslint-plugin:** Remove `no-dupe-class-members` from eslint-recommended ([#520](https://github.com/typescript-eslint/typescript-eslint/issues/520)) ([1a0e60b](https://github.com/typescript-eslint/typescript-eslint/commit/1a0e60b))
+
+### Features
+
+- make utils/TSESLint export typed classes instead of just types ([#526](https://github.com/typescript-eslint/typescript-eslint/issues/526)) ([370ac72](https://github.com/typescript-eslint/typescript-eslint/commit/370ac72))
+- support TypeScript versions >=3.2.1 <3.6.0 ([#597](https://github.com/typescript-eslint/typescript-eslint/issues/597)) ([5d2b962](https://github.com/typescript-eslint/typescript-eslint/commit/5d2b962))
+- **eslint-plugin:** [explicit-function-return-type] allowHigherOrderFunctions ([#193](https://github.com/typescript-eslint/typescript-eslint/issues/193)) ([#538](https://github.com/typescript-eslint/typescript-eslint/issues/538)) ([50a493e](https://github.com/typescript-eslint/typescript-eslint/commit/50a493e))
+- **eslint-plugin:** add config all.json ([#313](https://github.com/typescript-eslint/typescript-eslint/issues/313)) ([67537b8](https://github.com/typescript-eslint/typescript-eslint/commit/67537b8))
+
+# [1.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.8.0...v1.9.0) (2019-05-12)
+
+### Bug Fixes
+
+- **eslint-plugin:** Add missing dependency ([89c87cc](https://github.com/typescript-eslint/typescript-eslint/commit/89c87cc)), closes [#516](https://github.com/typescript-eslint/typescript-eslint/issues/516)
+- **eslint-plugin:** Fix exported name of eslint-recommended ([#513](https://github.com/typescript-eslint/typescript-eslint/issues/513)) ([5c65350](https://github.com/typescript-eslint/typescript-eslint/commit/5c65350))
+
+### Features
+
+- **eslint-plugin:** add prefer-regexp-exec rule ([#305](https://github.com/typescript-eslint/typescript-eslint/issues/305)) ([f61d421](https://github.com/typescript-eslint/typescript-eslint/commit/f61d421))
+
+# [1.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.7.0...v1.8.0) (2019-05-10)
+
+### Bug Fixes
+
+- **eslint-plugin:** [array-type] support readonly operator ([#429](https://github.com/typescript-eslint/typescript-eslint/issues/429)) ([8e2d2f5](https://github.com/typescript-eslint/typescript-eslint/commit/8e2d2f5))
+- **eslint-plugin:** [explicit-function-return-type] Add handling for class properties ([#502](https://github.com/typescript-eslint/typescript-eslint/issues/502)) ([2c36325](https://github.com/typescript-eslint/typescript-eslint/commit/2c36325))
+- **eslint-plugin:** [no-extra-parens] Fix build error ([298d66c](https://github.com/typescript-eslint/typescript-eslint/commit/298d66c))
+- **eslint-plugin:** [unbound-method] Work around class prototype bug ([#499](https://github.com/typescript-eslint/typescript-eslint/issues/499)) ([3219aa7](https://github.com/typescript-eslint/typescript-eslint/commit/3219aa7))
+- **eslint-plugin:** correct eslint-recommended settings ([d52a683](https://github.com/typescript-eslint/typescript-eslint/commit/d52a683))
+- **eslint-plugin:** explicit-func-return-type: support object types and as expressions ([#459](https://github.com/typescript-eslint/typescript-eslint/issues/459)) ([d19e512](https://github.com/typescript-eslint/typescript-eslint/commit/d19e512))
+- **eslint-plugin:** restrict-plus-operands: generic constraint support ([#440](https://github.com/typescript-eslint/typescript-eslint/issues/440)) ([3f305b1](https://github.com/typescript-eslint/typescript-eslint/commit/3f305b1))
+- **eslint-plugin:** Support more nodes [no-extra-parens](<[#465](https://github.com/typescript-eslint/typescript-eslint/issues/465)>) ([2d15644](https://github.com/typescript-eslint/typescript-eslint/commit/2d15644))
+- **eslint-plugin:** support switch statement [unbound-method](<[#485](https://github.com/typescript-eslint/typescript-eslint/issues/485)>) ([e99ca81](https://github.com/typescript-eslint/typescript-eslint/commit/e99ca81))
+
+### Features
+
+- **eslint-plugin:** (EXPERIMENTAL) begin indent rewrite ([#439](https://github.com/typescript-eslint/typescript-eslint/issues/439)) ([6eb97d4](https://github.com/typescript-eslint/typescript-eslint/commit/6eb97d4))
+- **eslint-plugin:** Add better non-null handling [no-unnecessary-type-assertion](<[#478](https://github.com/typescript-eslint/typescript-eslint/issues/478)>) ([4cd5590](https://github.com/typescript-eslint/typescript-eslint/commit/4cd5590))
+- **eslint-plugin:** Add func-call-spacing ([#448](https://github.com/typescript-eslint/typescript-eslint/issues/448)) ([92e65ec](https://github.com/typescript-eslint/typescript-eslint/commit/92e65ec))
+- **eslint-plugin:** Add new config "eslint-recommended" ([#488](https://github.com/typescript-eslint/typescript-eslint/issues/488)) ([2600a9f](https://github.com/typescript-eslint/typescript-eslint/commit/2600a9f))
+- **eslint-plugin:** add no-magic-numbers rule ([#373](https://github.com/typescript-eslint/typescript-eslint/issues/373)) ([43fa09c](https://github.com/typescript-eslint/typescript-eslint/commit/43fa09c))
+- **eslint-plugin:** Add semi [extension](<[#461](https://github.com/typescript-eslint/typescript-eslint/issues/461)>) ([0962017](https://github.com/typescript-eslint/typescript-eslint/commit/0962017))
+- **eslint-plugin:** no-inferrable-types: Support more primitives ([#442](https://github.com/typescript-eslint/typescript-eslint/issues/442)) ([4e193ca](https://github.com/typescript-eslint/typescript-eslint/commit/4e193ca))
+- Move shared types into their own package ([#425](https://github.com/typescript-eslint/typescript-eslint/issues/425)) ([a7a03ce](https://github.com/typescript-eslint/typescript-eslint/commit/a7a03ce))
+
+# [1.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.6.0...v1.7.0) (2019-04-20)
+
+### Bug Fixes
+
+- **eslint-plugin:** indent: fix false positive on type parameters ([#385](https://github.com/typescript-eslint/typescript-eslint/issues/385)) ([d476f15](https://github.com/typescript-eslint/typescript-eslint/commit/d476f15))
+- **eslint-plugin:** no-object-literal-type-assertion: fix `as const` is reported ([#390](https://github.com/typescript-eslint/typescript-eslint/issues/390)) ([2521b85](https://github.com/typescript-eslint/typescript-eslint/commit/2521b85))
+- **eslint-plugin:** support BigInt in restrict-plus-operands rule ([#344](https://github.com/typescript-eslint/typescript-eslint/issues/344)) ([eee6d49](https://github.com/typescript-eslint/typescript-eslint/commit/eee6d49)), closes [#309](https://github.com/typescript-eslint/typescript-eslint/issues/309)
+
+### Features
+
+- **eslint-plugin:** [member-accessibility] add more options ([#322](https://github.com/typescript-eslint/typescript-eslint/issues/322)) ([4b3d820](https://github.com/typescript-eslint/typescript-eslint/commit/4b3d820))
+- **eslint-plugin:** add prefer-for-of rule ([#338](https://github.com/typescript-eslint/typescript-eslint/issues/338)) ([3e26ab6](https://github.com/typescript-eslint/typescript-eslint/commit/3e26ab6))
+- **eslint-plugin:** add prefer-includes rule ([#294](https://github.com/typescript-eslint/typescript-eslint/issues/294)) ([01c4dae](https://github.com/typescript-eslint/typescript-eslint/commit/01c4dae)), closes [#284](https://github.com/typescript-eslint/typescript-eslint/issues/284)
+- **eslint-plugin:** add prefer-string-starts-ends-with rule ([#289](https://github.com/typescript-eslint/typescript-eslint/issues/289)) ([5592a2c](https://github.com/typescript-eslint/typescript-eslint/commit/5592a2c)), closes [#285](https://github.com/typescript-eslint/typescript-eslint/issues/285)
+- **eslint-plugin:** added new rule await-promise ([#192](https://github.com/typescript-eslint/typescript-eslint/issues/192)) ([5311342](https://github.com/typescript-eslint/typescript-eslint/commit/5311342))
+- **eslint-plugin:** added new rule unbound-method ([#204](https://github.com/typescript-eslint/typescript-eslint/issues/204)) ([6718906](https://github.com/typescript-eslint/typescript-eslint/commit/6718906))
+- **eslint-plugin:** support type assertions in no-extra-parens rule ([#311](https://github.com/typescript-eslint/typescript-eslint/issues/311)) ([116ca75](https://github.com/typescript-eslint/typescript-eslint/commit/116ca75))
+
+# [1.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.5.0...v1.6.0) (2019-04-03)
+
+### Bug Fixes
+
+- **eslint-plugin:** explicit-function-return-type: ensure class arrow methods are validated ([#377](https://github.com/typescript-eslint/typescript-eslint/issues/377)) ([643a223](https://github.com/typescript-eslint/typescript-eslint/commit/643a223)), closes [#348](https://github.com/typescript-eslint/typescript-eslint/issues/348)
+- **eslint-plugin:** Fix `allowExpressions` false positives in explicit-function-return-type and incorrect documentation ([#388](https://github.com/typescript-eslint/typescript-eslint/issues/388)) ([f29d1c9](https://github.com/typescript-eslint/typescript-eslint/commit/f29d1c9)), closes [#387](https://github.com/typescript-eslint/typescript-eslint/issues/387)
+- **eslint-plugin:** member-naming false flagging constructors ([#376](https://github.com/typescript-eslint/typescript-eslint/issues/376)) ([ad0f2be](https://github.com/typescript-eslint/typescript-eslint/commit/ad0f2be)), closes [#359](https://github.com/typescript-eslint/typescript-eslint/issues/359)
+- **eslint-plugin:** no-type-alias: fix typeof alias erroring ([#380](https://github.com/typescript-eslint/typescript-eslint/issues/380)) ([cebcfe6](https://github.com/typescript-eslint/typescript-eslint/commit/cebcfe6))
+
+### Features
+
+- change TypeScript version range to >=3.2.1 <3.5.0 ([#399](https://github.com/typescript-eslint/typescript-eslint/issues/399)) ([a4f95d3](https://github.com/typescript-eslint/typescript-eslint/commit/a4f95d3))
+- **eslint-plugin:** allow explicit variable type with arrow functions ([#260](https://github.com/typescript-eslint/typescript-eslint/issues/260)) ([bea6b92](https://github.com/typescript-eslint/typescript-eslint/commit/bea6b92)), closes [#149](https://github.com/typescript-eslint/typescript-eslint/issues/149)
+
+# [1.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.4.2...v1.5.0) (2019-03-20)
+
+### Bug Fixes
+
+- **eslint-plugin:** [interface-name-prefix] correct error message in always mode ([#333](https://github.com/typescript-eslint/typescript-eslint/issues/333)) ([097262f](https://github.com/typescript-eslint/typescript-eslint/commit/097262f))
+- **eslint-plugin:** fix false positives for adjacent-overload-signatures regarding computed property names ([#340](https://github.com/typescript-eslint/typescript-eslint/issues/340)) ([f6e5118](https://github.com/typescript-eslint/typescript-eslint/commit/f6e5118))
+- **eslint-plugin:** fix incorrect rule name ([#357](https://github.com/typescript-eslint/typescript-eslint/issues/357)) ([0a5146b](https://github.com/typescript-eslint/typescript-eslint/commit/0a5146b))
+
+### Features
+
+- **eslint-plugin:** Add unified-signature rule ([#178](https://github.com/typescript-eslint/typescript-eslint/issues/178)) ([6ffaa0b](https://github.com/typescript-eslint/typescript-eslint/commit/6ffaa0b))
+
+## [1.4.2](https://github.com/typescript-eslint/typescript-eslint/compare/v1.4.1...v1.4.2) (2019-02-25)
+
+**Note:** Version bump only for package @typescript-eslint/eslint-plugin
+
+## [1.4.1](https://github.com/typescript-eslint/typescript-eslint/compare/v1.4.0...v1.4.1) (2019-02-23)
+
+### Bug Fixes
+
+- **eslint-plugin:** out-of-bounds access in member-ordering rule ([#304](https://github.com/typescript-eslint/typescript-eslint/issues/304)) ([4526f27](https://github.com/typescript-eslint/typescript-eslint/commit/4526f27))
+- **eslint-plugin:** support BigInt in restrict-plus-operands rule ([#309](https://github.com/typescript-eslint/typescript-eslint/issues/309)) ([#310](https://github.com/typescript-eslint/typescript-eslint/issues/310)) ([9a88363](https://github.com/typescript-eslint/typescript-eslint/commit/9a88363))
+
+# [1.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.3.0...v1.4.0) (2019-02-19)
+
+### Bug Fixes
+
+- **parser:** fix crash when visiting decorators in parameters ([#237](https://github.com/typescript-eslint/typescript-eslint/issues/237)) ([225fc26](https://github.com/typescript-eslint/typescript-eslint/commit/225fc26))
+- **parser:** fix visiting props of TSDeclareFunction ([#244](https://github.com/typescript-eslint/typescript-eslint/issues/244)) ([b40def8](https://github.com/typescript-eslint/typescript-eslint/commit/b40def8))
+- **ts-estree:** make sure that every node can be converted to tsNode ([#287](https://github.com/typescript-eslint/typescript-eslint/issues/287)) ([9f1d314](https://github.com/typescript-eslint/typescript-eslint/commit/9f1d314))
+- **typescript-estree, eslint-plugin:** stop adding ParenthesizedExpressions to node maps ([#226](https://github.com/typescript-eslint/typescript-eslint/issues/226)) ([317405a](https://github.com/typescript-eslint/typescript-eslint/commit/317405a))
+
+### Features
+
+- **eslint-plugin:** add 'no-unnecessary-qualifier' rule ([#231](https://github.com/typescript-eslint/typescript-eslint/issues/231)) ([cc8f906](https://github.com/typescript-eslint/typescript-eslint/commit/cc8f906))
+- **eslint-plugin:** add ban-ts-ignore rule ([#276](https://github.com/typescript-eslint/typescript-eslint/issues/276)) ([859ab29](https://github.com/typescript-eslint/typescript-eslint/commit/859ab29))
+- **eslint-plugin:** add prefer-function-type rule ([#222](https://github.com/typescript-eslint/typescript-eslint/issues/222)) ([b95c4cf](https://github.com/typescript-eslint/typescript-eslint/commit/b95c4cf))
+- **eslint-plugin:** add require-array-sort-compare rule ([#261](https://github.com/typescript-eslint/typescript-eslint/issues/261)) ([2a4aaaa](https://github.com/typescript-eslint/typescript-eslint/commit/2a4aaaa)), closes [#247](https://github.com/typescript-eslint/typescript-eslint/issues/247)
+- **eslint-plugin:** Migrate plugin to ts ([#120](https://github.com/typescript-eslint/typescript-eslint/issues/120)) ([61c60dc](https://github.com/typescript-eslint/typescript-eslint/commit/61c60dc))
+- **eslint-plugin:** update types to allow parameter type inferrence ([#272](https://github.com/typescript-eslint/typescript-eslint/issues/272)) ([80bd72c](https://github.com/typescript-eslint/typescript-eslint/commit/80bd72c))
+- **no-empty-interface:** add allowSingleExtend option ([#215](https://github.com/typescript-eslint/typescript-eslint/issues/215)) ([bf46f8c](https://github.com/typescript-eslint/typescript-eslint/commit/bf46f8c))
+
+# [1.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.2.0...v1.3.0) (2019-02-07)
+
+### Bug Fixes
+
+- **eslint-plugin:** fix false positive from adjacent-overload-signatures ([#206](https://github.com/typescript-eslint/typescript-eslint/issues/206)) ([07e950e](https://github.com/typescript-eslint/typescript-eslint/commit/07e950e))
+
+### Features
+
+- change TypeScript version range to >=3.2.1 <3.4.0 ([#184](https://github.com/typescript-eslint/typescript-eslint/issues/184)) ([f513a14](https://github.com/typescript-eslint/typescript-eslint/commit/f513a14))
+- **eslint-plugin:** add new rule no-for-in-array ([#155](https://github.com/typescript-eslint/typescript-eslint/issues/155)) ([84162ba](https://github.com/typescript-eslint/typescript-eslint/commit/84162ba))
+- **eslint-plugin:** add new rule no-require-imports ([#199](https://github.com/typescript-eslint/typescript-eslint/issues/199)) ([683e5bc](https://github.com/typescript-eslint/typescript-eslint/commit/683e5bc))
+- **eslint-plugin:** added new rule promise-function-async ([#194](https://github.com/typescript-eslint/typescript-eslint/issues/194)) ([5f3aec9](https://github.com/typescript-eslint/typescript-eslint/commit/5f3aec9))
+
+# [1.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.1.1...v1.2.0) (2019-02-01)
+
+### Bug Fixes
+
+- **eslint-plugin:** fix no-extraneous-class for class without name ([#174](https://github.com/typescript-eslint/typescript-eslint/issues/174)) ([b1dbb64](https://github.com/typescript-eslint/typescript-eslint/commit/b1dbb64))
+- **eslint-plugin:** fix wrong URL ([#180](https://github.com/typescript-eslint/typescript-eslint/issues/180)) ([00d020d](https://github.com/typescript-eslint/typescript-eslint/commit/00d020d))
+- **eslint-plugin:** use bracket for infer type in array-type rule ([#173](https://github.com/typescript-eslint/typescript-eslint/issues/173)) ([1f868ce](https://github.com/typescript-eslint/typescript-eslint/commit/1f868ce))
+- **parser:** fix regression with no-unused-vars for jsx attributes ([#161](https://github.com/typescript-eslint/typescript-eslint/issues/161)) ([6147de1](https://github.com/typescript-eslint/typescript-eslint/commit/6147de1))
+
+### Features
+
+- **eslint-plugin:** add eslint rule no-useless-constructor ([#167](https://github.com/typescript-eslint/typescript-eslint/issues/167)) ([3fb57a5](https://github.com/typescript-eslint/typescript-eslint/commit/3fb57a5))
+- **eslint-plugin:** add no-unnecessary-type-assertion rule ([#157](https://github.com/typescript-eslint/typescript-eslint/issues/157)) ([38abc28](https://github.com/typescript-eslint/typescript-eslint/commit/38abc28))
+
+## [1.1.1](https://github.com/typescript-eslint/typescript-eslint/compare/v1.1.0...v1.1.1) (2019-01-29)
+
+### Bug Fixes
+
+- **eslint-plugin:** make parser services error clearer ([#132](https://github.com/typescript-eslint/typescript-eslint/issues/132)) ([aa9d1e1](https://github.com/typescript-eslint/typescript-eslint/commit/aa9d1e1))
+- **parser:** add visiting of type parameters in JSXOpeningElement ([#150](https://github.com/typescript-eslint/typescript-eslint/issues/150)) ([5e16003](https://github.com/typescript-eslint/typescript-eslint/commit/5e16003))
+
+# [1.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.0.0...v1.1.0) (2019-01-23)
+
+### Bug Fixes
+
+- **eslint-plugin:** don’t mark `declare class` as unused ([#110](https://github.com/typescript-eslint/typescript-eslint/issues/110)) ([5841cd2](https://github.com/typescript-eslint/typescript-eslint/commit/5841cd2)), closes [#106](https://github.com/typescript-eslint/typescript-eslint/issues/106)
+- **eslint-plugin:** improve detection of used vars in heritage ([#102](https://github.com/typescript-eslint/typescript-eslint/issues/102)) ([193b434](https://github.com/typescript-eslint/typescript-eslint/commit/193b434))
+
+### Features
+
+- **eslint-plugin:** add new rule restrict-plus-operands ([#70](https://github.com/typescript-eslint/typescript-eslint/issues/70)) ([c541ede](https://github.com/typescript-eslint/typescript-eslint/commit/c541ede))
+- **eslint-plugin:** add option to no-object-literal-type-assertion rule ([#87](https://github.com/typescript-eslint/typescript-eslint/issues/87)) ([9f501a1](https://github.com/typescript-eslint/typescript-eslint/commit/9f501a1))
+
+# [1.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v0.2.1...v1.0.0) (2019-01-20)
+
+### Bug Fixes
+
+- **eslint-plugin:** fix crash in rule indent for eslint 5.12.1 ([#89](https://github.com/typescript-eslint/typescript-eslint/issues/89)) ([3f51d51](https://github.com/typescript-eslint/typescript-eslint/commit/3f51d51))
+- **eslint-plugin:** no-unused-vars: mark declared statements as used ([#88](https://github.com/typescript-eslint/typescript-eslint/issues/88)) ([2df5e0c](https://github.com/typescript-eslint/typescript-eslint/commit/2df5e0c))
+- **eslint-plugin:** update remaining parser refs ([#97](https://github.com/typescript-eslint/typescript-eslint/issues/97)) ([055c3fc](https://github.com/typescript-eslint/typescript-eslint/commit/055c3fc))
+
+### Features
+
+- **eslint-plugin:** remove exported parser ([#94](https://github.com/typescript-eslint/typescript-eslint/issues/94)) ([0ddb93c](https://github.com/typescript-eslint/typescript-eslint/commit/0ddb93c))
+
+## [0.2.1](https://github.com/typescript-eslint/typescript-eslint/compare/v0.2.0...v0.2.1) (2019-01-20)
+
+**Note:** Version bump only for package @typescript-eslint/eslint-plugin
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/LICENSE b/server/node_modules/@typescript-eslint/eslint-plugin/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..7e7370143b26b5e2a826528507c7cc8df2d2eacf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 TypeScript ESLint and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/README.md b/server/node_modules/@typescript-eslint/eslint-plugin/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..eb78f4a0de514199737125850e08b9110f4ae245
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/README.md
@@ -0,0 +1,231 @@
+<h1 align="center">ESLint Plugin TypeScript</h1>
+
+<p align="center">An ESLint plugin which provides lint rules for TypeScript codebases.</p>
+
+<p align="center">
+    <img src="https://github.com/typescript-eslint/typescript-eslint/workflows/CI/badge.svg" alt="CI" />
+    <a href="https://www.npmjs.com/package/@typescript-eslint/eslint-plugin"><img src="https://img.shields.io/npm/v/@typescript-eslint/eslint-plugin.svg?style=flat-square" alt="NPM Version" /></a>
+    <a href="https://www.npmjs.com/package/@typescript-eslint/eslint-plugin"><img src="https://img.shields.io/npm/dm/@typescript-eslint/eslint-plugin.svg?style=flat-square" alt="NPM Downloads" /></a>
+</p>
+
+## Getting Started
+
+- **[You can find our Getting Started docs here](../../docs/getting-started/linting/README.md)**
+- **[You can find our FAQ / Troubleshooting docs here](../../docs/getting-started/linting/FAQ.md)**
+
+These docs walk you through setting up ESLint, this plugin, and our parser. If you know what you're doing and just want to quick start, read on...
+
+## Quick-start
+
+### Installation
+
+Make sure you have TypeScript and [`@typescript-eslint/parser`](../parser) installed:
+
+```bash
+$ yarn add -D typescript @typescript-eslint/parser
+$ npm i --save-dev typescript @typescript-eslint/parser
+```
+
+Then install the plugin:
+
+```bash
+$ yarn add -D @typescript-eslint/eslint-plugin
+$ npm i --save-dev @typescript-eslint/eslint-plugin
+```
+
+It is important that you use the same version number for `@typescript-eslint/parser` and `@typescript-eslint/eslint-plugin`.
+
+**Note:** If you installed ESLint globally (using the `-g` flag) then you must also install `@typescript-eslint/eslint-plugin` globally.
+
+### Usage
+
+Add `@typescript-eslint/parser` to the `parser` field and `@typescript-eslint` to the plugins section of your `.eslintrc` configuration file, then configure the rules you want to use under the rules section.
+
+```json
+{
+  "parser": "@typescript-eslint/parser",
+  "plugins": ["@typescript-eslint"],
+  "rules": {
+    "@typescript-eslint/rule-name": "error"
+  }
+}
+```
+
+You can also enable all the recommended rules for our plugin. Add `plugin:@typescript-eslint/recommended` in extends:
+
+```json
+{
+  "extends": ["plugin:@typescript-eslint/recommended"]
+}
+```
+
+**Note: Make sure to use `eslint --ext .js,.ts` since by [default](https://eslint.org/docs/user-guide/command-line-interface#--ext) `eslint` will only search for `.js` files.**
+
+### Recommended Configs
+
+You can also use [`eslint:recommended`](https://eslint.org/docs/rules/) (the set of rules which are recommended for all projects by the ESLint Team) with this plugin:
+
+```json
+{
+  "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"]
+}
+```
+
+As of version 2 of this plugin, _by design_, none of the rules in the main `recommended` config require type-checking in order to run. This means that they are more lightweight and faster to run.
+
+Some highly valuable rules simply require type-checking in order to be implemented correctly, however, so we provide an additional config you can extend from called `recommended-requiring-type-checking`. You would apply this _in addition_ to the recommended configs previously mentioned, e.g.:
+
+```json
+{
+  "extends": [
+    "eslint:recommended",
+    "plugin:@typescript-eslint/recommended",
+    "plugin:@typescript-eslint/recommended-requiring-type-checking"
+  ]
+}
+```
+
+Pro Tip: For larger codebases you may want to consider splitting our linting into two separate stages: 1. fast feedback rules which operate purely based on syntax (no type-checking), 2. rules which are based on semantics (type-checking).
+
+**[You can read more about linting with type information here](../../docs/getting-started/linting/TYPED_LINTING.md)**
+
+## Supported Rules
+
+<!-- begin base rule list -->
+
+**Key**: :heavy_check_mark: = recommended, :wrench: = fixable, :thought_balloon: = requires type information
+
+| Name                                                                                                                  | Description                                                                                                             | :heavy_check_mark: | :wrench: | :thought_balloon: |
+| --------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------ | -------- | ----------------- |
+| [`@typescript-eslint/adjacent-overload-signatures`](./docs/rules/adjacent-overload-signatures.md)                     | Require that member overloads be consecutive                                                                            | :heavy_check_mark: |          |                   |
+| [`@typescript-eslint/array-type`](./docs/rules/array-type.md)                                                         | Requires using either `T[]` or `Array<T>` for arrays                                                                    |                    | :wrench: |                   |
+| [`@typescript-eslint/await-thenable`](./docs/rules/await-thenable.md)                                                 | Disallows awaiting a value that is not a Thenable                                                                       | :heavy_check_mark: |          | :thought_balloon: |
+| [`@typescript-eslint/ban-ts-comment`](./docs/rules/ban-ts-comment.md)                                                 | Bans `@ts-<directive>` comments from being used or requires descriptions after directive                                | :heavy_check_mark: |          |                   |
+| [`@typescript-eslint/ban-tslint-comment`](./docs/rules/ban-tslint-comment.md)                                         | Bans `// tslint:<rule-flag>` comments from being used                                                                   |                    | :wrench: |                   |
+| [`@typescript-eslint/ban-types`](./docs/rules/ban-types.md)                                                           | Bans specific types from being used                                                                                     | :heavy_check_mark: | :wrench: |                   |
+| [`@typescript-eslint/class-literal-property-style`](./docs/rules/class-literal-property-style.md)                     | Ensures that literals on classes are exposed in a consistent style                                                      |                    | :wrench: |                   |
+| [`@typescript-eslint/consistent-indexed-object-style`](./docs/rules/consistent-indexed-object-style.md)               | Enforce or disallow the use of the record type                                                                          |                    | :wrench: |                   |
+| [`@typescript-eslint/consistent-type-assertions`](./docs/rules/consistent-type-assertions.md)                         | Enforces consistent usage of type assertions                                                                            |                    |          |                   |
+| [`@typescript-eslint/consistent-type-definitions`](./docs/rules/consistent-type-definitions.md)                       | Consistent with type definition either `interface` or `type`                                                            |                    | :wrench: |                   |
+| [`@typescript-eslint/consistent-type-imports`](./docs/rules/consistent-type-imports.md)                               | Enforces consistent usage of type imports                                                                               |                    | :wrench: |                   |
+| [`@typescript-eslint/explicit-function-return-type`](./docs/rules/explicit-function-return-type.md)                   | Require explicit return types on functions and class methods                                                            |                    |          |                   |
+| [`@typescript-eslint/explicit-member-accessibility`](./docs/rules/explicit-member-accessibility.md)                   | Require explicit accessibility modifiers on class properties and methods                                                |                    | :wrench: |                   |
+| [`@typescript-eslint/explicit-module-boundary-types`](./docs/rules/explicit-module-boundary-types.md)                 | Require explicit return and argument types on exported functions' and classes' public class methods                     | :heavy_check_mark: |          |                   |
+| [`@typescript-eslint/member-delimiter-style`](./docs/rules/member-delimiter-style.md)                                 | Require a specific member delimiter style for interfaces and type literals                                              |                    | :wrench: |                   |
+| [`@typescript-eslint/member-ordering`](./docs/rules/member-ordering.md)                                               | Require a consistent member declaration order                                                                           |                    |          |                   |
+| [`@typescript-eslint/method-signature-style`](./docs/rules/method-signature-style.md)                                 | Enforces using a particular method signature syntax.                                                                    |                    | :wrench: |                   |
+| [`@typescript-eslint/naming-convention`](./docs/rules/naming-convention.md)                                           | Enforces naming conventions for everything across a codebase                                                            |                    |          | :thought_balloon: |
+| [`@typescript-eslint/no-base-to-string`](./docs/rules/no-base-to-string.md)                                           | Requires that `.toString()` is only called on objects which provide useful information when stringified                 |                    |          | :thought_balloon: |
+| [`@typescript-eslint/no-confusing-non-null-assertion`](./docs/rules/no-confusing-non-null-assertion.md)               | Disallow non-null assertion in locations that may be confusing                                                          |                    | :wrench: |                   |
+| [`@typescript-eslint/no-confusing-void-expression`](./docs/rules/no-confusing-void-expression.md)                     | Requires expressions of type void to appear in statement position                                                       |                    | :wrench: | :thought_balloon: |
+| [`@typescript-eslint/no-dynamic-delete`](./docs/rules/no-dynamic-delete.md)                                           | Disallow the delete operator with computed key expressions                                                              |                    | :wrench: |                   |
+| [`@typescript-eslint/no-empty-interface`](./docs/rules/no-empty-interface.md)                                         | Disallow the declaration of empty interfaces                                                                            | :heavy_check_mark: | :wrench: |                   |
+| [`@typescript-eslint/no-explicit-any`](./docs/rules/no-explicit-any.md)                                               | Disallow usage of the `any` type                                                                                        | :heavy_check_mark: | :wrench: |                   |
+| [`@typescript-eslint/no-extra-non-null-assertion`](./docs/rules/no-extra-non-null-assertion.md)                       | Disallow extra non-null assertion                                                                                       | :heavy_check_mark: | :wrench: |                   |
+| [`@typescript-eslint/no-extraneous-class`](./docs/rules/no-extraneous-class.md)                                       | Forbids the use of classes as namespaces                                                                                |                    |          |                   |
+| [`@typescript-eslint/no-floating-promises`](./docs/rules/no-floating-promises.md)                                     | Requires Promise-like values to be handled appropriately                                                                | :heavy_check_mark: |          | :thought_balloon: |
+| [`@typescript-eslint/no-for-in-array`](./docs/rules/no-for-in-array.md)                                               | Disallow iterating over an array with a for-in loop                                                                     | :heavy_check_mark: |          | :thought_balloon: |
+| [`@typescript-eslint/no-implicit-any-catch`](./docs/rules/no-implicit-any-catch.md)                                   | Disallow usage of the implicit `any` type in catch clauses                                                              |                    | :wrench: |                   |
+| [`@typescript-eslint/no-inferrable-types`](./docs/rules/no-inferrable-types.md)                                       | Disallows explicit type declarations for variables or parameters initialized to a number, string, or boolean            | :heavy_check_mark: | :wrench: |                   |
+| [`@typescript-eslint/no-invalid-void-type`](./docs/rules/no-invalid-void-type.md)                                     | Disallows usage of `void` type outside of generic or return types                                                       |                    |          |                   |
+| [`@typescript-eslint/no-misused-new`](./docs/rules/no-misused-new.md)                                                 | Enforce valid definition of `new` and `constructor`                                                                     | :heavy_check_mark: |          |                   |
+| [`@typescript-eslint/no-misused-promises`](./docs/rules/no-misused-promises.md)                                       | Avoid using promises in places not designed to handle them                                                              | :heavy_check_mark: |          | :thought_balloon: |
+| [`@typescript-eslint/no-namespace`](./docs/rules/no-namespace.md)                                                     | Disallow the use of custom TypeScript modules and namespaces                                                            | :heavy_check_mark: |          |                   |
+| [`@typescript-eslint/no-non-null-asserted-optional-chain`](./docs/rules/no-non-null-asserted-optional-chain.md)       | Disallows using a non-null assertion after an optional chain expression                                                 | :heavy_check_mark: |          |                   |
+| [`@typescript-eslint/no-non-null-assertion`](./docs/rules/no-non-null-assertion.md)                                   | Disallows non-null assertions using the `!` postfix operator                                                            | :heavy_check_mark: |          |                   |
+| [`@typescript-eslint/no-parameter-properties`](./docs/rules/no-parameter-properties.md)                               | Disallow the use of parameter properties in class constructors                                                          |                    |          |                   |
+| [`@typescript-eslint/no-require-imports`](./docs/rules/no-require-imports.md)                                         | Disallows invocation of `require()`                                                                                     |                    |          |                   |
+| [`@typescript-eslint/no-this-alias`](./docs/rules/no-this-alias.md)                                                   | Disallow aliasing `this`                                                                                                | :heavy_check_mark: |          |                   |
+| [`@typescript-eslint/no-type-alias`](./docs/rules/no-type-alias.md)                                                   | Disallow the use of type aliases                                                                                        |                    |          |                   |
+| [`@typescript-eslint/no-unnecessary-boolean-literal-compare`](./docs/rules/no-unnecessary-boolean-literal-compare.md) | Flags unnecessary equality comparisons against boolean literals                                                         |                    | :wrench: | :thought_balloon: |
+| [`@typescript-eslint/no-unnecessary-condition`](./docs/rules/no-unnecessary-condition.md)                             | Prevents conditionals where the type is always truthy or always falsy                                                   |                    | :wrench: | :thought_balloon: |
+| [`@typescript-eslint/no-unnecessary-qualifier`](./docs/rules/no-unnecessary-qualifier.md)                             | Warns when a namespace qualifier is unnecessary                                                                         |                    | :wrench: | :thought_balloon: |
+| [`@typescript-eslint/no-unnecessary-type-arguments`](./docs/rules/no-unnecessary-type-arguments.md)                   | Enforces that type arguments will not be used if not required                                                           |                    | :wrench: | :thought_balloon: |
+| [`@typescript-eslint/no-unnecessary-type-assertion`](./docs/rules/no-unnecessary-type-assertion.md)                   | Warns if a type assertion does not change the type of an expression                                                     | :heavy_check_mark: | :wrench: | :thought_balloon: |
+| [`@typescript-eslint/no-unnecessary-type-constraint`](./docs/rules/no-unnecessary-type-constraint.md)                 | Disallows unnecessary constraints on generic types                                                                      |                    | :wrench: |                   |
+| [`@typescript-eslint/no-unsafe-assignment`](./docs/rules/no-unsafe-assignment.md)                                     | Disallows assigning any to variables and properties                                                                     | :heavy_check_mark: |          | :thought_balloon: |
+| [`@typescript-eslint/no-unsafe-call`](./docs/rules/no-unsafe-call.md)                                                 | Disallows calling an any type value                                                                                     | :heavy_check_mark: |          | :thought_balloon: |
+| [`@typescript-eslint/no-unsafe-member-access`](./docs/rules/no-unsafe-member-access.md)                               | Disallows member access on any typed variables                                                                          | :heavy_check_mark: |          | :thought_balloon: |
+| [`@typescript-eslint/no-unsafe-return`](./docs/rules/no-unsafe-return.md)                                             | Disallows returning any from a function                                                                                 | :heavy_check_mark: |          | :thought_balloon: |
+| [`@typescript-eslint/no-var-requires`](./docs/rules/no-var-requires.md)                                               | Disallows the use of require statements except in import statements                                                     | :heavy_check_mark: |          |                   |
+| [`@typescript-eslint/non-nullable-type-assertion-style`](./docs/rules/non-nullable-type-assertion-style.md)           | Prefers a non-null assertion over explicit type cast when possible                                                      |                    | :wrench: | :thought_balloon: |
+| [`@typescript-eslint/prefer-as-const`](./docs/rules/prefer-as-const.md)                                               | Prefer usage of `as const` over literal type                                                                            | :heavy_check_mark: | :wrench: |                   |
+| [`@typescript-eslint/prefer-enum-initializers`](./docs/rules/prefer-enum-initializers.md)                             | Prefer initializing each enums member value                                                                             |                    |          |                   |
+| [`@typescript-eslint/prefer-for-of`](./docs/rules/prefer-for-of.md)                                                   | Prefer a ‘for-of’ loop over a standard ‘for’ loop if the index is only used to access the array being iterated          |                    |          |                   |
+| [`@typescript-eslint/prefer-function-type`](./docs/rules/prefer-function-type.md)                                     | Use function types instead of interfaces with call signatures                                                           |                    | :wrench: |                   |
+| [`@typescript-eslint/prefer-includes`](./docs/rules/prefer-includes.md)                                               | Enforce `includes` method over `indexOf` method                                                                         |                    | :wrench: | :thought_balloon: |
+| [`@typescript-eslint/prefer-literal-enum-member`](./docs/rules/prefer-literal-enum-member.md)                         | Require that all enum members be literal values to prevent unintended enum member name shadow issues                    |                    |          |                   |
+| [`@typescript-eslint/prefer-namespace-keyword`](./docs/rules/prefer-namespace-keyword.md)                             | Require the use of the `namespace` keyword instead of the `module` keyword to declare custom TypeScript modules         | :heavy_check_mark: | :wrench: |                   |
+| [`@typescript-eslint/prefer-nullish-coalescing`](./docs/rules/prefer-nullish-coalescing.md)                           | Enforce the usage of the nullish coalescing operator instead of logical chaining                                        |                    |          | :thought_balloon: |
+| [`@typescript-eslint/prefer-optional-chain`](./docs/rules/prefer-optional-chain.md)                                   | Prefer using concise optional chain expressions instead of chained logical ands                                         |                    |          |                   |
+| [`@typescript-eslint/prefer-readonly`](./docs/rules/prefer-readonly.md)                                               | Requires that private members are marked as `readonly` if they're never modified outside of the constructor             |                    | :wrench: | :thought_balloon: |
+| [`@typescript-eslint/prefer-readonly-parameter-types`](./docs/rules/prefer-readonly-parameter-types.md)               | Requires that function parameters are typed as readonly to prevent accidental mutation of inputs                        |                    |          | :thought_balloon: |
+| [`@typescript-eslint/prefer-reduce-type-parameter`](./docs/rules/prefer-reduce-type-parameter.md)                     | Prefer using type parameter when calling `Array#reduce` instead of casting                                              |                    | :wrench: | :thought_balloon: |
+| [`@typescript-eslint/prefer-regexp-exec`](./docs/rules/prefer-regexp-exec.md)                                         | Enforce that `RegExp#exec` is used instead of `String#match` if no global flag is provided                              | :heavy_check_mark: |          | :thought_balloon: |
+| [`@typescript-eslint/prefer-string-starts-ends-with`](./docs/rules/prefer-string-starts-ends-with.md)                 | Enforce the use of `String#startsWith` and `String#endsWith` instead of other equivalent methods of checking substrings |                    | :wrench: | :thought_balloon: |
+| [`@typescript-eslint/prefer-ts-expect-error`](./docs/rules/prefer-ts-expect-error.md)                                 | Recommends using `@ts-expect-error` over `@ts-ignore`                                                                   |                    | :wrench: |                   |
+| [`@typescript-eslint/promise-function-async`](./docs/rules/promise-function-async.md)                                 | Requires any function or method that returns a Promise to be marked async                                               |                    | :wrench: | :thought_balloon: |
+| [`@typescript-eslint/require-array-sort-compare`](./docs/rules/require-array-sort-compare.md)                         | Requires `Array#sort` calls to always provide a `compareFunction`                                                       |                    |          | :thought_balloon: |
+| [`@typescript-eslint/restrict-plus-operands`](./docs/rules/restrict-plus-operands.md)                                 | When adding two variables, operands must both be of type number or of type string                                       | :heavy_check_mark: |          | :thought_balloon: |
+| [`@typescript-eslint/restrict-template-expressions`](./docs/rules/restrict-template-expressions.md)                   | Enforce template literal expressions to be of string type                                                               | :heavy_check_mark: |          | :thought_balloon: |
+| [`@typescript-eslint/strict-boolean-expressions`](./docs/rules/strict-boolean-expressions.md)                         | Restricts the types allowed in boolean expressions                                                                      |                    |          | :thought_balloon: |
+| [`@typescript-eslint/switch-exhaustiveness-check`](./docs/rules/switch-exhaustiveness-check.md)                       | Exhaustiveness checking in switch with union type                                                                       |                    |          | :thought_balloon: |
+| [`@typescript-eslint/triple-slash-reference`](./docs/rules/triple-slash-reference.md)                                 | Sets preference level for triple slash directives versus ES6-style import declarations                                  | :heavy_check_mark: |          |                   |
+| [`@typescript-eslint/type-annotation-spacing`](./docs/rules/type-annotation-spacing.md)                               | Require consistent spacing around type annotations                                                                      |                    | :wrench: |                   |
+| [`@typescript-eslint/typedef`](./docs/rules/typedef.md)                                                               | Requires type annotations to exist                                                                                      |                    |          |                   |
+| [`@typescript-eslint/unbound-method`](./docs/rules/unbound-method.md)                                                 | Enforces unbound methods are called with their expected scope                                                           | :heavy_check_mark: |          | :thought_balloon: |
+| [`@typescript-eslint/unified-signatures`](./docs/rules/unified-signatures.md)                                         | Warns for any two overloads that could be unified into one by using a union or an optional/rest parameter               |                    |          |                   |
+
+<!-- end base rule list -->
+
+### Extension Rules
+
+In some cases, ESLint provides a rule itself, but it doesn't support TypeScript syntax; either it crashes, or it ignores the syntax, or it falsely reports against it.
+In these cases, we create what we call an extension rule; a rule within our plugin that has the same functionality, but also supports TypeScript.
+
+<!-- begin extension rule list -->
+
+**Key**: :heavy_check_mark: = recommended, :wrench: = fixable, :thought_balloon: = requires type information
+
+| Name                                                                                            | Description                                                                          | :heavy_check_mark: | :wrench: | :thought_balloon: |
+| ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | ------------------ | -------- | ----------------- |
+| [`@typescript-eslint/brace-style`](./docs/rules/brace-style.md)                                 | Enforce consistent brace style for blocks                                            |                    | :wrench: |                   |
+| [`@typescript-eslint/comma-dangle`](./docs/rules/comma-dangle.md)                               | Require or disallow trailing comma                                                   |                    | :wrench: |                   |
+| [`@typescript-eslint/comma-spacing`](./docs/rules/comma-spacing.md)                             | Enforces consistent spacing before and after commas                                  |                    | :wrench: |                   |
+| [`@typescript-eslint/default-param-last`](./docs/rules/default-param-last.md)                   | Enforce default parameters to be last                                                |                    |          |                   |
+| [`@typescript-eslint/dot-notation`](./docs/rules/dot-notation.md)                               | enforce dot notation whenever possible                                               |                    | :wrench: | :thought_balloon: |
+| [`@typescript-eslint/func-call-spacing`](./docs/rules/func-call-spacing.md)                     | Require or disallow spacing between function identifiers and their invocations       |                    | :wrench: |                   |
+| [`@typescript-eslint/indent`](./docs/rules/indent.md)                                           | Enforce consistent indentation                                                       |                    | :wrench: |                   |
+| [`@typescript-eslint/init-declarations`](./docs/rules/init-declarations.md)                     | require or disallow initialization in variable declarations                          |                    |          |                   |
+| [`@typescript-eslint/keyword-spacing`](./docs/rules/keyword-spacing.md)                         | Enforce consistent spacing before and after keywords                                 |                    | :wrench: |                   |
+| [`@typescript-eslint/lines-between-class-members`](./docs/rules/lines-between-class-members.md) | Require or disallow an empty line between class members                              |                    | :wrench: |                   |
+| [`@typescript-eslint/no-array-constructor`](./docs/rules/no-array-constructor.md)               | Disallow generic `Array` constructors                                                | :heavy_check_mark: | :wrench: |                   |
+| [`@typescript-eslint/no-dupe-class-members`](./docs/rules/no-dupe-class-members.md)             | Disallow duplicate class members                                                     |                    |          |                   |
+| [`@typescript-eslint/no-duplicate-imports`](./docs/rules/no-duplicate-imports.md)               | Disallow duplicate imports                                                           |                    |          |                   |
+| [`@typescript-eslint/no-empty-function`](./docs/rules/no-empty-function.md)                     | Disallow empty functions                                                             | :heavy_check_mark: |          |                   |
+| [`@typescript-eslint/no-extra-parens`](./docs/rules/no-extra-parens.md)                         | Disallow unnecessary parentheses                                                     |                    | :wrench: |                   |
+| [`@typescript-eslint/no-extra-semi`](./docs/rules/no-extra-semi.md)                             | Disallow unnecessary semicolons                                                      | :heavy_check_mark: | :wrench: |                   |
+| [`@typescript-eslint/no-implied-eval`](./docs/rules/no-implied-eval.md)                         | Disallow the use of `eval()`-like methods                                            | :heavy_check_mark: |          | :thought_balloon: |
+| [`@typescript-eslint/no-invalid-this`](./docs/rules/no-invalid-this.md)                         | Disallow `this` keywords outside of classes or class-like objects                    |                    |          |                   |
+| [`@typescript-eslint/no-loop-func`](./docs/rules/no-loop-func.md)                               | Disallow function declarations that contain unsafe references inside loop statements |                    |          |                   |
+| [`@typescript-eslint/no-loss-of-precision`](./docs/rules/no-loss-of-precision.md)               | Disallow literal numbers that lose precision                                         |                    |          |                   |
+| [`@typescript-eslint/no-magic-numbers`](./docs/rules/no-magic-numbers.md)                       | Disallow magic numbers                                                               |                    |          |                   |
+| [`@typescript-eslint/no-redeclare`](./docs/rules/no-redeclare.md)                               | Disallow variable redeclaration                                                      |                    |          |                   |
+| [`@typescript-eslint/no-shadow`](./docs/rules/no-shadow.md)                                     | Disallow variable declarations from shadowing variables declared in the outer scope  |                    |          |                   |
+| [`@typescript-eslint/no-throw-literal`](./docs/rules/no-throw-literal.md)                       | Disallow throwing literals as exceptions                                             |                    |          | :thought_balloon: |
+| [`@typescript-eslint/no-unused-expressions`](./docs/rules/no-unused-expressions.md)             | Disallow unused expressions                                                          |                    |          |                   |
+| [`@typescript-eslint/no-unused-vars`](./docs/rules/no-unused-vars.md)                           | Disallow unused variables                                                            | :heavy_check_mark: |          |                   |
+| [`@typescript-eslint/no-use-before-define`](./docs/rules/no-use-before-define.md)               | Disallow the use of variables before they are defined                                |                    |          |                   |
+| [`@typescript-eslint/no-useless-constructor`](./docs/rules/no-useless-constructor.md)           | Disallow unnecessary constructors                                                    |                    |          |                   |
+| [`@typescript-eslint/quotes`](./docs/rules/quotes.md)                                           | Enforce the consistent use of either backticks, double, or single quotes             |                    | :wrench: |                   |
+| [`@typescript-eslint/require-await`](./docs/rules/require-await.md)                             | Disallow async functions which have no `await` expression                            | :heavy_check_mark: |          | :thought_balloon: |
+| [`@typescript-eslint/return-await`](./docs/rules/return-await.md)                               | Enforces consistent returning of awaited values                                      |                    | :wrench: | :thought_balloon: |
+| [`@typescript-eslint/semi`](./docs/rules/semi.md)                                               | Require or disallow semicolons instead of ASI                                        |                    | :wrench: |                   |
+| [`@typescript-eslint/space-before-function-paren`](./docs/rules/space-before-function-paren.md) | Enforces consistent spacing before function parenthesis                              |                    | :wrench: |                   |
+| [`@typescript-eslint/space-infix-ops`](./docs/rules/space-infix-ops.md)                         | This rule is aimed at ensuring there are spaces around infix operators.              |                    | :wrench: |                   |
+
+<!-- end extension rule list -->
+
+## Contributing
+
+[See the contributing guide here](../../CONTRIBUTING.md).
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/all.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/all.js
new file mode 100644
index 0000000000000000000000000000000000000000..ad282b010586014b1379a310abf921921edffd30
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/all.js
@@ -0,0 +1,156 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:configs
+module.exports = {
+    extends: ['./configs/base', './configs/eslint-recommended'],
+    rules: {
+        '@typescript-eslint/adjacent-overload-signatures': 'error',
+        '@typescript-eslint/array-type': 'error',
+        '@typescript-eslint/await-thenable': 'error',
+        '@typescript-eslint/ban-ts-comment': 'error',
+        '@typescript-eslint/ban-tslint-comment': 'error',
+        '@typescript-eslint/ban-types': 'error',
+        'brace-style': 'off',
+        '@typescript-eslint/brace-style': 'error',
+        '@typescript-eslint/class-literal-property-style': 'error',
+        'comma-dangle': 'off',
+        '@typescript-eslint/comma-dangle': 'error',
+        'comma-spacing': 'off',
+        '@typescript-eslint/comma-spacing': 'error',
+        '@typescript-eslint/consistent-indexed-object-style': 'error',
+        '@typescript-eslint/consistent-type-assertions': 'error',
+        '@typescript-eslint/consistent-type-definitions': 'error',
+        '@typescript-eslint/consistent-type-imports': 'error',
+        'default-param-last': 'off',
+        '@typescript-eslint/default-param-last': 'error',
+        'dot-notation': 'off',
+        '@typescript-eslint/dot-notation': 'error',
+        '@typescript-eslint/explicit-function-return-type': 'error',
+        '@typescript-eslint/explicit-member-accessibility': 'error',
+        '@typescript-eslint/explicit-module-boundary-types': 'error',
+        'func-call-spacing': 'off',
+        '@typescript-eslint/func-call-spacing': 'error',
+        indent: 'off',
+        '@typescript-eslint/indent': 'error',
+        'init-declarations': 'off',
+        '@typescript-eslint/init-declarations': 'error',
+        'keyword-spacing': 'off',
+        '@typescript-eslint/keyword-spacing': 'error',
+        'lines-between-class-members': 'off',
+        '@typescript-eslint/lines-between-class-members': 'error',
+        '@typescript-eslint/member-delimiter-style': 'error',
+        '@typescript-eslint/member-ordering': 'error',
+        '@typescript-eslint/method-signature-style': 'error',
+        '@typescript-eslint/naming-convention': 'error',
+        'no-array-constructor': 'off',
+        '@typescript-eslint/no-array-constructor': 'error',
+        '@typescript-eslint/no-base-to-string': 'error',
+        '@typescript-eslint/no-confusing-non-null-assertion': 'error',
+        '@typescript-eslint/no-confusing-void-expression': 'error',
+        'no-dupe-class-members': 'off',
+        '@typescript-eslint/no-dupe-class-members': 'error',
+        'no-duplicate-imports': 'off',
+        '@typescript-eslint/no-duplicate-imports': 'error',
+        '@typescript-eslint/no-dynamic-delete': 'error',
+        'no-empty-function': 'off',
+        '@typescript-eslint/no-empty-function': 'error',
+        '@typescript-eslint/no-empty-interface': 'error',
+        '@typescript-eslint/no-explicit-any': 'error',
+        '@typescript-eslint/no-extra-non-null-assertion': 'error',
+        'no-extra-parens': 'off',
+        '@typescript-eslint/no-extra-parens': 'error',
+        'no-extra-semi': 'off',
+        '@typescript-eslint/no-extra-semi': 'error',
+        '@typescript-eslint/no-extraneous-class': 'error',
+        '@typescript-eslint/no-floating-promises': 'error',
+        '@typescript-eslint/no-for-in-array': 'error',
+        '@typescript-eslint/no-implicit-any-catch': 'error',
+        'no-implied-eval': 'off',
+        '@typescript-eslint/no-implied-eval': 'error',
+        '@typescript-eslint/no-inferrable-types': 'error',
+        'no-invalid-this': 'off',
+        '@typescript-eslint/no-invalid-this': 'error',
+        '@typescript-eslint/no-invalid-void-type': 'error',
+        'no-loop-func': 'off',
+        '@typescript-eslint/no-loop-func': 'error',
+        'no-loss-of-precision': 'off',
+        '@typescript-eslint/no-loss-of-precision': 'error',
+        'no-magic-numbers': 'off',
+        '@typescript-eslint/no-magic-numbers': 'error',
+        '@typescript-eslint/no-misused-new': 'error',
+        '@typescript-eslint/no-misused-promises': 'error',
+        '@typescript-eslint/no-namespace': 'error',
+        '@typescript-eslint/no-non-null-asserted-optional-chain': 'error',
+        '@typescript-eslint/no-non-null-assertion': 'error',
+        '@typescript-eslint/no-parameter-properties': 'error',
+        'no-redeclare': 'off',
+        '@typescript-eslint/no-redeclare': 'error',
+        '@typescript-eslint/no-require-imports': 'error',
+        'no-shadow': 'off',
+        '@typescript-eslint/no-shadow': 'error',
+        '@typescript-eslint/no-this-alias': 'error',
+        'no-throw-literal': 'off',
+        '@typescript-eslint/no-throw-literal': 'error',
+        '@typescript-eslint/no-type-alias': 'error',
+        '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error',
+        '@typescript-eslint/no-unnecessary-condition': 'error',
+        '@typescript-eslint/no-unnecessary-qualifier': 'error',
+        '@typescript-eslint/no-unnecessary-type-arguments': 'error',
+        '@typescript-eslint/no-unnecessary-type-assertion': 'error',
+        '@typescript-eslint/no-unnecessary-type-constraint': 'error',
+        '@typescript-eslint/no-unsafe-assignment': 'error',
+        '@typescript-eslint/no-unsafe-call': 'error',
+        '@typescript-eslint/no-unsafe-member-access': 'error',
+        '@typescript-eslint/no-unsafe-return': 'error',
+        'no-unused-expressions': 'off',
+        '@typescript-eslint/no-unused-expressions': 'error',
+        'no-unused-vars': 'off',
+        '@typescript-eslint/no-unused-vars': 'error',
+        'no-use-before-define': 'off',
+        '@typescript-eslint/no-use-before-define': 'error',
+        'no-useless-constructor': 'off',
+        '@typescript-eslint/no-useless-constructor': 'error',
+        '@typescript-eslint/no-var-requires': 'error',
+        '@typescript-eslint/non-nullable-type-assertion-style': 'error',
+        '@typescript-eslint/prefer-as-const': 'error',
+        '@typescript-eslint/prefer-enum-initializers': 'error',
+        '@typescript-eslint/prefer-for-of': 'error',
+        '@typescript-eslint/prefer-function-type': 'error',
+        '@typescript-eslint/prefer-includes': 'error',
+        '@typescript-eslint/prefer-literal-enum-member': 'error',
+        '@typescript-eslint/prefer-namespace-keyword': 'error',
+        '@typescript-eslint/prefer-nullish-coalescing': 'error',
+        '@typescript-eslint/prefer-optional-chain': 'error',
+        '@typescript-eslint/prefer-readonly': 'error',
+        '@typescript-eslint/prefer-readonly-parameter-types': 'error',
+        '@typescript-eslint/prefer-reduce-type-parameter': 'error',
+        '@typescript-eslint/prefer-regexp-exec': 'error',
+        '@typescript-eslint/prefer-string-starts-ends-with': 'error',
+        '@typescript-eslint/prefer-ts-expect-error': 'error',
+        '@typescript-eslint/promise-function-async': 'error',
+        quotes: 'off',
+        '@typescript-eslint/quotes': 'error',
+        '@typescript-eslint/require-array-sort-compare': 'error',
+        'require-await': 'off',
+        '@typescript-eslint/require-await': 'error',
+        '@typescript-eslint/restrict-plus-operands': 'error',
+        '@typescript-eslint/restrict-template-expressions': 'error',
+        'no-return-await': 'off',
+        '@typescript-eslint/return-await': 'error',
+        semi: 'off',
+        '@typescript-eslint/semi': 'error',
+        'space-before-function-paren': 'off',
+        '@typescript-eslint/space-before-function-paren': 'error',
+        'space-infix-ops': 'off',
+        '@typescript-eslint/space-infix-ops': 'error',
+        '@typescript-eslint/strict-boolean-expressions': 'error',
+        '@typescript-eslint/switch-exhaustiveness-check': 'error',
+        '@typescript-eslint/triple-slash-reference': 'error',
+        '@typescript-eslint/type-annotation-spacing': 'error',
+        '@typescript-eslint/typedef': 'error',
+        '@typescript-eslint/unbound-method': 'error',
+        '@typescript-eslint/unified-signatures': 'error',
+    },
+};
+//# sourceMappingURL=all.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/all.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/all.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..595717f00535c06d79ad5eaa4453f2970008e6cf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/all.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"all.js","sourceRoot":"","sources":["../../src/configs/all.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/base.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/base.js
new file mode 100644
index 0000000000000000000000000000000000000000..52d1fe8b0feefe3be70b0145b555dc28cf71c8a5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/base.js
@@ -0,0 +1,10 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:configs
+module.exports = {
+    parser: '@typescript-eslint/parser',
+    parserOptions: { sourceType: 'module' },
+    plugins: ['@typescript-eslint'],
+};
+//# sourceMappingURL=base.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/base.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/base.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..a2f415fc4468567200cf068d27cfe403b29e3564
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/base.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/configs/base.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,oDAAoD;AAEpD,iBAAS;IACP,MAAM,EAAE,2BAA2B;IACnC,aAAa,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE;IACvC,OAAO,EAAE,CAAC,oBAAoB,CAAC;CAChC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/eslint-recommended.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/eslint-recommended.js
new file mode 100644
index 0000000000000000000000000000000000000000..f1b5191e8772794daba335ca6c13140ee01da22a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/eslint-recommended.js
@@ -0,0 +1,32 @@
+"use strict";
+module.exports = {
+    overrides: [
+        {
+            files: ['*.ts', '*.tsx'],
+            rules: {
+                'constructor-super': 'off',
+                'getter-return': 'off',
+                'no-const-assign': 'off',
+                'no-dupe-args': 'off',
+                'no-dupe-class-members': 'off',
+                'no-dupe-keys': 'off',
+                'no-func-assign': 'off',
+                'no-import-assign': 'off',
+                'no-new-symbol': 'off',
+                'no-obj-calls': 'off',
+                'no-redeclare': 'off',
+                'no-setter-return': 'off',
+                'no-this-before-super': 'off',
+                'no-undef': 'off',
+                'no-unreachable': 'off',
+                'no-unsafe-negation': 'off',
+                'no-var': 'error',
+                'prefer-const': 'error',
+                'prefer-rest-params': 'error',
+                'prefer-spread': 'error',
+                'valid-typeof': 'off',
+            },
+        },
+    ],
+};
+//# sourceMappingURL=eslint-recommended.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/eslint-recommended.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/eslint-recommended.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..8181881ace1b134dace7d7e51d2457aaeedc08c4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/eslint-recommended.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"eslint-recommended.js","sourceRoot":"","sources":["../../src/configs/eslint-recommended.ts"],"names":[],"mappings":";AAKA,iBAAS;IACP,SAAS,EAAE;QACT;YACE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;YACxB,KAAK,EAAE;gBACL,mBAAmB,EAAE,KAAK;gBAC1B,eAAe,EAAE,KAAK;gBACtB,iBAAiB,EAAE,KAAK;gBACxB,cAAc,EAAE,KAAK;gBACrB,uBAAuB,EAAE,KAAK;gBAC9B,cAAc,EAAE,KAAK;gBACrB,gBAAgB,EAAE,KAAK;gBACvB,kBAAkB,EAAE,KAAK;gBACzB,eAAe,EAAE,KAAK;gBACtB,cAAc,EAAE,KAAK;gBACrB,cAAc,EAAE,KAAK;gBACrB,kBAAkB,EAAE,KAAK;gBACzB,sBAAsB,EAAE,KAAK;gBAC7B,UAAU,EAAE,KAAK;gBACjB,gBAAgB,EAAE,KAAK;gBACvB,oBAAoB,EAAE,KAAK;gBAC3B,QAAQ,EAAE,OAAO;gBACjB,cAAc,EAAE,OAAO;gBACvB,oBAAoB,EAAE,OAAO;gBAC7B,eAAe,EAAE,OAAO;gBACxB,cAAc,EAAE,KAAK;aACtB;SACF;KACF;CACF,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended-requiring-type-checking.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended-requiring-type-checking.js
new file mode 100644
index 0000000000000000000000000000000000000000..5aeb553387d796fc1f7d0b6dda220a8d7abcffdf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended-requiring-type-checking.js
@@ -0,0 +1,27 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:configs
+module.exports = {
+    extends: ['./configs/base', './configs/eslint-recommended'],
+    rules: {
+        '@typescript-eslint/await-thenable': 'error',
+        '@typescript-eslint/no-floating-promises': 'error',
+        '@typescript-eslint/no-for-in-array': 'error',
+        'no-implied-eval': 'off',
+        '@typescript-eslint/no-implied-eval': 'error',
+        '@typescript-eslint/no-misused-promises': 'error',
+        '@typescript-eslint/no-unnecessary-type-assertion': 'error',
+        '@typescript-eslint/no-unsafe-assignment': 'error',
+        '@typescript-eslint/no-unsafe-call': 'error',
+        '@typescript-eslint/no-unsafe-member-access': 'error',
+        '@typescript-eslint/no-unsafe-return': 'error',
+        '@typescript-eslint/prefer-regexp-exec': 'error',
+        'require-await': 'off',
+        '@typescript-eslint/require-await': 'error',
+        '@typescript-eslint/restrict-plus-operands': 'error',
+        '@typescript-eslint/restrict-template-expressions': 'error',
+        '@typescript-eslint/unbound-method': 'error',
+    },
+};
+//# sourceMappingURL=recommended-requiring-type-checking.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended-requiring-type-checking.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended-requiring-type-checking.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..10fcfda829614e6cc404986d010805bba33c111a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended-requiring-type-checking.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"recommended-requiring-type-checking.js","sourceRoot":"","sources":["../../src/configs/recommended-requiring-type-checking.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,oDAAoD;AAEpD,iBAAS;IACP,OAAO,EAAE,CAAC,gBAAgB,EAAE,8BAA8B,CAAC;IAC3D,KAAK,EAAE;QACL,mCAAmC,EAAE,OAAO;QAC5C,yCAAyC,EAAE,OAAO;QAClD,oCAAoC,EAAE,OAAO;QAC7C,iBAAiB,EAAE,KAAK;QACxB,oCAAoC,EAAE,OAAO;QAC7C,wCAAwC,EAAE,OAAO;QACjD,kDAAkD,EAAE,OAAO;QAC3D,yCAAyC,EAAE,OAAO;QAClD,mCAAmC,EAAE,OAAO;QAC5C,4CAA4C,EAAE,OAAO;QACrD,qCAAqC,EAAE,OAAO;QAC9C,uCAAuC,EAAE,OAAO;QAChD,eAAe,EAAE,KAAK;QACtB,kCAAkC,EAAE,OAAO;QAC3C,2CAA2C,EAAE,OAAO;QACpD,kDAAkD,EAAE,OAAO;QAC3D,mCAAmC,EAAE,OAAO;KAC7C;CACF,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended.js
new file mode 100644
index 0000000000000000000000000000000000000000..e8e5a6f7bd1c7075892da79983750fbe7b9b57e8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended.js
@@ -0,0 +1,35 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:configs
+module.exports = {
+    extends: ['./configs/base', './configs/eslint-recommended'],
+    rules: {
+        '@typescript-eslint/adjacent-overload-signatures': 'error',
+        '@typescript-eslint/ban-ts-comment': 'error',
+        '@typescript-eslint/ban-types': 'error',
+        '@typescript-eslint/explicit-module-boundary-types': 'warn',
+        'no-array-constructor': 'off',
+        '@typescript-eslint/no-array-constructor': 'error',
+        'no-empty-function': 'off',
+        '@typescript-eslint/no-empty-function': 'error',
+        '@typescript-eslint/no-empty-interface': 'error',
+        '@typescript-eslint/no-explicit-any': 'warn',
+        '@typescript-eslint/no-extra-non-null-assertion': 'error',
+        'no-extra-semi': 'off',
+        '@typescript-eslint/no-extra-semi': 'error',
+        '@typescript-eslint/no-inferrable-types': 'error',
+        '@typescript-eslint/no-misused-new': 'error',
+        '@typescript-eslint/no-namespace': 'error',
+        '@typescript-eslint/no-non-null-asserted-optional-chain': 'error',
+        '@typescript-eslint/no-non-null-assertion': 'warn',
+        '@typescript-eslint/no-this-alias': 'error',
+        'no-unused-vars': 'off',
+        '@typescript-eslint/no-unused-vars': 'warn',
+        '@typescript-eslint/no-var-requires': 'error',
+        '@typescript-eslint/prefer-as-const': 'error',
+        '@typescript-eslint/prefer-namespace-keyword': 'error',
+        '@typescript-eslint/triple-slash-reference': 'error',
+    },
+};
+//# sourceMappingURL=recommended.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..406ea3ff618421649f26a44e892e3884036970c9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"recommended.js","sourceRoot":"","sources":["../../src/configs/recommended.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,oDAAoD;AAEpD,iBAAS;IACP,OAAO,EAAE,CAAC,gBAAgB,EAAE,8BAA8B,CAAC;IAC3D,KAAK,EAAE;QACL,iDAAiD,EAAE,OAAO;QAC1D,mCAAmC,EAAE,OAAO;QAC5C,8BAA8B,EAAE,OAAO;QACvC,mDAAmD,EAAE,MAAM;QAC3D,sBAAsB,EAAE,KAAK;QAC7B,yCAAyC,EAAE,OAAO;QAClD,mBAAmB,EAAE,KAAK;QAC1B,sCAAsC,EAAE,OAAO;QAC/C,uCAAuC,EAAE,OAAO;QAChD,oCAAoC,EAAE,MAAM;QAC5C,gDAAgD,EAAE,OAAO;QACzD,eAAe,EAAE,KAAK;QACtB,kCAAkC,EAAE,OAAO;QAC3C,wCAAwC,EAAE,OAAO;QACjD,mCAAmC,EAAE,OAAO;QAC5C,iCAAiC,EAAE,OAAO;QAC1C,wDAAwD,EAAE,OAAO;QACjE,0CAA0C,EAAE,MAAM;QAClD,kCAAkC,EAAE,OAAO;QAC3C,gBAAgB,EAAE,KAAK;QACvB,mCAAmC,EAAE,MAAM;QAC3C,oCAAoC,EAAE,OAAO;QAC7C,oCAAoC,EAAE,OAAO;QAC7C,6CAA6C,EAAE,OAAO;QACtD,2CAA2C,EAAE,OAAO;KACrD;CACF,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/index.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..37426f23f43d33526c4cbd676c9a46c89935b921
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/index.js
@@ -0,0 +1,21 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+const rules_1 = __importDefault(require("./rules"));
+const all_1 = __importDefault(require("./configs/all"));
+const base_1 = __importDefault(require("./configs/base"));
+const recommended_1 = __importDefault(require("./configs/recommended"));
+const recommended_requiring_type_checking_1 = __importDefault(require("./configs/recommended-requiring-type-checking"));
+const eslint_recommended_1 = __importDefault(require("./configs/eslint-recommended"));
+module.exports = {
+    rules: rules_1.default,
+    configs: {
+        all: all_1.default,
+        base: base_1.default,
+        recommended: recommended_1.default,
+        'eslint-recommended': eslint_recommended_1.default,
+        'recommended-requiring-type-checking': recommended_requiring_type_checking_1.default,
+    },
+};
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/index.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..24698092bfa072d954a790ba487ea293093b1360
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,oDAA4B;AAE5B,wDAAgC;AAChC,0DAAkC;AAClC,wEAAgD;AAChD,wHAA6F;AAC7F,sFAA6D;AAE7D,iBAAS;IACP,KAAK,EAAL,eAAK;IACL,OAAO,EAAE;QACP,GAAG,EAAH,aAAG;QACH,IAAI,EAAJ,cAAI;QACJ,WAAW,EAAX,qBAAW;QACX,oBAAoB,EAAE,4BAAiB;QACvC,qCAAqC,EAAE,6CAAgC;KACxE;CACF,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/adjacent-overload-signatures.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/adjacent-overload-signatures.js
new file mode 100644
index 0000000000000000000000000000000000000000..6b6871465d6c76fff38565f8c08a42bca4f8fa9e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/adjacent-overload-signatures.js
@@ -0,0 +1,159 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'adjacent-overload-signatures',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Require that member overloads be consecutive',
+            category: 'Best Practices',
+            recommended: 'error',
+        },
+        schema: [],
+        messages: {
+            adjacentSignature: "All '{{name}}' signatures should be adjacent.",
+        },
+    },
+    defaultOptions: [],
+    create(context) {
+        const sourceCode = context.getSourceCode();
+        /**
+         * Gets the name and attribute of the member being processed.
+         * @param member the member being processed.
+         * @returns the name and attribute of the member or null if it's a member not relevant to the rule.
+         */
+        function getMemberMethod(member) {
+            var _a, _b;
+            if (!member) {
+                return null;
+            }
+            const isStatic = 'static' in member && !!member.static;
+            switch (member.type) {
+                case experimental_utils_1.AST_NODE_TYPES.ExportDefaultDeclaration:
+                case experimental_utils_1.AST_NODE_TYPES.ExportNamedDeclaration: {
+                    // export statements (e.g. export { a };)
+                    // have no declarations, so ignore them
+                    if (!member.declaration) {
+                        return null;
+                    }
+                    return getMemberMethod(member.declaration);
+                }
+                case experimental_utils_1.AST_NODE_TYPES.TSDeclareFunction:
+                case experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration: {
+                    const name = (_b = (_a = member.id) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : null;
+                    if (name === null) {
+                        return null;
+                    }
+                    return {
+                        name,
+                        static: isStatic,
+                        callSignature: false,
+                    };
+                }
+                case experimental_utils_1.AST_NODE_TYPES.TSMethodSignature:
+                    return {
+                        name: util.getNameFromMember(member, sourceCode),
+                        static: isStatic,
+                        callSignature: false,
+                    };
+                case experimental_utils_1.AST_NODE_TYPES.TSCallSignatureDeclaration:
+                    return {
+                        name: 'call',
+                        static: isStatic,
+                        callSignature: true,
+                    };
+                case experimental_utils_1.AST_NODE_TYPES.TSConstructSignatureDeclaration:
+                    return {
+                        name: 'new',
+                        static: isStatic,
+                        callSignature: false,
+                    };
+                case experimental_utils_1.AST_NODE_TYPES.MethodDefinition:
+                    return {
+                        name: util.getNameFromMember(member, sourceCode),
+                        static: isStatic,
+                        callSignature: false,
+                    };
+            }
+            return null;
+        }
+        function isSameMethod(method1, method2) {
+            return (!!method2 &&
+                method1.name === method2.name &&
+                method1.static === method2.static &&
+                method1.callSignature === method2.callSignature);
+        }
+        function getMembers(node) {
+            switch (node.type) {
+                case experimental_utils_1.AST_NODE_TYPES.ClassBody:
+                case experimental_utils_1.AST_NODE_TYPES.Program:
+                case experimental_utils_1.AST_NODE_TYPES.TSModuleBlock:
+                case experimental_utils_1.AST_NODE_TYPES.TSInterfaceBody:
+                    return node.body;
+                case experimental_utils_1.AST_NODE_TYPES.TSTypeLiteral:
+                    return node.members;
+            }
+        }
+        /**
+         * Check the body for overload methods.
+         * @param {ASTNode} node the body to be inspected.
+         */
+        function checkBodyForOverloadMethods(node) {
+            const members = getMembers(node);
+            if (members) {
+                let lastMethod = null;
+                const seenMethods = [];
+                members.forEach(member => {
+                    const method = getMemberMethod(member);
+                    if (method === null) {
+                        lastMethod = null;
+                        return;
+                    }
+                    const index = seenMethods.findIndex(seenMethod => isSameMethod(method, seenMethod));
+                    if (index > -1 && !isSameMethod(method, lastMethod)) {
+                        context.report({
+                            node: member,
+                            messageId: 'adjacentSignature',
+                            data: {
+                                name: (method.static ? 'static ' : '') + method.name,
+                            },
+                        });
+                    }
+                    else if (index === -1) {
+                        seenMethods.push(method);
+                    }
+                    lastMethod = method;
+                });
+            }
+        }
+        return {
+            ClassBody: checkBodyForOverloadMethods,
+            Program: checkBodyForOverloadMethods,
+            TSModuleBlock: checkBodyForOverloadMethods,
+            TSTypeLiteral: checkBodyForOverloadMethods,
+            TSInterfaceBody: checkBodyForOverloadMethods,
+        };
+    },
+});
+//# sourceMappingURL=adjacent-overload-signatures.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/adjacent-overload-signatures.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/adjacent-overload-signatures.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..7371090741f9624a75d51eae4aaad2a04dfddec3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/adjacent-overload-signatures.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"adjacent-overload-signatures.js","sourceRoot":"","sources":["../../src/rules/adjacent-overload-signatures.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/array-type.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/array-type.js
new file mode 100644
index 0000000000000000000000000000000000000000..ea84b4b4ce4238ff1ffb64d3cca3ea74e2222c9c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/array-type.js
@@ -0,0 +1,231 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+/**
+ * Check whatever node can be considered as simple
+ * @param node the node to be evaluated.
+ */
+function isSimpleType(node) {
+    switch (node.type) {
+        case experimental_utils_1.AST_NODE_TYPES.Identifier:
+        case experimental_utils_1.AST_NODE_TYPES.TSAnyKeyword:
+        case experimental_utils_1.AST_NODE_TYPES.TSBooleanKeyword:
+        case experimental_utils_1.AST_NODE_TYPES.TSNeverKeyword:
+        case experimental_utils_1.AST_NODE_TYPES.TSNumberKeyword:
+        case experimental_utils_1.AST_NODE_TYPES.TSObjectKeyword:
+        case experimental_utils_1.AST_NODE_TYPES.TSStringKeyword:
+        case experimental_utils_1.AST_NODE_TYPES.TSSymbolKeyword:
+        case experimental_utils_1.AST_NODE_TYPES.TSUnknownKeyword:
+        case experimental_utils_1.AST_NODE_TYPES.TSVoidKeyword:
+        case experimental_utils_1.AST_NODE_TYPES.TSNullKeyword:
+        case experimental_utils_1.AST_NODE_TYPES.TSArrayType:
+        case experimental_utils_1.AST_NODE_TYPES.TSUndefinedKeyword:
+        case experimental_utils_1.AST_NODE_TYPES.TSThisType:
+        case experimental_utils_1.AST_NODE_TYPES.TSQualifiedName:
+            return true;
+        case experimental_utils_1.AST_NODE_TYPES.TSTypeReference:
+            if (node.typeName &&
+                node.typeName.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                node.typeName.name === 'Array') {
+                if (!node.typeParameters) {
+                    return true;
+                }
+                if (node.typeParameters.params.length === 1) {
+                    return isSimpleType(node.typeParameters.params[0]);
+                }
+            }
+            else {
+                if (node.typeParameters) {
+                    return false;
+                }
+                return isSimpleType(node.typeName);
+            }
+            return false;
+        default:
+            return false;
+    }
+}
+/**
+ * Check if node needs parentheses
+ * @param node the node to be evaluated.
+ */
+function typeNeedsParentheses(node) {
+    switch (node.type) {
+        case experimental_utils_1.AST_NODE_TYPES.TSTypeReference:
+            return typeNeedsParentheses(node.typeName);
+        case experimental_utils_1.AST_NODE_TYPES.TSUnionType:
+        case experimental_utils_1.AST_NODE_TYPES.TSFunctionType:
+        case experimental_utils_1.AST_NODE_TYPES.TSIntersectionType:
+        case experimental_utils_1.AST_NODE_TYPES.TSTypeOperator:
+        case experimental_utils_1.AST_NODE_TYPES.TSInferType:
+            return true;
+        case experimental_utils_1.AST_NODE_TYPES.Identifier:
+            return node.name === 'ReadonlyArray';
+        default:
+            return false;
+    }
+}
+const arrayOption = { enum: ['array', 'generic', 'array-simple'] };
+exports.default = util.createRule({
+    name: 'array-type',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Requires using either `T[]` or `Array<T>` for arrays',
+            category: 'Stylistic Issues',
+            // too opinionated to be recommended
+            recommended: false,
+        },
+        fixable: 'code',
+        messages: {
+            errorStringGeneric: "Array type using '{{type}}[]' is forbidden. Use 'Array<{{type}}>' instead.",
+            errorStringGenericSimple: "Array type using '{{type}}[]' is forbidden for non-simple types. Use 'Array<{{type}}>' instead.",
+            errorStringArray: "Array type using 'Array<{{type}}>' is forbidden. Use '{{type}}[]' instead.",
+            errorStringArraySimple: "Array type using 'Array<{{type}}>' is forbidden for simple types. Use '{{type}}[]' instead.",
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    default: arrayOption,
+                    readonly: arrayOption,
+                },
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            default: 'array',
+        },
+    ],
+    create(context, [options]) {
+        var _a;
+        const sourceCode = context.getSourceCode();
+        const defaultOption = options.default;
+        const readonlyOption = (_a = options.readonly) !== null && _a !== void 0 ? _a : defaultOption;
+        /**
+         * @param node the node to be evaluated.
+         */
+        function getMessageType(node) {
+            if (node) {
+                if (node.type === experimental_utils_1.AST_NODE_TYPES.TSParenthesizedType) {
+                    return getMessageType(node.typeAnnotation);
+                }
+                if (isSimpleType(node)) {
+                    return sourceCode.getText(node);
+                }
+            }
+            return 'T';
+        }
+        return {
+            TSArrayType(node) {
+                const isReadonly = node.parent &&
+                    node.parent.type === experimental_utils_1.AST_NODE_TYPES.TSTypeOperator &&
+                    node.parent.operator === 'readonly';
+                const currentOption = isReadonly ? readonlyOption : defaultOption;
+                if (currentOption === 'array' ||
+                    (currentOption === 'array-simple' && isSimpleType(node.elementType))) {
+                    return;
+                }
+                const messageId = currentOption === 'generic'
+                    ? 'errorStringGeneric'
+                    : 'errorStringGenericSimple';
+                const errorNode = isReadonly ? node.parent : node;
+                context.report({
+                    node: errorNode,
+                    messageId,
+                    data: {
+                        type: getMessageType(node.elementType),
+                    },
+                    fix(fixer) {
+                        const typeNode = node.elementType.type === experimental_utils_1.AST_NODE_TYPES.TSParenthesizedType
+                            ? node.elementType.typeAnnotation
+                            : node.elementType;
+                        const arrayType = isReadonly ? 'ReadonlyArray' : 'Array';
+                        return [
+                            fixer.replaceTextRange([errorNode.range[0], typeNode.range[0]], `${arrayType}<`),
+                            fixer.replaceTextRange([typeNode.range[1], errorNode.range[1]], '>'),
+                        ];
+                    },
+                });
+            },
+            TSTypeReference(node) {
+                var _a, _b;
+                if (node.typeName.type !== experimental_utils_1.AST_NODE_TYPES.Identifier ||
+                    !(node.typeName.name === 'Array' ||
+                        node.typeName.name === 'ReadonlyArray')) {
+                    return;
+                }
+                const isReadonlyArrayType = node.typeName.name === 'ReadonlyArray';
+                const currentOption = isReadonlyArrayType
+                    ? readonlyOption
+                    : defaultOption;
+                if (currentOption === 'generic') {
+                    return;
+                }
+                const readonlyPrefix = isReadonlyArrayType ? 'readonly ' : '';
+                const typeParams = (_a = node.typeParameters) === null || _a === void 0 ? void 0 : _a.params;
+                const messageId = currentOption === 'array'
+                    ? 'errorStringArray'
+                    : 'errorStringArraySimple';
+                if (!typeParams || typeParams.length === 0) {
+                    // Create an 'any' array
+                    context.report({
+                        node,
+                        messageId,
+                        data: {
+                            type: 'any',
+                        },
+                        fix(fixer) {
+                            return fixer.replaceText(node, `${readonlyPrefix}any[]`);
+                        },
+                    });
+                    return;
+                }
+                if (typeParams.length !== 1 ||
+                    (currentOption === 'array-simple' && !isSimpleType(typeParams[0]))) {
+                    return;
+                }
+                const type = typeParams[0];
+                const typeParens = typeNeedsParentheses(type);
+                const parentParens = readonlyPrefix && ((_b = node.parent) === null || _b === void 0 ? void 0 : _b.type) === experimental_utils_1.AST_NODE_TYPES.TSArrayType;
+                const start = `${parentParens ? '(' : ''}${readonlyPrefix}${typeParens ? '(' : ''}`;
+                const end = `${typeParens ? ')' : ''}[]${parentParens ? ')' : ''}`;
+                context.report({
+                    node,
+                    messageId,
+                    data: {
+                        type: getMessageType(type),
+                    },
+                    fix(fixer) {
+                        return [
+                            fixer.replaceTextRange([node.range[0], type.range[0]], start),
+                            fixer.replaceTextRange([type.range[1], node.range[1]], end),
+                        ];
+                    },
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=array-type.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/array-type.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/array-type.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..ef7366c7434a420b8dba6b9d985eb7e15a2d5b8d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/array-type.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"array-type.js","sourceRoot":"","sources":["../../src/rules/array-type.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/await-thenable.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/await-thenable.js
new file mode 100644
index 0000000000000000000000000000000000000000..e00e853dd872ab8e49ce3ecac5c63a3062e32d20
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/await-thenable.js
@@ -0,0 +1,59 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const tsutils = __importStar(require("tsutils"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'await-thenable',
+    meta: {
+        docs: {
+            description: 'Disallows awaiting a value that is not a Thenable',
+            category: 'Best Practices',
+            recommended: 'error',
+            requiresTypeChecking: true,
+        },
+        messages: {
+            await: 'Unexpected `await` of a non-Promise (non-"Thenable") value.',
+        },
+        schema: [],
+        type: 'problem',
+    },
+    defaultOptions: [],
+    create(context) {
+        const parserServices = util.getParserServices(context);
+        const checker = parserServices.program.getTypeChecker();
+        return {
+            AwaitExpression(node) {
+                const originalNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+                const type = checker.getTypeAtLocation(originalNode.expression);
+                if (!util.isTypeAnyType(type) &&
+                    !util.isTypeUnknownType(type) &&
+                    !tsutils.isThenableType(checker, originalNode.expression, type)) {
+                    context.report({
+                        messageId: 'await',
+                        node,
+                    });
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=await-thenable.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/await-thenable.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/await-thenable.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b53e8dc881a46f19862bd5755f326b2b88fde3d8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/await-thenable.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"await-thenable.js","sourceRoot":"","sources":["../../src/rules/await-thenable.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmC;AAEnC,8CAAgC;AAEhC,kBAAe,IAAI,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,WAAW,EAAE,mDAAmD;YAChE,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,OAAO;YACpB,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,6DAA6D;SACrE;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,SAAS;KAChB;IACD,cAAc,EAAE,EAAE;IAElB,MAAM,CAAC,OAAO;QACZ,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAExD,OAAO;YACL,eAAe,CAAC,IAAI;gBAClB,MAAM,YAAY,GAAG,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpE,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gBAEhE,IACE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;oBACzB,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAC7B,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,EAC/D;oBACA,OAAO,CAAC,MAAM,CAAC;wBACb,SAAS,EAAE,OAAO;wBAClB,IAAI;qBACL,CAAC,CAAC;iBACJ;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-ts-comment.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-ts-comment.js
new file mode 100644
index 0000000000000000000000000000000000000000..95e7c28308a2312ed15684a16dcae45d7fa274f6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-ts-comment.js
@@ -0,0 +1,147 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.defaultMinimumDescriptionLength = void 0;
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.defaultMinimumDescriptionLength = 3;
+exports.default = util.createRule({
+    name: 'ban-ts-comment',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Bans `@ts-<directive>` comments from being used or requires descriptions after directive',
+            category: 'Best Practices',
+            recommended: 'error',
+        },
+        messages: {
+            tsDirectiveComment: 'Do not use "@ts-{{directive}}" because it alters compilation errors.',
+            tsDirectiveCommentRequiresDescription: 'Include a description after the "@ts-{{directive}}" directive to explain why the @ts-{{directive}} is necessary. The description must be {{minimumDescriptionLength}} characters or longer.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    'ts-expect-error': {
+                        oneOf: [
+                            {
+                                type: 'boolean',
+                                default: true,
+                            },
+                            {
+                                enum: ['allow-with-description'],
+                            },
+                        ],
+                    },
+                    'ts-ignore': {
+                        oneOf: [
+                            {
+                                type: 'boolean',
+                                default: true,
+                            },
+                            {
+                                enum: ['allow-with-description'],
+                            },
+                        ],
+                    },
+                    'ts-nocheck': {
+                        oneOf: [
+                            {
+                                type: 'boolean',
+                                default: true,
+                            },
+                            {
+                                enum: ['allow-with-description'],
+                            },
+                        ],
+                    },
+                    'ts-check': {
+                        oneOf: [
+                            {
+                                type: 'boolean',
+                                default: true,
+                            },
+                            {
+                                enum: ['allow-with-description'],
+                            },
+                        ],
+                    },
+                    minimumDescriptionLength: {
+                        type: 'number',
+                        default: exports.defaultMinimumDescriptionLength,
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            'ts-expect-error': 'allow-with-description',
+            'ts-ignore': true,
+            'ts-nocheck': true,
+            'ts-check': false,
+            minimumDescriptionLength: exports.defaultMinimumDescriptionLength,
+        },
+    ],
+    create(context, [options]) {
+        /*
+          The regex used are taken from the ones used in the official TypeScript repo -
+          https://github.com/microsoft/TypeScript/blob/master/src/compiler/scanner.ts#L281-L289
+        */
+        const commentDirectiveRegExSingleLine = /^\/*\s*@ts-(expect-error|ignore|check|nocheck)(.*)/;
+        const commentDirectiveRegExMultiLine = /^\s*(?:\/|\*)*\s*@ts-(expect-error|ignore|check|nocheck)(.*)/;
+        const sourceCode = context.getSourceCode();
+        return {
+            Program() {
+                const comments = sourceCode.getAllComments();
+                comments.forEach(comment => {
+                    var _a;
+                    let regExp = commentDirectiveRegExSingleLine;
+                    if (comment.type !== experimental_utils_1.AST_TOKEN_TYPES.Line) {
+                        regExp = commentDirectiveRegExMultiLine;
+                    }
+                    const [, directive, description] = (_a = regExp.exec(comment.value)) !== null && _a !== void 0 ? _a : [];
+                    const fullDirective = `ts-${directive}`;
+                    const option = options[fullDirective];
+                    if (option === true) {
+                        context.report({
+                            data: { directive },
+                            node: comment,
+                            messageId: 'tsDirectiveComment',
+                        });
+                    }
+                    if (option === 'allow-with-description') {
+                        const { minimumDescriptionLength = exports.defaultMinimumDescriptionLength, } = options;
+                        if (description.trim().length < minimumDescriptionLength) {
+                            context.report({
+                                data: { directive, minimumDescriptionLength },
+                                node: comment,
+                                messageId: 'tsDirectiveCommentRequiresDescription',
+                            });
+                        }
+                    }
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=ban-ts-comment.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-ts-comment.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-ts-comment.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b37ca6d5f29f628eded6f23cea84cf3c36bbf0f1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-ts-comment.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ban-ts-comment.js","sourceRoot":"","sources":["../../src/rules/ban-ts-comment.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-tslint-comment.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-tslint-comment.js
new file mode 100644
index 0000000000000000000000000000000000000000..46cab0dee0d9b6a3a915519f23e442c957409a6b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-tslint-comment.js
@@ -0,0 +1,75 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+// tslint regex
+// https://github.com/palantir/tslint/blob/95d9d958833fd9dc0002d18cbe34db20d0fbf437/src/enableDisableRules.ts#L32
+const ENABLE_DISABLE_REGEX = /^\s*tslint:(enable|disable)(?:-(line|next-line))?(:|\s|$)/;
+const toText = (text, type) => type === experimental_utils_1.AST_TOKEN_TYPES.Line
+    ? ['//', text.trim()].join(' ')
+    : ['/*', text.trim(), '*/'].join(' ');
+exports.default = util.createRule({
+    name: 'ban-tslint-comment',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Bans `// tslint:<rule-flag>` comments from being used',
+            category: 'Stylistic Issues',
+            recommended: false,
+        },
+        messages: {
+            commentDetected: 'tslint comment detected: "{{ text }}"',
+        },
+        schema: [],
+        fixable: 'code',
+    },
+    defaultOptions: [],
+    create: context => {
+        const sourceCode = context.getSourceCode();
+        return {
+            Program() {
+                const comments = sourceCode.getAllComments();
+                comments.forEach(c => {
+                    if (ENABLE_DISABLE_REGEX.test(c.value)) {
+                        context.report({
+                            data: { text: toText(c.value, c.type) },
+                            node: c,
+                            messageId: 'commentDetected',
+                            fix(fixer) {
+                                const rangeStart = sourceCode.getIndexFromLoc({
+                                    column: c.loc.start.column > 0 ? c.loc.start.column - 1 : 0,
+                                    line: c.loc.start.line,
+                                });
+                                const rangeEnd = sourceCode.getIndexFromLoc({
+                                    column: c.loc.end.column,
+                                    line: c.loc.end.line,
+                                });
+                                return fixer.removeRange([rangeStart, rangeEnd + 1]);
+                            },
+                        });
+                    }
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=ban-tslint-comment.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-tslint-comment.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-tslint-comment.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..301958f152845e76c5bcf4bc356ddaed465a733e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-tslint-comment.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ban-tslint-comment.js","sourceRoot":"","sources":["../../src/rules/ban-tslint-comment.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAAwE;AACxE,8CAAgC;AAEhC,eAAe;AACf,iHAAiH;AACjH,MAAM,oBAAoB,GAAG,2DAA2D,CAAC;AAEzF,MAAM,MAAM,GAAG,CACb,IAAY,EACZ,IAAkD,EAC1C,EAAE,CACV,IAAI,KAAK,oCAAe,CAAC,IAAI;IAC3B,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAC/B,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE1C,kBAAe,IAAI,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,uDAAuD;YACpE,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,KAAK;SACnB;QACD,QAAQ,EAAE;YACR,eAAe,EAAE,uCAAuC;SACzD;QACD,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,MAAM;KAChB;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,EAAE,OAAO,CAAC,EAAE;QAChB,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO;YACL,OAAO;gBACL,MAAM,QAAQ,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;gBAC7C,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACnB,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;wBACtC,OAAO,CAAC,MAAM,CAAC;4BACb,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;4BACvC,IAAI,EAAE,CAAC;4BACP,SAAS,EAAE,iBAAiB;4BAC5B,GAAG,CAAC,KAAK;gCACP,MAAM,UAAU,GAAG,UAAU,CAAC,eAAe,CAAC;oCAC5C,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oCAC3D,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI;iCACvB,CAAC,CAAC;gCACH,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC;oCAC1C,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM;oCACxB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;iCACrB,CAAC,CAAC;gCACH,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;4BACvD,CAAC;yBACF,CAAC,CAAC;qBACJ;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-types.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-types.js
new file mode 100644
index 0000000000000000000000000000000000000000..0cbb3e6c82fca9cb0204cf0537aaf072bc61ad38
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-types.js
@@ -0,0 +1,198 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TYPE_KEYWORDS = void 0;
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+function removeSpaces(str) {
+    return str.replace(/ /g, '');
+}
+function stringifyNode(node, sourceCode) {
+    return removeSpaces(sourceCode.getText(node));
+}
+function getCustomMessage(bannedType) {
+    if (bannedType === null) {
+        return '';
+    }
+    if (typeof bannedType === 'string') {
+        return ` ${bannedType}`;
+    }
+    if (bannedType.message) {
+        return ` ${bannedType.message}`;
+    }
+    return '';
+}
+const defaultTypes = {
+    String: {
+        message: 'Use string instead',
+        fixWith: 'string',
+    },
+    Boolean: {
+        message: 'Use boolean instead',
+        fixWith: 'boolean',
+    },
+    Number: {
+        message: 'Use number instead',
+        fixWith: 'number',
+    },
+    Symbol: {
+        message: 'Use symbol instead',
+        fixWith: 'symbol',
+    },
+    Function: {
+        message: [
+            'The `Function` type accepts any function-like value.',
+            'It provides no type safety when calling the function, which can be a common source of bugs.',
+            'It also accepts things like class declarations, which will throw at runtime as they will not be called with `new`.',
+            'If you are expecting the function to accept certain arguments, you should explicitly define the function shape.',
+        ].join('\n'),
+    },
+    // object typing
+    Object: {
+        message: [
+            'The `Object` type actually means "any non-nullish value", so it is marginally better than `unknown`.',
+            '- If you want a type meaning "any object", you probably want `Record<string, unknown>` instead.',
+            '- If you want a type meaning "any value", you probably want `unknown` instead.',
+        ].join('\n'),
+    },
+    '{}': {
+        message: [
+            '`{}` actually means "any non-nullish value".',
+            '- If you want a type meaning "any object", you probably want `Record<string, unknown>` instead.',
+            '- If you want a type meaning "any value", you probably want `unknown` instead.',
+            '- If you want a type meaning "empty object", you probably want `Record<string, never>` instead.',
+        ].join('\n'),
+    },
+    object: {
+        message: [
+            'The `object` type is currently hard to use ([see this issue](https://github.com/microsoft/TypeScript/issues/21732)).',
+            'Consider using `Record<string, unknown>` instead, as it allows you to more easily inspect and use the keys.',
+        ].join('\n'),
+    },
+};
+exports.TYPE_KEYWORDS = {
+    bigint: experimental_utils_1.AST_NODE_TYPES.TSBigIntKeyword,
+    boolean: experimental_utils_1.AST_NODE_TYPES.TSBooleanKeyword,
+    never: experimental_utils_1.AST_NODE_TYPES.TSNeverKeyword,
+    null: experimental_utils_1.AST_NODE_TYPES.TSNullKeyword,
+    number: experimental_utils_1.AST_NODE_TYPES.TSNumberKeyword,
+    object: experimental_utils_1.AST_NODE_TYPES.TSObjectKeyword,
+    string: experimental_utils_1.AST_NODE_TYPES.TSStringKeyword,
+    symbol: experimental_utils_1.AST_NODE_TYPES.TSSymbolKeyword,
+    undefined: experimental_utils_1.AST_NODE_TYPES.TSUndefinedKeyword,
+    unknown: experimental_utils_1.AST_NODE_TYPES.TSUnknownKeyword,
+    void: experimental_utils_1.AST_NODE_TYPES.TSVoidKeyword,
+};
+exports.default = util.createRule({
+    name: 'ban-types',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Bans specific types from being used',
+            category: 'Best Practices',
+            recommended: 'error',
+        },
+        fixable: 'code',
+        messages: {
+            bannedTypeMessage: "Don't use `{{name}}` as a type.{{customMessage}}",
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    types: {
+                        type: 'object',
+                        additionalProperties: {
+                            oneOf: [
+                                { type: 'null' },
+                                { type: 'boolean' },
+                                { type: 'string' },
+                                {
+                                    type: 'object',
+                                    properties: {
+                                        message: { type: 'string' },
+                                        fixWith: { type: 'string' },
+                                    },
+                                    additionalProperties: false,
+                                },
+                            ],
+                        },
+                    },
+                    extendDefaults: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [{}],
+    create(context, [options]) {
+        var _a, _b;
+        const extendDefaults = (_a = options.extendDefaults) !== null && _a !== void 0 ? _a : true;
+        const customTypes = (_b = options.types) !== null && _b !== void 0 ? _b : {};
+        const types = Object.assign({}, extendDefaults ? defaultTypes : {}, customTypes);
+        const bannedTypes = new Map(Object.entries(types).map(([type, data]) => [removeSpaces(type), data]));
+        function checkBannedTypes(typeNode, name = stringifyNode(typeNode, context.getSourceCode())) {
+            const bannedType = bannedTypes.get(name);
+            if (bannedType === undefined || bannedType === false) {
+                return;
+            }
+            const customMessage = getCustomMessage(bannedType);
+            const fixWith = bannedType && typeof bannedType === 'object' && bannedType.fixWith;
+            context.report({
+                node: typeNode,
+                messageId: 'bannedTypeMessage',
+                data: {
+                    name,
+                    customMessage,
+                },
+                fix: fixWith
+                    ? (fixer) => fixer.replaceText(typeNode, fixWith)
+                    : null,
+            });
+        }
+        const keywordSelectors = util.objectReduceKey(exports.TYPE_KEYWORDS, (acc, keyword) => {
+            if (bannedTypes.has(keyword)) {
+                acc[exports.TYPE_KEYWORDS[keyword]] = (node) => checkBannedTypes(node, keyword);
+            }
+            return acc;
+        }, {});
+        return Object.assign(Object.assign({}, keywordSelectors), { TSTypeLiteral(node) {
+                if (node.members.length) {
+                    return;
+                }
+                checkBannedTypes(node);
+            },
+            TSTupleType(node) {
+                if (node.elementTypes.length === 0) {
+                    checkBannedTypes(node);
+                }
+            },
+            TSTypeReference(node) {
+                checkBannedTypes(node.typeName);
+                if (node.typeParameters) {
+                    checkBannedTypes(node);
+                }
+            } });
+    },
+});
+//# sourceMappingURL=ban-types.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-types.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-types.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..01eacc77ae97e1bc89fb13c72d9761810ab97342
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ban-types.js","sourceRoot":"","sources":["../../src/rules/ban-types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/brace-style.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/brace-style.js
new file mode 100644
index 0000000000000000000000000000000000000000..5709f0a9a721dd5b51cedf53b977e7c528050044
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/brace-style.js
@@ -0,0 +1,94 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const brace_style_1 = __importDefault(require("eslint/lib/rules/brace-style"));
+const util_1 = require("../util");
+exports.default = util_1.createRule({
+    name: 'brace-style',
+    meta: {
+        type: 'layout',
+        docs: {
+            description: 'Enforce consistent brace style for blocks',
+            category: 'Stylistic Issues',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        messages: brace_style_1.default.meta.messages,
+        fixable: brace_style_1.default.meta.fixable,
+        schema: brace_style_1.default.meta.schema,
+    },
+    defaultOptions: ['1tbs'],
+    create(context) {
+        const [style, { allowSingleLine } = { allowSingleLine: false },] = context.options;
+        const isAllmanStyle = style === 'allman';
+        const sourceCode = context.getSourceCode();
+        const rules = brace_style_1.default.create(context);
+        /**
+         * Checks a pair of curly brackets based on the user's config
+         */
+        function validateCurlyPair(openingCurlyToken, closingCurlyToken) {
+            if (allowSingleLine &&
+                util_1.isTokenOnSameLine(openingCurlyToken, closingCurlyToken)) {
+                return;
+            }
+            const tokenBeforeOpeningCurly = sourceCode.getTokenBefore(openingCurlyToken);
+            const tokenBeforeClosingCurly = sourceCode.getTokenBefore(closingCurlyToken);
+            const tokenAfterOpeningCurly = sourceCode.getTokenAfter(openingCurlyToken);
+            if (!isAllmanStyle &&
+                !util_1.isTokenOnSameLine(tokenBeforeOpeningCurly, openingCurlyToken)) {
+                context.report({
+                    node: openingCurlyToken,
+                    messageId: 'nextLineOpen',
+                    fix: fixer => {
+                        const textRange = [
+                            tokenBeforeOpeningCurly.range[1],
+                            openingCurlyToken.range[0],
+                        ];
+                        const textBetween = sourceCode.text.slice(textRange[0], textRange[1]);
+                        if (textBetween.trim()) {
+                            return null;
+                        }
+                        return fixer.replaceTextRange(textRange, ' ');
+                    },
+                });
+            }
+            if (isAllmanStyle &&
+                util_1.isTokenOnSameLine(tokenBeforeOpeningCurly, openingCurlyToken)) {
+                context.report({
+                    node: openingCurlyToken,
+                    messageId: 'sameLineOpen',
+                    fix: fixer => fixer.insertTextBefore(openingCurlyToken, '\n'),
+                });
+            }
+            if (util_1.isTokenOnSameLine(openingCurlyToken, tokenAfterOpeningCurly) &&
+                tokenAfterOpeningCurly !== closingCurlyToken) {
+                context.report({
+                    node: openingCurlyToken,
+                    messageId: 'blockSameLine',
+                    fix: fixer => fixer.insertTextAfter(openingCurlyToken, '\n'),
+                });
+            }
+            if (util_1.isTokenOnSameLine(tokenBeforeClosingCurly, closingCurlyToken) &&
+                tokenBeforeClosingCurly !== openingCurlyToken) {
+                context.report({
+                    node: closingCurlyToken,
+                    messageId: 'singleLineClose',
+                    fix: fixer => fixer.insertTextBefore(closingCurlyToken, '\n'),
+                });
+            }
+        }
+        return Object.assign(Object.assign({}, rules), { 'TSInterfaceBody, TSModuleBlock'(node) {
+                const openingCurly = sourceCode.getFirstToken(node);
+                const closingCurly = sourceCode.getLastToken(node);
+                validateCurlyPair(openingCurly, closingCurly);
+            },
+            TSEnumDeclaration(node) {
+                const closingCurly = sourceCode.getLastToken(node);
+                const openingCurly = sourceCode.getTokenBefore(node.members.length ? node.members[0] : closingCurly);
+                validateCurlyPair(openingCurly, closingCurly);
+            } });
+    },
+});
+//# sourceMappingURL=brace-style.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/brace-style.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/brace-style.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..8bfa2a87466e7caa0e7d5f130fbc7e2e7ce238d5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/brace-style.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"brace-style.js","sourceRoot":"","sources":["../../src/rules/brace-style.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js
new file mode 100644
index 0000000000000000000000000000000000000000..2d6e062486f18e84b0cb0b86af376ae43c966535
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js
@@ -0,0 +1,114 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+const printNodeModifiers = (node, final) => {
+    var _a;
+    return `${(_a = node.accessibility) !== null && _a !== void 0 ? _a : ''}${node.static ? ' static' : ''} ${final} `.trimLeft();
+};
+const isSupportedLiteral = (node) => {
+    if (node.type === experimental_utils_1.AST_NODE_TYPES.Literal) {
+        return true;
+    }
+    if (node.type === experimental_utils_1.AST_NODE_TYPES.TaggedTemplateExpression ||
+        node.type === experimental_utils_1.AST_NODE_TYPES.TemplateLiteral) {
+        return ('quasi' in node ? node.quasi.quasis : node.quasis).length === 1;
+    }
+    return false;
+};
+exports.default = util.createRule({
+    name: 'class-literal-property-style',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Ensures that literals on classes are exposed in a consistent style',
+            category: 'Best Practices',
+            recommended: false,
+        },
+        fixable: 'code',
+        messages: {
+            preferFieldStyle: 'Literals should be exposed using readonly fields.',
+            preferGetterStyle: 'Literals should be exposed using getters.',
+        },
+        schema: [{ enum: ['fields', 'getters'] }],
+    },
+    defaultOptions: ['fields'],
+    create(context, [style]) {
+        if (style === 'fields') {
+            return {
+                MethodDefinition(node) {
+                    if (node.kind !== 'get' ||
+                        !node.value.body ||
+                        !node.value.body.body.length) {
+                        return;
+                    }
+                    const [statement] = node.value.body.body;
+                    if (statement.type !== experimental_utils_1.AST_NODE_TYPES.ReturnStatement) {
+                        return;
+                    }
+                    const { argument } = statement;
+                    if (!argument || !isSupportedLiteral(argument)) {
+                        return;
+                    }
+                    context.report({
+                        node: node.key,
+                        messageId: 'preferFieldStyle',
+                        fix(fixer) {
+                            const sourceCode = context.getSourceCode();
+                            const name = sourceCode.getText(node.key);
+                            let text = '';
+                            text += printNodeModifiers(node, 'readonly');
+                            text += node.computed ? `[${name}]` : name;
+                            text += ` = ${sourceCode.getText(argument)};`;
+                            return fixer.replaceText(node, text);
+                        },
+                    });
+                },
+            };
+        }
+        return {
+            ClassProperty(node) {
+                if (!node.readonly || node.declare) {
+                    return;
+                }
+                const { value } = node;
+                if (!value || !isSupportedLiteral(value)) {
+                    return;
+                }
+                context.report({
+                    node: node.key,
+                    messageId: 'preferGetterStyle',
+                    fix(fixer) {
+                        const sourceCode = context.getSourceCode();
+                        const name = sourceCode.getText(node.key);
+                        let text = '';
+                        text += printNodeModifiers(node, 'get');
+                        text += node.computed ? `[${name}]` : name;
+                        text += `() { return ${sourceCode.getText(value)}; }`;
+                        return fixer.replaceText(node, text);
+                    },
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=class-literal-property-style.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..99fba142f611366562d566dd1d67066824c25580
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"class-literal-property-style.js","sourceRoot":"","sources":["../../src/rules/class-literal-property-style.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-dangle.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-dangle.js
new file mode 100644
index 0000000000000000000000000000000000000000..5083584c85a2435542f1dd704f7510a3a9034477
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-dangle.js
@@ -0,0 +1,177 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const util = __importStar(require("../util"));
+const comma_dangle_1 = __importDefault(require("eslint/lib/rules/comma-dangle"));
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const OPTION_VALUE_SCHEME = [
+    'always-multiline',
+    'always',
+    'never',
+    'only-multiline',
+];
+const DEFAULT_OPTION_VALUE = 'never';
+function normalizeOptions(options) {
+    var _a, _b, _c;
+    if (typeof options === 'string') {
+        return {
+            enums: options,
+            generics: options,
+            tuples: options,
+        };
+    }
+    return {
+        enums: (_a = options.enums) !== null && _a !== void 0 ? _a : DEFAULT_OPTION_VALUE,
+        generics: (_b = options.generics) !== null && _b !== void 0 ? _b : DEFAULT_OPTION_VALUE,
+        tuples: (_c = options.tuples) !== null && _c !== void 0 ? _c : DEFAULT_OPTION_VALUE,
+    };
+}
+exports.default = util.createRule({
+    name: 'comma-dangle',
+    meta: {
+        type: 'layout',
+        docs: {
+            description: 'Require or disallow trailing comma',
+            category: 'Stylistic Issues',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        schema: {
+            definitions: {
+                value: {
+                    enum: OPTION_VALUE_SCHEME,
+                },
+                valueWithIgnore: {
+                    enum: [...OPTION_VALUE_SCHEME, 'ignore'],
+                },
+            },
+            type: 'array',
+            items: [
+                {
+                    oneOf: [
+                        {
+                            $ref: '#/definitions/value',
+                        },
+                        {
+                            type: 'object',
+                            properties: {
+                                arrays: { $ref: '#/definitions/valueWithIgnore' },
+                                objects: { $ref: '#/definitions/valueWithIgnore' },
+                                imports: { $ref: '#/definitions/valueWithIgnore' },
+                                exports: { $ref: '#/definitions/valueWithIgnore' },
+                                functions: { $ref: '#/definitions/valueWithIgnore' },
+                                enums: { $ref: '#/definitions/valueWithIgnore' },
+                                generics: { $ref: '#/definitions/valueWithIgnore' },
+                                tuples: { $ref: '#/definitions/valueWithIgnore' },
+                            },
+                            additionalProperties: false,
+                        },
+                    ],
+                },
+            ],
+        },
+        fixable: 'code',
+        messages: comma_dangle_1.default.meta.messages,
+    },
+    defaultOptions: ['never'],
+    create(context, [options]) {
+        const rules = comma_dangle_1.default.create(context);
+        const sourceCode = context.getSourceCode();
+        const normalizedOptions = normalizeOptions(options);
+        const predicate = {
+            always: forceComma,
+            'always-multiline': forceCommaIfMultiline,
+            'only-multiline': allowCommaIfMultiline,
+            never: forbidComma,
+            ignore: () => { },
+        };
+        function last(nodes) {
+            var _a;
+            return (_a = nodes[nodes.length - 1]) !== null && _a !== void 0 ? _a : null;
+        }
+        function getLastItem(node) {
+            switch (node.type) {
+                case experimental_utils_1.AST_NODE_TYPES.TSEnumDeclaration:
+                    return last(node.members);
+                case experimental_utils_1.AST_NODE_TYPES.TSTypeParameterDeclaration:
+                    return last(node.params);
+                case experimental_utils_1.AST_NODE_TYPES.TSTupleType:
+                    return last(node.elementTypes);
+                default:
+                    return null;
+            }
+        }
+        function getTrailingToken(node) {
+            const last = getLastItem(node);
+            const trailing = last && sourceCode.getTokenAfter(last);
+            return trailing;
+        }
+        function isMultiline(node) {
+            const last = getLastItem(node);
+            const lastToken = sourceCode.getLastToken(node);
+            return (last === null || last === void 0 ? void 0 : last.loc.end.line) !== (lastToken === null || lastToken === void 0 ? void 0 : lastToken.loc.end.line);
+        }
+        function forbidComma(node) {
+            const last = getLastItem(node);
+            const trailing = getTrailingToken(node);
+            if (last && trailing && util.isCommaToken(trailing)) {
+                context.report({
+                    node,
+                    messageId: 'unexpected',
+                    fix(fixer) {
+                        return fixer.remove(trailing);
+                    },
+                });
+            }
+        }
+        function forceComma(node) {
+            const last = getLastItem(node);
+            const trailing = getTrailingToken(node);
+            if (last && trailing && !util.isCommaToken(trailing)) {
+                context.report({
+                    node,
+                    messageId: 'missing',
+                    fix(fixer) {
+                        return fixer.insertTextAfter(last, ',');
+                    },
+                });
+            }
+        }
+        function allowCommaIfMultiline(node) {
+            if (!isMultiline(node)) {
+                forbidComma(node);
+            }
+        }
+        function forceCommaIfMultiline(node) {
+            if (isMultiline(node)) {
+                forceComma(node);
+            }
+            else {
+                forbidComma(node);
+            }
+        }
+        return Object.assign(Object.assign({}, rules), { TSEnumDeclaration: predicate[normalizedOptions.enums], TSTypeParameterDeclaration: predicate[normalizedOptions.generics], TSTupleType: predicate[normalizedOptions.tuples] });
+    },
+});
+//# sourceMappingURL=comma-dangle.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-dangle.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-dangle.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..d9f1400c5fc965cf6cddba8d028cb86175cabcdc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-dangle.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"comma-dangle.js","sourceRoot":"","sources":["../../src/rules/comma-dangle.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-spacing.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..6e2c440666617b1e0c8999433f1142da839d1b9a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-spacing.js
@@ -0,0 +1,141 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util_1 = require("../util");
+exports.default = util_1.createRule({
+    name: 'comma-spacing',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Enforces consistent spacing before and after commas',
+            category: 'Stylistic Issues',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        fixable: 'whitespace',
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    before: {
+                        type: 'boolean',
+                        default: false,
+                    },
+                    after: {
+                        type: 'boolean',
+                        default: true,
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+        messages: {
+            unexpected: `There should be no space {{loc}} ','.`,
+            missing: `A space is required {{loc}} ','.`,
+        },
+    },
+    defaultOptions: [
+        {
+            before: false,
+            after: true,
+        },
+    ],
+    create(context, [{ before: spaceBefore, after: spaceAfter }]) {
+        const sourceCode = context.getSourceCode();
+        const tokensAndComments = sourceCode.tokensAndComments;
+        const ignoredTokens = new Set();
+        /**
+         * Adds null elements of the ArrayExpression or ArrayPattern node to the ignore list
+         * @param node node to evaluate
+         */
+        function addNullElementsToIgnoreList(node) {
+            let previousToken = sourceCode.getFirstToken(node);
+            for (const element of node.elements) {
+                let token;
+                if (element === null) {
+                    token = sourceCode.getTokenAfter(previousToken);
+                    if (token && util_1.isCommaToken(token)) {
+                        ignoredTokens.add(token);
+                    }
+                }
+                else {
+                    token = sourceCode.getTokenAfter(element);
+                }
+                previousToken = token;
+            }
+        }
+        /**
+         * Adds type parameters trailing comma token to the ignore list
+         * @param node node to evaluate
+         */
+        function addTypeParametersTrailingCommaToIgnoreList(node) {
+            const param = node.params[node.params.length - 1];
+            const afterToken = sourceCode.getTokenAfter(param);
+            if (afterToken && util_1.isCommaToken(afterToken)) {
+                ignoredTokens.add(afterToken);
+            }
+        }
+        /**
+         * Validates the spacing around a comma token.
+         * @param commaToken The token representing the comma
+         * @param prevToken The last token before the comma
+         * @param nextToken The first token after the comma
+         */
+        function validateCommaSpacing(commaToken, prevToken, nextToken) {
+            if (prevToken &&
+                util_1.isTokenOnSameLine(prevToken, commaToken) &&
+                spaceBefore !== sourceCode.isSpaceBetweenTokens(prevToken, commaToken)) {
+                context.report({
+                    node: commaToken,
+                    data: {
+                        loc: 'before',
+                    },
+                    messageId: spaceBefore ? 'missing' : 'unexpected',
+                    fix: fixer => spaceBefore
+                        ? fixer.insertTextBefore(commaToken, ' ')
+                        : fixer.replaceTextRange([prevToken.range[1], commaToken.range[0]], ''),
+                });
+            }
+            if (nextToken && util_1.isClosingParenToken(nextToken)) {
+                return;
+            }
+            if (!spaceAfter && nextToken && nextToken.type === experimental_utils_1.AST_TOKEN_TYPES.Line) {
+                return;
+            }
+            if (nextToken &&
+                util_1.isTokenOnSameLine(commaToken, nextToken) &&
+                spaceAfter !== sourceCode.isSpaceBetweenTokens(commaToken, nextToken)) {
+                context.report({
+                    node: commaToken,
+                    data: {
+                        loc: 'after',
+                    },
+                    messageId: spaceAfter ? 'missing' : 'unexpected',
+                    fix: fixer => spaceAfter
+                        ? fixer.insertTextAfter(commaToken, ' ')
+                        : fixer.replaceTextRange([commaToken.range[1], nextToken.range[0]], ''),
+                });
+            }
+        }
+        return {
+            TSTypeParameterDeclaration: addTypeParametersTrailingCommaToIgnoreList,
+            ArrayExpression: addNullElementsToIgnoreList,
+            ArrayPattern: addNullElementsToIgnoreList,
+            'Program:exit'() {
+                tokensAndComments.forEach((token, i) => {
+                    if (!util_1.isCommaToken(token)) {
+                        return;
+                    }
+                    const prevToken = tokensAndComments[i - 1];
+                    const nextToken = tokensAndComments[i + 1];
+                    validateCommaSpacing(token, util_1.isCommaToken(prevToken) || ignoredTokens.has(token)
+                        ? null
+                        : prevToken, util_1.isCommaToken(nextToken) || ignoredTokens.has(token)
+                        ? null
+                        : nextToken);
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=comma-spacing.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-spacing.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-spacing.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..9ddd17a655073765612d2fae92599ef7d90d9971
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-spacing.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"comma-spacing.js","sourceRoot":"","sources":["../../src/rules/comma-spacing.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-indexed-object-style.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-indexed-object-style.js
new file mode 100644
index 0000000000000000000000000000000000000000..b662ed3011e71ec6b03070df3ef318a8c97dd630
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-indexed-object-style.js
@@ -0,0 +1,107 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const util_1 = require("../util");
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+exports.default = util_1.createRule({
+    name: 'consistent-indexed-object-style',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Enforce or disallow the use of the record type',
+            category: 'Stylistic Issues',
+            // too opinionated to be recommended
+            recommended: false,
+        },
+        messages: {
+            preferRecord: 'A record is preferred over an index signature',
+            preferIndexSignature: 'An index signature is preferred over a record.',
+        },
+        fixable: 'code',
+        schema: [
+            {
+                enum: ['record', 'index-signature'],
+            },
+        ],
+    },
+    defaultOptions: ['record'],
+    create(context) {
+        const sourceCode = context.getSourceCode();
+        if (context.options[0] === 'index-signature') {
+            return {
+                TSTypeReference(node) {
+                    var _a;
+                    const typeName = node.typeName;
+                    if (typeName.type !== experimental_utils_1.AST_NODE_TYPES.Identifier) {
+                        return;
+                    }
+                    if (typeName.name !== 'Record') {
+                        return;
+                    }
+                    const params = (_a = node.typeParameters) === null || _a === void 0 ? void 0 : _a.params;
+                    if ((params === null || params === void 0 ? void 0 : params.length) !== 2) {
+                        return;
+                    }
+                    context.report({
+                        node,
+                        messageId: 'preferIndexSignature',
+                        fix(fixer) {
+                            const key = sourceCode.getText(params[0]);
+                            const type = sourceCode.getText(params[1]);
+                            return fixer.replaceText(node, `{ [key: ${key}]: ${type} }`);
+                        },
+                    });
+                },
+            };
+        }
+        function checkMembers(members, node, prefix, postfix) {
+            if (members.length !== 1) {
+                return;
+            }
+            const [member] = members;
+            if (member.type !== experimental_utils_1.AST_NODE_TYPES.TSIndexSignature) {
+                return;
+            }
+            const [parameter] = member.parameters;
+            if (!parameter) {
+                return;
+            }
+            if (parameter.type !== experimental_utils_1.AST_NODE_TYPES.Identifier) {
+                return;
+            }
+            const keyType = parameter.typeAnnotation;
+            if (!keyType) {
+                return;
+            }
+            const valueType = member.typeAnnotation;
+            if (!valueType) {
+                return;
+            }
+            context.report({
+                node,
+                messageId: 'preferRecord',
+                fix(fixer) {
+                    const key = sourceCode.getText(keyType.typeAnnotation);
+                    const value = sourceCode.getText(valueType.typeAnnotation);
+                    const record = member.readonly
+                        ? `Readonly<Record<${key}, ${value}>>`
+                        : `Record<${key}, ${value}>`;
+                    return fixer.replaceText(node, `${prefix}${record}${postfix}`);
+                },
+            });
+        }
+        return {
+            TSTypeLiteral(node) {
+                checkMembers(node.members, node, '', '');
+            },
+            TSInterfaceDeclaration(node) {
+                var _a, _b, _c;
+                let genericTypes = '';
+                if (((_b = (_a = node.typeParameters) === null || _a === void 0 ? void 0 : _a.params) !== null && _b !== void 0 ? _b : []).length > 0) {
+                    genericTypes = `<${(_c = node.typeParameters) === null || _c === void 0 ? void 0 : _c.params.map(p => p.name.name).join(', ')}>`;
+                }
+                checkMembers(node.body.body, node, `type ${node.id.name}${genericTypes} = `, ';');
+            },
+        };
+    },
+});
+//# sourceMappingURL=consistent-indexed-object-style.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-indexed-object-style.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-indexed-object-style.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..4173f08434759add8250f083c4c8685670f12e95
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-indexed-object-style.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"consistent-indexed-object-style.js","sourceRoot":"","sources":["../../src/rules/consistent-indexed-object-style.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-assertions.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-assertions.js
new file mode 100644
index 0000000000000000000000000000000000000000..da4eb4aa3117a46794668b6c6269ec8978e59f47
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-assertions.js
@@ -0,0 +1,154 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const util = __importStar(require("../util"));
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+exports.default = util.createRule({
+    name: 'consistent-type-assertions',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            category: 'Best Practices',
+            description: 'Enforces consistent usage of type assertions',
+            recommended: false,
+        },
+        messages: {
+            as: "Use 'as {{cast}}' instead of '<{{cast}}>'.",
+            'angle-bracket': "Use '<{{cast}}>' instead of 'as {{cast}}'.",
+            never: 'Do not use any type assertions.',
+            unexpectedObjectTypeAssertion: 'Always prefer const x: T = { ... }.',
+        },
+        schema: [
+            {
+                oneOf: [
+                    {
+                        type: 'object',
+                        properties: {
+                            assertionStyle: {
+                                enum: ['never'],
+                            },
+                        },
+                        additionalProperties: false,
+                        required: ['assertionStyle'],
+                    },
+                    {
+                        type: 'object',
+                        properties: {
+                            assertionStyle: {
+                                enum: ['as', 'angle-bracket'],
+                            },
+                            objectLiteralTypeAssertions: {
+                                enum: ['allow', 'allow-as-parameter', 'never'],
+                            },
+                        },
+                        additionalProperties: false,
+                        required: ['assertionStyle'],
+                    },
+                ],
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            assertionStyle: 'as',
+            objectLiteralTypeAssertions: 'allow',
+        },
+    ],
+    create(context, [options]) {
+        const sourceCode = context.getSourceCode();
+        function isConst(node) {
+            if (node.type !== experimental_utils_1.AST_NODE_TYPES.TSTypeReference) {
+                return false;
+            }
+            return (node.typeName.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                node.typeName.name === 'const');
+        }
+        function reportIncorrectAssertionType(node) {
+            // If this node is `as const`, then don't report an error.
+            if (isConst(node.typeAnnotation)) {
+                return;
+            }
+            const messageId = options.assertionStyle;
+            context.report({
+                node,
+                messageId,
+                data: messageId !== 'never'
+                    ? { cast: sourceCode.getText(node.typeAnnotation) }
+                    : {},
+            });
+        }
+        function checkType(node) {
+            switch (node.type) {
+                case experimental_utils_1.AST_NODE_TYPES.TSAnyKeyword:
+                case experimental_utils_1.AST_NODE_TYPES.TSUnknownKeyword:
+                    return false;
+                case experimental_utils_1.AST_NODE_TYPES.TSTypeReference:
+                    return (
+                    // Ignore `as const` and `<const>`
+                    !isConst(node) ||
+                        // Allow qualified names which have dots between identifiers, `Foo.Bar`
+                        node.typeName.type === experimental_utils_1.AST_NODE_TYPES.TSQualifiedName);
+                default:
+                    return true;
+            }
+        }
+        function checkExpression(node) {
+            if (options.assertionStyle === 'never' ||
+                options.objectLiteralTypeAssertions === 'allow' ||
+                node.expression.type !== experimental_utils_1.AST_NODE_TYPES.ObjectExpression) {
+                return;
+            }
+            if (options.objectLiteralTypeAssertions === 'allow-as-parameter' &&
+                node.parent &&
+                (node.parent.type === experimental_utils_1.AST_NODE_TYPES.NewExpression ||
+                    node.parent.type === experimental_utils_1.AST_NODE_TYPES.CallExpression ||
+                    node.parent.type === experimental_utils_1.AST_NODE_TYPES.ThrowStatement ||
+                    node.parent.type === experimental_utils_1.AST_NODE_TYPES.AssignmentPattern ||
+                    node.parent.type === experimental_utils_1.AST_NODE_TYPES.JSXExpressionContainer)) {
+                return;
+            }
+            if (checkType(node.typeAnnotation) &&
+                node.expression.type === experimental_utils_1.AST_NODE_TYPES.ObjectExpression) {
+                context.report({
+                    node,
+                    messageId: 'unexpectedObjectTypeAssertion',
+                });
+            }
+        }
+        return {
+            TSTypeAssertion(node) {
+                if (options.assertionStyle !== 'angle-bracket') {
+                    reportIncorrectAssertionType(node);
+                    return;
+                }
+                checkExpression(node);
+            },
+            TSAsExpression(node) {
+                if (options.assertionStyle !== 'as') {
+                    reportIncorrectAssertionType(node);
+                    return;
+                }
+                checkExpression(node);
+            },
+        };
+    },
+});
+//# sourceMappingURL=consistent-type-assertions.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-assertions.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-assertions.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..79a302dcb6539084e055772b258abc8b97508725
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-assertions.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"consistent-type-assertions.js","sourceRoot":"","sources":["../../src/rules/consistent-type-assertions.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-definitions.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-definitions.js
new file mode 100644
index 0000000000000000000000000000000000000000..36a08f091bc23274671436d5e5d4f0ecfa2d42a4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-definitions.js
@@ -0,0 +1,119 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'consistent-type-definitions',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Consistent with type definition either `interface` or `type`',
+            category: 'Stylistic Issues',
+            // too opinionated to be recommended
+            recommended: false,
+        },
+        messages: {
+            interfaceOverType: 'Use an `interface` instead of a `type`.',
+            typeOverInterface: 'Use a `type` instead of an `interface`.',
+        },
+        schema: [
+            {
+                enum: ['interface', 'type'],
+            },
+        ],
+        fixable: 'code',
+    },
+    defaultOptions: ['interface'],
+    create(context, [option]) {
+        const sourceCode = context.getSourceCode();
+        /**
+         * Iterates from the highest parent to the currently traversed node
+         * to determine whether any node in tree is globally declared module declaration
+         */
+        function isCurrentlyTraversedNodeWithinModuleDeclaration() {
+            return context
+                .getAncestors()
+                .some(node => node.type === experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration &&
+                node.declare &&
+                node.global);
+        }
+        return {
+            "TSTypeAliasDeclaration[typeAnnotation.type='TSTypeLiteral']"(node) {
+                if (option === 'interface') {
+                    context.report({
+                        node: node.id,
+                        messageId: 'interfaceOverType',
+                        fix(fixer) {
+                            var _a;
+                            const typeNode = (_a = node.typeParameters) !== null && _a !== void 0 ? _a : node.id;
+                            const fixes = [];
+                            const firstToken = sourceCode.getFirstToken(node);
+                            if (firstToken) {
+                                fixes.push(fixer.replaceText(firstToken, 'interface'));
+                                fixes.push(fixer.replaceTextRange([typeNode.range[1], node.typeAnnotation.range[0]], ' '));
+                            }
+                            const afterToken = sourceCode.getTokenAfter(node.typeAnnotation);
+                            if (afterToken &&
+                                afterToken.type === experimental_utils_1.AST_TOKEN_TYPES.Punctuator &&
+                                afterToken.value === ';') {
+                                fixes.push(fixer.remove(afterToken));
+                            }
+                            return fixes;
+                        },
+                    });
+                }
+            },
+            TSInterfaceDeclaration(node) {
+                if (option === 'type') {
+                    context.report({
+                        node: node.id,
+                        messageId: 'typeOverInterface',
+                        /**
+                         * remove automatically fix when the interface is within a declare global
+                         * @see {@link https://github.com/typescript-eslint/typescript-eslint/issues/2707}
+                         */
+                        fix: isCurrentlyTraversedNodeWithinModuleDeclaration()
+                            ? null
+                            : (fixer) => {
+                                var _a;
+                                const typeNode = (_a = node.typeParameters) !== null && _a !== void 0 ? _a : node.id;
+                                const fixes = [];
+                                const firstToken = sourceCode.getFirstToken(node);
+                                if (firstToken) {
+                                    fixes.push(fixer.replaceText(firstToken, 'type'));
+                                    fixes.push(fixer.replaceTextRange([typeNode.range[1], node.body.range[0]], ' = '));
+                                }
+                                if (node.extends) {
+                                    node.extends.forEach(heritage => {
+                                        const typeIdentifier = sourceCode.getText(heritage);
+                                        fixes.push(fixer.insertTextAfter(node.body, ` & ${typeIdentifier}`));
+                                    });
+                                }
+                                return fixes;
+                            },
+                    });
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=consistent-type-definitions.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-definitions.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-definitions.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..4a5ee39385f04c9f9cd828d7b6154c4b27579a80
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-definitions.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"consistent-type-definitions.js","sourceRoot":"","sources":["../../src/rules/consistent-type-definitions.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-imports.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..15d365d350eb32500293d3dee27c7b31bf706bdb
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-imports.js
@@ -0,0 +1,425 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+function isImportToken(token) {
+    return token.type === experimental_utils_1.AST_TOKEN_TYPES.Keyword && token.value === 'import';
+}
+function isTypeToken(token) {
+    return token.type === experimental_utils_1.AST_TOKEN_TYPES.Identifier && token.value === 'type';
+}
+exports.default = util.createRule({
+    name: 'consistent-type-imports',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Enforces consistent usage of type imports',
+            category: 'Stylistic Issues',
+            recommended: false,
+        },
+        messages: {
+            typeOverValue: 'All imports in the declaration are only used as types. Use `import type`',
+            someImportsAreOnlyTypes: 'Imports {{typeImports}} are only used as types',
+            aImportIsOnlyTypes: 'Import {{typeImports}} is only used as types',
+            valueOverType: 'Use an `import` instead of an `import type`.',
+            noImportTypeAnnotations: '`import()` type annotations are forbidden.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    prefer: {
+                        enum: ['type-imports', 'no-type-imports'],
+                    },
+                    disallowTypeAnnotations: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+        fixable: 'code',
+    },
+    defaultOptions: [
+        {
+            prefer: 'type-imports',
+            disallowTypeAnnotations: true,
+        },
+    ],
+    create(context, [option]) {
+        var _a;
+        const prefer = (_a = option.prefer) !== null && _a !== void 0 ? _a : 'type-imports';
+        const disallowTypeAnnotations = option.disallowTypeAnnotations !== false;
+        const sourceCode = context.getSourceCode();
+        const sourceImportsMap = {};
+        return Object.assign(Object.assign({}, (prefer === 'type-imports'
+            ? {
+                // prefer type imports
+                ImportDeclaration(node) {
+                    var _a;
+                    const source = node.source.value;
+                    const sourceImports = (_a = sourceImportsMap[source]) !== null && _a !== void 0 ? _a : (sourceImportsMap[source] = {
+                        source,
+                        reportValueImports: [],
+                        typeOnlyNamedImport: null,
+                    });
+                    if (node.importKind === 'type') {
+                        if (!sourceImports.typeOnlyNamedImport &&
+                            node.specifiers.every(specifier => specifier.type === experimental_utils_1.AST_NODE_TYPES.ImportSpecifier)) {
+                            sourceImports.typeOnlyNamedImport = node;
+                        }
+                        return;
+                    }
+                    // if importKind === 'value'
+                    const typeSpecifiers = [];
+                    const valueSpecifiers = [];
+                    const unusedSpecifiers = [];
+                    for (const specifier of node.specifiers) {
+                        const [variable] = context.getDeclaredVariables(specifier);
+                        if (variable.references.length === 0) {
+                            unusedSpecifiers.push(specifier);
+                        }
+                        else {
+                            const onlyHasTypeReferences = variable.references.every(ref => {
+                                if (ref.isValueReference) {
+                                    // `type T = typeof foo` will create a value reference because "foo" must be a value type
+                                    // however this value reference is safe to use with type-only imports
+                                    let parent = ref.identifier.parent;
+                                    while (parent) {
+                                        if (parent.type === experimental_utils_1.AST_NODE_TYPES.TSTypeQuery) {
+                                            return true;
+                                        }
+                                        // TSTypeQuery must have a TSESTree.EntityName as its child, so we can filter here and break early
+                                        if (parent.type !== experimental_utils_1.AST_NODE_TYPES.TSQualifiedName) {
+                                            break;
+                                        }
+                                        parent = parent.parent;
+                                    }
+                                    return false;
+                                }
+                                return ref.isTypeReference;
+                            });
+                            if (onlyHasTypeReferences) {
+                                typeSpecifiers.push(specifier);
+                            }
+                            else {
+                                valueSpecifiers.push(specifier);
+                            }
+                        }
+                    }
+                    if (typeSpecifiers.length) {
+                        sourceImports.reportValueImports.push({
+                            node,
+                            typeSpecifiers,
+                            valueSpecifiers,
+                            unusedSpecifiers,
+                        });
+                    }
+                },
+                'Program:exit'() {
+                    for (const sourceImports of Object.values(sourceImportsMap)) {
+                        if (sourceImports.reportValueImports.length === 0) {
+                            continue;
+                        }
+                        for (const report of sourceImports.reportValueImports) {
+                            if (report.valueSpecifiers.length === 0 &&
+                                report.unusedSpecifiers.length === 0) {
+                                // import is all type-only, convert the entire import to `import type`
+                                context.report({
+                                    node: report.node,
+                                    messageId: 'typeOverValue',
+                                    *fix(fixer) {
+                                        yield* fixToTypeImport(fixer, report, sourceImports);
+                                    },
+                                });
+                            }
+                            else {
+                                // we have a mixed type/value import, so we need to split them out into multiple exports
+                                const typeImportNames = report.typeSpecifiers.map(specifier => `"${specifier.local.name}"`);
+                                context.report({
+                                    node: report.node,
+                                    messageId: typeImportNames.length === 1
+                                        ? 'aImportIsOnlyTypes'
+                                        : 'someImportsAreOnlyTypes',
+                                    data: {
+                                        typeImports: typeImportNames.length === 1
+                                            ? typeImportNames[0]
+                                            : [
+                                                typeImportNames.slice(0, -1).join(', '),
+                                                typeImportNames.slice(-1)[0],
+                                            ].join(' and '),
+                                    },
+                                    *fix(fixer) {
+                                        yield* fixToTypeImport(fixer, report, sourceImports);
+                                    },
+                                });
+                            }
+                        }
+                    }
+                },
+            }
+            : {
+                // prefer no type imports
+                'ImportDeclaration[importKind = "type"]'(node) {
+                    context.report({
+                        node,
+                        messageId: 'valueOverType',
+                        fix(fixer) {
+                            return fixToValueImport(fixer, node);
+                        },
+                    });
+                },
+            })), (disallowTypeAnnotations
+            ? {
+                // disallow `import()` type
+                TSImportType(node) {
+                    context.report({
+                        node,
+                        messageId: 'noImportTypeAnnotations',
+                    });
+                },
+            }
+            : {}));
+        function* fixToTypeImport(fixer, report, sourceImports) {
+            var _a;
+            const { node } = report;
+            const defaultSpecifier = node.specifiers[0].type === experimental_utils_1.AST_NODE_TYPES.ImportDefaultSpecifier
+                ? node.specifiers[0]
+                : null;
+            const namespaceSpecifier = (_a = node.specifiers.find((specifier) => specifier.type === experimental_utils_1.AST_NODE_TYPES.ImportNamespaceSpecifier)) !== null && _a !== void 0 ? _a : null;
+            const namedSpecifiers = node.specifiers.filter((specifier) => specifier.type === experimental_utils_1.AST_NODE_TYPES.ImportSpecifier);
+            if (namespaceSpecifier && !defaultSpecifier) {
+                // e.g.
+                // import * as types from 'foo'
+                yield* fixToTypeImportByInsertType(fixer, node, false);
+                return;
+            }
+            else if (defaultSpecifier) {
+                if (report.typeSpecifiers.includes(defaultSpecifier) &&
+                    namedSpecifiers.length === 0 &&
+                    !namespaceSpecifier) {
+                    // e.g.
+                    // import Type from 'foo'
+                    yield* fixToTypeImportByInsertType(fixer, node, true);
+                    return;
+                }
+            }
+            else {
+                if (namedSpecifiers.every(specifier => report.typeSpecifiers.includes(specifier)) &&
+                    !namespaceSpecifier) {
+                    // e.g.
+                    // import {Type1, Type2} from 'foo'
+                    yield* fixToTypeImportByInsertType(fixer, node, false);
+                    return;
+                }
+            }
+            const typeNamedSpecifiers = namedSpecifiers.filter(specifier => report.typeSpecifiers.includes(specifier));
+            const fixesNamedSpecifiers = getFixesNamedSpecifiers(typeNamedSpecifiers, namedSpecifiers);
+            const afterFixes = [];
+            if (typeNamedSpecifiers.length) {
+                if (sourceImports.typeOnlyNamedImport) {
+                    const closingBraceToken = util.nullThrows(sourceCode.getFirstTokenBetween(sourceCode.getFirstToken(sourceImports.typeOnlyNamedImport), sourceImports.typeOnlyNamedImport.source, util.isClosingBraceToken), util.NullThrowsReasons.MissingToken('}', sourceImports.typeOnlyNamedImport.type));
+                    let insertText = fixesNamedSpecifiers.typeNamedSpecifiersText;
+                    const before = sourceCode.getTokenBefore(closingBraceToken);
+                    if (!util.isCommaToken(before) && !util.isOpeningBraceToken(before)) {
+                        insertText = ',' + insertText;
+                    }
+                    // import type { Already, Type1, Type2 } from 'foo'
+                    //                       ^^^^^^^^^^^^^ insert
+                    const insertTypeNamedSpecifiers = fixer.insertTextBefore(closingBraceToken, insertText);
+                    if (sourceImports.typeOnlyNamedImport.range[1] <= node.range[0]) {
+                        yield insertTypeNamedSpecifiers;
+                    }
+                    else {
+                        afterFixes.push(insertTypeNamedSpecifiers);
+                    }
+                }
+                else {
+                    yield fixer.insertTextBefore(node, `import type {${fixesNamedSpecifiers.typeNamedSpecifiersText}} from ${sourceCode.getText(node.source)};\n`);
+                }
+            }
+            const fixesRemoveTypeNamespaceSpecifier = [];
+            if (namespaceSpecifier &&
+                report.typeSpecifiers.includes(namespaceSpecifier)) {
+                // e.g.
+                // import Foo, * as Type from 'foo'
+                // import DefType, * as Type from 'foo'
+                // import DefType, * as Type from 'foo'
+                const commaToken = util.nullThrows(sourceCode.getTokenBefore(namespaceSpecifier, util.isCommaToken), util.NullThrowsReasons.MissingToken(',', node.type));
+                // import Def, * as Ns from 'foo'
+                //           ^^^^^^^^^ remove
+                fixesRemoveTypeNamespaceSpecifier.push(fixer.removeRange([commaToken.range[0], namespaceSpecifier.range[1]]));
+                // import type * as Ns from 'foo'
+                // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ insert
+                yield fixer.insertTextBefore(node, `import type ${sourceCode.getText(namespaceSpecifier)} from ${sourceCode.getText(node.source)};\n`);
+            }
+            if (defaultSpecifier &&
+                report.typeSpecifiers.includes(defaultSpecifier)) {
+                if (report.typeSpecifiers.length === node.specifiers.length) {
+                    const importToken = util.nullThrows(sourceCode.getFirstToken(node, isImportToken), util.NullThrowsReasons.MissingToken('import', node.type));
+                    // import type Type from 'foo'
+                    //        ^^^^ insert
+                    yield fixer.insertTextAfter(importToken, ' type');
+                }
+                else {
+                    const commaToken = util.nullThrows(sourceCode.getTokenAfter(defaultSpecifier, util.isCommaToken), util.NullThrowsReasons.MissingToken(',', defaultSpecifier.type));
+                    // import Type , {...} from 'foo'
+                    //        ^^^^^ pick
+                    const defaultText = sourceCode.text
+                        .slice(defaultSpecifier.range[0], commaToken.range[0])
+                        .trim();
+                    yield fixer.insertTextBefore(node, `import type ${defaultText} from ${sourceCode.getText(node.source)};\n`);
+                    const afterToken = util.nullThrows(sourceCode.getTokenAfter(commaToken, { includeComments: true }), util.NullThrowsReasons.MissingToken('any token', node.type));
+                    // import Type , {...} from 'foo'
+                    //        ^^^^^^^ remove
+                    yield fixer.removeRange([
+                        defaultSpecifier.range[0],
+                        afterToken.range[0],
+                    ]);
+                }
+            }
+            yield* fixesNamedSpecifiers.removeTypeNamedSpecifiers;
+            yield* fixesRemoveTypeNamespaceSpecifier;
+            yield* afterFixes;
+            /**
+             * Returns information for fixing named specifiers.
+             */
+            function getFixesNamedSpecifiers(typeNamedSpecifiers, allNamedSpecifiers) {
+                if (allNamedSpecifiers.length === 0) {
+                    return {
+                        typeNamedSpecifiersText: '',
+                        removeTypeNamedSpecifiers: [],
+                    };
+                }
+                const typeNamedSpecifiersTexts = [];
+                const removeTypeNamedSpecifiers = [];
+                if (typeNamedSpecifiers.length === allNamedSpecifiers.length) {
+                    // e.g.
+                    // import Foo, {Type1, Type2} from 'foo'
+                    // import DefType, {Type1, Type2} from 'foo'
+                    const openingBraceToken = util.nullThrows(sourceCode.getTokenBefore(typeNamedSpecifiers[0], util.isOpeningBraceToken), util.NullThrowsReasons.MissingToken('{', node.type));
+                    const commaToken = util.nullThrows(sourceCode.getTokenBefore(openingBraceToken, util.isCommaToken), util.NullThrowsReasons.MissingToken(',', node.type));
+                    const closingBraceToken = util.nullThrows(sourceCode.getFirstTokenBetween(openingBraceToken, node.source, util.isClosingBraceToken), util.NullThrowsReasons.MissingToken('}', node.type));
+                    // import DefType, {...} from 'foo'
+                    //               ^^^^^^^ remove
+                    removeTypeNamedSpecifiers.push(fixer.removeRange([
+                        commaToken.range[0],
+                        closingBraceToken.range[1],
+                    ]));
+                    typeNamedSpecifiersTexts.push(sourceCode.text.slice(openingBraceToken.range[1], closingBraceToken.range[0]));
+                }
+                else {
+                    const typeNamedSpecifierGroups = [];
+                    let group = [];
+                    for (const namedSpecifier of allNamedSpecifiers) {
+                        if (typeNamedSpecifiers.includes(namedSpecifier)) {
+                            group.push(namedSpecifier);
+                        }
+                        else if (group.length) {
+                            typeNamedSpecifierGroups.push(group);
+                            group = [];
+                        }
+                    }
+                    if (group.length) {
+                        typeNamedSpecifierGroups.push(group);
+                    }
+                    for (const namedSpecifiers of typeNamedSpecifierGroups) {
+                        const { removeRange, textRange } = getNamedSpecifierRanges(namedSpecifiers, allNamedSpecifiers);
+                        removeTypeNamedSpecifiers.push(fixer.removeRange(removeRange));
+                        typeNamedSpecifiersTexts.push(sourceCode.text.slice(...textRange));
+                    }
+                }
+                return {
+                    typeNamedSpecifiersText: typeNamedSpecifiersTexts.join(','),
+                    removeTypeNamedSpecifiers,
+                };
+            }
+            /**
+             * Returns ranges for fixing named specifier.
+             */
+            function getNamedSpecifierRanges(namedSpecifierGroup, allNamedSpecifiers) {
+                const first = namedSpecifierGroup[0];
+                const last = namedSpecifierGroup[namedSpecifierGroup.length - 1];
+                const removeRange = [first.range[0], last.range[1]];
+                const textRange = [...removeRange];
+                const before = sourceCode.getTokenBefore(first);
+                textRange[0] = before.range[1];
+                if (util.isCommaToken(before)) {
+                    removeRange[0] = before.range[0];
+                }
+                else {
+                    removeRange[0] = before.range[1];
+                }
+                const isFirst = allNamedSpecifiers[0] === first;
+                const isLast = allNamedSpecifiers[allNamedSpecifiers.length - 1] === last;
+                const after = sourceCode.getTokenAfter(last);
+                textRange[1] = after.range[0];
+                if (isFirst || isLast) {
+                    if (util.isCommaToken(after)) {
+                        removeRange[1] = after.range[1];
+                    }
+                }
+                return {
+                    textRange,
+                    removeRange,
+                };
+            }
+        }
+        function* fixToTypeImportByInsertType(fixer, node, isDefaultImport) {
+            // import type Foo from 'foo'
+            //       ^^^^^ insert
+            const importToken = util.nullThrows(sourceCode.getFirstToken(node, isImportToken), util.NullThrowsReasons.MissingToken('import', node.type));
+            yield fixer.insertTextAfter(importToken, ' type');
+            if (isDefaultImport) {
+                // Has default import
+                const openingBraceToken = sourceCode.getFirstTokenBetween(importToken, node.source, util.isOpeningBraceToken);
+                if (openingBraceToken) {
+                    // Only braces. e.g. import Foo, {} from 'foo'
+                    const commaToken = util.nullThrows(sourceCode.getTokenBefore(openingBraceToken, util.isCommaToken), util.NullThrowsReasons.MissingToken(',', node.type));
+                    const closingBraceToken = util.nullThrows(sourceCode.getFirstTokenBetween(openingBraceToken, node.source, util.isClosingBraceToken), util.NullThrowsReasons.MissingToken('}', node.type));
+                    // import type Foo, {} from 'foo'
+                    //                  ^^ remove
+                    yield fixer.removeRange([
+                        commaToken.range[0],
+                        closingBraceToken.range[1],
+                    ]);
+                    const specifiersText = sourceCode.text.slice(commaToken.range[1], closingBraceToken.range[1]);
+                    if (node.specifiers.length > 1) {
+                        // import type Foo from 'foo'
+                        // import type {...} from 'foo' // <- insert
+                        yield fixer.insertTextAfter(node, `\nimport type${specifiersText} from ${sourceCode.getText(node.source)};`);
+                    }
+                }
+            }
+        }
+        function fixToValueImport(fixer, node) {
+            var _a, _b;
+            // import type Foo from 'foo'
+            //        ^^^^ remove
+            const importToken = util.nullThrows(sourceCode.getFirstToken(node, isImportToken), util.NullThrowsReasons.MissingToken('import', node.type));
+            const typeToken = util.nullThrows(sourceCode.getFirstTokenBetween(importToken, (_b = (_a = node.specifiers[0]) === null || _a === void 0 ? void 0 : _a.local) !== null && _b !== void 0 ? _b : node.source, isTypeToken), util.NullThrowsReasons.MissingToken('type', node.type));
+            const afterToken = util.nullThrows(sourceCode.getTokenAfter(typeToken, { includeComments: true }), util.NullThrowsReasons.MissingToken('any token', node.type));
+            return fixer.removeRange([typeToken.range[0], afterToken.range[0]]);
+        }
+    },
+});
+//# sourceMappingURL=consistent-type-imports.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-imports.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-imports.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..d22b4308df489efe70cf2845eb7eaa998b846666
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-imports.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"consistent-type-imports.js","sourceRoot":"","sources":["../../src/rules/consistent-type-imports.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/default-param-last.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/default-param-last.js
new file mode 100644
index 0000000000000000000000000000000000000000..95769d056d127305d72275f578775693a42211ed
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/default-param-last.js
@@ -0,0 +1,65 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const util_1 = require("../util");
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+exports.default = util_1.createRule({
+    name: 'default-param-last',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Enforce default parameters to be last',
+            category: 'Best Practices',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        schema: [],
+        messages: {
+            shouldBeLast: 'Default parameters should be last.',
+        },
+    },
+    defaultOptions: [],
+    create(context) {
+        /**
+         * checks if node is optional parameter
+         * @param node the node to be evaluated
+         * @private
+         */
+        function isOptionalParam(node) {
+            return 'optional' in node && node.optional === true;
+        }
+        /**
+         * checks if node is plain parameter
+         * @param node the node to be evaluated
+         * @private
+         */
+        function isPlainParam(node) {
+            return !(node.type === experimental_utils_1.AST_NODE_TYPES.AssignmentPattern ||
+                node.type === experimental_utils_1.AST_NODE_TYPES.RestElement ||
+                isOptionalParam(node));
+        }
+        function checkDefaultParamLast(node) {
+            let hasSeenPlainParam = false;
+            for (let i = node.params.length - 1; i >= 0; i--) {
+                const current = node.params[i];
+                const param = current.type === experimental_utils_1.AST_NODE_TYPES.TSParameterProperty
+                    ? current.parameter
+                    : current;
+                if (isPlainParam(param)) {
+                    hasSeenPlainParam = true;
+                    continue;
+                }
+                if (hasSeenPlainParam &&
+                    (isOptionalParam(param) ||
+                        param.type === experimental_utils_1.AST_NODE_TYPES.AssignmentPattern)) {
+                    context.report({ node: current, messageId: 'shouldBeLast' });
+                }
+            }
+        }
+        return {
+            ArrowFunctionExpression: checkDefaultParamLast,
+            FunctionDeclaration: checkDefaultParamLast,
+            FunctionExpression: checkDefaultParamLast,
+        };
+    },
+});
+//# sourceMappingURL=default-param-last.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/default-param-last.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/default-param-last.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..00180529dba148b177e5a27492de2a101eeed24c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/default-param-last.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"default-param-last.js","sourceRoot":"","sources":["../../src/rules/default-param-last.ts"],"names":[],"mappings":";;AAAA,kCAAqC;AACrC,8EAG+C;AAE/C,kBAAe,iBAAU,CAAC;IACxB,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,uCAAuC;YACpD,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,IAAI;SACtB;QACD,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE;YACR,YAAY,EAAE,oCAAoC;SACnD;KACF;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ;;;;WAIG;QACH,SAAS,eAAe,CAAC,IAAwB;YAC/C,OAAO,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;QACtD,CAAC;QAED;;;;WAIG;QACH,SAAS,YAAY,CAAC,IAAwB;YAC5C,OAAO,CAAC,CACN,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,iBAAiB;gBAC9C,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,WAAW;gBACxC,eAAe,CAAC,IAAI,CAAC,CACtB,CAAC;QACJ,CAAC;QAED,SAAS,qBAAqB,CAC5B,IAG+B;YAE/B,IAAI,iBAAiB,GAAG,KAAK,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBAChD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,KAAK,GACT,OAAO,CAAC,IAAI,KAAK,mCAAc,CAAC,mBAAmB;oBACjD,CAAC,CAAC,OAAO,CAAC,SAAS;oBACnB,CAAC,CAAC,OAAO,CAAC;gBAEd,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;oBACvB,iBAAiB,GAAG,IAAI,CAAC;oBACzB,SAAS;iBACV;gBAED,IACE,iBAAiB;oBACjB,CAAC,eAAe,CAAC,KAAK,CAAC;wBACrB,KAAK,CAAC,IAAI,KAAK,mCAAc,CAAC,iBAAiB,CAAC,EAClD;oBACA,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;iBAC9D;aACF;QACH,CAAC;QAED,OAAO;YACL,uBAAuB,EAAE,qBAAqB;YAC9C,mBAAmB,EAAE,qBAAqB;YAC1C,kBAAkB,EAAE,qBAAqB;SAC1C,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/dot-notation.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/dot-notation.js
new file mode 100644
index 0000000000000000000000000000000000000000..9998d111fc1262d4b090d82dbd22785cee93fd1a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/dot-notation.js
@@ -0,0 +1,101 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const ts = __importStar(require("typescript"));
+const dot_notation_1 = __importDefault(require("eslint/lib/rules/dot-notation"));
+const util_1 = require("../util");
+exports.default = util_1.createRule({
+    name: 'dot-notation',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'enforce dot notation whenever possible',
+            category: 'Best Practices',
+            recommended: false,
+            extendsBaseRule: true,
+            requiresTypeChecking: true,
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    allowKeywords: {
+                        type: 'boolean',
+                        default: true,
+                    },
+                    allowPattern: {
+                        type: 'string',
+                        default: '',
+                    },
+                    allowPrivateClassPropertyAccess: {
+                        type: 'boolean',
+                        default: false,
+                    },
+                    allowProtectedClassPropertyAccess: {
+                        type: 'boolean',
+                        default: false,
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+        fixable: dot_notation_1.default.meta.fixable,
+        messages: dot_notation_1.default.meta.messages,
+    },
+    defaultOptions: [
+        {
+            allowPrivateClassPropertyAccess: false,
+            allowProtectedClassPropertyAccess: false,
+            allowKeywords: true,
+            allowPattern: '',
+        },
+    ],
+    create(context, [options]) {
+        const rules = dot_notation_1.default.create(context);
+        const allowPrivateClassPropertyAccess = options.allowPrivateClassPropertyAccess;
+        const allowProtectedClassPropertyAccess = options.allowProtectedClassPropertyAccess;
+        const parserServices = util_1.getParserServices(context);
+        const typeChecker = parserServices.program.getTypeChecker();
+        return {
+            MemberExpression(node) {
+                var _a, _b, _c;
+                if ((allowPrivateClassPropertyAccess ||
+                    allowProtectedClassPropertyAccess) &&
+                    node.computed) {
+                    // for perf reasons - only fetch the symbol if we have to
+                    const objectSymbol = typeChecker.getSymbolAtLocation(parserServices.esTreeNodeToTSNodeMap.get(node.property));
+                    const modifierKind = (_c = (_b = (_a = objectSymbol === null || objectSymbol === void 0 ? void 0 : objectSymbol.getDeclarations()) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.modifiers) === null || _c === void 0 ? void 0 : _c[0].kind;
+                    if ((allowPrivateClassPropertyAccess &&
+                        modifierKind == ts.SyntaxKind.PrivateKeyword) ||
+                        (allowProtectedClassPropertyAccess &&
+                            modifierKind == ts.SyntaxKind.ProtectedKeyword)) {
+                        return;
+                    }
+                }
+                rules.MemberExpression(node);
+            },
+        };
+    },
+});
+//# sourceMappingURL=dot-notation.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/dot-notation.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/dot-notation.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..423f82e4c4088bbaacbfe3aa5d03cbd3da593ed9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/dot-notation.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dot-notation.js","sourceRoot":"","sources":["../../src/rules/dot-notation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAiC;AACjC,iFAAqD;AACrD,kCAKiB;AAKjB,kBAAe,iBAAU,CAAsB;IAC7C,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,IAAI;YACrB,oBAAoB,EAAE,IAAI;SAC3B;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,aAAa,EAAE;wBACb,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,IAAI;qBACd;oBACD,YAAY,EAAE;wBACZ,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,EAAE;qBACZ;oBACD,+BAA+B,EAAE;wBAC/B,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,KAAK;qBACf;oBACD,iCAAiC,EAAE;wBACjC,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,KAAK;qBACf;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;SACF;QACD,OAAO,EAAE,sBAAQ,CAAC,IAAI,CAAC,OAAO;QAC9B,QAAQ,EAAE,sBAAQ,CAAC,IAAI,CAAC,QAAQ;KACjC;IACD,cAAc,EAAE;QACd;YACE,+BAA+B,EAAE,KAAK;YACtC,iCAAiC,EAAE,KAAK;YACxC,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,EAAE;SACjB;KACF;IACD,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC;QACvB,MAAM,KAAK,GAAG,sBAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,+BAA+B,GACnC,OAAO,CAAC,+BAA+B,CAAC;QAC1C,MAAM,iCAAiC,GACrC,OAAO,CAAC,iCAAiC,CAAC;QAE5C,MAAM,cAAc,GAAG,wBAAiB,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAE5D,OAAO;YACL,gBAAgB,CAAC,IAA+B;;gBAC9C,IACE,CAAC,+BAA+B;oBAC9B,iCAAiC,CAAC;oBACpC,IAAI,CAAC,QAAQ,EACb;oBACA,yDAAyD;oBACzD,MAAM,YAAY,GAAG,WAAW,CAAC,mBAAmB,CAClD,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CACxD,CAAC;oBACF,MAAM,YAAY,qBAAG,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,eAAe,4CAAK,CAAC,2CACpD,SAAS,0CAAG,CAAC,EAAE,IAAI,CAAC;oBACxB,IACE,CAAC,+BAA+B;wBAC9B,YAAY,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;wBAC/C,CAAC,iCAAiC;4BAChC,YAAY,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EACjD;wBACA,OAAO;qBACR;iBACF;gBACD,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-function-return-type.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-function-return-type.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f3916806d55b55ef551f2d1a5c7d9478a79790c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-function-return-type.js
@@ -0,0 +1,97 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+const explicitReturnTypeUtils_1 = require("../util/explicitReturnTypeUtils");
+exports.default = util.createRule({
+    name: 'explicit-function-return-type',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Require explicit return types on functions and class methods',
+            category: 'Stylistic Issues',
+            recommended: false,
+        },
+        messages: {
+            missingReturnType: 'Missing return type on function.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    allowExpressions: {
+                        type: 'boolean',
+                    },
+                    allowTypedFunctionExpressions: {
+                        type: 'boolean',
+                    },
+                    allowHigherOrderFunctions: {
+                        type: 'boolean',
+                    },
+                    allowDirectConstAssertionInArrowFunctions: {
+                        type: 'boolean',
+                    },
+                    allowConciseArrowFunctionExpressionsStartingWithVoid: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            allowExpressions: false,
+            allowTypedFunctionExpressions: true,
+            allowHigherOrderFunctions: true,
+            allowDirectConstAssertionInArrowFunctions: true,
+            allowConciseArrowFunctionExpressionsStartingWithVoid: false,
+        },
+    ],
+    create(context, [options]) {
+        const sourceCode = context.getSourceCode();
+        return {
+            'ArrowFunctionExpression, FunctionExpression'(node) {
+                if (options.allowConciseArrowFunctionExpressionsStartingWithVoid &&
+                    node.type === experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression &&
+                    node.expression &&
+                    node.body.type === experimental_utils_1.AST_NODE_TYPES.UnaryExpression &&
+                    node.body.operator === 'void') {
+                    return;
+                }
+                explicitReturnTypeUtils_1.checkFunctionExpressionReturnType(node, options, sourceCode, loc => context.report({
+                    node,
+                    loc,
+                    messageId: 'missingReturnType',
+                }));
+            },
+            FunctionDeclaration(node) {
+                explicitReturnTypeUtils_1.checkFunctionReturnType(node, options, sourceCode, loc => context.report({
+                    node,
+                    loc,
+                    messageId: 'missingReturnType',
+                }));
+            },
+        };
+    },
+});
+//# sourceMappingURL=explicit-function-return-type.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-function-return-type.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-function-return-type.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..6384a05eb681a89ddd7f83bd5f50628126929c93
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-function-return-type.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"explicit-function-return-type.js","sourceRoot":"","sources":["../../src/rules/explicit-function-return-type.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,8CAAgC;AAChC,6EAGyC;AAazC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,+BAA+B;IACrC,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,8DAA8D;YAChE,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,KAAK;SACnB;QACD,QAAQ,EAAE;YACR,iBAAiB,EAAE,kCAAkC;SACtD;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,gBAAgB,EAAE;wBAChB,IAAI,EAAE,SAAS;qBAChB;oBACD,6BAA6B,EAAE;wBAC7B,IAAI,EAAE,SAAS;qBAChB;oBACD,yBAAyB,EAAE;wBACzB,IAAI,EAAE,SAAS;qBAChB;oBACD,yCAAyC,EAAE;wBACzC,IAAI,EAAE,SAAS;qBAChB;oBACD,oDAAoD,EAAE;wBACpD,IAAI,EAAE,SAAS;qBAChB;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;SACF;KACF;IACD,cAAc,EAAE;QACd;YACE,gBAAgB,EAAE,KAAK;YACvB,6BAA6B,EAAE,IAAI;YACnC,yBAAyB,EAAE,IAAI;YAC/B,yCAAyC,EAAE,IAAI;YAC/C,oDAAoD,EAAE,KAAK;SAC5D;KACF;IACD,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC;QACvB,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAE3C,OAAO;YACL,6CAA6C,CAC3C,IAAoE;gBAEpE,IACE,OAAO,CAAC,oDAAoD;oBAC5D,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,uBAAuB;oBACpD,IAAI,CAAC,UAAU;oBACf,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,eAAe;oBACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,EAC7B;oBACA,OAAO;iBACR;gBAED,2DAAiC,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,CACjE,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,GAAG;oBACH,SAAS,EAAE,mBAAmB;iBAC/B,CAAC,CACH,CAAC;YACJ,CAAC;YACD,mBAAmB,CAAC,IAAI;gBACtB,iDAAuB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,CACvD,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,GAAG;oBACH,SAAS,EAAE,mBAAmB;iBAC/B,CAAC,CACH,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-member-accessibility.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-member-accessibility.js
new file mode 100644
index 0000000000000000000000000000000000000000..d6d706306a9b5446b0d4e325fb2cd00d1ec2cbc1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-member-accessibility.js
@@ -0,0 +1,209 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+const accessibilityLevel = { enum: ['explicit', 'no-public', 'off'] };
+exports.default = util.createRule({
+    name: 'explicit-member-accessibility',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Require explicit accessibility modifiers on class properties and methods',
+            category: 'Stylistic Issues',
+            // too opinionated to be recommended
+            recommended: false,
+        },
+        fixable: 'code',
+        messages: {
+            missingAccessibility: 'Missing accessibility modifier on {{type}} {{name}}.',
+            unwantedPublicAccessibility: 'Public accessibility modifier on {{type}} {{name}}.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    accessibility: accessibilityLevel,
+                    overrides: {
+                        type: 'object',
+                        properties: {
+                            accessors: accessibilityLevel,
+                            constructors: accessibilityLevel,
+                            methods: accessibilityLevel,
+                            properties: accessibilityLevel,
+                            parameterProperties: accessibilityLevel,
+                        },
+                        additionalProperties: false,
+                    },
+                    ignoredMethodNames: {
+                        type: 'array',
+                        items: {
+                            type: 'string',
+                        },
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [{ accessibility: 'explicit' }],
+    create(context, [option]) {
+        var _a, _b, _c, _d, _e, _f, _g, _h;
+        const sourceCode = context.getSourceCode();
+        const baseCheck = (_a = option.accessibility) !== null && _a !== void 0 ? _a : 'explicit';
+        const overrides = (_b = option.overrides) !== null && _b !== void 0 ? _b : {};
+        const ctorCheck = (_c = overrides.constructors) !== null && _c !== void 0 ? _c : baseCheck;
+        const accessorCheck = (_d = overrides.accessors) !== null && _d !== void 0 ? _d : baseCheck;
+        const methodCheck = (_e = overrides.methods) !== null && _e !== void 0 ? _e : baseCheck;
+        const propCheck = (_f = overrides.properties) !== null && _f !== void 0 ? _f : baseCheck;
+        const paramPropCheck = (_g = overrides.parameterProperties) !== null && _g !== void 0 ? _g : baseCheck;
+        const ignoredMethodNames = new Set((_h = option.ignoredMethodNames) !== null && _h !== void 0 ? _h : []);
+        /**
+         * Generates the report for rule violations
+         */
+        function reportIssue(messageId, nodeType, node, nodeName, fix = null) {
+            context.report({
+                node: node,
+                messageId: messageId,
+                data: {
+                    type: nodeType,
+                    name: nodeName,
+                },
+                fix: fix,
+            });
+        }
+        /**
+         * Checks if a method declaration has an accessibility modifier.
+         * @param methodDefinition The node representing a MethodDefinition.
+         */
+        function checkMethodAccessibilityModifier(methodDefinition) {
+            let nodeType = 'method definition';
+            let check = baseCheck;
+            switch (methodDefinition.kind) {
+                case 'method':
+                    check = methodCheck;
+                    break;
+                case 'constructor':
+                    check = ctorCheck;
+                    break;
+                case 'get':
+                case 'set':
+                    check = accessorCheck;
+                    nodeType = `${methodDefinition.kind} property accessor`;
+                    break;
+            }
+            const methodName = util.getNameFromMember(methodDefinition, sourceCode);
+            if (check === 'off' || ignoredMethodNames.has(methodName)) {
+                return;
+            }
+            if (check === 'no-public' &&
+                methodDefinition.accessibility === 'public') {
+                reportIssue('unwantedPublicAccessibility', nodeType, methodDefinition, methodName, getUnwantedPublicAccessibilityFixer(methodDefinition));
+            }
+            else if (check === 'explicit' && !methodDefinition.accessibility) {
+                reportIssue('missingAccessibility', nodeType, methodDefinition, methodName);
+            }
+        }
+        /**
+         * Creates a fixer that removes a "public" keyword with following spaces
+         */
+        function getUnwantedPublicAccessibilityFixer(node) {
+            return function (fixer) {
+                const tokens = sourceCode.getTokens(node);
+                let rangeToRemove;
+                for (let i = 0; i < tokens.length; i++) {
+                    const token = tokens[i];
+                    if (token.type === experimental_utils_1.AST_TOKEN_TYPES.Keyword &&
+                        token.value === 'public') {
+                        const commensAfterPublicKeyword = sourceCode.getCommentsAfter(token);
+                        if (commensAfterPublicKeyword.length) {
+                            // public /* Hi there! */ static foo()
+                            // ^^^^^^^
+                            rangeToRemove = [
+                                token.range[0],
+                                commensAfterPublicKeyword[0].range[0],
+                            ];
+                            break;
+                        }
+                        else {
+                            // public static foo()
+                            // ^^^^^^^
+                            rangeToRemove = [token.range[0], tokens[i + 1].range[0]];
+                            break;
+                        }
+                    }
+                }
+                return fixer.removeRange(rangeToRemove);
+            };
+        }
+        /**
+         * Checks if property has an accessibility modifier.
+         * @param classProperty The node representing a ClassProperty.
+         */
+        function checkPropertyAccessibilityModifier(classProperty) {
+            const nodeType = 'class property';
+            const propertyName = util.getNameFromMember(classProperty, sourceCode);
+            if (propCheck === 'no-public' &&
+                classProperty.accessibility === 'public') {
+                reportIssue('unwantedPublicAccessibility', nodeType, classProperty, propertyName, getUnwantedPublicAccessibilityFixer(classProperty));
+            }
+            else if (propCheck === 'explicit' && !classProperty.accessibility) {
+                reportIssue('missingAccessibility', nodeType, classProperty, propertyName);
+            }
+        }
+        /**
+         * Checks that the parameter property has the desired accessibility modifiers set.
+         * @param node The node representing a Parameter Property
+         */
+        function checkParameterPropertyAccessibilityModifier(node) {
+            const nodeType = 'parameter property';
+            // HAS to be an identifier or assignment or TSC will throw
+            if (node.parameter.type !== experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                node.parameter.type !== experimental_utils_1.AST_NODE_TYPES.AssignmentPattern) {
+                return;
+            }
+            const nodeName = node.parameter.type === experimental_utils_1.AST_NODE_TYPES.Identifier
+                ? node.parameter.name
+                : // has to be an Identifier or TSC will throw an error
+                    node.parameter.left.name;
+            switch (paramPropCheck) {
+                case 'explicit': {
+                    if (!node.accessibility) {
+                        reportIssue('missingAccessibility', nodeType, node, nodeName);
+                    }
+                    break;
+                }
+                case 'no-public': {
+                    if (node.accessibility === 'public' && node.readonly) {
+                        reportIssue('unwantedPublicAccessibility', nodeType, node, nodeName, getUnwantedPublicAccessibilityFixer(node));
+                    }
+                    break;
+                }
+            }
+        }
+        return {
+            TSParameterProperty: checkParameterPropertyAccessibilityModifier,
+            ClassProperty: checkPropertyAccessibilityModifier,
+            MethodDefinition: checkMethodAccessibilityModifier,
+        };
+    },
+});
+//# sourceMappingURL=explicit-member-accessibility.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-member-accessibility.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-member-accessibility.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..ba2416f7bad7d688f61168dbc1a986f704b1c9ab
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-member-accessibility.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"explicit-member-accessibility.js","sourceRoot":"","sources":["../../src/rules/explicit-member-accessibility.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-module-boundary-types.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-module-boundary-types.js
new file mode 100644
index 0000000000000000000000000000000000000000..8977923c0d3dc3b00f071703b9f0132fa66cd558
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-module-boundary-types.js
@@ -0,0 +1,415 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+const explicitReturnTypeUtils_1 = require("../util/explicitReturnTypeUtils");
+exports.default = util.createRule({
+    name: 'explicit-module-boundary-types',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: "Require explicit return and argument types on exported functions' and classes' public class methods",
+            category: 'Stylistic Issues',
+            recommended: 'warn',
+        },
+        messages: {
+            missingReturnType: 'Missing return type on function.',
+            missingArgType: "Argument '{{name}}' should be typed.",
+            missingArgTypeUnnamed: '{{type}} argument should be typed.',
+            anyTypedArg: "Argument '{{name}}' should be typed with a non-any type.",
+            anyTypedArgUnnamed: '{{type}} argument should be typed with a non-any type.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    allowArgumentsExplicitlyTypedAsAny: {
+                        type: 'boolean',
+                    },
+                    allowDirectConstAssertionInArrowFunctions: {
+                        type: 'boolean',
+                    },
+                    allowedNames: {
+                        type: 'array',
+                        items: {
+                            type: 'string',
+                        },
+                    },
+                    allowHigherOrderFunctions: {
+                        type: 'boolean',
+                    },
+                    allowTypedFunctionExpressions: {
+                        type: 'boolean',
+                    },
+                    // DEPRECATED - To be removed in next major
+                    shouldTrackReferences: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            allowArgumentsExplicitlyTypedAsAny: false,
+            allowDirectConstAssertionInArrowFunctions: true,
+            allowedNames: [],
+            allowHigherOrderFunctions: true,
+            allowTypedFunctionExpressions: true,
+        },
+    ],
+    create(context, [options]) {
+        const sourceCode = context.getSourceCode();
+        // tracks all of the functions we've already checked
+        const checkedFunctions = new Set();
+        // tracks functions that were found whilst traversing
+        const foundFunctions = [];
+        // all nodes visited, avoids infinite recursion for cyclic references
+        // (such as class member referring to itself)
+        const alreadyVisited = new Set();
+        /*
+        # How the rule works:
+    
+        As the rule traverses the AST, it immediately checks every single function that it finds is exported.
+        "exported" means that it is either directly exported, or that its name is exported.
+    
+        It also collects a list of every single function it finds on the way, but does not check them.
+        After it's finished traversing the AST, it then iterates through the list of found functions, and checks to see if
+        any of them are part of a higher-order function
+        */
+        return {
+            ExportDefaultDeclaration(node) {
+                checkNode(node.declaration);
+            },
+            'ExportNamedDeclaration:not([source])'(node) {
+                if (node.declaration) {
+                    checkNode(node.declaration);
+                }
+                else {
+                    for (const specifier of node.specifiers) {
+                        followReference(specifier.local);
+                    }
+                }
+            },
+            TSExportAssignment(node) {
+                checkNode(node.expression);
+            },
+            'ArrowFunctionExpression, FunctionDeclaration, FunctionExpression'(node) {
+                foundFunctions.push(node);
+            },
+            'Program:exit'() {
+                for (const func of foundFunctions) {
+                    if (isExportedHigherOrderFunction(func)) {
+                        checkNode(func);
+                    }
+                }
+            },
+        };
+        function checkParameters(node) {
+            function checkParameter(param) {
+                function report(namedMessageId, unnamedMessageId) {
+                    if (param.type === experimental_utils_1.AST_NODE_TYPES.Identifier) {
+                        context.report({
+                            node: param,
+                            messageId: namedMessageId,
+                            data: { name: param.name },
+                        });
+                    }
+                    else if (param.type === experimental_utils_1.AST_NODE_TYPES.ArrayPattern) {
+                        context.report({
+                            node: param,
+                            messageId: unnamedMessageId,
+                            data: { type: 'Array pattern' },
+                        });
+                    }
+                    else if (param.type === experimental_utils_1.AST_NODE_TYPES.ObjectPattern) {
+                        context.report({
+                            node: param,
+                            messageId: unnamedMessageId,
+                            data: { type: 'Object pattern' },
+                        });
+                    }
+                    else if (param.type === experimental_utils_1.AST_NODE_TYPES.RestElement) {
+                        if (param.argument.type === experimental_utils_1.AST_NODE_TYPES.Identifier) {
+                            context.report({
+                                node: param,
+                                messageId: namedMessageId,
+                                data: { name: param.argument.name },
+                            });
+                        }
+                        else {
+                            context.report({
+                                node: param,
+                                messageId: unnamedMessageId,
+                                data: { type: 'Rest' },
+                            });
+                        }
+                    }
+                }
+                switch (param.type) {
+                    case experimental_utils_1.AST_NODE_TYPES.ArrayPattern:
+                    case experimental_utils_1.AST_NODE_TYPES.Identifier:
+                    case experimental_utils_1.AST_NODE_TYPES.ObjectPattern:
+                    case experimental_utils_1.AST_NODE_TYPES.RestElement:
+                        if (!param.typeAnnotation) {
+                            report('missingArgType', 'missingArgTypeUnnamed');
+                        }
+                        else if (options.allowArgumentsExplicitlyTypedAsAny !== true &&
+                            param.typeAnnotation.typeAnnotation.type ===
+                                experimental_utils_1.AST_NODE_TYPES.TSAnyKeyword) {
+                            report('anyTypedArg', 'anyTypedArgUnnamed');
+                        }
+                        return;
+                    case experimental_utils_1.AST_NODE_TYPES.TSParameterProperty:
+                        return checkParameter(param.parameter);
+                    case experimental_utils_1.AST_NODE_TYPES.AssignmentPattern: // ignored as it has a type via its assignment
+                        return;
+                }
+            }
+            for (const arg of node.params) {
+                checkParameter(arg);
+            }
+        }
+        /**
+         * Checks if a function name is allowed and should not be checked.
+         */
+        function isAllowedName(node) {
+            if (!node || !options.allowedNames || !options.allowedNames.length) {
+                return false;
+            }
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.VariableDeclarator) {
+                return (node.id.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                    options.allowedNames.includes(node.id.name));
+            }
+            else if (node.type === experimental_utils_1.AST_NODE_TYPES.MethodDefinition ||
+                node.type === experimental_utils_1.AST_NODE_TYPES.TSAbstractMethodDefinition) {
+                if (node.key.type === experimental_utils_1.AST_NODE_TYPES.Literal &&
+                    typeof node.key.value === 'string') {
+                    return options.allowedNames.includes(node.key.value);
+                }
+                if (node.key.type === experimental_utils_1.AST_NODE_TYPES.TemplateLiteral &&
+                    node.key.expressions.length === 0) {
+                    return options.allowedNames.includes(node.key.quasis[0].value.raw);
+                }
+                if (!node.computed && node.key.type === experimental_utils_1.AST_NODE_TYPES.Identifier) {
+                    return options.allowedNames.includes(node.key.name);
+                }
+            }
+            return false;
+        }
+        function isExportedHigherOrderFunction(node) {
+            var _a;
+            let current = node.parent;
+            while (current) {
+                if (current.type === experimental_utils_1.AST_NODE_TYPES.ReturnStatement) {
+                    // the parent of a return will always be a block statement, so we can skip over it
+                    current = (_a = current.parent) === null || _a === void 0 ? void 0 : _a.parent;
+                    continue;
+                }
+                if (!util.isFunction(current) ||
+                    !explicitReturnTypeUtils_1.doesImmediatelyReturnFunctionExpression(current)) {
+                    return false;
+                }
+                if (checkedFunctions.has(current)) {
+                    return true;
+                }
+                current = current.parent;
+            }
+            return false;
+        }
+        function followReference(node) {
+            const scope = context.getScope();
+            const variable = scope.set.get(node.name);
+            /* istanbul ignore if */ if (!variable) {
+                return;
+            }
+            // check all of the definitions
+            for (const definition of variable.defs) {
+                // cases we don't care about in this rule
+                if (definition.type === 'ImplicitGlobalVariable' ||
+                    definition.type === 'ImportBinding' ||
+                    // eslint-disable-next-line @typescript-eslint/internal/prefer-ast-types-enum
+                    definition.type === 'CatchClause' ||
+                    definition.type === 'Parameter') {
+                    continue;
+                }
+                checkNode(definition.node);
+            }
+            // follow references to find writes to the variable
+            for (const reference of variable.references) {
+                if (
+                // we don't want to check the initialization ref, as this is handled by the declaration check
+                !reference.init &&
+                    reference.writeExpr) {
+                    checkNode(reference.writeExpr);
+                }
+            }
+        }
+        function checkNode(node) {
+            if (node == null || alreadyVisited.has(node)) {
+                return;
+            }
+            alreadyVisited.add(node);
+            switch (node.type) {
+                case experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression:
+                case experimental_utils_1.AST_NODE_TYPES.FunctionExpression:
+                    return checkFunctionExpression(node);
+                case experimental_utils_1.AST_NODE_TYPES.ArrayExpression:
+                    for (const element of node.elements) {
+                        checkNode(element);
+                    }
+                    return;
+                case experimental_utils_1.AST_NODE_TYPES.ClassProperty:
+                case experimental_utils_1.AST_NODE_TYPES.TSAbstractClassProperty:
+                    if (node.accessibility === 'private') {
+                        return;
+                    }
+                    return checkNode(node.value);
+                case experimental_utils_1.AST_NODE_TYPES.ClassDeclaration:
+                case experimental_utils_1.AST_NODE_TYPES.ClassExpression:
+                    for (const element of node.body.body) {
+                        checkNode(element);
+                    }
+                    return;
+                case experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration:
+                    return checkFunction(node);
+                case experimental_utils_1.AST_NODE_TYPES.MethodDefinition:
+                case experimental_utils_1.AST_NODE_TYPES.TSAbstractMethodDefinition:
+                    if (node.accessibility === 'private') {
+                        return;
+                    }
+                    return checkNode(node.value);
+                case experimental_utils_1.AST_NODE_TYPES.Identifier:
+                    return followReference(node);
+                case experimental_utils_1.AST_NODE_TYPES.ObjectExpression:
+                    for (const property of node.properties) {
+                        checkNode(property);
+                    }
+                    return;
+                case experimental_utils_1.AST_NODE_TYPES.Property:
+                    return checkNode(node.value);
+                case experimental_utils_1.AST_NODE_TYPES.TSEmptyBodyFunctionExpression:
+                    return checkEmptyBodyFunctionExpression(node);
+                case experimental_utils_1.AST_NODE_TYPES.VariableDeclaration:
+                    for (const declaration of node.declarations) {
+                        checkNode(declaration);
+                    }
+                    return;
+                case experimental_utils_1.AST_NODE_TYPES.VariableDeclarator:
+                    return checkNode(node.init);
+            }
+        }
+        /**
+         * Check whether any ancestor of the provided function has a valid return type.
+         * This function assumes that the function either:
+         * - belongs to an exported function chain validated by isExportedHigherOrderFunction
+         * - is directly exported itself
+         */
+        function ancestorHasReturnType(node) {
+            let ancestor = node.parent;
+            if ((ancestor === null || ancestor === void 0 ? void 0 : ancestor.type) === experimental_utils_1.AST_NODE_TYPES.Property) {
+                ancestor = ancestor.value;
+            }
+            // if the ancestor is not a return, then this function was not returned at all, so we can exit early
+            const isReturnStatement = (ancestor === null || ancestor === void 0 ? void 0 : ancestor.type) === experimental_utils_1.AST_NODE_TYPES.ReturnStatement;
+            const isBodylessArrow = (ancestor === null || ancestor === void 0 ? void 0 : ancestor.type) === experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression &&
+                ancestor.body.type !== experimental_utils_1.AST_NODE_TYPES.BlockStatement;
+            if (!isReturnStatement && !isBodylessArrow) {
+                return false;
+            }
+            while (ancestor) {
+                switch (ancestor.type) {
+                    case experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression:
+                    case experimental_utils_1.AST_NODE_TYPES.FunctionExpression:
+                    case experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration:
+                        if (ancestor.returnType) {
+                            return true;
+                        }
+                        // assume
+                        break;
+                    // const x: Foo = () => {};
+                    // Assume that a typed variable types the function expression
+                    case experimental_utils_1.AST_NODE_TYPES.VariableDeclarator:
+                        if (ancestor.id.typeAnnotation) {
+                            return true;
+                        }
+                        break;
+                }
+                ancestor = ancestor.parent;
+            }
+            return false;
+        }
+        function checkEmptyBodyFunctionExpression(node) {
+            var _a, _b, _c;
+            const isConstructor = ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.MethodDefinition &&
+                node.parent.kind === 'constructor';
+            const isSetAccessor = (((_b = node.parent) === null || _b === void 0 ? void 0 : _b.type) === experimental_utils_1.AST_NODE_TYPES.TSAbstractMethodDefinition ||
+                ((_c = node.parent) === null || _c === void 0 ? void 0 : _c.type) === experimental_utils_1.AST_NODE_TYPES.MethodDefinition) &&
+                node.parent.kind === 'set';
+            if (!isConstructor && !isSetAccessor && !node.returnType) {
+                context.report({
+                    node,
+                    messageId: 'missingReturnType',
+                });
+            }
+            checkParameters(node);
+        }
+        function checkFunctionExpression(node) {
+            if (checkedFunctions.has(node)) {
+                return;
+            }
+            checkedFunctions.add(node);
+            if (isAllowedName(node.parent) ||
+                explicitReturnTypeUtils_1.isTypedFunctionExpression(node, options) ||
+                ancestorHasReturnType(node)) {
+                return;
+            }
+            explicitReturnTypeUtils_1.checkFunctionExpressionReturnType(node, options, sourceCode, loc => {
+                context.report({
+                    node,
+                    loc,
+                    messageId: 'missingReturnType',
+                });
+            });
+            checkParameters(node);
+        }
+        function checkFunction(node) {
+            if (checkedFunctions.has(node)) {
+                return;
+            }
+            checkedFunctions.add(node);
+            if (isAllowedName(node.parent) || ancestorHasReturnType(node)) {
+                return;
+            }
+            explicitReturnTypeUtils_1.checkFunctionReturnType(node, options, sourceCode, loc => {
+                context.report({
+                    node,
+                    loc,
+                    messageId: 'missingReturnType',
+                });
+            });
+            checkParameters(node);
+        }
+    },
+});
+//# sourceMappingURL=explicit-module-boundary-types.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-module-boundary-types.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-module-boundary-types.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..1528c29d50023e1fb8778997076b92c534afd96e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-module-boundary-types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"explicit-module-boundary-types.js","sourceRoot":"","sources":["../../src/rules/explicit-module-boundary-types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/func-call-spacing.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/func-call-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..ab51deeac364ae411e5a30dcf85788a50b9b032e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/func-call-spacing.js
@@ -0,0 +1,165 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'func-call-spacing',
+    meta: {
+        type: 'layout',
+        docs: {
+            description: 'Require or disallow spacing between function identifiers and their invocations',
+            category: 'Stylistic Issues',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        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,
+                },
+            ],
+        },
+        messages: {
+            unexpectedWhitespace: 'Unexpected whitespace between function name and paren.',
+            unexpectedNewline: 'Unexpected newline between function name and paren.',
+            missing: 'Missing space between function name and paren.',
+        },
+    },
+    defaultOptions: ['never', {}],
+    create(context, [option, config]) {
+        const sourceCode = context.getSourceCode();
+        const text = sourceCode.getText();
+        /**
+         * Check if open space is present in a function name
+         * @param {ASTNode} node node to evaluate
+         * @returns {void}
+         * @private
+         */
+        function checkSpacing(node) {
+            var _a;
+            const isOptionalCall = util.isOptionalCallExpression(node);
+            const closingParenToken = sourceCode.getLastToken(node);
+            const lastCalleeTokenWithoutPossibleParens = sourceCode.getLastToken((_a = node.typeParameters) !== null && _a !== void 0 ? _a : node.callee);
+            const openingParenToken = sourceCode.getFirstTokenBetween(lastCalleeTokenWithoutPossibleParens, closingParenToken, util.isOpeningParenToken);
+            if (!openingParenToken || openingParenToken.range[1] >= node.range[1]) {
+                // new expression with no parens...
+                return;
+            }
+            const lastCalleeToken = sourceCode.getTokenBefore(openingParenToken, util.isNotOptionalChainPunctuator);
+            const textBetweenTokens = text
+                .slice(lastCalleeToken.range[1], openingParenToken.range[0])
+                .replace(/\/\*.*?\*\//gu, '');
+            const hasWhitespace = /\s/u.test(textBetweenTokens);
+            const hasNewline = hasWhitespace && util.LINEBREAK_MATCHER.test(textBetweenTokens);
+            if (option === 'never') {
+                if (hasWhitespace) {
+                    return context.report({
+                        node,
+                        loc: lastCalleeToken.loc.start,
+                        messageId: 'unexpectedWhitespace',
+                        fix(fixer) {
+                            /*
+                             * Only autofix if there is no newline
+                             * https://github.com/eslint/eslint/issues/7787
+                             */
+                            if (!hasNewline &&
+                                // don't fix optional calls
+                                !isOptionalCall) {
+                                return fixer.removeRange([
+                                    lastCalleeToken.range[1],
+                                    openingParenToken.range[0],
+                                ]);
+                            }
+                            return null;
+                        },
+                    });
+                }
+            }
+            else if (isOptionalCall) {
+                // disallow:
+                // foo?. ();
+                // foo ?.();
+                // foo ?. ();
+                if (hasWhitespace || hasNewline) {
+                    context.report({
+                        node,
+                        loc: lastCalleeToken.loc.start,
+                        messageId: 'unexpectedWhitespace',
+                    });
+                }
+            }
+            else {
+                if (!hasWhitespace) {
+                    context.report({
+                        node,
+                        loc: lastCalleeToken.loc.start,
+                        messageId: 'missing',
+                        fix(fixer) {
+                            return fixer.insertTextBefore(openingParenToken, ' ');
+                        },
+                    });
+                }
+                else if (!config.allowNewlines && hasNewline) {
+                    context.report({
+                        node,
+                        loc: lastCalleeToken.loc.start,
+                        messageId: 'unexpectedNewline',
+                        fix(fixer) {
+                            return fixer.replaceTextRange([lastCalleeToken.range[1], openingParenToken.range[0]], ' ');
+                        },
+                    });
+                }
+            }
+        }
+        return {
+            CallExpression: checkSpacing,
+            NewExpression: checkSpacing,
+        };
+    },
+});
+//# sourceMappingURL=func-call-spacing.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/func-call-spacing.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/func-call-spacing.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..a677e9d2fc976407091f842aac268cfb34e63b5e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/func-call-spacing.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"func-call-spacing.js","sourceRoot":"","sources":["../../src/rules/func-call-spacing.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/BinarySearchTree.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/BinarySearchTree.js
new file mode 100644
index 0000000000000000000000000000000000000000..9ae710624dbed9ab10a1d455cb7bb8697e99f614
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/BinarySearchTree.js
@@ -0,0 +1,55 @@
+"use strict";
+// The following code is adapted from the the code in eslint.
+// License: https://github.com/eslint/eslint/blob/48700fc8408f394887cdedd071b22b757700fdcb/LICENSE
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.BinarySearchTree = void 0;
+const functional_red_black_tree_1 = __importDefault(require("functional-red-black-tree"));
+/**
+ * A mutable balanced binary search tree that stores (key, value) pairs. The keys are numeric, and must be unique.
+ * This is intended to be a generic wrapper around a balanced binary search tree library, so that the underlying implementation
+ * can easily be swapped out.
+ */
+class BinarySearchTree {
+    constructor() {
+        this.rbTree = functional_red_black_tree_1.default();
+    }
+    /**
+     * Inserts an entry into the tree.
+     */
+    insert(key, value) {
+        const iterator = this.rbTree.find(key);
+        if (iterator.valid) {
+            this.rbTree = iterator.update(value);
+        }
+        else {
+            this.rbTree = this.rbTree.insert(key, value);
+        }
+    }
+    /**
+     * Finds the entry with the largest key less than or equal to the provided key
+     * @returns The found entry, or null if no such entry exists.
+     */
+    findLe(key) {
+        const iterator = this.rbTree.le(key);
+        return { key: iterator.key, value: iterator.value };
+    }
+    /**
+     * Deletes all of the keys in the interval [start, end)
+     */
+    deleteRange(start, end) {
+        // Exit without traversing the tree if the range has zero size.
+        if (start === end) {
+            return;
+        }
+        const iterator = this.rbTree.ge(start);
+        while (iterator.valid && iterator.key < end) {
+            this.rbTree = this.rbTree.remove(iterator.key);
+            iterator.next();
+        }
+    }
+}
+exports.BinarySearchTree = BinarySearchTree;
+//# sourceMappingURL=BinarySearchTree.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/BinarySearchTree.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/BinarySearchTree.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..6f0c20ea052fbe9a6d12fc1bbbf3ac7d61d71701
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/BinarySearchTree.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"BinarySearchTree.js","sourceRoot":"","sources":["../../../src/rules/indent-new-do-not-use/BinarySearchTree.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,kGAAkG;;;;;;AAGlG,0FAAmD;AASnD;;;;GAIG;AACH,MAAa,gBAAgB;IAA7B;QACU,WAAM,GAAG,mCAAU,EAAa,CAAC;IAwC3C,CAAC;IAtCC;;OAEG;IACI,MAAM,CAAC,GAAW,EAAE,KAAgB;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,QAAQ,CAAC,KAAK,EAAE;YAClB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACtC;aAAM;YACL,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC9C;IACH,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,GAAW;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAErC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;IACtD,CAAC;IAED;;OAEG;IACI,WAAW,CAAC,KAAa,EAAE,GAAW;QAC3C,+DAA+D;QAC/D,IAAI,KAAK,KAAK,GAAG,EAAE;YACjB,OAAO;SACR;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAEvC,OAAO,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,GAAG,GAAG,GAAG,EAAE;YAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC/C,QAAQ,CAAC,IAAI,EAAE,CAAC;SACjB;IACH,CAAC;CACF;AAzCD,4CAyCC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/OffsetStorage.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/OffsetStorage.js
new file mode 100644
index 0000000000000000000000000000000000000000..a48651d8989553a38a2848fef9b9647dc3676880
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/OffsetStorage.js
@@ -0,0 +1,221 @@
+"use strict";
+// The following code is adapted from the the code in eslint.
+// License: https://github.com/eslint/eslint/blob/48700fc8408f394887cdedd071b22b757700fdcb/LICENSE
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.OffsetStorage = void 0;
+const BinarySearchTree_1 = require("./BinarySearchTree");
+/**
+ * A class to store information on desired offsets of tokens from each other
+ */
+class OffsetStorage {
+    /**
+     * @param tokenInfo a TokenInfo instance
+     * @param indentSize The desired size of each indentation level
+     * @param indentType The indentation character
+     */
+    constructor(tokenInfo, indentSize, indentType) {
+        this.tokenInfo = tokenInfo;
+        this.indentSize = indentSize;
+        this.indentType = indentType;
+        this.tree = new BinarySearchTree_1.BinarySearchTree();
+        this.tree.insert(0, { offset: 0, from: null, force: false });
+        this.lockedFirstTokens = new WeakMap();
+        this.desiredIndentCache = new WeakMap();
+        this.ignoredTokens = new WeakSet();
+    }
+    getOffsetDescriptor(token) {
+        return this.tree.findLe(token.range[0]).value;
+    }
+    /**
+     * Sets the offset column of token B to match the offset column of token A.
+     * **WARNING**: This matches a *column*, even if baseToken is not the first token on its line. In
+     * most cases, `setDesiredOffset` should be used instead.
+     * @param baseToken The first token
+     * @param offsetToken The second token, whose offset should be matched to the first token
+     */
+    matchOffsetOf(baseToken, offsetToken) {
+        /*
+         * lockedFirstTokens is a map from a token whose indentation is controlled by the "first" option to
+         * the token that it depends on. For example, with the `ArrayExpression: first` option, the first
+         * token of each element in the array after the first will be mapped to the first token of the first
+         * element. The desired indentation of each of these tokens is computed based on the desired indentation
+         * of the "first" element, rather than through the normal offset mechanism.
+         */
+        this.lockedFirstTokens.set(offsetToken, baseToken);
+    }
+    /**
+     * Sets the desired offset of a token.
+     *
+     * This uses a line-based offset collapsing behavior to handle tokens on the same line.
+     * For example, consider the following two cases:
+     *
+     * (
+     *     [
+     *         bar
+     *     ]
+     * )
+     *
+     * ([
+     *     bar
+     * ])
+     *
+     * Based on the first case, it's clear that the `bar` token needs to have an offset of 1 indent level (4 spaces) from
+     * the `[` token, and the `[` token has to have an offset of 1 indent level from the `(` token. Since the `(` token is
+     * the first on its line (with an indent of 0 spaces), the `bar` token needs to be offset by 2 indent levels (8 spaces)
+     * from the start of its line.
+     *
+     * However, in the second case `bar` should only be indented by 4 spaces. This is because the offset of 1 indent level
+     * between the `(` and the `[` tokens gets "collapsed" because the two tokens are on the same line. As a result, the
+     * `(` token is mapped to the `[` token with an offset of 0, and the rule correctly decides that `bar` should be indented
+     * by 1 indent level from the start of the line.
+     *
+     * This is useful because rule listeners can usually just call `setDesiredOffset` for all the tokens in the node,
+     * without needing to check which lines those tokens are on.
+     *
+     * Note that since collapsing only occurs when two tokens are on the same line, there are a few cases where non-intuitive
+     * behavior can occur. For example, consider the following cases:
+     *
+     * foo(
+     * ).
+     *     bar(
+     *         baz
+     *     )
+     *
+     * foo(
+     * ).bar(
+     *     baz
+     * )
+     *
+     * Based on the first example, it would seem that `bar` should be offset by 1 indent level from `foo`, and `baz`
+     * should be offset by 1 indent level from `bar`. However, this is not correct, because it would result in `baz`
+     * being indented by 2 indent levels in the second case (since `foo`, `bar`, and `baz` are all on separate lines, no
+     * collapsing would occur).
+     *
+     * Instead, the correct way would be to offset `baz` by 1 level from `bar`, offset `bar` by 1 level from the `)`, and
+     * offset the `)` by 0 levels from `foo`. This ensures that the offset between `bar` and the `)` are correctly collapsed
+     * in the second case.
+     *
+     * @param token The token
+     * @param fromToken The token that `token` should be offset from
+     * @param offset The desired indent level
+     */
+    setDesiredOffset(token, fromToken, offset) {
+        this.setDesiredOffsets(token.range, fromToken, offset);
+    }
+    /**
+     * Sets the desired offset of all tokens in a range
+     * It's common for node listeners in this file to need to apply the same offset to a large, contiguous range of tokens.
+     * Moreover, the offset of any given token is usually updated multiple times (roughly once for each node that contains
+     * it). This means that the offset of each token is updated O(AST depth) times.
+     * It would not be performant to store and update the offsets for each token independently, because the rule would end
+     * up having a time complexity of O(number of tokens * AST depth), which is quite slow for large files.
+     *
+     * Instead, the offset tree is represented as a collection of contiguous offset ranges in a file. For example, the following
+     * list could represent the state of the offset tree at a given point:
+     *
+     * * Tokens starting in the interval [0, 15) are aligned with the beginning of the file
+     * * Tokens starting in the interval [15, 30) are offset by 1 indent level from the `bar` token
+     * * Tokens starting in the interval [30, 43) are offset by 1 indent level from the `foo` token
+     * * Tokens starting in the interval [43, 820) are offset by 2 indent levels from the `bar` token
+     * * Tokens starting in the interval [820, ∞) are offset by 1 indent level from the `baz` token
+     *
+     * The `setDesiredOffsets` methods inserts ranges like the ones above. The third line above would be inserted by using:
+     * `setDesiredOffsets([30, 43], fooToken, 1);`
+     *
+     * @param range A [start, end] pair. All tokens with range[0] <= token.start < range[1] will have the offset applied.
+     * @param fromToken The token that this is offset from
+     * @param offset The desired indent level
+     * @param force `true` if this offset should not use the normal collapsing behavior. This should almost always be false.
+     */
+    setDesiredOffsets(range, fromToken, offset = 0, force = false) {
+        /*
+         * Offset ranges are stored as a collection of nodes, where each node maps a numeric key to an offset
+         * descriptor. The tree for the example above would have the following nodes:
+         *
+         * * key: 0, value: { offset: 0, from: null }
+         * * key: 15, value: { offset: 1, from: barToken }
+         * * key: 30, value: { offset: 1, from: fooToken }
+         * * key: 43, value: { offset: 2, from: barToken }
+         * * key: 820, value: { offset: 1, from: bazToken }
+         *
+         * To find the offset descriptor for any given token, one needs to find the node with the largest key
+         * which is <= token.start. To make this operation fast, the nodes are stored in a balanced binary
+         * search tree indexed by key.
+         */
+        const descriptorToInsert = { offset, from: fromToken, force };
+        const descriptorAfterRange = this.tree.findLe(range[1]).value;
+        const fromTokenIsInRange = fromToken &&
+            fromToken.range[0] >= range[0] &&
+            fromToken.range[1] <= range[1];
+        // this has to be before the delete + insert below or else you'll get into a cycle
+        const fromTokenDescriptor = fromTokenIsInRange
+            ? this.getOffsetDescriptor(fromToken)
+            : null;
+        // First, remove any existing nodes in the range from the tree.
+        this.tree.deleteRange(range[0] + 1, range[1]);
+        // Insert a new node into the tree for this range
+        this.tree.insert(range[0], descriptorToInsert);
+        /*
+         * To avoid circular offset dependencies, keep the `fromToken` token mapped to whatever it was mapped to previously,
+         * even if it's in the current range.
+         */
+        if (fromTokenIsInRange) {
+            this.tree.insert(fromToken.range[0], fromTokenDescriptor);
+            this.tree.insert(fromToken.range[1], descriptorToInsert);
+        }
+        /*
+         * To avoid modifying the offset of tokens after the range, insert another node to keep the offset of the following
+         * tokens the same as it was before.
+         */
+        this.tree.insert(range[1], descriptorAfterRange);
+    }
+    /**
+     * Gets the desired indent of a token
+     * @returns The desired indent of the token
+     */
+    getDesiredIndent(token) {
+        if (!this.desiredIndentCache.has(token)) {
+            if (this.ignoredTokens.has(token)) {
+                /*
+                 * If the token is ignored, use the actual indent of the token as the desired indent.
+                 * This ensures that no errors are reported for this token.
+                 */
+                this.desiredIndentCache.set(token, this.tokenInfo.getTokenIndent(token));
+            }
+            else if (this.lockedFirstTokens.has(token)) {
+                const firstToken = this.lockedFirstTokens.get(token);
+                this.desiredIndentCache.set(token, 
+                // (indentation for the first element's line)
+                this.getDesiredIndent(this.tokenInfo.getFirstTokenOfLine(firstToken)) +
+                    // (space between the start of the first element's line and the first element)
+                    this.indentType.repeat(firstToken.loc.start.column -
+                        this.tokenInfo.getFirstTokenOfLine(firstToken).loc.start.column));
+            }
+            else {
+                const offsetInfo = this.getOffsetDescriptor(token);
+                const offset = offsetInfo.from &&
+                    offsetInfo.from.loc.start.line === token.loc.start.line &&
+                    !/^\s*?\n/u.test(token.value) &&
+                    !offsetInfo.force
+                    ? 0
+                    : offsetInfo.offset * this.indentSize;
+                this.desiredIndentCache.set(token, (offsetInfo.from ? this.getDesiredIndent(offsetInfo.from) : '') +
+                    this.indentType.repeat(offset));
+            }
+        }
+        return this.desiredIndentCache.get(token);
+    }
+    /**
+     * Ignores a token, preventing it from being reported.
+     */
+    ignoreToken(token) {
+        if (this.tokenInfo.isFirstTokenOfLine(token)) {
+            this.ignoredTokens.add(token);
+        }
+    }
+    getFirstDependency(token) {
+        return this.getOffsetDescriptor(token).from;
+    }
+}
+exports.OffsetStorage = OffsetStorage;
+//# sourceMappingURL=OffsetStorage.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/OffsetStorage.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/OffsetStorage.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..dc3aa66715adea9e9dc0ca37acf898774794faf4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/OffsetStorage.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"OffsetStorage.js","sourceRoot":"","sources":["../../../src/rules/indent-new-do-not-use/OffsetStorage.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/TokenInfo.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/TokenInfo.js
new file mode 100644
index 0000000000000000000000000000000000000000..5da8a48b42aeaf27bbb876d725e5330bd4e68c6c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/TokenInfo.js
@@ -0,0 +1,49 @@
+"use strict";
+// The following code is adapted from the the code in eslint.
+// License: https://github.com/eslint/eslint/blob/48700fc8408f394887cdedd071b22b757700fdcb/LICENSE
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TokenInfo = void 0;
+/**
+ * A helper class to get token-based info related to indentation
+ */
+class TokenInfo {
+    constructor(sourceCode) {
+        this.sourceCode = sourceCode;
+        this.firstTokensByLineNumber = sourceCode.tokensAndComments.reduce((map, token) => {
+            if (!map.has(token.loc.start.line)) {
+                map.set(token.loc.start.line, token);
+            }
+            if (!map.has(token.loc.end.line) &&
+                sourceCode.text
+                    .slice(token.range[1] - token.loc.end.column, token.range[1])
+                    .trim()) {
+                map.set(token.loc.end.line, token);
+            }
+            return map;
+        }, new Map());
+    }
+    /**
+     * Gets the first token on a given token's line
+     * @returns The first token on the given line
+     */
+    getFirstTokenOfLine(token) {
+        return this.firstTokensByLineNumber.get(token.loc.start.line);
+    }
+    /**
+     * Determines whether a token is the first token in its line
+     * @returns `true` if the token is the first on its line
+     */
+    isFirstTokenOfLine(token) {
+        return this.getFirstTokenOfLine(token) === token;
+    }
+    /**
+     * Get the actual indent of a token
+     * @param token Token to examine. This should be the first token on its line.
+     * @returns The indentation characters that precede the token
+     */
+    getTokenIndent(token) {
+        return this.sourceCode.text.slice(token.range[0] - token.loc.start.column, token.range[0]);
+    }
+}
+exports.TokenInfo = TokenInfo;
+//# sourceMappingURL=TokenInfo.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/TokenInfo.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/TokenInfo.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..7bc04ad44163acfe6b8edd5437ac457621c77438
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/TokenInfo.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"TokenInfo.js","sourceRoot":"","sources":["../../../src/rules/indent-new-do-not-use/TokenInfo.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,kGAAkG;;;AAKlG;;GAEG;AACH,MAAa,SAAS;IAIpB,YAAY,UAA+B;QACzC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,uBAAuB,GAAG,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAChE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACb,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gBAClC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aACtC;YACD,IACE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC5B,UAAU,CAAC,IAAI;qBACZ,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;qBAC5D,IAAI,EAAE,EACT;gBACA,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aACpC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EACD,IAAI,GAAG,EAAE,CACV,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,mBAAmB,CACxB,KAAqC;QAErC,OAAO,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC;IACjE,CAAC;IAED;;;OAGG;IACI,kBAAkB,CAAC,KAAqB;QAC7C,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAC,KAAqB;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAC/B,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EACvC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CACf,CAAC;IACJ,CAAC;CACF;AAtDD,8BAsDC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/index.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c43a8a373137e0e588e4da4e9ddcfd7ec4c23a38
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/index.js
@@ -0,0 +1,1143 @@
+"use strict";
+//------------------------------------------------------------------------------
+// Requirements
+//------------------------------------------------------------------------------
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const OffsetStorage_1 = require("./OffsetStorage");
+const TokenInfo_1 = require("./TokenInfo");
+const util_1 = require("../../util");
+const GLOBAL_LINEBREAK_REGEX = /\r\n|[\r\n\u2028\u2029]/gu;
+const WHITESPACE_REGEX = /\s*$/u;
+//------------------------------------------------------------------------------
+// Rule Definition
+//------------------------------------------------------------------------------
+const KNOWN_NODES = new Set([
+    experimental_utils_1.AST_NODE_TYPES.AssignmentExpression,
+    experimental_utils_1.AST_NODE_TYPES.AssignmentPattern,
+    experimental_utils_1.AST_NODE_TYPES.ArrayExpression,
+    experimental_utils_1.AST_NODE_TYPES.ArrayPattern,
+    experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression,
+    experimental_utils_1.AST_NODE_TYPES.AwaitExpression,
+    experimental_utils_1.AST_NODE_TYPES.BlockStatement,
+    experimental_utils_1.AST_NODE_TYPES.BinaryExpression,
+    experimental_utils_1.AST_NODE_TYPES.BreakStatement,
+    experimental_utils_1.AST_NODE_TYPES.CallExpression,
+    experimental_utils_1.AST_NODE_TYPES.CatchClause,
+    experimental_utils_1.AST_NODE_TYPES.ClassBody,
+    experimental_utils_1.AST_NODE_TYPES.ClassDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.ClassExpression,
+    experimental_utils_1.AST_NODE_TYPES.ConditionalExpression,
+    experimental_utils_1.AST_NODE_TYPES.ContinueStatement,
+    experimental_utils_1.AST_NODE_TYPES.DoWhileStatement,
+    experimental_utils_1.AST_NODE_TYPES.DebuggerStatement,
+    experimental_utils_1.AST_NODE_TYPES.EmptyStatement,
+    experimental_utils_1.AST_NODE_TYPES.ExpressionStatement,
+    experimental_utils_1.AST_NODE_TYPES.ForStatement,
+    experimental_utils_1.AST_NODE_TYPES.ForInStatement,
+    experimental_utils_1.AST_NODE_TYPES.ForOfStatement,
+    experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.FunctionExpression,
+    experimental_utils_1.AST_NODE_TYPES.Identifier,
+    experimental_utils_1.AST_NODE_TYPES.IfStatement,
+    experimental_utils_1.AST_NODE_TYPES.Literal,
+    experimental_utils_1.AST_NODE_TYPES.LabeledStatement,
+    experimental_utils_1.AST_NODE_TYPES.LogicalExpression,
+    experimental_utils_1.AST_NODE_TYPES.MemberExpression,
+    experimental_utils_1.AST_NODE_TYPES.MetaProperty,
+    experimental_utils_1.AST_NODE_TYPES.MethodDefinition,
+    experimental_utils_1.AST_NODE_TYPES.NewExpression,
+    experimental_utils_1.AST_NODE_TYPES.ObjectExpression,
+    experimental_utils_1.AST_NODE_TYPES.ObjectPattern,
+    experimental_utils_1.AST_NODE_TYPES.Program,
+    experimental_utils_1.AST_NODE_TYPES.Property,
+    experimental_utils_1.AST_NODE_TYPES.RestElement,
+    experimental_utils_1.AST_NODE_TYPES.ReturnStatement,
+    experimental_utils_1.AST_NODE_TYPES.SequenceExpression,
+    experimental_utils_1.AST_NODE_TYPES.SpreadElement,
+    experimental_utils_1.AST_NODE_TYPES.Super,
+    experimental_utils_1.AST_NODE_TYPES.SwitchCase,
+    experimental_utils_1.AST_NODE_TYPES.SwitchStatement,
+    experimental_utils_1.AST_NODE_TYPES.TaggedTemplateExpression,
+    experimental_utils_1.AST_NODE_TYPES.TemplateElement,
+    experimental_utils_1.AST_NODE_TYPES.TemplateLiteral,
+    experimental_utils_1.AST_NODE_TYPES.ThisExpression,
+    experimental_utils_1.AST_NODE_TYPES.ThrowStatement,
+    experimental_utils_1.AST_NODE_TYPES.TryStatement,
+    experimental_utils_1.AST_NODE_TYPES.UnaryExpression,
+    experimental_utils_1.AST_NODE_TYPES.UpdateExpression,
+    experimental_utils_1.AST_NODE_TYPES.VariableDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.VariableDeclarator,
+    experimental_utils_1.AST_NODE_TYPES.WhileStatement,
+    experimental_utils_1.AST_NODE_TYPES.WithStatement,
+    experimental_utils_1.AST_NODE_TYPES.YieldExpression,
+    experimental_utils_1.AST_NODE_TYPES.JSXIdentifier,
+    experimental_utils_1.AST_NODE_TYPES.JSXMemberExpression,
+    experimental_utils_1.AST_NODE_TYPES.JSXEmptyExpression,
+    experimental_utils_1.AST_NODE_TYPES.JSXExpressionContainer,
+    experimental_utils_1.AST_NODE_TYPES.JSXElement,
+    experimental_utils_1.AST_NODE_TYPES.JSXClosingElement,
+    experimental_utils_1.AST_NODE_TYPES.JSXOpeningElement,
+    experimental_utils_1.AST_NODE_TYPES.JSXAttribute,
+    experimental_utils_1.AST_NODE_TYPES.JSXSpreadAttribute,
+    experimental_utils_1.AST_NODE_TYPES.JSXText,
+    experimental_utils_1.AST_NODE_TYPES.ExportDefaultDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.ExportNamedDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.ExportAllDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.ExportSpecifier,
+    experimental_utils_1.AST_NODE_TYPES.ImportDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.ImportSpecifier,
+    experimental_utils_1.AST_NODE_TYPES.ImportDefaultSpecifier,
+    experimental_utils_1.AST_NODE_TYPES.ImportNamespaceSpecifier,
+    // Class properties aren't yet supported by eslint...
+    experimental_utils_1.AST_NODE_TYPES.ClassProperty,
+    // ts keywords
+    experimental_utils_1.AST_NODE_TYPES.TSAbstractKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSAnyKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSBooleanKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSNeverKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSNumberKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSStringKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSSymbolKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSUndefinedKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSUnknownKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSVoidKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSNullKeyword,
+    // ts specific nodes we want to support
+    experimental_utils_1.AST_NODE_TYPES.TSAbstractClassProperty,
+    experimental_utils_1.AST_NODE_TYPES.TSAbstractMethodDefinition,
+    experimental_utils_1.AST_NODE_TYPES.TSArrayType,
+    experimental_utils_1.AST_NODE_TYPES.TSAsExpression,
+    experimental_utils_1.AST_NODE_TYPES.TSCallSignatureDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSConditionalType,
+    experimental_utils_1.AST_NODE_TYPES.TSConstructorType,
+    experimental_utils_1.AST_NODE_TYPES.TSConstructSignatureDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSDeclareFunction,
+    experimental_utils_1.AST_NODE_TYPES.TSEmptyBodyFunctionExpression,
+    experimental_utils_1.AST_NODE_TYPES.TSEnumDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSEnumMember,
+    experimental_utils_1.AST_NODE_TYPES.TSExportAssignment,
+    experimental_utils_1.AST_NODE_TYPES.TSExternalModuleReference,
+    experimental_utils_1.AST_NODE_TYPES.TSFunctionType,
+    experimental_utils_1.AST_NODE_TYPES.TSImportType,
+    experimental_utils_1.AST_NODE_TYPES.TSIndexedAccessType,
+    experimental_utils_1.AST_NODE_TYPES.TSIndexSignature,
+    experimental_utils_1.AST_NODE_TYPES.TSInferType,
+    experimental_utils_1.AST_NODE_TYPES.TSInterfaceBody,
+    experimental_utils_1.AST_NODE_TYPES.TSInterfaceDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSInterfaceHeritage,
+    experimental_utils_1.AST_NODE_TYPES.TSIntersectionType,
+    experimental_utils_1.AST_NODE_TYPES.TSImportEqualsDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSLiteralType,
+    experimental_utils_1.AST_NODE_TYPES.TSMappedType,
+    experimental_utils_1.AST_NODE_TYPES.TSMethodSignature,
+    'TSMinusToken',
+    experimental_utils_1.AST_NODE_TYPES.TSModuleBlock,
+    experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSNonNullExpression,
+    experimental_utils_1.AST_NODE_TYPES.TSParameterProperty,
+    experimental_utils_1.AST_NODE_TYPES.TSParenthesizedType,
+    'TSPlusToken',
+    experimental_utils_1.AST_NODE_TYPES.TSPropertySignature,
+    experimental_utils_1.AST_NODE_TYPES.TSQualifiedName,
+    'TSQuestionToken',
+    experimental_utils_1.AST_NODE_TYPES.TSRestType,
+    experimental_utils_1.AST_NODE_TYPES.TSThisType,
+    experimental_utils_1.AST_NODE_TYPES.TSTupleType,
+    experimental_utils_1.AST_NODE_TYPES.TSTypeAnnotation,
+    experimental_utils_1.AST_NODE_TYPES.TSTypeLiteral,
+    experimental_utils_1.AST_NODE_TYPES.TSTypeOperator,
+    experimental_utils_1.AST_NODE_TYPES.TSTypeParameter,
+    experimental_utils_1.AST_NODE_TYPES.TSTypeParameterDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSTypeParameterInstantiation,
+    experimental_utils_1.AST_NODE_TYPES.TSTypeReference,
+    experimental_utils_1.AST_NODE_TYPES.TSUnionType,
+]);
+const STATEMENT_LIST_PARENTS = new Set([
+    experimental_utils_1.AST_NODE_TYPES.Program,
+    experimental_utils_1.AST_NODE_TYPES.BlockStatement,
+    experimental_utils_1.AST_NODE_TYPES.SwitchCase,
+]);
+const DEFAULT_VARIABLE_INDENT = 1;
+const DEFAULT_PARAMETER_INDENT = 1;
+const DEFAULT_FUNCTION_BODY_INDENT = 1;
+/*
+ * General rule strategy:
+ * 1. An OffsetStorage instance stores a map of desired offsets, where each token has a specified offset from another
+ *    specified token or to the first column.
+ * 2. As the AST is traversed, modify the desired offsets of tokens accordingly. For example, when entering a
+ *    BlockStatement, offset all of the tokens in the BlockStatement by 1 indent level from the opening curly
+ *    brace of the BlockStatement.
+ * 3. After traversing the AST, calculate the expected indentation levels of every token according to the
+ *    OffsetStorage container.
+ * 4. For each line, compare the expected indentation of the first token to the actual indentation in the file,
+ *    and report the token if the two values are not equal.
+ */
+const ELEMENT_LIST_SCHEMA = {
+    oneOf: [
+        {
+            type: 'integer',
+            minimum: 0,
+        },
+        {
+            enum: ['first', 'off'],
+        },
+    ],
+};
+exports.default = util_1.createRule({
+    name: 'indent',
+    meta: {
+        type: 'layout',
+        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,
+                        default: 0,
+                    },
+                    VariableDeclarator: {
+                        oneOf: [
+                            ELEMENT_LIST_SCHEMA,
+                            {
+                                type: 'object',
+                                properties: {
+                                    var: ELEMENT_LIST_SCHEMA,
+                                    let: ELEMENT_LIST_SCHEMA,
+                                    const: ELEMENT_LIST_SCHEMA,
+                                },
+                                additionalProperties: false,
+                            },
+                        ],
+                    },
+                    outerIIFEBody: {
+                        type: 'integer',
+                        minimum: 0,
+                    },
+                    MemberExpression: {
+                        oneOf: [
+                            {
+                                type: 'integer',
+                                minimum: 0,
+                            },
+                            {
+                                enum: ['off'],
+                            },
+                        ],
+                    },
+                    FunctionDeclaration: {
+                        type: 'object',
+                        properties: {
+                            parameters: ELEMENT_LIST_SCHEMA,
+                            body: {
+                                type: 'integer',
+                                minimum: 0,
+                            },
+                        },
+                        additionalProperties: false,
+                    },
+                    FunctionExpression: {
+                        type: 'object',
+                        properties: {
+                            parameters: ELEMENT_LIST_SCHEMA,
+                            body: {
+                                type: 'integer',
+                                minimum: 0,
+                            },
+                        },
+                        additionalProperties: false,
+                    },
+                    CallExpression: {
+                        type: 'object',
+                        properties: {
+                            arguments: ELEMENT_LIST_SCHEMA,
+                        },
+                        additionalProperties: false,
+                    },
+                    ArrayExpression: ELEMENT_LIST_SCHEMA,
+                    ObjectExpression: ELEMENT_LIST_SCHEMA,
+                    ImportDeclaration: ELEMENT_LIST_SCHEMA,
+                    flatTernaryExpressions: {
+                        type: 'boolean',
+                        default: false,
+                    },
+                    ignoredNodes: {
+                        type: 'array',
+                        items: {
+                            type: 'string',
+                            not: {
+                                pattern: ':exit$',
+                            },
+                        },
+                    },
+                    ignoreComments: {
+                        type: 'boolean',
+                        default: false,
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+        messages: {
+            wrongIndentation: 'Expected indentation of {{expected}} but found {{actual}}.',
+        },
+    },
+    defaultOptions: [
+        // typescript docs and playground use 4 space indent
+        4,
+        {
+            // typescript docs indent the case from the switch
+            // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-1-8.html#example-4
+            SwitchCase: 1,
+            VariableDeclarator: {
+                var: DEFAULT_VARIABLE_INDENT,
+                let: DEFAULT_VARIABLE_INDENT,
+                const: DEFAULT_VARIABLE_INDENT,
+            },
+            outerIIFEBody: 1,
+            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,
+            },
+            MemberExpression: 1,
+            ArrayExpression: 1,
+            ObjectExpression: 1,
+            ImportDeclaration: 1,
+            flatTernaryExpressions: false,
+            ignoredNodes: [],
+            ignoreComments: false,
+        },
+    ],
+    create(context, [userIndent, userOptions]) {
+        const indentType = userIndent === 'tab' ? 'tab' : 'space';
+        const indentSize = userIndent === 'tab' ? 1 : userIndent;
+        const options = userOptions;
+        if (typeof userOptions.VariableDeclarator === 'number' ||
+            userOptions.VariableDeclarator === 'first') {
+            // typescript doesn't narrow the type for some reason
+            options.VariableDeclarator = {
+                var: userOptions.VariableDeclarator,
+                let: userOptions.VariableDeclarator,
+                const: userOptions.VariableDeclarator,
+            };
+        }
+        const sourceCode = context.getSourceCode();
+        const tokenInfo = new TokenInfo_1.TokenInfo(sourceCode);
+        const offsets = new OffsetStorage_1.OffsetStorage(tokenInfo, indentSize, indentType === 'space' ? ' ' : '\t');
+        const parameterParens = new WeakSet();
+        /**
+         * Creates an error message for a line, given the expected/actual indentation.
+         * @param expectedAmount The expected amount of indentation characters for this line
+         * @param actualSpaces The actual number of indentation spaces that were found on this line
+         * @param actualTabs The actual number of indentation tabs that were found on this line
+         * @returns An error message for this line
+         */
+        function createErrorMessageData(expectedAmount, actualSpaces, actualTabs) {
+            const expectedStatement = `${expectedAmount} ${indentType}${expectedAmount === 1 ? '' : 's'}`; // e.g. "2 tabs"
+            const foundSpacesWord = `space${actualSpaces === 1 ? '' : 's'}`; // e.g. "space"
+            const foundTabsWord = `tab${actualTabs === 1 ? '' : 's'}`; // e.g. "tabs"
+            let foundStatement;
+            if (actualSpaces > 0) {
+                /*
+                 * Abbreviate the message if the expected indentation is also spaces.
+                 * e.g. 'Expected 4 spaces but found 2' rather than 'Expected 4 spaces but found 2 spaces'
+                 */
+                foundStatement =
+                    indentType === 'space'
+                        ? actualSpaces
+                        : `${actualSpaces} ${foundSpacesWord}`;
+            }
+            else if (actualTabs > 0) {
+                foundStatement =
+                    indentType === 'tab' ? actualTabs : `${actualTabs} ${foundTabsWord}`;
+            }
+            else {
+                foundStatement = '0';
+            }
+            return {
+                expected: expectedStatement,
+                actual: foundStatement,
+            };
+        }
+        /**
+         * Reports a given indent violation
+         * @param token Token violating the indent rule
+         * @param neededIndent Expected indentation string
+         */
+        function report(token, neededIndent) {
+            const actualIndent = Array.from(tokenInfo.getTokenIndent(token));
+            const numSpaces = actualIndent.filter(char => char === ' ').length;
+            const numTabs = actualIndent.filter(char => char === '\t').length;
+            context.report({
+                node: token,
+                messageId: 'wrongIndentation',
+                data: createErrorMessageData(neededIndent.length, numSpaces, numTabs),
+                loc: {
+                    start: { line: token.loc.start.line, column: 0 },
+                    end: { line: token.loc.start.line, column: token.loc.start.column },
+                },
+                fix(fixer) {
+                    return fixer.replaceTextRange([token.range[0] - token.loc.start.column, token.range[0]], neededIndent);
+                },
+            });
+        }
+        /**
+         * Checks if a token's indentation is correct
+         * @param token Token to examine
+         * @param desiredIndent Desired indentation of the string
+         * @returns `true` if the token's indentation is correct
+         */
+        function validateTokenIndent(token, desiredIndent) {
+            const indentation = tokenInfo.getTokenIndent(token);
+            return (indentation === desiredIndent ||
+                // To avoid conflicts with no-mixed-spaces-and-tabs, don't report mixed spaces and tabs.
+                (indentation.includes(' ') && indentation.includes('\t')));
+        }
+        /**
+         * Check to see if the node is a file level IIFE
+         * @param node The function node to check.
+         * @returns True if the node is the outer IIFE
+         */
+        function isOuterIIFE(node) {
+            var _a;
+            /*
+             * Verify that the node is an IIFE
+             */
+            if (!node.parent ||
+                node.parent.type !== experimental_utils_1.AST_NODE_TYPES.CallExpression ||
+                node.parent.callee !== node) {
+                return false;
+            }
+            /*
+             * Navigate legal ancestors to determine whether this IIFE is outer.
+             * A "legal ancestor" is an expression or statement that causes the function to get executed immediately.
+             * For example, `!(function(){})()` is an outer IIFE even though it is preceded by a ! operator.
+             */
+            let statement = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent;
+            while (statement &&
+                ((statement.type === experimental_utils_1.AST_NODE_TYPES.UnaryExpression &&
+                    ['!', '~', '+', '-'].includes(statement.operator)) ||
+                    statement.type === experimental_utils_1.AST_NODE_TYPES.AssignmentExpression ||
+                    statement.type === experimental_utils_1.AST_NODE_TYPES.LogicalExpression ||
+                    statement.type === experimental_utils_1.AST_NODE_TYPES.SequenceExpression ||
+                    statement.type === experimental_utils_1.AST_NODE_TYPES.VariableDeclarator)) {
+                statement = statement.parent;
+            }
+            return (!!statement &&
+                (statement.type === experimental_utils_1.AST_NODE_TYPES.ExpressionStatement ||
+                    statement.type === experimental_utils_1.AST_NODE_TYPES.VariableDeclaration) &&
+                !!statement.parent &&
+                statement.parent.type === experimental_utils_1.AST_NODE_TYPES.Program);
+        }
+        /**
+         * Counts the number of linebreaks that follow the last non-whitespace character in a string
+         * @param str The string to check
+         * @returns The number of JavaScript linebreaks that follow the last non-whitespace character,
+         *          or the total number of linebreaks if the string is all whitespace.
+         */
+        function countTrailingLinebreaks(str) {
+            const trailingWhitespace = WHITESPACE_REGEX.exec(str)[0];
+            const linebreakMatches = GLOBAL_LINEBREAK_REGEX.exec(trailingWhitespace);
+            return linebreakMatches === null ? 0 : linebreakMatches.length;
+        }
+        /**
+         * Check indentation for lists of elements (arrays, objects, function params)
+         * @param elements List of elements that should be offset
+         * @param startToken The start token of the list that element should be aligned against, e.g. '['
+         * @param endToken The end token of the list, e.g. ']'
+         * @param offset The amount that the elements should be offset
+         */
+        function addElementListIndent(elements, startToken, endToken, offset) {
+            /**
+             * Gets the first token of a given element, including surrounding parentheses.
+             * @param element A node in the `elements` list
+             * @returns The first token of this element
+             */
+            function getFirstToken(element) {
+                let token = sourceCode.getTokenBefore(element);
+                while (util_1.isOpeningParenToken(token) && token !== startToken) {
+                    token = sourceCode.getTokenBefore(token);
+                }
+                return sourceCode.getTokenAfter(token);
+            }
+            // Run through all the tokens in the list, and offset them by one indent level (mainly for comments, other things will end up overridden)
+            offsets.setDesiredOffsets([startToken.range[1], endToken.range[0]], startToken, typeof offset === 'number' ? offset : 1);
+            offsets.setDesiredOffset(endToken, startToken, 0);
+            // If the preference is "first" but there is no first element (e.g. sparse arrays w/ empty first slot), fall back to 1 level.
+            const firstElement = elements[0];
+            if (offset === 'first' && elements.length && !firstElement) {
+                return;
+            }
+            elements.forEach((element, index) => {
+                if (!element) {
+                    // Skip holes in arrays
+                    return;
+                }
+                if (offset === 'off') {
+                    // Ignore the first token of every element if the "off" option is used
+                    offsets.ignoreToken(getFirstToken(element));
+                }
+                // Offset the following elements correctly relative to the first element
+                if (index === 0) {
+                    return;
+                }
+                if (offset === 'first' &&
+                    tokenInfo.isFirstTokenOfLine(getFirstToken(element))) {
+                    offsets.matchOffsetOf(getFirstToken(firstElement), getFirstToken(element));
+                }
+                else {
+                    const previousElement = elements[index - 1];
+                    const firstTokenOfPreviousElement = previousElement && getFirstToken(previousElement);
+                    const previousElementLastToken = previousElement && sourceCode.getLastToken(previousElement);
+                    if (previousElement &&
+                        previousElementLastToken &&
+                        previousElementLastToken.loc.end.line -
+                            countTrailingLinebreaks(previousElementLastToken.value) >
+                            startToken.loc.end.line) {
+                        offsets.setDesiredOffsets([previousElement.range[1], element.range[1]], firstTokenOfPreviousElement, 0);
+                    }
+                }
+            });
+        }
+        /**
+         * Check and decide whether to check for indentation for blockless nodes
+         * Scenarios are for or while statements without braces around them
+         */
+        function addBlocklessNodeIndent(node) {
+            if (node.type !== experimental_utils_1.AST_NODE_TYPES.BlockStatement) {
+                const lastParentToken = sourceCode.getTokenBefore(node, util_1.isNotOpeningParenToken);
+                let firstBodyToken = sourceCode.getFirstToken(node);
+                let lastBodyToken = sourceCode.getLastToken(node);
+                while (util_1.isOpeningParenToken(sourceCode.getTokenBefore(firstBodyToken)) &&
+                    util_1.isClosingParenToken(sourceCode.getTokenAfter(lastBodyToken))) {
+                    firstBodyToken = sourceCode.getTokenBefore(firstBodyToken);
+                    lastBodyToken = sourceCode.getTokenAfter(lastBodyToken);
+                }
+                offsets.setDesiredOffsets([firstBodyToken.range[0], lastBodyToken.range[1]], lastParentToken, 1);
+                /*
+                 * For blockless nodes with semicolon-first style, don't indent the semicolon.
+                 * e.g.
+                 * if (foo) bar()
+                 * ; [1, 2, 3].map(foo)
+                 */
+                const lastToken = sourceCode.getLastToken(node);
+                if (lastToken &&
+                    node.type !== experimental_utils_1.AST_NODE_TYPES.EmptyStatement &&
+                    util_1.isSemicolonToken(lastToken)) {
+                    offsets.setDesiredOffset(lastToken, lastParentToken, 0);
+                }
+            }
+        }
+        /**
+         * Checks the indentation for nodes that are like function calls
+         */
+        function addFunctionCallIndent(node) {
+            const openingParen = node.arguments.length
+                ? sourceCode.getFirstTokenBetween(node.callee, node.arguments[0], util_1.isOpeningParenToken)
+                : sourceCode.getLastToken(node, 1);
+            const closingParen = sourceCode.getLastToken(node);
+            parameterParens.add(openingParen);
+            parameterParens.add(closingParen);
+            offsets.setDesiredOffset(openingParen, sourceCode.getTokenBefore(openingParen), 0);
+            addElementListIndent(node.arguments, openingParen, closingParen, options.CallExpression.arguments);
+        }
+        /**
+         * Checks the indentation of parenthesized values, given a list of tokens in a program
+         * @param tokens A list of tokens
+         */
+        function addParensIndent(tokens) {
+            const parenStack = [];
+            const parenPairs = [];
+            tokens.forEach(nextToken => {
+                // Accumulate a list of parenthesis pairs
+                if (util_1.isOpeningParenToken(nextToken)) {
+                    parenStack.push(nextToken);
+                }
+                else if (util_1.isClosingParenToken(nextToken)) {
+                    parenPairs.unshift({ left: parenStack.pop(), right: nextToken });
+                }
+            });
+            parenPairs.forEach(pair => {
+                const leftParen = pair.left;
+                const rightParen = pair.right;
+                // We only want to handle parens around expressions, so exclude parentheses that are in function parameters and function call arguments.
+                if (!parameterParens.has(leftParen) &&
+                    !parameterParens.has(rightParen)) {
+                    const parenthesizedTokens = new Set(sourceCode.getTokensBetween(leftParen, rightParen));
+                    parenthesizedTokens.forEach(token => {
+                        if (!parenthesizedTokens.has(offsets.getFirstDependency(token))) {
+                            offsets.setDesiredOffset(token, leftParen, 1);
+                        }
+                    });
+                }
+                offsets.setDesiredOffset(rightParen, leftParen, 0);
+            });
+        }
+        /**
+         * Ignore all tokens within an unknown node whose offset do not depend
+         * on another token's offset within the unknown node
+         */
+        function ignoreNode(node) {
+            const unknownNodeTokens = new Set(sourceCode.getTokens(node, { includeComments: true }));
+            unknownNodeTokens.forEach(token => {
+                if (!unknownNodeTokens.has(offsets.getFirstDependency(token))) {
+                    const firstTokenOfLine = tokenInfo.getFirstTokenOfLine(token);
+                    if (token === firstTokenOfLine) {
+                        offsets.ignoreToken(token);
+                    }
+                    else {
+                        offsets.setDesiredOffset(token, firstTokenOfLine, 0);
+                    }
+                }
+            });
+        }
+        /**
+         * Check whether the given token is on the first line of a statement.
+         * @param leafNode The expression node that the token belongs directly.
+         * @returns `true` if the token is on the first line of a statement.
+         */
+        function isOnFirstLineOfStatement(token, leafNode) {
+            let node = leafNode;
+            while (node.parent &&
+                !node.parent.type.endsWith('Statement') &&
+                !node.parent.type.endsWith('Declaration')) {
+                node = node.parent;
+            }
+            node = node.parent;
+            return !node || node.loc.start.line === token.loc.start.line;
+        }
+        /**
+         * Check whether there are any blank (whitespace-only) lines between
+         * two tokens on separate lines.
+         * @returns `true` if the tokens are on separate lines and
+         *   there exists a blank line between them, `false` otherwise.
+         */
+        function hasBlankLinesBetween(firstToken, secondToken) {
+            const firstTokenLine = firstToken.loc.end.line;
+            const secondTokenLine = secondToken.loc.start.line;
+            if (firstTokenLine === secondTokenLine ||
+                firstTokenLine === secondTokenLine - 1) {
+                return false;
+            }
+            for (let line = firstTokenLine + 1; line < secondTokenLine; ++line) {
+                if (!tokenInfo.firstTokensByLineNumber.has(line)) {
+                    return true;
+                }
+            }
+            return false;
+        }
+        const ignoredNodeFirstTokens = new Set();
+        const baseOffsetListeners = {
+            'ArrayExpression, ArrayPattern'(node) {
+                var _a;
+                const openingBracket = sourceCode.getFirstToken(node);
+                const closingBracket = sourceCode.getTokenAfter((_a = node.elements[node.elements.length - 1]) !== null && _a !== void 0 ? _a : openingBracket, util_1.isClosingBracketToken);
+                addElementListIndent(node.elements, openingBracket, closingBracket, options.ArrayExpression);
+            },
+            ArrowFunctionExpression(node) {
+                const firstToken = sourceCode.getFirstToken(node);
+                if (util_1.isOpeningParenToken(firstToken)) {
+                    const openingParen = firstToken;
+                    const closingParen = sourceCode.getTokenBefore(node.body, util_1.isClosingParenToken);
+                    parameterParens.add(openingParen);
+                    parameterParens.add(closingParen);
+                    addElementListIndent(node.params, openingParen, closingParen, options.FunctionExpression.parameters);
+                }
+                addBlocklessNodeIndent(node.body);
+            },
+            AssignmentExpression(node) {
+                const operator = sourceCode.getFirstTokenBetween(node.left, node.right, token => token.value === node.operator);
+                offsets.setDesiredOffsets([operator.range[0], node.range[1]], sourceCode.getLastToken(node.left), 1);
+                offsets.ignoreToken(operator);
+                offsets.ignoreToken(sourceCode.getTokenAfter(operator));
+            },
+            'BinaryExpression, LogicalExpression'(node) {
+                const operator = sourceCode.getFirstTokenBetween(node.left, node.right, token => token.value === node.operator);
+                /*
+                 * For backwards compatibility, don't check BinaryExpression indents, e.g.
+                 * var foo = bar &&
+                 *                   baz;
+                 */
+                const tokenAfterOperator = sourceCode.getTokenAfter(operator);
+                offsets.ignoreToken(operator);
+                offsets.ignoreToken(tokenAfterOperator);
+                offsets.setDesiredOffset(tokenAfterOperator, operator, 0);
+            },
+            'BlockStatement, ClassBody'(node) {
+                let blockIndentLevel;
+                if (node.parent && isOuterIIFE(node.parent)) {
+                    blockIndentLevel = options.outerIIFEBody;
+                }
+                else if (node.parent &&
+                    (node.parent.type === experimental_utils_1.AST_NODE_TYPES.FunctionExpression ||
+                        node.parent.type === experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression)) {
+                    blockIndentLevel = options.FunctionExpression.body;
+                }
+                else if (node.parent &&
+                    node.parent.type === experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration) {
+                    blockIndentLevel = options.FunctionDeclaration.body;
+                }
+                else {
+                    blockIndentLevel = 1;
+                }
+                /*
+                 * For blocks that aren't lone statements, ensure that the opening curly brace
+                 * is aligned with the parent.
+                 */
+                if (node.parent && !STATEMENT_LIST_PARENTS.has(node.parent.type)) {
+                    offsets.setDesiredOffset(sourceCode.getFirstToken(node), sourceCode.getFirstToken(node.parent), 0);
+                }
+                addElementListIndent(node.body, sourceCode.getFirstToken(node), sourceCode.getLastToken(node), blockIndentLevel);
+            },
+            CallExpression: addFunctionCallIndent,
+            'ClassDeclaration[superClass], ClassExpression[superClass]'(node) {
+                const classToken = sourceCode.getFirstToken(node);
+                const extendsToken = sourceCode.getTokenBefore(node.superClass, util_1.isNotOpeningParenToken);
+                offsets.setDesiredOffsets([extendsToken.range[0], node.body.range[0]], classToken, 1);
+            },
+            ConditionalExpression(node) {
+                const firstToken = sourceCode.getFirstToken(node);
+                // `flatTernaryExpressions` option is for the following style:
+                // var a =
+                //     foo > 0 ? bar :
+                //     foo < 0 ? baz :
+                //     /*else*/ qiz ;
+                if (!options.flatTernaryExpressions ||
+                    node.test.loc.end.line !== node.consequent.loc.start.line ||
+                    isOnFirstLineOfStatement(firstToken, node)) {
+                    const questionMarkToken = sourceCode.getFirstTokenBetween(node.test, node.consequent, token => token.type === experimental_utils_1.AST_TOKEN_TYPES.Punctuator && token.value === '?');
+                    const colonToken = sourceCode.getFirstTokenBetween(node.consequent, node.alternate, token => token.type === experimental_utils_1.AST_TOKEN_TYPES.Punctuator && token.value === ':');
+                    const firstConsequentToken = sourceCode.getTokenAfter(questionMarkToken);
+                    const lastConsequentToken = sourceCode.getTokenBefore(colonToken);
+                    const firstAlternateToken = sourceCode.getTokenAfter(colonToken);
+                    offsets.setDesiredOffset(questionMarkToken, firstToken, 1);
+                    offsets.setDesiredOffset(colonToken, firstToken, 1);
+                    offsets.setDesiredOffset(firstConsequentToken, firstToken, 1);
+                    /*
+                     * The alternate and the consequent should usually have the same indentation.
+                     * If they share part of a line, align the alternate against the first token of the consequent.
+                     * This allows the alternate to be indented correctly in cases like this:
+                     * foo ? (
+                     *   bar
+                     * ) : ( // this '(' is aligned with the '(' above, so it's considered to be aligned with `foo`
+                     *   baz // as a result, `baz` is offset by 1 rather than 2
+                     * )
+                     */
+                    if (lastConsequentToken.loc.end.line ===
+                        firstAlternateToken.loc.start.line) {
+                        offsets.setDesiredOffset(firstAlternateToken, firstConsequentToken, 0);
+                    }
+                    else {
+                        /**
+                         * If the alternate and consequent do not share part of a line, offset the alternate from the first
+                         * token of the conditional expression. For example:
+                         * foo ? bar
+                         *   : baz
+                         *
+                         * If `baz` were aligned with `bar` rather than being offset by 1 from `foo`, `baz` would end up
+                         * having no expected indentation.
+                         */
+                        offsets.setDesiredOffset(firstAlternateToken, firstToken, 1);
+                    }
+                }
+            },
+            'DoWhileStatement, WhileStatement, ForInStatement, ForOfStatement': (node) => {
+                addBlocklessNodeIndent(node.body);
+            },
+            ExportNamedDeclaration(node) {
+                if (node.declaration === null) {
+                    const closingCurly = sourceCode.getLastToken(node, util_1.isClosingBraceToken);
+                    // Indent the specifiers in `export {foo, bar, baz}`
+                    addElementListIndent(node.specifiers, sourceCode.getFirstToken(node, { skip: 1 }), closingCurly, 1);
+                    if (node.source) {
+                        // Indent everything after and including the `from` token in `export {foo, bar, baz} from 'qux'`
+                        offsets.setDesiredOffsets([closingCurly.range[1], node.range[1]], sourceCode.getFirstToken(node), 1);
+                    }
+                }
+            },
+            ForStatement(node) {
+                const forOpeningParen = sourceCode.getFirstToken(node, 1);
+                if (node.init) {
+                    offsets.setDesiredOffsets(node.init.range, forOpeningParen, 1);
+                }
+                if (node.test) {
+                    offsets.setDesiredOffsets(node.test.range, forOpeningParen, 1);
+                }
+                if (node.update) {
+                    offsets.setDesiredOffsets(node.update.range, forOpeningParen, 1);
+                }
+                addBlocklessNodeIndent(node.body);
+            },
+            'FunctionDeclaration, FunctionExpression'(node) {
+                const closingParen = sourceCode.getTokenBefore(node.body);
+                const openingParen = sourceCode.getTokenBefore(node.params.length ? node.params[0] : closingParen);
+                parameterParens.add(openingParen);
+                parameterParens.add(closingParen);
+                addElementListIndent(node.params, openingParen, closingParen, options[node.type].parameters);
+            },
+            IfStatement(node) {
+                addBlocklessNodeIndent(node.consequent);
+                if (node.alternate &&
+                    node.alternate.type !== experimental_utils_1.AST_NODE_TYPES.IfStatement) {
+                    addBlocklessNodeIndent(node.alternate);
+                }
+            },
+            ImportDeclaration(node) {
+                if (node.specifiers.some(specifier => specifier.type === experimental_utils_1.AST_NODE_TYPES.ImportSpecifier)) {
+                    const openingCurly = sourceCode.getFirstToken(node, util_1.isOpeningBraceToken);
+                    const closingCurly = sourceCode.getLastToken(node, util_1.isClosingBraceToken);
+                    addElementListIndent(node.specifiers.filter(specifier => specifier.type === experimental_utils_1.AST_NODE_TYPES.ImportSpecifier), openingCurly, closingCurly, options.ImportDeclaration);
+                }
+                const fromToken = sourceCode.getLastToken(node, token => token.type === experimental_utils_1.AST_TOKEN_TYPES.Identifier && token.value === 'from');
+                const sourceToken = sourceCode.getLastToken(node, token => token.type === experimental_utils_1.AST_TOKEN_TYPES.String);
+                const semiToken = sourceCode.getLastToken(node, token => token.type === experimental_utils_1.AST_TOKEN_TYPES.Punctuator && token.value === ';');
+                if (fromToken) {
+                    const end = semiToken && semiToken.range[1] === sourceToken.range[1]
+                        ? node.range[1]
+                        : sourceToken.range[1];
+                    offsets.setDesiredOffsets([fromToken.range[0], end], sourceCode.getFirstToken(node), 1);
+                }
+            },
+            'MemberExpression, JSXMemberExpression, MetaProperty'(node) {
+                const object = node.type === experimental_utils_1.AST_NODE_TYPES.MetaProperty ? node.meta : node.object;
+                const isComputed = 'computed' in node && node.computed;
+                const firstNonObjectToken = sourceCode.getFirstTokenBetween(object, node.property, util_1.isNotClosingParenToken);
+                const secondNonObjectToken = sourceCode.getTokenAfter(firstNonObjectToken);
+                const objectParenCount = sourceCode.getTokensBetween(object, node.property, { filter: util_1.isClosingParenToken }).length;
+                const firstObjectToken = objectParenCount
+                    ? sourceCode.getTokenBefore(object, { skip: objectParenCount - 1 })
+                    : sourceCode.getFirstToken(object);
+                const lastObjectToken = sourceCode.getTokenBefore(firstNonObjectToken);
+                const firstPropertyToken = isComputed
+                    ? firstNonObjectToken
+                    : secondNonObjectToken;
+                if (isComputed) {
+                    // For computed MemberExpressions, match the closing bracket with the opening bracket.
+                    offsets.setDesiredOffset(sourceCode.getLastToken(node), firstNonObjectToken, 0);
+                    offsets.setDesiredOffsets(node.property.range, firstNonObjectToken, 1);
+                }
+                /*
+                 * If the object ends on the same line that the property starts, match against the last token
+                 * of the object, to ensure that the MemberExpression is not indented.
+                 *
+                 * Otherwise, match against the first token of the object, e.g.
+                 * foo
+                 *   .bar
+                 *   .baz // <-- offset by 1 from `foo`
+                 */
+                const offsetBase = lastObjectToken.loc.end.line === firstPropertyToken.loc.start.line
+                    ? lastObjectToken
+                    : firstObjectToken;
+                if (typeof options.MemberExpression === 'number') {
+                    // Match the dot (for non-computed properties) or the opening bracket (for computed properties) against the object.
+                    offsets.setDesiredOffset(firstNonObjectToken, offsetBase, options.MemberExpression);
+                    /*
+                     * For computed MemberExpressions, match the first token of the property against the opening bracket.
+                     * Otherwise, match the first token of the property against the object.
+                     */
+                    offsets.setDesiredOffset(secondNonObjectToken, isComputed ? firstNonObjectToken : offsetBase, options.MemberExpression);
+                }
+                else {
+                    // If the MemberExpression option is off, ignore the dot and the first token of the property.
+                    offsets.ignoreToken(firstNonObjectToken);
+                    offsets.ignoreToken(secondNonObjectToken);
+                    // To ignore the property indentation, ensure that the property tokens depend on the ignored tokens.
+                    offsets.setDesiredOffset(firstNonObjectToken, offsetBase, 0);
+                    offsets.setDesiredOffset(secondNonObjectToken, firstNonObjectToken, 0);
+                }
+            },
+            NewExpression(node) {
+                // Only indent the arguments if the NewExpression has parens (e.g. `new Foo(bar)` or `new Foo()`, but not `new Foo`
+                if (node.arguments.length > 0 ||
+                    (util_1.isClosingParenToken(sourceCode.getLastToken(node)) &&
+                        util_1.isOpeningParenToken(sourceCode.getLastToken(node, 1)))) {
+                    addFunctionCallIndent(node);
+                }
+            },
+            'ObjectExpression, ObjectPattern'(node) {
+                const openingCurly = sourceCode.getFirstToken(node);
+                const closingCurly = sourceCode.getTokenAfter(node.properties.length
+                    ? node.properties[node.properties.length - 1]
+                    : openingCurly, util_1.isClosingBraceToken);
+                addElementListIndent(node.properties, openingCurly, closingCurly, options.ObjectExpression);
+            },
+            Property(node) {
+                if (!node.shorthand && !node.method && node.kind === 'init') {
+                    const colon = sourceCode.getFirstTokenBetween(node.key, node.value, util_1.isColonToken);
+                    offsets.ignoreToken(sourceCode.getTokenAfter(colon));
+                }
+            },
+            SwitchStatement(node) {
+                const openingCurly = sourceCode.getTokenAfter(node.discriminant, util_1.isOpeningBraceToken);
+                const closingCurly = sourceCode.getLastToken(node);
+                offsets.setDesiredOffsets([openingCurly.range[1], closingCurly.range[0]], openingCurly, options.SwitchCase);
+                if (node.cases.length) {
+                    sourceCode
+                        .getTokensBetween(node.cases[node.cases.length - 1], closingCurly, {
+                        includeComments: true,
+                        filter: util_1.isCommentToken,
+                    })
+                        .forEach(token => offsets.ignoreToken(token));
+                }
+            },
+            SwitchCase(node) {
+                if (!(node.consequent.length === 1 &&
+                    node.consequent[0].type === experimental_utils_1.AST_NODE_TYPES.BlockStatement)) {
+                    const caseKeyword = sourceCode.getFirstToken(node);
+                    const tokenAfterCurrentCase = sourceCode.getTokenAfter(node);
+                    offsets.setDesiredOffsets([caseKeyword.range[1], tokenAfterCurrentCase.range[0]], caseKeyword, 1);
+                }
+            },
+            TemplateLiteral(node) {
+                node.expressions.forEach((_, index) => {
+                    const previousQuasi = node.quasis[index];
+                    const nextQuasi = node.quasis[index + 1];
+                    const tokenToAlignFrom = previousQuasi.loc.start.line === previousQuasi.loc.end.line
+                        ? sourceCode.getFirstToken(previousQuasi)
+                        : null;
+                    offsets.setDesiredOffsets([previousQuasi.range[1], nextQuasi.range[0]], tokenToAlignFrom, 1);
+                    offsets.setDesiredOffset(sourceCode.getFirstToken(nextQuasi), tokenToAlignFrom, 0);
+                });
+            },
+            VariableDeclaration(node) {
+                if (node.declarations.length === 0) {
+                    return;
+                }
+                let variableIndent = Object.prototype.hasOwnProperty.call(options.VariableDeclarator, node.kind)
+                    ? options.VariableDeclarator[node.kind]
+                    : DEFAULT_VARIABLE_INDENT;
+                const firstToken = sourceCode.getFirstToken(node);
+                const lastToken = sourceCode.getLastToken(node);
+                if (variableIndent === 'first') {
+                    if (node.declarations.length > 1) {
+                        addElementListIndent(node.declarations, firstToken, lastToken, 'first');
+                        return;
+                    }
+                    variableIndent = DEFAULT_VARIABLE_INDENT;
+                }
+                if (node.declarations[node.declarations.length - 1].loc.start.line >
+                    node.loc.start.line) {
+                    /*
+                     * VariableDeclarator indentation is a bit different from other forms of indentation, in that the
+                     * indentation of an opening bracket sometimes won't match that of a closing bracket. For example,
+                     * the following indentations are correct:
+                     *
+                     * var foo = {
+                     *   ok: true
+                     * };
+                     *
+                     * var foo = {
+                     *     ok: true,
+                     *   },
+                     *   bar = 1;
+                     *
+                     * Account for when exiting the AST (after indentations have already been set for the nodes in
+                     * the declaration) by manually increasing the indentation level of the tokens in this declarator
+                     * on the same line as the start of the declaration, provided that there are declarators that
+                     * follow this one.
+                     */
+                    offsets.setDesiredOffsets(node.range, firstToken, variableIndent, true);
+                }
+                else {
+                    offsets.setDesiredOffsets(node.range, firstToken, variableIndent);
+                }
+                if (util_1.isSemicolonToken(lastToken)) {
+                    offsets.ignoreToken(lastToken);
+                }
+            },
+            VariableDeclarator(node) {
+                if (node.init) {
+                    const equalOperator = sourceCode.getTokenBefore(node.init, util_1.isNotOpeningParenToken);
+                    const tokenAfterOperator = sourceCode.getTokenAfter(equalOperator);
+                    offsets.ignoreToken(equalOperator);
+                    offsets.ignoreToken(tokenAfterOperator);
+                    offsets.setDesiredOffsets([tokenAfterOperator.range[0], node.range[1]], equalOperator, 1);
+                    offsets.setDesiredOffset(equalOperator, sourceCode.getLastToken(node.id), 0);
+                }
+            },
+            'JSXAttribute[value]'(node) {
+                const nodeValue = node.value;
+                const equalsToken = sourceCode.getFirstTokenBetween(node.name, nodeValue, token => token.type === experimental_utils_1.AST_TOKEN_TYPES.Punctuator && token.value === '=');
+                offsets.setDesiredOffsets([equalsToken.range[0], nodeValue.range[1]], sourceCode.getFirstToken(node.name), 1);
+            },
+            JSXElement(node) {
+                if (node.closingElement) {
+                    addElementListIndent(node.children, sourceCode.getFirstToken(node.openingElement), sourceCode.getFirstToken(node.closingElement), 1);
+                }
+            },
+            JSXOpeningElement(node) {
+                const firstToken = sourceCode.getFirstToken(node);
+                let closingToken;
+                if (node.selfClosing) {
+                    closingToken = sourceCode.getLastToken(node, { skip: 1 });
+                    offsets.setDesiredOffset(sourceCode.getLastToken(node), closingToken, 0);
+                }
+                else {
+                    closingToken = sourceCode.getLastToken(node);
+                }
+                offsets.setDesiredOffsets(node.name.range, sourceCode.getFirstToken(node));
+                addElementListIndent(node.attributes, firstToken, closingToken, 1);
+            },
+            JSXClosingElement(node) {
+                const firstToken = sourceCode.getFirstToken(node);
+                offsets.setDesiredOffsets(node.name.range, firstToken, 1);
+            },
+            JSXExpressionContainer(node) {
+                const openingCurly = sourceCode.getFirstToken(node);
+                const closingCurly = sourceCode.getLastToken(node);
+                offsets.setDesiredOffsets([openingCurly.range[1], closingCurly.range[0]], openingCurly, 1);
+            },
+            '*'(node) {
+                const firstToken = sourceCode.getFirstToken(node);
+                // Ensure that the children of every node are indented at least as much as the first token.
+                if (firstToken && !ignoredNodeFirstTokens.has(firstToken)) {
+                    offsets.setDesiredOffsets(node.range, firstToken, 0);
+                }
+            },
+        };
+        const listenerCallQueue = [];
+        /*
+         * To ignore the indentation of a node:
+         * 1. Don't call the node's listener when entering it (if it has a listener)
+         * 2. Don't set any offsets against the first token of the node.
+         * 3. Call `ignoreNode` on the node sometime after exiting it and before validating offsets.
+         */
+        const offsetListeners = Object.keys(baseOffsetListeners).reduce(
+        /*
+         * Offset listener calls are deferred until traversal is finished, and are called as
+         * part of the final `Program:exit` listener. This is necessary because a node might
+         * be matched by multiple selectors.
+         *
+         * Example: Suppose there is an offset listener for `Identifier`, and the user has
+         * specified in configuration that `MemberExpression > Identifier` should be ignored.
+         * Due to selector specificity rules, the `Identifier` listener will get called first. However,
+         * if a given Identifier node is supposed to be ignored, then the `Identifier` offset listener
+         * should not have been called at all. Without doing extra selector matching, we don't know
+         * whether the Identifier matches the `MemberExpression > Identifier` selector until the
+         * `MemberExpression > Identifier` listener is called.
+         *
+         * To avoid this, the `Identifier` listener isn't called until traversal finishes and all
+         * ignored nodes are known.
+         */
+        (acc, key) => {
+            const listener = baseOffsetListeners[key];
+            // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
+            acc[key] = node => listenerCallQueue.push({ listener, node });
+            return acc;
+        }, {});
+        // For each ignored node selector, set up a listener to collect it into the `ignoredNodes` set.
+        const ignoredNodes = new Set();
+        /**
+         * Ignores a node
+         * @param node The node to ignore
+         */
+        function addToIgnoredNodes(node) {
+            ignoredNodes.add(node);
+            ignoredNodeFirstTokens.add(sourceCode.getFirstToken(node));
+        }
+        const ignoredNodeListeners = options.ignoredNodes.reduce((listeners, ignoredSelector) => Object.assign(listeners, { [ignoredSelector]: addToIgnoredNodes }), {});
+        /*
+         * Join the listeners, and add a listener to verify that all tokens actually have the correct indentation
+         * at the end.
+         *
+         * Using Object.assign will cause some offset listeners to be overwritten if the same selector also appears
+         * in `ignoredNodeListeners`. This isn't a problem because all of the matching nodes will be ignored,
+         * so those listeners wouldn't be called anyway.
+         */
+        return Object.assign(offsetListeners, ignoredNodeListeners, {
+            '*:exit'(node) {
+                // If a node's type is nonstandard, we can't tell how its children should be offset, so ignore it.
+                if (!KNOWN_NODES.has(node.type)) {
+                    addToIgnoredNodes(node);
+                }
+            },
+            'Program:exit'() {
+                // If ignoreComments option is enabled, ignore all comment tokens.
+                if (options.ignoreComments) {
+                    sourceCode
+                        .getAllComments()
+                        .forEach(comment => offsets.ignoreToken(comment));
+                }
+                // Invoke the queued offset listeners for the nodes that aren't ignored.
+                listenerCallQueue
+                    .filter(nodeInfo => !ignoredNodes.has(nodeInfo.node))
+                    .forEach(nodeInfo => nodeInfo.listener(nodeInfo.node));
+                // Update the offsets for ignored nodes to prevent their child tokens from being reported.
+                ignoredNodes.forEach(ignoreNode);
+                addParensIndent(sourceCode.ast.tokens);
+                /*
+                 * Create a Map from (tokenOrComment) => (precedingToken).
+                 * This is necessary because sourceCode.getTokenBefore does not handle a comment as an argument correctly.
+                 */
+                const precedingTokens = sourceCode.ast.comments.reduce((commentMap, comment) => {
+                    const tokenOrCommentBefore = sourceCode.getTokenBefore(comment, {
+                        includeComments: true,
+                    });
+                    return commentMap.set(comment, commentMap.has(tokenOrCommentBefore)
+                        ? commentMap.get(tokenOrCommentBefore)
+                        : tokenOrCommentBefore);
+                }, new WeakMap());
+                sourceCode.lines.forEach((_, lineIndex) => {
+                    const lineNumber = lineIndex + 1;
+                    if (!tokenInfo.firstTokensByLineNumber.has(lineNumber)) {
+                        // Don't check indentation on blank lines
+                        return;
+                    }
+                    const firstTokenOfLine = tokenInfo.firstTokensByLineNumber.get(lineNumber);
+                    if (firstTokenOfLine.loc.start.line !== lineNumber) {
+                        // Don't check the indentation of multi-line tokens (e.g. template literals or block comments) twice.
+                        return;
+                    }
+                    // If the token matches the expected expected indentation, don't report it.
+                    if (validateTokenIndent(firstTokenOfLine, offsets.getDesiredIndent(firstTokenOfLine))) {
+                        return;
+                    }
+                    if (util_1.isCommentToken(firstTokenOfLine)) {
+                        const tokenBefore = precedingTokens.get(firstTokenOfLine);
+                        const tokenAfter = tokenBefore
+                            ? sourceCode.getTokenAfter(tokenBefore)
+                            : sourceCode.ast.tokens[0];
+                        const mayAlignWithBefore = tokenBefore &&
+                            !hasBlankLinesBetween(tokenBefore, firstTokenOfLine);
+                        const mayAlignWithAfter = tokenAfter && !hasBlankLinesBetween(firstTokenOfLine, tokenAfter);
+                        // If a comment matches the expected indentation of the token immediately before or after, don't report it.
+                        if ((mayAlignWithBefore &&
+                            validateTokenIndent(firstTokenOfLine, offsets.getDesiredIndent(tokenBefore))) ||
+                            (mayAlignWithAfter &&
+                                validateTokenIndent(firstTokenOfLine, offsets.getDesiredIndent(tokenAfter)))) {
+                            return;
+                        }
+                    }
+                    // Otherwise, report the token/comment.
+                    report(firstTokenOfLine, offsets.getDesiredIndent(firstTokenOfLine));
+                });
+            },
+        });
+    },
+});
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/index.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..5556626d7f4d9c8fed1143402fd13a608a0da46e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent-new-do-not-use/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rules/indent-new-do-not-use/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent.js
new file mode 100644
index 0000000000000000000000000000000000000000..bdb0d7a291f457fcdfb41125b89ebdebb76843a2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent.js
@@ -0,0 +1,412 @@
+"use strict";
+/**
+ * Note this file is rather type-unsafe in its current state.
+ * This is due to some really funky type conversions between different node types.
+ * This is done intentionally based on the internal implementation of the base indent rule.
+ */
+/* eslint-disable @typescript-eslint/no-explicit-any */
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const indent_1 = __importDefault(require("eslint/lib/rules/indent"));
+const util = __importStar(require("../util"));
+const KNOWN_NODES = new Set([
+    // Class properties aren't yet supported by eslint...
+    experimental_utils_1.AST_NODE_TYPES.ClassProperty,
+    // ts keywords
+    experimental_utils_1.AST_NODE_TYPES.TSAbstractKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSAnyKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSBooleanKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSNeverKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSNumberKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSStringKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSSymbolKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSUndefinedKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSUnknownKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSVoidKeyword,
+    experimental_utils_1.AST_NODE_TYPES.TSNullKeyword,
+    // ts specific nodes we want to support
+    experimental_utils_1.AST_NODE_TYPES.TSAbstractClassProperty,
+    experimental_utils_1.AST_NODE_TYPES.TSAbstractMethodDefinition,
+    experimental_utils_1.AST_NODE_TYPES.TSArrayType,
+    experimental_utils_1.AST_NODE_TYPES.TSAsExpression,
+    experimental_utils_1.AST_NODE_TYPES.TSCallSignatureDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSConditionalType,
+    experimental_utils_1.AST_NODE_TYPES.TSConstructorType,
+    experimental_utils_1.AST_NODE_TYPES.TSConstructSignatureDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSDeclareFunction,
+    experimental_utils_1.AST_NODE_TYPES.TSEmptyBodyFunctionExpression,
+    experimental_utils_1.AST_NODE_TYPES.TSEnumDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSEnumMember,
+    experimental_utils_1.AST_NODE_TYPES.TSExportAssignment,
+    experimental_utils_1.AST_NODE_TYPES.TSExternalModuleReference,
+    experimental_utils_1.AST_NODE_TYPES.TSFunctionType,
+    experimental_utils_1.AST_NODE_TYPES.TSImportType,
+    experimental_utils_1.AST_NODE_TYPES.TSIndexedAccessType,
+    experimental_utils_1.AST_NODE_TYPES.TSIndexSignature,
+    experimental_utils_1.AST_NODE_TYPES.TSInferType,
+    experimental_utils_1.AST_NODE_TYPES.TSInterfaceBody,
+    experimental_utils_1.AST_NODE_TYPES.TSInterfaceDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSInterfaceHeritage,
+    experimental_utils_1.AST_NODE_TYPES.TSIntersectionType,
+    experimental_utils_1.AST_NODE_TYPES.TSImportEqualsDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSLiteralType,
+    experimental_utils_1.AST_NODE_TYPES.TSMappedType,
+    experimental_utils_1.AST_NODE_TYPES.TSMethodSignature,
+    'TSMinusToken',
+    experimental_utils_1.AST_NODE_TYPES.TSModuleBlock,
+    experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSNonNullExpression,
+    experimental_utils_1.AST_NODE_TYPES.TSParameterProperty,
+    experimental_utils_1.AST_NODE_TYPES.TSParenthesizedType,
+    'TSPlusToken',
+    experimental_utils_1.AST_NODE_TYPES.TSPropertySignature,
+    experimental_utils_1.AST_NODE_TYPES.TSQualifiedName,
+    'TSQuestionToken',
+    experimental_utils_1.AST_NODE_TYPES.TSRestType,
+    experimental_utils_1.AST_NODE_TYPES.TSThisType,
+    experimental_utils_1.AST_NODE_TYPES.TSTupleType,
+    experimental_utils_1.AST_NODE_TYPES.TSTypeAnnotation,
+    experimental_utils_1.AST_NODE_TYPES.TSTypeLiteral,
+    experimental_utils_1.AST_NODE_TYPES.TSTypeOperator,
+    experimental_utils_1.AST_NODE_TYPES.TSTypeParameter,
+    experimental_utils_1.AST_NODE_TYPES.TSTypeParameterDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSTypeParameterInstantiation,
+    experimental_utils_1.AST_NODE_TYPES.TSTypeReference,
+    experimental_utils_1.AST_NODE_TYPES.TSUnionType,
+    experimental_utils_1.AST_NODE_TYPES.Decorator,
+]);
+exports.default = util.createRule({
+    name: 'indent',
+    meta: {
+        type: 'layout',
+        docs: {
+            description: 'Enforce consistent indentation',
+            category: 'Stylistic Issues',
+            // too opinionated to be recommended
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        fixable: 'whitespace',
+        schema: indent_1.default.meta.schema,
+        messages: (_a = indent_1.default.meta.messages) !== null && _a !== void 0 ? _a : {
+            wrongIndentation: 'Expected indentation of {{expected}} but found {{actual}}.',
+        },
+    },
+    defaultOptions: [
+        // typescript docs and playground use 4 space indent
+        4,
+        {
+            // typescript docs indent the case from the switch
+            // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-1-8.html#example-4
+            SwitchCase: 1,
+            flatTernaryExpressions: false,
+            ignoredNodes: [],
+        },
+    ],
+    create(context, optionsWithDefaults) {
+        // because we extend the base rule, have to update opts on the context
+        // the context defines options as readonly though...
+        const contextWithDefaults = Object.create(context, {
+            options: {
+                writable: false,
+                configurable: false,
+                value: optionsWithDefaults,
+            },
+        });
+        const rules = indent_1.default.create(contextWithDefaults);
+        /**
+         * Converts from a TSPropertySignature to a Property
+         * @param node a TSPropertySignature node
+         * @param [type] the type to give the new node
+         * @returns a Property node
+         */
+        function TSPropertySignatureToProperty(node, type = experimental_utils_1.AST_NODE_TYPES.Property) {
+            const base = {
+                // indent doesn't actually use these
+                key: null,
+                value: null,
+                // Property flags
+                computed: false,
+                method: false,
+                kind: 'init',
+                // this will stop eslint from interrogating the type literal
+                shorthand: true,
+                // location data
+                parent: node.parent,
+                range: node.range,
+                loc: node.loc,
+            };
+            if (type === experimental_utils_1.AST_NODE_TYPES.Property) {
+                return Object.assign({ type }, base);
+            }
+            else {
+                return Object.assign({ type, static: false, readonly: false, declare: false }, base);
+            }
+        }
+        return Object.assign({}, rules, {
+            // overwrite the base rule here so we can use our KNOWN_NODES list instead
+            '*:exit'(node) {
+                // For nodes we care about, skip the default handling, because it just marks the node as ignored...
+                if (!KNOWN_NODES.has(node.type)) {
+                    rules['*:exit'](node);
+                }
+            },
+            VariableDeclaration(node) {
+                // https://github.com/typescript-eslint/typescript-eslint/issues/441
+                if (node.declarations.length === 0) {
+                    return;
+                }
+                return rules.VariableDeclaration(node);
+            },
+            TSAsExpression(node) {
+                // transform it to a BinaryExpression
+                return rules['BinaryExpression, LogicalExpression']({
+                    type: experimental_utils_1.AST_NODE_TYPES.BinaryExpression,
+                    operator: 'as',
+                    left: node.expression,
+                    // the first typeAnnotation includes the as token
+                    right: node.typeAnnotation,
+                    // location data
+                    parent: node.parent,
+                    range: node.range,
+                    loc: node.loc,
+                });
+            },
+            TSConditionalType(node) {
+                // transform it to a ConditionalExpression
+                return rules.ConditionalExpression({
+                    type: experimental_utils_1.AST_NODE_TYPES.ConditionalExpression,
+                    test: {
+                        type: experimental_utils_1.AST_NODE_TYPES.BinaryExpression,
+                        operator: 'extends',
+                        left: node.checkType,
+                        right: node.extendsType,
+                        // location data
+                        range: [node.checkType.range[0], node.extendsType.range[1]],
+                        loc: {
+                            start: node.checkType.loc.start,
+                            end: node.extendsType.loc.end,
+                        },
+                    },
+                    consequent: node.trueType,
+                    alternate: node.falseType,
+                    // location data
+                    parent: node.parent,
+                    range: node.range,
+                    loc: node.loc,
+                });
+            },
+            'TSEnumDeclaration, TSTypeLiteral'(node) {
+                // transform it to an ObjectExpression
+                return rules['ObjectExpression, ObjectPattern']({
+                    type: experimental_utils_1.AST_NODE_TYPES.ObjectExpression,
+                    properties: node.members.map(member => TSPropertySignatureToProperty(member)),
+                    // location data
+                    parent: node.parent,
+                    range: node.range,
+                    loc: node.loc,
+                });
+            },
+            TSImportEqualsDeclaration(node) {
+                // transform it to an VariableDeclaration
+                // use VariableDeclaration instead of ImportDeclaration because it's essentially the same thing
+                const { id, moduleReference } = node;
+                return rules.VariableDeclaration({
+                    type: experimental_utils_1.AST_NODE_TYPES.VariableDeclaration,
+                    kind: 'const',
+                    declarations: [
+                        {
+                            type: experimental_utils_1.AST_NODE_TYPES.VariableDeclarator,
+                            range: [id.range[0], moduleReference.range[1]],
+                            loc: {
+                                start: id.loc.start,
+                                end: moduleReference.loc.end,
+                            },
+                            id: id,
+                            init: {
+                                type: experimental_utils_1.AST_NODE_TYPES.CallExpression,
+                                callee: {
+                                    type: experimental_utils_1.AST_NODE_TYPES.Identifier,
+                                    name: 'require',
+                                    range: [
+                                        moduleReference.range[0],
+                                        moduleReference.range[0] + 'require'.length,
+                                    ],
+                                    loc: {
+                                        start: moduleReference.loc.start,
+                                        end: {
+                                            line: moduleReference.loc.end.line,
+                                            column: moduleReference.loc.start.line + 'require'.length,
+                                        },
+                                    },
+                                },
+                                arguments: 'expression' in moduleReference
+                                    ? [moduleReference.expression]
+                                    : [],
+                                // location data
+                                range: moduleReference.range,
+                                loc: moduleReference.loc,
+                            },
+                        },
+                    ],
+                    // location data
+                    parent: node.parent,
+                    range: node.range,
+                    loc: node.loc,
+                });
+            },
+            TSIndexedAccessType(node) {
+                // convert to a MemberExpression
+                return rules['MemberExpression, JSXMemberExpression, MetaProperty']({
+                    type: experimental_utils_1.AST_NODE_TYPES.MemberExpression,
+                    object: node.objectType,
+                    property: node.indexType,
+                    // location data
+                    parent: node.parent,
+                    range: node.range,
+                    loc: node.loc,
+                    optional: false,
+                    computed: true,
+                });
+            },
+            TSInterfaceBody(node) {
+                // transform it to an ClassBody
+                return rules['BlockStatement, ClassBody']({
+                    type: experimental_utils_1.AST_NODE_TYPES.ClassBody,
+                    body: node.body.map(p => TSPropertySignatureToProperty(p, experimental_utils_1.AST_NODE_TYPES.ClassProperty)),
+                    // location data
+                    parent: node.parent,
+                    range: node.range,
+                    loc: node.loc,
+                });
+            },
+            'TSInterfaceDeclaration[extends.length > 0]'(node) {
+                // transform it to a ClassDeclaration
+                return rules['ClassDeclaration[superClass], ClassExpression[superClass]']({
+                    type: experimental_utils_1.AST_NODE_TYPES.ClassDeclaration,
+                    body: node.body,
+                    id: null,
+                    // TODO: This is invalid, there can be more than one extends in interface
+                    superClass: node.extends[0].expression,
+                    // location data
+                    parent: node.parent,
+                    range: node.range,
+                    loc: node.loc,
+                });
+            },
+            TSMappedType(node) {
+                const sourceCode = context.getSourceCode();
+                const squareBracketStart = sourceCode.getTokenBefore(node.typeParameter);
+                // transform it to an ObjectExpression
+                return rules['ObjectExpression, ObjectPattern']({
+                    type: experimental_utils_1.AST_NODE_TYPES.ObjectExpression,
+                    properties: [
+                        {
+                            type: experimental_utils_1.AST_NODE_TYPES.Property,
+                            key: node.typeParameter,
+                            value: node.typeAnnotation,
+                            // location data
+                            range: [
+                                squareBracketStart.range[0],
+                                node.typeAnnotation
+                                    ? node.typeAnnotation.range[1]
+                                    : squareBracketStart.range[0],
+                            ],
+                            loc: {
+                                start: squareBracketStart.loc.start,
+                                end: node.typeAnnotation
+                                    ? node.typeAnnotation.loc.end
+                                    : squareBracketStart.loc.end,
+                            },
+                            kind: 'init',
+                            computed: false,
+                            method: false,
+                            shorthand: false,
+                        },
+                    ],
+                    // location data
+                    parent: node.parent,
+                    range: node.range,
+                    loc: node.loc,
+                });
+            },
+            TSModuleBlock(node) {
+                // transform it to a BlockStatement
+                return rules['BlockStatement, ClassBody']({
+                    type: experimental_utils_1.AST_NODE_TYPES.BlockStatement,
+                    body: node.body,
+                    // location data
+                    parent: node.parent,
+                    range: node.range,
+                    loc: node.loc,
+                });
+            },
+            TSQualifiedName(node) {
+                return rules['MemberExpression, JSXMemberExpression, MetaProperty']({
+                    type: experimental_utils_1.AST_NODE_TYPES.MemberExpression,
+                    object: node.left,
+                    property: node.right,
+                    // location data
+                    parent: node.parent,
+                    range: node.range,
+                    loc: node.loc,
+                    optional: false,
+                    computed: false,
+                });
+            },
+            TSTupleType(node) {
+                // transform it to an ArrayExpression
+                return rules['ArrayExpression, ArrayPattern']({
+                    type: experimental_utils_1.AST_NODE_TYPES.ArrayExpression,
+                    elements: node.elementTypes,
+                    // location data
+                    parent: node.parent,
+                    range: node.range,
+                    loc: node.loc,
+                });
+            },
+            TSTypeParameterDeclaration(node) {
+                if (!node.params.length) {
+                    return;
+                }
+                const [name, ...attributes] = node.params;
+                // JSX is about the closest we can get because the angle brackets
+                // it's not perfect but it works!
+                return rules.JSXOpeningElement({
+                    type: experimental_utils_1.AST_NODE_TYPES.JSXOpeningElement,
+                    selfClosing: false,
+                    name: name,
+                    attributes: attributes,
+                    // location data
+                    parent: node.parent,
+                    range: node.range,
+                    loc: node.loc,
+                });
+            },
+        });
+    },
+});
+//# sourceMappingURL=indent.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..9ec4bd57df47b38ba867cf6dbfabc99dce674590
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"indent.js","sourceRoot":"","sources":["../../src/rules/indent.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/index.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..fc0852ebf9735492b0aae9163844d95761c0d477
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/index.js
@@ -0,0 +1,234 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const adjacent_overload_signatures_1 = __importDefault(require("./adjacent-overload-signatures"));
+const array_type_1 = __importDefault(require("./array-type"));
+const await_thenable_1 = __importDefault(require("./await-thenable"));
+const ban_ts_comment_1 = __importDefault(require("./ban-ts-comment"));
+const ban_tslint_comment_1 = __importDefault(require("./ban-tslint-comment"));
+const ban_types_1 = __importDefault(require("./ban-types"));
+const brace_style_1 = __importDefault(require("./brace-style"));
+const class_literal_property_style_1 = __importDefault(require("./class-literal-property-style"));
+const comma_dangle_1 = __importDefault(require("./comma-dangle"));
+const comma_spacing_1 = __importDefault(require("./comma-spacing"));
+const consistent_indexed_object_style_1 = __importDefault(require("./consistent-indexed-object-style"));
+const consistent_type_assertions_1 = __importDefault(require("./consistent-type-assertions"));
+const consistent_type_definitions_1 = __importDefault(require("./consistent-type-definitions"));
+const consistent_type_imports_1 = __importDefault(require("./consistent-type-imports"));
+const default_param_last_1 = __importDefault(require("./default-param-last"));
+const dot_notation_1 = __importDefault(require("./dot-notation"));
+const explicit_function_return_type_1 = __importDefault(require("./explicit-function-return-type"));
+const explicit_member_accessibility_1 = __importDefault(require("./explicit-member-accessibility"));
+const explicit_module_boundary_types_1 = __importDefault(require("./explicit-module-boundary-types"));
+const func_call_spacing_1 = __importDefault(require("./func-call-spacing"));
+const indent_1 = __importDefault(require("./indent"));
+const init_declarations_1 = __importDefault(require("./init-declarations"));
+const keyword_spacing_1 = __importDefault(require("./keyword-spacing"));
+const lines_between_class_members_1 = __importDefault(require("./lines-between-class-members"));
+const member_delimiter_style_1 = __importDefault(require("./member-delimiter-style"));
+const member_ordering_1 = __importDefault(require("./member-ordering"));
+const method_signature_style_1 = __importDefault(require("./method-signature-style"));
+const naming_convention_1 = __importDefault(require("./naming-convention"));
+const no_array_constructor_1 = __importDefault(require("./no-array-constructor"));
+const no_base_to_string_1 = __importDefault(require("./no-base-to-string"));
+const no_confusing_non_null_assertion_1 = __importDefault(require("./no-confusing-non-null-assertion"));
+const no_confusing_void_expression_1 = __importDefault(require("./no-confusing-void-expression"));
+const no_dupe_class_members_1 = __importDefault(require("./no-dupe-class-members"));
+const no_duplicate_imports_1 = __importDefault(require("./no-duplicate-imports"));
+const no_dynamic_delete_1 = __importDefault(require("./no-dynamic-delete"));
+const no_empty_function_1 = __importDefault(require("./no-empty-function"));
+const no_empty_interface_1 = __importDefault(require("./no-empty-interface"));
+const no_explicit_any_1 = __importDefault(require("./no-explicit-any"));
+const no_extra_non_null_assertion_1 = __importDefault(require("./no-extra-non-null-assertion"));
+const no_extra_parens_1 = __importDefault(require("./no-extra-parens"));
+const no_extra_semi_1 = __importDefault(require("./no-extra-semi"));
+const no_extraneous_class_1 = __importDefault(require("./no-extraneous-class"));
+const no_floating_promises_1 = __importDefault(require("./no-floating-promises"));
+const no_for_in_array_1 = __importDefault(require("./no-for-in-array"));
+const no_implicit_any_catch_1 = __importDefault(require("./no-implicit-any-catch"));
+const no_implied_eval_1 = __importDefault(require("./no-implied-eval"));
+const no_inferrable_types_1 = __importDefault(require("./no-inferrable-types"));
+const no_invalid_this_1 = __importDefault(require("./no-invalid-this"));
+const no_invalid_void_type_1 = __importDefault(require("./no-invalid-void-type"));
+const no_loop_func_1 = __importDefault(require("./no-loop-func"));
+const no_loss_of_precision_1 = __importDefault(require("./no-loss-of-precision"));
+const no_magic_numbers_1 = __importDefault(require("./no-magic-numbers"));
+const no_misused_new_1 = __importDefault(require("./no-misused-new"));
+const no_misused_promises_1 = __importDefault(require("./no-misused-promises"));
+const no_namespace_1 = __importDefault(require("./no-namespace"));
+const no_non_null_asserted_optional_chain_1 = __importDefault(require("./no-non-null-asserted-optional-chain"));
+const no_non_null_assertion_1 = __importDefault(require("./no-non-null-assertion"));
+const no_parameter_properties_1 = __importDefault(require("./no-parameter-properties"));
+const no_redeclare_1 = __importDefault(require("./no-redeclare"));
+const no_require_imports_1 = __importDefault(require("./no-require-imports"));
+const no_shadow_1 = __importDefault(require("./no-shadow"));
+const no_this_alias_1 = __importDefault(require("./no-this-alias"));
+const no_throw_literal_1 = __importDefault(require("./no-throw-literal"));
+const no_type_alias_1 = __importDefault(require("./no-type-alias"));
+const no_unnecessary_boolean_literal_compare_1 = __importDefault(require("./no-unnecessary-boolean-literal-compare"));
+const no_unnecessary_condition_1 = __importDefault(require("./no-unnecessary-condition"));
+const no_unnecessary_qualifier_1 = __importDefault(require("./no-unnecessary-qualifier"));
+const no_unnecessary_type_arguments_1 = __importDefault(require("./no-unnecessary-type-arguments"));
+const no_unnecessary_type_assertion_1 = __importDefault(require("./no-unnecessary-type-assertion"));
+const no_unnecessary_type_constraint_1 = __importDefault(require("./no-unnecessary-type-constraint"));
+const no_unsafe_assignment_1 = __importDefault(require("./no-unsafe-assignment"));
+const no_unsafe_call_1 = __importDefault(require("./no-unsafe-call"));
+const no_unsafe_member_access_1 = __importDefault(require("./no-unsafe-member-access"));
+const no_unsafe_return_1 = __importDefault(require("./no-unsafe-return"));
+const no_unused_expressions_1 = __importDefault(require("./no-unused-expressions"));
+const no_unused_vars_1 = __importDefault(require("./no-unused-vars"));
+const no_unused_vars_experimental_1 = __importDefault(require("./no-unused-vars-experimental"));
+const no_use_before_define_1 = __importDefault(require("./no-use-before-define"));
+const no_useless_constructor_1 = __importDefault(require("./no-useless-constructor"));
+const no_var_requires_1 = __importDefault(require("./no-var-requires"));
+const non_nullable_type_assertion_style_1 = __importDefault(require("./non-nullable-type-assertion-style"));
+const prefer_as_const_1 = __importDefault(require("./prefer-as-const"));
+const prefer_enum_initializers_1 = __importDefault(require("./prefer-enum-initializers"));
+const prefer_for_of_1 = __importDefault(require("./prefer-for-of"));
+const prefer_function_type_1 = __importDefault(require("./prefer-function-type"));
+const prefer_includes_1 = __importDefault(require("./prefer-includes"));
+const prefer_literal_enum_member_1 = __importDefault(require("./prefer-literal-enum-member"));
+const prefer_namespace_keyword_1 = __importDefault(require("./prefer-namespace-keyword"));
+const prefer_nullish_coalescing_1 = __importDefault(require("./prefer-nullish-coalescing"));
+const prefer_optional_chain_1 = __importDefault(require("./prefer-optional-chain"));
+const prefer_readonly_1 = __importDefault(require("./prefer-readonly"));
+const prefer_readonly_parameter_types_1 = __importDefault(require("./prefer-readonly-parameter-types"));
+const prefer_reduce_type_parameter_1 = __importDefault(require("./prefer-reduce-type-parameter"));
+const prefer_regexp_exec_1 = __importDefault(require("./prefer-regexp-exec"));
+const prefer_string_starts_ends_with_1 = __importDefault(require("./prefer-string-starts-ends-with"));
+const prefer_ts_expect_error_1 = __importDefault(require("./prefer-ts-expect-error"));
+const promise_function_async_1 = __importDefault(require("./promise-function-async"));
+const quotes_1 = __importDefault(require("./quotes"));
+const require_array_sort_compare_1 = __importDefault(require("./require-array-sort-compare"));
+const require_await_1 = __importDefault(require("./require-await"));
+const restrict_plus_operands_1 = __importDefault(require("./restrict-plus-operands"));
+const restrict_template_expressions_1 = __importDefault(require("./restrict-template-expressions"));
+const return_await_1 = __importDefault(require("./return-await"));
+const semi_1 = __importDefault(require("./semi"));
+const space_before_function_paren_1 = __importDefault(require("./space-before-function-paren"));
+const space_infix_ops_1 = __importDefault(require("./space-infix-ops"));
+const strict_boolean_expressions_1 = __importDefault(require("./strict-boolean-expressions"));
+const switch_exhaustiveness_check_1 = __importDefault(require("./switch-exhaustiveness-check"));
+const triple_slash_reference_1 = __importDefault(require("./triple-slash-reference"));
+const type_annotation_spacing_1 = __importDefault(require("./type-annotation-spacing"));
+const typedef_1 = __importDefault(require("./typedef"));
+const unbound_method_1 = __importDefault(require("./unbound-method"));
+const unified_signatures_1 = __importDefault(require("./unified-signatures"));
+exports.default = {
+    'adjacent-overload-signatures': adjacent_overload_signatures_1.default,
+    'array-type': array_type_1.default,
+    'await-thenable': await_thenable_1.default,
+    'ban-ts-comment': ban_ts_comment_1.default,
+    'ban-tslint-comment': ban_tslint_comment_1.default,
+    'ban-types': ban_types_1.default,
+    'brace-style': brace_style_1.default,
+    'class-literal-property-style': class_literal_property_style_1.default,
+    'comma-dangle': comma_dangle_1.default,
+    'comma-spacing': comma_spacing_1.default,
+    'consistent-indexed-object-style': consistent_indexed_object_style_1.default,
+    'consistent-type-assertions': consistent_type_assertions_1.default,
+    'consistent-type-definitions': consistent_type_definitions_1.default,
+    'consistent-type-imports': consistent_type_imports_1.default,
+    'default-param-last': default_param_last_1.default,
+    'dot-notation': dot_notation_1.default,
+    'explicit-function-return-type': explicit_function_return_type_1.default,
+    'explicit-member-accessibility': explicit_member_accessibility_1.default,
+    'explicit-module-boundary-types': explicit_module_boundary_types_1.default,
+    'func-call-spacing': func_call_spacing_1.default,
+    indent: indent_1.default,
+    'init-declarations': init_declarations_1.default,
+    'keyword-spacing': keyword_spacing_1.default,
+    'lines-between-class-members': lines_between_class_members_1.default,
+    'member-delimiter-style': member_delimiter_style_1.default,
+    'member-ordering': member_ordering_1.default,
+    'method-signature-style': method_signature_style_1.default,
+    'naming-convention': naming_convention_1.default,
+    'no-array-constructor': no_array_constructor_1.default,
+    'no-base-to-string': no_base_to_string_1.default,
+    'no-confusing-non-null-assertion': no_confusing_non_null_assertion_1.default,
+    'no-confusing-void-expression': no_confusing_void_expression_1.default,
+    'no-dupe-class-members': no_dupe_class_members_1.default,
+    'no-duplicate-imports': no_duplicate_imports_1.default,
+    'no-dynamic-delete': no_dynamic_delete_1.default,
+    'no-empty-function': no_empty_function_1.default,
+    'no-empty-interface': no_empty_interface_1.default,
+    'no-explicit-any': no_explicit_any_1.default,
+    'no-extra-non-null-assertion': no_extra_non_null_assertion_1.default,
+    'no-extra-parens': no_extra_parens_1.default,
+    'no-extra-semi': no_extra_semi_1.default,
+    'no-extraneous-class': no_extraneous_class_1.default,
+    'no-floating-promises': no_floating_promises_1.default,
+    'no-for-in-array': no_for_in_array_1.default,
+    'no-implicit-any-catch': no_implicit_any_catch_1.default,
+    'no-implied-eval': no_implied_eval_1.default,
+    'no-inferrable-types': no_inferrable_types_1.default,
+    'no-invalid-this': no_invalid_this_1.default,
+    'no-invalid-void-type': no_invalid_void_type_1.default,
+    'no-loop-func': no_loop_func_1.default,
+    'no-loss-of-precision': no_loss_of_precision_1.default,
+    'no-magic-numbers': no_magic_numbers_1.default,
+    'no-misused-new': no_misused_new_1.default,
+    'no-misused-promises': no_misused_promises_1.default,
+    'no-namespace': no_namespace_1.default,
+    'no-non-null-asserted-optional-chain': no_non_null_asserted_optional_chain_1.default,
+    'no-non-null-assertion': no_non_null_assertion_1.default,
+    'no-parameter-properties': no_parameter_properties_1.default,
+    'no-redeclare': no_redeclare_1.default,
+    'no-require-imports': no_require_imports_1.default,
+    'no-shadow': no_shadow_1.default,
+    'no-this-alias': no_this_alias_1.default,
+    'no-throw-literal': no_throw_literal_1.default,
+    'no-type-alias': no_type_alias_1.default,
+    'no-unnecessary-boolean-literal-compare': no_unnecessary_boolean_literal_compare_1.default,
+    'no-unnecessary-condition': no_unnecessary_condition_1.default,
+    'no-unnecessary-qualifier': no_unnecessary_qualifier_1.default,
+    'no-unnecessary-type-arguments': no_unnecessary_type_arguments_1.default,
+    'no-unnecessary-type-assertion': no_unnecessary_type_assertion_1.default,
+    'no-unnecessary-type-constraint': no_unnecessary_type_constraint_1.default,
+    'no-unsafe-assignment': no_unsafe_assignment_1.default,
+    'no-unsafe-call': no_unsafe_call_1.default,
+    'no-unsafe-member-access': no_unsafe_member_access_1.default,
+    'no-unsafe-return': no_unsafe_return_1.default,
+    'no-unused-expressions': no_unused_expressions_1.default,
+    'no-unused-vars': no_unused_vars_1.default,
+    'no-unused-vars-experimental': no_unused_vars_experimental_1.default,
+    'no-use-before-define': no_use_before_define_1.default,
+    'no-useless-constructor': no_useless_constructor_1.default,
+    'no-var-requires': no_var_requires_1.default,
+    'non-nullable-type-assertion-style': non_nullable_type_assertion_style_1.default,
+    'prefer-as-const': prefer_as_const_1.default,
+    'prefer-enum-initializers': prefer_enum_initializers_1.default,
+    'prefer-for-of': prefer_for_of_1.default,
+    'prefer-function-type': prefer_function_type_1.default,
+    'prefer-includes': prefer_includes_1.default,
+    'prefer-literal-enum-member': prefer_literal_enum_member_1.default,
+    'prefer-namespace-keyword': prefer_namespace_keyword_1.default,
+    'prefer-nullish-coalescing': prefer_nullish_coalescing_1.default,
+    'prefer-optional-chain': prefer_optional_chain_1.default,
+    'prefer-readonly': prefer_readonly_1.default,
+    'prefer-readonly-parameter-types': prefer_readonly_parameter_types_1.default,
+    'prefer-reduce-type-parameter': prefer_reduce_type_parameter_1.default,
+    'prefer-regexp-exec': prefer_regexp_exec_1.default,
+    'prefer-string-starts-ends-with': prefer_string_starts_ends_with_1.default,
+    'prefer-ts-expect-error': prefer_ts_expect_error_1.default,
+    'promise-function-async': promise_function_async_1.default,
+    quotes: quotes_1.default,
+    'require-array-sort-compare': require_array_sort_compare_1.default,
+    'require-await': require_await_1.default,
+    'restrict-plus-operands': restrict_plus_operands_1.default,
+    'restrict-template-expressions': restrict_template_expressions_1.default,
+    'return-await': return_await_1.default,
+    semi: semi_1.default,
+    'space-before-function-paren': space_before_function_paren_1.default,
+    'space-infix-ops': space_infix_ops_1.default,
+    'strict-boolean-expressions': strict_boolean_expressions_1.default,
+    'switch-exhaustiveness-check': switch_exhaustiveness_check_1.default,
+    'triple-slash-reference': triple_slash_reference_1.default,
+    'type-annotation-spacing': type_annotation_spacing_1.default,
+    typedef: typedef_1.default,
+    'unbound-method': unbound_method_1.default,
+    'unified-signatures': unified_signatures_1.default,
+};
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/index.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..df43eb3949560bfe9b059847c5f7c9fd1dcd72d0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/init-declarations.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/init-declarations.js
new file mode 100644
index 0000000000000000000000000000000000000000..9b4b3311f687acb28d2d2caac91c6c71b3bcee7b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/init-declarations.js
@@ -0,0 +1,47 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const init_declarations_1 = __importDefault(require("eslint/lib/rules/init-declarations"));
+const util_1 = require("../util");
+exports.default = util_1.createRule({
+    name: 'init-declarations',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'require or disallow initialization in variable declarations',
+            category: 'Variables',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        schema: init_declarations_1.default.meta.schema,
+        messages: (_a = init_declarations_1.default.meta.messages) !== null && _a !== void 0 ? _a : {
+            initialized: "Variable '{{idName}}' should be initialized on declaration.",
+            notInitialized: "Variable '{{idName}}' should not be initialized on declaration.",
+        },
+    },
+    defaultOptions: ['always'],
+    create(context) {
+        const rules = init_declarations_1.default.create(context);
+        const mode = context.options[0] || 'always';
+        return {
+            'VariableDeclaration:exit'(node) {
+                var _a, _b, _c;
+                if (mode === 'always') {
+                    if (node.declare) {
+                        return;
+                    }
+                    if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.TSModuleBlock &&
+                        ((_b = node.parent.parent) === null || _b === void 0 ? void 0 : _b.type) === experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration && ((_c = node.parent.parent) === null || _c === void 0 ? void 0 : _c.declare)) {
+                        return;
+                    }
+                }
+                rules['VariableDeclaration:exit'](node);
+            },
+        };
+    },
+});
+//# sourceMappingURL=init-declarations.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/init-declarations.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/init-declarations.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..99bf077b781db41e0dce785b56a31ae2679ecf92
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/init-declarations.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"init-declarations.js","sourceRoot":"","sources":["../../src/rules/init-declarations.ts"],"names":[],"mappings":";;;;;;AAAA,8EAG+C;AAC/C,2FAA0D;AAC1D,kCAIiB;AAKjB,kBAAe,iBAAU,CAAsB;IAC7C,IAAI,EAAE,mBAAmB;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EACT,6DAA6D;YAC/D,QAAQ,EAAE,WAAW;YACrB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,IAAI;SACtB;QACD,MAAM,EAAE,2BAAQ,CAAC,IAAI,CAAC,MAAM;QAC5B,QAAQ,QAAE,2BAAQ,CAAC,IAAI,CAAC,QAAQ,mCAAI;YAClC,WAAW,EACT,6DAA6D;YAC/D,cAAc,EACZ,iEAAiE;SACpE;KACF;IACD,cAAc,EAAE,CAAC,QAAQ,CAAC;IAC1B,MAAM,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,2BAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;QAE5C,OAAO;YACL,0BAA0B,CAAC,IAAkC;;gBAC3D,IAAI,IAAI,KAAK,QAAQ,EAAE;oBACrB,IAAI,IAAI,CAAC,OAAO,EAAE;wBAChB,OAAO;qBACR;oBACD,IACE,OAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,MAAK,mCAAc,CAAC,aAAa;wBAClD,OAAA,IAAI,CAAC,MAAM,CAAC,MAAM,0CAAE,IAAI,MAAK,mCAAc,CAAC,mBAAmB,WAC/D,IAAI,CAAC,MAAM,CAAC,MAAM,0CAAE,OAAO,CAAA,EAC3B;wBACA,OAAO;qBACR;iBACF;gBAED,KAAK,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1C,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/keyword-spacing.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/keyword-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..a0d987180ea7dfd710bcb234c53ad844692c0af1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/keyword-spacing.js
@@ -0,0 +1,67 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const keyword_spacing_1 = __importDefault(require("eslint/lib/rules/keyword-spacing"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'keyword-spacing',
+    meta: {
+        type: 'layout',
+        docs: {
+            description: 'Enforce consistent spacing before and after keywords',
+            category: 'Stylistic Issues',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        fixable: 'whitespace',
+        schema: keyword_spacing_1.default.meta.schema,
+        messages: (_a = keyword_spacing_1.default.meta.messages) !== null && _a !== void 0 ? _a : {
+            expectedBefore: 'Expected space(s) before "{{value}}".',
+            expectedAfter: 'Expected space(s) after "{{value}}".',
+            unexpectedBefore: 'Unexpected space(s) before "{{value}}".',
+            unexpectedAfter: 'Unexpected space(s) after "{{value}}".',
+        },
+    },
+    defaultOptions: [{}],
+    create(context) {
+        const sourceCode = context.getSourceCode();
+        const baseRules = keyword_spacing_1.default.create(context);
+        return Object.assign(Object.assign({}, baseRules), { TSAsExpression(node) {
+                const asToken = util.nullThrows(sourceCode.getTokenAfter(node.expression, token => token.value === 'as'), util.NullThrowsReasons.MissingToken('as', node.type));
+                const oldTokenType = asToken.type;
+                // as is a contextual keyword, so it's always reported as an Identifier
+                // the rule looks for keyword tokens, so we temporarily override it
+                // we mutate it at the token level because the rule calls sourceCode.getFirstToken,
+                // so mutating a copy would not change the underlying copy returned by that method
+                asToken.type = experimental_utils_1.AST_TOKEN_TYPES.Keyword;
+                // use this selector just because it is just a call to `checkSpacingAroundFirstToken`
+                baseRules.DebuggerStatement(asToken);
+                // make sure to reset the type afterward so we don't permanently mutate the AST
+                asToken.type = oldTokenType;
+            } });
+    },
+});
+//# sourceMappingURL=keyword-spacing.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/keyword-spacing.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/keyword-spacing.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..181f8eea55f874922336f507dc806d27ed0d2fe6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/keyword-spacing.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"keyword-spacing.js","sourceRoot":"","sources":["../../src/rules/keyword-spacing.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8EAAwE;AACxE,uFAAwD;AACxD,8CAAgC;AAKhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,iBAAiB;IACvB,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE;YACJ,WAAW,EAAE,sDAAsD;YACnE,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,IAAI;SACtB;QACD,OAAO,EAAE,YAAY;QACrB,MAAM,EAAE,yBAAQ,CAAC,IAAI,CAAC,MAAM;QAC5B,QAAQ,QAAE,yBAAQ,CAAC,IAAI,CAAC,QAAQ,mCAAI;YAClC,cAAc,EAAE,uCAAuC;YACvD,aAAa,EAAE,sCAAsC;YACrD,gBAAgB,EAAE,yCAAyC;YAC3D,eAAe,EAAE,wCAAwC;SAC1D;KACF;IACD,cAAc,EAAE,CAAC,EAAE,CAAC;IAEpB,MAAM,CAAC,OAAO;QACZ,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,yBAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,uCACK,SAAS,KACZ,cAAc,CAAC,IAAI;gBACjB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAC7B,UAAU,CAAC,aAAa,CACtB,IAAI,CAAC,UAAU,EACf,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAC9B,EACD,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CACrD,CAAC;gBACF,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;gBAClC,uEAAuE;gBACvE,mEAAmE;gBACnE,mFAAmF;gBACnF,kFAAkF;gBAClF,OAAO,CAAC,IAAI,GAAG,oCAAe,CAAC,OAAO,CAAC;gBAEvC,qFAAqF;gBACrF,SAAS,CAAC,iBAAiB,CAAC,OAAgB,CAAC,CAAC;gBAE9C,+EAA+E;gBAC/E,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC;YAC9B,CAAC,IACD;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/lines-between-class-members.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/lines-between-class-members.js
new file mode 100644
index 0000000000000000000000000000000000000000..43f3f9f094be329d79942b4c78fee50c027cd6ba
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/lines-between-class-members.js
@@ -0,0 +1,79 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const lines_between_class_members_1 = __importDefault(require("eslint/lib/rules/lines-between-class-members"));
+const util = __importStar(require("../util"));
+const schema = util.deepMerge(Object.assign({}, lines_between_class_members_1.default.meta.schema), {
+    1: {
+        exceptAfterOverload: {
+            type: 'boolean',
+            default: true,
+        },
+    },
+});
+exports.default = util.createRule({
+    name: 'lines-between-class-members',
+    meta: {
+        type: 'layout',
+        docs: {
+            description: 'Require or disallow an empty line between class members',
+            category: 'Stylistic Issues',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        fixable: 'whitespace',
+        schema,
+        messages: (_a = lines_between_class_members_1.default.meta.messages) !== null && _a !== void 0 ? _a : {
+            never: 'Unexpected blank line between class members.',
+            always: 'Expected blank line between class members.',
+        },
+    },
+    defaultOptions: [
+        'always',
+        {
+            exceptAfterOverload: true,
+            exceptAfterSingleLine: false,
+        },
+    ],
+    create(context, options) {
+        var _a;
+        const rules = lines_between_class_members_1.default.create(context);
+        const exceptAfterOverload = ((_a = options[1]) === null || _a === void 0 ? void 0 : _a.exceptAfterOverload) && options[0] === 'always';
+        function isOverload(node) {
+            return (node.type === experimental_utils_1.AST_NODE_TYPES.MethodDefinition &&
+                node.value.type === experimental_utils_1.AST_NODE_TYPES.TSEmptyBodyFunctionExpression);
+        }
+        return {
+            ClassBody(node) {
+                const body = exceptAfterOverload
+                    ? node.body.filter(node => !isOverload(node))
+                    : node.body;
+                rules.ClassBody(Object.assign(Object.assign({}, node), { body }));
+            },
+        };
+    },
+});
+//# sourceMappingURL=lines-between-class-members.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/lines-between-class-members.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/lines-between-class-members.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..9de292a6ab938da036bb71f169f6b9808a8432a1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/lines-between-class-members.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"lines-between-class-members.js","sourceRoot":"","sources":["../../src/rules/lines-between-class-members.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,+GAAoE;AACpE,8CAAgC;AAKhC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,mBACtB,qCAAQ,CAAC,IAAI,CAAC,MAAM,GACzB;IACE,CAAC,EAAE;QACD,mBAAmB,EAAE;YACnB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;SACd;KACF;CACF,CACF,CAAC;AAEF,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,6BAA6B;IACnC,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE;YACJ,WAAW,EAAE,yDAAyD;YACtE,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,IAAI;SACtB;QACD,OAAO,EAAE,YAAY;QACrB,MAAM;QACN,QAAQ,QAAE,qCAAQ,CAAC,IAAI,CAAC,QAAQ,mCAAI;YAClC,KAAK,EAAE,8CAA8C;YACrD,MAAM,EAAE,4CAA4C;SACrD;KACF;IACD,cAAc,EAAE;QACd,QAAQ;QACR;YACE,mBAAmB,EAAE,IAAI;YACzB,qBAAqB,EAAE,KAAK;SAC7B;KACF;IACD,MAAM,CAAC,OAAO,EAAE,OAAO;;QACrB,MAAM,KAAK,GAAG,qCAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,mBAAmB,GACvB,OAAA,OAAO,CAAC,CAAC,CAAC,0CAAE,mBAAmB,KAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;QAE7D,SAAS,UAAU,CAAC,IAAmB;YACrC,OAAO,CACL,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,gBAAgB;gBAC7C,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,mCAAc,CAAC,6BAA6B,CACjE,CAAC;QACJ,CAAC;QAED,OAAO;YACL,SAAS,CAAC,IAAI;gBACZ,MAAM,IAAI,GAAG,mBAAmB;oBAC9B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAC7C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAEd,KAAK,CAAC,SAAS,iCAAM,IAAI,KAAE,IAAI,IAAG,CAAC;YACrC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-delimiter-style.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-delimiter-style.js
new file mode 100644
index 0000000000000000000000000000000000000000..2faac1c3694012440bae428bf4778c1583108fb2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-delimiter-style.js
@@ -0,0 +1,208 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+const definition = {
+    type: 'object',
+    properties: {
+        multiline: {
+            type: 'object',
+            properties: {
+                delimiter: { enum: ['none', 'semi', 'comma'] },
+                requireLast: { type: 'boolean' },
+            },
+            additionalProperties: false,
+        },
+        singleline: {
+            type: 'object',
+            properties: {
+                // note can't have "none" for single line delimiter as it's invalid syntax
+                delimiter: { enum: ['semi', 'comma'] },
+                requireLast: { type: 'boolean' },
+            },
+            additionalProperties: false,
+        },
+    },
+    additionalProperties: false,
+};
+exports.default = util.createRule({
+    name: 'member-delimiter-style',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Require a specific member delimiter style for interfaces and type literals',
+            category: 'Stylistic Issues',
+            recommended: false,
+        },
+        fixable: 'code',
+        messages: {
+            unexpectedComma: 'Unexpected separator (,).',
+            unexpectedSemi: 'Unexpected separator (;).',
+            expectedComma: 'Expected a comma.',
+            expectedSemi: 'Expected a semicolon.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: Object.assign({}, definition.properties, {
+                    overrides: {
+                        type: 'object',
+                        properties: {
+                            interface: definition,
+                            typeLiteral: definition,
+                        },
+                        additionalProperties: false,
+                    },
+                }),
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            multiline: {
+                delimiter: 'semi',
+                requireLast: true,
+            },
+            singleline: {
+                delimiter: 'semi',
+                requireLast: false,
+            },
+        },
+    ],
+    create(context, [options]) {
+        var _a;
+        const sourceCode = context.getSourceCode();
+        // use the base options as the defaults for the cases
+        const baseOptions = options;
+        const overrides = (_a = baseOptions.overrides) !== null && _a !== void 0 ? _a : {};
+        const interfaceOptions = util.deepMerge(baseOptions, overrides.interface);
+        const typeLiteralOptions = util.deepMerge(baseOptions, overrides.typeLiteral);
+        /**
+         * Check the last token in the given member.
+         * @param member the member to be evaluated.
+         * @param opts the options to be validated.
+         * @param isLast a flag indicating `member` is the last in the interface or type literal.
+         */
+        function checkLastToken(member, opts, isLast) {
+            /**
+             * Resolves the boolean value for the given setting enum value
+             * @param type the option name
+             */
+            function getOption(type) {
+                if (isLast && !opts.requireLast) {
+                    // only turn the option on if its expecting no delimiter for the last member
+                    return type === 'none';
+                }
+                return opts.delimiter === type;
+            }
+            let messageId = null;
+            let missingDelimiter = false;
+            const lastToken = sourceCode.getLastToken(member, {
+                includeComments: false,
+            });
+            if (!lastToken) {
+                return;
+            }
+            const optsSemi = getOption('semi');
+            const optsComma = getOption('comma');
+            const optsNone = getOption('none');
+            if (lastToken.value === ';') {
+                if (optsComma) {
+                    messageId = 'expectedComma';
+                }
+                else if (optsNone) {
+                    missingDelimiter = true;
+                    messageId = 'unexpectedSemi';
+                }
+            }
+            else if (lastToken.value === ',') {
+                if (optsSemi) {
+                    messageId = 'expectedSemi';
+                }
+                else if (optsNone) {
+                    missingDelimiter = true;
+                    messageId = 'unexpectedComma';
+                }
+            }
+            else {
+                if (optsSemi) {
+                    missingDelimiter = true;
+                    messageId = 'expectedSemi';
+                }
+                else if (optsComma) {
+                    missingDelimiter = true;
+                    messageId = 'expectedComma';
+                }
+            }
+            if (messageId) {
+                context.report({
+                    node: lastToken,
+                    loc: {
+                        start: {
+                            line: lastToken.loc.end.line,
+                            column: lastToken.loc.end.column,
+                        },
+                        end: {
+                            line: lastToken.loc.end.line,
+                            column: lastToken.loc.end.column,
+                        },
+                    },
+                    messageId,
+                    fix(fixer) {
+                        if (optsNone) {
+                            // remove the unneeded token
+                            return fixer.remove(lastToken);
+                        }
+                        const token = optsSemi ? ';' : ',';
+                        if (missingDelimiter) {
+                            // add the missing delimiter
+                            return fixer.insertTextAfter(lastToken, token);
+                        }
+                        // correct the current delimiter
+                        return fixer.replaceText(lastToken, token);
+                    },
+                });
+            }
+        }
+        /**
+         * Check the member separator being used matches the delimiter.
+         * @param {ASTNode} node the node to be evaluated.
+         */
+        function checkMemberSeparatorStyle(node) {
+            const isSingleLine = node.loc.start.line === node.loc.end.line;
+            const members = node.type === experimental_utils_1.AST_NODE_TYPES.TSInterfaceBody ? node.body : node.members;
+            const typeOpts = node.type === experimental_utils_1.AST_NODE_TYPES.TSInterfaceBody
+                ? interfaceOptions
+                : typeLiteralOptions;
+            const opts = isSingleLine ? typeOpts.singleline : typeOpts.multiline;
+            members.forEach((member, index) => {
+                checkLastToken(member, opts !== null && opts !== void 0 ? opts : {}, index === members.length - 1);
+            });
+        }
+        return {
+            TSInterfaceBody: checkMemberSeparatorStyle,
+            TSTypeLiteral: checkMemberSeparatorStyle,
+        };
+    },
+});
+//# sourceMappingURL=member-delimiter-style.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-delimiter-style.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-delimiter-style.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..f48cf7b4e934234fdeeb9744b51f908fcf78c589
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-delimiter-style.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"member-delimiter-style.js","sourceRoot":"","sources":["../../src/rules/member-delimiter-style.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-ordering.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-ordering.js
new file mode 100644
index 0000000000000000000000000000000000000000..2dbbe7df74bf80a0c0eb961b20a51050ea3ddb84
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-ordering.js
@@ -0,0 +1,468 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.defaultOrder = void 0;
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+const neverConfig = {
+    type: 'string',
+    enum: ['never'],
+};
+const arrayConfig = (memberTypes) => ({
+    type: 'array',
+    items: {
+        enum: memberTypes,
+    },
+});
+const objectConfig = (memberTypes) => ({
+    type: 'object',
+    properties: {
+        memberTypes: {
+            oneOf: [arrayConfig(memberTypes), neverConfig],
+        },
+        order: {
+            type: 'string',
+            enum: ['alphabetically', 'as-written'],
+        },
+    },
+    additionalProperties: false,
+});
+exports.defaultOrder = [
+    // Index signature
+    'signature',
+    // Fields
+    'public-static-field',
+    'protected-static-field',
+    'private-static-field',
+    'public-decorated-field',
+    'protected-decorated-field',
+    'private-decorated-field',
+    'public-instance-field',
+    'protected-instance-field',
+    'private-instance-field',
+    'public-abstract-field',
+    'protected-abstract-field',
+    'private-abstract-field',
+    'public-field',
+    'protected-field',
+    'private-field',
+    'static-field',
+    'instance-field',
+    'abstract-field',
+    'decorated-field',
+    'field',
+    // Constructors
+    'public-constructor',
+    'protected-constructor',
+    'private-constructor',
+    'constructor',
+    // Methods
+    'public-static-method',
+    'protected-static-method',
+    'private-static-method',
+    'public-decorated-method',
+    'protected-decorated-method',
+    'private-decorated-method',
+    'public-instance-method',
+    'protected-instance-method',
+    'private-instance-method',
+    'public-abstract-method',
+    'protected-abstract-method',
+    'private-abstract-method',
+    'public-method',
+    'protected-method',
+    'private-method',
+    'static-method',
+    'instance-method',
+    'abstract-method',
+    'decorated-method',
+    'method',
+];
+const allMemberTypes = ['signature', 'field', 'method', 'constructor'].reduce((all, type) => {
+    all.push(type);
+    ['public', 'protected', 'private'].forEach(accessibility => {
+        if (type !== 'signature') {
+            all.push(`${accessibility}-${type}`); // e.g. `public-field`
+        }
+        // Only class instance fields and methods can have decorators attached to them
+        if (type === 'field' || type === 'method') {
+            const decoratedMemberType = `${accessibility}-decorated-${type}`;
+            const decoratedMemberTypeNoAccessibility = `decorated-${type}`;
+            if (!all.includes(decoratedMemberType)) {
+                all.push(decoratedMemberType);
+            }
+            if (!all.includes(decoratedMemberTypeNoAccessibility)) {
+                all.push(decoratedMemberTypeNoAccessibility);
+            }
+        }
+        if (type !== 'constructor' && type !== 'signature') {
+            // There is no `static-constructor` or `instance-constructor` or `abstract-constructor`
+            ['static', 'instance', 'abstract'].forEach(scope => {
+                if (!all.includes(`${scope}-${type}`)) {
+                    all.push(`${scope}-${type}`);
+                }
+                all.push(`${accessibility}-${scope}-${type}`);
+            });
+        }
+    });
+    return all;
+}, []);
+const functionExpressions = [
+    experimental_utils_1.AST_NODE_TYPES.FunctionExpression,
+    experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression,
+];
+/**
+ * Gets the node type.
+ *
+ * @param node the node to be evaluated.
+ */
+function getNodeType(node) {
+    // TODO: add missing TSCallSignatureDeclaration
+    switch (node.type) {
+        case experimental_utils_1.AST_NODE_TYPES.TSAbstractMethodDefinition:
+        case experimental_utils_1.AST_NODE_TYPES.MethodDefinition:
+            return node.kind;
+        case experimental_utils_1.AST_NODE_TYPES.TSMethodSignature:
+            return 'method';
+        case experimental_utils_1.AST_NODE_TYPES.TSConstructSignatureDeclaration:
+            return 'constructor';
+        case experimental_utils_1.AST_NODE_TYPES.TSAbstractClassProperty:
+        case experimental_utils_1.AST_NODE_TYPES.ClassProperty:
+            return node.value && functionExpressions.includes(node.value.type)
+                ? 'method'
+                : 'field';
+        case experimental_utils_1.AST_NODE_TYPES.TSPropertySignature:
+            return 'field';
+        case experimental_utils_1.AST_NODE_TYPES.TSIndexSignature:
+            return 'signature';
+        default:
+            return null;
+    }
+}
+/**
+ * Gets the member name based on the member type.
+ *
+ * @param node the node to be evaluated.
+ * @param sourceCode
+ */
+function getMemberName(node, sourceCode) {
+    switch (node.type) {
+        case experimental_utils_1.AST_NODE_TYPES.TSPropertySignature:
+        case experimental_utils_1.AST_NODE_TYPES.TSMethodSignature:
+        case experimental_utils_1.AST_NODE_TYPES.TSAbstractClassProperty:
+        case experimental_utils_1.AST_NODE_TYPES.ClassProperty:
+            return util.getNameFromMember(node, sourceCode);
+        case experimental_utils_1.AST_NODE_TYPES.TSAbstractMethodDefinition:
+        case experimental_utils_1.AST_NODE_TYPES.MethodDefinition:
+            return node.kind === 'constructor'
+                ? 'constructor'
+                : util.getNameFromMember(node, sourceCode);
+        case experimental_utils_1.AST_NODE_TYPES.TSConstructSignatureDeclaration:
+            return 'new';
+        case experimental_utils_1.AST_NODE_TYPES.TSIndexSignature:
+            return util.getNameFromIndexSignature(node);
+        default:
+            return null;
+    }
+}
+/**
+ * Gets the calculated rank using the provided method definition.
+ * The algorithm is as follows:
+ * - Get the rank based on the accessibility-scope-type name, e.g. public-instance-field
+ * - If there is no order for accessibility-scope-type, then strip out the accessibility.
+ * - If there is no order for scope-type, then strip out the scope.
+ * - If there is no order for type, then return -1
+ * @param memberGroups the valid names to be validated.
+ * @param orderConfig the current order to be validated.
+ *
+ * @return Index of the matching member type in the order configuration.
+ */
+function getRankOrder(memberGroups, orderConfig) {
+    let rank = -1;
+    const stack = memberGroups.slice(); // Get a copy of the member groups
+    while (stack.length > 0 && rank === -1) {
+        rank = orderConfig.indexOf(stack.shift());
+    }
+    return rank;
+}
+/**
+ * Gets the rank of the node given the order.
+ * @param node the node to be evaluated.
+ * @param orderConfig the current order to be validated.
+ * @param supportsModifiers a flag indicating whether the type supports modifiers (scope or accessibility) or not.
+ */
+function getRank(node, orderConfig, supportsModifiers) {
+    const type = getNodeType(node);
+    if (type === null) {
+        // shouldn't happen but just in case, put it on the end
+        return orderConfig.length - 1;
+    }
+    const abstract = node.type === experimental_utils_1.AST_NODE_TYPES.TSAbstractClassProperty ||
+        node.type === experimental_utils_1.AST_NODE_TYPES.TSAbstractMethodDefinition;
+    const scope = 'static' in node && node.static
+        ? 'static'
+        : abstract
+            ? 'abstract'
+            : 'instance';
+    const accessibility = 'accessibility' in node && node.accessibility
+        ? node.accessibility
+        : 'public';
+    // Collect all existing member groups (e.g. 'public-instance-field', 'instance-field', 'public-field', 'constructor' etc.)
+    const memberGroups = [];
+    if (supportsModifiers) {
+        const decorated = 'decorators' in node && node.decorators.length > 0;
+        if (decorated && (type === 'field' || type === 'method')) {
+            memberGroups.push(`${accessibility}-decorated-${type}`);
+            memberGroups.push(`decorated-${type}`);
+        }
+        if (type !== 'constructor') {
+            // Constructors have no scope
+            memberGroups.push(`${accessibility}-${scope}-${type}`);
+            memberGroups.push(`${scope}-${type}`);
+        }
+        memberGroups.push(`${accessibility}-${type}`);
+    }
+    memberGroups.push(type);
+    return getRankOrder(memberGroups, orderConfig);
+}
+/**
+ * Gets the lowest possible rank higher than target.
+ * e.g. given the following order:
+ *   ...
+ *   public-static-method
+ *   protected-static-method
+ *   private-static-method
+ *   public-instance-method
+ *   protected-instance-method
+ *   private-instance-method
+ *   ...
+ * and considering that a public-instance-method has already been declared, so ranks contains
+ * public-instance-method, then the lowest possible rank for public-static-method is
+ * public-instance-method.
+ * @param ranks the existing ranks in the object.
+ * @param target the target rank.
+ * @param order the current order to be validated.
+ * @returns the name of the lowest possible rank without dashes (-).
+ */
+function getLowestRank(ranks, target, order) {
+    let lowest = ranks[ranks.length - 1];
+    ranks.forEach(rank => {
+        if (rank > target) {
+            lowest = Math.min(lowest, rank);
+        }
+    });
+    return order[lowest].replace(/-/g, ' ');
+}
+exports.default = util.createRule({
+    name: 'member-ordering',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Require a consistent member declaration order',
+            category: 'Stylistic Issues',
+            recommended: false,
+        },
+        messages: {
+            incorrectOrder: 'Member "{{member}}" should be declared before member "{{beforeMember}}".',
+            incorrectGroupOrder: 'Member {{name}} should be declared before all {{rank}} definitions.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    default: {
+                        oneOf: [
+                            neverConfig,
+                            arrayConfig(allMemberTypes),
+                            objectConfig(allMemberTypes),
+                        ],
+                    },
+                    classes: {
+                        oneOf: [
+                            neverConfig,
+                            arrayConfig(allMemberTypes),
+                            objectConfig(allMemberTypes),
+                        ],
+                    },
+                    classExpressions: {
+                        oneOf: [
+                            neverConfig,
+                            arrayConfig(allMemberTypes),
+                            objectConfig(allMemberTypes),
+                        ],
+                    },
+                    interfaces: {
+                        oneOf: [
+                            neverConfig,
+                            arrayConfig(['signature', 'field', 'method', 'constructor']),
+                            objectConfig(['signature', 'field', 'method', 'constructor']),
+                        ],
+                    },
+                    typeLiterals: {
+                        oneOf: [
+                            neverConfig,
+                            arrayConfig(['signature', 'field', 'method', 'constructor']),
+                            objectConfig(['signature', 'field', 'method', 'constructor']),
+                        ],
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            default: exports.defaultOrder,
+        },
+    ],
+    create(context, [options]) {
+        /**
+         * Checks if the member groups are correctly sorted.
+         *
+         * @param members Members to be validated.
+         * @param groupOrder Group order to be validated.
+         * @param supportsModifiers A flag indicating whether the type supports modifiers (scope or accessibility) or not.
+         *
+         * @return Array of member groups or null if one of the groups is not correctly sorted.
+         */
+        function checkGroupSort(members, groupOrder, supportsModifiers) {
+            const previousRanks = [];
+            const memberGroups = [];
+            let isCorrectlySorted = true;
+            // Find first member which isn't correctly sorted
+            members.forEach(member => {
+                const rank = getRank(member, groupOrder, supportsModifiers);
+                const name = getMemberName(member, context.getSourceCode());
+                const rankLastMember = previousRanks[previousRanks.length - 1];
+                if (rank === -1) {
+                    return;
+                }
+                // Works for 1st item because x < undefined === false for any x (typeof string)
+                if (rank < rankLastMember) {
+                    context.report({
+                        node: member,
+                        messageId: 'incorrectGroupOrder',
+                        data: {
+                            name,
+                            rank: getLowestRank(previousRanks, rank, groupOrder),
+                        },
+                    });
+                    isCorrectlySorted = false;
+                }
+                else if (rank === rankLastMember) {
+                    // Same member group --> Push to existing member group array
+                    memberGroups[memberGroups.length - 1].push(member);
+                }
+                else {
+                    // New member group --> Create new member group array
+                    previousRanks.push(rank);
+                    memberGroups.push([member]);
+                }
+            });
+            return isCorrectlySorted ? memberGroups : null;
+        }
+        /**
+         * Checks if the members are alphabetically sorted.
+         *
+         * @param members Members to be validated.
+         *
+         * @return True if all members are correctly sorted.
+         */
+        function checkAlphaSort(members) {
+            let previousName = '';
+            let isCorrectlySorted = true;
+            // Find first member which isn't correctly sorted
+            members.forEach(member => {
+                const name = getMemberName(member, context.getSourceCode());
+                // Note: Not all members have names
+                if (name) {
+                    if (name < previousName) {
+                        context.report({
+                            node: member,
+                            messageId: 'incorrectOrder',
+                            data: {
+                                member: name,
+                                beforeMember: previousName,
+                            },
+                        });
+                        isCorrectlySorted = false;
+                    }
+                    previousName = name;
+                }
+            });
+            return isCorrectlySorted;
+        }
+        /**
+         * Validates if all members are correctly sorted.
+         *
+         * @param members Members to be validated.
+         * @param orderConfig Order config to be validated.
+         * @param supportsModifiers A flag indicating whether the type supports modifiers (scope or accessibility) or not.
+         */
+        function validateMembersOrder(members, orderConfig, supportsModifiers) {
+            if (orderConfig === 'never') {
+                return;
+            }
+            // Standardize config
+            let order = null;
+            let memberTypes;
+            if (Array.isArray(orderConfig)) {
+                memberTypes = orderConfig;
+            }
+            else {
+                order = orderConfig.order;
+                memberTypes = orderConfig.memberTypes;
+            }
+            // Check order
+            if (Array.isArray(memberTypes)) {
+                const grouped = checkGroupSort(members, memberTypes, supportsModifiers);
+                if (grouped === null) {
+                    return;
+                }
+                if (order === 'alphabetically') {
+                    grouped.some(groupMember => !checkAlphaSort(groupMember));
+                }
+            }
+            else if (order === 'alphabetically') {
+                checkAlphaSort(members);
+            }
+        }
+        return {
+            ClassDeclaration(node) {
+                var _a;
+                validateMembersOrder(node.body.body, (_a = options.classes) !== null && _a !== void 0 ? _a : options.default, true);
+            },
+            ClassExpression(node) {
+                var _a;
+                validateMembersOrder(node.body.body, (_a = options.classExpressions) !== null && _a !== void 0 ? _a : options.default, true);
+            },
+            TSInterfaceDeclaration(node) {
+                var _a;
+                validateMembersOrder(node.body.body, (_a = options.interfaces) !== null && _a !== void 0 ? _a : options.default, false);
+            },
+            TSTypeLiteral(node) {
+                var _a;
+                validateMembersOrder(node.members, (_a = options.typeLiterals) !== null && _a !== void 0 ? _a : options.default, false);
+            },
+        };
+    },
+});
+//# sourceMappingURL=member-ordering.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-ordering.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-ordering.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..912eb4b436b30129171909f6e64bea0eb37d7bc7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-ordering.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"member-ordering.js","sourceRoot":"","sources":["../../src/rules/member-ordering.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,8EAK+C;AAC/C,8CAAgC;AAsBhC,MAAM,WAAW,GAA2B;IAC1C,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,CAAC,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,WAAqB,EAA0B,EAAE,CAAC,CAAC;IACtE,IAAI,EAAE,OAAO;IACb,KAAK,EAAE;QACL,IAAI,EAAE,WAAW;KAClB;CACF,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,WAAqB,EAA0B,EAAE,CAAC,CAAC;IACvE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;SAC/C;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,gBAAgB,EAAE,YAAY,CAAC;SACvC;KACF;IACD,oBAAoB,EAAE,KAAK;CAC5B,CAAC,CAAC;AAEU,QAAA,YAAY,GAAG;IAC1B,kBAAkB;IAClB,WAAW;IAEX,SAAS;IACT,qBAAqB;IACrB,wBAAwB;IACxB,sBAAsB;IAEtB,wBAAwB;IACxB,2BAA2B;IAC3B,yBAAyB;IAEzB,uBAAuB;IACvB,0BAA0B;IAC1B,wBAAwB;IAExB,uBAAuB;IACvB,0BAA0B;IAC1B,wBAAwB;IAExB,cAAc;IACd,iBAAiB;IACjB,eAAe;IAEf,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAEhB,iBAAiB;IAEjB,OAAO;IAEP,eAAe;IACf,oBAAoB;IACpB,uBAAuB;IACvB,qBAAqB;IAErB,aAAa;IAEb,UAAU;IACV,sBAAsB;IACtB,yBAAyB;IACzB,uBAAuB;IAEvB,yBAAyB;IACzB,4BAA4B;IAC5B,0BAA0B;IAE1B,wBAAwB;IACxB,2BAA2B;IAC3B,yBAAyB;IAEzB,wBAAwB;IACxB,2BAA2B;IAC3B,yBAAyB;IAEzB,eAAe;IACf,kBAAkB;IAClB,gBAAgB;IAEhB,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IAEjB,kBAAkB;IAElB,QAAQ;CACT,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,MAAM,CAE3E,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACd,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEf,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;QACzD,IAAI,IAAI,KAAK,WAAW,EAAE;YACxB,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,sBAAsB;SAC7D;QAED,8EAA8E;QAC9E,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,EAAE;YACzC,MAAM,mBAAmB,GAAG,GAAG,aAAa,cAAc,IAAI,EAAE,CAAC;YACjE,MAAM,kCAAkC,GAAG,aAAa,IAAI,EAAE,CAAC;YAC/D,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;gBACtC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;aAC/B;YACD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,kCAAkC,CAAC,EAAE;gBACrD,GAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;aAC9C;SACF;QAED,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,WAAW,EAAE;YAClD,uFAAuF;YACvF,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACjD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC,EAAE;oBACrC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;iBAC9B;gBAED,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;SACJ;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAAE,CAAC,CAAC;AAEP,MAAM,mBAAmB,GAAG;IAC1B,mCAAc,CAAC,kBAAkB;IACjC,mCAAc,CAAC,uBAAuB;CACvC,CAAC;AAEF;;;;GAIG;AACH,SAAS,WAAW,CAAC,IAAY;IAC/B,+CAA+C;IAC/C,QAAQ,IAAI,CAAC,IAAI,EAAE;QACjB,KAAK,mCAAc,CAAC,0BAA0B,CAAC;QAC/C,KAAK,mCAAc,CAAC,gBAAgB;YAClC,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,KAAK,mCAAc,CAAC,iBAAiB;YACnC,OAAO,QAAQ,CAAC;QAClB,KAAK,mCAAc,CAAC,+BAA+B;YACjD,OAAO,aAAa,CAAC;QACvB,KAAK,mCAAc,CAAC,uBAAuB,CAAC;QAC5C,KAAK,mCAAc,CAAC,aAAa;YAC/B,OAAO,IAAI,CAAC,KAAK,IAAI,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBAChE,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,OAAO,CAAC;QACd,KAAK,mCAAc,CAAC,mBAAmB;YACrC,OAAO,OAAO,CAAC;QACjB,KAAK,mCAAc,CAAC,gBAAgB;YAClC,OAAO,WAAW,CAAC;QACrB;YACE,OAAO,IAAI,CAAC;KACf;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CACpB,IAAY,EACZ,UAA+B;IAE/B,QAAQ,IAAI,CAAC,IAAI,EAAE;QACjB,KAAK,mCAAc,CAAC,mBAAmB,CAAC;QACxC,KAAK,mCAAc,CAAC,iBAAiB,CAAC;QACtC,KAAK,mCAAc,CAAC,uBAAuB,CAAC;QAC5C,KAAK,mCAAc,CAAC,aAAa;YAC/B,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAClD,KAAK,mCAAc,CAAC,0BAA0B,CAAC;QAC/C,KAAK,mCAAc,CAAC,gBAAgB;YAClC,OAAO,IAAI,CAAC,IAAI,KAAK,aAAa;gBAChC,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC/C,KAAK,mCAAc,CAAC,+BAA+B;YACjD,OAAO,KAAK,CAAC;QACf,KAAK,mCAAc,CAAC,gBAAgB;YAClC,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC9C;YACE,OAAO,IAAI,CAAC;KACf;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,YAAY,CAAC,YAAsB,EAAE,WAAqB;IACjE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,kCAAkC;IAEtE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;QACtC,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAG,CAAC,CAAC;KAC5C;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,OAAO,CACd,IAAY,EACZ,WAAqB,EACrB,iBAA0B;IAE1B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,IAAI,KAAK,IAAI,EAAE;QACjB,uDAAuD;QACvD,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;KAC/B;IAED,MAAM,QAAQ,GACZ,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,uBAAuB;QACpD,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,0BAA0B,CAAC;IAE1D,MAAM,KAAK,GACT,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM;QAC7B,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,UAAU,CAAC;IACjB,MAAM,aAAa,GACjB,eAAe,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa;QAC3C,CAAC,CAAC,IAAI,CAAC,aAAa;QACpB,CAAC,CAAC,QAAQ,CAAC;IAEf,0HAA0H;IAC1H,MAAM,YAAY,GAAG,EAAE,CAAC;IAExB,IAAI,iBAAiB,EAAE;QACrB,MAAM,SAAS,GAAG,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,UAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QACtE,IAAI,SAAS,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,CAAC,EAAE;YACxD,YAAY,CAAC,IAAI,CAAC,GAAG,aAAa,cAAc,IAAI,EAAE,CAAC,CAAC;YACxD,YAAY,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;SACxC;QAED,IAAI,IAAI,KAAK,aAAa,EAAE;YAC1B,6BAA6B;YAC7B,YAAY,CAAC,IAAI,CAAC,GAAG,aAAa,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;YACvD,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;SACvC;QAED,YAAY,CAAC,IAAI,CAAC,GAAG,aAAa,IAAI,IAAI,EAAE,CAAC,CAAC;KAC/C;IAED,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAExB,OAAO,YAAY,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAS,aAAa,CACpB,KAAe,EACf,MAAc,EACd,KAAe;IAEf,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAErC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,IAAI,IAAI,GAAG,MAAM,EAAE;YACjB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SACjC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,iBAAiB;IACvB,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,+CAA+C;YAC5D,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,KAAK;SACnB;QACD,QAAQ,EAAE;YACR,cAAc,EACZ,0EAA0E;YAC5E,mBAAmB,EACjB,qEAAqE;SACxE;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE;wBACP,KAAK,EAAE;4BACL,WAAW;4BACX,WAAW,CAAC,cAAc,CAAC;4BAC3B,YAAY,CAAC,cAAc,CAAC;yBAC7B;qBACF;oBACD,OAAO,EAAE;wBACP,KAAK,EAAE;4BACL,WAAW;4BACX,WAAW,CAAC,cAAc,CAAC;4BAC3B,YAAY,CAAC,cAAc,CAAC;yBAC7B;qBACF;oBACD,gBAAgB,EAAE;wBAChB,KAAK,EAAE;4BACL,WAAW;4BACX,WAAW,CAAC,cAAc,CAAC;4BAC3B,YAAY,CAAC,cAAc,CAAC;yBAC7B;qBACF;oBACD,UAAU,EAAE;wBACV,KAAK,EAAE;4BACL,WAAW;4BACX,WAAW,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;4BAC5D,YAAY,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;yBAC9D;qBACF;oBACD,YAAY,EAAE;wBACZ,KAAK,EAAE;4BACL,WAAW;4BACX,WAAW,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;4BAC5D,YAAY,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;yBAC9D;qBACF;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;SACF;KACF;IACD,cAAc,EAAE;QACd;YACE,OAAO,EAAE,oBAAY;SACtB;KACF;IACD,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC;QACvB;;;;;;;;WAQG;QACH,SAAS,cAAc,CACrB,OAAiB,EACjB,UAAoB,EACpB,iBAA0B;YAE1B,MAAM,aAAa,GAAa,EAAE,CAAC;YACnC,MAAM,YAAY,GAAoB,EAAE,CAAC;YACzC,IAAI,iBAAiB,GAAG,IAAI,CAAC;YAE7B,iDAAiD;YACjD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACvB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;gBAC5D,MAAM,cAAc,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAE/D,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;oBACf,OAAO;iBACR;gBAED,+EAA+E;gBAC/E,IAAI,IAAI,GAAG,cAAc,EAAE;oBACzB,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,MAAM;wBACZ,SAAS,EAAE,qBAAqB;wBAChC,IAAI,EAAE;4BACJ,IAAI;4BACJ,IAAI,EAAE,aAAa,CAAC,aAAa,EAAE,IAAI,EAAE,UAAU,CAAC;yBACrD;qBACF,CAAC,CAAC;oBAEH,iBAAiB,GAAG,KAAK,CAAC;iBAC3B;qBAAM,IAAI,IAAI,KAAK,cAAc,EAAE;oBAClC,4DAA4D;oBAC5D,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBACpD;qBAAM;oBACL,qDAAqD;oBACrD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzB,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;iBAC7B;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,iBAAiB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,CAAC;QAED;;;;;;WAMG;QACH,SAAS,cAAc,CAAC,OAAiB;YACvC,IAAI,YAAY,GAAG,EAAE,CAAC;YACtB,IAAI,iBAAiB,GAAG,IAAI,CAAC;YAE7B,iDAAiD;YACjD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACvB,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;gBAE5D,mCAAmC;gBACnC,IAAI,IAAI,EAAE;oBACR,IAAI,IAAI,GAAG,YAAY,EAAE;wBACvB,OAAO,CAAC,MAAM,CAAC;4BACb,IAAI,EAAE,MAAM;4BACZ,SAAS,EAAE,gBAAgB;4BAC3B,IAAI,EAAE;gCACJ,MAAM,EAAE,IAAI;gCACZ,YAAY,EAAE,YAAY;6BAC3B;yBACF,CAAC,CAAC;wBAEH,iBAAiB,GAAG,KAAK,CAAC;qBAC3B;oBAED,YAAY,GAAG,IAAI,CAAC;iBACrB;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QAED;;;;;;WAMG;QACH,SAAS,oBAAoB,CAC3B,OAAiB,EACjB,WAAwB,EACxB,iBAA0B;YAE1B,IAAI,WAAW,KAAK,OAAO,EAAE;gBAC3B,OAAO;aACR;YAED,qBAAqB;YACrB,IAAI,KAAK,GAAG,IAAI,CAAC;YACjB,IAAI,WAAW,CAAC;YAEhB,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBAC9B,WAAW,GAAG,WAAW,CAAC;aAC3B;iBAAM;gBACL,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;gBAC1B,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;aACvC;YAED,cAAc;YACd,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBAC9B,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;gBAExE,IAAI,OAAO,KAAK,IAAI,EAAE;oBACpB,OAAO;iBACR;gBAED,IAAI,KAAK,KAAK,gBAAgB,EAAE;oBAC9B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;iBAC3D;aACF;iBAAM,IAAI,KAAK,KAAK,gBAAgB,EAAE;gBACrC,cAAc,CAAC,OAAO,CAAC,CAAC;aACzB;QACH,CAAC;QAED,OAAO;YACL,gBAAgB,CAAC,IAAI;;gBACnB,oBAAoB,CAClB,IAAI,CAAC,IAAI,CAAC,IAAI,QACd,OAAO,CAAC,OAAO,mCAAI,OAAO,CAAC,OAAQ,EACnC,IAAI,CACL,CAAC;YACJ,CAAC;YACD,eAAe,CAAC,IAAI;;gBAClB,oBAAoB,CAClB,IAAI,CAAC,IAAI,CAAC,IAAI,QACd,OAAO,CAAC,gBAAgB,mCAAI,OAAO,CAAC,OAAQ,EAC5C,IAAI,CACL,CAAC;YACJ,CAAC;YACD,sBAAsB,CAAC,IAAI;;gBACzB,oBAAoB,CAClB,IAAI,CAAC,IAAI,CAAC,IAAI,QACd,OAAO,CAAC,UAAU,mCAAI,OAAO,CAAC,OAAQ,EACtC,KAAK,CACN,CAAC;YACJ,CAAC;YACD,aAAa,CAAC,IAAI;;gBAChB,oBAAoB,CAClB,IAAI,CAAC,OAAO,QACZ,OAAO,CAAC,YAAY,mCAAI,OAAO,CAAC,OAAQ,EACxC,KAAK,CACN,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/method-signature-style.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/method-signature-style.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c5911ee3296c3534c73c2491f7e7d417844487f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/method-signature-style.js
@@ -0,0 +1,200 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'method-signature-style',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Enforces using a particular method signature syntax.',
+            category: 'Best Practices',
+            recommended: false,
+        },
+        fixable: 'code',
+        messages: {
+            errorMethod: 'Shorthand method signature is forbidden. Use a function property instead.',
+            errorProperty: 'Function property signature is forbidden. Use a method shorthand instead.',
+        },
+        schema: [
+            {
+                enum: ['property', 'method'],
+            },
+        ],
+    },
+    defaultOptions: ['property'],
+    create(context, [mode]) {
+        const sourceCode = context.getSourceCode();
+        function getMethodKey(node) {
+            let key = sourceCode.getText(node.key);
+            if (node.computed) {
+                key = `[${key}]`;
+            }
+            if (node.optional) {
+                key = `${key}?`;
+            }
+            if (node.readonly) {
+                key = `readonly ${key}`;
+            }
+            return key;
+        }
+        function getMethodParams(node) {
+            let params = '()';
+            if (node.params.length > 0) {
+                const openingParen = util.nullThrows(sourceCode.getTokenBefore(node.params[0], util.isOpeningParenToken), 'Missing opening paren before first parameter');
+                const closingParen = util.nullThrows(sourceCode.getTokenAfter(node.params[node.params.length - 1], util.isClosingParenToken), 'Missing closing paren after last parameter');
+                params = sourceCode.text.substring(openingParen.range[0], closingParen.range[1]);
+            }
+            if (node.typeParameters != null) {
+                const typeParams = sourceCode.getText(node.typeParameters);
+                params = `${typeParams}${params}`;
+            }
+            return params;
+        }
+        function getMethodReturnType(node) {
+            return node.returnType == null
+                ? // if the method has no return type, it implicitly has an `any` return type
+                    // we just make it explicit here so we can do the fix
+                    'any'
+                : sourceCode.getText(node.returnType.typeAnnotation);
+        }
+        function getDelimiter(node) {
+            const lastToken = sourceCode.getLastToken(node);
+            if (lastToken &&
+                (util.isSemicolonToken(lastToken) || util.isCommaToken(lastToken))) {
+                return lastToken.value;
+            }
+            return '';
+        }
+        function isNodeParentModuleDeclaration(node) {
+            if (!node.parent) {
+                return false;
+            }
+            if (node.parent.type === experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration) {
+                return true;
+            }
+            if (node.parent.type === experimental_utils_1.AST_NODE_TYPES.Program) {
+                return false;
+            }
+            return isNodeParentModuleDeclaration(node.parent);
+        }
+        return {
+            TSMethodSignature(methodNode) {
+                if (mode === 'method') {
+                    return;
+                }
+                const parent = methodNode.parent;
+                const members = (parent === null || parent === void 0 ? void 0 : parent.type) === experimental_utils_1.AST_NODE_TYPES.TSInterfaceBody
+                    ? parent.body
+                    : (parent === null || parent === void 0 ? void 0 : parent.type) === experimental_utils_1.AST_NODE_TYPES.TSTypeLiteral
+                        ? parent.members
+                        : [];
+                const duplicatedKeyMethodNodes = members.filter((element) => element.type === experimental_utils_1.AST_NODE_TYPES.TSMethodSignature &&
+                    element !== methodNode &&
+                    getMethodKey(element) === getMethodKey(methodNode));
+                const isParentModule = isNodeParentModuleDeclaration(methodNode);
+                if (duplicatedKeyMethodNodes.length > 0) {
+                    if (isParentModule) {
+                        context.report({
+                            node: methodNode,
+                            messageId: 'errorMethod',
+                        });
+                    }
+                    else {
+                        context.report({
+                            node: methodNode,
+                            messageId: 'errorMethod',
+                            *fix(fixer) {
+                                const methodNodes = [
+                                    methodNode,
+                                    ...duplicatedKeyMethodNodes,
+                                ].sort((a, b) => (a.range[0] < b.range[0] ? -1 : 1));
+                                const typeString = methodNodes
+                                    .map(node => {
+                                    const params = getMethodParams(node);
+                                    const returnType = getMethodReturnType(node);
+                                    return `(${params} => ${returnType})`;
+                                })
+                                    .join(' & ');
+                                const key = getMethodKey(methodNode);
+                                const delimiter = getDelimiter(methodNode);
+                                yield fixer.replaceText(methodNode, `${key}: ${typeString}${delimiter}`);
+                                for (const node of duplicatedKeyMethodNodes) {
+                                    const lastToken = sourceCode.getLastToken(node);
+                                    if (lastToken) {
+                                        const nextToken = sourceCode.getTokenAfter(lastToken);
+                                        if (nextToken) {
+                                            yield fixer.remove(node);
+                                            yield fixer.replaceTextRange([lastToken.range[1], nextToken.range[0]], '');
+                                        }
+                                    }
+                                }
+                            },
+                        });
+                    }
+                    return;
+                }
+                if (isParentModule) {
+                    context.report({
+                        node: methodNode,
+                        messageId: 'errorMethod',
+                    });
+                }
+                else {
+                    context.report({
+                        node: methodNode,
+                        messageId: 'errorMethod',
+                        fix: fixer => {
+                            const key = getMethodKey(methodNode);
+                            const params = getMethodParams(methodNode);
+                            const returnType = getMethodReturnType(methodNode);
+                            const delimiter = getDelimiter(methodNode);
+                            return fixer.replaceText(methodNode, `${key}: ${params} => ${returnType}${delimiter}`);
+                        },
+                    });
+                }
+            },
+            TSPropertySignature(propertyNode) {
+                var _a;
+                const typeNode = (_a = propertyNode.typeAnnotation) === null || _a === void 0 ? void 0 : _a.typeAnnotation;
+                if ((typeNode === null || typeNode === void 0 ? void 0 : typeNode.type) !== experimental_utils_1.AST_NODE_TYPES.TSFunctionType) {
+                    return;
+                }
+                if (mode === 'property') {
+                    return;
+                }
+                context.report({
+                    node: propertyNode,
+                    messageId: 'errorProperty',
+                    fix: fixer => {
+                        const key = getMethodKey(propertyNode);
+                        const params = getMethodParams(typeNode);
+                        const returnType = getMethodReturnType(typeNode);
+                        const delimiter = getDelimiter(propertyNode);
+                        return fixer.replaceText(propertyNode, `${key}${params}: ${returnType}${delimiter}`);
+                    },
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=method-signature-style.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/method-signature-style.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/method-signature-style.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..264473d2726a26be21f980aa56dd816e5c684381
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/method-signature-style.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"method-signature-style.js","sourceRoot":"","sources":["../../src/rules/method-signature-style.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,8CAAgC;AAKhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,wBAAwB;IAC9B,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,sDAAsD;YACnE,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,KAAK;SACnB;QACD,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE;YACR,WAAW,EACT,2EAA2E;YAC7E,aAAa,EACX,2EAA2E;SAC9E;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;aAC7B;SACF;KACF;IACD,cAAc,EAAE,CAAC,UAAU,CAAC;IAE5B,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;QACpB,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAE3C,SAAS,YAAY,CACnB,IAA+D;YAE/D,IAAI,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;aAClB;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;aACjB;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,GAAG,GAAG,YAAY,GAAG,EAAE,CAAC;aACzB;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,SAAS,eAAe,CACtB,IAA0D;YAE1D,IAAI,MAAM,GAAG,IAAI,CAAC;YAClB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAClC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,EACnE,8CAA8C,CAC/C,CAAC;gBACF,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAClC,UAAU,CAAC,aAAa,CACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EACnC,IAAI,CAAC,mBAAmB,CACzB,EACD,4CAA4C,CAC7C,CAAC;gBAEF,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAChC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EACrB,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CACtB,CAAC;aACH;YACD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;gBAC/B,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC3D,MAAM,GAAG,GAAG,UAAU,GAAG,MAAM,EAAE,CAAC;aACnC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,SAAS,mBAAmB,CAC1B,IAA0D;YAE1D,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI;gBAC5B,CAAC,CAAC,2EAA2E;oBAC3E,qDAAqD;oBACrD,KAAK;gBACP,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QACzD,CAAC;QAED,SAAS,YAAY,CAAC,IAAmB;YACvC,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAChD,IACE,SAAS;gBACT,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAClE;gBACA,OAAO,SAAS,CAAC,KAAK,CAAC;aACxB;YAED,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,SAAS,6BAA6B,CAAC,IAAmB;YACxD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAChB,OAAO,KAAK,CAAC;aACd;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,mCAAc,CAAC,mBAAmB,EAAE;gBAC3D,OAAO,IAAI,CAAC;aACb;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,mCAAc,CAAC,OAAO,EAAE;gBAC/C,OAAO,KAAK,CAAC;aACd;YACD,OAAO,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;QAED,OAAO;YACL,iBAAiB,CAAC,UAAU;gBAC1B,IAAI,IAAI,KAAK,QAAQ,EAAE;oBACrB,OAAO;iBACR;gBAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;gBACjC,MAAM,OAAO,GACX,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,MAAK,mCAAc,CAAC,eAAe;oBAC7C,CAAC,CAAC,MAAM,CAAC,IAAI;oBACb,CAAC,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,MAAK,mCAAc,CAAC,aAAa;wBAC/C,CAAC,CAAC,MAAM,CAAC,OAAO;wBAChB,CAAC,CAAC,EAAE,CAAC;gBAET,MAAM,wBAAwB,GAAiC,OAAO,CAAC,MAAM,CAC3E,CAAC,OAAO,EAAyC,EAAE,CACjD,OAAO,CAAC,IAAI,KAAK,mCAAc,CAAC,iBAAiB;oBACjD,OAAO,KAAK,UAAU;oBACtB,YAAY,CAAC,OAAO,CAAC,KAAK,YAAY,CAAC,UAAU,CAAC,CACrD,CAAC;gBACF,MAAM,cAAc,GAAG,6BAA6B,CAAC,UAAU,CAAC,CAAC;gBAEjE,IAAI,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvC,IAAI,cAAc,EAAE;wBAClB,OAAO,CAAC,MAAM,CAAC;4BACb,IAAI,EAAE,UAAU;4BAChB,SAAS,EAAE,aAAa;yBACzB,CAAC,CAAC;qBACJ;yBAAM;wBACL,OAAO,CAAC,MAAM,CAAC;4BACb,IAAI,EAAE,UAAU;4BAChB,SAAS,EAAE,aAAa;4BACxB,CAAC,GAAG,CAAC,KAAK;gCACR,MAAM,WAAW,GAAG;oCAClB,UAAU;oCACV,GAAG,wBAAwB;iCAC5B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCACrD,MAAM,UAAU,GAAG,WAAW;qCAC3B,GAAG,CAAC,IAAI,CAAC,EAAE;oCACV,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;oCACrC,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;oCAC7C,OAAO,IAAI,MAAM,OAAO,UAAU,GAAG,CAAC;gCACxC,CAAC,CAAC;qCACD,IAAI,CAAC,KAAK,CAAC,CAAC;gCACf,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;gCACrC,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;gCAC3C,MAAM,KAAK,CAAC,WAAW,CACrB,UAAU,EACV,GAAG,GAAG,KAAK,UAAU,GAAG,SAAS,EAAE,CACpC,CAAC;gCACF,KAAK,MAAM,IAAI,IAAI,wBAAwB,EAAE;oCAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oCAChD,IAAI,SAAS,EAAE;wCACb,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;wCACtD,IAAI,SAAS,EAAE;4CACb,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;4CACzB,MAAM,KAAK,CAAC,gBAAgB,CAC1B,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EACxC,EAAE,CACH,CAAC;yCACH;qCACF;iCACF;4BACH,CAAC;yBACF,CAAC,CAAC;qBACJ;oBACD,OAAO;iBACR;gBAED,IAAI,cAAc,EAAE;oBAClB,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,UAAU;wBAChB,SAAS,EAAE,aAAa;qBACzB,CAAC,CAAC;iBACJ;qBAAM;oBACL,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,UAAU;wBAChB,SAAS,EAAE,aAAa;wBACxB,GAAG,EAAE,KAAK,CAAC,EAAE;4BACX,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;4BACrC,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;4BAC3C,MAAM,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;4BACnD,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;4BAC3C,OAAO,KAAK,CAAC,WAAW,CACtB,UAAU,EACV,GAAG,GAAG,KAAK,MAAM,OAAO,UAAU,GAAG,SAAS,EAAE,CACjD,CAAC;wBACJ,CAAC;qBACF,CAAC,CAAC;iBACJ;YACH,CAAC;YACD,mBAAmB,CAAC,YAAY;;gBAC9B,MAAM,QAAQ,SAAG,YAAY,CAAC,cAAc,0CAAE,cAAc,CAAC;gBAC7D,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,MAAK,mCAAc,CAAC,cAAc,EAAE;oBACpD,OAAO;iBACR;gBAED,IAAI,IAAI,KAAK,UAAU,EAAE;oBACvB,OAAO;iBACR;gBAED,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI,EAAE,YAAY;oBAClB,SAAS,EAAE,eAAe;oBAC1B,GAAG,EAAE,KAAK,CAAC,EAAE;wBACX,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;wBACvC,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;wBACzC,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;wBACjD,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;wBAC7C,OAAO,KAAK,CAAC,WAAW,CACtB,YAAY,EACZ,GAAG,GAAG,GAAG,MAAM,KAAK,UAAU,GAAG,SAAS,EAAE,CAC7C,CAAC;oBACJ,CAAC;iBACF,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/enums.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/enums.js
new file mode 100644
index 0000000000000000000000000000000000000000..ea6f2eb0a30886168b5d25ebbb2b14490fff068e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/enums.js
@@ -0,0 +1,94 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.UnderscoreOptions = exports.TypeModifiers = exports.Selectors = exports.PredefinedFormats = exports.Modifiers = exports.MetaSelectors = void 0;
+var PredefinedFormats;
+(function (PredefinedFormats) {
+    PredefinedFormats[PredefinedFormats["camelCase"] = 1] = "camelCase";
+    PredefinedFormats[PredefinedFormats["strictCamelCase"] = 2] = "strictCamelCase";
+    PredefinedFormats[PredefinedFormats["PascalCase"] = 3] = "PascalCase";
+    PredefinedFormats[PredefinedFormats["StrictPascalCase"] = 4] = "StrictPascalCase";
+    PredefinedFormats[PredefinedFormats["snake_case"] = 5] = "snake_case";
+    PredefinedFormats[PredefinedFormats["UPPER_CASE"] = 6] = "UPPER_CASE";
+})(PredefinedFormats || (PredefinedFormats = {}));
+exports.PredefinedFormats = PredefinedFormats;
+var UnderscoreOptions;
+(function (UnderscoreOptions) {
+    UnderscoreOptions[UnderscoreOptions["forbid"] = 1] = "forbid";
+    UnderscoreOptions[UnderscoreOptions["allow"] = 2] = "allow";
+    UnderscoreOptions[UnderscoreOptions["require"] = 3] = "require";
+    // special cases as it's common practice to use double underscore
+    UnderscoreOptions[UnderscoreOptions["requireDouble"] = 4] = "requireDouble";
+    UnderscoreOptions[UnderscoreOptions["allowDouble"] = 5] = "allowDouble";
+    UnderscoreOptions[UnderscoreOptions["allowSingleOrDouble"] = 6] = "allowSingleOrDouble";
+})(UnderscoreOptions || (UnderscoreOptions = {}));
+exports.UnderscoreOptions = UnderscoreOptions;
+var Selectors;
+(function (Selectors) {
+    // variableLike
+    Selectors[Selectors["variable"] = 1] = "variable";
+    Selectors[Selectors["function"] = 2] = "function";
+    Selectors[Selectors["parameter"] = 4] = "parameter";
+    // memberLike
+    Selectors[Selectors["parameterProperty"] = 8] = "parameterProperty";
+    Selectors[Selectors["accessor"] = 16] = "accessor";
+    Selectors[Selectors["enumMember"] = 32] = "enumMember";
+    Selectors[Selectors["classMethod"] = 64] = "classMethod";
+    Selectors[Selectors["objectLiteralMethod"] = 128] = "objectLiteralMethod";
+    Selectors[Selectors["typeMethod"] = 256] = "typeMethod";
+    Selectors[Selectors["classProperty"] = 512] = "classProperty";
+    Selectors[Selectors["objectLiteralProperty"] = 1024] = "objectLiteralProperty";
+    Selectors[Selectors["typeProperty"] = 2048] = "typeProperty";
+    // typeLike
+    Selectors[Selectors["class"] = 4096] = "class";
+    Selectors[Selectors["interface"] = 8192] = "interface";
+    Selectors[Selectors["typeAlias"] = 16384] = "typeAlias";
+    Selectors[Selectors["enum"] = 32768] = "enum";
+    Selectors[Selectors["typeParameter"] = 131072] = "typeParameter";
+})(Selectors || (Selectors = {}));
+exports.Selectors = Selectors;
+var MetaSelectors;
+(function (MetaSelectors) {
+    MetaSelectors[MetaSelectors["default"] = -1] = "default";
+    MetaSelectors[MetaSelectors["variableLike"] = 7] = "variableLike";
+    MetaSelectors[MetaSelectors["memberLike"] = 4088] = "memberLike";
+    MetaSelectors[MetaSelectors["typeLike"] = 192512] = "typeLike";
+    MetaSelectors[MetaSelectors["method"] = 448] = "method";
+    MetaSelectors[MetaSelectors["property"] = 3584] = "property";
+})(MetaSelectors || (MetaSelectors = {}));
+exports.MetaSelectors = MetaSelectors;
+var Modifiers;
+(function (Modifiers) {
+    // const variable
+    Modifiers[Modifiers["const"] = 1] = "const";
+    // readonly members
+    Modifiers[Modifiers["readonly"] = 2] = "readonly";
+    // static members
+    Modifiers[Modifiers["static"] = 4] = "static";
+    // member accessibility
+    Modifiers[Modifiers["public"] = 8] = "public";
+    Modifiers[Modifiers["protected"] = 16] = "protected";
+    Modifiers[Modifiers["private"] = 32] = "private";
+    Modifiers[Modifiers["abstract"] = 64] = "abstract";
+    // destructured variable
+    Modifiers[Modifiers["destructured"] = 128] = "destructured";
+    // variables declared in the top-level scope
+    Modifiers[Modifiers["global"] = 256] = "global";
+    // things that are exported
+    Modifiers[Modifiers["exported"] = 512] = "exported";
+    // things that are unused
+    Modifiers[Modifiers["unused"] = 1024] = "unused";
+    // properties that require quoting
+    Modifiers[Modifiers["requiresQuotes"] = 2048] = "requiresQuotes";
+    // make sure TypeModifiers starts at Modifiers + 1 or else sorting won't work
+})(Modifiers || (Modifiers = {}));
+exports.Modifiers = Modifiers;
+var TypeModifiers;
+(function (TypeModifiers) {
+    TypeModifiers[TypeModifiers["boolean"] = 4096] = "boolean";
+    TypeModifiers[TypeModifiers["string"] = 8192] = "string";
+    TypeModifiers[TypeModifiers["number"] = 16384] = "number";
+    TypeModifiers[TypeModifiers["function"] = 32768] = "function";
+    TypeModifiers[TypeModifiers["array"] = 65536] = "array";
+})(TypeModifiers || (TypeModifiers = {}));
+exports.TypeModifiers = TypeModifiers;
+//# sourceMappingURL=enums.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/enums.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/enums.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..9a55fe7b729514d4475c3736f1ecd57e53295d5b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/enums.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../../src/rules/naming-convention-utils/enums.ts"],"names":[],"mappings":";;;AAAA,IAAK,iBAOJ;AAPD,WAAK,iBAAiB;IACpB,mEAAa,CAAA;IACb,+EAAe,CAAA;IACf,qEAAU,CAAA;IACV,iFAAgB,CAAA;IAChB,qEAAU,CAAA;IACV,qEAAU,CAAA;AACZ,CAAC,EAPI,iBAAiB,KAAjB,iBAAiB,QAOrB;AAqHC,8CAAiB;AAlHnB,IAAK,iBASJ;AATD,WAAK,iBAAiB;IACpB,6DAAU,CAAA;IACV,2DAAK,CAAA;IACL,+DAAO,CAAA;IAEP,iEAAiE;IACjE,2EAAa,CAAA;IACb,uEAAW,CAAA;IACX,uFAAmB,CAAA;AACrB,CAAC,EATI,iBAAiB,KAAjB,iBAAiB,QASrB;AA+GC,8CAAiB;AA5GnB,IAAK,SAuBJ;AAvBD,WAAK,SAAS;IACZ,eAAe;IACf,iDAAiB,CAAA;IACjB,iDAAiB,CAAA;IACjB,mDAAkB,CAAA;IAElB,aAAa;IACb,mEAA0B,CAAA;IAC1B,kDAAiB,CAAA;IACjB,sDAAmB,CAAA;IACnB,wDAAoB,CAAA;IACpB,yEAA4B,CAAA;IAC5B,uDAAmB,CAAA;IACnB,6DAAsB,CAAA;IACtB,8EAA+B,CAAA;IAC/B,4DAAsB,CAAA;IAEtB,WAAW;IACX,8CAAe,CAAA;IACf,sDAAmB,CAAA;IACnB,uDAAmB,CAAA;IACnB,6CAAc,CAAA;IACd,gEAAuB,CAAA;AACzB,CAAC,EAvBI,SAAS,KAAT,SAAS,QAuBb;AAiFC,8BAAS;AA9EX,IAAK,aA8BJ;AA9BD,WAAK,aAAa;IAChB,wDAAY,CAAA;IACZ,iEAGqB,CAAA;IACrB,gEASoB,CAAA;IACpB,8DAKyB,CAAA;IACzB,uDAGsB,CAAA;IACtB,4DAGwB,CAAA;AAC1B,CAAC,EA9BI,aAAa,KAAb,aAAa,QA8BjB;AA0CC,sCAAa;AAtCf,IAAK,SAwBJ;AAxBD,WAAK,SAAS;IACZ,iBAAiB;IACjB,2CAAc,CAAA;IACd,mBAAmB;IACnB,iDAAiB,CAAA;IACjB,iBAAiB;IACjB,6CAAe,CAAA;IACf,uBAAuB;IACvB,6CAAe,CAAA;IACf,oDAAkB,CAAA;IAClB,gDAAgB,CAAA;IAChB,kDAAiB,CAAA;IACjB,wBAAwB;IACxB,2DAAqB,CAAA;IACrB,4CAA4C;IAC5C,+CAAe,CAAA;IACf,2BAA2B;IAC3B,mDAAiB,CAAA;IACjB,yBAAyB;IACzB,gDAAgB,CAAA;IAChB,kCAAkC;IAClC,gEAAwB,CAAA;IAExB,6EAA6E;AAC/E,CAAC,EAxBI,SAAS,KAAT,SAAS,QAwBb;AAgBC,8BAAS;AAbX,IAAK,aAMJ;AAND,WAAK,aAAa;IAChB,0DAAiB,CAAA;IACjB,wDAAgB,CAAA;IAChB,yDAAgB,CAAA;IAChB,6DAAkB,CAAA;IAClB,uDAAe,CAAA;AACjB,CAAC,EANI,aAAa,KAAb,aAAa,QAMjB;AAaC,sCAAa"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/format.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/format.js
new file mode 100644
index 0000000000000000000000000000000000000000..e59ab45802281e89c48ac3cc787417c9c2a91cc8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/format.js
@@ -0,0 +1,91 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.PredefinedFormatToCheckFunction = void 0;
+const enums_1 = require("./enums");
+/*
+These format functions are taken from `tslint-consistent-codestyle/naming-convention`:
+https://github.com/ajafff/tslint-consistent-codestyle/blob/ab156cc8881bcc401236d999f4ce034b59039e81/rules/namingConventionRule.ts#L603-L645
+
+The licence for the code can be viewed here:
+https://github.com/ajafff/tslint-consistent-codestyle/blob/ab156cc8881bcc401236d999f4ce034b59039e81/LICENSE
+*/
+/*
+Why not regex here? Because it's actually really, really difficult to create a regex to handle
+all of the unicode cases, and we have many non-english users that use non-english characters.
+https://gist.github.com/mathiasbynens/6334847
+*/
+function isPascalCase(name) {
+    return (name.length === 0 ||
+        (name[0] === name[0].toUpperCase() && !name.includes('_')));
+}
+function isStrictPascalCase(name) {
+    return (name.length === 0 ||
+        (name[0] === name[0].toUpperCase() && hasStrictCamelHumps(name, true)));
+}
+function isCamelCase(name) {
+    return (name.length === 0 ||
+        (name[0] === name[0].toLowerCase() && !name.includes('_')));
+}
+function isStrictCamelCase(name) {
+    return (name.length === 0 ||
+        (name[0] === name[0].toLowerCase() && hasStrictCamelHumps(name, false)));
+}
+function hasStrictCamelHumps(name, isUpper) {
+    function isUppercaseChar(char) {
+        return char === char.toUpperCase() && char !== char.toLowerCase();
+    }
+    if (name.startsWith('_')) {
+        return false;
+    }
+    for (let i = 1; i < name.length; ++i) {
+        if (name[i] === '_') {
+            return false;
+        }
+        if (isUpper === isUppercaseChar(name[i])) {
+            if (isUpper) {
+                return false;
+            }
+        }
+        else {
+            isUpper = !isUpper;
+        }
+    }
+    return true;
+}
+function isSnakeCase(name) {
+    return (name.length === 0 ||
+        (name === name.toLowerCase() && validateUnderscores(name)));
+}
+function isUpperCase(name) {
+    return (name.length === 0 ||
+        (name === name.toUpperCase() && validateUnderscores(name)));
+}
+/** Check for leading trailing and adjacent underscores */
+function validateUnderscores(name) {
+    if (name.startsWith('_')) {
+        return false;
+    }
+    let wasUnderscore = false;
+    for (let i = 1; i < name.length; ++i) {
+        if (name[i] === '_') {
+            if (wasUnderscore) {
+                return false;
+            }
+            wasUnderscore = true;
+        }
+        else {
+            wasUnderscore = false;
+        }
+    }
+    return !wasUnderscore;
+}
+const PredefinedFormatToCheckFunction = {
+    [enums_1.PredefinedFormats.PascalCase]: isPascalCase,
+    [enums_1.PredefinedFormats.StrictPascalCase]: isStrictPascalCase,
+    [enums_1.PredefinedFormats.camelCase]: isCamelCase,
+    [enums_1.PredefinedFormats.strictCamelCase]: isStrictCamelCase,
+    [enums_1.PredefinedFormats.UPPER_CASE]: isUpperCase,
+    [enums_1.PredefinedFormats.snake_case]: isSnakeCase,
+};
+exports.PredefinedFormatToCheckFunction = PredefinedFormatToCheckFunction;
+//# sourceMappingURL=format.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/format.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/format.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..881eba44f7d84ec3daf34ccbf17193971c30d245
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/format.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/rules/naming-convention-utils/format.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/index.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..e75eef61152878e52ec7b8a3161924fbac3d4f5a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/index.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parseOptions = exports.selectorTypeToMessageString = exports.SCHEMA = exports.Modifiers = void 0;
+var enums_1 = require("./enums");
+Object.defineProperty(exports, "Modifiers", { enumerable: true, get: function () { return enums_1.Modifiers; } });
+var schema_1 = require("./schema");
+Object.defineProperty(exports, "SCHEMA", { enumerable: true, get: function () { return schema_1.SCHEMA; } });
+var shared_1 = require("./shared");
+Object.defineProperty(exports, "selectorTypeToMessageString", { enumerable: true, get: function () { return shared_1.selectorTypeToMessageString; } });
+var parse_options_1 = require("./parse-options");
+Object.defineProperty(exports, "parseOptions", { enumerable: true, get: function () { return parse_options_1.parseOptions; } });
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/index.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..a307155bcf68cc58ee52243908cd2834824d33fb
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rules/naming-convention-utils/index.ts"],"names":[],"mappings":";;;AAAA,iCAAoC;AAA3B,kGAAA,SAAS,OAAA;AAGlB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,mCAAuD;AAA9C,qHAAA,2BAA2B,OAAA;AACpC,iDAA+C;AAAtC,6GAAA,YAAY,OAAA"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/parse-options.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/parse-options.js
new file mode 100644
index 0000000000000000000000000000000000000000..564828bcd25dbbedb7e99ea4ec4e0798b81e214a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/parse-options.js
@@ -0,0 +1,90 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parseOptions = void 0;
+const util = __importStar(require("../../util"));
+const enums_1 = require("./enums");
+const shared_1 = require("./shared");
+const validator_1 = require("./validator");
+function normalizeOption(option) {
+    var _a, _b, _c, _d, _e, _f;
+    let weight = 0;
+    (_a = option.modifiers) === null || _a === void 0 ? void 0 : _a.forEach(mod => {
+        weight |= enums_1.Modifiers[mod];
+    });
+    (_b = option.types) === null || _b === void 0 ? void 0 : _b.forEach(mod => {
+        weight |= enums_1.TypeModifiers[mod];
+    });
+    // give selectors with a filter the _highest_ priority
+    if (option.filter) {
+        weight |= 1 << 30;
+    }
+    const normalizedOption = {
+        // format options
+        format: option.format ? option.format.map(f => enums_1.PredefinedFormats[f]) : null,
+        custom: option.custom
+            ? {
+                regex: new RegExp(option.custom.regex, 'u'),
+                match: option.custom.match,
+            }
+            : null,
+        leadingUnderscore: option.leadingUnderscore !== undefined
+            ? enums_1.UnderscoreOptions[option.leadingUnderscore]
+            : null,
+        trailingUnderscore: option.trailingUnderscore !== undefined
+            ? enums_1.UnderscoreOptions[option.trailingUnderscore]
+            : null,
+        prefix: option.prefix && option.prefix.length > 0 ? option.prefix : null,
+        suffix: option.suffix && option.suffix.length > 0 ? option.suffix : null,
+        modifiers: (_d = (_c = option.modifiers) === null || _c === void 0 ? void 0 : _c.map(m => enums_1.Modifiers[m])) !== null && _d !== void 0 ? _d : null,
+        types: (_f = (_e = option.types) === null || _e === void 0 ? void 0 : _e.map(m => enums_1.TypeModifiers[m])) !== null && _f !== void 0 ? _f : null,
+        filter: option.filter !== undefined
+            ? typeof option.filter === 'string'
+                ? {
+                    regex: new RegExp(option.filter, 'u'),
+                    match: true,
+                }
+                : {
+                    regex: new RegExp(option.filter.regex, 'u'),
+                    match: option.filter.match,
+                }
+            : null,
+        // calculated ordering weight based on modifiers
+        modifierWeight: weight,
+    };
+    const selectors = Array.isArray(option.selector)
+        ? option.selector
+        : [option.selector];
+    return selectors.map(selector => (Object.assign({ selector: shared_1.isMetaSelector(selector)
+            ? enums_1.MetaSelectors[selector]
+            : enums_1.Selectors[selector] }, normalizedOption)));
+}
+function parseOptions(context) {
+    const normalizedOptions = context.options
+        .map(opt => normalizeOption(opt))
+        .reduce((acc, val) => acc.concat(val), []);
+    return util.getEnumNames(enums_1.Selectors).reduce((acc, k) => {
+        acc[k] = validator_1.createValidator(k, context, normalizedOptions);
+        return acc;
+    }, {});
+}
+exports.parseOptions = parseOptions;
+//# sourceMappingURL=parse-options.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/parse-options.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/parse-options.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..35767de3a0d86a38cee9bc204d8b0586d4bcb1f4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/parse-options.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"parse-options.js","sourceRoot":"","sources":["../../../src/rules/naming-convention-utils/parse-options.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/schema.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/schema.js
new file mode 100644
index 0000000000000000000000000000000000000000..c49f97934842b6aed9f0b1c6e6d941dcc07f11f9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/schema.js
@@ -0,0 +1,259 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.SCHEMA = void 0;
+const enums_1 = require("./enums");
+const util = __importStar(require("../../util"));
+const UNDERSCORE_SCHEMA = {
+    type: 'string',
+    enum: util.getEnumNames(enums_1.UnderscoreOptions),
+};
+const PREFIX_SUFFIX_SCHEMA = {
+    type: 'array',
+    items: {
+        type: 'string',
+        minLength: 1,
+    },
+    additionalItems: false,
+};
+const MATCH_REGEX_SCHEMA = {
+    type: 'object',
+    properties: {
+        match: { type: 'boolean' },
+        regex: { type: 'string' },
+    },
+    required: ['match', 'regex'],
+};
+const FORMAT_OPTIONS_PROPERTIES = {
+    format: {
+        oneOf: [
+            {
+                type: 'array',
+                items: {
+                    type: 'string',
+                    enum: util.getEnumNames(enums_1.PredefinedFormats),
+                },
+                additionalItems: false,
+            },
+            {
+                type: 'null',
+            },
+        ],
+    },
+    custom: MATCH_REGEX_SCHEMA,
+    leadingUnderscore: UNDERSCORE_SCHEMA,
+    trailingUnderscore: UNDERSCORE_SCHEMA,
+    prefix: PREFIX_SUFFIX_SCHEMA,
+    suffix: PREFIX_SUFFIX_SCHEMA,
+    failureMessage: {
+        type: 'string',
+    },
+};
+function selectorSchema(selectorString, allowType, modifiers) {
+    const selector = {
+        filter: {
+            oneOf: [
+                {
+                    type: 'string',
+                    minLength: 1,
+                },
+                MATCH_REGEX_SCHEMA,
+            ],
+        },
+        selector: {
+            type: 'string',
+            enum: [selectorString],
+        },
+    };
+    if (modifiers && modifiers.length > 0) {
+        selector.modifiers = {
+            type: 'array',
+            items: {
+                type: 'string',
+                enum: modifiers,
+            },
+            additionalItems: false,
+        };
+    }
+    if (allowType) {
+        selector.types = {
+            type: 'array',
+            items: {
+                type: 'string',
+                enum: util.getEnumNames(enums_1.TypeModifiers),
+            },
+            additionalItems: false,
+        };
+    }
+    return [
+        {
+            type: 'object',
+            properties: Object.assign(Object.assign({}, FORMAT_OPTIONS_PROPERTIES), selector),
+            required: ['selector', 'format'],
+            additionalProperties: false,
+        },
+    ];
+}
+function selectorsSchema() {
+    return {
+        type: 'object',
+        properties: Object.assign(Object.assign({}, FORMAT_OPTIONS_PROPERTIES), {
+            filter: {
+                oneOf: [
+                    {
+                        type: 'string',
+                        minLength: 1,
+                    },
+                    MATCH_REGEX_SCHEMA,
+                ],
+            },
+            selector: {
+                type: 'array',
+                items: {
+                    type: 'string',
+                    enum: [
+                        ...util.getEnumNames(enums_1.MetaSelectors),
+                        ...util.getEnumNames(enums_1.Selectors),
+                    ],
+                },
+                additionalItems: false,
+            },
+            modifiers: {
+                type: 'array',
+                items: {
+                    type: 'string',
+                    enum: util.getEnumNames(enums_1.Modifiers),
+                },
+                additionalItems: false,
+            },
+            types: {
+                type: 'array',
+                items: {
+                    type: 'string',
+                    enum: util.getEnumNames(enums_1.TypeModifiers),
+                },
+                additionalItems: false,
+            },
+        }),
+        required: ['selector', 'format'],
+        additionalProperties: false,
+    };
+}
+const SCHEMA = {
+    type: 'array',
+    items: {
+        oneOf: [
+            selectorsSchema(),
+            ...selectorSchema('default', false, util.getEnumNames(enums_1.Modifiers)),
+            ...selectorSchema('variableLike', false, ['unused']),
+            ...selectorSchema('variable', true, [
+                'const',
+                'destructured',
+                'exported',
+                'global',
+                'unused',
+            ]),
+            ...selectorSchema('function', false, ['exported', 'global', 'unused']),
+            ...selectorSchema('parameter', true, ['destructured', 'unused']),
+            ...selectorSchema('memberLike', false, [
+                'abstract',
+                'private',
+                'protected',
+                'public',
+                'readonly',
+                'requiresQuotes',
+                'static',
+            ]),
+            ...selectorSchema('classProperty', true, [
+                'abstract',
+                'private',
+                'protected',
+                'public',
+                'readonly',
+                'requiresQuotes',
+                'static',
+            ]),
+            ...selectorSchema('objectLiteralProperty', true, [
+                'public',
+                'requiresQuotes',
+            ]),
+            ...selectorSchema('typeProperty', true, [
+                'public',
+                'readonly',
+                'requiresQuotes',
+            ]),
+            ...selectorSchema('parameterProperty', true, [
+                'private',
+                'protected',
+                'public',
+                'readonly',
+            ]),
+            ...selectorSchema('property', true, [
+                'abstract',
+                'private',
+                'protected',
+                'public',
+                'readonly',
+                'requiresQuotes',
+                'static',
+            ]),
+            ...selectorSchema('classMethod', false, [
+                'abstract',
+                'private',
+                'protected',
+                'public',
+                'requiresQuotes',
+                'static',
+            ]),
+            ...selectorSchema('objectLiteralMethod', false, [
+                'public',
+                'requiresQuotes',
+            ]),
+            ...selectorSchema('typeMethod', false, ['public', 'requiresQuotes']),
+            ...selectorSchema('method', false, [
+                'abstract',
+                'private',
+                'protected',
+                'public',
+                'requiresQuotes',
+                'static',
+            ]),
+            ...selectorSchema('accessor', true, [
+                'abstract',
+                'private',
+                'protected',
+                'public',
+                'requiresQuotes',
+                'static',
+            ]),
+            ...selectorSchema('enumMember', false, ['requiresQuotes']),
+            ...selectorSchema('typeLike', false, ['abstract', 'exported', 'unused']),
+            ...selectorSchema('class', false, ['abstract', 'exported', 'unused']),
+            ...selectorSchema('interface', false, ['exported', 'unused']),
+            ...selectorSchema('typeAlias', false, ['exported', 'unused']),
+            ...selectorSchema('enum', false, ['exported', 'unused']),
+            ...selectorSchema('typeParameter', false, ['unused']),
+        ],
+    },
+    additionalItems: false,
+};
+exports.SCHEMA = SCHEMA;
+//# sourceMappingURL=schema.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/schema.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/schema.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..515f628d094236544cd0a16ecef4e6f83eb6390a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/schema.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/rules/naming-convention-utils/schema.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/shared.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/shared.js
new file mode 100644
index 0000000000000000000000000000000000000000..b7b659a75154761dc329c16fe7c3b39c630ed16a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/shared.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isMetaSelector = exports.selectorTypeToMessageString = void 0;
+const enums_1 = require("./enums");
+function selectorTypeToMessageString(selectorType) {
+    const notCamelCase = selectorType.replace(/([A-Z])/g, ' $1');
+    return notCamelCase.charAt(0).toUpperCase() + notCamelCase.slice(1);
+}
+exports.selectorTypeToMessageString = selectorTypeToMessageString;
+function isMetaSelector(selector) {
+    return selector in enums_1.MetaSelectors;
+}
+exports.isMetaSelector = isMetaSelector;
+//# sourceMappingURL=shared.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/shared.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/shared.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e842c62fcf4a6cec2daa923ac52c5f4131ecf2b9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/shared.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/rules/naming-convention-utils/shared.ts"],"names":[],"mappings":";;;AAAA,mCAMiB;AAEjB,SAAS,2BAA2B,CAAC,YAA6B;IAChE,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC7D,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAQQ,kEAA2B;AANpC,SAAS,cAAc,CACrB,QAAsE;IAEtE,OAAO,QAAQ,IAAI,qBAAa,CAAC;AACnC,CAAC;AAEqC,wCAAc"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/types.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/types.js
new file mode 100644
index 0000000000000000000000000000000000000000..11e638d1ee44ae0dcb1feb5aef676ea74a7d4df3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/types.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=types.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/types.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/types.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..60c24d818a392ded052bd2ff8b946dd5f159de68
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/rules/naming-convention-utils/types.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/validator.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/validator.js
new file mode 100644
index 0000000000000000000000000000000000000000..f74236e56bb1cc792d19621d6e242fa3d2961635
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/validator.js
@@ -0,0 +1,359 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createValidator = void 0;
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const enums_1 = require("./enums");
+const format_1 = require("./format");
+const shared_1 = require("./shared");
+const util = __importStar(require("../../util"));
+function createValidator(type, context, allConfigs) {
+    // make sure the "highest priority" configs are checked first
+    const selectorType = enums_1.Selectors[type];
+    const configs = allConfigs
+        // gather all of the applicable selectors
+        .filter(c => (c.selector & selectorType) !== 0 ||
+        c.selector === enums_1.MetaSelectors.default)
+        .sort((a, b) => {
+        if (a.selector === b.selector) {
+            // in the event of the same selector, order by modifier weight
+            // sort descending - the type modifiers are "more important"
+            return b.modifierWeight - a.modifierWeight;
+        }
+        const aIsMeta = shared_1.isMetaSelector(a.selector);
+        const bIsMeta = shared_1.isMetaSelector(b.selector);
+        // non-meta selectors should go ahead of meta selectors
+        if (aIsMeta && !bIsMeta) {
+            return 1;
+        }
+        if (!aIsMeta && bIsMeta) {
+            return -1;
+        }
+        // both aren't meta selectors
+        // sort descending - the meta selectors are "least important"
+        return b.selector - a.selector;
+    });
+    return (node, modifiers = new Set()) => {
+        var _a, _b, _c;
+        const originalName = node.type === experimental_utils_1.AST_NODE_TYPES.Identifier ? node.name : `${node.value}`;
+        // return will break the loop and stop checking configs
+        // it is only used when the name is known to have failed or succeeded a config.
+        for (const config of configs) {
+            if (((_a = config.filter) === null || _a === void 0 ? void 0 : _a.regex.test(originalName)) !== ((_b = config.filter) === null || _b === void 0 ? void 0 : _b.match)) {
+                // name does not match the filter
+                continue;
+            }
+            if ((_c = config.modifiers) === null || _c === void 0 ? void 0 : _c.some(modifier => !modifiers.has(modifier))) {
+                // does not have the required modifiers
+                continue;
+            }
+            if (!isCorrectType(node, config, context, selectorType)) {
+                // is not the correct type
+                continue;
+            }
+            let name = originalName;
+            name = validateUnderscore('leading', config, name, node, originalName);
+            if (name === null) {
+                // fail
+                return;
+            }
+            name = validateUnderscore('trailing', config, name, node, originalName);
+            if (name === null) {
+                // fail
+                return;
+            }
+            name = validateAffix('prefix', config, name, node, originalName);
+            if (name === null) {
+                // fail
+                return;
+            }
+            name = validateAffix('suffix', config, name, node, originalName);
+            if (name === null) {
+                // fail
+                return;
+            }
+            if (!validateCustom(config, name, node, originalName)) {
+                // fail
+                return;
+            }
+            if (!validatePredefinedFormat(config, name, node, originalName)) {
+                // fail
+                return;
+            }
+            // it's valid for this config, so we don't need to check any more configs
+            return;
+        }
+    };
+    // centralizes the logic for formatting the report data
+    function formatReportData({ affixes, formats, originalName, processedName, position, custom, count, }) {
+        var _a;
+        return {
+            type: shared_1.selectorTypeToMessageString(type),
+            name: originalName,
+            processedName,
+            position,
+            count,
+            affixes: affixes === null || affixes === void 0 ? void 0 : affixes.join(', '),
+            formats: formats === null || formats === void 0 ? void 0 : formats.map(f => enums_1.PredefinedFormats[f]).join(', '),
+            regex: (_a = custom === null || custom === void 0 ? void 0 : custom.regex) === null || _a === void 0 ? void 0 : _a.toString(),
+            regexMatch: (custom === null || custom === void 0 ? void 0 : custom.match) === true
+                ? 'match'
+                : (custom === null || custom === void 0 ? void 0 : custom.match) === false
+                    ? 'not match'
+                    : null,
+        };
+    }
+    /**
+     * @returns the name with the underscore removed, if it is valid according to the specified underscore option, null otherwise
+     */
+    function validateUnderscore(position, config, name, node, originalName) {
+        const option = position === 'leading'
+            ? config.leadingUnderscore
+            : config.trailingUnderscore;
+        if (!option) {
+            return name;
+        }
+        const hasSingleUnderscore = position === 'leading'
+            ? () => name.startsWith('_')
+            : () => name.endsWith('_');
+        const trimSingleUnderscore = position === 'leading'
+            ? () => name.slice(1)
+            : () => name.slice(0, -1);
+        const hasDoubleUnderscore = position === 'leading'
+            ? () => name.startsWith('__')
+            : () => name.endsWith('__');
+        const trimDoubleUnderscore = position === 'leading'
+            ? () => name.slice(2)
+            : () => name.slice(0, -2);
+        switch (option) {
+            // ALLOW - no conditions as the user doesn't care if it's there or not
+            case enums_1.UnderscoreOptions.allow: {
+                if (hasSingleUnderscore()) {
+                    return trimSingleUnderscore();
+                }
+                return name;
+            }
+            case enums_1.UnderscoreOptions.allowDouble: {
+                if (hasDoubleUnderscore()) {
+                    return trimDoubleUnderscore();
+                }
+                return name;
+            }
+            case enums_1.UnderscoreOptions.allowSingleOrDouble: {
+                if (hasDoubleUnderscore()) {
+                    return trimDoubleUnderscore();
+                }
+                if (hasSingleUnderscore()) {
+                    return trimSingleUnderscore();
+                }
+                return name;
+            }
+            // FORBID
+            case enums_1.UnderscoreOptions.forbid: {
+                if (hasSingleUnderscore()) {
+                    context.report({
+                        node,
+                        messageId: 'unexpectedUnderscore',
+                        data: formatReportData({
+                            originalName,
+                            position,
+                            count: 'one',
+                        }),
+                    });
+                    return null;
+                }
+                return name;
+            }
+            // REQUIRE
+            case enums_1.UnderscoreOptions.require: {
+                if (!hasSingleUnderscore()) {
+                    context.report({
+                        node,
+                        messageId: 'missingUnderscore',
+                        data: formatReportData({
+                            originalName,
+                            position,
+                            count: 'one',
+                        }),
+                    });
+                    return null;
+                }
+                return trimSingleUnderscore();
+            }
+            case enums_1.UnderscoreOptions.requireDouble: {
+                if (!hasDoubleUnderscore()) {
+                    context.report({
+                        node,
+                        messageId: 'missingUnderscore',
+                        data: formatReportData({
+                            originalName,
+                            position,
+                            count: 'two',
+                        }),
+                    });
+                    return null;
+                }
+                return trimDoubleUnderscore();
+            }
+        }
+    }
+    /**
+     * @returns the name with the affix removed, if it is valid according to the specified affix option, null otherwise
+     */
+    function validateAffix(position, config, name, node, originalName) {
+        const affixes = config[position];
+        if (!affixes || affixes.length === 0) {
+            return name;
+        }
+        for (const affix of affixes) {
+            const hasAffix = position === 'prefix' ? name.startsWith(affix) : name.endsWith(affix);
+            const trimAffix = position === 'prefix'
+                ? () => name.slice(affix.length)
+                : () => name.slice(0, -affix.length);
+            if (hasAffix) {
+                // matches, so trim it and return
+                return trimAffix();
+            }
+        }
+        context.report({
+            node,
+            messageId: 'missingAffix',
+            data: formatReportData({
+                originalName,
+                position,
+                affixes,
+            }),
+        });
+        return null;
+    }
+    /**
+     * @returns true if the name is valid according to the `regex` option, false otherwise
+     */
+    function validateCustom(config, name, node, originalName) {
+        const custom = config.custom;
+        if (!custom) {
+            return true;
+        }
+        const result = custom.regex.test(name);
+        if (custom.match && result) {
+            return true;
+        }
+        if (!custom.match && !result) {
+            return true;
+        }
+        context.report({
+            node,
+            messageId: 'satisfyCustom',
+            data: formatReportData({
+                originalName,
+                custom,
+            }),
+        });
+        return false;
+    }
+    /**
+     * @returns true if the name is valid according to the `format` option, false otherwise
+     */
+    function validatePredefinedFormat(config, name, node, originalName) {
+        const formats = config.format;
+        if (formats === null || formats.length === 0) {
+            return true;
+        }
+        for (const format of formats) {
+            const checker = format_1.PredefinedFormatToCheckFunction[format];
+            if (checker(name)) {
+                return true;
+            }
+        }
+        context.report({
+            node,
+            messageId: originalName === name
+                ? 'doesNotMatchFormat'
+                : 'doesNotMatchFormatTrimmed',
+            data: formatReportData({
+                originalName,
+                processedName: name,
+                formats,
+            }),
+        });
+        return false;
+    }
+}
+exports.createValidator = createValidator;
+const SelectorsAllowedToHaveTypes = enums_1.Selectors.variable |
+    enums_1.Selectors.parameter |
+    enums_1.Selectors.classProperty |
+    enums_1.Selectors.objectLiteralProperty |
+    enums_1.Selectors.typeProperty |
+    enums_1.Selectors.parameterProperty |
+    enums_1.Selectors.accessor;
+function isCorrectType(node, config, context, selector) {
+    if (config.types === null) {
+        return true;
+    }
+    if ((SelectorsAllowedToHaveTypes & selector) === 0) {
+        return true;
+    }
+    const { esTreeNodeToTSNodeMap, program } = util.getParserServices(context);
+    const checker = program.getTypeChecker();
+    const tsNode = esTreeNodeToTSNodeMap.get(node);
+    const type = checker
+        .getTypeAtLocation(tsNode)
+        // remove null and undefined from the type, as we don't care about it here
+        .getNonNullableType();
+    for (const allowedType of config.types) {
+        switch (allowedType) {
+            case enums_1.TypeModifiers.array:
+                if (isAllTypesMatch(type, t => checker.isArrayType(t) || checker.isTupleType(t))) {
+                    return true;
+                }
+                break;
+            case enums_1.TypeModifiers.function:
+                if (isAllTypesMatch(type, t => t.getCallSignatures().length > 0)) {
+                    return true;
+                }
+                break;
+            case enums_1.TypeModifiers.boolean:
+            case enums_1.TypeModifiers.number:
+            case enums_1.TypeModifiers.string: {
+                const typeString = checker.typeToString(
+                // this will resolve things like true => boolean, 'a' => string and 1 => number
+                checker.getWidenedType(checker.getBaseTypeOfLiteralType(type)));
+                const allowedTypeString = enums_1.TypeModifiers[allowedType];
+                if (typeString === allowedTypeString) {
+                    return true;
+                }
+                break;
+            }
+        }
+    }
+    return false;
+}
+/**
+ * @returns `true` if the type (or all union types) in the given type return true for the callback
+ */
+function isAllTypesMatch(type, cb) {
+    if (type.isUnion()) {
+        return type.types.every(t => cb(t));
+    }
+    return cb(type);
+}
+//# sourceMappingURL=validator.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/validator.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/validator.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..94648ec7d7b3a0d75d4c41f40c48139a4ef5cca4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/validator.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/rules/naming-convention-utils/validator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAE/C,mCAQiB;AACjB,qCAA2D;AAC3D,qCAAuE;AAEvE,iDAAmC;AAEnC,SAAS,eAAe,CACtB,IAAqB,EACrB,OAAgB,EAChB,UAAgC;IAEhC,6DAA6D;IAC7D,MAAM,YAAY,GAAG,iBAAS,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,UAAU;QACxB,yCAAyC;SACxC,MAAM,CACL,CAAC,CAAC,EAAE,CACF,CAAC,CAAC,CAAC,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC;QACjC,CAAC,CAAC,QAAQ,KAAK,qBAAa,CAAC,OAAO,CACvC;SACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE;YAC7B,8DAA8D;YAC9D,4DAA4D;YAC5D,OAAO,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC;SAC5C;QAED,MAAM,OAAO,GAAG,uBAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,uBAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE3C,uDAAuD;QACvD,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE;YACvB,OAAO,CAAC,CAAC;SACV;QACD,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE;YACvB,OAAO,CAAC,CAAC,CAAC;SACX;QAED,6BAA6B;QAC7B,6DAA6D;QAC7D,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,OAAO,CACL,IAA4C,EAC5C,YAA4B,IAAI,GAAG,EAAa,EAC1C,EAAE;;QACR,MAAM,YAAY,GAChB,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAExE,uDAAuD;QACvD,+EAA+E;QAC/E,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,IAAI,OAAA,MAAM,CAAC,MAAM,0CAAE,KAAK,CAAC,IAAI,CAAC,YAAY,cAAM,MAAM,CAAC,MAAM,0CAAE,KAAK,CAAA,EAAE;gBACpE,iCAAiC;gBACjC,SAAS;aACV;YAED,UAAI,MAAM,CAAC,SAAS,0CAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG;gBAChE,uCAAuC;gBACvC,SAAS;aACV;YAED,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE;gBACvD,0BAA0B;gBAC1B,SAAS;aACV;YAED,IAAI,IAAI,GAAkB,YAAY,CAAC;YAEvC,IAAI,GAAG,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;YACvE,IAAI,IAAI,KAAK,IAAI,EAAE;gBACjB,OAAO;gBACP,OAAO;aACR;YAED,IAAI,GAAG,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;YACxE,IAAI,IAAI,KAAK,IAAI,EAAE;gBACjB,OAAO;gBACP,OAAO;aACR;YAED,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;YACjE,IAAI,IAAI,KAAK,IAAI,EAAE;gBACjB,OAAO;gBACP,OAAO;aACR;YAED,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;YACjE,IAAI,IAAI,KAAK,IAAI,EAAE;gBACjB,OAAO;gBACP,OAAO;aACR;YAED,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE;gBACrD,OAAO;gBACP,OAAO;aACR;YAED,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE;gBAC/D,OAAO;gBACP,OAAO;aACR;YAED,yEAAyE;YACzE,OAAO;SACR;IACH,CAAC,CAAC;IAEF,uDAAuD;IACvD,SAAS,gBAAgB,CAAC,EACxB,OAAO,EACP,OAAO,EACP,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,MAAM,EACN,KAAK,GASN;;QACC,OAAO;YACL,IAAI,EAAE,oCAA2B,CAAC,IAAI,CAAC;YACvC,IAAI,EAAE,YAAY;YAClB,aAAa;YACb,QAAQ;YACR,KAAK;YACL,OAAO,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC,IAAI,CAAC;YAC5B,OAAO,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,yBAAiB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;YAC3D,KAAK,QAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,QAAQ,EAAE;YAChC,UAAU,EACR,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,MAAK,IAAI;gBACpB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,MAAK,KAAK;oBACzB,CAAC,CAAC,WAAW;oBACb,CAAC,CAAC,IAAI;SACX,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS,kBAAkB,CACzB,QAAgC,EAChC,MAA0B,EAC1B,IAAY,EACZ,IAA4C,EAC5C,YAAoB;QAEpB,MAAM,MAAM,GACV,QAAQ,KAAK,SAAS;YACpB,CAAC,CAAC,MAAM,CAAC,iBAAiB;YAC1B,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAC;SACb;QAED,MAAM,mBAAmB,GACvB,QAAQ,KAAK,SAAS;YACpB,CAAC,CAAC,GAAY,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACrC,CAAC,CAAC,GAAY,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,oBAAoB,GACxB,QAAQ,KAAK,SAAS;YACpB,CAAC,CAAC,GAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,GAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEtC,MAAM,mBAAmB,GACvB,QAAQ,KAAK,SAAS;YACpB,CAAC,CAAC,GAAY,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACtC,CAAC,CAAC,GAAY,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,oBAAoB,GACxB,QAAQ,KAAK,SAAS;YACpB,CAAC,CAAC,GAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,GAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEtC,QAAQ,MAAM,EAAE;YACd,sEAAsE;YACtE,KAAK,yBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC5B,IAAI,mBAAmB,EAAE,EAAE;oBACzB,OAAO,oBAAoB,EAAE,CAAC;iBAC/B;gBAED,OAAO,IAAI,CAAC;aACb;YAED,KAAK,yBAAiB,CAAC,WAAW,CAAC,CAAC;gBAClC,IAAI,mBAAmB,EAAE,EAAE;oBACzB,OAAO,oBAAoB,EAAE,CAAC;iBAC/B;gBAED,OAAO,IAAI,CAAC;aACb;YAED,KAAK,yBAAiB,CAAC,mBAAmB,CAAC,CAAC;gBAC1C,IAAI,mBAAmB,EAAE,EAAE;oBACzB,OAAO,oBAAoB,EAAE,CAAC;iBAC/B;gBAED,IAAI,mBAAmB,EAAE,EAAE;oBACzB,OAAO,oBAAoB,EAAE,CAAC;iBAC/B;gBAED,OAAO,IAAI,CAAC;aACb;YAED,SAAS;YACT,KAAK,yBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,mBAAmB,EAAE,EAAE;oBACzB,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,sBAAsB;wBACjC,IAAI,EAAE,gBAAgB,CAAC;4BACrB,YAAY;4BACZ,QAAQ;4BACR,KAAK,EAAE,KAAK;yBACb,CAAC;qBACH,CAAC,CAAC;oBACH,OAAO,IAAI,CAAC;iBACb;gBAED,OAAO,IAAI,CAAC;aACb;YAED,UAAU;YACV,KAAK,yBAAiB,CAAC,OAAO,CAAC,CAAC;gBAC9B,IAAI,CAAC,mBAAmB,EAAE,EAAE;oBAC1B,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,mBAAmB;wBAC9B,IAAI,EAAE,gBAAgB,CAAC;4BACrB,YAAY;4BACZ,QAAQ;4BACR,KAAK,EAAE,KAAK;yBACb,CAAC;qBACH,CAAC,CAAC;oBACH,OAAO,IAAI,CAAC;iBACb;gBAED,OAAO,oBAAoB,EAAE,CAAC;aAC/B;YAED,KAAK,yBAAiB,CAAC,aAAa,CAAC,CAAC;gBACpC,IAAI,CAAC,mBAAmB,EAAE,EAAE;oBAC1B,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,mBAAmB;wBAC9B,IAAI,EAAE,gBAAgB,CAAC;4BACrB,YAAY;4BACZ,QAAQ;4BACR,KAAK,EAAE,KAAK;yBACb,CAAC;qBACH,CAAC,CAAC;oBACH,OAAO,IAAI,CAAC;iBACb;gBAED,OAAO,oBAAoB,EAAE,CAAC;aAC/B;SACF;IACH,CAAC;IAED;;OAEG;IACH,SAAS,aAAa,CACpB,QAA6B,EAC7B,MAA0B,EAC1B,IAAY,EACZ,IAA4C,EAC5C,YAAoB;QAEpB,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACpC,OAAO,IAAI,CAAC;SACb;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;YAC3B,MAAM,QAAQ,GACZ,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxE,MAAM,SAAS,GACb,QAAQ,KAAK,QAAQ;gBACnB,CAAC,CAAC,GAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;gBACxC,CAAC,CAAC,GAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEjD,IAAI,QAAQ,EAAE;gBACZ,iCAAiC;gBACjC,OAAO,SAAS,EAAE,CAAC;aACpB;SACF;QAED,OAAO,CAAC,MAAM,CAAC;YACb,IAAI;YACJ,SAAS,EAAE,cAAc;YACzB,IAAI,EAAE,gBAAgB,CAAC;gBACrB,YAAY;gBACZ,QAAQ;gBACR,OAAO;aACR,CAAC;SACH,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,SAAS,cAAc,CACrB,MAA0B,EAC1B,IAAY,EACZ,IAA4C,EAC5C,YAAoB;QAEpB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAC;SACb;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,EAAE;YAC1B,OAAO,IAAI,CAAC;SACb;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;YAC5B,OAAO,IAAI,CAAC;SACb;QAED,OAAO,CAAC,MAAM,CAAC;YACb,IAAI;YACJ,SAAS,EAAE,eAAe;YAC1B,IAAI,EAAE,gBAAgB,CAAC;gBACrB,YAAY;gBACZ,MAAM;aACP,CAAC;SACH,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,SAAS,wBAAwB,CAC/B,MAA0B,EAC1B,IAAY,EACZ,IAA4C,EAC5C,YAAoB;QAEpB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5C,OAAO,IAAI,CAAC;SACb;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,MAAM,OAAO,GAAG,wCAA+B,CAAC,MAAM,CAAC,CAAC;YACxD,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;gBACjB,OAAO,IAAI,CAAC;aACb;SACF;QAED,OAAO,CAAC,MAAM,CAAC;YACb,IAAI;YACJ,SAAS,EACP,YAAY,KAAK,IAAI;gBACnB,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,2BAA2B;YACjC,IAAI,EAAE,gBAAgB,CAAC;gBACrB,YAAY;gBACZ,aAAa,EAAE,IAAI;gBACnB,OAAO;aACR,CAAC;SACH,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAqFQ,0CAAe;AAnFxB,MAAM,2BAA2B,GAC/B,iBAAS,CAAC,QAAQ;IAClB,iBAAS,CAAC,SAAS;IACnB,iBAAS,CAAC,aAAa;IACvB,iBAAS,CAAC,qBAAqB;IAC/B,iBAAS,CAAC,YAAY;IACtB,iBAAS,CAAC,iBAAiB;IAC3B,iBAAS,CAAC,QAAQ,CAAC;AAErB,SAAS,aAAa,CACpB,IAAmB,EACnB,MAA0B,EAC1B,OAAgB,EAChB,QAAmB;IAEnB,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE;QACzB,OAAO,IAAI,CAAC;KACb;IAED,IAAI,CAAC,2BAA2B,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE;QAClD,OAAO,IAAI,CAAC;KACb;IAED,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,OAAO;SACjB,iBAAiB,CAAC,MAAM,CAAC;QAC1B,0EAA0E;SACzE,kBAAkB,EAAE,CAAC;IAExB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,KAAK,EAAE;QACtC,QAAQ,WAAW,EAAE;YACnB,KAAK,qBAAa,CAAC,KAAK;gBACtB,IACE,eAAe,CACb,IAAI,EACJ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CACtD,EACD;oBACA,OAAO,IAAI,CAAC;iBACb;gBACD,MAAM;YAER,KAAK,qBAAa,CAAC,QAAQ;gBACzB,IAAI,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;oBAChE,OAAO,IAAI,CAAC;iBACb;gBACD,MAAM;YAER,KAAK,qBAAa,CAAC,OAAO,CAAC;YAC3B,KAAK,qBAAa,CAAC,MAAM,CAAC;YAC1B,KAAK,qBAAa,CAAC,MAAM,CAAC,CAAC;gBACzB,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY;gBACrC,+EAA+E;gBAC/E,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAC/D,CAAC;gBACF,MAAM,iBAAiB,GAAG,qBAAa,CAAC,WAAW,CAAC,CAAC;gBACrD,IAAI,UAAU,KAAK,iBAAiB,EAAE;oBACpC,OAAO,IAAI,CAAC;iBACb;gBACD,MAAM;aACP;SACF;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CACtB,IAAa,EACb,EAA8B;IAE9B,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KACrC;IAED,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention.js
new file mode 100644
index 0000000000000000000000000000000000000000..026f16a2f0a3f6d225f34e1920a9411a8962b005
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention.js
@@ -0,0 +1,427 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const scope_manager_1 = require("@typescript-eslint/scope-manager");
+const util = __importStar(require("../util"));
+const naming_convention_utils_1 = require("./naming-convention-utils");
+// This essentially mirrors ESLint's `camelcase` rule
+// note that that rule ignores leading and trailing underscores and only checks those in the middle of a variable name
+const defaultCamelCaseAllTheThingsConfig = [
+    {
+        selector: 'default',
+        format: ['camelCase'],
+        leadingUnderscore: 'allow',
+        trailingUnderscore: 'allow',
+    },
+    {
+        selector: 'variable',
+        format: ['camelCase', 'UPPER_CASE'],
+        leadingUnderscore: 'allow',
+        trailingUnderscore: 'allow',
+    },
+    {
+        selector: 'typeLike',
+        format: ['PascalCase'],
+    },
+];
+exports.default = util.createRule({
+    name: 'naming-convention',
+    meta: {
+        docs: {
+            category: 'Variables',
+            description: 'Enforces naming conventions for everything across a codebase',
+            recommended: false,
+            // technically only requires type checking if the user uses "type" modifiers
+            requiresTypeChecking: true,
+        },
+        type: 'suggestion',
+        messages: {
+            unexpectedUnderscore: '{{type}} name `{{name}}` must not have a {{position}} underscore.',
+            missingUnderscore: '{{type}} name `{{name}}` must have {{count}} {{position}} underscore(s).',
+            missingAffix: '{{type}} name `{{name}}` must have one of the following {{position}}es: {{affixes}}',
+            satisfyCustom: '{{type}} name `{{name}}` must {{regexMatch}} the RegExp: {{regex}}',
+            doesNotMatchFormat: '{{type}} name `{{name}}` must match one of the following formats: {{formats}}',
+            doesNotMatchFormatTrimmed: '{{type}} name `{{name}}` trimmed as `{{processedName}}` must match one of the following formats: {{formats}}',
+        },
+        schema: naming_convention_utils_1.SCHEMA,
+    },
+    defaultOptions: defaultCamelCaseAllTheThingsConfig,
+    create(contextWithoutDefaults) {
+        const context = contextWithoutDefaults.options &&
+            contextWithoutDefaults.options.length > 0
+            ? contextWithoutDefaults
+            : // only apply the defaults when the user provides no config
+                Object.setPrototypeOf({
+                    options: defaultCamelCaseAllTheThingsConfig,
+                }, contextWithoutDefaults);
+        const validators = naming_convention_utils_1.parseOptions(context);
+        // getParserServices(context, false) -- dirty hack to work around the docs checker test...
+        const compilerOptions = util
+            .getParserServices(context, true)
+            .program.getCompilerOptions();
+        function handleMember(validator, node, modifiers) {
+            if (!validator) {
+                return;
+            }
+            const key = node.key;
+            if (requiresQuoting(key, compilerOptions.target)) {
+                modifiers.add(naming_convention_utils_1.Modifiers.requiresQuotes);
+            }
+            validator(key, modifiers);
+        }
+        function getMemberModifiers(node) {
+            const modifiers = new Set();
+            if (node.accessibility) {
+                modifiers.add(naming_convention_utils_1.Modifiers[node.accessibility]);
+            }
+            else {
+                modifiers.add(naming_convention_utils_1.Modifiers.public);
+            }
+            if (node.static) {
+                modifiers.add(naming_convention_utils_1.Modifiers.static);
+            }
+            if ('readonly' in node && node.readonly) {
+                modifiers.add(naming_convention_utils_1.Modifiers.readonly);
+            }
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.TSAbstractClassProperty ||
+                node.type === experimental_utils_1.AST_NODE_TYPES.TSAbstractMethodDefinition) {
+                modifiers.add(naming_convention_utils_1.Modifiers.abstract);
+            }
+            return modifiers;
+        }
+        const unusedVariables = util.collectUnusedVariables(context);
+        function isUnused(name, initialScope = context.getScope()) {
+            var _a;
+            let variable = null;
+            let scope = initialScope;
+            while (scope) {
+                variable = (_a = scope.set.get(name)) !== null && _a !== void 0 ? _a : null;
+                if (variable) {
+                    break;
+                }
+                scope = scope.upper;
+            }
+            if (!variable) {
+                return false;
+            }
+            return unusedVariables.has(variable);
+        }
+        function isDestructured(id) {
+            var _a, _b, _c;
+            return (
+            // `const { x }`
+            // does not match `const { x: y }`
+            (((_a = id.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.Property && id.parent.shorthand) ||
+                // `const { x = 2 }`
+                // does not match const `{ x: y = 2 }`
+                (((_b = id.parent) === null || _b === void 0 ? void 0 : _b.type) === experimental_utils_1.AST_NODE_TYPES.AssignmentPattern &&
+                    ((_c = id.parent.parent) === null || _c === void 0 ? void 0 : _c.type) === experimental_utils_1.AST_NODE_TYPES.Property &&
+                    id.parent.parent.shorthand));
+        }
+        return {
+            // #region variable
+            VariableDeclarator(node) {
+                const validator = validators.variable;
+                if (!validator) {
+                    return;
+                }
+                const identifiers = getIdentifiersFromPattern(node.id);
+                const baseModifiers = new Set();
+                const parent = node.parent;
+                if ((parent === null || parent === void 0 ? void 0 : parent.type) === experimental_utils_1.AST_NODE_TYPES.VariableDeclaration) {
+                    if (parent.kind === 'const') {
+                        baseModifiers.add(naming_convention_utils_1.Modifiers.const);
+                    }
+                    if (isGlobal(context.getScope())) {
+                        baseModifiers.add(naming_convention_utils_1.Modifiers.global);
+                    }
+                }
+                identifiers.forEach(id => {
+                    const modifiers = new Set(baseModifiers);
+                    if (isDestructured(id)) {
+                        modifiers.add(naming_convention_utils_1.Modifiers.destructured);
+                    }
+                    if (isExported(parent, id.name, context.getScope())) {
+                        modifiers.add(naming_convention_utils_1.Modifiers.exported);
+                    }
+                    if (isUnused(id.name)) {
+                        modifiers.add(naming_convention_utils_1.Modifiers.unused);
+                    }
+                    validator(id, modifiers);
+                });
+            },
+            // #endregion
+            // #region function
+            'FunctionDeclaration, TSDeclareFunction, FunctionExpression'(node) {
+                const validator = validators.function;
+                if (!validator || node.id === null) {
+                    return;
+                }
+                const modifiers = new Set();
+                // functions create their own nested scope
+                const scope = context.getScope().upper;
+                if (isGlobal(scope)) {
+                    modifiers.add(naming_convention_utils_1.Modifiers.global);
+                }
+                if (isExported(node, node.id.name, scope)) {
+                    modifiers.add(naming_convention_utils_1.Modifiers.exported);
+                }
+                if (isUnused(node.id.name, scope)) {
+                    modifiers.add(naming_convention_utils_1.Modifiers.unused);
+                }
+                validator(node.id, modifiers);
+            },
+            // #endregion function
+            // #region parameter
+            'FunctionDeclaration, TSDeclareFunction, TSEmptyBodyFunctionExpression, FunctionExpression, ArrowFunctionExpression'(node) {
+                const validator = validators.parameter;
+                if (!validator) {
+                    return;
+                }
+                node.params.forEach(param => {
+                    if (param.type === experimental_utils_1.AST_NODE_TYPES.TSParameterProperty) {
+                        return;
+                    }
+                    const identifiers = getIdentifiersFromPattern(param);
+                    identifiers.forEach(i => {
+                        const modifiers = new Set();
+                        if (isDestructured(i)) {
+                            modifiers.add(naming_convention_utils_1.Modifiers.destructured);
+                        }
+                        if (isUnused(i.name)) {
+                            modifiers.add(naming_convention_utils_1.Modifiers.unused);
+                        }
+                        validator(i, modifiers);
+                    });
+                });
+            },
+            // #endregion parameter
+            // #region parameterProperty
+            TSParameterProperty(node) {
+                const validator = validators.parameterProperty;
+                if (!validator) {
+                    return;
+                }
+                const modifiers = getMemberModifiers(node);
+                const identifiers = getIdentifiersFromPattern(node.parameter);
+                identifiers.forEach(i => {
+                    validator(i, modifiers);
+                });
+            },
+            // #endregion parameterProperty
+            // #region property
+            ':not(ObjectPattern) > Property[computed = false][kind = "init"][value.type != "ArrowFunctionExpression"][value.type != "FunctionExpression"][value.type != "TSEmptyBodyFunctionExpression"]'(node) {
+                const modifiers = new Set([naming_convention_utils_1.Modifiers.public]);
+                handleMember(validators.objectLiteralProperty, node, modifiers);
+            },
+            ':matches(ClassProperty, TSAbstractClassProperty)[computed = false][value.type != "ArrowFunctionExpression"][value.type != "FunctionExpression"][value.type != "TSEmptyBodyFunctionExpression"]'(node) {
+                const modifiers = getMemberModifiers(node);
+                handleMember(validators.classProperty, node, modifiers);
+            },
+            'TSPropertySignature[computed = false]'(node) {
+                const modifiers = new Set([naming_convention_utils_1.Modifiers.public]);
+                if (node.readonly) {
+                    modifiers.add(naming_convention_utils_1.Modifiers.readonly);
+                }
+                handleMember(validators.typeProperty, node, modifiers);
+            },
+            // #endregion property
+            // #region method
+            [[
+                'Property[computed = false][kind = "init"][value.type = "ArrowFunctionExpression"]',
+                'Property[computed = false][kind = "init"][value.type = "FunctionExpression"]',
+                'Property[computed = false][kind = "init"][value.type = "TSEmptyBodyFunctionExpression"]',
+            ].join(', ')](node) {
+                const modifiers = new Set([naming_convention_utils_1.Modifiers.public]);
+                handleMember(validators.objectLiteralMethod, node, modifiers);
+            },
+            [[
+                ':matches(ClassProperty, TSAbstractClassProperty)[computed = false][value.type = "ArrowFunctionExpression"]',
+                ':matches(ClassProperty, TSAbstractClassProperty)[computed = false][value.type = "FunctionExpression"]',
+                ':matches(ClassProperty, TSAbstractClassProperty)[computed = false][value.type = "TSEmptyBodyFunctionExpression"]',
+                ':matches(MethodDefinition, TSAbstractMethodDefinition)[computed = false][kind = "method"]',
+            ].join(', ')](node) {
+                const modifiers = getMemberModifiers(node);
+                handleMember(validators.classMethod, node, modifiers);
+            },
+            'TSMethodSignature[computed = false]'(node) {
+                const modifiers = new Set([naming_convention_utils_1.Modifiers.public]);
+                handleMember(validators.typeMethod, node, modifiers);
+            },
+            // #endregion method
+            // #region accessor
+            'Property[computed = false]:matches([kind = "get"], [kind = "set"])'(node) {
+                const modifiers = new Set([naming_convention_utils_1.Modifiers.public]);
+                handleMember(validators.accessor, node, modifiers);
+            },
+            'MethodDefinition[computed = false]:matches([kind = "get"], [kind = "set"])'(node) {
+                const modifiers = getMemberModifiers(node);
+                handleMember(validators.accessor, node, modifiers);
+            },
+            // #endregion accessor
+            // #region enumMember
+            // computed is optional, so can't do [computed = false]
+            'TSEnumMember[computed != true]'(node) {
+                const validator = validators.enumMember;
+                if (!validator) {
+                    return;
+                }
+                const id = node.id;
+                const modifiers = new Set();
+                if (requiresQuoting(id, compilerOptions.target)) {
+                    modifiers.add(naming_convention_utils_1.Modifiers.requiresQuotes);
+                }
+                validator(id, modifiers);
+            },
+            // #endregion enumMember
+            // #region class
+            'ClassDeclaration, ClassExpression'(node) {
+                const validator = validators.class;
+                if (!validator) {
+                    return;
+                }
+                const id = node.id;
+                if (id === null) {
+                    return;
+                }
+                const modifiers = new Set();
+                // classes create their own nested scope
+                const scope = context.getScope().upper;
+                if (node.abstract) {
+                    modifiers.add(naming_convention_utils_1.Modifiers.abstract);
+                }
+                if (isExported(node, id.name, scope)) {
+                    modifiers.add(naming_convention_utils_1.Modifiers.exported);
+                }
+                if (isUnused(id.name, scope)) {
+                    modifiers.add(naming_convention_utils_1.Modifiers.unused);
+                }
+                validator(id, modifiers);
+            },
+            // #endregion class
+            // #region interface
+            TSInterfaceDeclaration(node) {
+                const validator = validators.interface;
+                if (!validator) {
+                    return;
+                }
+                const modifiers = new Set();
+                const scope = context.getScope();
+                if (isExported(node, node.id.name, scope)) {
+                    modifiers.add(naming_convention_utils_1.Modifiers.exported);
+                }
+                if (isUnused(node.id.name, scope)) {
+                    modifiers.add(naming_convention_utils_1.Modifiers.unused);
+                }
+                validator(node.id, modifiers);
+            },
+            // #endregion interface
+            // #region typeAlias
+            TSTypeAliasDeclaration(node) {
+                const validator = validators.typeAlias;
+                if (!validator) {
+                    return;
+                }
+                const modifiers = new Set();
+                const scope = context.getScope();
+                if (isExported(node, node.id.name, scope)) {
+                    modifiers.add(naming_convention_utils_1.Modifiers.exported);
+                }
+                if (isUnused(node.id.name, scope)) {
+                    modifiers.add(naming_convention_utils_1.Modifiers.unused);
+                }
+                validator(node.id, modifiers);
+            },
+            // #endregion typeAlias
+            // #region enum
+            TSEnumDeclaration(node) {
+                const validator = validators.enum;
+                if (!validator) {
+                    return;
+                }
+                const modifiers = new Set();
+                // enums create their own nested scope
+                const scope = context.getScope().upper;
+                if (isExported(node, node.id.name, scope)) {
+                    modifiers.add(naming_convention_utils_1.Modifiers.exported);
+                }
+                if (isUnused(node.id.name, scope)) {
+                    modifiers.add(naming_convention_utils_1.Modifiers.unused);
+                }
+                validator(node.id, modifiers);
+            },
+            // #endregion enum
+            // #region typeParameter
+            'TSTypeParameterDeclaration > TSTypeParameter'(node) {
+                const validator = validators.typeParameter;
+                if (!validator) {
+                    return;
+                }
+                const modifiers = new Set();
+                const scope = context.getScope();
+                if (isUnused(node.name.name, scope)) {
+                    modifiers.add(naming_convention_utils_1.Modifiers.unused);
+                }
+                validator(node.name, modifiers);
+            },
+        };
+    },
+});
+function getIdentifiersFromPattern(pattern) {
+    const identifiers = [];
+    const visitor = new scope_manager_1.PatternVisitor({}, pattern, id => identifiers.push(id));
+    visitor.visit(pattern);
+    return identifiers;
+}
+function isExported(node, name, scope) {
+    var _a, _b;
+    if (((_a = node === null || node === void 0 ? void 0 : node.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.ExportDefaultDeclaration ||
+        ((_b = node === null || node === void 0 ? void 0 : node.parent) === null || _b === void 0 ? void 0 : _b.type) === experimental_utils_1.AST_NODE_TYPES.ExportNamedDeclaration) {
+        return true;
+    }
+    if (scope == null) {
+        return false;
+    }
+    const variable = scope.set.get(name);
+    if (variable) {
+        for (const ref of variable.references) {
+            const refParent = ref.identifier.parent;
+            if ((refParent === null || refParent === void 0 ? void 0 : refParent.type) === experimental_utils_1.AST_NODE_TYPES.ExportDefaultDeclaration ||
+                (refParent === null || refParent === void 0 ? void 0 : refParent.type) === experimental_utils_1.AST_NODE_TYPES.ExportSpecifier) {
+                return true;
+            }
+        }
+    }
+    return false;
+}
+function isGlobal(scope) {
+    if (scope == null) {
+        return false;
+    }
+    return (scope.type === experimental_utils_1.TSESLint.Scope.ScopeType.global ||
+        scope.type === experimental_utils_1.TSESLint.Scope.ScopeType.module);
+}
+function requiresQuoting(node, target) {
+    const name = node.type === experimental_utils_1.AST_NODE_TYPES.Identifier ? node.name : `${node.value}`;
+    return util.requiresQuoting(name, target);
+}
+//# sourceMappingURL=naming-convention.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..6764c75ddd702e2e6e96362b870de3cf19fd5958
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"naming-convention.js","sourceRoot":"","sources":["../../src/rules/naming-convention.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-array-constructor.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-array-constructor.js
new file mode 100644
index 0000000000000000000000000000000000000000..806672e974d2ef908c4bfa354b28ca79769dbcb8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-array-constructor.js
@@ -0,0 +1,72 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-array-constructor',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow generic `Array` constructors',
+            category: 'Stylistic Issues',
+            recommended: 'error',
+            extendsBaseRule: true,
+        },
+        fixable: 'code',
+        messages: {
+            useLiteral: 'The array literal notation [] is preferable.',
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        /**
+         * Disallow construction of dense arrays using the Array constructor
+         * @param node node to evaluate
+         */
+        function check(node) {
+            if (node.arguments.length !== 1 &&
+                node.callee.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                node.callee.name === 'Array' &&
+                !node.typeParameters &&
+                !util.isOptionalCallExpression(node)) {
+                context.report({
+                    node,
+                    messageId: 'useLiteral',
+                    fix(fixer) {
+                        if (node.arguments.length === 0) {
+                            return fixer.replaceText(node, '[]');
+                        }
+                        const fullText = context.getSourceCode().getText(node);
+                        const preambleLength = node.callee.range[1] - node.range[0];
+                        return fixer.replaceText(node, `[${fullText.slice(preambleLength + 1, -1)}]`);
+                    },
+                });
+            }
+        }
+        return {
+            CallExpression: check,
+            NewExpression: check,
+        };
+    },
+});
+//# sourceMappingURL=no-array-constructor.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-array-constructor.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-array-constructor.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..db44e4893939c8c27ecc425ff4cbc53062ba62e5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-array-constructor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-array-constructor.js","sourceRoot":"","sources":["../../src/rules/no-array-constructor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,8CAAgC;AAEhC,kBAAe,IAAI,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,sBAAsB;IAC5B,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,uCAAuC;YACpD,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,OAAO;YACpB,eAAe,EAAE,IAAI;SACtB;QACD,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE;YACR,UAAU,EAAE,8CAA8C;SAC3D;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ;;;WAGG;QACH,SAAS,KAAK,CACZ,IAAsD;YAEtD,IACE,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,mCAAc,CAAC,UAAU;gBAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO;gBAC5B,CAAC,IAAI,CAAC,cAAc;gBACpB,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EACpC;gBACA,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,YAAY;oBACvB,GAAG,CAAC,KAAK;wBACP,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;4BAC/B,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;yBACtC;wBACD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBACvD,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAE5D,OAAO,KAAK,CAAC,WAAW,CACtB,IAAI,EACJ,IAAI,QAAQ,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAC9C,CAAC;oBACJ,CAAC;iBACF,CAAC,CAAC;aACJ;QACH,CAAC;QAED,OAAO;YACL,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-base-to-string.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-base-to-string.js
new file mode 100644
index 0000000000000000000000000000000000000000..b3b994b1666109d491add9078366f03525998ac0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-base-to-string.js
@@ -0,0 +1,161 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+var Usefulness;
+(function (Usefulness) {
+    Usefulness[Usefulness["Always"] = 0] = "Always";
+    Usefulness["Never"] = "will";
+    Usefulness["Sometimes"] = "may";
+})(Usefulness || (Usefulness = {}));
+exports.default = util.createRule({
+    name: 'no-base-to-string',
+    meta: {
+        docs: {
+            description: 'Requires that `.toString()` is only called on objects which provide useful information when stringified',
+            category: 'Best Practices',
+            recommended: false,
+            requiresTypeChecking: true,
+        },
+        messages: {
+            baseToString: "'{{name}} {{certainty}} evaluate to '[object Object]' when stringified.",
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    ignoredTypeNames: {
+                        type: 'array',
+                        items: {
+                            type: 'string',
+                        },
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+        type: 'suggestion',
+    },
+    defaultOptions: [
+        {
+            ignoredTypeNames: ['RegExp'],
+        },
+    ],
+    create(context, [option]) {
+        var _a;
+        const parserServices = util.getParserServices(context);
+        const typeChecker = parserServices.program.getTypeChecker();
+        const ignoredTypeNames = (_a = option.ignoredTypeNames) !== null && _a !== void 0 ? _a : [];
+        function checkExpression(node, type) {
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.Literal) {
+                return;
+            }
+            const certainty = collectToStringCertainty(type !== null && type !== void 0 ? type : typeChecker.getTypeAtLocation(parserServices.esTreeNodeToTSNodeMap.get(node)));
+            if (certainty === Usefulness.Always) {
+                return;
+            }
+            context.report({
+                data: {
+                    certainty,
+                    name: context.getSourceCode().getText(node),
+                },
+                messageId: 'baseToString',
+                node,
+            });
+        }
+        function collectToStringCertainty(type) {
+            const toString = typeChecker.getPropertyOfType(type, 'toString');
+            const declarations = toString === null || toString === void 0 ? void 0 : toString.getDeclarations();
+            if (!toString || !declarations || declarations.length === 0) {
+                return Usefulness.Always;
+            }
+            // Patch for old version TypeScript, the Boolean type definition missing toString()
+            if (type.flags & ts.TypeFlags.Boolean ||
+                type.flags & ts.TypeFlags.BooleanLiteral) {
+                return Usefulness.Always;
+            }
+            if (ignoredTypeNames.includes(util.getTypeName(typeChecker, type))) {
+                return Usefulness.Always;
+            }
+            if (declarations.every(({ parent }) => !ts.isInterfaceDeclaration(parent) || parent.name.text !== 'Object')) {
+                return Usefulness.Always;
+            }
+            if (type.isIntersection()) {
+                for (const subType of type.types) {
+                    const subtypeUsefulness = collectToStringCertainty(subType);
+                    if (subtypeUsefulness === Usefulness.Always) {
+                        return Usefulness.Always;
+                    }
+                }
+                return Usefulness.Never;
+            }
+            if (!type.isUnion()) {
+                return Usefulness.Never;
+            }
+            let allSubtypesUseful = true;
+            let someSubtypeUseful = false;
+            for (const subType of type.types) {
+                const subtypeUsefulness = collectToStringCertainty(subType);
+                if (subtypeUsefulness !== Usefulness.Always && allSubtypesUseful) {
+                    allSubtypesUseful = false;
+                }
+                if (subtypeUsefulness !== Usefulness.Never && !someSubtypeUseful) {
+                    someSubtypeUseful = true;
+                }
+            }
+            if (allSubtypesUseful && someSubtypeUseful) {
+                return Usefulness.Always;
+            }
+            if (someSubtypeUseful) {
+                return Usefulness.Sometimes;
+            }
+            return Usefulness.Never;
+        }
+        return {
+            'AssignmentExpression[operator = "+="], BinaryExpression[operator = "+"]'(node) {
+                const leftType = typeChecker.getTypeAtLocation(parserServices.esTreeNodeToTSNodeMap.get(node.left));
+                const rightType = typeChecker.getTypeAtLocation(parserServices.esTreeNodeToTSNodeMap.get(node.right));
+                if (util.getTypeName(typeChecker, leftType) === 'string') {
+                    checkExpression(node.right, rightType);
+                }
+                else if (util.getTypeName(typeChecker, rightType) === 'string') {
+                    checkExpression(node.left, leftType);
+                }
+            },
+            'CallExpression > MemberExpression.callee > Identifier[name = "toString"].property'(node) {
+                const memberExpr = node.parent;
+                checkExpression(memberExpr.object);
+            },
+            TemplateLiteral(node) {
+                if (node.parent &&
+                    node.parent.type === experimental_utils_1.AST_NODE_TYPES.TaggedTemplateExpression) {
+                    return;
+                }
+                for (const expression of node.expressions) {
+                    checkExpression(expression);
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-base-to-string.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-base-to-string.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-base-to-string.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..378fe4c7bf816d06f7a376bd10447d75d2f12351
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-base-to-string.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-base-to-string.js","sourceRoot":"","sources":["../../src/rules/no-base-to-string.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js
new file mode 100644
index 0000000000000000000000000000000000000000..9369dc9f76f6ef43775750b069c93aae0d169b50
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js
@@ -0,0 +1,97 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-confusing-non-null-assertion',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallow non-null assertion in locations that may be confusing',
+            category: 'Stylistic Issues',
+            recommended: false,
+        },
+        fixable: 'code',
+        messages: {
+            confusingEqual: 'Confusing combinations of non-null assertion and equal test like "a! == b", which looks very similar to not equal "a !== b"',
+            confusingAssign: 'Confusing combinations of non-null assertion and equal test like "a! = b", which looks very similar to not equal "a != b"',
+            notNeedInEqualTest: 'Unnecessary non-null assertion (!) in equal test',
+            notNeedInAssign: 'Unnecessary non-null assertion (!) in assignment left hand',
+            wrapUpLeft: 'Wrap up left hand to avoid putting non-null assertion "!" and "=" together',
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        const sourceCode = context.getSourceCode();
+        return {
+            'BinaryExpression, AssignmentExpression'(node) {
+                function isLeftHandPrimaryExpression(node) {
+                    return node.type === experimental_utils_1.AST_NODE_TYPES.TSNonNullExpression;
+                }
+                if (node.operator === '==' ||
+                    node.operator === '===' ||
+                    node.operator === '=') {
+                    const isAssign = node.operator === '=';
+                    const leftHandFinalToken = sourceCode.getLastToken(node.left);
+                    const tokenAfterLeft = sourceCode.getTokenAfter(node.left);
+                    if ((leftHandFinalToken === null || leftHandFinalToken === void 0 ? void 0 : leftHandFinalToken.type) === experimental_utils_1.AST_TOKEN_TYPES.Punctuator &&
+                        (leftHandFinalToken === null || leftHandFinalToken === void 0 ? void 0 : leftHandFinalToken.value) === '!' &&
+                        (tokenAfterLeft === null || tokenAfterLeft === void 0 ? void 0 : tokenAfterLeft.value) !== ')') {
+                        if (isLeftHandPrimaryExpression(node.left)) {
+                            context.report({
+                                node,
+                                messageId: isAssign ? 'confusingAssign' : 'confusingEqual',
+                                suggest: [
+                                    {
+                                        messageId: isAssign
+                                            ? 'notNeedInAssign'
+                                            : 'notNeedInEqualTest',
+                                        fix: (fixer) => [
+                                            fixer.remove(leftHandFinalToken),
+                                        ],
+                                    },
+                                ],
+                            });
+                        }
+                        else {
+                            context.report({
+                                node,
+                                messageId: isAssign ? 'confusingAssign' : 'confusingEqual',
+                                suggest: [
+                                    {
+                                        messageId: 'wrapUpLeft',
+                                        fix: (fixer) => [
+                                            fixer.insertTextBefore(node.left, '('),
+                                            fixer.insertTextAfter(node.left, ')'),
+                                        ],
+                                    },
+                                ],
+                            });
+                        }
+                    }
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-confusing-non-null-assertion.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..d789e5442dc34a4094060bc0caeb2414517236f0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-confusing-non-null-assertion.js","sourceRoot":"","sources":["../../src/rules/no-confusing-non-null-assertion.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAK+C;AAC/C,8CAAgC;AAEhC,kBAAe,IAAI,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,iCAAiC;IACvC,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,gEAAgE;YAClE,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,KAAK;SACnB;QACD,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE;YACR,cAAc,EACZ,6HAA6H;YAC/H,eAAe,EACb,2HAA2H;YAC7H,kBAAkB,EAAE,kDAAkD;YACtE,eAAe,EACb,4DAA4D;YAC9D,UAAU,EACR,4EAA4E;SAC/E;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO;YACL,wCAAwC,CACtC,IAA+D;gBAE/D,SAAS,2BAA2B,CAClC,IAAyB;oBAEzB,OAAO,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,mBAAmB,CAAC;gBAC1D,CAAC;gBAED,IACE,IAAI,CAAC,QAAQ,KAAK,IAAI;oBACtB,IAAI,CAAC,QAAQ,KAAK,KAAK;oBACvB,IAAI,CAAC,QAAQ,KAAK,GAAG,EACrB;oBACA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC;oBACvC,MAAM,kBAAkB,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC9D,MAAM,cAAc,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC3D,IACE,CAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,MAAK,oCAAe,CAAC,UAAU;wBACvD,CAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,KAAK,MAAK,GAAG;wBACjC,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,KAAK,MAAK,GAAG,EAC7B;wBACA,IAAI,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;4BAC1C,OAAO,CAAC,MAAM,CAAC;gCACb,IAAI;gCACJ,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB;gCAC1D,OAAO,EAAE;oCACP;wCACE,SAAS,EAAE,QAAQ;4CACjB,CAAC,CAAC,iBAAiB;4CACnB,CAAC,CAAC,oBAAoB;wCACxB,GAAG,EAAE,CAAC,KAAK,EAAsB,EAAE,CAAC;4CAClC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC;yCACjC;qCACF;iCACF;6BACF,CAAC,CAAC;yBACJ;6BAAM;4BACL,OAAO,CAAC,MAAM,CAAC;gCACb,IAAI;gCACJ,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB;gCAC1D,OAAO,EAAE;oCACP;wCACE,SAAS,EAAE,YAAY;wCACvB,GAAG,EAAE,CAAC,KAAK,EAAsB,EAAE,CAAC;4CAClC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;4CACtC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;yCACtC;qCACF;iCACF;6BACF,CAAC,CAAC;yBACJ;qBACF;iBACF;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-void-expression.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-void-expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..9d31a5a4b87019831dcbbb8db8b0b44fd4818afb
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-void-expression.js
@@ -0,0 +1,268 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const tsutils = __importStar(require("tsutils"));
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-confusing-void-expression',
+    meta: {
+        docs: {
+            description: 'Requires expressions of type void to appear in statement position',
+            category: 'Best Practices',
+            recommended: false,
+            requiresTypeChecking: true,
+        },
+        messages: {
+            invalidVoidExpr: 'Placing a void expression inside another expression is forbidden. ' +
+                'Move it to its own statement instead.',
+            invalidVoidExprWrapVoid: 'Void expressions used inside another expression ' +
+                'must be moved to its own statement ' +
+                'or marked explicitly with the `void` operator.',
+            invalidVoidExprArrow: 'Returning a void expression from an arrow function shorthand is forbidden. ' +
+                'Please add braces to the arrow function.',
+            invalidVoidExprArrowWrapVoid: 'Void expressions returned from an arrow function shorthand ' +
+                'must be marked explicitly with the `void` operator.',
+            invalidVoidExprReturn: 'Returning a void expression from a function is forbidden. ' +
+                'Please move it before the `return` statement.',
+            invalidVoidExprReturnLast: 'Returning a void expression from a function is forbidden. ' +
+                'Please remove the `return` statement.',
+            invalidVoidExprReturnWrapVoid: 'Void expressions returned from a function ' +
+                'must be marked explicitly with the `void` operator.',
+            voidExprWrapVoid: 'Mark with an explicit `void` operator',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    ignoreArrowShorthand: { type: 'boolean' },
+                    ignoreVoidOperator: { type: 'boolean' },
+                },
+                additionalProperties: false,
+            },
+        ],
+        type: 'problem',
+        fixable: 'code',
+    },
+    defaultOptions: [{}],
+    create(context, [options]) {
+        return {
+            'AwaitExpression, CallExpression, TaggedTemplateExpression'(node) {
+                const parserServices = util.getParserServices(context);
+                const checker = parserServices.program.getTypeChecker();
+                const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+                const type = util.getConstrainedTypeAtLocation(checker, tsNode);
+                if (!tsutils.isTypeFlagSet(type, ts.TypeFlags.VoidLike)) {
+                    // not a void expression
+                    return;
+                }
+                const invalidAncestor = findInvalidAncestor(node);
+                if (invalidAncestor == null) {
+                    // void expression is in valid position
+                    return;
+                }
+                const sourceCode = context.getSourceCode();
+                const wrapVoidFix = (fixer) => {
+                    const nodeText = sourceCode.getText(node);
+                    const newNodeText = `void ${nodeText}`;
+                    return fixer.replaceText(node, newNodeText);
+                };
+                if (invalidAncestor.type === experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression) {
+                    // handle arrow function shorthand
+                    if (options.ignoreVoidOperator) {
+                        // handle wrapping with `void`
+                        return context.report({
+                            node,
+                            messageId: 'invalidVoidExprArrowWrapVoid',
+                            fix: wrapVoidFix,
+                        });
+                    }
+                    // handle wrapping with braces
+                    const arrowFunction = invalidAncestor;
+                    return context.report({
+                        node,
+                        messageId: 'invalidVoidExprArrow',
+                        fix(fixer) {
+                            const arrowBody = arrowFunction.body;
+                            const arrowBodyText = sourceCode.getText(arrowBody);
+                            const newArrowBodyText = `{ ${arrowBodyText}; }`;
+                            if (util.isParenthesized(arrowBody, sourceCode)) {
+                                const bodyOpeningParen = sourceCode.getTokenBefore(arrowBody, util.isOpeningParenToken);
+                                const bodyClosingParen = sourceCode.getTokenAfter(arrowBody, util.isClosingParenToken);
+                                return fixer.replaceTextRange([bodyOpeningParen.range[0], bodyClosingParen.range[1]], newArrowBodyText);
+                            }
+                            return fixer.replaceText(arrowBody, newArrowBodyText);
+                        },
+                    });
+                }
+                if (invalidAncestor.type === experimental_utils_1.AST_NODE_TYPES.ReturnStatement) {
+                    // handle return statement
+                    if (options.ignoreVoidOperator) {
+                        // handle wrapping with `void`
+                        return context.report({
+                            node,
+                            messageId: 'invalidVoidExprReturnWrapVoid',
+                            fix: wrapVoidFix,
+                        });
+                    }
+                    const returnStmt = invalidAncestor;
+                    if (isFinalReturn(returnStmt)) {
+                        // remove the `return` keyword
+                        return context.report({
+                            node,
+                            messageId: 'invalidVoidExprReturnLast',
+                            fix(fixer) {
+                                const returnValue = returnStmt.argument;
+                                const returnValueText = sourceCode.getText(returnValue);
+                                let newReturnStmtText = `${returnValueText};`;
+                                if (isPreventingASI(returnValue, sourceCode)) {
+                                    // put a semicolon at the beginning of the line
+                                    newReturnStmtText = `;${newReturnStmtText}`;
+                                }
+                                return fixer.replaceText(returnStmt, newReturnStmtText);
+                            },
+                        });
+                    }
+                    // move before the `return` keyword
+                    return context.report({
+                        node,
+                        messageId: 'invalidVoidExprReturn',
+                        fix(fixer) {
+                            var _a;
+                            const returnValue = returnStmt.argument;
+                            const returnValueText = sourceCode.getText(returnValue);
+                            let newReturnStmtText = `${returnValueText}; return;`;
+                            if (isPreventingASI(returnValue, sourceCode)) {
+                                // put a semicolon at the beginning of the line
+                                newReturnStmtText = `;${newReturnStmtText}`;
+                            }
+                            if (((_a = returnStmt.parent) === null || _a === void 0 ? void 0 : _a.type) !== experimental_utils_1.AST_NODE_TYPES.BlockStatement) {
+                                // e.g. `if (cond) return console.error();`
+                                // add braces if not inside a block
+                                newReturnStmtText = `{ ${newReturnStmtText} }`;
+                            }
+                            return fixer.replaceText(returnStmt, newReturnStmtText);
+                        },
+                    });
+                }
+                // handle generic case
+                if (options.ignoreVoidOperator) {
+                    // this would be reported by this rule btw. such irony
+                    return context.report({
+                        node,
+                        messageId: 'invalidVoidExprWrapVoid',
+                        suggest: [{ messageId: 'voidExprWrapVoid', fix: wrapVoidFix }],
+                    });
+                }
+                context.report({
+                    node,
+                    messageId: 'invalidVoidExpr',
+                });
+            },
+        };
+        /**
+         * Inspects the void expression's ancestors and finds closest invalid one.
+         * By default anything other than an ExpressionStatement is invalid.
+         * Parent expressions which can be used for their short-circuiting behavior
+         * are ignored and their parents are checked instead.
+         * @param node The void expression node to check.
+         * @returns Invalid ancestor node if it was found. `null` otherwise.
+         */
+        function findInvalidAncestor(node) {
+            const parent = util.nullThrows(node.parent, util.NullThrowsReasons.MissingParent);
+            if (parent.type === experimental_utils_1.AST_NODE_TYPES.ExpressionStatement) {
+                // e.g. `{ console.log("foo"); }`
+                // this is always valid
+                return null;
+            }
+            if (parent.type === experimental_utils_1.AST_NODE_TYPES.LogicalExpression) {
+                if (parent.right === node) {
+                    // e.g. `x && console.log(x)`
+                    // this is valid only if the next ancestor is valid
+                    return findInvalidAncestor(parent);
+                }
+            }
+            if (parent.type === experimental_utils_1.AST_NODE_TYPES.ConditionalExpression) {
+                if (parent.consequent === node || parent.alternate === node) {
+                    // e.g. `cond ? console.log(true) : console.log(false)`
+                    // this is valid only if the next ancestor is valid
+                    return findInvalidAncestor(parent);
+                }
+            }
+            if (parent.type === experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression) {
+                // e.g. `() => console.log("foo")`
+                // this is valid with an appropriate option
+                if (options.ignoreArrowShorthand) {
+                    return null;
+                }
+            }
+            if (parent.type === experimental_utils_1.AST_NODE_TYPES.UnaryExpression) {
+                if (parent.operator === 'void') {
+                    // e.g. `void console.log("foo")`
+                    // this is valid with an appropriate option
+                    if (options.ignoreVoidOperator) {
+                        return null;
+                    }
+                }
+            }
+            // any other parent is invalid
+            return parent;
+        }
+        /** Checks whether the return statement is the last statement in a function body. */
+        function isFinalReturn(node) {
+            // the parent must be a block
+            const block = util.nullThrows(node.parent, util.NullThrowsReasons.MissingParent);
+            if (block.type !== experimental_utils_1.AST_NODE_TYPES.BlockStatement) {
+                // e.g. `if (cond) return;` (not in a block)
+                return false;
+            }
+            // the block's parent must be a function
+            const blockParent = util.nullThrows(block.parent, util.NullThrowsReasons.MissingParent);
+            if (![
+                experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration,
+                experimental_utils_1.AST_NODE_TYPES.FunctionExpression,
+                experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression,
+            ].includes(blockParent.type)) {
+                // e.g. `if (cond) { return; }`
+                // not in a top-level function block
+                return false;
+            }
+            // must be the last child of the block
+            if (block.body.indexOf(node) < block.body.length - 1) {
+                // not the last statement in the block
+                return false;
+            }
+            return true;
+        }
+        /**
+         * Checks whether the given node, if placed on its own line,
+         * would prevent automatic semicolon insertion on the line before.
+         *
+         * This happens if the line begins with `(`, `[` or `` ` ``
+         */
+        function isPreventingASI(node, sourceCode) {
+            const startToken = util.nullThrows(sourceCode.getFirstToken(node), util.NullThrowsReasons.MissingToken('first token', node.type));
+            return ['(', '[', '`'].includes(startToken.value);
+        }
+    },
+});
+//# sourceMappingURL=no-confusing-void-expression.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-void-expression.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-void-expression.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..399eaac6eabff6e308220670bf48877e1407f484
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-void-expression.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-confusing-void-expression.js","sourceRoot":"","sources":["../../src/rules/no-confusing-void-expression.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dupe-class-members.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dupe-class-members.js
new file mode 100644
index 0000000000000000000000000000000000000000..a823830e67e1b9698e278c462426f6faf83f9667
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dupe-class-members.js
@@ -0,0 +1,55 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const no_dupe_class_members_1 = __importDefault(require("eslint/lib/rules/no-dupe-class-members"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-dupe-class-members',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallow duplicate class members',
+            category: 'Possible Errors',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        schema: no_dupe_class_members_1.default.meta.schema,
+        messages: no_dupe_class_members_1.default.meta.messages,
+    },
+    defaultOptions: [],
+    create(context) {
+        const rules = no_dupe_class_members_1.default.create(context);
+        return Object.assign(Object.assign({}, rules), { MethodDefinition(node) {
+                if (node.computed) {
+                    return;
+                }
+                if (node.value.type === experimental_utils_1.AST_NODE_TYPES.TSEmptyBodyFunctionExpression) {
+                    return;
+                }
+                return rules.MethodDefinition(node);
+            } });
+    },
+});
+//# sourceMappingURL=no-dupe-class-members.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dupe-class-members.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dupe-class-members.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..7e93badcaaeb070427c7ab419d331f621dd4b693
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dupe-class-members.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-dupe-class-members.js","sourceRoot":"","sources":["../../src/rules/no-dupe-class-members.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,8EAAuE;AACvE,mGAA8D;AAC9D,8CAAgC;AAKhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,kCAAkC;YAC/C,QAAQ,EAAE,iBAAiB;YAC3B,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,IAAI;SACtB;QACD,MAAM,EAAE,+BAAQ,CAAC,IAAI,CAAC,MAAM;QAC5B,QAAQ,EAAE,+BAAQ,CAAC,IAAI,CAAC,QAAQ;KACjC;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,+BAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEvC,uCACK,KAAK,KACR,gBAAgB,CAAC,IAAI;gBACnB,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,OAAO;iBACR;gBAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,mCAAc,CAAC,6BAA6B,EAAE;oBACpE,OAAO;iBACR;gBAED,OAAO,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC,IACD;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-duplicate-imports.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-duplicate-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..fae271360d56e3ae4f5122fde975ca36096235b9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-duplicate-imports.js
@@ -0,0 +1,126 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const no_duplicate_imports_1 = __importDefault(require("eslint/lib/rules/no-duplicate-imports"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-duplicate-imports',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallow duplicate imports',
+            category: 'Best Practices',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        schema: no_duplicate_imports_1.default.meta.schema,
+        messages: Object.assign(Object.assign({}, no_duplicate_imports_1.default.meta.messages), { importType: '{{module}} type import is duplicated', importTypeAs: '{{module}} type import is duplicated as type export', exportType: '{{module}} type export is duplicated', exportTypeAs: '{{module}} type export is duplicated as type import' }),
+    },
+    defaultOptions: [
+        {
+            includeExports: false,
+        },
+    ],
+    create(context, [option]) {
+        const rules = no_duplicate_imports_1.default.create(context);
+        const includeExports = option.includeExports;
+        const typeMemberImports = new Set();
+        const typeDefaultImports = new Set();
+        const typeExports = new Set();
+        function report(messageId, node, module) {
+            context.report({
+                messageId,
+                node,
+                data: {
+                    module,
+                },
+            });
+        }
+        function isStringLiteral(node) {
+            return (!!node &&
+                node.type === experimental_utils_1.AST_NODE_TYPES.Literal &&
+                typeof node.value === 'string');
+        }
+        function isAllMemberImport(node) {
+            return node.specifiers.every(specifier => specifier.type === experimental_utils_1.AST_NODE_TYPES.ImportSpecifier);
+        }
+        function checkTypeImport(node) {
+            if (isStringLiteral(node.source)) {
+                const value = node.source.value;
+                const isMemberImport = isAllMemberImport(node);
+                if (isMemberImport
+                    ? typeMemberImports.has(value)
+                    : typeDefaultImports.has(value)) {
+                    report('importType', node, value);
+                }
+                if (includeExports && typeExports.has(value)) {
+                    report('importTypeAs', node, value);
+                }
+                if (isMemberImport) {
+                    typeMemberImports.add(value);
+                }
+                else {
+                    typeDefaultImports.add(value);
+                }
+            }
+        }
+        function checkTypeExport(node) {
+            if (isStringLiteral(node.source)) {
+                const value = node.source.value;
+                if (typeExports.has(value)) {
+                    report('exportType', node, value);
+                }
+                if (typeMemberImports.has(value) || typeDefaultImports.has(value)) {
+                    report('exportTypeAs', node, value);
+                }
+                typeExports.add(value);
+            }
+        }
+        return Object.assign(Object.assign({}, rules), { ImportDeclaration(node) {
+                if (node.importKind === 'type') {
+                    checkTypeImport(node);
+                    return;
+                }
+                rules.ImportDeclaration(node);
+            },
+            ExportNamedDeclaration(node) {
+                var _a;
+                if (includeExports && node.exportKind === 'type') {
+                    checkTypeExport(node);
+                    return;
+                }
+                (_a = rules.ExportNamedDeclaration) === null || _a === void 0 ? void 0 : _a.call(rules, node);
+            },
+            ExportAllDeclaration(node) {
+                var _a;
+                if (includeExports && node.exportKind === 'type') {
+                    checkTypeExport(node);
+                    return;
+                }
+                (_a = rules.ExportAllDeclaration) === null || _a === void 0 ? void 0 : _a.call(rules, node);
+            } });
+    },
+});
+//# sourceMappingURL=no-duplicate-imports.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-duplicate-imports.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-duplicate-imports.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..5715c9040f8cf89b450b6f2e10ba1d6383ddb801
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-duplicate-imports.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-duplicate-imports.js","sourceRoot":"","sources":["../../src/rules/no-duplicate-imports.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dynamic-delete.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dynamic-delete.js
new file mode 100644
index 0000000000000000000000000000000000000000..911e4012794d3d716585ad204d77de82477ac9d1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dynamic-delete.js
@@ -0,0 +1,91 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const tsutils = __importStar(require("tsutils"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-dynamic-delete',
+    meta: {
+        docs: {
+            category: 'Best Practices',
+            description: 'Disallow the delete operator with computed key expressions',
+            recommended: false,
+        },
+        fixable: 'code',
+        messages: {
+            dynamicDelete: 'Do not delete dynamically computed property keys.',
+        },
+        schema: [],
+        type: 'suggestion',
+    },
+    defaultOptions: [],
+    create(context) {
+        function createFixer(member) {
+            if (member.property.type === experimental_utils_1.AST_NODE_TYPES.Literal &&
+                typeof member.property.value === 'string') {
+                return createPropertyReplacement(member.property, `.${member.property.value}`);
+            }
+            return undefined;
+        }
+        return {
+            'UnaryExpression[operator=delete]'(node) {
+                if (node.argument.type !== experimental_utils_1.AST_NODE_TYPES.MemberExpression ||
+                    !node.argument.computed ||
+                    isNecessaryDynamicAccess(diveIntoWrapperExpressions(node.argument.property))) {
+                    return;
+                }
+                context.report({
+                    fix: createFixer(node.argument),
+                    messageId: 'dynamicDelete',
+                    node: node.argument.property,
+                });
+            },
+        };
+        function createPropertyReplacement(property, replacement) {
+            return (fixer) => fixer.replaceTextRange(getTokenRange(property), replacement);
+        }
+        function getTokenRange(property) {
+            const sourceCode = context.getSourceCode();
+            return [
+                sourceCode.getTokenBefore(property).range[0],
+                sourceCode.getTokenAfter(property).range[1],
+            ];
+        }
+    },
+});
+function diveIntoWrapperExpressions(node) {
+    if (node.type === experimental_utils_1.AST_NODE_TYPES.UnaryExpression) {
+        return diveIntoWrapperExpressions(node.argument);
+    }
+    return node;
+}
+function isNecessaryDynamicAccess(property) {
+    if (property.type !== experimental_utils_1.AST_NODE_TYPES.Literal) {
+        return false;
+    }
+    if (typeof property.value === 'number') {
+        return true;
+    }
+    return (typeof property.value === 'string' &&
+        !tsutils.isValidPropertyAccess(property.value));
+}
+//# sourceMappingURL=no-dynamic-delete.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dynamic-delete.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dynamic-delete.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..bf3450bc2a619b8181d7616a1be992d9c5183d0a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dynamic-delete.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-dynamic-delete.js","sourceRoot":"","sources":["../../src/rules/no-dynamic-delete.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAI+C;AAC/C,iDAAmC;AACnC,8CAAgC;AAEhC,kBAAe,IAAI,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,mBAAmB;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,4DAA4D;YACzE,WAAW,EAAE,KAAK;SACnB;QACD,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE;YACR,aAAa,EAAE,mDAAmD;SACnE;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,YAAY;KACnB;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,SAAS,WAAW,CAClB,MAAiC;YAEjC,IACE,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,mCAAc,CAAC,OAAO;gBAC/C,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,EACzC;gBACA,OAAO,yBAAyB,CAC9B,MAAM,CAAC,QAAQ,EACf,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAC5B,CAAC;aACH;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO;YACL,kCAAkC,CAAC,IAA8B;gBAC/D,IACE,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,mCAAc,CAAC,gBAAgB;oBACtD,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ;oBACvB,wBAAwB,CACtB,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACnD,EACD;oBACA,OAAO;iBACR;gBAED,OAAO,CAAC,MAAM,CAAC;oBACb,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAC/B,SAAS,EAAE,eAAe;oBAC1B,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ;iBAC7B,CAAC,CAAC;YACL,CAAC;SACF,CAAC;QAEF,SAAS,yBAAyB,CAChC,QAA6B,EAC7B,WAAmB;YAEnB,OAAO,CAAC,KAAyB,EAAoB,EAAE,CACrD,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC;QACjE,CAAC;QAED,SAAS,aAAa,CAAC,QAA6B;YAClD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;YAE3C,OAAO;gBACL,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7C,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC;aAC7C,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,SAAS,0BAA0B,CACjC,IAAyB;IAEzB,IAAI,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,eAAe,EAAE;QAChD,OAAO,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAClD;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,wBAAwB,CAAC,QAA6B;IAC7D,IAAI,QAAQ,CAAC,IAAI,KAAK,mCAAc,CAAC,OAAO,EAAE;QAC5C,OAAO,KAAK,CAAC;KACd;IAED,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE;QACtC,OAAO,IAAI,CAAC;KACb;IAED,OAAO,CACL,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ;QAClC,CAAC,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC/C,CAAC;AACJ,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-function.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-function.js
new file mode 100644
index 0000000000000000000000000000000000000000..775e85ccf5a4c2a46917081f2e8408626553be60
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-function.js
@@ -0,0 +1,146 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const no_empty_function_1 = __importDefault(require("eslint/lib/rules/no-empty-function"));
+const util = __importStar(require("../util"));
+const schema = util.deepMerge(Array.isArray(no_empty_function_1.default.meta.schema)
+    ? no_empty_function_1.default.meta.schema[0]
+    : no_empty_function_1.default.meta.schema, {
+    properties: {
+        allow: {
+            items: {
+                enum: [
+                    'functions',
+                    'arrowFunctions',
+                    'generatorFunctions',
+                    'methods',
+                    'generatorMethods',
+                    'getters',
+                    'setters',
+                    'constructors',
+                    'private-constructors',
+                    'protected-constructors',
+                    'asyncFunctions',
+                    'asyncMethods',
+                    'decoratedFunctions',
+                ],
+            },
+        },
+    },
+});
+exports.default = util.createRule({
+    name: 'no-empty-function',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow empty functions',
+            category: 'Best Practices',
+            recommended: 'error',
+            extendsBaseRule: true,
+        },
+        schema: [schema],
+        messages: no_empty_function_1.default.meta.messages,
+    },
+    defaultOptions: [
+        {
+            allow: [],
+        },
+    ],
+    create(context, [{ allow = [] }]) {
+        const rules = no_empty_function_1.default.create(context);
+        const isAllowedProtectedConstructors = allow.includes('protected-constructors');
+        const isAllowedPrivateConstructors = allow.includes('private-constructors');
+        const isAllowedDecoratedFunctions = allow.includes('decoratedFunctions');
+        /**
+         * Check if the method body is empty
+         * @param node the node to be validated
+         * @returns true if the body is empty
+         * @private
+         */
+        function isBodyEmpty(node) {
+            return !node.body || node.body.body.length === 0;
+        }
+        /**
+         * Check if method has parameter properties
+         * @param node the node to be validated
+         * @returns true if the body has parameter properties
+         * @private
+         */
+        function hasParameterProperties(node) {
+            var _a;
+            return (_a = node.params) === null || _a === void 0 ? void 0 : _a.some(param => param.type === experimental_utils_1.AST_NODE_TYPES.TSParameterProperty);
+        }
+        /**
+         * @param node the node to be validated
+         * @returns true if the constructor is allowed to be empty
+         * @private
+         */
+        function isAllowedEmptyConstructor(node) {
+            const parent = node.parent;
+            if (isBodyEmpty(node) &&
+                (parent === null || parent === void 0 ? void 0 : parent.type) === experimental_utils_1.AST_NODE_TYPES.MethodDefinition &&
+                parent.kind === 'constructor') {
+                const { accessibility } = parent;
+                return (
+                // allow protected constructors
+                (accessibility === 'protected' && isAllowedProtectedConstructors) ||
+                    // allow private constructors
+                    (accessibility === 'private' && isAllowedPrivateConstructors) ||
+                    // allow constructors which have parameter properties
+                    hasParameterProperties(node));
+            }
+            return false;
+        }
+        /**
+         * @param node the node to be validated
+         * @returns true if a function has decorators
+         * @private
+         */
+        function isAllowedEmptyDecoratedFunctions(node) {
+            var _a;
+            if (isAllowedDecoratedFunctions && isBodyEmpty(node)) {
+                const decorators = ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.MethodDefinition
+                    ? node.parent.decorators
+                    : undefined;
+                return !!decorators && !!decorators.length;
+            }
+            return false;
+        }
+        return Object.assign(Object.assign({}, rules), { FunctionExpression(node) {
+                if (isAllowedEmptyConstructor(node) ||
+                    isAllowedEmptyDecoratedFunctions(node)) {
+                    return;
+                }
+                rules.FunctionExpression(node);
+            },
+            FunctionDeclaration(node) {
+                if (isAllowedEmptyDecoratedFunctions(node)) {
+                    return;
+                }
+                rules.FunctionDeclaration(node);
+            } });
+    },
+});
+//# sourceMappingURL=no-empty-function.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-function.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-function.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e081d10c4f8e6521f942feb39d3efed69649a33f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-function.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-empty-function.js","sourceRoot":"","sources":["../../src/rules/no-empty-function.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-interface.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-interface.js
new file mode 100644
index 0000000000000000000000000000000000000000..f4037c20b9f4de5333b84487ed44764d12471b4d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-interface.js
@@ -0,0 +1,105 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-empty-interface',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow the declaration of empty interfaces',
+            category: 'Best Practices',
+            recommended: 'error',
+            suggestion: true,
+        },
+        fixable: 'code',
+        messages: {
+            noEmpty: 'An empty interface is equivalent to `{}`.',
+            noEmptyWithSuper: 'An interface declaring no members is equivalent to its supertype.',
+        },
+        schema: [
+            {
+                type: 'object',
+                additionalProperties: false,
+                properties: {
+                    allowSingleExtends: {
+                        type: 'boolean',
+                    },
+                },
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            allowSingleExtends: false,
+        },
+    ],
+    create(context, [{ allowSingleExtends }]) {
+        return {
+            TSInterfaceDeclaration(node) {
+                const sourceCode = context.getSourceCode();
+                const filename = context.getFilename();
+                if (node.body.body.length !== 0) {
+                    // interface contains members --> Nothing to report
+                    return;
+                }
+                const extend = node.extends;
+                if (!extend || extend.length === 0) {
+                    context.report({
+                        node: node.id,
+                        messageId: 'noEmpty',
+                    });
+                }
+                else if (extend.length === 1) {
+                    // interface extends exactly 1 interface --> Report depending on rule setting
+                    if (!allowSingleExtends) {
+                        const fix = (fixer) => {
+                            let typeParam = '';
+                            if (node.typeParameters) {
+                                typeParam = sourceCode.getText(node.typeParameters);
+                            }
+                            return fixer.replaceText(node, `type ${sourceCode.getText(node.id)}${typeParam} = ${sourceCode.getText(extend[0])}`);
+                        };
+                        // Check if interface is within ambient declaration
+                        let useAutoFix = true;
+                        if (util.isDefinitionFile(filename)) {
+                            const scope = context.getScope();
+                            if (scope.type === 'tsModule' && scope.block.declare) {
+                                useAutoFix = false;
+                            }
+                        }
+                        context.report(Object.assign({ node: node.id, messageId: 'noEmptyWithSuper' }, (useAutoFix
+                            ? { fix }
+                            : {
+                                suggest: [
+                                    {
+                                        messageId: 'noEmptyWithSuper',
+                                        fix,
+                                    },
+                                ],
+                            })));
+                    }
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-empty-interface.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-interface.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-interface.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..ba663fe020b2ddd77f7797702a81670bcaccf685
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-interface.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-empty-interface.js","sourceRoot":"","sources":["../../src/rules/no-empty-interface.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8CAAgC;AAUhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,8CAA8C;YAC3D,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,OAAO;YACpB,UAAU,EAAE,IAAI;SACjB;QACD,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE;YACR,OAAO,EAAE,2CAA2C;YACpD,gBAAgB,EACd,mEAAmE;SACtE;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACV,kBAAkB,EAAE;wBAClB,IAAI,EAAE,SAAS;qBAChB;iBACF;aACF;SACF;KACF;IACD,cAAc,EAAE;QACd;YACE,kBAAkB,EAAE,KAAK;SAC1B;KACF;IACD,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC;QACtC,OAAO;YACL,sBAAsB,CAAC,IAAI;gBACzB,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;gBAEvC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC/B,mDAAmD;oBACnD,OAAO;iBACR;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC5B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;oBAClC,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,IAAI,CAAC,EAAE;wBACb,SAAS,EAAE,SAAS;qBACrB,CAAC,CAAC;iBACJ;qBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC9B,6EAA6E;oBAC7E,IAAI,CAAC,kBAAkB,EAAE;wBACvB,MAAM,GAAG,GAAG,CAAC,KAAyB,EAAoB,EAAE;4BAC1D,IAAI,SAAS,GAAG,EAAE,CAAC;4BACnB,IAAI,IAAI,CAAC,cAAc,EAAE;gCACvB,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;6BACrD;4BACD,OAAO,KAAK,CAAC,WAAW,CACtB,IAAI,EACJ,QAAQ,UAAU,CAAC,OAAO,CACxB,IAAI,CAAC,EAAE,CACR,GAAG,SAAS,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CACnD,CAAC;wBACJ,CAAC,CAAC;wBAEF,mDAAmD;wBACnD,IAAI,UAAU,GAAG,IAAI,CAAC;wBACtB,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE;4BACnC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;4BACjC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;gCACpD,UAAU,GAAG,KAAK,CAAC;6BACpB;yBACF;wBAED,OAAO,CAAC,MAAM,iBACZ,IAAI,EAAE,IAAI,CAAC,EAAE,EACb,SAAS,EAAE,kBAAkB,IAC1B,CAAC,UAAU;4BACZ,CAAC,CAAC,EAAE,GAAG,EAAE;4BACT,CAAC,CAAC;gCACE,OAAO,EAAE;oCACP;wCACE,SAAS,EAAE,kBAAkB;wCAC7B,GAAG;qCACJ;iCACF;6BACF,CAAC,EACN,CAAC;qBACJ;iBACF;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-explicit-any.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-explicit-any.js
new file mode 100644
index 0000000000000000000000000000000000000000..f64ee14783e378910b6956ac90ba84c2786a2920
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-explicit-any.js
@@ -0,0 +1,188 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-explicit-any',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow usage of the `any` type',
+            category: 'Best Practices',
+            recommended: 'warn',
+            suggestion: true,
+        },
+        fixable: 'code',
+        messages: {
+            unexpectedAny: 'Unexpected any. Specify a different type.',
+            suggestUnknown: 'Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct.',
+            suggestNever: "Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of.",
+        },
+        schema: [
+            {
+                type: 'object',
+                additionalProperties: false,
+                properties: {
+                    fixToUnknown: {
+                        type: 'boolean',
+                    },
+                    ignoreRestArgs: {
+                        type: 'boolean',
+                    },
+                },
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            fixToUnknown: false,
+            ignoreRestArgs: false,
+        },
+    ],
+    create(context, [{ ignoreRestArgs, fixToUnknown }]) {
+        /**
+         * Checks if the node is an arrow function, function/constructor declaration or function expression
+         * @param node the node to be validated.
+         * @returns true if the node is any kind of function declaration or expression
+         * @private
+         */
+        function isNodeValidFunction(node) {
+            return [
+                experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression,
+                experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration,
+                experimental_utils_1.AST_NODE_TYPES.FunctionExpression,
+                experimental_utils_1.AST_NODE_TYPES.TSEmptyBodyFunctionExpression,
+                experimental_utils_1.AST_NODE_TYPES.TSFunctionType,
+                experimental_utils_1.AST_NODE_TYPES.TSConstructorType,
+                experimental_utils_1.AST_NODE_TYPES.TSCallSignatureDeclaration,
+                experimental_utils_1.AST_NODE_TYPES.TSConstructSignatureDeclaration,
+                experimental_utils_1.AST_NODE_TYPES.TSMethodSignature,
+                experimental_utils_1.AST_NODE_TYPES.TSDeclareFunction,
+            ].includes(node.type);
+        }
+        /**
+         * Checks if the node is a rest element child node of a function
+         * @param node the node to be validated.
+         * @returns true if the node is a rest element child node of a function
+         * @private
+         */
+        function isNodeRestElementInFunction(node) {
+            return (node.type === experimental_utils_1.AST_NODE_TYPES.RestElement &&
+                typeof node.parent !== 'undefined' &&
+                isNodeValidFunction(node.parent));
+        }
+        /**
+         * Checks if the node is a TSTypeOperator node with a readonly operator
+         * @param node the node to be validated.
+         * @returns true if the node is a TSTypeOperator node with a readonly operator
+         * @private
+         */
+        function isNodeReadonlyTSTypeOperator(node) {
+            return (node.type === experimental_utils_1.AST_NODE_TYPES.TSTypeOperator &&
+                node.operator === 'readonly');
+        }
+        /**
+         * Checks if the node is a TSTypeReference node with an Array identifier
+         * @param node the node to be validated.
+         * @returns true if the node is a TSTypeReference node with an Array identifier
+         * @private
+         */
+        function isNodeValidArrayTSTypeReference(node) {
+            return (node.type === experimental_utils_1.AST_NODE_TYPES.TSTypeReference &&
+                typeof node.typeName !== 'undefined' &&
+                node.typeName.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                ['Array', 'ReadonlyArray'].includes(node.typeName.name));
+        }
+        /**
+         * Checks if the node is a valid TSTypeOperator or TSTypeReference node
+         * @param node the node to be validated.
+         * @returns true if the node is a valid TSTypeOperator or TSTypeReference node
+         * @private
+         */
+        function isNodeValidTSType(node) {
+            return (isNodeReadonlyTSTypeOperator(node) ||
+                isNodeValidArrayTSTypeReference(node));
+        }
+        /**
+         * Checks if the great grand-parent node is a RestElement node in a function
+         * @param node the node to be validated.
+         * @returns true if the great grand-parent node is a RestElement node in a function
+         * @private
+         */
+        function isGreatGrandparentRestElement(node) {
+            var _a, _b;
+            return (((_b = (_a = node === null || node === void 0 ? void 0 : node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.parent) != null &&
+                isNodeRestElementInFunction(node.parent.parent.parent));
+        }
+        /**
+         * Checks if the great great grand-parent node is a valid RestElement node in a function
+         * @param node the node to be validated.
+         * @returns true if the great great grand-parent node is a valid RestElement node in a function
+         * @private
+         */
+        function isGreatGreatGrandparentRestElement(node) {
+            var _a, _b, _c;
+            return (((_c = (_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.parent) === null || _c === void 0 ? void 0 : _c.parent) != null &&
+                isNodeValidTSType(node.parent.parent) &&
+                isNodeRestElementInFunction(node.parent.parent.parent.parent));
+        }
+        /**
+         * Checks if the great grand-parent or the great great grand-parent node is a RestElement node
+         * @param node the node to be validated.
+         * @returns true if the great grand-parent or the great great grand-parent node is a RestElement node
+         * @private
+         */
+        function isNodeDescendantOfRestElementInFunction(node) {
+            return (isGreatGrandparentRestElement(node) ||
+                isGreatGreatGrandparentRestElement(node));
+        }
+        return {
+            TSAnyKeyword(node) {
+                if (ignoreRestArgs && isNodeDescendantOfRestElementInFunction(node)) {
+                    return;
+                }
+                const fixOrSuggest = {
+                    fix: null,
+                    suggest: [
+                        {
+                            messageId: 'suggestUnknown',
+                            fix(fixer) {
+                                return fixer.replaceText(node, 'unknown');
+                            },
+                        },
+                        {
+                            messageId: 'suggestNever',
+                            fix(fixer) {
+                                return fixer.replaceText(node, 'never');
+                            },
+                        },
+                    ],
+                };
+                if (fixToUnknown) {
+                    fixOrSuggest.fix = (fixer => fixer.replaceText(node, 'unknown'));
+                }
+                context.report(Object.assign({ node, messageId: 'unexpectedAny' }, fixOrSuggest));
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-explicit-any.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-explicit-any.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-explicit-any.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..d9f8f5466c1f9495a8958983399c7f0adfa8c583
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-explicit-any.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-explicit-any.js","sourceRoot":"","sources":["../../src/rules/no-explicit-any.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-non-null-assertion.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-non-null-assertion.js
new file mode 100644
index 0000000000000000000000000000000000000000..0b1263755b63fdace51ab3dbc97acbf354c37442
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-non-null-assertion.js
@@ -0,0 +1,56 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-extra-non-null-assertion',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallow extra non-null assertion',
+            category: 'Stylistic Issues',
+            recommended: 'error',
+        },
+        fixable: 'code',
+        schema: [],
+        messages: {
+            noExtraNonNullAssertion: 'Forbidden extra non-null assertion.',
+        },
+    },
+    defaultOptions: [],
+    create(context) {
+        function checkExtraNonNullAssertion(node) {
+            context.report({
+                node,
+                messageId: 'noExtraNonNullAssertion',
+                fix(fixer) {
+                    return fixer.removeRange([node.range[1] - 1, node.range[1]]);
+                },
+            });
+        }
+        return {
+            'TSNonNullExpression > TSNonNullExpression': checkExtraNonNullAssertion,
+            'MemberExpression[optional = true] > TSNonNullExpression.object': checkExtraNonNullAssertion,
+            'CallExpression[optional = true] > TSNonNullExpression.callee': checkExtraNonNullAssertion,
+        };
+    },
+});
+//# sourceMappingURL=no-extra-non-null-assertion.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-non-null-assertion.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-non-null-assertion.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..711a353bdb18807de2126aeeaaea0f034c66238e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-non-null-assertion.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-extra-non-null-assertion.js","sourceRoot":"","sources":["../../src/rules/no-extra-non-null-assertion.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA,8CAAgC;AAEhC,kBAAe,IAAI,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,6BAA6B;IACnC,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,mCAAmC;YAChD,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,OAAO;SACrB;QACD,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE;YACR,uBAAuB,EAAE,qCAAqC;SAC/D;KACF;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,SAAS,0BAA0B,CACjC,IAAkC;YAElC,OAAO,CAAC,MAAM,CAAC;gBACb,IAAI;gBACJ,SAAS,EAAE,yBAAyB;gBACpC,GAAG,CAAC,KAAK;oBACP,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/D,CAAC;aACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,2CAA2C,EAAE,0BAA0B;YACvE,gEAAgE,EAAE,0BAA0B;YAC5F,8DAA8D,EAAE,0BAA0B;SAC3F,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-parens.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-parens.js
new file mode 100644
index 0000000000000000000000000000000000000000..713be4ddd4e6fec720e43e65f930c66724dcdf38
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-parens.js
@@ -0,0 +1,182 @@
+"use strict";
+// any is required to work around manipulating the AST in weird ways
+/* eslint-disable @typescript-eslint/no-explicit-any */
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const no_extra_parens_1 = __importDefault(require("eslint/lib/rules/no-extra-parens"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-extra-parens',
+    meta: {
+        type: 'layout',
+        docs: {
+            description: 'Disallow unnecessary parentheses',
+            category: 'Possible Errors',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        fixable: 'code',
+        schema: no_extra_parens_1.default.meta.schema,
+        messages: no_extra_parens_1.default.meta.messages,
+    },
+    defaultOptions: ['all'],
+    create(context) {
+        const rules = no_extra_parens_1.default.create(context);
+        function binaryExp(node) {
+            const rule = rules.BinaryExpression;
+            // makes the rule think it should skip the left or right
+            const isLeftTypeAssertion = util.isTypeAssertion(node.left);
+            const isRightTypeAssertion = util.isTypeAssertion(node.right);
+            if (isLeftTypeAssertion && isRightTypeAssertion) {
+                return; // ignore
+            }
+            if (isLeftTypeAssertion) {
+                return rule(Object.assign(Object.assign({}, node), { left: Object.assign(Object.assign({}, node.left), { type: experimental_utils_1.AST_NODE_TYPES.SequenceExpression }) }));
+            }
+            if (isRightTypeAssertion) {
+                return rule(Object.assign(Object.assign({}, node), { right: Object.assign(Object.assign({}, node.right), { type: experimental_utils_1.AST_NODE_TYPES.SequenceExpression }) }));
+            }
+            return rule(node);
+        }
+        function callExp(node) {
+            var _a;
+            const rule = rules.CallExpression;
+            if (util.isTypeAssertion(node.callee)) {
+                // reduces the precedence of the node so the rule thinks it needs to be wrapped
+                return rule(Object.assign(Object.assign({}, node), { callee: Object.assign(Object.assign({}, node.callee), { type: experimental_utils_1.AST_NODE_TYPES.SequenceExpression }) }));
+            }
+            if (node.arguments.length === 1 && ((_a = node.typeParameters) === null || _a === void 0 ? void 0 : _a.params.some(param => param.type === experimental_utils_1.AST_NODE_TYPES.TSParenthesizedType ||
+                param.type === experimental_utils_1.AST_NODE_TYPES.TSImportType))) {
+                return rule(Object.assign(Object.assign({}, node), { arguments: [
+                        Object.assign(Object.assign({}, node.arguments[0]), { type: experimental_utils_1.AST_NODE_TYPES.SequenceExpression }),
+                    ] }));
+            }
+            return rule(node);
+        }
+        function unaryUpdateExpression(node) {
+            const rule = rules.UnaryExpression;
+            if (util.isTypeAssertion(node.argument)) {
+                // reduces the precedence of the node so the rule thinks it needs to be wrapped
+                return rule(Object.assign(Object.assign({}, node), { argument: Object.assign(Object.assign({}, node.argument), { type: experimental_utils_1.AST_NODE_TYPES.SequenceExpression }) }));
+            }
+            return rule(node);
+        }
+        const overrides = {
+            // ArrayExpression
+            ArrowFunctionExpression(node) {
+                if (!util.isTypeAssertion(node.body)) {
+                    return rules.ArrowFunctionExpression(node);
+                }
+            },
+            // AssignmentExpression
+            // AwaitExpression
+            BinaryExpression: binaryExp,
+            CallExpression: callExp,
+            // ClassDeclaration
+            // ClassExpression
+            ConditionalExpression(node) {
+                // reduces the precedence of the node so the rule thinks it needs to be wrapped
+                if (util.isTypeAssertion(node.test)) {
+                    return rules.ConditionalExpression(Object.assign(Object.assign({}, node), { test: Object.assign(Object.assign({}, node.test), { type: experimental_utils_1.AST_NODE_TYPES.SequenceExpression }) }));
+                }
+                if (util.isTypeAssertion(node.consequent)) {
+                    return rules.ConditionalExpression(Object.assign(Object.assign({}, node), { consequent: Object.assign(Object.assign({}, node.consequent), { type: experimental_utils_1.AST_NODE_TYPES.SequenceExpression }) }));
+                }
+                if (util.isTypeAssertion(node.alternate)) {
+                    // reduces the precedence of the node so the rule thinks it needs to be rapped
+                    return rules.ConditionalExpression(Object.assign(Object.assign({}, node), { alternate: Object.assign(Object.assign({}, node.alternate), { type: experimental_utils_1.AST_NODE_TYPES.SequenceExpression }) }));
+                }
+                return rules.ConditionalExpression(node);
+            },
+            // DoWhileStatement
+            'ForInStatement, ForOfStatement'(node) {
+                if (util.isTypeAssertion(node.right)) {
+                    // makes the rule skip checking of the right
+                    return rules['ForInStatement, ForOfStatement'](Object.assign(Object.assign({}, node), { type: experimental_utils_1.AST_NODE_TYPES.ForOfStatement, right: Object.assign(Object.assign({}, node.right), { type: experimental_utils_1.AST_NODE_TYPES.SequenceExpression }) }));
+                }
+                return rules['ForInStatement, ForOfStatement'](node);
+            },
+            ForStatement(node) {
+                // make the rule skip the piece by removing it entirely
+                if (node.init && util.isTypeAssertion(node.init)) {
+                    return rules.ForStatement(Object.assign(Object.assign({}, node), { init: null }));
+                }
+                if (node.test && util.isTypeAssertion(node.test)) {
+                    return rules.ForStatement(Object.assign(Object.assign({}, node), { test: null }));
+                }
+                if (node.update && util.isTypeAssertion(node.update)) {
+                    return rules.ForStatement(Object.assign(Object.assign({}, node), { update: null }));
+                }
+                return rules.ForStatement(node);
+            },
+            'ForStatement > *.init:exit'(node) {
+                if (!util.isTypeAssertion(node)) {
+                    return rules['ForStatement > *.init:exit'](node);
+                }
+            },
+            // IfStatement
+            LogicalExpression: binaryExp,
+            MemberExpression(node) {
+                if (util.isTypeAssertion(node.object)) {
+                    // reduces the precedence of the node so the rule thinks it needs to be wrapped
+                    return rules.MemberExpression(Object.assign(Object.assign({}, node), { object: Object.assign(Object.assign({}, node.object), { type: experimental_utils_1.AST_NODE_TYPES.SequenceExpression }) }));
+                }
+                return rules.MemberExpression(node);
+            },
+            NewExpression: callExp,
+            // ObjectExpression
+            // ReturnStatement
+            // SequenceExpression
+            SpreadElement(node) {
+                if (!util.isTypeAssertion(node.argument)) {
+                    return rules.SpreadElement(node);
+                }
+            },
+            SwitchCase(node) {
+                if (node.test && !util.isTypeAssertion(node.test)) {
+                    return rules.SwitchCase(node);
+                }
+            },
+            // SwitchStatement
+            ThrowStatement(node) {
+                if (node.argument && !util.isTypeAssertion(node.argument)) {
+                    return rules.ThrowStatement(node);
+                }
+            },
+            UnaryExpression: unaryUpdateExpression,
+            UpdateExpression: unaryUpdateExpression,
+            // VariableDeclarator
+            // WhileStatement
+            // WithStatement - i'm not going to even bother implementing this terrible and never used feature
+            YieldExpression(node) {
+                if (node.argument && !util.isTypeAssertion(node.argument)) {
+                    return rules.YieldExpression(node);
+                }
+            },
+        };
+        return Object.assign({}, rules, overrides);
+    },
+});
+//# sourceMappingURL=no-extra-parens.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-parens.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-parens.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b3b7d7eacefad95af2c7d596d1dbc2da84af72dc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-parens.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-extra-parens.js","sourceRoot":"","sources":["../../src/rules/no-extra-parens.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-semi.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-semi.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c89f97d9301c46cdd8929f1aadcbf397897ad4b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-semi.js
@@ -0,0 +1,49 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const no_extra_semi_1 = __importDefault(require("eslint/lib/rules/no-extra-semi"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-extra-semi',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow unnecessary semicolons',
+            category: 'Possible Errors',
+            recommended: 'error',
+            extendsBaseRule: true,
+        },
+        fixable: 'code',
+        schema: no_extra_semi_1.default.meta.schema,
+        messages: no_extra_semi_1.default.meta.messages,
+    },
+    defaultOptions: [],
+    create(context) {
+        const rules = no_extra_semi_1.default.create(context);
+        return Object.assign(Object.assign({}, rules), { ClassProperty(node) {
+                rules.MethodDefinition(node);
+            } });
+    },
+});
+//# sourceMappingURL=no-extra-semi.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-semi.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-semi.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c7e87d7ab4b4b9f463f02a17558951f228e35976
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-semi.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-extra-semi.js","sourceRoot":"","sources":["../../src/rules/no-extra-semi.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,mFAAsD;AACtD,8CAAgC;AAKhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,iCAAiC;YAC9C,QAAQ,EAAE,iBAAiB;YAC3B,WAAW,EAAE,OAAO;YACpB,eAAe,EAAE,IAAI;SACtB;QACD,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,uBAAQ,CAAC,IAAI,CAAC,MAAM;QAC5B,QAAQ,EAAE,uBAAQ,CAAC,IAAI,CAAC,QAAQ;KACjC;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,uBAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEvC,uCACK,KAAK,KACR,aAAa,CAAC,IAAI;gBAChB,KAAK,CAAC,gBAAgB,CAAC,IAAa,CAAC,CAAC;YACxC,CAAC,IACD;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extraneous-class.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extraneous-class.js
new file mode 100644
index 0000000000000000000000000000000000000000..3e8136974c6e8a058c2f6f478c40ff7940a22809
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extraneous-class.js
@@ -0,0 +1,129 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-extraneous-class',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Forbids the use of classes as namespaces',
+            category: 'Best Practices',
+            recommended: false,
+        },
+        schema: [
+            {
+                type: 'object',
+                additionalProperties: false,
+                properties: {
+                    allowConstructorOnly: {
+                        type: 'boolean',
+                    },
+                    allowEmpty: {
+                        type: 'boolean',
+                    },
+                    allowStaticOnly: {
+                        type: 'boolean',
+                    },
+                    allowWithDecorator: {
+                        type: 'boolean',
+                    },
+                },
+            },
+        ],
+        messages: {
+            empty: 'Unexpected empty class.',
+            onlyStatic: 'Unexpected class with only static properties.',
+            onlyConstructor: 'Unexpected class with only a constructor.',
+        },
+    },
+    defaultOptions: [
+        {
+            allowConstructorOnly: false,
+            allowEmpty: false,
+            allowStaticOnly: false,
+            allowWithDecorator: false,
+        },
+    ],
+    create(context, [{ allowConstructorOnly, allowEmpty, allowStaticOnly, allowWithDecorator }]) {
+        const isAllowWithDecorator = (node) => {
+            return !!(allowWithDecorator &&
+                node &&
+                node.decorators &&
+                node.decorators.length);
+        };
+        return {
+            ClassBody(node) {
+                const parent = node.parent;
+                if (!parent || parent.superClass) {
+                    return;
+                }
+                const reportNode = 'id' in parent && parent.id ? parent.id : parent;
+                if (node.body.length === 0) {
+                    if (allowEmpty || isAllowWithDecorator(parent)) {
+                        return;
+                    }
+                    context.report({
+                        node: reportNode,
+                        messageId: 'empty',
+                    });
+                    return;
+                }
+                let onlyStatic = true;
+                let onlyConstructor = true;
+                for (const prop of node.body) {
+                    if ('kind' in prop && prop.kind === 'constructor') {
+                        if (prop.value.params.some(param => param.type === experimental_utils_1.AST_NODE_TYPES.TSParameterProperty)) {
+                            onlyConstructor = false;
+                            onlyStatic = false;
+                        }
+                    }
+                    else {
+                        onlyConstructor = false;
+                        if ('static' in prop && !prop.static) {
+                            onlyStatic = false;
+                        }
+                    }
+                    if (!(onlyStatic || onlyConstructor)) {
+                        break;
+                    }
+                }
+                if (onlyConstructor) {
+                    if (!allowConstructorOnly) {
+                        context.report({
+                            node: reportNode,
+                            messageId: 'onlyConstructor',
+                        });
+                    }
+                    return;
+                }
+                if (onlyStatic && !allowStaticOnly) {
+                    context.report({
+                        node: reportNode,
+                        messageId: 'onlyStatic',
+                    });
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-extraneous-class.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extraneous-class.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extraneous-class.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..6865a15f3ca49792c403fc0895b80fabdf3ee559
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extraneous-class.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-extraneous-class.js","sourceRoot":"","sources":["../../src/rules/no-extraneous-class.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-floating-promises.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-floating-promises.js
new file mode 100644
index 0000000000000000000000000000000000000000..38191bcb6958e4cec35c0eabd4d930a85032953c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-floating-promises.js
@@ -0,0 +1,204 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const tsutils = __importStar(require("tsutils"));
+const ts = __importStar(require("typescript"));
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-floating-promises',
+    meta: {
+        docs: {
+            description: 'Requires Promise-like values to be handled appropriately',
+            category: 'Best Practices',
+            recommended: 'error',
+            suggestion: true,
+            requiresTypeChecking: true,
+        },
+        messages: {
+            floating: 'Promises must be handled appropriately.',
+            floatingVoid: 'Promises must be handled appropriately' +
+                ' or explicitly marked as ignored with the `void` operator.',
+            floatingFixVoid: 'Add void operator to ignore.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    ignoreVoid: { type: 'boolean' },
+                    ignoreIIFE: { type: 'boolean' },
+                },
+                additionalProperties: false,
+            },
+        ],
+        type: 'problem',
+    },
+    defaultOptions: [
+        {
+            ignoreVoid: true,
+            ignoreIIFE: false,
+        },
+    ],
+    create(context, [options]) {
+        const parserServices = util.getParserServices(context);
+        const checker = parserServices.program.getTypeChecker();
+        const sourceCode = context.getSourceCode();
+        return {
+            ExpressionStatement(node) {
+                const { expression } = parserServices.esTreeNodeToTSNodeMap.get(node);
+                if (options.ignoreIIFE && isAsyncIife(node)) {
+                    return;
+                }
+                if (isUnhandledPromise(checker, expression)) {
+                    if (options.ignoreVoid) {
+                        context.report({
+                            node,
+                            messageId: 'floatingVoid',
+                            suggest: [
+                                {
+                                    messageId: 'floatingFixVoid',
+                                    fix(fixer) {
+                                        let code = sourceCode.getText(node);
+                                        code = `void ${code}`;
+                                        return fixer.replaceText(node, code);
+                                    },
+                                },
+                            ],
+                        });
+                    }
+                    else {
+                        context.report({
+                            node,
+                            messageId: 'floating',
+                        });
+                    }
+                }
+            },
+        };
+        function isAsyncIife(node) {
+            if (node.expression.type !== experimental_utils_1.AST_NODE_TYPES.CallExpression) {
+                return false;
+            }
+            return (node.expression.type === experimental_utils_1.AST_NODE_TYPES.CallExpression &&
+                (node.expression.callee.type ===
+                    experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression ||
+                    node.expression.callee.type === experimental_utils_1.AST_NODE_TYPES.FunctionExpression));
+        }
+        function isUnhandledPromise(checker, node) {
+            // First, check expressions whose resulting types may not be promise-like
+            if (ts.isBinaryExpression(node) &&
+                node.operatorToken.kind === ts.SyntaxKind.CommaToken) {
+                // Any child in a comma expression could return a potentially unhandled
+                // promise, so we check them all regardless of whether the final returned
+                // value is promise-like.
+                return (isUnhandledPromise(checker, node.left) ||
+                    isUnhandledPromise(checker, node.right));
+            }
+            if (ts.isVoidExpression(node) && !options.ignoreVoid) {
+                // Similarly, a `void` expression always returns undefined, so we need to
+                // see what's inside it without checking the type of the overall expression.
+                return isUnhandledPromise(checker, node.expression);
+            }
+            // Check the type. At this point it can't be unhandled if it isn't a promise
+            if (!isPromiseLike(checker, node)) {
+                return false;
+            }
+            if (ts.isCallExpression(node)) {
+                // If the outer expression is a call, it must be either a `.then()` or
+                // `.catch()` that handles the promise.
+                return (!isPromiseCatchCallWithHandler(node) &&
+                    !isPromiseThenCallWithRejectionHandler(node) &&
+                    !isPromiseFinallyCallWithHandler(node));
+            }
+            else if (ts.isConditionalExpression(node)) {
+                // We must be getting the promise-like value from one of the branches of the
+                // ternary. Check them directly.
+                return (isUnhandledPromise(checker, node.whenFalse) ||
+                    isUnhandledPromise(checker, node.whenTrue));
+            }
+            else if (ts.isPropertyAccessExpression(node) ||
+                ts.isIdentifier(node) ||
+                ts.isNewExpression(node)) {
+                // If it is just a property access chain or a `new` call (e.g. `foo.bar` or
+                // `new Promise()`), the promise is not handled because it doesn't have the
+                // necessary then/catch call at the end of the chain.
+                return true;
+            }
+            // We conservatively return false for all other types of expressions because
+            // we don't want to accidentally fail if the promise is handled internally but
+            // we just can't tell.
+            return false;
+        }
+    },
+});
+// Modified from tsutils.isThenable() to only consider thenables which can be
+// rejected/caught via a second parameter. Original source (MIT licensed):
+//
+//   https://github.com/ajafff/tsutils/blob/49d0d31050b44b81e918eae4fbaf1dfe7b7286af/util/type.ts#L95-L125
+function isPromiseLike(checker, node) {
+    const type = checker.getTypeAtLocation(node);
+    for (const ty of tsutils.unionTypeParts(checker.getApparentType(type))) {
+        const then = ty.getProperty('then');
+        if (then === undefined) {
+            continue;
+        }
+        const thenType = checker.getTypeOfSymbolAtLocation(then, node);
+        if (hasMatchingSignature(thenType, signature => signature.parameters.length >= 2 &&
+            isFunctionParam(checker, signature.parameters[0], node) &&
+            isFunctionParam(checker, signature.parameters[1], node))) {
+            return true;
+        }
+    }
+    return false;
+}
+function hasMatchingSignature(type, matcher) {
+    for (const t of tsutils.unionTypeParts(type)) {
+        if (t.getCallSignatures().some(matcher)) {
+            return true;
+        }
+    }
+    return false;
+}
+function isFunctionParam(checker, param, node) {
+    const type = checker.getApparentType(checker.getTypeOfSymbolAtLocation(param, node));
+    for (const t of tsutils.unionTypeParts(type)) {
+        if (t.getCallSignatures().length !== 0) {
+            return true;
+        }
+    }
+    return false;
+}
+function isPromiseCatchCallWithHandler(expression) {
+    return (tsutils.isPropertyAccessExpression(expression.expression) &&
+        expression.expression.name.text === 'catch' &&
+        expression.arguments.length >= 1);
+}
+function isPromiseThenCallWithRejectionHandler(expression) {
+    return (tsutils.isPropertyAccessExpression(expression.expression) &&
+        expression.expression.name.text === 'then' &&
+        expression.arguments.length >= 2);
+}
+function isPromiseFinallyCallWithHandler(expression) {
+    return (tsutils.isPropertyAccessExpression(expression.expression) &&
+        expression.expression.name.text === 'finally' &&
+        expression.arguments.length >= 1);
+}
+//# sourceMappingURL=no-floating-promises.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-floating-promises.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-floating-promises.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..d025287816761fe23667e0c9ba76c78b8ab316a0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-floating-promises.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-floating-promises.js","sourceRoot":"","sources":["../../src/rules/no-floating-promises.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-for-in-array.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-for-in-array.js
new file mode 100644
index 0000000000000000000000000000000000000000..e1b7fc7dd4492132ac564f550383c1ff6ea0c804
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-for-in-array.js
@@ -0,0 +1,58 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-for-in-array',
+    meta: {
+        docs: {
+            description: 'Disallow iterating over an array with a for-in loop',
+            category: 'Best Practices',
+            recommended: 'error',
+            requiresTypeChecking: true,
+        },
+        messages: {
+            forInViolation: 'For-in loops over arrays are forbidden. Use for-of or array.forEach instead.',
+        },
+        schema: [],
+        type: 'problem',
+    },
+    defaultOptions: [],
+    create(context) {
+        return {
+            ForInStatement(node) {
+                const parserServices = util.getParserServices(context);
+                const checker = parserServices.program.getTypeChecker();
+                const originalNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+                const type = util.getConstrainedTypeAtLocation(checker, originalNode.expression);
+                if (util.isTypeArrayTypeOrUnionOfArrayTypes(type, checker) ||
+                    (type.flags & ts.TypeFlags.StringLike) !== 0) {
+                    context.report({
+                        node,
+                        messageId: 'forInViolation',
+                    });
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-for-in-array.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-for-in-array.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-for-in-array.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..67767b3c9ab8d6def1c40b91cf0a2ff3f8bc6731
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-for-in-array.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-for-in-array.js","sourceRoot":"","sources":["../../src/rules/no-for-in-array.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,8CAAgC;AAEhC,kBAAe,IAAI,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,iBAAiB;IACvB,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,WAAW,EAAE,qDAAqD;YAClE,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,OAAO;YACpB,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE;YACR,cAAc,EACZ,8EAA8E;SACjF;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,SAAS;KAChB;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,cAAc,CAAC,IAAI;gBACjB,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBACvD,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;gBACxD,MAAM,YAAY,GAAG,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAEpE,MAAM,IAAI,GAAG,IAAI,CAAC,4BAA4B,CAC5C,OAAO,EACP,YAAY,CAAC,UAAU,CACxB,CAAC;gBAEF,IACE,IAAI,CAAC,kCAAkC,CAAC,IAAI,EAAE,OAAO,CAAC;oBACtD,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAC5C;oBACA,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,gBAAgB;qBAC5B,CAAC,CAAC;iBACJ;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-implicit-any-catch.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-implicit-any-catch.js
new file mode 100644
index 0000000000000000000000000000000000000000..fb3d31ef7fcd2ec918572b9c9fed02bc41eda52d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-implicit-any-catch.js
@@ -0,0 +1,97 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const util = __importStar(require("../util"));
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+exports.default = util.createRule({
+    name: 'no-implicit-any-catch',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow usage of the implicit `any` type in catch clauses',
+            category: 'Best Practices',
+            recommended: false,
+            suggestion: true,
+        },
+        fixable: 'code',
+        messages: {
+            implicitAnyInCatch: 'Implicit any in catch clause',
+            explicitAnyInCatch: 'Explicit any in catch clause',
+            suggestExplicitUnknown: 'Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct.',
+        },
+        schema: [
+            {
+                type: 'object',
+                additionalProperties: false,
+                properties: {
+                    allowExplicitAny: {
+                        type: 'boolean',
+                    },
+                },
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            allowExplicitAny: false,
+        },
+    ],
+    create(context, [{ allowExplicitAny }]) {
+        return {
+            CatchClause(node) {
+                if (!node.param) {
+                    return; // ignore catch without variable
+                }
+                if (!node.param.typeAnnotation) {
+                    context.report({
+                        node,
+                        messageId: 'implicitAnyInCatch',
+                        suggest: [
+                            {
+                                messageId: 'suggestExplicitUnknown',
+                                fix(fixer) {
+                                    return fixer.insertTextAfter(node.param, ': unknown');
+                                },
+                            },
+                        ],
+                    });
+                }
+                else if (!allowExplicitAny &&
+                    node.param.typeAnnotation.typeAnnotation.type ===
+                        experimental_utils_1.AST_NODE_TYPES.TSAnyKeyword) {
+                    context.report({
+                        node,
+                        messageId: 'explicitAnyInCatch',
+                        suggest: [
+                            {
+                                messageId: 'suggestExplicitUnknown',
+                                fix(fixer) {
+                                    return fixer.replaceText(node.param.typeAnnotation, ': unknown');
+                                },
+                            },
+                        ],
+                    });
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-implicit-any-catch.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-implicit-any-catch.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-implicit-any-catch.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e5ed504fa6731f42f165bcdc7e1cd83932425856
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-implicit-any-catch.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-implicit-any-catch.js","sourceRoot":"","sources":["../../src/rules/no-implicit-any-catch.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8CAAgC;AAChC,8EAG+C;AAY/C,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,4DAA4D;YACzE,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,IAAI;SACjB;QACD,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE;YACR,kBAAkB,EAAE,8BAA8B;YAClD,kBAAkB,EAAE,8BAA8B;YAClD,sBAAsB,EACpB,kGAAkG;SACrG;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACV,gBAAgB,EAAE;wBAChB,IAAI,EAAE,SAAS;qBAChB;iBACF;aACF;SACF;KACF;IACD,cAAc,EAAE;QACd;YACE,gBAAgB,EAAE,KAAK;SACxB;KACF;IACD,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC;QACpC,OAAO;YACL,WAAW,CAAC,IAAI;gBACd,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;oBACf,OAAO,CAAC,gCAAgC;iBACzC;gBAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;oBAC9B,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,oBAAoB;wBAC/B,OAAO,EAAE;4BACP;gCACE,SAAS,EAAE,wBAAwB;gCACnC,GAAG,CAAC,KAAK;oCACP,OAAO,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,KAAM,EAAE,WAAW,CAAC,CAAC;gCACzD,CAAC;6BACF;yBACF;qBACF,CAAC,CAAC;iBACJ;qBAAM,IACL,CAAC,gBAAgB;oBACjB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI;wBAC3C,mCAAc,CAAC,YAAY,EAC7B;oBACA,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,oBAAoB;wBAC/B,OAAO,EAAE;4BACP;gCACE,SAAS,EAAE,wBAAwB;gCACnC,GAAG,CAAC,KAAK;oCACP,OAAO,KAAK,CAAC,WAAW,CACtB,IAAI,CAAC,KAAM,CAAC,cAAe,EAC3B,WAAW,CACZ,CAAC;gCACJ,CAAC;6BACF;yBACF;qBACF,CAAC,CAAC;iBACJ;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-implied-eval.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-implied-eval.js
new file mode 100644
index 0000000000000000000000000000000000000000..27f19512063fef9f42fbe58a6037d9fdadbb0be0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-implied-eval.js
@@ -0,0 +1,150 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const ts = __importStar(require("typescript"));
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const tsutils = __importStar(require("tsutils"));
+const util = __importStar(require("../util"));
+const FUNCTION_CONSTRUCTOR = 'Function';
+const GLOBAL_CANDIDATES = new Set(['global', 'window', 'globalThis']);
+const EVAL_LIKE_METHODS = new Set([
+    'setImmediate',
+    'setInterval',
+    'setTimeout',
+    'execScript',
+]);
+exports.default = util.createRule({
+    name: 'no-implied-eval',
+    meta: {
+        docs: {
+            description: 'Disallow the use of `eval()`-like methods',
+            category: 'Best Practices',
+            recommended: 'error',
+            extendsBaseRule: true,
+            requiresTypeChecking: true,
+        },
+        messages: {
+            noImpliedEvalError: 'Implied eval. Consider passing a function.',
+            noFunctionConstructor: 'Implied eval. Do not use the Function constructor to create functions.',
+        },
+        schema: [],
+        type: 'suggestion',
+    },
+    defaultOptions: [],
+    create(context) {
+        const parserServices = util.getParserServices(context);
+        const program = parserServices.program;
+        const checker = parserServices.program.getTypeChecker();
+        function getCalleeName(node) {
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.Identifier) {
+                return node.name;
+            }
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.MemberExpression &&
+                node.object.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                GLOBAL_CANDIDATES.has(node.object.name)) {
+                if (node.property.type === experimental_utils_1.AST_NODE_TYPES.Identifier) {
+                    return node.property.name;
+                }
+                if (node.property.type === experimental_utils_1.AST_NODE_TYPES.Literal &&
+                    typeof node.property.value === 'string') {
+                    return node.property.value;
+                }
+            }
+            return null;
+        }
+        function isFunctionType(node) {
+            var _a;
+            const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+            const type = checker.getTypeAtLocation(tsNode);
+            const symbol = type.getSymbol();
+            if (symbol &&
+                tsutils.isSymbolFlagSet(symbol, ts.SymbolFlags.Function | ts.SymbolFlags.Method)) {
+                return true;
+            }
+            if (symbol && symbol.escapedName === FUNCTION_CONSTRUCTOR) {
+                const declarations = (_a = symbol.getDeclarations()) !== null && _a !== void 0 ? _a : [];
+                for (const declaration of declarations) {
+                    const sourceFile = declaration.getSourceFile();
+                    if (program.isSourceFileDefaultLibrary(sourceFile)) {
+                        return true;
+                    }
+                }
+            }
+            const signatures = checker.getSignaturesOfType(type, ts.SignatureKind.Call);
+            return signatures.length > 0;
+        }
+        function isFunction(node) {
+            switch (node.type) {
+                case experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression:
+                case experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration:
+                case experimental_utils_1.AST_NODE_TYPES.FunctionExpression:
+                    return true;
+                case experimental_utils_1.AST_NODE_TYPES.MemberExpression:
+                case experimental_utils_1.AST_NODE_TYPES.Identifier:
+                    return isFunctionType(node);
+                case experimental_utils_1.AST_NODE_TYPES.CallExpression:
+                    return ((node.callee.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                        node.callee.name === 'bind') ||
+                        isFunctionType(node));
+                default:
+                    return false;
+            }
+        }
+        function checkImpliedEval(node) {
+            var _a;
+            const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node.callee);
+            const type = checker.getTypeAtLocation(tsNode);
+            const calleeName = getCalleeName(node.callee);
+            if (calleeName === null) {
+                return;
+            }
+            if (calleeName === FUNCTION_CONSTRUCTOR) {
+                const symbol = type.getSymbol();
+                if (symbol) {
+                    const declarations = (_a = symbol.getDeclarations()) !== null && _a !== void 0 ? _a : [];
+                    for (const declaration of declarations) {
+                        const sourceFile = declaration.getSourceFile();
+                        if (program.isSourceFileDefaultLibrary(sourceFile)) {
+                            context.report({ node, messageId: 'noFunctionConstructor' });
+                            return;
+                        }
+                    }
+                }
+                else {
+                    context.report({ node, messageId: 'noFunctionConstructor' });
+                    return;
+                }
+            }
+            if (node.arguments.length === 0) {
+                return;
+            }
+            const [handler] = node.arguments;
+            if (EVAL_LIKE_METHODS.has(calleeName) && !isFunction(handler)) {
+                context.report({ node: handler, messageId: 'noImpliedEvalError' });
+            }
+        }
+        return {
+            NewExpression: checkImpliedEval,
+            CallExpression: checkImpliedEval,
+        };
+    },
+});
+//# sourceMappingURL=no-implied-eval.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-implied-eval.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-implied-eval.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..bf7f3ef1e4f9c5774a07fc6aa6759e5c8719b1ae
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-implied-eval.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-implied-eval.js","sourceRoot":"","sources":["../../src/rules/no-implied-eval.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-inferrable-types.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-inferrable-types.js
new file mode 100644
index 0000000000000000000000000000000000000000..60ff6fb112019ac3d243939b2c065313b5078ed0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-inferrable-types.js
@@ -0,0 +1,199 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-inferrable-types',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallows explicit type declarations for variables or parameters initialized to a number, string, or boolean',
+            category: 'Best Practices',
+            recommended: 'error',
+        },
+        fixable: 'code',
+        messages: {
+            noInferrableType: 'Type {{type}} trivially inferred from a {{type}} literal, remove type annotation.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    ignoreParameters: {
+                        type: 'boolean',
+                    },
+                    ignoreProperties: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            ignoreParameters: false,
+            ignoreProperties: false,
+        },
+    ],
+    create(context, [{ ignoreParameters, ignoreProperties }]) {
+        function isFunctionCall(init, callName) {
+            if (init.type === experimental_utils_1.AST_NODE_TYPES.ChainExpression) {
+                return isFunctionCall(init.expression, callName);
+            }
+            return (init.type === experimental_utils_1.AST_NODE_TYPES.CallExpression &&
+                init.callee.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                init.callee.name === callName);
+        }
+        function isLiteral(init, typeName) {
+            return (init.type === experimental_utils_1.AST_NODE_TYPES.Literal && typeof init.value === typeName);
+        }
+        function isIdentifier(init, ...names) {
+            return (init.type === experimental_utils_1.AST_NODE_TYPES.Identifier && names.includes(init.name));
+        }
+        function hasUnaryPrefix(init, ...operators) {
+            return (init.type === experimental_utils_1.AST_NODE_TYPES.UnaryExpression &&
+                operators.includes(init.operator));
+        }
+        const keywordMap = {
+            [experimental_utils_1.AST_NODE_TYPES.TSBigIntKeyword]: 'bigint',
+            [experimental_utils_1.AST_NODE_TYPES.TSBooleanKeyword]: 'boolean',
+            [experimental_utils_1.AST_NODE_TYPES.TSNumberKeyword]: 'number',
+            [experimental_utils_1.AST_NODE_TYPES.TSNullKeyword]: 'null',
+            [experimental_utils_1.AST_NODE_TYPES.TSStringKeyword]: 'string',
+            [experimental_utils_1.AST_NODE_TYPES.TSSymbolKeyword]: 'symbol',
+            [experimental_utils_1.AST_NODE_TYPES.TSUndefinedKeyword]: 'undefined',
+        };
+        /**
+         * Returns whether a node has an inferrable value or not
+         */
+        function isInferrable(annotation, init) {
+            switch (annotation.type) {
+                case experimental_utils_1.AST_NODE_TYPES.TSBigIntKeyword: {
+                    // note that bigint cannot have + prefixed to it
+                    const unwrappedInit = hasUnaryPrefix(init, '-')
+                        ? init.argument
+                        : init;
+                    return (isFunctionCall(unwrappedInit, 'BigInt') ||
+                        (unwrappedInit.type === experimental_utils_1.AST_NODE_TYPES.Literal &&
+                            'bigint' in unwrappedInit));
+                }
+                case experimental_utils_1.AST_NODE_TYPES.TSBooleanKeyword:
+                    return (hasUnaryPrefix(init, '!') ||
+                        // eslint-disable-next-line @typescript-eslint/internal/prefer-ast-types-enum
+                        isFunctionCall(init, 'Boolean') ||
+                        isLiteral(init, 'boolean'));
+                case experimental_utils_1.AST_NODE_TYPES.TSNumberKeyword: {
+                    const unwrappedInit = hasUnaryPrefix(init, '+', '-')
+                        ? init.argument
+                        : init;
+                    return (isIdentifier(unwrappedInit, 'Infinity', 'NaN') ||
+                        isFunctionCall(unwrappedInit, 'Number') ||
+                        isLiteral(unwrappedInit, 'number'));
+                }
+                case experimental_utils_1.AST_NODE_TYPES.TSNullKeyword:
+                    return init.type === experimental_utils_1.AST_NODE_TYPES.Literal && init.value === null;
+                case experimental_utils_1.AST_NODE_TYPES.TSStringKeyword:
+                    return (
+                    // eslint-disable-next-line @typescript-eslint/internal/prefer-ast-types-enum
+                    isFunctionCall(init, 'String') ||
+                        isLiteral(init, 'string') ||
+                        init.type === experimental_utils_1.AST_NODE_TYPES.TemplateLiteral);
+                case experimental_utils_1.AST_NODE_TYPES.TSSymbolKeyword:
+                    return isFunctionCall(init, 'Symbol');
+                case experimental_utils_1.AST_NODE_TYPES.TSTypeReference: {
+                    if (annotation.typeName.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                        annotation.typeName.name === 'RegExp') {
+                        const isRegExpLiteral = init.type === experimental_utils_1.AST_NODE_TYPES.Literal &&
+                            init.value instanceof RegExp;
+                        const isRegExpNewCall = init.type === experimental_utils_1.AST_NODE_TYPES.NewExpression &&
+                            init.callee.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                            init.callee.name === 'RegExp';
+                        const isRegExpCall = isFunctionCall(init, 'RegExp');
+                        return isRegExpLiteral || isRegExpCall || isRegExpNewCall;
+                    }
+                    return false;
+                }
+                case experimental_utils_1.AST_NODE_TYPES.TSUndefinedKeyword:
+                    return (hasUnaryPrefix(init, 'void') || isIdentifier(init, 'undefined'));
+            }
+            return false;
+        }
+        /**
+         * Reports an inferrable type declaration, if any
+         */
+        function reportInferrableType(node, typeNode, initNode) {
+            if (!typeNode || !initNode || !typeNode.typeAnnotation) {
+                return;
+            }
+            if (!isInferrable(typeNode.typeAnnotation, initNode)) {
+                return;
+            }
+            const type = typeNode.typeAnnotation.type === experimental_utils_1.AST_NODE_TYPES.TSTypeReference
+                ? // TODO - if we add more references
+                    'RegExp'
+                : keywordMap[typeNode.typeAnnotation.type];
+            context.report({
+                node,
+                messageId: 'noInferrableType',
+                data: {
+                    type,
+                },
+                fix: fixer => fixer.remove(typeNode),
+            });
+        }
+        function inferrableVariableVisitor(node) {
+            if (!node.id) {
+                return;
+            }
+            reportInferrableType(node, node.id.typeAnnotation, node.init);
+        }
+        function inferrableParameterVisitor(node) {
+            if (ignoreParameters || !node.params) {
+                return;
+            }
+            node.params.filter(param => param.type === experimental_utils_1.AST_NODE_TYPES.AssignmentPattern &&
+                param.left &&
+                param.right).forEach(param => {
+                reportInferrableType(param, param.left.typeAnnotation, param.right);
+            });
+        }
+        function inferrablePropertyVisitor(node) {
+            // We ignore `readonly` because of Microsoft/TypeScript#14416
+            // Essentially a readonly property without a type
+            // will result in its value being the type, leading to
+            // compile errors if the type is stripped.
+            if (ignoreProperties || node.readonly || node.optional) {
+                return;
+            }
+            reportInferrableType(node, node.typeAnnotation, node.value);
+        }
+        return {
+            VariableDeclarator: inferrableVariableVisitor,
+            FunctionExpression: inferrableParameterVisitor,
+            FunctionDeclaration: inferrableParameterVisitor,
+            ArrowFunctionExpression: inferrableParameterVisitor,
+            ClassProperty: inferrablePropertyVisitor,
+        };
+    },
+});
+//# sourceMappingURL=no-inferrable-types.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-inferrable-types.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-inferrable-types.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..a31baf22c48763992fad0227da39a79c6cf57667
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-inferrable-types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-inferrable-types.js","sourceRoot":"","sources":["../../src/rules/no-inferrable-types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-this.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-this.js
new file mode 100644
index 0000000000000000000000000000000000000000..499999370ab83b2b3dea24033e898c3bbbbdc2f9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-this.js
@@ -0,0 +1,79 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const no_invalid_this_1 = __importDefault(require("eslint/lib/rules/no-invalid-this"));
+const util_1 = require("../util");
+exports.default = util_1.createRule({
+    name: 'no-invalid-this',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow `this` keywords outside of classes or class-like objects',
+            category: 'Best Practices',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        messages: (_a = no_invalid_this_1.default.meta.messages) !== null && _a !== void 0 ? _a : {
+            unexpectedThis: "Unexpected 'this'.",
+        },
+        schema: no_invalid_this_1.default.meta.schema,
+    },
+    defaultOptions: [{ capIsConstructor: true }],
+    create(context) {
+        const rules = no_invalid_this_1.default.create(context);
+        /**
+         * Since function definitions can be nested we use a stack storing if "this" is valid in the current context.
+         *
+         * Example:
+         *
+         * function a(this: number) { // valid "this"
+         *     function b() {
+         *         console.log(this); // invalid "this"
+         *     }
+         * }
+         *
+         * When parsing the function declaration of "a" the stack will be: [true]
+         * When parsing the function declaration of "b" the stack will be: [true, false]
+         */
+        const thisIsValidStack = [];
+        return Object.assign(Object.assign({}, rules), { ClassProperty() {
+                thisIsValidStack.push(true);
+            },
+            'ClassProperty:exit'() {
+                thisIsValidStack.pop();
+            },
+            FunctionDeclaration(node) {
+                thisIsValidStack.push(node.params.some(param => param.type === experimental_utils_1.AST_NODE_TYPES.Identifier && param.name === 'this'));
+                // baseRule's work
+                rules.FunctionDeclaration(node);
+            },
+            'FunctionDeclaration:exit'(node) {
+                thisIsValidStack.pop();
+                // baseRule's work
+                rules['FunctionDeclaration:exit'](node);
+            },
+            FunctionExpression(node) {
+                thisIsValidStack.push(node.params.some(param => param.type === experimental_utils_1.AST_NODE_TYPES.Identifier && param.name === 'this'));
+                // baseRule's work
+                rules.FunctionExpression(node);
+            },
+            'FunctionExpression:exit'(node) {
+                thisIsValidStack.pop();
+                // baseRule's work
+                rules['FunctionExpression:exit'](node);
+            },
+            ThisExpression(node) {
+                const thisIsValidHere = thisIsValidStack[thisIsValidStack.length - 1];
+                if (thisIsValidHere) {
+                    return;
+                }
+                // baseRule's work
+                rules.ThisExpression(node);
+            } });
+    },
+});
+//# sourceMappingURL=no-invalid-this.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-this.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-this.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c1fee26a3a0444d46b3d58860400616d504823ed
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-this.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-invalid-this.js","sourceRoot":"","sources":["../../src/rules/no-invalid-this.ts"],"names":[],"mappings":";;;;;;AAAA,8EAG+C;AAC/C,uFAAwD;AACxD,kCAIiB;AAKjB,kBAAe,iBAAU,CAAsB;IAC7C,IAAI,EAAE,iBAAiB;IACvB,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EACT,mEAAmE;YACrE,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,IAAI;SACtB;QACD,QAAQ,QAAE,yBAAQ,CAAC,IAAI,CAAC,QAAQ,mCAAI;YAClC,cAAc,EAAE,oBAAoB;SACrC;QACD,MAAM,EAAE,yBAAQ,CAAC,IAAI,CAAC,MAAM;KAC7B;IACD,cAAc,EAAE,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAC5C,MAAM,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,yBAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEvC;;;;;;;;;;;;;WAaG;QACH,MAAM,gBAAgB,GAAc,EAAE,CAAC;QAEvC,uCACK,KAAK,KACR,aAAa;gBACX,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YACD,oBAAoB;gBAClB,gBAAgB,CAAC,GAAG,EAAE,CAAC;YACzB,CAAC;YACD,mBAAmB,CAAC,IAAkC;gBACpD,gBAAgB,CAAC,IAAI,CACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,KAAK,CAAC,EAAE,CACN,KAAK,CAAC,IAAI,KAAK,mCAAc,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CACpE,CACF,CAAC;gBACF,kBAAkB;gBAClB,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YACD,0BAA0B,CAAC,IAAkC;gBAC3D,gBAAgB,CAAC,GAAG,EAAE,CAAC;gBACvB,kBAAkB;gBAClB,KAAK,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1C,CAAC;YACD,kBAAkB,CAAC,IAAiC;gBAClD,gBAAgB,CAAC,IAAI,CACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,KAAK,CAAC,EAAE,CACN,KAAK,CAAC,IAAI,KAAK,mCAAc,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CACpE,CACF,CAAC;gBACF,kBAAkB;gBAClB,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;YACD,yBAAyB,CAAC,IAAiC;gBACzD,gBAAgB,CAAC,GAAG,EAAE,CAAC;gBACvB,kBAAkB;gBAClB,KAAK,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;YACD,cAAc,CAAC,IAA6B;gBAC1C,MAAM,eAAe,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAEtE,IAAI,eAAe,EAAE;oBACnB,OAAO;iBACR;gBAED,kBAAkB;gBAClB,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC,IACD;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-void-type.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-void-type.js
new file mode 100644
index 0000000000000000000000000000000000000000..f58aa23ca9582d5a82284563d1aaddacd298225c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-void-type.js
@@ -0,0 +1,183 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-invalid-void-type',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallows usage of `void` type outside of generic or return types',
+            category: 'Best Practices',
+            recommended: false,
+        },
+        messages: {
+            invalidVoidForGeneric: '{{ generic }} may not have void as a type variable',
+            invalidVoidNotReturnOrGeneric: 'void is only valid as a return type or generic type variable',
+            invalidVoidNotReturn: 'void is only valid as a return type',
+            invalidVoidNotReturnOrThisParam: 'void is only valid as return type or type of `this` parameter',
+            invalidVoidNotReturnOrThisParamOrGeneric: 'void is only valid as a return type or generic type variable or the type of a `this` parameter',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    allowInGenericTypeArguments: {
+                        oneOf: [
+                            { type: 'boolean' },
+                            {
+                                type: 'array',
+                                items: { type: 'string' },
+                                minLength: 1,
+                            },
+                        ],
+                    },
+                    allowAsThisParameter: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [
+        { allowInGenericTypeArguments: true, allowAsThisParameter: false },
+    ],
+    create(context, [{ allowInGenericTypeArguments, allowAsThisParameter }]) {
+        const validParents = [
+            experimental_utils_1.AST_NODE_TYPES.TSTypeAnnotation,
+        ];
+        const invalidGrandParents = [
+            experimental_utils_1.AST_NODE_TYPES.TSPropertySignature,
+            experimental_utils_1.AST_NODE_TYPES.CallExpression,
+            experimental_utils_1.AST_NODE_TYPES.ClassProperty,
+            experimental_utils_1.AST_NODE_TYPES.Identifier,
+        ];
+        const validUnionMembers = [
+            experimental_utils_1.AST_NODE_TYPES.TSVoidKeyword,
+            experimental_utils_1.AST_NODE_TYPES.TSNeverKeyword,
+        ];
+        if (allowInGenericTypeArguments === true) {
+            validParents.push(experimental_utils_1.AST_NODE_TYPES.TSTypeParameterInstantiation);
+        }
+        /**
+         * @brief check if the given void keyword is used as a valid generic type
+         *
+         * reports if the type parametrized by void is not in the whitelist, or
+         * allowInGenericTypeArguments is false.
+         * no-op if the given void keyword is not used as generic type
+         */
+        function checkGenericTypeArgument(node) {
+            var _a, _b;
+            // only matches T<..., void, ...>
+            // extra check for precaution
+            /* istanbul ignore next */
+            if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type) !== experimental_utils_1.AST_NODE_TYPES.TSTypeParameterInstantiation ||
+                ((_b = node.parent.parent) === null || _b === void 0 ? void 0 : _b.type) !== experimental_utils_1.AST_NODE_TYPES.TSTypeReference) {
+                return;
+            }
+            // check whitelist
+            if (Array.isArray(allowInGenericTypeArguments)) {
+                const sourceCode = context.getSourceCode();
+                const fullyQualifiedName = sourceCode
+                    .getText(node.parent.parent.typeName)
+                    .replace(/ /gu, '');
+                if (!allowInGenericTypeArguments
+                    .map(s => s.replace(/ /gu, ''))
+                    .includes(fullyQualifiedName)) {
+                    context.report({
+                        messageId: 'invalidVoidForGeneric',
+                        data: { generic: fullyQualifiedName },
+                        node,
+                    });
+                }
+                return;
+            }
+            if (!allowInGenericTypeArguments) {
+                context.report({
+                    messageId: allowAsThisParameter
+                        ? 'invalidVoidNotReturnOrThisParam'
+                        : 'invalidVoidNotReturn',
+                    node,
+                });
+            }
+        }
+        /**
+         * @brief checks that a union containing void is valid
+         * @return true if every member of the union is specified as a valid type in
+         * validUnionMembers, or is a valid generic type parametrized by void
+         */
+        function isValidUnionType(node) {
+            return node.types.every(member => {
+                var _a, _b;
+                return validUnionMembers.includes(member.type) ||
+                    // allows any T<..., void, ...> here, checked by checkGenericTypeArgument
+                    (member.type === experimental_utils_1.AST_NODE_TYPES.TSTypeReference &&
+                        ((_a = member.typeParameters) === null || _a === void 0 ? void 0 : _a.type) ===
+                            experimental_utils_1.AST_NODE_TYPES.TSTypeParameterInstantiation && ((_b = member.typeParameters) === null || _b === void 0 ? void 0 : _b.params.map(param => param.type).includes(experimental_utils_1.AST_NODE_TYPES.TSVoidKeyword)));
+            });
+        }
+        return {
+            TSVoidKeyword(node) {
+                var _a;
+                /* istanbul ignore next */
+                if (!((_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent)) {
+                    return;
+                }
+                // checks T<..., void, ...> against specification of allowInGenericArguments option
+                if (node.parent.type === experimental_utils_1.AST_NODE_TYPES.TSTypeParameterInstantiation &&
+                    node.parent.parent.type === experimental_utils_1.AST_NODE_TYPES.TSTypeReference) {
+                    checkGenericTypeArgument(node);
+                    return;
+                }
+                // union w/ void must contain types from validUnionMembers, or a valid generic void type
+                if (node.parent.type === experimental_utils_1.AST_NODE_TYPES.TSUnionType &&
+                    isValidUnionType(node.parent)) {
+                    return;
+                }
+                // this parameter is ok to be void.
+                if (allowAsThisParameter &&
+                    node.parent.type === experimental_utils_1.AST_NODE_TYPES.TSTypeAnnotation &&
+                    node.parent.parent.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                    node.parent.parent.name === 'this') {
+                    return;
+                }
+                // default cases
+                if (validParents.includes(node.parent.type) &&
+                    !invalidGrandParents.includes(node.parent.parent.type)) {
+                    return;
+                }
+                context.report({
+                    messageId: allowInGenericTypeArguments && allowAsThisParameter
+                        ? 'invalidVoidNotReturnOrThisParamOrGeneric'
+                        : allowInGenericTypeArguments
+                            ? 'invalidVoidNotReturnOrGeneric'
+                            : allowAsThisParameter
+                                ? 'invalidVoidNotReturnOrThisParam'
+                                : 'invalidVoidNotReturn',
+                    node,
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-invalid-void-type.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-void-type.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-void-type.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..bd9e5aebe2c42e94754cd23ccd19492caeb38757
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-void-type.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-invalid-void-type.js","sourceRoot":"","sources":["../../src/rules/no-invalid-void-type.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loop-func.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loop-func.js
new file mode 100644
index 0000000000000000000000000000000000000000..50e42bb2b0ae97684222d422cc2f04ae2046cbff
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loop-func.js
@@ -0,0 +1,196 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const no_loop_func_1 = __importDefault(require("eslint/lib/rules/no-loop-func"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-loop-func',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow function declarations that contain unsafe references inside loop statements',
+            category: 'Best Practices',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        schema: [],
+        messages: (_a = no_loop_func_1.default === null || no_loop_func_1.default === void 0 ? void 0 : no_loop_func_1.default.meta.messages) !== null && _a !== void 0 ? _a : {
+            unsafeRefs: 'Function declared in a loop contains unsafe references to variable(s) {{ varNames }}.',
+        },
+    },
+    defaultOptions: [],
+    create(context) {
+        /**
+         * Reports functions which match the following condition:
+         * - has a loop node in ancestors.
+         * - has any references which refers to an unsafe variable.
+         *
+         * @param node The AST node to check.
+         * @returns Whether or not the node is within a loop.
+         */
+        function checkForLoops(node) {
+            const loopNode = getContainingLoopNode(node);
+            if (!loopNode) {
+                return;
+            }
+            const references = context.getScope().through;
+            const unsafeRefs = references
+                .filter(r => !isSafe(loopNode, r))
+                .map(r => r.identifier.name);
+            if (unsafeRefs.length > 0) {
+                context.report({
+                    node,
+                    messageId: 'unsafeRefs',
+                    data: { varNames: `'${unsafeRefs.join("', '")}'` },
+                });
+            }
+        }
+        return {
+            ArrowFunctionExpression: checkForLoops,
+            FunctionExpression: checkForLoops,
+            FunctionDeclaration: checkForLoops,
+        };
+    },
+});
+/**
+ * Gets the containing loop node of a specified node.
+ *
+ * We don't need to check nested functions, so this ignores those.
+ * `Scope.through` contains references of nested functions.
+ *
+ * @param node An AST node to get.
+ * @returns The containing loop node of the specified node, or `null`.
+ */
+function getContainingLoopNode(node) {
+    for (let currentNode = node; currentNode.parent; currentNode = currentNode.parent) {
+        const parent = currentNode.parent;
+        switch (parent.type) {
+            case experimental_utils_1.AST_NODE_TYPES.WhileStatement:
+            case experimental_utils_1.AST_NODE_TYPES.DoWhileStatement:
+                return parent;
+            case experimental_utils_1.AST_NODE_TYPES.ForStatement:
+                // `init` is outside of the loop.
+                if (parent.init !== currentNode) {
+                    return parent;
+                }
+                break;
+            case experimental_utils_1.AST_NODE_TYPES.ForInStatement:
+            case experimental_utils_1.AST_NODE_TYPES.ForOfStatement:
+                // `right` is outside of the loop.
+                if (parent.right !== currentNode) {
+                    return parent;
+                }
+                break;
+            case experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression:
+            case experimental_utils_1.AST_NODE_TYPES.FunctionExpression:
+            case experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration:
+                // We don't need to check nested functions.
+                return null;
+            default:
+                break;
+        }
+    }
+    return null;
+}
+/**
+ * Gets the containing loop node of a given node.
+ * If the loop was nested, this returns the most outer loop.
+ * @param node A node to get. This is a loop node.
+ * @param excludedNode A node that the result node should not include.
+ * @returns The most outer loop node.
+ */
+function getTopLoopNode(node, excludedNode) {
+    const border = excludedNode ? excludedNode.range[1] : 0;
+    let retv = node;
+    let containingLoopNode = node;
+    while (containingLoopNode && containingLoopNode.range[0] >= border) {
+        retv = containingLoopNode;
+        containingLoopNode = getContainingLoopNode(containingLoopNode);
+    }
+    return retv;
+}
+/**
+ * Checks whether a given reference which refers to an upper scope's variable is
+ * safe or not.
+ * @param loopNode A containing loop node.
+ * @param reference A reference to check.
+ * @returns `true` if the reference is safe or not.
+ */
+function isSafe(loopNode, reference) {
+    var _a;
+    const variable = reference.resolved;
+    const definition = variable === null || variable === void 0 ? void 0 : variable.defs[0];
+    const declaration = definition === null || definition === void 0 ? void 0 : definition.parent;
+    const kind = (declaration === null || declaration === void 0 ? void 0 : declaration.type) === experimental_utils_1.AST_NODE_TYPES.VariableDeclaration
+        ? declaration.kind
+        : '';
+    // type references are all safe
+    // this only really matters for global types that haven't been configured
+    if (reference.isTypeReference) {
+        return true;
+    }
+    // Variables which are declared by `const` is safe.
+    if (kind === 'const') {
+        return true;
+    }
+    /*
+     * Variables which are declared by `let` in the loop is safe.
+     * It's a different instance from the next loop step's.
+     */
+    if (kind === 'let' &&
+        declaration &&
+        declaration.range[0] > loopNode.range[0] &&
+        declaration.range[1] < loopNode.range[1]) {
+        return true;
+    }
+    /*
+     * WriteReferences which exist after this border are unsafe because those
+     * can modify the variable.
+     */
+    const border = getTopLoopNode(loopNode, kind === 'let' ? declaration : null)
+        .range[0];
+    /**
+     * Checks whether a given reference is safe or not.
+     * The reference is every reference of the upper scope's variable we are
+     * looking now.
+     *
+     * It's safe if the reference matches one of the following condition.
+     * - is readonly.
+     * - doesn't exist inside a local function and after the border.
+     *
+     * @param upperRef A reference to check.
+     * @returns `true` if the reference is safe.
+     */
+    function isSafeReference(upperRef) {
+        var _a;
+        const id = upperRef.identifier;
+        return (!upperRef.isWrite() ||
+            (((_a = variable === null || variable === void 0 ? void 0 : variable.scope) === null || _a === void 0 ? void 0 : _a.variableScope) === upperRef.from.variableScope &&
+                id.range[0] < border));
+    }
+    return (_a = variable === null || variable === void 0 ? void 0 : variable.references.every(isSafeReference)) !== null && _a !== void 0 ? _a : false;
+}
+//# sourceMappingURL=no-loop-func.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loop-func.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loop-func.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..45c6496cd72164e1e2d719add4c7b01c5bf53065
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loop-func.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-loop-func.js","sourceRoot":"","sources":["../../src/rules/no-loop-func.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loss-of-precision.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loss-of-precision.js
new file mode 100644
index 0000000000000000000000000000000000000000..154caa18283f1adbce3f486b34de9cc1db0dd925
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loss-of-precision.js
@@ -0,0 +1,63 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+const util = __importStar(require("../util"));
+const baseRule = (() => {
+    try {
+        return require('eslint/lib/rules/no-loss-of-precision');
+    }
+    catch (_a) {
+        /* istanbul ignore next */
+        return null;
+    }
+})();
+exports.default = util.createRule({
+    name: 'no-loss-of-precision',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallow literal numbers that lose precision',
+            category: 'Possible Errors',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        schema: [],
+        messages: (_a = baseRule === null || baseRule === void 0 ? void 0 : baseRule.meta.messages) !== null && _a !== void 0 ? _a : { noLossOfPrecision: '' },
+    },
+    defaultOptions: [],
+    create(context) {
+        /* istanbul ignore if */ if (baseRule === null) {
+            throw new Error('@typescript-eslint/no-loss-of-precision requires at least ESLint v7.1.0');
+        }
+        // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
+        const rules = baseRule.create(context);
+        function isSeperatedNumeric(node) {
+            return typeof node.value === 'number' && node.raw.includes('_');
+        }
+        return {
+            Literal(node) {
+                rules.Literal(Object.assign(Object.assign({}, node), { raw: isSeperatedNumeric(node) ? node.raw.replace(/_/g, '') : node.raw }));
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-loss-of-precision.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loss-of-precision.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loss-of-precision.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..ad268ed9e6cd44d74ac577a5a59a71e15d15593e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loss-of-precision.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-loss-of-precision.js","sourceRoot":"","sources":["../../src/rules/no-loss-of-precision.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAEA,8CAAgC;AAEhC,MAAM,QAAQ,GAAG,CAAC,GAA2B,EAAE;IAC7C,IAAI;QACF,OAAO,OAAO,CAAC,uCAAuC,CAAC,CAAC;KACzD;IAAC,WAAM;QACN,0BAA0B;QAC1B,OAAO,IAAI,CAAC;KACb;AACH,CAAC,CAAC,EAAE,CAAC;AAKL,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,sBAAsB;IAC5B,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,8CAA8C;YAC3D,QAAQ,EAAE,iBAAiB;YAC3B,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,IAAI;SACtB;QACD,MAAM,EAAE,EAAE;QACV,QAAQ,QAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,QAAQ,mCAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE;KAC/D;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,wBAAwB,CAAC,IAAI,QAAQ,KAAK,IAAI,EAAE;YAC9C,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;SACH;QAED,4EAA4E;QAC5E,MAAM,KAAK,GAAG,QAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAExC,SAAS,kBAAkB,CAAC,IAAsB;YAChD,OAAO,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClE,CAAC;QACD,OAAO;YACL,OAAO,CAAC,IAAsB;gBAC5B,KAAK,CAAC,OAAO,iCACR,IAAI,KACP,GAAG,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IACrE,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-magic-numbers.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-magic-numbers.js
new file mode 100644
index 0000000000000000000000000000000000000000..f413422e5c40371a7c4a2176cbcf211653dc1a36
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-magic-numbers.js
@@ -0,0 +1,205 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const no_magic_numbers_1 = __importDefault(require("eslint/lib/rules/no-magic-numbers"));
+const util = __importStar(require("../util"));
+const baseRuleSchema = Array.isArray(no_magic_numbers_1.default.meta.schema)
+    ? no_magic_numbers_1.default.meta.schema[0]
+    : no_magic_numbers_1.default.meta.schema;
+exports.default = util.createRule({
+    name: 'no-magic-numbers',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow magic numbers',
+            category: 'Best Practices',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        // Extend base schema with additional property to ignore TS numeric literal types
+        schema: [
+            Object.assign(Object.assign({}, baseRuleSchema), { properties: Object.assign(Object.assign({}, baseRuleSchema.properties), { ignoreNumericLiteralTypes: {
+                        type: 'boolean',
+                    }, ignoreEnums: {
+                        type: 'boolean',
+                    }, ignoreReadonlyClassProperties: {
+                        type: 'boolean',
+                    } }) }),
+        ],
+        messages: (_a = no_magic_numbers_1.default.meta.messages) !== null && _a !== void 0 ? _a : {
+            useConst: "Number constants declarations must use 'const'.",
+            noMagic: 'No magic number: {{raw}}.',
+        },
+    },
+    defaultOptions: [
+        {
+            ignore: [],
+            ignoreArrayIndexes: false,
+            enforceConst: false,
+            detectObjects: false,
+            ignoreNumericLiteralTypes: false,
+            ignoreEnums: false,
+            ignoreReadonlyClassProperties: false,
+        },
+    ],
+    create(context, [options]) {
+        const rules = no_magic_numbers_1.default.create(context);
+        return {
+            Literal(node) {
+                var _a;
+                // Check if the node is a TypeScript enum declaration
+                if (options.ignoreEnums && isParentTSEnumDeclaration(node)) {
+                    return;
+                }
+                // Check TypeScript specific nodes for Numeric Literal
+                if (options.ignoreNumericLiteralTypes &&
+                    typeof node.value === 'number' &&
+                    isTSNumericLiteralType(node)) {
+                    return;
+                }
+                // Check if the node is a readonly class property
+                if (typeof node.value === 'number' &&
+                    isParentTSReadonlyClassProperty(node)) {
+                    if (options.ignoreReadonlyClassProperties) {
+                        return;
+                    }
+                    let fullNumberNode = node;
+                    let raw = node.raw;
+                    if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.UnaryExpression &&
+                        // the base rule only shows the operator for negative numbers
+                        // https://github.com/eslint/eslint/blob/9dfc8501fb1956c90dc11e6377b4cb38a6bea65d/lib/rules/no-magic-numbers.js#L126
+                        node.parent.operator === '-') {
+                        fullNumberNode = node.parent;
+                        raw = `${node.parent.operator}${node.raw}`;
+                    }
+                    context.report({
+                        messageId: 'noMagic',
+                        node: fullNumberNode,
+                        data: { raw },
+                    });
+                    return;
+                }
+                // Let the base rule deal with the rest
+                rules.Literal(node);
+            },
+        };
+    },
+});
+/**
+ * Gets the true parent of the literal, handling prefixed numbers (-1 / +1)
+ */
+function getLiteralParent(node) {
+    var _a;
+    if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.UnaryExpression &&
+        ['-', '+'].includes(node.parent.operator)) {
+        return node.parent.parent;
+    }
+    return node.parent;
+}
+/**
+ * Checks if the node grandparent is a Typescript type alias declaration
+ * @param node the node to be validated.
+ * @returns true if the node grandparent is a Typescript type alias declaration
+ * @private
+ */
+function isGrandparentTSTypeAliasDeclaration(node) {
+    var _a, _b;
+    return ((_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.type) === experimental_utils_1.AST_NODE_TYPES.TSTypeAliasDeclaration;
+}
+/**
+ * Checks if the node grandparent is a Typescript union type and its parent is a type alias declaration
+ * @param node the node to be validated.
+ * @returns true if the node grandparent is a Typescript union type and its parent is a type alias declaration
+ * @private
+ */
+function isGrandparentTSUnionType(node) {
+    var _a, _b;
+    if (((_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.type) === experimental_utils_1.AST_NODE_TYPES.TSUnionType) {
+        return isGrandparentTSTypeAliasDeclaration(node.parent);
+    }
+    return false;
+}
+/**
+ * Checks if the node parent is a Typescript enum member
+ * @param node the node to be validated.
+ * @returns true if the node parent is a Typescript enum member
+ * @private
+ */
+function isParentTSEnumDeclaration(node) {
+    const parent = getLiteralParent(node);
+    return (parent === null || parent === void 0 ? void 0 : parent.type) === experimental_utils_1.AST_NODE_TYPES.TSEnumMember;
+}
+/**
+ * Checks if the node parent is a Typescript literal type
+ * @param node the node to be validated.
+ * @returns true if the node parent is a Typescript literal type
+ * @private
+ */
+function isParentTSLiteralType(node) {
+    var _a;
+    return ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.TSLiteralType;
+}
+/**
+ * Checks if the node is a valid TypeScript numeric literal type.
+ * @param node the node to be validated.
+ * @returns true if the node is a TypeScript numeric literal type.
+ * @private
+ */
+function isTSNumericLiteralType(node) {
+    var _a;
+    // For negative numbers, use the parent node
+    if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.UnaryExpression &&
+        node.parent.operator === '-') {
+        node = node.parent;
+    }
+    // If the parent node is not a TSLiteralType, early return
+    if (!isParentTSLiteralType(node)) {
+        return false;
+    }
+    // If the grandparent is a TSTypeAliasDeclaration, ignore
+    if (isGrandparentTSTypeAliasDeclaration(node)) {
+        return true;
+    }
+    // If the grandparent is a TSUnionType and it's parent is a TSTypeAliasDeclaration, ignore
+    if (isGrandparentTSUnionType(node)) {
+        return true;
+    }
+    return false;
+}
+/**
+ * Checks if the node parent is a readonly class property
+ * @param node the node to be validated.
+ * @returns true if the node parent is a readonly class property
+ * @private
+ */
+function isParentTSReadonlyClassProperty(node) {
+    const parent = getLiteralParent(node);
+    if ((parent === null || parent === void 0 ? void 0 : parent.type) === experimental_utils_1.AST_NODE_TYPES.ClassProperty && parent.readonly) {
+        return true;
+    }
+    return false;
+}
+//# sourceMappingURL=no-magic-numbers.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-magic-numbers.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-magic-numbers.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..98542b9b7ab7c5514fe22d935e0d53752ab3883a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-magic-numbers.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-magic-numbers.js","sourceRoot":"","sources":["../../src/rules/no-magic-numbers.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-new.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-new.js
new file mode 100644
index 0000000000000000000000000000000000000000..3a310defb66ab0d28f947b2882382a93ca22b31b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-new.js
@@ -0,0 +1,103 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-misused-new',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Enforce valid definition of `new` and `constructor`',
+            category: 'Best Practices',
+            recommended: 'error',
+        },
+        schema: [],
+        messages: {
+            errorMessageInterface: 'Interfaces cannot be constructed, only classes.',
+            errorMessageClass: 'Class cannot have method named `new`.',
+        },
+    },
+    defaultOptions: [],
+    create(context) {
+        /**
+         * @param node type to be inspected.
+         * @returns name of simple type or null
+         */
+        function getTypeReferenceName(node) {
+            if (node) {
+                switch (node.type) {
+                    case experimental_utils_1.AST_NODE_TYPES.TSTypeAnnotation:
+                        return getTypeReferenceName(node.typeAnnotation);
+                    case experimental_utils_1.AST_NODE_TYPES.TSTypeReference:
+                        return getTypeReferenceName(node.typeName);
+                    case experimental_utils_1.AST_NODE_TYPES.Identifier:
+                        return node.name;
+                    default:
+                        break;
+                }
+            }
+            return null;
+        }
+        /**
+         * @param parent parent node.
+         * @param returnType type to be compared
+         */
+        function isMatchingParentType(parent, returnType) {
+            if (parent &&
+                'id' in parent &&
+                parent.id &&
+                parent.id.type === experimental_utils_1.AST_NODE_TYPES.Identifier) {
+                return getTypeReferenceName(returnType) === parent.id.name;
+            }
+            return false;
+        }
+        return {
+            'TSInterfaceBody > TSConstructSignatureDeclaration'(node) {
+                if (isMatchingParentType(node.parent.parent, node.returnType)) {
+                    // constructor
+                    context.report({
+                        node,
+                        messageId: 'errorMessageInterface',
+                    });
+                }
+            },
+            "TSMethodSignature[key.name='constructor']"(node) {
+                context.report({
+                    node,
+                    messageId: 'errorMessageInterface',
+                });
+            },
+            "ClassBody > MethodDefinition[key.name='new']"(node) {
+                if (node.value.type === experimental_utils_1.AST_NODE_TYPES.TSEmptyBodyFunctionExpression) {
+                    if (node.parent &&
+                        isMatchingParentType(node.parent.parent, node.value.returnType)) {
+                        context.report({
+                            node,
+                            messageId: 'errorMessageClass',
+                        });
+                    }
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-misused-new.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-new.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-new.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..36e0d3469818215b5ed50e9c4c8d8a3aa853985f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-new.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-misused-new.js","sourceRoot":"","sources":["../../src/rules/no-misused-new.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,8CAAgC;AAEhC,kBAAe,IAAI,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,qDAAqD;YAClE,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,OAAO;SACrB;QACD,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE;YACR,qBAAqB,EAAE,iDAAiD;YACxE,iBAAiB,EAAE,uCAAuC;SAC3D;KACF;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ;;;WAGG;QACH,SAAS,oBAAoB,CAC3B,IAIa;YAEb,IAAI,IAAI,EAAE;gBACR,QAAQ,IAAI,CAAC,IAAI,EAAE;oBACjB,KAAK,mCAAc,CAAC,gBAAgB;wBAClC,OAAO,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBACnD,KAAK,mCAAc,CAAC,eAAe;wBACjC,OAAO,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC7C,KAAK,mCAAc,CAAC,UAAU;wBAC5B,OAAO,IAAI,CAAC,IAAI,CAAC;oBACnB;wBACE,MAAM;iBACT;aACF;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED;;;WAGG;QACH,SAAS,oBAAoB,CAC3B,MAAiC,EACjC,UAAiD;YAEjD,IACE,MAAM;gBACN,IAAI,IAAI,MAAM;gBACd,MAAM,CAAC,EAAE;gBACT,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,mCAAc,CAAC,UAAU,EAC5C;gBACA,OAAO,oBAAoB,CAAC,UAAU,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;aAC5D;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO;YACL,mDAAmD,CACjD,IAA8C;gBAE9C,IACE,oBAAoB,CAClB,IAAI,CAAC,MAAO,CAAC,MAAyC,EACtD,IAAI,CAAC,UAAU,CAChB,EACD;oBACA,cAAc;oBACd,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,uBAAuB;qBACnC,CAAC,CAAC;iBACJ;YACH,CAAC;YACD,2CAA2C,CACzC,IAAgC;gBAEhC,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,uBAAuB;iBACnC,CAAC,CAAC;YACL,CAAC;YACD,8CAA8C,CAC5C,IAA+B;gBAE/B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,mCAAc,CAAC,6BAA6B,EAAE;oBACpE,IACE,IAAI,CAAC,MAAM;wBACX,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAC/D;wBACA,OAAO,CAAC,MAAM,CAAC;4BACb,IAAI;4BACJ,SAAS,EAAE,mBAAmB;yBAC/B,CAAC,CAAC;qBACJ;iBACF;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-promises.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-promises.js
new file mode 100644
index 0000000000000000000000000000000000000000..9d652a935e21006379f17f79ed3cd06c58bcf961
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-promises.js
@@ -0,0 +1,237 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const tsutils = __importStar(require("tsutils"));
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-misused-promises',
+    meta: {
+        docs: {
+            description: 'Avoid using promises in places not designed to handle them',
+            category: 'Best Practices',
+            recommended: 'error',
+            requiresTypeChecking: true,
+        },
+        messages: {
+            voidReturn: 'Promise returned in function argument where a void return was expected.',
+            conditional: 'Expected non-Promise value in a boolean conditional.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    checksConditionals: {
+                        type: 'boolean',
+                    },
+                    checksVoidReturn: {
+                        type: 'boolean',
+                    },
+                },
+            },
+        ],
+        type: 'problem',
+    },
+    defaultOptions: [
+        {
+            checksConditionals: true,
+            checksVoidReturn: true,
+        },
+    ],
+    create(context, [{ checksConditionals, checksVoidReturn }]) {
+        const parserServices = util.getParserServices(context);
+        const checker = parserServices.program.getTypeChecker();
+        const checkedNodes = new Set();
+        const conditionalChecks = {
+            ConditionalExpression: checkTestConditional,
+            DoWhileStatement: checkTestConditional,
+            ForStatement: checkTestConditional,
+            IfStatement: checkTestConditional,
+            LogicalExpression: checkConditional,
+            'UnaryExpression[operator="!"]'(node) {
+                checkConditional(node.argument, true);
+            },
+            WhileStatement: checkTestConditional,
+        };
+        const voidReturnChecks = {
+            CallExpression: checkArguments,
+            NewExpression: checkArguments,
+        };
+        function checkTestConditional(node) {
+            if (node.test) {
+                checkConditional(node.test, true);
+            }
+        }
+        /**
+         * This function analyzes the type of a node and checks if it is a Promise in a boolean conditional.
+         * It uses recursion when checking nested logical operators.
+         * @param node The AST node to check.
+         * @param isTestExpr Whether the node is a descendant of a test expression.
+         */
+        function checkConditional(node, isTestExpr = false) {
+            // prevent checking the same node multiple times
+            if (checkedNodes.has(node)) {
+                return;
+            }
+            checkedNodes.add(node);
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.LogicalExpression) {
+                // ignore the left operand for nullish coalescing expressions not in a context of a test expression
+                if (node.operator !== '??' || isTestExpr) {
+                    checkConditional(node.left, isTestExpr);
+                }
+                // we ignore the right operand when not in a context of a test expression
+                if (isTestExpr) {
+                    checkConditional(node.right, isTestExpr);
+                }
+                return;
+            }
+            const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+            if (isAlwaysThenable(checker, tsNode)) {
+                context.report({
+                    messageId: 'conditional',
+                    node,
+                });
+            }
+        }
+        function checkArguments(node) {
+            const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+            const voidParams = voidFunctionParams(checker, tsNode);
+            if (voidParams.size === 0) {
+                return;
+            }
+            for (const [index, argument] of node.arguments.entries()) {
+                if (!voidParams.has(index)) {
+                    continue;
+                }
+                const tsNode = parserServices.esTreeNodeToTSNodeMap.get(argument);
+                if (returnsThenable(checker, tsNode)) {
+                    context.report({
+                        messageId: 'voidReturn',
+                        node: argument,
+                    });
+                }
+            }
+        }
+        return Object.assign(Object.assign({}, (checksConditionals ? conditionalChecks : {})), (checksVoidReturn ? voidReturnChecks : {}));
+    },
+});
+// Variation on the thenable check which requires all forms of the type (read:
+// alternates in a union) to be thenable. Otherwise, you might be trying to
+// check if something is defined or undefined and get caught because one of the
+// branches is thenable.
+function isAlwaysThenable(checker, node) {
+    const type = checker.getTypeAtLocation(node);
+    for (const subType of tsutils.unionTypeParts(checker.getApparentType(type))) {
+        const thenProp = subType.getProperty('then');
+        // If one of the alternates has no then property, it is not thenable in all
+        // cases.
+        if (thenProp === undefined) {
+            return false;
+        }
+        // We walk through each variation of the then property. Since we know it
+        // exists at this point, we just need at least one of the alternates to
+        // be of the right form to consider it thenable.
+        const thenType = checker.getTypeOfSymbolAtLocation(thenProp, node);
+        let hasThenableSignature = false;
+        for (const subType of tsutils.unionTypeParts(thenType)) {
+            for (const signature of subType.getCallSignatures()) {
+                if (signature.parameters.length !== 0 &&
+                    isFunctionParam(checker, signature.parameters[0], node)) {
+                    hasThenableSignature = true;
+                    break;
+                }
+            }
+            // We only need to find one variant of the then property that has a
+            // function signature for it to be thenable.
+            if (hasThenableSignature) {
+                break;
+            }
+        }
+        // If no flavors of the then property are thenable, we don't consider the
+        // overall type to be thenable
+        if (!hasThenableSignature) {
+            return false;
+        }
+    }
+    // If all variants are considered thenable (i.e. haven't returned false), we
+    // consider the overall type thenable
+    return true;
+}
+function isFunctionParam(checker, param, node) {
+    const type = checker.getApparentType(checker.getTypeOfSymbolAtLocation(param, node));
+    for (const subType of tsutils.unionTypeParts(type)) {
+        if (subType.getCallSignatures().length !== 0) {
+            return true;
+        }
+    }
+    return false;
+}
+// Get the positions of parameters which are void functions (and not also
+// thenable functions). These are the candidates for the void-return check at
+// the current call site.
+function voidFunctionParams(checker, node) {
+    const voidReturnIndices = new Set();
+    const thenableReturnIndices = new Set();
+    const type = checker.getTypeAtLocation(node.expression);
+    for (const subType of tsutils.unionTypeParts(type)) {
+        // Standard function calls and `new` have two different types of signatures
+        const signatures = ts.isCallExpression(node)
+            ? subType.getCallSignatures()
+            : subType.getConstructSignatures();
+        for (const signature of signatures) {
+            for (const [index, parameter] of signature.parameters.entries()) {
+                const type = checker.getTypeOfSymbolAtLocation(parameter, node.expression);
+                for (const subType of tsutils.unionTypeParts(type)) {
+                    for (const signature of subType.getCallSignatures()) {
+                        const returnType = signature.getReturnType();
+                        if (tsutils.isTypeFlagSet(returnType, ts.TypeFlags.Void)) {
+                            voidReturnIndices.add(index);
+                        }
+                        else if (tsutils.isThenableType(checker, node.expression, returnType)) {
+                            thenableReturnIndices.add(index);
+                        }
+                    }
+                }
+            }
+        }
+    }
+    // If a certain positional argument accepts both thenable and void returns,
+    // a promise-returning function is valid
+    for (const thenable of thenableReturnIndices) {
+        voidReturnIndices.delete(thenable);
+    }
+    return voidReturnIndices;
+}
+// Returns true if the expression is a function that returns a thenable
+function returnsThenable(checker, node) {
+    const type = checker.getApparentType(checker.getTypeAtLocation(node));
+    for (const subType of tsutils.unionTypeParts(type)) {
+        for (const signature of subType.getCallSignatures()) {
+            const returnType = signature.getReturnType();
+            if (tsutils.isThenableType(checker, node, returnType)) {
+                return true;
+            }
+        }
+    }
+    return false;
+}
+//# sourceMappingURL=no-misused-promises.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-promises.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-promises.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..052135c86e29c52b030c3b8cf6c9b87502c1b71c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-promises.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-misused-promises.js","sourceRoot":"","sources":["../../src/rules/no-misused-promises.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-namespace.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-namespace.js
new file mode 100644
index 0000000000000000000000000000000000000000..cfd3d374b630748535e5a641020d0ce69d6e0917
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-namespace.js
@@ -0,0 +1,81 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-namespace',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow the use of custom TypeScript modules and namespaces',
+            category: 'Best Practices',
+            recommended: 'error',
+        },
+        messages: {
+            moduleSyntaxIsPreferred: 'ES2015 module syntax is preferred over custom TypeScript modules and namespaces.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    allowDeclarations: {
+                        type: 'boolean',
+                    },
+                    allowDefinitionFiles: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            allowDeclarations: false,
+            allowDefinitionFiles: true,
+        },
+    ],
+    create(context, [{ allowDeclarations, allowDefinitionFiles }]) {
+        const filename = context.getFilename();
+        function isDeclaration(node) {
+            var _a;
+            return (node.declare === true ||
+                (((_a = node.parent.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration &&
+                    isDeclaration(node.parent.parent)));
+        }
+        return {
+            "TSModuleDeclaration[global!=true][id.type='Identifier']"(node) {
+                if ((node.parent &&
+                    node.parent.type === experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration) ||
+                    (allowDefinitionFiles && util.isDefinitionFile(filename)) ||
+                    (allowDeclarations && isDeclaration(node))) {
+                    return;
+                }
+                context.report({
+                    node,
+                    messageId: 'moduleSyntaxIsPreferred',
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-namespace.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-namespace.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-namespace.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..db4bd761b1f82d85248649c7a0132501a991f48b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-namespace.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-namespace.js","sourceRoot":"","sources":["../../src/rules/no-namespace.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,8CAAgC;AAUhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EACT,8DAA8D;YAChE,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,OAAO;SACrB;QACD,QAAQ,EAAE;YACR,uBAAuB,EACrB,kFAAkF;SACrF;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,iBAAiB,EAAE;wBACjB,IAAI,EAAE,SAAS;qBAChB;oBACD,oBAAoB,EAAE;wBACpB,IAAI,EAAE,SAAS;qBAChB;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;SACF;KACF;IACD,cAAc,EAAE;QACd;YACE,iBAAiB,EAAE,KAAK;YACxB,oBAAoB,EAAE,IAAI;SAC3B;KACF;IACD,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;QAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAEvC,SAAS,aAAa,CAAC,IAAkC;;YACvD,OAAO,CACL,IAAI,CAAC,OAAO,KAAK,IAAI;gBACrB,CAAC,OAAA,IAAI,CAAC,MAAO,CAAC,MAAM,0CAAE,IAAI,MAAK,mCAAc,CAAC,mBAAmB;oBAC/D,aAAa,CAAC,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,CACtC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,yDAAyD,CACvD,IAAkC;gBAElC,IACE,CAAC,IAAI,CAAC,MAAM;oBACV,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,mCAAc,CAAC,mBAAmB,CAAC;oBAC1D,CAAC,oBAAoB,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;oBACzD,CAAC,iBAAiB,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,EAC1C;oBACA,OAAO;iBACR;gBAED,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,yBAAyB;iBACrC,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-asserted-optional-chain.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-asserted-optional-chain.js
new file mode 100644
index 0000000000000000000000000000000000000000..e86f3ce76a376a81a0ab3df2a6a68f48e81b7f54
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-asserted-optional-chain.js
@@ -0,0 +1,146 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const ts = __importStar(require("typescript"));
+const semver = __importStar(require("semver"));
+const util = __importStar(require("../util"));
+const is3dot9 = semver.satisfies(ts.version, `>= 3.9.0 || >= 3.9.1-rc || >= 3.9.0-beta`, {
+    includePrerelease: true,
+});
+exports.default = util.createRule({
+    name: 'no-non-null-asserted-optional-chain',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallows using a non-null assertion after an optional chain expression',
+            category: 'Possible Errors',
+            recommended: 'error',
+            suggestion: true,
+        },
+        messages: {
+            noNonNullOptionalChain: 'Optional chain expressions can return undefined by design - using a non-null assertion is unsafe and wrong.',
+            suggestRemovingNonNull: 'You should remove the non-null assertion.',
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        // TS3.9 made a breaking change to how non-null works with optional chains.
+        // Pre-3.9,  `x?.y!.z` means `(x?.y).z` - i.e. it essentially scrubbed the optionality from the chain
+        // Post-3.9, `x?.y!.z` means `x?.y!.z`  - i.e. it just asserts that the property `y` is non-null, not the result of `x?.y`.
+        // This means that for > 3.9, x?.y!.z is valid!
+        //
+        // NOTE: these cases are still invalid for 3.9:
+        // - x?.y.z!
+        // - (x?.y)!.z
+        const baseSelectors = {
+            // non-nulling a wrapped chain will scrub all nulls introduced by the chain
+            // (x?.y)!
+            // (x?.())!
+            'TSNonNullExpression > ChainExpression'(node) {
+                // selector guarantees this assertion
+                const parent = node.parent;
+                context.report({
+                    node,
+                    messageId: 'noNonNullOptionalChain',
+                    // use a suggestion instead of a fixer, because this can obviously break type checks
+                    suggest: [
+                        {
+                            messageId: 'suggestRemovingNonNull',
+                            fix(fixer) {
+                                return fixer.removeRange([
+                                    parent.range[1] - 1,
+                                    parent.range[1],
+                                ]);
+                            },
+                        },
+                    ],
+                });
+            },
+            // non-nulling at the end of a chain will scrub all nulls introduced by the chain
+            // x?.y!
+            // x?.()!
+            'ChainExpression > TSNonNullExpression'(node) {
+                context.report({
+                    node,
+                    messageId: 'noNonNullOptionalChain',
+                    // use a suggestion instead of a fixer, because this can obviously break type checks
+                    suggest: [
+                        {
+                            messageId: 'suggestRemovingNonNull',
+                            fix(fixer) {
+                                return fixer.removeRange([node.range[1] - 1, node.range[1]]);
+                            },
+                        },
+                    ],
+                });
+            },
+        };
+        if (is3dot9) {
+            return baseSelectors;
+        }
+        return Object.assign(Object.assign({}, baseSelectors), { [[
+                // > :not(ChainExpression) because that case is handled by a previous selector
+                'MemberExpression > TSNonNullExpression.object > :not(ChainExpression)',
+                'CallExpression > TSNonNullExpression.callee > :not(ChainExpression)',
+            ].join(', ')](child) {
+                // selector guarantees this assertion
+                const node = child.parent;
+                let current = child;
+                while (current) {
+                    switch (current.type) {
+                        case experimental_utils_1.AST_NODE_TYPES.MemberExpression:
+                            if (current.optional) {
+                                // found an optional chain! stop traversing
+                                break;
+                            }
+                            current = current.object;
+                            continue;
+                        case experimental_utils_1.AST_NODE_TYPES.CallExpression:
+                            if (current.optional) {
+                                // found an optional chain! stop traversing
+                                break;
+                            }
+                            current = current.callee;
+                            continue;
+                        default:
+                            // something that's not a ChainElement, which means this is not an optional chain we want to check
+                            return;
+                    }
+                }
+                context.report({
+                    node,
+                    messageId: 'noNonNullOptionalChain',
+                    // use a suggestion instead of a fixer, because this can obviously break type checks
+                    suggest: [
+                        {
+                            messageId: 'suggestRemovingNonNull',
+                            fix(fixer) {
+                                return fixer.removeRange([node.range[1] - 1, node.range[1]]);
+                            },
+                        },
+                    ],
+                });
+            } });
+    },
+});
+//# sourceMappingURL=no-non-null-asserted-optional-chain.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-asserted-optional-chain.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-asserted-optional-chain.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..21f4056042cb3fadb3433813988c6d914fbc2553
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-asserted-optional-chain.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-non-null-asserted-optional-chain.js","sourceRoot":"","sources":["../../src/rules/no-non-null-asserted-optional-chain.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-assertion.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-assertion.js
new file mode 100644
index 0000000000000000000000000000000000000000..82ab1fdb4a28d55a438e9891c30907630b2f5146
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-assertion.js
@@ -0,0 +1,126 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-non-null-assertion',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallows non-null assertions using the `!` postfix operator',
+            category: 'Stylistic Issues',
+            recommended: 'warn',
+            suggestion: true,
+        },
+        messages: {
+            noNonNull: 'Forbidden non-null assertion.',
+            suggestOptionalChain: 'Consider using the optional chain operator `?.` instead. This operator includes runtime checks, so it is safer than the compile-only non-null assertion operator.',
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        const sourceCode = context.getSourceCode();
+        return {
+            TSNonNullExpression(node) {
+                var _a, _b;
+                const suggest = [];
+                function convertTokenToOptional(replacement) {
+                    return (fixer) => {
+                        const operator = sourceCode.getTokenAfter(node.expression, util.isNonNullAssertionPunctuator);
+                        if (operator) {
+                            return fixer.replaceText(operator, replacement);
+                        }
+                        return null;
+                    };
+                }
+                function removeToken() {
+                    return (fixer) => {
+                        const operator = sourceCode.getTokenAfter(node.expression, util.isNonNullAssertionPunctuator);
+                        if (operator) {
+                            return fixer.remove(operator);
+                        }
+                        return null;
+                    };
+                }
+                if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.MemberExpression &&
+                    node.parent.object === node) {
+                    if (!node.parent.optional) {
+                        if (node.parent.computed) {
+                            // it is x![y]?.z
+                            suggest.push({
+                                messageId: 'suggestOptionalChain',
+                                fix: convertTokenToOptional('?.'),
+                            });
+                        }
+                        else {
+                            // it is x!.y?.z
+                            suggest.push({
+                                messageId: 'suggestOptionalChain',
+                                fix: convertTokenToOptional('?'),
+                            });
+                        }
+                    }
+                    else {
+                        if (node.parent.computed) {
+                            // it is x!?.[y].z
+                            suggest.push({
+                                messageId: 'suggestOptionalChain',
+                                fix: removeToken(),
+                            });
+                        }
+                        else {
+                            // it is x!?.y.z
+                            suggest.push({
+                                messageId: 'suggestOptionalChain',
+                                fix: removeToken(),
+                            });
+                        }
+                    }
+                }
+                else if (((_b = node.parent) === null || _b === void 0 ? void 0 : _b.type) === experimental_utils_1.AST_NODE_TYPES.CallExpression &&
+                    node.parent.callee === node) {
+                    if (!node.parent.optional) {
+                        // it is x.y?.z!()
+                        suggest.push({
+                            messageId: 'suggestOptionalChain',
+                            fix: convertTokenToOptional('?.'),
+                        });
+                    }
+                    else {
+                        // it is x.y.z!?.()
+                        suggest.push({
+                            messageId: 'suggestOptionalChain',
+                            fix: removeToken(),
+                        });
+                    }
+                }
+                context.report({
+                    node,
+                    messageId: 'noNonNull',
+                    suggest,
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-non-null-assertion.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-assertion.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-assertion.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..4f1d31ddb92309bae6fe11c7cb5c9097731ce51d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-assertion.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-non-null-assertion.js","sourceRoot":"","sources":["../../src/rules/no-non-null-assertion.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,8CAAgC;AAIhC,kBAAe,IAAI,CAAC,UAAU,CAAiB;IAC7C,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,8DAA8D;YAChE,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,MAAM;YACnB,UAAU,EAAE,IAAI;SACjB;QACD,QAAQ,EAAE;YACR,SAAS,EAAE,+BAA+B;YAC1C,oBAAoB,EAClB,mKAAmK;SACtK;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO;YACL,mBAAmB,CAAC,IAAI;;gBACtB,MAAM,OAAO,GAA+C,EAAE,CAAC;gBAC/D,SAAS,sBAAsB,CAC7B,WAAuB;oBAEvB,OAAO,CAAC,KAAyB,EAA2B,EAAE;wBAC5D,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CACvC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,4BAA4B,CAClC,CAAC;wBACF,IAAI,QAAQ,EAAE;4BACZ,OAAO,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;yBACjD;wBAED,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC;gBACJ,CAAC;gBACD,SAAS,WAAW;oBAClB,OAAO,CAAC,KAAyB,EAA2B,EAAE;wBAC5D,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CACvC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,4BAA4B,CAClC,CAAC;wBACF,IAAI,QAAQ,EAAE;4BACZ,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;yBAC/B;wBAED,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC;gBACJ,CAAC;gBAED,IACE,OAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,MAAK,mCAAc,CAAC,gBAAgB;oBACrD,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,EAC3B;oBACA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;wBACzB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;4BACxB,iBAAiB;4BACjB,OAAO,CAAC,IAAI,CAAC;gCACX,SAAS,EAAE,sBAAsB;gCACjC,GAAG,EAAE,sBAAsB,CAAC,IAAI,CAAC;6BAClC,CAAC,CAAC;yBACJ;6BAAM;4BACL,gBAAgB;4BAChB,OAAO,CAAC,IAAI,CAAC;gCACX,SAAS,EAAE,sBAAsB;gCACjC,GAAG,EAAE,sBAAsB,CAAC,GAAG,CAAC;6BACjC,CAAC,CAAC;yBACJ;qBACF;yBAAM;wBACL,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;4BACxB,kBAAkB;4BAClB,OAAO,CAAC,IAAI,CAAC;gCACX,SAAS,EAAE,sBAAsB;gCACjC,GAAG,EAAE,WAAW,EAAE;6BACnB,CAAC,CAAC;yBACJ;6BAAM;4BACL,gBAAgB;4BAChB,OAAO,CAAC,IAAI,CAAC;gCACX,SAAS,EAAE,sBAAsB;gCACjC,GAAG,EAAE,WAAW,EAAE;6BACnB,CAAC,CAAC;yBACJ;qBACF;iBACF;qBAAM,IACL,OAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,MAAK,mCAAc,CAAC,cAAc;oBACnD,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,EAC3B;oBACA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;wBACzB,kBAAkB;wBAClB,OAAO,CAAC,IAAI,CAAC;4BACX,SAAS,EAAE,sBAAsB;4BACjC,GAAG,EAAE,sBAAsB,CAAC,IAAI,CAAC;yBAClC,CAAC,CAAC;qBACJ;yBAAM;wBACL,mBAAmB;wBACnB,OAAO,CAAC,IAAI,CAAC;4BACX,SAAS,EAAE,sBAAsB;4BACjC,GAAG,EAAE,WAAW,EAAE;yBACnB,CAAC,CAAC;qBACJ;iBACF;gBAED,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,WAAW;oBACtB,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-parameter-properties.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-parameter-properties.js
new file mode 100644
index 0000000000000000000000000000000000000000..7e7a10b6da0be3a1a2e393e33e5d427ccc144993
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-parameter-properties.js
@@ -0,0 +1,106 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-parameter-properties',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallow the use of parameter properties in class constructors',
+            category: 'Stylistic Issues',
+            // too opinionated to be recommended
+            recommended: false,
+        },
+        messages: {
+            noParamProp: 'Property {{parameter}} cannot be declared in the constructor.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    allows: {
+                        type: 'array',
+                        items: {
+                            enum: [
+                                'readonly',
+                                'private',
+                                'protected',
+                                'public',
+                                'private readonly',
+                                'protected readonly',
+                                'public readonly',
+                            ],
+                        },
+                        minItems: 1,
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            allows: [],
+        },
+    ],
+    create(context, [{ allows }]) {
+        /**
+         * Gets the modifiers of `node`.
+         * @param node the node to be inspected.
+         */
+        function getModifiers(node) {
+            const modifiers = [];
+            if (node.accessibility) {
+                modifiers.push(node.accessibility);
+            }
+            if (node.readonly) {
+                modifiers.push('readonly');
+            }
+            return modifiers.filter(Boolean).join(' ');
+        }
+        return {
+            TSParameterProperty(node) {
+                const modifiers = getModifiers(node);
+                if (!allows.includes(modifiers)) {
+                    // HAS to be an identifier or assignment or TSC will throw
+                    if (node.parameter.type !== experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                        node.parameter.type !== experimental_utils_1.AST_NODE_TYPES.AssignmentPattern) {
+                        return;
+                    }
+                    const name = node.parameter.type === experimental_utils_1.AST_NODE_TYPES.Identifier
+                        ? node.parameter.name
+                        : // has to be an Identifier or TSC will throw an error
+                            node.parameter.left.name;
+                    context.report({
+                        node,
+                        messageId: 'noParamProp',
+                        data: {
+                            parameter: name,
+                        },
+                    });
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-parameter-properties.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-parameter-properties.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-parameter-properties.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..3a15f4c9570a32f52033b5f590d39f99a6e47042
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-parameter-properties.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-parameter-properties.js","sourceRoot":"","sources":["../../src/rules/no-parameter-properties.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,8CAAgC;AAiBhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,yBAAyB;IAC/B,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,gEAAgE;YAClE,QAAQ,EAAE,kBAAkB;YAC5B,oCAAoC;YACpC,WAAW,EAAE,KAAK;SACnB;QACD,QAAQ,EAAE;YACR,WAAW,EACT,+DAA+D;SAClE;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,MAAM,EAAE;wBACN,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE;4BACL,IAAI,EAAE;gCACJ,UAAU;gCACV,SAAS;gCACT,WAAW;gCACX,QAAQ;gCACR,kBAAkB;gCAClB,oBAAoB;gCACpB,iBAAiB;6BAClB;yBACF;wBACD,QAAQ,EAAE,CAAC;qBACZ;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;SACF;KACF;IACD,cAAc,EAAE;QACd;YACE,MAAM,EAAE,EAAE;SACX;KACF;IACD,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B;;;WAGG;QACH,SAAS,YAAY,CAAC,IAAkC;YACtD,MAAM,SAAS,GAAe,EAAE,CAAC;YAEjC,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aACpC;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAC5B;YAED,OAAO,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAa,CAAC;QACzD,CAAC;QAED,OAAO;YACL,mBAAmB,CAAC,IAAI;gBACtB,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBAErC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;oBAC/B,0DAA0D;oBAC1D,IACE,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,mCAAc,CAAC,UAAU;wBACjD,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,mCAAc,CAAC,iBAAiB,EACxD;wBACA,OAAO;qBACR;oBAED,MAAM,IAAI,GACR,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,mCAAc,CAAC,UAAU;wBAC/C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;wBACrB,CAAC,CAAC,qDAAqD;4BACpD,IAAI,CAAC,SAAS,CAAC,IAA4B,CAAC,IAAI,CAAC;oBAExD,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,aAAa;wBACxB,IAAI,EAAE;4BACJ,SAAS,EAAE,IAAI;yBAChB;qBACF,CAAC,CAAC;iBACJ;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-redeclare.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-redeclare.js
new file mode 100644
index 0000000000000000000000000000000000000000..ccea8a95303f2989265d41f638931cd4cff11550
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-redeclare.js
@@ -0,0 +1,224 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+// https://github.com/lodash/lodash/blob/86a852fe763935bb64c12589df5391fd7d3bb14d/escapeRegExp.js
+const reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+const reHasRegExpChar = RegExp(reRegExpChar.source);
+function escapeRegExp(str) {
+    return str && reHasRegExpChar.test(str)
+        ? str.replace(reRegExpChar, '\\$&')
+        : str || '';
+}
+function getNameLocationInGlobalDirectiveComment(sourceCode, comment, name) {
+    const namePattern = new RegExp(`[\\s,]${escapeRegExp(name)}(?:$|[\\s,:])`, 'gu');
+    // To ignore the first text "global".
+    namePattern.lastIndex = comment.value.indexOf('global') + 6;
+    // Search a given variable name.
+    const match = namePattern.exec(comment.value);
+    // Convert the index to loc.
+    const start = sourceCode.getLocFromIndex(comment.range[0] + '/*'.length + (match ? match.index + 1 : 0));
+    const end = {
+        line: start.line,
+        column: start.column + (match ? name.length : 1),
+    };
+    return { start, end };
+}
+exports.default = util.createRule({
+    name: 'no-redeclare',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow variable redeclaration',
+            category: 'Best Practices',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    builtinGlobals: {
+                        type: 'boolean',
+                    },
+                    ignoreDeclarationMerge: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+        messages: {
+            redeclared: "'{{id}}' is already defined.",
+            redeclaredAsBuiltin: "'{{id}}' is already defined as a built-in global variable.",
+            redeclaredBySyntax: "'{{id}}' is already defined by a variable declaration.",
+        },
+    },
+    defaultOptions: [
+        {
+            builtinGlobals: true,
+            ignoreDeclarationMerge: true,
+        },
+    ],
+    create(context, [options]) {
+        const sourceCode = context.getSourceCode();
+        const CLASS_DECLARATION_MERGE_NODES = new Set([
+            experimental_utils_1.AST_NODE_TYPES.TSInterfaceDeclaration,
+            experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration,
+            experimental_utils_1.AST_NODE_TYPES.ClassDeclaration,
+        ]);
+        const FUNCTION_DECLARATION_MERGE_NODES = new Set([
+            experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration,
+            experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration,
+        ]);
+        function* iterateDeclarations(variable) {
+            if ((options === null || options === void 0 ? void 0 : options.builtinGlobals) &&
+                'eslintImplicitGlobalSetting' in variable &&
+                (variable.eslintImplicitGlobalSetting === 'readonly' ||
+                    variable.eslintImplicitGlobalSetting === 'writable')) {
+                yield { type: 'builtin' };
+            }
+            if ('eslintExplicitGlobalComments' in variable &&
+                variable.eslintExplicitGlobalComments) {
+                for (const comment of variable.eslintExplicitGlobalComments) {
+                    yield {
+                        type: 'comment',
+                        node: comment,
+                        loc: getNameLocationInGlobalDirectiveComment(sourceCode, comment, variable.name),
+                    };
+                }
+            }
+            const identifiers = variable.identifiers
+                .map(id => ({
+                identifier: id,
+                parent: id.parent,
+            }))
+                // ignore function declarations because TS will treat them as an overload
+                .filter(({ parent }) => parent.type !== experimental_utils_1.AST_NODE_TYPES.TSDeclareFunction);
+            if (options.ignoreDeclarationMerge && identifiers.length > 1) {
+                if (
+                // interfaces merging
+                identifiers.every(({ parent }) => parent.type === experimental_utils_1.AST_NODE_TYPES.TSInterfaceDeclaration)) {
+                    return;
+                }
+                if (
+                // namespace/module merging
+                identifiers.every(({ parent }) => parent.type === experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration)) {
+                    return;
+                }
+                if (
+                // class + interface/namespace merging
+                identifiers.every(({ parent }) => CLASS_DECLARATION_MERGE_NODES.has(parent.type))) {
+                    const classDecls = identifiers.filter(({ parent }) => parent.type === experimental_utils_1.AST_NODE_TYPES.ClassDeclaration);
+                    if (classDecls.length === 1) {
+                        // safe declaration merging
+                        return;
+                    }
+                    // there's more than one class declaration, which needs to be reported
+                    for (const { identifier } of classDecls) {
+                        yield { type: 'syntax', node: identifier, loc: identifier.loc };
+                    }
+                    return;
+                }
+                if (
+                // class + interface/namespace merging
+                identifiers.every(({ parent }) => FUNCTION_DECLARATION_MERGE_NODES.has(parent.type))) {
+                    const functionDecls = identifiers.filter(({ parent }) => parent.type === experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration);
+                    if (functionDecls.length === 1) {
+                        // safe declaration merging
+                        return;
+                    }
+                    // there's more than one class declaration, which needs to be reported
+                    for (const { identifier } of functionDecls) {
+                        yield { type: 'syntax', node: identifier, loc: identifier.loc };
+                    }
+                    return;
+                }
+            }
+            for (const { identifier } of identifiers) {
+                yield { type: 'syntax', node: identifier, loc: identifier.loc };
+            }
+        }
+        function findVariablesInScope(scope) {
+            for (const variable of scope.variables) {
+                const [declaration, ...extraDeclarations] = iterateDeclarations(variable);
+                if (extraDeclarations.length === 0) {
+                    continue;
+                }
+                /*
+                 * If the type of a declaration is different from the type of
+                 * the first declaration, it shows the location of the first
+                 * declaration.
+                 */
+                const detailMessageId = declaration.type === 'builtin'
+                    ? 'redeclaredAsBuiltin'
+                    : 'redeclaredBySyntax';
+                const data = { id: variable.name };
+                // Report extra declarations.
+                for (const { type, node, loc } of extraDeclarations) {
+                    const messageId = type === declaration.type ? 'redeclared' : detailMessageId;
+                    if (node) {
+                        context.report({ node, loc, messageId, data });
+                    }
+                    else if (loc) {
+                        context.report({ loc, messageId, data });
+                    }
+                }
+            }
+        }
+        /**
+         * Find variables in the current scope.
+         */
+        function checkForBlock(node) {
+            const scope = context.getScope();
+            /*
+             * In ES5, some node type such as `BlockStatement` doesn't have that scope.
+             * `scope.block` is a different node in such a case.
+             */
+            if (scope.block === node) {
+                findVariablesInScope(scope);
+            }
+        }
+        return {
+            Program() {
+                const scope = context.getScope();
+                findVariablesInScope(scope);
+                // Node.js or ES modules has a special scope.
+                if (scope.type === 'global' &&
+                    scope.childScopes[0] &&
+                    // The special scope's block is the Program node.
+                    scope.block === scope.childScopes[0].block) {
+                    findVariablesInScope(scope.childScopes[0]);
+                }
+            },
+            FunctionDeclaration: checkForBlock,
+            FunctionExpression: checkForBlock,
+            ArrowFunctionExpression: checkForBlock,
+            BlockStatement: checkForBlock,
+            ForStatement: checkForBlock,
+            ForInStatement: checkForBlock,
+            ForOfStatement: checkForBlock,
+            SwitchStatement: checkForBlock,
+        };
+    },
+});
+//# sourceMappingURL=no-redeclare.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-redeclare.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-redeclare.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..38aac7aa9ab237109c457eebdc726e972a3d0166
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-redeclare.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-redeclare.js","sourceRoot":"","sources":["../../src/rules/no-redeclare.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-require-imports.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-require-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..3bf5f6b1e3b35157e92ccf4d37a0e14243c10c34
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-require-imports.js
@@ -0,0 +1,55 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-require-imports',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallows invocation of `require()`',
+            category: 'Best Practices',
+            recommended: false,
+        },
+        schema: [],
+        messages: {
+            noRequireImports: 'A `require()` style import is forbidden.',
+        },
+    },
+    defaultOptions: [],
+    create(context) {
+        return {
+            'CallExpression > Identifier[name="require"]'(node) {
+                context.report({
+                    node: node.parent,
+                    messageId: 'noRequireImports',
+                });
+            },
+            TSExternalModuleReference(node) {
+                context.report({
+                    node,
+                    messageId: 'noRequireImports',
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-require-imports.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-require-imports.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-require-imports.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..48ae71e9336667936621f39b2e511c8601f152ff
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-require-imports.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-require-imports.js","sourceRoot":"","sources":["../../src/rules/no-require-imports.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA,8CAAgC;AAEhC,kBAAe,IAAI,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,qCAAqC;YAClD,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,KAAK;SACnB;QACD,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE;YACR,gBAAgB,EAAE,0CAA0C;SAC7D;KACF;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,6CAA6C,CAC3C,IAAyB;gBAEzB,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI,EAAE,IAAI,CAAC,MAAO;oBAClB,SAAS,EAAE,kBAAkB;iBAC9B,CAAC,CAAC;YACL,CAAC;YACD,yBAAyB,CAAC,IAAI;gBAC5B,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,kBAAkB;iBAC9B,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-shadow.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-shadow.js
new file mode 100644
index 0000000000000000000000000000000000000000..df035cf537b2745cbc6db9ad9a64a272ec1cdf09
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-shadow.js
@@ -0,0 +1,290 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const scope_manager_1 = require("@typescript-eslint/scope-manager");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-shadow',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow variable declarations from shadowing variables declared in the outer scope',
+            category: 'Variables',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    builtinGlobals: {
+                        type: 'boolean',
+                    },
+                    hoist: {
+                        enum: ['all', 'functions', 'never'],
+                    },
+                    allow: {
+                        type: 'array',
+                        items: {
+                            type: 'string',
+                        },
+                    },
+                    ignoreTypeValueShadow: {
+                        type: 'boolean',
+                    },
+                    ignoreFunctionTypeParameterNameValueShadow: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+        messages: {
+            noShadow: "'{{name}}' is already declared in the upper scope.",
+        },
+    },
+    defaultOptions: [
+        {
+            allow: [],
+            builtinGlobals: false,
+            hoist: 'functions',
+            ignoreTypeValueShadow: true,
+            ignoreFunctionTypeParameterNameValueShadow: true,
+        },
+    ],
+    create(context, [options]) {
+        /**
+         * Check if a scope is a TypeScript module augmenting the global namespace.
+         */
+        function isGlobalAugmentation(scope) {
+            return ((scope.type === scope_manager_1.ScopeType.tsModule && !!scope.block.global) ||
+                (!!scope.upper && isGlobalAugmentation(scope.upper)));
+        }
+        /**
+         * Check if variable is a `this` parameter.
+         */
+        function isThisParam(variable) {
+            return variable.defs[0].type === 'Parameter' && variable.name === 'this';
+        }
+        function isTypeValueShadow(variable, shadowed) {
+            if (options.ignoreTypeValueShadow !== true) {
+                return false;
+            }
+            if (!('isValueVariable' in variable)) {
+                // this shouldn't happen...
+                return false;
+            }
+            const isShadowedValue = 'isValueVariable' in shadowed ? shadowed.isValueVariable : true;
+            return variable.isValueVariable !== isShadowedValue;
+        }
+        function isFunctionTypeParameterNameValueShadow(variable, shadowed) {
+            if (options.ignoreFunctionTypeParameterNameValueShadow !== true) {
+                return false;
+            }
+            if (!('isValueVariable' in variable)) {
+                // this shouldn't happen...
+                return false;
+            }
+            const isShadowedValue = 'isValueVariable' in shadowed ? shadowed.isValueVariable : true;
+            if (!isShadowedValue) {
+                return false;
+            }
+            const id = variable.identifiers[0];
+            return util.isFunctionType(id.parent);
+        }
+        /**
+         * Check if variable name is allowed.
+         * @param variable The variable to check.
+         * @returns Whether or not the variable name is allowed.
+         */
+        function isAllowed(variable) {
+            return options.allow.indexOf(variable.name) !== -1;
+        }
+        /**
+         * Checks if a variable of the class name in the class scope of ClassDeclaration.
+         *
+         * ClassDeclaration creates two variables of its name into its outer scope and its class scope.
+         * So we should ignore the variable in the class scope.
+         * @param variable The variable to check.
+         * @returns Whether or not the variable of the class name in the class scope of ClassDeclaration.
+         */
+        function isDuplicatedClassNameVariable(variable) {
+            const block = variable.scope.block;
+            return (block.type === experimental_utils_1.AST_NODE_TYPES.ClassDeclaration &&
+                block.id === variable.identifiers[0]);
+        }
+        /**
+         * Checks if a variable of the class name in the class scope of TSEnumDeclaration.
+         *
+         * TSEnumDeclaration creates two variables of its name into its outer scope and its class scope.
+         * So we should ignore the variable in the class scope.
+         * @param variable The variable to check.
+         * @returns Whether or not the variable of the class name in the class scope of TSEnumDeclaration.
+         */
+        function isDuplicatedEnumNameVariable(variable) {
+            const block = variable.scope.block;
+            return (block.type === experimental_utils_1.AST_NODE_TYPES.TSEnumDeclaration &&
+                block.id === variable.identifiers[0]);
+        }
+        /**
+         * Checks if a variable is inside the initializer of scopeVar.
+         *
+         * To avoid reporting at declarations such as `var a = function a() {};`.
+         * But it should report `var a = function(a) {};` or `var a = function() { function a() {} };`.
+         * @param variable The variable to check.
+         * @param scopeVar The scope variable to look for.
+         * @returns Whether or not the variable is inside initializer of scopeVar.
+         */
+        function isOnInitializer(variable, scopeVar) {
+            var _a;
+            const outerScope = scopeVar.scope;
+            const outerDef = scopeVar.defs[0];
+            const outer = (_a = outerDef === null || outerDef === void 0 ? void 0 : outerDef.parent) === null || _a === void 0 ? void 0 : _a.range;
+            const innerScope = variable.scope;
+            const innerDef = variable.defs[0];
+            const inner = innerDef === null || innerDef === void 0 ? void 0 : innerDef.name.range;
+            return !!(outer &&
+                inner &&
+                outer[0] < inner[0] &&
+                inner[1] < outer[1] &&
+                ((innerDef.type === 'FunctionName' &&
+                    innerDef.node.type === experimental_utils_1.AST_NODE_TYPES.FunctionExpression) ||
+                    innerDef.node.type === experimental_utils_1.AST_NODE_TYPES.ClassExpression) &&
+                outerScope === innerScope.upper);
+        }
+        /**
+         * Get a range of a variable's identifier node.
+         * @param variable The variable to get.
+         * @returns The range of the variable's identifier node.
+         */
+        function getNameRange(variable) {
+            const def = variable.defs[0];
+            return def === null || def === void 0 ? void 0 : def.name.range;
+        }
+        /**
+         * Checks if a variable is in TDZ of scopeVar.
+         * @param variable The variable to check.
+         * @param scopeVar The variable of TDZ.
+         * @returns Whether or not the variable is in TDZ of scopeVar.
+         */
+        function isInTdz(variable, scopeVar) {
+            const outerDef = scopeVar.defs[0];
+            const inner = getNameRange(variable);
+            const outer = getNameRange(scopeVar);
+            return !!(inner &&
+                outer &&
+                inner[1] < outer[0] &&
+                // Excepts FunctionDeclaration if is {"hoist":"function"}.
+                (options.hoist !== 'functions' ||
+                    !outerDef ||
+                    outerDef.node.type !== experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration));
+        }
+        /**
+         * Finds the variable by a given name in a given scope and its upper scopes.
+         * @param initScope A scope to start find.
+         * @param name A variable name to find.
+         * @returns A found variable or `null`.
+         */
+        function getVariableByName(initScope, name) {
+            let scope = initScope;
+            while (scope) {
+                const variable = scope.set.get(name);
+                if (variable) {
+                    return variable;
+                }
+                scope = scope.upper;
+            }
+            return null;
+        }
+        /**
+         * Checks the current context for shadowed variables.
+         * @param {Scope} scope Fixme
+         */
+        function checkForShadows(scope) {
+            // ignore global augmentation
+            if (isGlobalAugmentation(scope)) {
+                return;
+            }
+            const variables = scope.variables;
+            for (const variable of variables) {
+                // ignore "arguments"
+                if (variable.identifiers.length === 0) {
+                    continue;
+                }
+                // this params are pseudo-params that cannot be shadowed
+                if (isThisParam(variable)) {
+                    continue;
+                }
+                // ignore variables of a class name in the class scope of ClassDeclaration
+                if (isDuplicatedClassNameVariable(variable)) {
+                    continue;
+                }
+                // ignore variables of a class name in the class scope of ClassDeclaration
+                if (isDuplicatedEnumNameVariable(variable)) {
+                    continue;
+                }
+                // ignore configured allowed names
+                if (isAllowed(variable)) {
+                    continue;
+                }
+                // Gets shadowed variable.
+                const shadowed = getVariableByName(scope.upper, variable.name);
+                if (!shadowed) {
+                    continue;
+                }
+                // ignore type value variable shadowing if configured
+                if (isTypeValueShadow(variable, shadowed)) {
+                    continue;
+                }
+                // ignore function type parameter name shadowing if configured
+                if (isFunctionTypeParameterNameValueShadow(variable, shadowed)) {
+                    continue;
+                }
+                const isESLintGlobal = 'writeable' in shadowed;
+                if ((shadowed.identifiers.length > 0 ||
+                    (options.builtinGlobals && isESLintGlobal)) &&
+                    !isOnInitializer(variable, shadowed) &&
+                    !(options.hoist !== 'all' && isInTdz(variable, shadowed))) {
+                    context.report({
+                        node: variable.identifiers[0],
+                        messageId: 'noShadow',
+                        data: {
+                            name: variable.name,
+                        },
+                    });
+                }
+            }
+        }
+        return {
+            'Program:exit'() {
+                const globalScope = context.getScope();
+                const stack = globalScope.childScopes.slice();
+                while (stack.length) {
+                    const scope = stack.pop();
+                    stack.push(...scope.childScopes);
+                    checkForShadows(scope);
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-shadow.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-shadow.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-shadow.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..917dfad22f7614fa056a07ecd8a0e6536b40765c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-shadow.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-shadow.js","sourceRoot":"","sources":["../../src/rules/no-shadow.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-this-alias.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-this-alias.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd0ae568eb99969d38862514a1768e46ed4e1a3b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-this-alias.js
@@ -0,0 +1,83 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-this-alias',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow aliasing `this`',
+            category: 'Best Practices',
+            recommended: 'error',
+        },
+        schema: [
+            {
+                type: 'object',
+                additionalProperties: false,
+                properties: {
+                    allowDestructuring: {
+                        type: 'boolean',
+                    },
+                    allowedNames: {
+                        type: 'array',
+                        items: {
+                            type: 'string',
+                        },
+                    },
+                },
+            },
+        ],
+        messages: {
+            thisAssignment: "Unexpected aliasing of 'this' to local variable.",
+            thisDestructure: "Unexpected aliasing of members of 'this' to local variables.",
+        },
+    },
+    defaultOptions: [
+        {
+            allowDestructuring: true,
+            allowedNames: [],
+        },
+    ],
+    create(context, [{ allowDestructuring, allowedNames }]) {
+        return {
+            "VariableDeclarator[init.type='ThisExpression']"(node) {
+                const { id } = node;
+                if (allowDestructuring && id.type !== experimental_utils_1.AST_NODE_TYPES.Identifier) {
+                    return;
+                }
+                const hasAllowedName = id.type === experimental_utils_1.AST_NODE_TYPES.Identifier
+                    ? allowedNames.includes(id.name)
+                    : false;
+                if (!hasAllowedName) {
+                    context.report({
+                        node: id,
+                        messageId: id.type === experimental_utils_1.AST_NODE_TYPES.Identifier
+                            ? 'thisAssignment'
+                            : 'thisDestructure',
+                    });
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-this-alias.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-this-alias.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-this-alias.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..99bf7d349a844b9c7e4927fbe5fe4161fd77e8bf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-this-alias.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-this-alias.js","sourceRoot":"","sources":["../../src/rules/no-this-alias.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,8CAAgC;AAUhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,0BAA0B;YACvC,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,OAAO;SACrB;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACV,kBAAkB,EAAE;wBAClB,IAAI,EAAE,SAAS;qBAChB;oBACD,YAAY,EAAE;wBACZ,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;yBACf;qBACF;iBACF;aACF;SACF;QACD,QAAQ,EAAE;YACR,cAAc,EAAE,kDAAkD;YAClE,eAAe,EACb,8DAA8D;SACjE;KACF;IACD,cAAc,EAAE;QACd;YACE,kBAAkB,EAAE,IAAI;YACxB,YAAY,EAAE,EAAE;SACjB;KACF;IACD,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,kBAAkB,EAAE,YAAY,EAAE,CAAC;QACpD,OAAO;YACL,gDAAgD,CAC9C,IAAiC;gBAEjC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;gBAEpB,IAAI,kBAAkB,IAAI,EAAE,CAAC,IAAI,KAAK,mCAAc,CAAC,UAAU,EAAE;oBAC/D,OAAO;iBACR;gBAED,MAAM,cAAc,GAClB,EAAE,CAAC,IAAI,KAAK,mCAAc,CAAC,UAAU;oBACnC,CAAC,CAAC,YAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC;oBACjC,CAAC,CAAC,KAAK,CAAC;gBACZ,IAAI,CAAC,cAAc,EAAE;oBACnB,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,EAAE;wBACR,SAAS,EACP,EAAE,CAAC,IAAI,KAAK,mCAAc,CAAC,UAAU;4BACnC,CAAC,CAAC,gBAAgB;4BAClB,CAAC,CAAC,iBAAiB;qBACxB,CAAC,CAAC;iBACJ;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-throw-literal.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-throw-literal.js
new file mode 100644
index 0000000000000000000000000000000000000000..445f067d0531c54c8b6a9678833952b0e5e2ca4a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-throw-literal.js
@@ -0,0 +1,104 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+exports.default = util.createRule({
+    name: 'no-throw-literal',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallow throwing literals as exceptions',
+            category: 'Best Practices',
+            recommended: false,
+            extendsBaseRule: true,
+            requiresTypeChecking: true,
+        },
+        schema: [],
+        messages: {
+            object: 'Expected an error object to be thrown.',
+            undef: 'Do not throw undefined.',
+        },
+    },
+    defaultOptions: [],
+    create(context) {
+        const parserServices = util.getParserServices(context);
+        const program = parserServices.program;
+        const checker = program.getTypeChecker();
+        function isErrorLike(type) {
+            var _a;
+            if (type.isIntersection()) {
+                return type.types.some(isErrorLike);
+            }
+            if (type.isUnion()) {
+                return type.types.every(isErrorLike);
+            }
+            const symbol = type.getSymbol();
+            if (!symbol) {
+                return false;
+            }
+            if (symbol.getName() === 'Error') {
+                const declarations = (_a = symbol.getDeclarations()) !== null && _a !== void 0 ? _a : [];
+                for (const declaration of declarations) {
+                    const sourceFile = declaration.getSourceFile();
+                    if (program.isSourceFileDefaultLibrary(sourceFile)) {
+                        return true;
+                    }
+                }
+            }
+            if (symbol.flags & (ts.SymbolFlags.Class | ts.SymbolFlags.Interface)) {
+                for (const baseType of checker.getBaseTypes(type)) {
+                    if (isErrorLike(baseType)) {
+                        return true;
+                    }
+                }
+            }
+            return false;
+        }
+        function checkThrowArgument(node) {
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.AwaitExpression ||
+                node.type === experimental_utils_1.AST_NODE_TYPES.YieldExpression) {
+                return;
+            }
+            const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+            const type = checker.getTypeAtLocation(tsNode);
+            if (type.flags & ts.TypeFlags.Undefined) {
+                context.report({ node, messageId: 'undef' });
+                return;
+            }
+            if (util.isTypeAnyType(type) ||
+                util.isTypeUnknownType(type) ||
+                isErrorLike(type)) {
+                return;
+            }
+            context.report({ node, messageId: 'object' });
+        }
+        return {
+            ThrowStatement(node) {
+                if (node.argument) {
+                    checkThrowArgument(node.argument);
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-throw-literal.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-throw-literal.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-throw-literal.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..7fac0d2fc85b8e464c0a19fd064b7a14d86ec7ea
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-throw-literal.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-throw-literal.js","sourceRoot":"","sources":["../../src/rules/no-throw-literal.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-type-alias.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-type-alias.js
new file mode 100644
index 0000000000000000000000000000000000000000..62b9398b42472d59710d2bdb21316ef471a17306
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-type-alias.js
@@ -0,0 +1,252 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+const enumValues = [
+    'always',
+    'never',
+    'in-unions',
+    'in-intersections',
+    'in-unions-and-intersections',
+];
+exports.default = util.createRule({
+    name: 'no-type-alias',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow the use of type aliases',
+            category: 'Stylistic Issues',
+            // too opinionated to be recommended
+            recommended: false,
+        },
+        messages: {
+            noTypeAlias: 'Type {{alias}} are not allowed.',
+            noCompositionAlias: '{{typeName}} in {{compositionType}} types are not allowed.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    allowAliases: {
+                        enum: enumValues,
+                    },
+                    allowCallbacks: {
+                        enum: ['always', 'never'],
+                    },
+                    allowConditionalTypes: {
+                        enum: ['always', 'never'],
+                    },
+                    allowConstructors: {
+                        enum: ['always', 'never'],
+                    },
+                    allowLiterals: {
+                        enum: enumValues,
+                    },
+                    allowMappedTypes: {
+                        enum: enumValues,
+                    },
+                    allowTupleTypes: {
+                        enum: enumValues,
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            allowAliases: 'never',
+            allowCallbacks: 'never',
+            allowConditionalTypes: 'never',
+            allowConstructors: 'never',
+            allowLiterals: 'never',
+            allowMappedTypes: 'never',
+            allowTupleTypes: 'never',
+        },
+    ],
+    create(context, [{ allowAliases, allowCallbacks, allowConditionalTypes, allowConstructors, allowLiterals, allowMappedTypes, allowTupleTypes, },]) {
+        const unions = ['always', 'in-unions', 'in-unions-and-intersections'];
+        const intersections = [
+            'always',
+            'in-intersections',
+            'in-unions-and-intersections',
+        ];
+        const compositions = [
+            'in-unions',
+            'in-intersections',
+            'in-unions-and-intersections',
+        ];
+        const aliasTypes = new Set([
+            experimental_utils_1.AST_NODE_TYPES.TSArrayType,
+            experimental_utils_1.AST_NODE_TYPES.TSTypeReference,
+            experimental_utils_1.AST_NODE_TYPES.TSLiteralType,
+            experimental_utils_1.AST_NODE_TYPES.TSTypeQuery,
+            experimental_utils_1.AST_NODE_TYPES.TSIndexedAccessType,
+        ]);
+        /**
+         * Determines if the composition type is supported by the allowed flags.
+         * @param isTopLevel a flag indicating this is the top level node.
+         * @param compositionType the composition type (either TSUnionType or TSIntersectionType)
+         * @param allowed the currently allowed flags.
+         */
+        function isSupportedComposition(isTopLevel, compositionType, allowed) {
+            return (!compositions.includes(allowed) ||
+                (!isTopLevel &&
+                    ((compositionType === experimental_utils_1.AST_NODE_TYPES.TSUnionType &&
+                        unions.includes(allowed)) ||
+                        (compositionType === experimental_utils_1.AST_NODE_TYPES.TSIntersectionType &&
+                            intersections.includes(allowed)))));
+        }
+        /**
+         * Gets the message to be displayed based on the node type and whether the node is a top level declaration.
+         * @param node the location
+         * @param compositionType the type of composition this alias is part of (undefined if not
+         *                                  part of a composition)
+         * @param isRoot a flag indicating we are dealing with the top level declaration.
+         * @param type the kind of type alias being validated.
+         */
+        function reportError(node, compositionType, isRoot, type) {
+            if (isRoot) {
+                return context.report({
+                    node,
+                    messageId: 'noTypeAlias',
+                    data: {
+                        alias: type.toLowerCase(),
+                    },
+                });
+            }
+            return context.report({
+                node,
+                messageId: 'noCompositionAlias',
+                data: {
+                    compositionType: compositionType === experimental_utils_1.AST_NODE_TYPES.TSUnionType
+                        ? 'union'
+                        : 'intersection',
+                    typeName: type,
+                },
+            });
+        }
+        const isValidTupleType = (type) => {
+            if (type.node.type === experimental_utils_1.AST_NODE_TYPES.TSTupleType) {
+                return true;
+            }
+            if (type.node.type === experimental_utils_1.AST_NODE_TYPES.TSTypeOperator) {
+                if (['keyof', 'readonly'].includes(type.node.operator) &&
+                    type.node.typeAnnotation &&
+                    type.node.typeAnnotation.type === experimental_utils_1.AST_NODE_TYPES.TSTupleType) {
+                    return true;
+                }
+            }
+            return false;
+        };
+        const checkAndReport = (optionValue, isTopLevel, type, label) => {
+            if (optionValue === 'never' ||
+                !isSupportedComposition(isTopLevel, type.compositionType, optionValue)) {
+                reportError(type.node, type.compositionType, isTopLevel, label);
+            }
+        };
+        /**
+         * Validates the node looking for aliases, callbacks and literals.
+         * @param type the type of composition this alias is part of (null if not
+         *                                  part of a composition)
+         * @param isTopLevel a flag indicating this is the top level node.
+         */
+        function validateTypeAliases(type, isTopLevel = false) {
+            if (type.node.type === experimental_utils_1.AST_NODE_TYPES.TSFunctionType) {
+                // callback
+                if (allowCallbacks === 'never') {
+                    reportError(type.node, type.compositionType, isTopLevel, 'Callbacks');
+                }
+            }
+            else if (type.node.type === experimental_utils_1.AST_NODE_TYPES.TSConditionalType) {
+                // conditional type
+                if (allowConditionalTypes === 'never') {
+                    reportError(type.node, type.compositionType, isTopLevel, 'Conditional types');
+                }
+            }
+            else if (type.node.type === experimental_utils_1.AST_NODE_TYPES.TSConstructorType) {
+                if (allowConstructors === 'never') {
+                    reportError(type.node, type.compositionType, isTopLevel, 'Constructors');
+                }
+            }
+            else if (type.node.type === experimental_utils_1.AST_NODE_TYPES.TSTypeLiteral) {
+                // literal object type
+                checkAndReport(allowLiterals, isTopLevel, type, 'Literals');
+            }
+            else if (type.node.type === experimental_utils_1.AST_NODE_TYPES.TSMappedType) {
+                // mapped type
+                checkAndReport(allowMappedTypes, isTopLevel, type, 'Mapped types');
+            }
+            else if (isValidTupleType(type)) {
+                // tuple types
+                checkAndReport(allowTupleTypes, isTopLevel, type, 'Tuple Types');
+            }
+            else if (
+            // eslint-disable-next-line @typescript-eslint/internal/prefer-ast-types-enum
+            type.node.type.endsWith('Keyword') ||
+                aliasTypes.has(type.node.type) ||
+                (type.node.type === experimental_utils_1.AST_NODE_TYPES.TSTypeOperator &&
+                    type.node.operator === 'readonly' &&
+                    type.node.typeAnnotation &&
+                    aliasTypes.has(type.node.typeAnnotation.type))) {
+                // alias / keyword
+                checkAndReport(allowAliases, isTopLevel, type, 'Aliases');
+            }
+            else {
+                // unhandled type - shouldn't happen
+                reportError(type.node, type.compositionType, isTopLevel, 'Unhandled');
+            }
+        }
+        /**
+         * Flatten the given type into an array of its dependencies
+         */
+        function getTypes(node, compositionType = null) {
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.TSUnionType ||
+                node.type === experimental_utils_1.AST_NODE_TYPES.TSIntersectionType) {
+                return node.types.reduce((acc, type) => {
+                    acc.push(...getTypes(type, node.type));
+                    return acc;
+                }, []);
+            }
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.TSParenthesizedType) {
+                return getTypes(node.typeAnnotation, compositionType);
+            }
+            return [{ node, compositionType }];
+        }
+        return {
+            TSTypeAliasDeclaration(node) {
+                const types = getTypes(node.typeAnnotation);
+                if (types.length === 1) {
+                    // is a top level type annotation
+                    validateTypeAliases(types[0], true);
+                }
+                else {
+                    // is a composition type
+                    types.forEach(type => {
+                        validateTypeAliases(type);
+                    });
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-type-alias.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-type-alias.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-type-alias.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..ad55508083245e71e1f519a0366d237f6ddce4e3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-type-alias.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-type-alias.js","sourceRoot":"","sources":["../../src/rules/no-type-alias.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-boolean-literal-compare.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-boolean-literal-compare.js
new file mode 100644
index 0000000000000000000000000000000000000000..7da37adde8611db28c6e2e66427fd6c098a09b9c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-boolean-literal-compare.js
@@ -0,0 +1,207 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const tsutils = __importStar(require("tsutils"));
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-unnecessary-boolean-literal-compare',
+    meta: {
+        docs: {
+            description: 'Flags unnecessary equality comparisons against boolean literals',
+            category: 'Stylistic Issues',
+            recommended: false,
+            requiresTypeChecking: true,
+        },
+        fixable: 'code',
+        messages: {
+            direct: 'This expression unnecessarily compares a boolean value to a boolean instead of using it directly.',
+            negated: 'This expression unnecessarily compares a boolean value to a boolean instead of negating it.',
+            comparingNullableToTrueDirect: 'This expression unnecessarily compares a nullable boolean value to true instead of using it directly.',
+            comparingNullableToTrueNegated: 'This expression unnecessarily compares a nullable boolean value to true instead of negating it.',
+            comparingNullableToFalse: 'This expression unnecessarily compares a nullable boolean value to false instead of using the ?? operator to provide a default.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    allowComparingNullableBooleansToTrue: {
+                        type: 'boolean',
+                    },
+                    allowComparingNullableBooleansToFalse: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+        type: 'suggestion',
+    },
+    defaultOptions: [
+        {
+            allowComparingNullableBooleansToTrue: true,
+            allowComparingNullableBooleansToFalse: true,
+        },
+    ],
+    create(context, [options]) {
+        const parserServices = util.getParserServices(context);
+        const checker = parserServices.program.getTypeChecker();
+        function getBooleanComparison(node) {
+            const comparison = deconstructComparison(node);
+            if (!comparison) {
+                return undefined;
+            }
+            const expressionType = checker.getTypeAtLocation(parserServices.esTreeNodeToTSNodeMap.get(comparison.expression));
+            if (isBooleanType(expressionType)) {
+                return Object.assign(Object.assign({}, comparison), { expressionIsNullableBoolean: false });
+            }
+            if (isNullableBoolean(expressionType)) {
+                return Object.assign(Object.assign({}, comparison), { expressionIsNullableBoolean: true });
+            }
+            return undefined;
+        }
+        function isBooleanType(expressionType) {
+            return tsutils.isTypeFlagSet(expressionType, ts.TypeFlags.Boolean | ts.TypeFlags.BooleanLiteral);
+        }
+        /**
+         * checks if the expressionType is a union that
+         *   1) contains at least one nullish type (null or undefined)
+         *   2) contains at least once boolean type (true or false or boolean)
+         *   3) does not contain any types besides nullish and boolean types
+         */
+        function isNullableBoolean(expressionType) {
+            if (!expressionType.isUnion()) {
+                return false;
+            }
+            const { types } = expressionType;
+            const nonNullishTypes = types.filter(type => !tsutils.isTypeFlagSet(type, ts.TypeFlags.Undefined | ts.TypeFlags.Null));
+            const hasNonNullishType = nonNullishTypes.length > 0;
+            if (!hasNonNullishType) {
+                return false;
+            }
+            const hasNullableType = nonNullishTypes.length < types.length;
+            if (!hasNullableType) {
+                return false;
+            }
+            const allNonNullishTypesAreBoolean = nonNullishTypes.every(isBooleanType);
+            if (!allNonNullishTypesAreBoolean) {
+                return false;
+            }
+            return true;
+        }
+        function deconstructComparison(node) {
+            const comparisonType = util.getEqualsKind(node.operator);
+            if (!comparisonType) {
+                return undefined;
+            }
+            for (const [against, expression] of [
+                [node.right, node.left],
+                [node.left, node.right],
+            ]) {
+                if (against.type !== experimental_utils_1.AST_NODE_TYPES.Literal ||
+                    typeof against.value !== 'boolean') {
+                    continue;
+                }
+                const { value: literalBooleanInComparison } = against;
+                const negated = !comparisonType.isPositive;
+                return {
+                    literalBooleanInComparison,
+                    forTruthy: literalBooleanInComparison ? !negated : negated,
+                    expression,
+                    negated,
+                    range: expression.range[0] < against.range[0]
+                        ? [expression.range[1], against.range[1]]
+                        : [against.range[1], expression.range[1]],
+                };
+            }
+            return undefined;
+        }
+        function nodeIsUnaryNegation(node) {
+            return (node.type === experimental_utils_1.AST_NODE_TYPES.UnaryExpression &&
+                node.prefix &&
+                node.operator === '!');
+        }
+        return {
+            BinaryExpression(node) {
+                const comparison = getBooleanComparison(node);
+                if (comparison === undefined) {
+                    return;
+                }
+                if (comparison.expressionIsNullableBoolean) {
+                    if (comparison.literalBooleanInComparison &&
+                        options.allowComparingNullableBooleansToTrue) {
+                        return;
+                    }
+                    if (!comparison.literalBooleanInComparison &&
+                        options.allowComparingNullableBooleansToFalse) {
+                        return;
+                    }
+                }
+                context.report({
+                    fix: function* (fixer) {
+                        yield fixer.removeRange(comparison.range);
+                        // if the expression `exp` isn't nullable, or we're comparing to `true`,
+                        // we can just replace the entire comparison with `exp` or `!exp`
+                        if (!comparison.expressionIsNullableBoolean ||
+                            comparison.literalBooleanInComparison) {
+                            if (!comparison.forTruthy) {
+                                yield fixer.insertTextBefore(node, '!');
+                            }
+                            return;
+                        }
+                        // if we're here, then the expression is a nullable boolean and we're
+                        // comparing to a literal `false`
+                        // if we're doing `== false` or `=== false`, then we need to negate the expression
+                        if (!comparison.negated) {
+                            const { parent } = node;
+                            // if the parent is a negation, we can instead just get rid of the parent's negation.
+                            // i.e. instead of resulting in `!(!(exp))`, we can just result in `exp`
+                            if (parent != null && nodeIsUnaryNegation(parent)) {
+                                // remove from the beginning of the parent to the beginning of this node
+                                yield fixer.removeRange([parent.range[0], node.range[0]]);
+                                // remove from the end of the node to the end of the parent
+                                yield fixer.removeRange([node.range[1], parent.range[1]]);
+                            }
+                            else {
+                                yield fixer.insertTextBefore(node, '!');
+                            }
+                        }
+                        // provide the default `true`
+                        yield fixer.insertTextBefore(node, '(');
+                        yield fixer.insertTextAfter(node, ' ?? true)');
+                    },
+                    messageId: comparison.expressionIsNullableBoolean
+                        ? comparison.literalBooleanInComparison
+                            ? comparison.negated
+                                ? 'comparingNullableToTrueNegated'
+                                : 'comparingNullableToTrueDirect'
+                            : 'comparingNullableToFalse'
+                        : comparison.negated
+                            ? 'negated'
+                            : 'direct',
+                    node,
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-unnecessary-boolean-literal-compare.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-boolean-literal-compare.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-boolean-literal-compare.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..be36dbf92978543eee524b5477e8f703ae5f4d6e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-boolean-literal-compare.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-unnecessary-boolean-literal-compare.js","sourceRoot":"","sources":["../../src/rules/no-unnecessary-boolean-literal-compare.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,iDAAmC;AACnC,+CAAiC;AACjC,8CAAgC;AA4BhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,wCAAwC;IAC9C,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,WAAW,EACT,iEAAiE;YACnE,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,KAAK;YAClB,oBAAoB,EAAE,IAAI;SAC3B;QACD,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE;YACR,MAAM,EACJ,mGAAmG;YACrG,OAAO,EACL,6FAA6F;YAC/F,6BAA6B,EAC3B,uGAAuG;YACzG,8BAA8B,EAC5B,iGAAiG;YACnG,wBAAwB,EACtB,iIAAiI;SACpI;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,oCAAoC,EAAE;wBACpC,IAAI,EAAE,SAAS;qBAChB;oBACD,qCAAqC,EAAE;wBACrC,IAAI,EAAE,SAAS;qBAChB;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;SACF;QACD,IAAI,EAAE,YAAY;KACnB;IACD,cAAc,EAAE;QACd;YACE,oCAAoC,EAAE,IAAI;YAC1C,qCAAqC,EAAE,IAAI;SAC5C;KACF;IACD,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC;QACvB,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAExD,SAAS,oBAAoB,CAC3B,IAA+B;YAE/B,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,EAAE;gBACf,OAAO,SAAS,CAAC;aAClB;YAED,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAC9C,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAChE,CAAC;YAEF,IAAI,aAAa,CAAC,cAAc,CAAC,EAAE;gBACjC,uCACK,UAAU,KACb,2BAA2B,EAAE,KAAK,IAClC;aACH;YAED,IAAI,iBAAiB,CAAC,cAAc,CAAC,EAAE;gBACrC,uCACK,UAAU,KACb,2BAA2B,EAAE,IAAI,IACjC;aACH;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,SAAS,aAAa,CAAC,cAAuB;YAC5C,OAAO,OAAO,CAAC,aAAa,CAC1B,cAAc,EACd,EAAE,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,cAAc,CACnD,CAAC;QACJ,CAAC;QAED;;;;;WAKG;QACH,SAAS,iBAAiB,CAAC,cAAuB;YAChD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE;gBAC7B,OAAO,KAAK,CAAC;aACd;YAED,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC;YAEjC,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAClC,IAAI,CAAC,EAAE,CACL,CAAC,OAAO,CAAC,aAAa,CACpB,IAAI,EACJ,EAAE,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAC3C,CACJ,CAAC;YAEF,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;YACrD,IAAI,CAAC,iBAAiB,EAAE;gBACtB,OAAO,KAAK,CAAC;aACd;YAED,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC9D,IAAI,CAAC,eAAe,EAAE;gBACpB,OAAO,KAAK,CAAC;aACd;YAED,MAAM,4BAA4B,GAAG,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC1E,IAAI,CAAC,4BAA4B,EAAE;gBACjC,OAAO,KAAK,CAAC;aACd;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED,SAAS,qBAAqB,CAC5B,IAA+B;YAE/B,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,CAAC,cAAc,EAAE;gBACnB,OAAO,SAAS,CAAC;aAClB;YAED,KAAK,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI;gBAClC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;gBACvB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;aACxB,EAAE;gBACD,IACE,OAAO,CAAC,IAAI,KAAK,mCAAc,CAAC,OAAO;oBACvC,OAAO,OAAO,CAAC,KAAK,KAAK,SAAS,EAClC;oBACA,SAAS;iBACV;gBAED,MAAM,EAAE,KAAK,EAAE,0BAA0B,EAAE,GAAG,OAAO,CAAC;gBACtD,MAAM,OAAO,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC;gBAE3C,OAAO;oBACL,0BAA0B;oBAC1B,SAAS,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;oBAC1D,UAAU;oBACV,OAAO;oBACP,KAAK,EACH,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;wBACpC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACzC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC9C,CAAC;aACH;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,SAAS,mBAAmB,CAAC,IAAmB;YAC9C,OAAO,CACL,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,eAAe;gBAC5C,IAAI,CAAC,MAAM;gBACX,IAAI,CAAC,QAAQ,KAAK,GAAG,CACtB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,gBAAgB,CAAC,IAAI;gBACnB,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,UAAU,KAAK,SAAS,EAAE;oBAC5B,OAAO;iBACR;gBAED,IAAI,UAAU,CAAC,2BAA2B,EAAE;oBAC1C,IACE,UAAU,CAAC,0BAA0B;wBACrC,OAAO,CAAC,oCAAoC,EAC5C;wBACA,OAAO;qBACR;oBACD,IACE,CAAC,UAAU,CAAC,0BAA0B;wBACtC,OAAO,CAAC,qCAAqC,EAC7C;wBACA,OAAO;qBACR;iBACF;gBAED,OAAO,CAAC,MAAM,CAAC;oBACb,GAAG,EAAE,QAAQ,CAAC,EAAE,KAAK;wBACnB,MAAM,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;wBAE1C,wEAAwE;wBACxE,iEAAiE;wBACjE,IACE,CAAC,UAAU,CAAC,2BAA2B;4BACvC,UAAU,CAAC,0BAA0B,EACrC;4BACA,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;gCACzB,MAAM,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;6BACzC;4BACD,OAAO;yBACR;wBAED,qEAAqE;wBACrE,iCAAiC;wBAEjC,kFAAkF;wBAClF,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;4BACvB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;4BACxB,qFAAqF;4BACrF,wEAAwE;4BACxE,IAAI,MAAM,IAAI,IAAI,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE;gCACjD,wEAAwE;gCACxE,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC1D,2DAA2D;gCAC3D,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;6BAC3D;iCAAM;gCACL,MAAM,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;6BACzC;yBACF;wBAED,6BAA6B;wBAC7B,MAAM,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;wBACxC,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oBACjD,CAAC;oBACD,SAAS,EAAE,UAAU,CAAC,2BAA2B;wBAC/C,CAAC,CAAC,UAAU,CAAC,0BAA0B;4BACrC,CAAC,CAAC,UAAU,CAAC,OAAO;gCAClB,CAAC,CAAC,gCAAgC;gCAClC,CAAC,CAAC,+BAA+B;4BACnC,CAAC,CAAC,0BAA0B;wBAC9B,CAAC,CAAC,UAAU,CAAC,OAAO;4BACpB,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,QAAQ;oBACZ,IAAI;iBACL,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-condition.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-condition.js
new file mode 100644
index 0000000000000000000000000000000000000000..1988f8cdac5e28968d522984868bbb2670021da1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-condition.js
@@ -0,0 +1,473 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const ts = __importStar(require("typescript"));
+const tsutils_1 = require("tsutils");
+const util_1 = require("../util");
+// Truthiness utilities
+// #region
+const isTruthyLiteral = (type) => tsutils_1.isBooleanLiteralType(type, true) || (tsutils_1.isLiteralType(type) && !!type.value);
+const isPossiblyFalsy = (type) => tsutils_1.unionTypeParts(type)
+    // PossiblyFalsy flag includes literal values, so exclude ones that
+    // are definitely truthy
+    .filter(t => !isTruthyLiteral(t))
+    .some(type => util_1.isTypeFlagSet(type, ts.TypeFlags.PossiblyFalsy));
+const isPossiblyTruthy = (type) => tsutils_1.unionTypeParts(type).some(type => !tsutils_1.isFalsyType(type));
+// Nullish utilities
+const nullishFlag = ts.TypeFlags.Undefined | ts.TypeFlags.Null;
+const isNullishType = (type) => util_1.isTypeFlagSet(type, nullishFlag);
+const isPossiblyNullish = (type) => tsutils_1.unionTypeParts(type).some(isNullishType);
+const isAlwaysNullish = (type) => tsutils_1.unionTypeParts(type).every(isNullishType);
+// isLiteralType only covers numbers and strings, this is a more exhaustive check.
+const isLiteral = (type) => tsutils_1.isBooleanLiteralType(type, true) ||
+    tsutils_1.isBooleanLiteralType(type, false) ||
+    type.flags === ts.TypeFlags.Undefined ||
+    type.flags === ts.TypeFlags.Null ||
+    type.flags === ts.TypeFlags.Void ||
+    tsutils_1.isLiteralType(type);
+exports.default = util_1.createRule({
+    name: 'no-unnecessary-condition',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Prevents conditionals where the type is always truthy or always falsy',
+            category: 'Best Practices',
+            recommended: false,
+            requiresTypeChecking: true,
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    allowConstantLoopConditions: {
+                        type: 'boolean',
+                    },
+                    allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+        fixable: 'code',
+        messages: {
+            alwaysTruthy: 'Unnecessary conditional, value is always truthy.',
+            alwaysFalsy: 'Unnecessary conditional, value is always falsy.',
+            alwaysTruthyFunc: 'This callback should return a conditional, but return is always truthy.',
+            alwaysFalsyFunc: 'This callback should return a conditional, but return is always falsy.',
+            neverNullish: 'Unnecessary conditional, expected left-hand side of `??` operator to be possibly null or undefined.',
+            alwaysNullish: 'Unnecessary conditional, left-hand side of `??` operator is always `null` or `undefined`.',
+            literalBooleanExpression: 'Unnecessary conditional, both sides of the expression are literal values',
+            noOverlapBooleanExpression: 'Unnecessary conditional, the types have no overlap',
+            never: 'Unnecessary conditional, value is `never`',
+            neverOptionalChain: 'Unnecessary optional chain on a non-nullish value',
+            noStrictNullCheck: 'This rule requires the `strictNullChecks` compiler option to be turned on to function correctly.',
+        },
+    },
+    defaultOptions: [
+        {
+            allowConstantLoopConditions: false,
+            allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing: false,
+        },
+    ],
+    create(context, [{ allowConstantLoopConditions, allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing, },]) {
+        const service = util_1.getParserServices(context);
+        const checker = service.program.getTypeChecker();
+        const sourceCode = context.getSourceCode();
+        const compilerOptions = service.program.getCompilerOptions();
+        const isStrictNullChecks = tsutils_1.isStrictCompilerOptionEnabled(compilerOptions, 'strictNullChecks');
+        if (!isStrictNullChecks &&
+            allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing !== true) {
+            context.report({
+                loc: {
+                    start: { line: 0, column: 0 },
+                    end: { line: 0, column: 0 },
+                },
+                messageId: 'noStrictNullCheck',
+            });
+        }
+        function getNodeType(node) {
+            const tsNode = service.esTreeNodeToTSNodeMap.get(node);
+            return util_1.getConstrainedTypeAtLocation(checker, tsNode);
+        }
+        function nodeIsArrayType(node) {
+            const nodeType = getNodeType(node);
+            return checker.isArrayType(nodeType);
+        }
+        function nodeIsTupleType(node) {
+            const nodeType = getNodeType(node);
+            return checker.isTupleType(nodeType);
+        }
+        function isArrayIndexExpression(node) {
+            return (
+            // Is an index signature
+            node.type === experimental_utils_1.AST_NODE_TYPES.MemberExpression &&
+                node.computed &&
+                // ...into an array type
+                (nodeIsArrayType(node.object) ||
+                    // ... or a tuple type
+                    (nodeIsTupleType(node.object) &&
+                        // Exception: literal index into a tuple - will have a sound type
+                        node.property.type !== experimental_utils_1.AST_NODE_TYPES.Literal)));
+        }
+        /**
+         * Checks if a conditional node is necessary:
+         * if the type of the node is always true or always false, it's not necessary.
+         */
+        function checkNode(node, isUnaryNotArgument = false) {
+            // Check if the node is Unary Negation expression and handle it
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.UnaryExpression &&
+                node.operator === '!') {
+                return checkNode(node.argument, true);
+            }
+            // Since typescript array index signature types don't represent the
+            //  possibility of out-of-bounds access, if we're indexing into an array
+            //  just skip the check, to avoid false positives
+            if (isArrayIndexExpression(node)) {
+                return;
+            }
+            // When checking logical expressions, only check the right side
+            //  as the left side has been checked by checkLogicalExpressionForUnnecessaryConditionals
+            //
+            // Unless the node is nullish coalescing, as it's common to use patterns like `nullBool ?? true` to to strict
+            //  boolean checks if we inspect the right here, it'll usually be a constant condition on purpose.
+            // In this case it's better to inspect the type of the expression as a whole.
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.LogicalExpression &&
+                node.operator !== '??') {
+                return checkNode(node.right);
+            }
+            const type = getNodeType(node);
+            // Conditional is always necessary if it involves:
+            //    `any` or `unknown` or a naked type parameter
+            if (tsutils_1.unionTypeParts(type).some(part => util_1.isTypeAnyType(part) ||
+                util_1.isTypeUnknownType(part) ||
+                util_1.isTypeFlagSet(part, ts.TypeFlags.TypeParameter))) {
+                return;
+            }
+            let messageId = null;
+            if (util_1.isTypeFlagSet(type, ts.TypeFlags.Never)) {
+                messageId = 'never';
+            }
+            else if (!isPossiblyTruthy(type)) {
+                messageId = !isUnaryNotArgument ? 'alwaysFalsy' : 'alwaysTruthy';
+            }
+            else if (!isPossiblyFalsy(type)) {
+                messageId = !isUnaryNotArgument ? 'alwaysTruthy' : 'alwaysFalsy';
+            }
+            if (messageId) {
+                context.report({ node, messageId });
+            }
+        }
+        function checkNodeForNullish(node) {
+            // Since typescript array index signature types don't represent the
+            //  possibility of out-of-bounds access, if we're indexing into an array
+            //  just skip the check, to avoid false positives
+            if (isArrayIndexExpression(node)) {
+                return;
+            }
+            const type = getNodeType(node);
+            // Conditional is always necessary if it involves `any` or `unknown`
+            if (util_1.isTypeAnyType(type) || util_1.isTypeUnknownType(type)) {
+                return;
+            }
+            let messageId = null;
+            if (util_1.isTypeFlagSet(type, ts.TypeFlags.Never)) {
+                messageId = 'never';
+            }
+            else if (!isPossiblyNullish(type)) {
+                messageId = 'neverNullish';
+            }
+            else if (isAlwaysNullish(type)) {
+                messageId = 'alwaysNullish';
+            }
+            if (messageId) {
+                context.report({ node, messageId });
+            }
+        }
+        /**
+         * Checks that a binary expression is necessarily conditional, reports otherwise.
+         * If both sides of the binary expression are literal values, it's not a necessary condition.
+         *
+         * NOTE: It's also unnecessary if the types that don't overlap at all
+         *    but that case is handled by the Typescript compiler itself.
+         *    Known exceptions:
+         *      * https://github.com/microsoft/TypeScript/issues/32627
+         *      * https://github.com/microsoft/TypeScript/issues/37160 (handled)
+         */
+        const BOOL_OPERATORS = new Set([
+            '<',
+            '>',
+            '<=',
+            '>=',
+            '==',
+            '===',
+            '!=',
+            '!==',
+        ]);
+        function checkIfBinaryExpressionIsNecessaryConditional(node) {
+            if (!BOOL_OPERATORS.has(node.operator)) {
+                return;
+            }
+            const leftType = getNodeType(node.left);
+            const rightType = getNodeType(node.right);
+            if (isLiteral(leftType) && isLiteral(rightType)) {
+                context.report({ node, messageId: 'literalBooleanExpression' });
+                return;
+            }
+            // Workaround for https://github.com/microsoft/TypeScript/issues/37160
+            if (isStrictNullChecks) {
+                const UNDEFINED = ts.TypeFlags.Undefined;
+                const NULL = ts.TypeFlags.Null;
+                const isComparable = (type, flag) => {
+                    // Allow comparison to `any`, `unknown` or a naked type parameter.
+                    flag |=
+                        ts.TypeFlags.Any |
+                            ts.TypeFlags.Unknown |
+                            ts.TypeFlags.TypeParameter;
+                    // Allow loose comparison to nullish values.
+                    if (node.operator === '==' || node.operator === '!=') {
+                        flag |= NULL | UNDEFINED;
+                    }
+                    return util_1.isTypeFlagSet(type, flag);
+                };
+                if ((leftType.flags === UNDEFINED &&
+                    !isComparable(rightType, UNDEFINED)) ||
+                    (rightType.flags === UNDEFINED &&
+                        !isComparable(leftType, UNDEFINED)) ||
+                    (leftType.flags === NULL && !isComparable(rightType, NULL)) ||
+                    (rightType.flags === NULL && !isComparable(leftType, NULL))) {
+                    context.report({ node, messageId: 'noOverlapBooleanExpression' });
+                    return;
+                }
+            }
+        }
+        /**
+         * Checks that a logical expression contains a boolean, reports otherwise.
+         */
+        function checkLogicalExpressionForUnnecessaryConditionals(node) {
+            if (node.operator === '??') {
+                checkNodeForNullish(node.left);
+                return;
+            }
+            // Only checks the left side, since the right side might not be "conditional" at all.
+            // The right side will be checked if the LogicalExpression is used in a conditional context
+            checkNode(node.left);
+        }
+        /**
+         * Checks that a testable expression of a loop is necessarily conditional, reports otherwise.
+         */
+        function checkIfLoopIsNecessaryConditional(node) {
+            if (node.test === null) {
+                // e.g. `for(;;)`
+                return;
+            }
+            /**
+             * Allow:
+             *   while (true) {}
+             *   for (;true;) {}
+             *   do {} while (true)
+             */
+            if (allowConstantLoopConditions &&
+                tsutils_1.isBooleanLiteralType(getNodeType(node.test), true)) {
+                return;
+            }
+            checkNode(node.test);
+        }
+        const ARRAY_PREDICATE_FUNCTIONS = new Set([
+            'filter',
+            'find',
+            'some',
+            'every',
+        ]);
+        function isArrayPredicateFunction(node) {
+            const { callee } = node;
+            return (
+            // looks like `something.filter` or `something.find`
+            callee.type === experimental_utils_1.AST_NODE_TYPES.MemberExpression &&
+                callee.property.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                ARRAY_PREDICATE_FUNCTIONS.has(callee.property.name) &&
+                // and the left-hand side is an array, according to the types
+                (nodeIsArrayType(callee.object) || nodeIsTupleType(callee.object)));
+        }
+        function checkCallExpression(node) {
+            // If this is something like arr.filter(x => /*condition*/), check `condition`
+            if (isArrayPredicateFunction(node) && node.arguments.length) {
+                const callback = node.arguments[0];
+                // Inline defined functions
+                if ((callback.type === experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression ||
+                    callback.type === experimental_utils_1.AST_NODE_TYPES.FunctionExpression) &&
+                    callback.body) {
+                    // Two special cases, where we can directly check the node that's returned:
+                    // () => something
+                    if (callback.body.type !== experimental_utils_1.AST_NODE_TYPES.BlockStatement) {
+                        return checkNode(callback.body);
+                    }
+                    // () => { return something; }
+                    const callbackBody = callback.body.body;
+                    if (callbackBody.length === 1 &&
+                        callbackBody[0].type === experimental_utils_1.AST_NODE_TYPES.ReturnStatement &&
+                        callbackBody[0].argument) {
+                        return checkNode(callbackBody[0].argument);
+                    }
+                    // Potential enhancement: could use code-path analysis to check
+                    //   any function with a single return statement
+                    // (Value to complexity ratio is dubious however)
+                }
+                // Otherwise just do type analysis on the function as a whole.
+                const returnTypes = tsutils_1.getCallSignaturesOfType(getNodeType(callback)).map(sig => sig.getReturnType());
+                /* istanbul ignore if */ if (returnTypes.length === 0) {
+                    // Not a callable function
+                    return;
+                }
+                // Predicate is always necessary if it involves `any` or `unknown`
+                if (returnTypes.some(t => util_1.isTypeAnyType(t) || util_1.isTypeUnknownType(t))) {
+                    return;
+                }
+                if (!returnTypes.some(isPossiblyFalsy)) {
+                    return context.report({
+                        node: callback,
+                        messageId: 'alwaysTruthyFunc',
+                    });
+                }
+                if (!returnTypes.some(isPossiblyTruthy)) {
+                    return context.report({
+                        node: callback,
+                        messageId: 'alwaysFalsyFunc',
+                    });
+                }
+            }
+        }
+        // Recursively searches an optional chain for an array index expression
+        //  Has to search the entire chain, because an array index will "infect" the rest of the types
+        //  Example:
+        //  ```
+        //  [{x: {y: "z"} }][n] // type is {x: {y: "z"}}
+        //    ?.x // type is {y: "z"}
+        //    ?.y // This access is considered "unnecessary" according to the types
+        //  ```
+        function optionChainContainsArrayIndex(node) {
+            const lhsNode = node.type === experimental_utils_1.AST_NODE_TYPES.CallExpression ? node.callee : node.object;
+            if (isArrayIndexExpression(lhsNode)) {
+                return true;
+            }
+            if (lhsNode.type === experimental_utils_1.AST_NODE_TYPES.MemberExpression ||
+                lhsNode.type === experimental_utils_1.AST_NODE_TYPES.CallExpression) {
+                return optionChainContainsArrayIndex(lhsNode);
+            }
+            return false;
+        }
+        function isNullablePropertyType(objType, propertyType) {
+            if (propertyType.isUnion()) {
+                return propertyType.types.some(type => isNullablePropertyType(objType, type));
+            }
+            if (propertyType.isNumberLiteral() || propertyType.isStringLiteral()) {
+                const propType = util_1.getTypeOfPropertyOfName(checker, objType, propertyType.value.toString());
+                if (propType) {
+                    return util_1.isNullableType(propType, { allowUndefined: true });
+                }
+            }
+            const typeName = util_1.getTypeName(checker, propertyType);
+            return !!((typeName === 'string' &&
+                checker.getIndexInfoOfType(objType, ts.IndexKind.String)) ||
+                (typeName === 'number' &&
+                    checker.getIndexInfoOfType(objType, ts.IndexKind.Number)));
+        }
+        // Checks whether a member expression is nullable or not regardless of it's previous node.
+        //  Example:
+        //  ```
+        //  // 'bar' is nullable if 'foo' is null.
+        //  // but this function checks regardless of 'foo' type, so returns 'true'.
+        //  declare const foo: { bar : { baz: string } } | null
+        //  foo?.bar;
+        //  ```
+        function isNullableOriginFromPrev(node) {
+            const prevType = getNodeType(node.object);
+            const property = node.property;
+            if (prevType.isUnion() && util_1.isIdentifier(property)) {
+                const isOwnNullable = prevType.types.some(type => {
+                    if (node.computed) {
+                        const propertyType = getNodeType(node.property);
+                        return isNullablePropertyType(type, propertyType);
+                    }
+                    const propType = util_1.getTypeOfPropertyOfName(checker, type, property.name);
+                    return propType && util_1.isNullableType(propType, { allowUndefined: true });
+                });
+                return (!isOwnNullable && util_1.isNullableType(prevType, { allowUndefined: true }));
+            }
+            return false;
+        }
+        function isOptionableExpression(node) {
+            const type = getNodeType(node);
+            const isOwnNullable = node.type === experimental_utils_1.AST_NODE_TYPES.MemberExpression
+                ? !isNullableOriginFromPrev(node)
+                : true;
+            return (util_1.isTypeAnyType(type) ||
+                util_1.isTypeUnknownType(type) ||
+                (util_1.isNullableType(type, { allowUndefined: true }) && isOwnNullable));
+        }
+        function checkOptionalChain(node, beforeOperator, fix) {
+            // We only care if this step in the chain is optional. If just descend
+            // from an optional chain, then that's fine.
+            if (!node.optional) {
+                return;
+            }
+            // Since typescript array index signature types don't represent the
+            //  possibility of out-of-bounds access, if we're indexing into an array
+            //  just skip the check, to avoid false positives
+            if (optionChainContainsArrayIndex(node)) {
+                return;
+            }
+            const nodeToCheck = node.type === experimental_utils_1.AST_NODE_TYPES.CallExpression ? node.callee : node.object;
+            if (isOptionableExpression(nodeToCheck)) {
+                return;
+            }
+            const questionDotOperator = util_1.nullThrows(sourceCode.getTokenAfter(beforeOperator, token => token.type === experimental_utils_1.AST_TOKEN_TYPES.Punctuator && token.value === '?.'), util_1.NullThrowsReasons.MissingToken('operator', node.type));
+            context.report({
+                node,
+                loc: questionDotOperator.loc,
+                messageId: 'neverOptionalChain',
+                fix(fixer) {
+                    return fixer.replaceText(questionDotOperator, fix);
+                },
+            });
+        }
+        function checkOptionalMemberExpression(node) {
+            checkOptionalChain(node, node.object, node.computed ? '' : '.');
+        }
+        function checkOptionalCallExpression(node) {
+            checkOptionalChain(node, node.callee, '');
+        }
+        return {
+            BinaryExpression: checkIfBinaryExpressionIsNecessaryConditional,
+            CallExpression: checkCallExpression,
+            ConditionalExpression: (node) => checkNode(node.test),
+            DoWhileStatement: checkIfLoopIsNecessaryConditional,
+            ForStatement: checkIfLoopIsNecessaryConditional,
+            IfStatement: (node) => checkNode(node.test),
+            LogicalExpression: checkLogicalExpressionForUnnecessaryConditionals,
+            WhileStatement: checkIfLoopIsNecessaryConditional,
+            'MemberExpression[optional = true]': checkOptionalMemberExpression,
+            'CallExpression[optional = true]': checkOptionalCallExpression,
+        };
+    },
+});
+//# sourceMappingURL=no-unnecessary-condition.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-condition.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-condition.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..86c67f3796d909483efe9007a9e70faf3b58d6d5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-condition.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-unnecessary-condition.js","sourceRoot":"","sources":["../../src/rules/no-unnecessary-condition.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-qualifier.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-qualifier.js
new file mode 100644
index 0000000000000000000000000000000000000000..52202a0472e5eafc5838a83d8f47d3fc0f4aa700
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-qualifier.js
@@ -0,0 +1,149 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const ts = __importStar(require("typescript"));
+const tsutils = __importStar(require("tsutils"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-unnecessary-qualifier',
+    meta: {
+        docs: {
+            category: 'Best Practices',
+            description: 'Warns when a namespace qualifier is unnecessary',
+            recommended: false,
+            requiresTypeChecking: true,
+        },
+        fixable: 'code',
+        messages: {
+            unnecessaryQualifier: "Qualifier is unnecessary since '{{ name }}' is in scope.",
+        },
+        schema: [],
+        type: 'suggestion',
+    },
+    defaultOptions: [],
+    create(context) {
+        const namespacesInScope = [];
+        let currentFailedNamespaceExpression = null;
+        const parserServices = util.getParserServices(context);
+        const esTreeNodeToTSNodeMap = parserServices.esTreeNodeToTSNodeMap;
+        const program = parserServices.program;
+        const checker = program.getTypeChecker();
+        const sourceCode = context.getSourceCode();
+        function tryGetAliasedSymbol(symbol, checker) {
+            return tsutils.isSymbolFlagSet(symbol, ts.SymbolFlags.Alias)
+                ? checker.getAliasedSymbol(symbol)
+                : null;
+        }
+        function symbolIsNamespaceInScope(symbol) {
+            var _a;
+            const symbolDeclarations = (_a = symbol.getDeclarations()) !== null && _a !== void 0 ? _a : [];
+            if (symbolDeclarations.some(decl => namespacesInScope.some(ns => ns === decl))) {
+                return true;
+            }
+            const alias = tryGetAliasedSymbol(symbol, checker);
+            return alias !== null && symbolIsNamespaceInScope(alias);
+        }
+        function getSymbolInScope(node, flags, name) {
+            // TODO:PERF `getSymbolsInScope` gets a long list. Is there a better way?
+            const scope = checker.getSymbolsInScope(node, flags);
+            return scope.find(scopeSymbol => scopeSymbol.name === name);
+        }
+        function symbolsAreEqual(accessed, inScope) {
+            return accessed === checker.getExportSymbolOfSymbol(inScope);
+        }
+        function qualifierIsUnnecessary(qualifier, name) {
+            const tsQualifier = esTreeNodeToTSNodeMap.get(qualifier);
+            const tsName = esTreeNodeToTSNodeMap.get(name);
+            const namespaceSymbol = checker.getSymbolAtLocation(tsQualifier);
+            if (typeof namespaceSymbol === 'undefined' ||
+                !symbolIsNamespaceInScope(namespaceSymbol)) {
+                return false;
+            }
+            const accessedSymbol = checker.getSymbolAtLocation(tsName);
+            if (typeof accessedSymbol === 'undefined') {
+                return false;
+            }
+            // If the symbol in scope is different, the qualifier is necessary.
+            const fromScope = getSymbolInScope(tsQualifier, accessedSymbol.flags, sourceCode.getText(name));
+            return (typeof fromScope === 'undefined' ||
+                symbolsAreEqual(accessedSymbol, fromScope));
+        }
+        function visitNamespaceAccess(node, qualifier, name) {
+            // Only look for nested qualifier errors if we didn't already fail on the outer qualifier.
+            if (!currentFailedNamespaceExpression &&
+                qualifierIsUnnecessary(qualifier, name)) {
+                currentFailedNamespaceExpression = node;
+                context.report({
+                    node: qualifier,
+                    messageId: 'unnecessaryQualifier',
+                    data: {
+                        name: sourceCode.getText(name),
+                    },
+                    fix(fixer) {
+                        return fixer.removeRange([qualifier.range[0], name.range[0]]);
+                    },
+                });
+            }
+        }
+        function enterDeclaration(node) {
+            namespacesInScope.push(esTreeNodeToTSNodeMap.get(node));
+        }
+        function exitDeclaration() {
+            namespacesInScope.pop();
+        }
+        function resetCurrentNamespaceExpression(node) {
+            if (node === currentFailedNamespaceExpression) {
+                currentFailedNamespaceExpression = null;
+            }
+        }
+        function isPropertyAccessExpression(node) {
+            return node.type === experimental_utils_1.AST_NODE_TYPES.MemberExpression && !node.computed;
+        }
+        function isEntityNameExpression(node) {
+            return (node.type === experimental_utils_1.AST_NODE_TYPES.Identifier ||
+                (isPropertyAccessExpression(node) &&
+                    isEntityNameExpression(node.object)));
+        }
+        return {
+            TSModuleDeclaration: enterDeclaration,
+            TSEnumDeclaration: enterDeclaration,
+            'ExportNamedDeclaration[declaration.type="TSModuleDeclaration"]': enterDeclaration,
+            'ExportNamedDeclaration[declaration.type="TSEnumDeclaration"]': enterDeclaration,
+            'TSModuleDeclaration:exit': exitDeclaration,
+            'TSEnumDeclaration:exit': exitDeclaration,
+            'ExportNamedDeclaration[declaration.type="TSModuleDeclaration"]:exit': exitDeclaration,
+            'ExportNamedDeclaration[declaration.type="TSEnumDeclaration"]:exit': exitDeclaration,
+            TSQualifiedName(node) {
+                visitNamespaceAccess(node, node.left, node.right);
+            },
+            'MemberExpression[computed=false]': function (node) {
+                const property = node.property;
+                if (isEntityNameExpression(node.object)) {
+                    visitNamespaceAccess(node, node.object, property);
+                }
+            },
+            'TSQualifiedName:exit': resetCurrentNamespaceExpression,
+            'MemberExpression:exit': resetCurrentNamespaceExpression,
+        };
+    },
+});
+//# sourceMappingURL=no-unnecessary-qualifier.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-qualifier.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-qualifier.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c516a452233539762ec80a6a746454afc32962e4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-qualifier.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-unnecessary-qualifier.js","sourceRoot":"","sources":["../../src/rules/no-unnecessary-qualifier.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-arguments.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-arguments.js
new file mode 100644
index 0000000000000000000000000000000000000000..d8fab61138423a84912766d70e6ad2a9ef31c90d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-arguments.js
@@ -0,0 +1,119 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const tsutils = __importStar(require("tsutils"));
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+const util_1 = require("../util");
+exports.default = util.createRule({
+    name: 'no-unnecessary-type-arguments',
+    meta: {
+        docs: {
+            description: 'Enforces that type arguments will not be used if not required',
+            category: 'Best Practices',
+            recommended: false,
+            requiresTypeChecking: true,
+        },
+        fixable: 'code',
+        messages: {
+            unnecessaryTypeParameter: 'This is the default value for this type parameter, so it can be omitted.',
+        },
+        schema: [],
+        type: 'suggestion',
+    },
+    defaultOptions: [],
+    create(context) {
+        const parserServices = util.getParserServices(context);
+        const checker = parserServices.program.getTypeChecker();
+        const sourceCode = context.getSourceCode();
+        function checkTSArgsAndParameters(esParameters, typeParameters) {
+            // Just check the last one. Must specify previous type parameters if the last one is specified.
+            const i = esParameters.params.length - 1;
+            const arg = esParameters.params[i];
+            const param = typeParameters[i];
+            // TODO: would like checker.areTypesEquivalent. https://github.com/Microsoft/TypeScript/issues/13502
+            if (!(param === null || param === void 0 ? void 0 : param.default) ||
+                param.default.getText() !== sourceCode.getText(arg)) {
+                return;
+            }
+            context.report({
+                node: arg,
+                messageId: 'unnecessaryTypeParameter',
+                fix: fixer => fixer.removeRange(i === 0
+                    ? esParameters.range
+                    : [esParameters.params[i - 1].range[1], arg.range[1]]),
+            });
+        }
+        return {
+            TSTypeParameterInstantiation(node) {
+                const expression = parserServices.esTreeNodeToTSNodeMap.get(node);
+                const typeParameters = getTypeParametersFromNode(expression, checker);
+                if (typeParameters) {
+                    checkTSArgsAndParameters(node, typeParameters);
+                }
+            },
+        };
+    },
+});
+function getTypeParametersFromNode(node, checker) {
+    if (ts.isExpressionWithTypeArguments(node)) {
+        return getTypeParametersFromType(node.expression, checker);
+    }
+    if (ts.isTypeReferenceNode(node)) {
+        return getTypeParametersFromType(node.typeName, checker);
+    }
+    if (ts.isCallExpression(node) || ts.isNewExpression(node)) {
+        return getTypeParametersFromCall(node, checker);
+    }
+    return undefined;
+}
+function getTypeParametersFromType(type, checker) {
+    const symAtLocation = checker.getSymbolAtLocation(type);
+    if (!symAtLocation) {
+        return undefined;
+    }
+    const sym = getAliasedSymbol(symAtLocation, checker);
+    const declarations = sym.getDeclarations();
+    if (!declarations) {
+        return undefined;
+    }
+    return util_1.findFirstResult(declarations, decl => tsutils.isClassLikeDeclaration(decl) ||
+        ts.isTypeAliasDeclaration(decl) ||
+        ts.isInterfaceDeclaration(decl)
+        ? decl.typeParameters
+        : undefined);
+}
+function getTypeParametersFromCall(node, checker) {
+    const sig = checker.getResolvedSignature(node);
+    const sigDecl = sig === null || sig === void 0 ? void 0 : sig.getDeclaration();
+    if (!sigDecl) {
+        return ts.isNewExpression(node)
+            ? getTypeParametersFromType(node.expression, checker)
+            : undefined;
+    }
+    return sigDecl.typeParameters;
+}
+function getAliasedSymbol(symbol, checker) {
+    return tsutils.isSymbolFlagSet(symbol, ts.SymbolFlags.Alias)
+        ? checker.getAliasedSymbol(symbol)
+        : symbol;
+}
+//# sourceMappingURL=no-unnecessary-type-arguments.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-arguments.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-arguments.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c669509acad4d18beac549b1b3910523f9b7f589
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-arguments.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-unnecessary-type-arguments.js","sourceRoot":"","sources":["../../src/rules/no-unnecessary-type-arguments.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-assertion.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-assertion.js
new file mode 100644
index 0000000000000000000000000000000000000000..61aa7af47a0fdc5f27aff6c47b12c0fd79f5bff3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-assertion.js
@@ -0,0 +1,218 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const tsutils_1 = require("tsutils");
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-unnecessary-type-assertion',
+    meta: {
+        docs: {
+            description: 'Warns if a type assertion does not change the type of an expression',
+            category: 'Best Practices',
+            recommended: 'error',
+            requiresTypeChecking: true,
+        },
+        fixable: 'code',
+        messages: {
+            unnecessaryAssertion: 'This assertion is unnecessary since it does not change the type of the expression.',
+            contextuallyUnnecessary: 'This assertion is unnecessary since the receiver accepts the original type of the expression.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    typesToIgnore: {
+                        type: 'array',
+                        items: {
+                            type: 'string',
+                        },
+                    },
+                },
+            },
+        ],
+        type: 'suggestion',
+    },
+    defaultOptions: [{}],
+    create(context, [options]) {
+        const sourceCode = context.getSourceCode();
+        const parserServices = util.getParserServices(context);
+        const checker = parserServices.program.getTypeChecker();
+        const compilerOptions = parserServices.program.getCompilerOptions();
+        /**
+         * Sometimes tuple types don't have ObjectFlags.Tuple set, like when they're being matched against an inferred type.
+         * So, in addition, check if there are integer properties 0..n and no other numeric keys
+         */
+        function couldBeTupleType(type) {
+            const properties = type.getProperties();
+            if (properties.length === 0) {
+                return false;
+            }
+            let i = 0;
+            for (; i < properties.length; ++i) {
+                const name = properties[i].name;
+                if (String(i) !== name) {
+                    if (i === 0) {
+                        // if there are no integer properties, this is not a tuple
+                        return false;
+                    }
+                    break;
+                }
+            }
+            for (; i < properties.length; ++i) {
+                if (String(+properties[i].name) === properties[i].name) {
+                    return false; // if there are any other numeric properties, this is not a tuple
+                }
+            }
+            return true;
+        }
+        /**
+         * Returns true if there's a chance the variable has been used before a value has been assigned to it
+         */
+        function isPossiblyUsedBeforeAssigned(node) {
+            const declaration = util.getDeclaration(checker, node);
+            if (!declaration) {
+                // don't know what the declaration is for some reason, so just assume the worst
+                return true;
+            }
+            if (
+            // non-strict mode doesn't care about used before assigned errors
+            tsutils_1.isStrictCompilerOptionEnabled(compilerOptions, 'strictNullChecks') &&
+                // ignore class properties as they are compile time guarded
+                // also ignore function arguments as they can't be used before defined
+                tsutils_1.isVariableDeclaration(declaration) &&
+                // is it `const x!: number`
+                declaration.initializer === undefined &&
+                declaration.exclamationToken === undefined &&
+                declaration.type !== undefined) {
+                // check if the defined variable type has changed since assignment
+                const declarationType = checker.getTypeFromTypeNode(declaration.type);
+                const type = util.getConstrainedTypeAtLocation(checker, node);
+                if (declarationType === type) {
+                    // possibly used before assigned, so just skip it
+                    // better to false negative and skip it, than false positive and fix to compile erroring code
+                    //
+                    // no better way to figure this out right now
+                    // https://github.com/Microsoft/TypeScript/issues/31124
+                    return true;
+                }
+            }
+            return false;
+        }
+        function isConstAssertion(node) {
+            return (node.type === experimental_utils_1.AST_NODE_TYPES.TSTypeReference &&
+                node.typeName.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                node.typeName.name === 'const');
+        }
+        return {
+            TSNonNullExpression(node) {
+                const originalNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+                const type = util.getConstrainedTypeAtLocation(checker, originalNode.expression);
+                if (!util.isNullableType(type)) {
+                    if (isPossiblyUsedBeforeAssigned(originalNode.expression)) {
+                        return;
+                    }
+                    context.report({
+                        node,
+                        messageId: 'unnecessaryAssertion',
+                        fix(fixer) {
+                            return fixer.removeRange([
+                                originalNode.expression.end,
+                                originalNode.end,
+                            ]);
+                        },
+                    });
+                }
+                else {
+                    // we know it's a nullable type
+                    // so figure out if the variable is used in a place that accepts nullable types
+                    const contextualType = util.getContextualType(checker, originalNode);
+                    if (contextualType) {
+                        // in strict mode you can't assign null to undefined, so we have to make sure that
+                        // the two types share a nullable type
+                        const typeIncludesUndefined = util.isTypeFlagSet(type, ts.TypeFlags.Undefined);
+                        const typeIncludesNull = util.isTypeFlagSet(type, ts.TypeFlags.Null);
+                        const contextualTypeIncludesUndefined = util.isTypeFlagSet(contextualType, ts.TypeFlags.Undefined);
+                        const contextualTypeIncludesNull = util.isTypeFlagSet(contextualType, ts.TypeFlags.Null);
+                        // make sure that the parent accepts the same types
+                        // i.e. assigning `string | null | undefined` to `string | undefined` is invalid
+                        const isValidUndefined = typeIncludesUndefined
+                            ? contextualTypeIncludesUndefined
+                            : true;
+                        const isValidNull = typeIncludesNull
+                            ? contextualTypeIncludesNull
+                            : true;
+                        if (isValidUndefined && isValidNull) {
+                            context.report({
+                                node,
+                                messageId: 'contextuallyUnnecessary',
+                                fix(fixer) {
+                                    return fixer.removeRange([
+                                        originalNode.expression.end,
+                                        originalNode.end,
+                                    ]);
+                                },
+                            });
+                        }
+                    }
+                }
+            },
+            'TSAsExpression, TSTypeAssertion'(node) {
+                var _a;
+                if (((_a = options.typesToIgnore) === null || _a === void 0 ? void 0 : _a.includes(sourceCode.getText(node.typeAnnotation))) ||
+                    isConstAssertion(node.typeAnnotation)) {
+                    return;
+                }
+                const originalNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+                const castType = checker.getTypeAtLocation(originalNode);
+                if (tsutils_1.isTypeFlagSet(castType, ts.TypeFlags.Literal) ||
+                    (tsutils_1.isObjectType(castType) &&
+                        (tsutils_1.isObjectFlagSet(castType, ts.ObjectFlags.Tuple) ||
+                            couldBeTupleType(castType)))) {
+                    // It's not always safe to remove a cast to a literal type or tuple
+                    // type, as those types are sometimes widened without the cast.
+                    return;
+                }
+                const uncastType = checker.getTypeAtLocation(originalNode.expression);
+                if (uncastType === castType) {
+                    context.report({
+                        node,
+                        messageId: 'unnecessaryAssertion',
+                        fix(fixer) {
+                            return originalNode.kind === ts.SyntaxKind.TypeAssertionExpression
+                                ? fixer.removeRange([
+                                    node.range[0],
+                                    node.expression.range[0] - 1,
+                                ])
+                                : fixer.removeRange([
+                                    node.expression.range[1] + 1,
+                                    node.range[1],
+                                ]);
+                        },
+                    });
+                }
+                // TODO - add contextually unnecessary check for this
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-unnecessary-type-assertion.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-assertion.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-assertion.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..3123bbad421c411433131d88b21c932a07d711ce
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-assertion.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-unnecessary-type-assertion.js","sourceRoot":"","sources":["../../src/rules/no-unnecessary-type-assertion.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,qCAMiB;AACjB,+CAAiC;AACjC,8CAAgC;AAShC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,+BAA+B;IACrC,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,WAAW,EACT,qEAAqE;YACvE,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,OAAO;YACpB,oBAAoB,EAAE,IAAI;SAC3B;QACD,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE;YACR,oBAAoB,EAClB,oFAAoF;YACtF,uBAAuB,EACrB,+FAA+F;SAClG;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,aAAa,EAAE;wBACb,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;yBACf;qBACF;iBACF;aACF;SACF;QACD,IAAI,EAAE,YAAY;KACnB;IACD,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC;QACvB,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QACxD,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAEpE;;;WAGG;QACH,SAAS,gBAAgB,CAAC,IAAmB;YAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAExC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC3B,OAAO,KAAK,CAAC;aACd;YACD,IAAI,CAAC,GAAG,CAAC,CAAC;YAEV,OAAO,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBACjC,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAEhC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;oBACtB,IAAI,CAAC,KAAK,CAAC,EAAE;wBACX,0DAA0D;wBAC1D,OAAO,KAAK,CAAC;qBACd;oBACD,MAAM;iBACP;aACF;YACD,OAAO,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBACjC,IAAI,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;oBACtD,OAAO,KAAK,CAAC,CAAC,iEAAiE;iBAChF;aACF;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED;;WAEG;QACH,SAAS,4BAA4B,CAAC,IAAmB;YACvD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACvD,IAAI,CAAC,WAAW,EAAE;gBAChB,+EAA+E;gBAC/E,OAAO,IAAI,CAAC;aACb;YAED;YACE,iEAAiE;YACjE,uCAA6B,CAAC,eAAe,EAAE,kBAAkB,CAAC;gBAClE,2DAA2D;gBAC3D,sEAAsE;gBACtE,+BAAqB,CAAC,WAAW,CAAC;gBAClC,2BAA2B;gBAC3B,WAAW,CAAC,WAAW,KAAK,SAAS;gBACrC,WAAW,CAAC,gBAAgB,KAAK,SAAS;gBAC1C,WAAW,CAAC,IAAI,KAAK,SAAS,EAC9B;gBACA,kEAAkE;gBAClE,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACtE,MAAM,IAAI,GAAG,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC9D,IAAI,eAAe,KAAK,IAAI,EAAE;oBAC5B,iDAAiD;oBACjD,6FAA6F;oBAC7F,EAAE;oBACF,6CAA6C;oBAC7C,uDAAuD;oBACvD,OAAO,IAAI,CAAC;iBACb;aACF;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,SAAS,gBAAgB,CAAC,IAAuB;YAC/C,OAAO,CACL,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,eAAe;gBAC5C,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,mCAAc,CAAC,UAAU;gBAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAC/B,CAAC;QACJ,CAAC;QAED,OAAO;YACL,mBAAmB,CAAC,IAAI;gBACtB,MAAM,YAAY,GAAG,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpE,MAAM,IAAI,GAAG,IAAI,CAAC,4BAA4B,CAC5C,OAAO,EACP,YAAY,CAAC,UAAU,CACxB,CAAC;gBAEF,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;oBAC9B,IAAI,4BAA4B,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;wBACzD,OAAO;qBACR;oBAED,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,sBAAsB;wBACjC,GAAG,CAAC,KAAK;4BACP,OAAO,KAAK,CAAC,WAAW,CAAC;gCACvB,YAAY,CAAC,UAAU,CAAC,GAAG;gCAC3B,YAAY,CAAC,GAAG;6BACjB,CAAC,CAAC;wBACL,CAAC;qBACF,CAAC,CAAC;iBACJ;qBAAM;oBACL,+BAA+B;oBAC/B,+EAA+E;oBAE/E,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;oBACrE,IAAI,cAAc,EAAE;wBAClB,kFAAkF;wBAClF,sCAAsC;wBACtC,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAC9C,IAAI,EACJ,EAAE,CAAC,SAAS,CAAC,SAAS,CACvB,CAAC;wBACF,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CACzC,IAAI,EACJ,EAAE,CAAC,SAAS,CAAC,IAAI,CAClB,CAAC;wBAEF,MAAM,+BAA+B,GAAG,IAAI,CAAC,aAAa,CACxD,cAAc,EACd,EAAE,CAAC,SAAS,CAAC,SAAS,CACvB,CAAC;wBACF,MAAM,0BAA0B,GAAG,IAAI,CAAC,aAAa,CACnD,cAAc,EACd,EAAE,CAAC,SAAS,CAAC,IAAI,CAClB,CAAC;wBAEF,mDAAmD;wBACnD,gFAAgF;wBAChF,MAAM,gBAAgB,GAAG,qBAAqB;4BAC5C,CAAC,CAAC,+BAA+B;4BACjC,CAAC,CAAC,IAAI,CAAC;wBACT,MAAM,WAAW,GAAG,gBAAgB;4BAClC,CAAC,CAAC,0BAA0B;4BAC5B,CAAC,CAAC,IAAI,CAAC;wBAET,IAAI,gBAAgB,IAAI,WAAW,EAAE;4BACnC,OAAO,CAAC,MAAM,CAAC;gCACb,IAAI;gCACJ,SAAS,EAAE,yBAAyB;gCACpC,GAAG,CAAC,KAAK;oCACP,OAAO,KAAK,CAAC,WAAW,CAAC;wCACvB,YAAY,CAAC,UAAU,CAAC,GAAG;wCAC3B,YAAY,CAAC,GAAG;qCACjB,CAAC,CAAC;gCACL,CAAC;6BACF,CAAC,CAAC;yBACJ;qBACF;iBACF;YACH,CAAC;YACD,iCAAiC,CAC/B,IAAwD;;gBAExD,IACE,OAAA,OAAO,CAAC,aAAa,0CAAE,QAAQ,CAC7B,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC;oBAEzC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,EACrC;oBACA,OAAO;iBACR;gBAED,MAAM,YAAY,GAAG,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;gBAEzD,IACE,uBAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC;oBAC7C,CAAC,sBAAY,CAAC,QAAQ,CAAC;wBACrB,CAAC,yBAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;4BAC9C,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAChC;oBACA,mEAAmE;oBACnE,+DAA+D;oBAC/D,OAAO;iBACR;gBAED,MAAM,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gBAEtE,IAAI,UAAU,KAAK,QAAQ,EAAE;oBAC3B,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,sBAAsB;wBACjC,GAAG,CAAC,KAAK;4BACP,OAAO,YAAY,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,uBAAuB;gCAChE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;oCAChB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;oCACb,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;iCAC7B,CAAC;gCACJ,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;oCAChB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;oCAC5B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;iCACd,CAAC,CAAC;wBACT,CAAC;qBACF,CAAC,CAAC;iBACJ;gBAED,qDAAqD;YACvD,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-constraint.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-constraint.js
new file mode 100644
index 0000000000000000000000000000000000000000..4c57743d9865421e5769ee567d22c5794463b646
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-constraint.js
@@ -0,0 +1,90 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const semver = __importStar(require("semver"));
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+const is3dot5 = semver.satisfies(ts.version, `>= 3.5.0 || >= 3.5.1-rc || >= 3.5.0-beta`, {
+    includePrerelease: true,
+});
+const is3dot9 = is3dot5 &&
+    semver.satisfies(ts.version, `>= 3.9.0 || >= 3.9.1-rc || >= 3.9.0-beta`, {
+        includePrerelease: true,
+    });
+exports.default = util.createRule({
+    name: 'no-unnecessary-type-constraint',
+    meta: {
+        docs: {
+            category: 'Best Practices',
+            description: 'Disallows unnecessary constraints on generic types',
+            recommended: false,
+            suggestion: true,
+        },
+        fixable: 'code',
+        messages: {
+            unnecessaryConstraint: 'Constraining the generic type `{{name}}` to `{{constraint}}` does nothing and is unnecessary.',
+        },
+        schema: [],
+        type: 'suggestion',
+    },
+    defaultOptions: [],
+    create(context) {
+        if (!is3dot5) {
+            return {};
+        }
+        // In theory, we could use the type checker for more advanced constraint types...
+        // ...but in practice, these types are rare, and likely not worth requiring type info.
+        // https://github.com/typescript-eslint/typescript-eslint/pull/2516#discussion_r495731858
+        const unnecessaryConstraints = is3dot9
+            ? new Map([
+                [experimental_utils_1.AST_NODE_TYPES.TSAnyKeyword, 'any'],
+                [experimental_utils_1.AST_NODE_TYPES.TSUnknownKeyword, 'unknown'],
+            ])
+            : new Map([[experimental_utils_1.AST_NODE_TYPES.TSUnknownKeyword, 'unknown']]);
+        const inJsx = context.getFilename().toLowerCase().endsWith('tsx');
+        const checkNode = (node, inArrowFunction) => {
+            const constraint = unnecessaryConstraints.get(node.constraint.type);
+            if (constraint) {
+                context.report({
+                    data: {
+                        constraint,
+                        name: node.name.name,
+                    },
+                    fix(fixer) {
+                        return fixer.replaceTextRange([node.name.range[1], node.constraint.range[1]], inArrowFunction && inJsx ? ',' : '');
+                    },
+                    messageId: 'unnecessaryConstraint',
+                    node,
+                });
+            }
+        };
+        return {
+            ':not(ArrowFunctionExpression) > TSTypeParameterDeclaration > TSTypeParameter[constraint]'(node) {
+                checkNode(node, false);
+            },
+            'ArrowFunctionExpression > TSTypeParameterDeclaration > TSTypeParameter[constraint]'(node) {
+                checkNode(node, true);
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-unnecessary-type-constraint.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-constraint.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-constraint.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..ed95f0bbf4a22319fafa7639daa9ee4bc2a34cdd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-constraint.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-unnecessary-type-constraint.js","sourceRoot":"","sources":["../../src/rules/no-unnecessary-type-constraint.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,+CAAiC;AACjC,+CAAiC;AACjC,8CAAgC;AAUhC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAC9B,EAAE,CAAC,OAAO,EACV,0CAA0C,EAC1C;IACE,iBAAiB,EAAE,IAAI;CACxB,CACF,CAAC;AAEF,MAAM,OAAO,GACX,OAAO;IACP,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,0CAA0C,EAAE;QACvE,iBAAiB,EAAE,IAAI;KACxB,CAAC,CAAC;AAEL,kBAAe,IAAI,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,gCAAgC;IACtC,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,oDAAoD;YACjE,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,IAAI;SACjB;QACD,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE;YACR,qBAAqB,EACnB,+FAA+F;SAClG;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,YAAY;KACnB;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,EAAE,CAAC;SACX;QAED,iFAAiF;QACjF,sFAAsF;QACtF,yFAAyF;QACzF,MAAM,sBAAsB,GAAG,OAAO;YACpC,CAAC,CAAC,IAAI,GAAG,CAAC;gBACN,CAAC,mCAAc,CAAC,YAAY,EAAE,KAAK,CAAC;gBACpC,CAAC,mCAAc,CAAC,gBAAgB,EAAE,SAAS,CAAC;aAC7C,CAAC;YACJ,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,mCAAc,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAElE,MAAM,SAAS,GAAG,CAChB,IAAiC,EACjC,eAAwB,EAClB,EAAE;YACR,MAAM,UAAU,GAAG,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEpE,IAAI,UAAU,EAAE;gBACd,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI,EAAE;wBACJ,UAAU;wBACV,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;qBACrB;oBACD,GAAG,CAAC,KAAK;wBACP,OAAO,KAAK,CAAC,gBAAgB,CAC3B,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAC9C,eAAe,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACpC,CAAC;oBACJ,CAAC;oBACD,SAAS,EAAE,uBAAuB;oBAClC,IAAI;iBACL,CAAC,CAAC;aACJ;QACH,CAAC,CAAC;QAEF,OAAO;YACL,0FAA0F,CACxF,IAAiC;gBAEjC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACzB,CAAC;YACD,oFAAoF,CAClF,IAAiC;gBAEjC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxB,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-assignment.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-assignment.js
new file mode 100644
index 0000000000000000000000000000000000000000..42b1f9c55cefe97f012a8e5b25741356ba13fb13
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-assignment.js
@@ -0,0 +1,265 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-unsafe-assignment',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallows assigning any to variables and properties',
+            category: 'Possible Errors',
+            recommended: 'error',
+            requiresTypeChecking: true,
+        },
+        messages: {
+            anyAssignment: 'Unsafe assignment of an any value.',
+            unsafeArrayPattern: 'Unsafe array destructuring of an any array value.',
+            unsafeArrayPatternFromTuple: 'Unsafe array destructuring of a tuple element with an any value.',
+            unsafeAssignment: 'Unsafe assignment of type {{sender}} to a variable of type {{receiver}}.',
+            unsafeArraySpread: 'Unsafe spread of an any value in an array.',
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        const { program, esTreeNodeToTSNodeMap } = util.getParserServices(context);
+        const checker = program.getTypeChecker();
+        // returns true if the assignment reported
+        function checkArrayDestructureHelper(receiverNode, senderNode) {
+            if (receiverNode.type !== experimental_utils_1.AST_NODE_TYPES.ArrayPattern) {
+                return false;
+            }
+            const senderTsNode = esTreeNodeToTSNodeMap.get(senderNode);
+            const senderType = checker.getTypeAtLocation(senderTsNode);
+            return checkArrayDestructure(receiverNode, senderType, senderTsNode);
+        }
+        // returns true if the assignment reported
+        function checkArrayDestructure(receiverNode, senderType, senderNode) {
+            // any array
+            // const [x] = ([] as any[]);
+            if (util.isTypeAnyArrayType(senderType, checker)) {
+                context.report({
+                    node: receiverNode,
+                    messageId: 'unsafeArrayPattern',
+                });
+                return false;
+            }
+            if (!checker.isTupleType(senderType)) {
+                return true;
+            }
+            const tupleElements = util.getTypeArguments(senderType, checker);
+            // tuple with any
+            // const [x] = [1 as any];
+            let didReport = false;
+            for (let receiverIndex = 0; receiverIndex < receiverNode.elements.length; receiverIndex += 1) {
+                const receiverElement = receiverNode.elements[receiverIndex];
+                if (!receiverElement) {
+                    continue;
+                }
+                if (receiverElement.type === experimental_utils_1.AST_NODE_TYPES.RestElement) {
+                    // don't handle rests as they're not a 1:1 assignment
+                    continue;
+                }
+                const senderType = tupleElements[receiverIndex];
+                if (!senderType) {
+                    continue;
+                }
+                // check for the any type first so we can handle [[[x]]] = [any]
+                if (util.isTypeAnyType(senderType)) {
+                    context.report({
+                        node: receiverElement,
+                        messageId: 'unsafeArrayPatternFromTuple',
+                    });
+                    // we want to report on every invalid element in the tuple
+                    didReport = true;
+                }
+                else if (receiverElement.type === experimental_utils_1.AST_NODE_TYPES.ArrayPattern) {
+                    didReport = checkArrayDestructure(receiverElement, senderType, senderNode);
+                }
+                else if (receiverElement.type === experimental_utils_1.AST_NODE_TYPES.ObjectPattern) {
+                    didReport = checkObjectDestructure(receiverElement, senderType, senderNode);
+                }
+            }
+            return didReport;
+        }
+        // returns true if the assignment reported
+        function checkObjectDestructureHelper(receiverNode, senderNode) {
+            if (receiverNode.type !== experimental_utils_1.AST_NODE_TYPES.ObjectPattern) {
+                return false;
+            }
+            const senderTsNode = esTreeNodeToTSNodeMap.get(senderNode);
+            const senderType = checker.getTypeAtLocation(senderTsNode);
+            return checkObjectDestructure(receiverNode, senderType, senderTsNode);
+        }
+        // returns true if the assignment reported
+        function checkObjectDestructure(receiverNode, senderType, senderNode) {
+            const properties = new Map(senderType
+                .getProperties()
+                .map(property => [
+                property.getName(),
+                checker.getTypeOfSymbolAtLocation(property, senderNode),
+            ]));
+            let didReport = false;
+            for (let receiverIndex = 0; receiverIndex < receiverNode.properties.length; receiverIndex += 1) {
+                const receiverProperty = receiverNode.properties[receiverIndex];
+                if (receiverProperty.type === experimental_utils_1.AST_NODE_TYPES.RestElement) {
+                    // don't bother checking rest
+                    continue;
+                }
+                let key;
+                if (receiverProperty.computed === false) {
+                    key =
+                        receiverProperty.key.type === experimental_utils_1.AST_NODE_TYPES.Identifier
+                            ? receiverProperty.key.name
+                            : String(receiverProperty.key.value);
+                }
+                else if (receiverProperty.key.type === experimental_utils_1.AST_NODE_TYPES.Literal) {
+                    key = String(receiverProperty.key.value);
+                }
+                else if (receiverProperty.key.type === experimental_utils_1.AST_NODE_TYPES.TemplateLiteral &&
+                    receiverProperty.key.quasis.length === 1) {
+                    key = String(receiverProperty.key.quasis[0].value.cooked);
+                }
+                else {
+                    // can't figure out the name, so skip it
+                    continue;
+                }
+                const senderType = properties.get(key);
+                if (!senderType) {
+                    continue;
+                }
+                // check for the any type first so we can handle {x: {y: z}} = {x: any}
+                if (util.isTypeAnyType(senderType)) {
+                    context.report({
+                        node: receiverProperty.value,
+                        messageId: 'unsafeArrayPatternFromTuple',
+                    });
+                    didReport = true;
+                }
+                else if (receiverProperty.value.type === experimental_utils_1.AST_NODE_TYPES.ArrayPattern) {
+                    didReport = checkArrayDestructure(receiverProperty.value, senderType, senderNode);
+                }
+                else if (receiverProperty.value.type === experimental_utils_1.AST_NODE_TYPES.ObjectPattern) {
+                    didReport = checkObjectDestructure(receiverProperty.value, senderType, senderNode);
+                }
+            }
+            return didReport;
+        }
+        // returns true if the assignment reported
+        function checkAssignment(receiverNode, senderNode, reportingNode, comparisonType) {
+            var _a;
+            const receiverTsNode = esTreeNodeToTSNodeMap.get(receiverNode);
+            const receiverType = comparisonType === 2 /* Contextual */
+                ? (_a = util.getContextualType(checker, receiverTsNode)) !== null && _a !== void 0 ? _a : checker.getTypeAtLocation(receiverTsNode) : checker.getTypeAtLocation(receiverTsNode);
+            const senderType = checker.getTypeAtLocation(esTreeNodeToTSNodeMap.get(senderNode));
+            if (util.isTypeAnyType(senderType)) {
+                // handle cases when we assign any ==> unknown.
+                if (util.isTypeUnknownType(receiverType)) {
+                    return false;
+                }
+                context.report({
+                    node: reportingNode,
+                    messageId: 'anyAssignment',
+                });
+                return true;
+            }
+            if (comparisonType === 0 /* None */) {
+                return false;
+            }
+            const result = util.isUnsafeAssignment(senderType, receiverType, checker);
+            if (!result) {
+                return false;
+            }
+            const { sender, receiver } = result;
+            context.report({
+                node: reportingNode,
+                messageId: 'unsafeAssignment',
+                data: {
+                    sender: checker.typeToString(sender),
+                    receiver: checker.typeToString(receiver),
+                },
+            });
+            return true;
+        }
+        function getComparisonType(typeAnnotation) {
+            return typeAnnotation
+                ? // if there's a type annotation, we can do a comparison
+                    1 /* Basic */
+                : // no type annotation means the variable's type will just be inferred, thus equal
+                    0 /* None */;
+        }
+        return {
+            'VariableDeclarator[init != null]'(node) {
+                const init = util.nullThrows(node.init, util.NullThrowsReasons.MissingToken(node.type, 'init'));
+                let didReport = checkAssignment(node.id, init, node, getComparisonType(node.id.typeAnnotation));
+                if (!didReport) {
+                    didReport = checkArrayDestructureHelper(node.id, init);
+                }
+                if (!didReport) {
+                    checkObjectDestructureHelper(node.id, init);
+                }
+            },
+            'ClassProperty[value != null]'(node) {
+                checkAssignment(node.key, node.value, node, getComparisonType(node.typeAnnotation));
+            },
+            'AssignmentExpression[operator = "="], AssignmentPattern'(node) {
+                let didReport = checkAssignment(node.left, node.right, node, 1 /* Basic */);
+                if (!didReport) {
+                    didReport = checkArrayDestructureHelper(node.left, node.right);
+                }
+                if (!didReport) {
+                    checkObjectDestructureHelper(node.left, node.right);
+                }
+            },
+            // object pattern props are checked via assignments
+            ':not(ObjectPattern) > Property'(node) {
+                if (node.value.type === experimental_utils_1.AST_NODE_TYPES.AssignmentPattern ||
+                    node.value.type === experimental_utils_1.AST_NODE_TYPES.TSEmptyBodyFunctionExpression) {
+                    // handled by other selector
+                    return;
+                }
+                checkAssignment(node.key, node.value, node, 2 /* Contextual */);
+            },
+            'ArrayExpression > SpreadElement'(node) {
+                const resetNode = esTreeNodeToTSNodeMap.get(node.argument);
+                const restType = checker.getTypeAtLocation(resetNode);
+                if (util.isTypeAnyType(restType) ||
+                    util.isTypeAnyArrayType(restType, checker)) {
+                    context.report({
+                        node: node,
+                        messageId: 'unsafeArraySpread',
+                    });
+                }
+            },
+            'JSXAttribute[value != null]'(node) {
+                const value = util.nullThrows(node.value, util.NullThrowsReasons.MissingToken(node.type, 'value'));
+                if (value.type !== experimental_utils_1.AST_NODE_TYPES.JSXExpressionContainer ||
+                    value.expression.type === experimental_utils_1.AST_NODE_TYPES.JSXEmptyExpression) {
+                    return;
+                }
+                checkAssignment(node.name, value.expression, value.expression, 2 /* Contextual */);
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-unsafe-assignment.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-assignment.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-assignment.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..272d4ac3309458955200abf12dccd3ec2e642808
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-assignment.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-unsafe-assignment.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-assignment.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAE/C,8CAAgC;AAWhC,kBAAe,IAAI,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,sBAAsB;IAC5B,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,qDAAqD;YAClE,QAAQ,EAAE,iBAAiB;YAC3B,WAAW,EAAE,OAAO;YACpB,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE;YACR,aAAa,EAAE,oCAAoC;YACnD,kBAAkB,EAAE,mDAAmD;YACvE,2BAA2B,EACzB,kEAAkE;YACpE,gBAAgB,EACd,0EAA0E;YAC5E,iBAAiB,EAAE,4CAA4C;SAChE;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QAEzC,0CAA0C;QAC1C,SAAS,2BAA2B,CAClC,YAA2B,EAC3B,UAAyB;YAEzB,IAAI,YAAY,CAAC,IAAI,KAAK,mCAAc,CAAC,YAAY,EAAE;gBACrD,OAAO,KAAK,CAAC;aACd;YAED,MAAM,YAAY,GAAG,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAE3D,OAAO,qBAAqB,CAAC,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QACvE,CAAC;QAED,0CAA0C;QAC1C,SAAS,qBAAqB,CAC5B,YAAmC,EACnC,UAAmB,EACnB,UAAmB;YAEnB,YAAY;YACZ,6BAA6B;YAC7B,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE;gBAChD,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI,EAAE,YAAY;oBAClB,SAAS,EAAE,oBAAoB;iBAChC,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC;aACd;YAED,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;gBACpC,OAAO,IAAI,CAAC;aACb;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEjE,iBAAiB;YACjB,0BAA0B;YAC1B,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,KACE,IAAI,aAAa,GAAG,CAAC,EACrB,aAAa,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,EAC5C,aAAa,IAAI,CAAC,EAClB;gBACA,MAAM,eAAe,GAAG,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBAC7D,IAAI,CAAC,eAAe,EAAE;oBACpB,SAAS;iBACV;gBAED,IAAI,eAAe,CAAC,IAAI,KAAK,mCAAc,CAAC,WAAW,EAAE;oBACvD,qDAAqD;oBACrD,SAAS;iBACV;gBAED,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAwB,CAAC;gBACvE,IAAI,CAAC,UAAU,EAAE;oBACf,SAAS;iBACV;gBAED,gEAAgE;gBAChE,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;oBAClC,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,eAAe;wBACrB,SAAS,EAAE,6BAA6B;qBACzC,CAAC,CAAC;oBACH,0DAA0D;oBAC1D,SAAS,GAAG,IAAI,CAAC;iBAClB;qBAAM,IAAI,eAAe,CAAC,IAAI,KAAK,mCAAc,CAAC,YAAY,EAAE;oBAC/D,SAAS,GAAG,qBAAqB,CAC/B,eAAe,EACf,UAAU,EACV,UAAU,CACX,CAAC;iBACH;qBAAM,IAAI,eAAe,CAAC,IAAI,KAAK,mCAAc,CAAC,aAAa,EAAE;oBAChE,SAAS,GAAG,sBAAsB,CAChC,eAAe,EACf,UAAU,EACV,UAAU,CACX,CAAC;iBACH;aACF;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,0CAA0C;QAC1C,SAAS,4BAA4B,CACnC,YAA2B,EAC3B,UAAyB;YAEzB,IAAI,YAAY,CAAC,IAAI,KAAK,mCAAc,CAAC,aAAa,EAAE;gBACtD,OAAO,KAAK,CAAC;aACd;YAED,MAAM,YAAY,GAAG,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAE3D,OAAO,sBAAsB,CAAC,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QACxE,CAAC;QAED,0CAA0C;QAC1C,SAAS,sBAAsB,CAC7B,YAAoC,EACpC,UAAmB,EACnB,UAAmB;YAEnB,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,UAAU;iBACP,aAAa,EAAE;iBACf,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACf,QAAQ,CAAC,OAAO,EAAE;gBAClB,OAAO,CAAC,yBAAyB,CAAC,QAAQ,EAAE,UAAU,CAAC;aACxD,CAAC,CACL,CAAC;YAEF,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,KACE,IAAI,aAAa,GAAG,CAAC,EACrB,aAAa,GAAG,YAAY,CAAC,UAAU,CAAC,MAAM,EAC9C,aAAa,IAAI,CAAC,EAClB;gBACA,MAAM,gBAAgB,GAAG,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;gBAChE,IAAI,gBAAgB,CAAC,IAAI,KAAK,mCAAc,CAAC,WAAW,EAAE;oBACxD,6BAA6B;oBAC7B,SAAS;iBACV;gBAED,IAAI,GAAW,CAAC;gBAChB,IAAI,gBAAgB,CAAC,QAAQ,KAAK,KAAK,EAAE;oBACvC,GAAG;wBACD,gBAAgB,CAAC,GAAG,CAAC,IAAI,KAAK,mCAAc,CAAC,UAAU;4BACrD,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI;4BAC3B,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;iBAC1C;qBAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,KAAK,mCAAc,CAAC,OAAO,EAAE;oBAC/D,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;iBAC1C;qBAAM,IACL,gBAAgB,CAAC,GAAG,CAAC,IAAI,KAAK,mCAAc,CAAC,eAAe;oBAC5D,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EACxC;oBACA,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;iBAC3D;qBAAM;oBACL,wCAAwC;oBACxC,SAAS;iBACV;gBAED,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,CAAC,UAAU,EAAE;oBACf,SAAS;iBACV;gBAED,uEAAuE;gBACvE,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;oBAClC,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,gBAAgB,CAAC,KAAK;wBAC5B,SAAS,EAAE,6BAA6B;qBACzC,CAAC,CAAC;oBACH,SAAS,GAAG,IAAI,CAAC;iBAClB;qBAAM,IACL,gBAAgB,CAAC,KAAK,CAAC,IAAI,KAAK,mCAAc,CAAC,YAAY,EAC3D;oBACA,SAAS,GAAG,qBAAqB,CAC/B,gBAAgB,CAAC,KAAK,EACtB,UAAU,EACV,UAAU,CACX,CAAC;iBACH;qBAAM,IACL,gBAAgB,CAAC,KAAK,CAAC,IAAI,KAAK,mCAAc,CAAC,aAAa,EAC5D;oBACA,SAAS,GAAG,sBAAsB,CAChC,gBAAgB,CAAC,KAAK,EACtB,UAAU,EACV,UAAU,CACX,CAAC;iBACH;aACF;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,0CAA0C;QAC1C,SAAS,eAAe,CACtB,YAA2B,EAC3B,UAA+B,EAC/B,aAA4B,EAC5B,cAA8B;;YAE9B,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC/D,MAAM,YAAY,GAChB,cAAc,uBAA8B;gBAC1C,CAAC,OAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,cAA+B,CAAC,mCAChE,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAC3C,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAChD,MAAM,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAC1C,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CACtC,CAAC;YAEF,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;gBAClC,+CAA+C;gBAC/C,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE;oBACxC,OAAO,KAAK,CAAC;iBACd;gBAED,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI,EAAE,aAAa;oBACnB,SAAS,EAAE,eAAe;iBAC3B,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;aACb;YAED,IAAI,cAAc,iBAAwB,EAAE;gBAC1C,OAAO,KAAK,CAAC;aACd;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;YAC1E,IAAI,CAAC,MAAM,EAAE;gBACX,OAAO,KAAK,CAAC;aACd;YAED,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC;gBACb,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,kBAAkB;gBAC7B,IAAI,EAAE;oBACJ,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;oBACpC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC;iBACzC;aACF,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,SAAS,iBAAiB,CACxB,cAAqD;YAErD,OAAO,cAAc;gBACnB,CAAC,CAAC,uDAAuD;;gBAEzD,CAAC,CAAC,iFAAiF;gCAC9D,CAAC;QAC1B,CAAC;QAED,OAAO;YACL,kCAAkC,CAChC,IAAiC;gBAEjC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAC1B,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CACvD,CAAC;gBACF,IAAI,SAAS,GAAG,eAAe,CAC7B,IAAI,CAAC,EAAE,EACP,IAAI,EACJ,IAAI,EACJ,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,CAC1C,CAAC;gBAEF,IAAI,CAAC,SAAS,EAAE;oBACd,SAAS,GAAG,2BAA2B,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;iBACxD;gBACD,IAAI,CAAC,SAAS,EAAE;oBACd,4BAA4B,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;iBAC7C;YACH,CAAC;YACD,8BAA8B,CAAC,IAA4B;gBACzD,eAAe,CACb,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,KAAM,EACX,IAAI,EACJ,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CACvC,CAAC;YACJ,CAAC;YACD,yDAAyD,CACvD,IAAgE;gBAEhE,IAAI,SAAS,GAAG,eAAe,CAC7B,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,EACV,IAAI,gBAGL,CAAC;gBAEF,IAAI,CAAC,SAAS,EAAE;oBACd,SAAS,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;iBAChE;gBACD,IAAI,CAAC,SAAS,EAAE;oBACd,4BAA4B,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;iBACrD;YACH,CAAC;YACD,mDAAmD;YACnD,gCAAgC,CAAC,IAAuB;gBACtD,IACE,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,mCAAc,CAAC,iBAAiB;oBACpD,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,mCAAc,CAAC,6BAA6B,EAChE;oBACA,4BAA4B;oBAC5B,OAAO;iBACR;gBAED,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,qBAA4B,CAAC;YACzE,CAAC;YACD,iCAAiC,CAAC,IAA4B;gBAC5D,MAAM,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBACtD,IACE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;oBAC5B,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC1C;oBACA,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,IAAI;wBACV,SAAS,EAAE,mBAAmB;qBAC/B,CAAC,CAAC;iBACJ;YACH,CAAC;YACD,6BAA6B,CAAC,IAA2B;gBACvD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAC3B,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CACxD,CAAC;gBACF,IACE,KAAK,CAAC,IAAI,KAAK,mCAAc,CAAC,sBAAsB;oBACpD,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,mCAAc,CAAC,kBAAkB,EAC3D;oBACA,OAAO;iBACR;gBAED,eAAe,CACb,IAAI,CAAC,IAAI,EACT,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,UAAU,qBAEjB,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js
new file mode 100644
index 0000000000000000000000000000000000000000..b3d4b5d6c1de5bed39dcb97b5a9fbfd9a55e7506
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js
@@ -0,0 +1,67 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-unsafe-call',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallows calling an any type value',
+            category: 'Possible Errors',
+            recommended: 'error',
+            requiresTypeChecking: true,
+        },
+        messages: {
+            unsafeCall: 'Unsafe call of an any typed value.',
+            unsafeNew: 'Unsafe construction of an any type value.',
+            unsafeTemplateTag: 'Unsafe any typed template tag.',
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        const { program, esTreeNodeToTSNodeMap } = util.getParserServices(context);
+        const checker = program.getTypeChecker();
+        function checkCall(node, reportingNode, messageId) {
+            const tsNode = esTreeNodeToTSNodeMap.get(node);
+            const type = util.getConstrainedTypeAtLocation(checker, tsNode);
+            if (util.isTypeAnyType(type)) {
+                context.report({
+                    node: reportingNode,
+                    messageId: messageId,
+                });
+            }
+        }
+        return {
+            'CallExpression > *.callee'(node) {
+                checkCall(node, node, 'unsafeCall');
+            },
+            NewExpression(node) {
+                checkCall(node.callee, node, 'unsafeNew');
+            },
+            'TaggedTemplateExpression > *.tag'(node) {
+                checkCall(node, node, 'unsafeTemplateTag');
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-unsafe-call.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..2f8e7e8b340f6a81c6cc05b9e8dd0c3a91a367a8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-unsafe-call.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-call.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA,8CAAgC;AAIhC,kBAAe,IAAI,CAAC,UAAU,CAAiB;IAC7C,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,qCAAqC;YAClD,QAAQ,EAAE,iBAAiB;YAC3B,WAAW,EAAE,OAAO;YACpB,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE;YACR,UAAU,EAAE,oCAAoC;YAChD,SAAS,EAAE,2CAA2C;YACtD,iBAAiB,EAAE,gCAAgC;SACpD;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QAEzC,SAAS,SAAS,CAChB,IAAmB,EACnB,aAA4B,EAC5B,SAAqB;YAErB,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAEhE,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;gBAC5B,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI,EAAE,aAAa;oBACnB,SAAS,EAAE,SAAS;iBACrB,CAAC,CAAC;aACJ;QACH,CAAC;QAED,OAAO;YACL,2BAA2B,CACzB,IAAuC;gBAEvC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;YACtC,CAAC;YACD,aAAa,CAAC,IAAI;gBAChB,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAC5C,CAAC;YACD,kCAAkC,CAAC,IAAmB;gBACpD,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;YAC7C,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-member-access.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-member-access.js
new file mode 100644
index 0000000000000000000000000000000000000000..d8c7aca69ec5d8363b86236e4c64cbf68923d40f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-member-access.js
@@ -0,0 +1,106 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-unsafe-member-access',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallows member access on any typed variables',
+            category: 'Possible Errors',
+            recommended: 'error',
+            requiresTypeChecking: true,
+        },
+        messages: {
+            unsafeMemberExpression: 'Unsafe member access {{property}} on an any value.',
+            unsafeComputedMemberAccess: 'Computed name {{property}} resolves to an any value.',
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        const { program, esTreeNodeToTSNodeMap } = util.getParserServices(context);
+        const checker = program.getTypeChecker();
+        const sourceCode = context.getSourceCode();
+        const stateCache = new Map();
+        function checkMemberExpression(node) {
+            const cachedState = stateCache.get(node);
+            if (cachedState) {
+                return cachedState;
+            }
+            if (node.object.type === experimental_utils_1.AST_NODE_TYPES.MemberExpression) {
+                const objectState = checkMemberExpression(node.object);
+                if (objectState === 1 /* Unsafe */) {
+                    // if the object is unsafe, we know this will be unsafe as well
+                    // we don't need to report, as we have already reported on the inner member expr
+                    stateCache.set(node, objectState);
+                    return objectState;
+                }
+            }
+            const tsNode = esTreeNodeToTSNodeMap.get(node.object);
+            const type = checker.getTypeAtLocation(tsNode);
+            const state = util.isTypeAnyType(type) ? 1 /* Unsafe */ : 2 /* Safe */;
+            stateCache.set(node, state);
+            if (state === 1 /* Unsafe */) {
+                const propertyName = sourceCode.getText(node.property);
+                context.report({
+                    node,
+                    messageId: 'unsafeMemberExpression',
+                    data: {
+                        property: node.computed ? `[${propertyName}]` : `.${propertyName}`,
+                    },
+                });
+            }
+            return state;
+        }
+        return {
+            // ignore MemberExpression if it's parent is TSClassImplements or TSInterfaceHeritage
+            ':not(TSClassImplements, TSInterfaceHeritage) > MemberExpression': checkMemberExpression,
+            'MemberExpression[computed = true] > *.property'(node) {
+                if (
+                // x[1]
+                node.type === experimental_utils_1.AST_NODE_TYPES.Literal ||
+                    // x[1++] x[++x] etc
+                    // FUN FACT - **all** update expressions return type number, regardless of the argument's type,
+                    // because JS engines return NaN if there the argument is not a number.
+                    node.type === experimental_utils_1.AST_NODE_TYPES.UpdateExpression) {
+                    // perf optimizations - literals can obviously never be `any`
+                    return;
+                }
+                const tsNode = esTreeNodeToTSNodeMap.get(node);
+                const type = checker.getTypeAtLocation(tsNode);
+                if (util.isTypeAnyType(type)) {
+                    const propertyName = sourceCode.getText(node);
+                    context.report({
+                        node,
+                        messageId: 'unsafeComputedMemberAccess',
+                        data: {
+                            property: `[${propertyName}]`,
+                        },
+                    });
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-unsafe-member-access.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-member-access.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-member-access.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..5940dba78b0bb32468874be92afc6261886aad86
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-member-access.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-unsafe-member-access.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-member-access.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-return.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-return.js
new file mode 100644
index 0000000000000000000000000000000000000000..50b809c8c92415cf97f4b20f92ad299ffc0d4854
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-return.js
@@ -0,0 +1,137 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const tsutils_1 = require("tsutils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-unsafe-return',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallows returning any from a function',
+            category: 'Possible Errors',
+            recommended: 'error',
+            requiresTypeChecking: true,
+        },
+        messages: {
+            unsafeReturn: 'Unsafe return of an {{type}} typed value',
+            unsafeReturnAssignment: 'Unsafe return of type {{sender}} from function with return type {{receiver}}.',
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        const { program, esTreeNodeToTSNodeMap } = util.getParserServices(context);
+        const checker = program.getTypeChecker();
+        function getParentFunctionNode(node) {
+            let current = node.parent;
+            while (current) {
+                if (current.type === experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression ||
+                    current.type === experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration ||
+                    current.type === experimental_utils_1.AST_NODE_TYPES.FunctionExpression) {
+                    return current;
+                }
+                current = current.parent;
+            }
+            // this shouldn't happen in correct code, but someone may attempt to parse bad code
+            // the parser won't error, so we shouldn't throw here
+            /* istanbul ignore next */ return null;
+        }
+        function checkReturn(returnNode, reportingNode = returnNode) {
+            const tsNode = esTreeNodeToTSNodeMap.get(returnNode);
+            const anyType = util.isAnyOrAnyArrayTypeDiscriminated(tsNode, checker);
+            const functionNode = getParentFunctionNode(returnNode);
+            /* istanbul ignore if */ if (!functionNode) {
+                return;
+            }
+            // function has an explicit return type, so ensure it's a safe return
+            const returnNodeType = util.getConstrainedTypeAtLocation(checker, esTreeNodeToTSNodeMap.get(returnNode));
+            const functionTSNode = esTreeNodeToTSNodeMap.get(functionNode);
+            // function expressions will not have their return type modified based on receiver typing
+            // so we have to use the contextual typing in these cases, i.e.
+            // const foo1: () => Set<string> = () => new Set<any>();
+            // the return type of the arrow function is Set<any> even though the variable is typed as Set<string>
+            let functionType = tsutils_1.isExpression(functionTSNode)
+                ? util.getContextualType(checker, functionTSNode)
+                : checker.getTypeAtLocation(functionTSNode);
+            if (!functionType) {
+                functionType = checker.getTypeAtLocation(functionTSNode);
+            }
+            if (anyType !== 2 /* Safe */) {
+                // Allow cases when the declared return type of the function is either unknown or unknown[]
+                // and the function is returning any or any[].
+                for (const signature of functionType.getCallSignatures()) {
+                    const functionReturnType = signature.getReturnType();
+                    if (anyType === 0 /* Any */ &&
+                        util.isTypeUnknownType(functionReturnType)) {
+                        return;
+                    }
+                    if (anyType === 1 /* AnyArray */ &&
+                        util.isTypeUnknownArrayType(functionReturnType, checker)) {
+                        return;
+                    }
+                }
+                // If the function return type was not unknown/unknown[], mark usage as unsafeReturn.
+                return context.report({
+                    node: reportingNode,
+                    messageId: 'unsafeReturn',
+                    data: {
+                        type: anyType === 0 /* Any */ ? 'any' : 'any[]',
+                    },
+                });
+            }
+            for (const signature of functionType.getCallSignatures()) {
+                const functionReturnType = signature.getReturnType();
+                if (returnNodeType === functionReturnType) {
+                    // don't bother checking if they're the same
+                    // either the function is explicitly declared to return the same type
+                    // or there was no declaration, so the return type is implicit
+                    return;
+                }
+                const result = util.isUnsafeAssignment(returnNodeType, functionReturnType, checker);
+                if (!result) {
+                    return;
+                }
+                const { sender, receiver } = result;
+                return context.report({
+                    node: reportingNode,
+                    messageId: 'unsafeReturnAssignment',
+                    data: {
+                        sender: checker.typeToString(sender),
+                        receiver: checker.typeToString(receiver),
+                    },
+                });
+            }
+        }
+        return {
+            ReturnStatement(node) {
+                const argument = node.argument;
+                if (!argument) {
+                    return;
+                }
+                checkReturn(argument, node);
+            },
+            'ArrowFunctionExpression > :not(BlockStatement).body': checkReturn,
+        };
+    },
+});
+//# sourceMappingURL=no-unsafe-return.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-return.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-return.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e2f30ca0b50feeb18fbc3a20128a0ed1209d4911
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-return.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-unsafe-return.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-return.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-expressions.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-expressions.js
new file mode 100644
index 0000000000000000000000000000000000000000..1b3a2d4a1675974f090d5761c0cb5f8ca8eb6b52
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-expressions.js
@@ -0,0 +1,76 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const no_unused_expressions_1 = __importDefault(require("eslint/lib/rules/no-unused-expressions"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-unused-expressions',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow unused expressions',
+            category: 'Best Practices',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        schema: no_unused_expressions_1.default.meta.schema,
+        messages: (_a = no_unused_expressions_1.default.meta.messages) !== null && _a !== void 0 ? _a : {
+            unusedExpression: 'Expected an assignment or function call and instead saw an expression.',
+        },
+    },
+    defaultOptions: [
+        {
+            allowShortCircuit: false,
+            allowTernary: false,
+            allowTaggedTemplates: false,
+        },
+    ],
+    create(context, options) {
+        const rules = no_unused_expressions_1.default.create(context);
+        const { allowShortCircuit = false, allowTernary = false } = options[0];
+        function isValidExpression(node) {
+            if (allowShortCircuit && node.type === experimental_utils_1.AST_NODE_TYPES.LogicalExpression) {
+                return isValidExpression(node.right);
+            }
+            if (allowTernary && node.type === experimental_utils_1.AST_NODE_TYPES.ConditionalExpression) {
+                return (isValidExpression(node.alternate) &&
+                    isValidExpression(node.consequent));
+            }
+            return ((node.type === experimental_utils_1.AST_NODE_TYPES.ChainExpression &&
+                node.expression.type === experimental_utils_1.AST_NODE_TYPES.CallExpression) ||
+                node.type === experimental_utils_1.AST_NODE_TYPES.ImportExpression);
+        }
+        return {
+            ExpressionStatement(node) {
+                if (node.directive || isValidExpression(node.expression)) {
+                    return;
+                }
+                rules.ExpressionStatement(node);
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-unused-expressions.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-expressions.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-expressions.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..d9fc64616d7014aa25188c3b450515f23c72466c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-expressions.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-unused-expressions.js","sourceRoot":"","sources":["../../src/rules/no-unused-expressions.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,mGAA8D;AAC9D,8CAAgC;AAKhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,6BAA6B;YAC1C,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,IAAI;SACtB;QACD,MAAM,EAAE,+BAAQ,CAAC,IAAI,CAAC,MAAM;QAC5B,QAAQ,QAAE,+BAAQ,CAAC,IAAI,CAAC,QAAQ,mCAAI;YAClC,gBAAgB,EACd,wEAAwE;SAC3E;KACF;IACD,cAAc,EAAE;QACd;YACE,iBAAiB,EAAE,KAAK;YACxB,YAAY,EAAE,KAAK;YACnB,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD,MAAM,CAAC,OAAO,EAAE,OAAO;QACrB,MAAM,KAAK,GAAG,+BAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,EAAE,iBAAiB,GAAG,KAAK,EAAE,YAAY,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAEvE,SAAS,iBAAiB,CAAC,IAAmB;YAC5C,IAAI,iBAAiB,IAAI,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,iBAAiB,EAAE;gBACvE,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACtC;YACD,IAAI,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,qBAAqB,EAAE;gBACtE,OAAO,CACL,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;oBACjC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CACnC,CAAC;aACH;YACD,OAAO,CACL,CAAC,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,eAAe;gBAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,mCAAc,CAAC,cAAc,CAAC;gBACzD,IAAI,CAAC,IAAI,KAAK,mCAAc,CAAC,gBAAgB,CAC9C,CAAC;QACJ,CAAC;QAED,OAAO;YACL,mBAAmB,CAAC,IAAI;gBACtB,IAAI,IAAI,CAAC,SAAS,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;oBACxD,OAAO;iBACR;gBAED,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars-experimental.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars-experimental.js
new file mode 100644
index 0000000000000000000000000000000000000000..fd057221568d28323a308351f973029960a1ada9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars-experimental.js
@@ -0,0 +1,318 @@
+"use strict";
+/* eslint-disable no-fallthrough */
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.DEFAULT_IGNORED_REGEX_STRING = void 0;
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+exports.DEFAULT_IGNORED_REGEX_STRING = '^_';
+exports.default = util.createRule({
+    name: 'no-unused-vars-experimental',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallow unused variables and arguments',
+            category: 'Best Practices',
+            recommended: false,
+        },
+        deprecated: true,
+        replacedBy: ['no-unused-vars'],
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    ignoredNamesRegex: {
+                        oneOf: [
+                            {
+                                type: 'string',
+                            },
+                            {
+                                type: 'boolean',
+                                enum: [false],
+                            },
+                        ],
+                    },
+                    ignoreArgsIfArgsAfterAreUsed: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+        messages: {
+            unused: "{{type}} '{{name}}' is declared but its value is never read.",
+            unusedWithIgnorePattern: "{{type}} '{{name}}' is declared but its value is never read. Allowed unused names must match {{pattern}}.",
+            unusedImport: 'All imports in import declaration are unused.',
+            unusedTypeParameters: 'All type parameters are unused.',
+        },
+    },
+    defaultOptions: [
+        {
+            ignoredNamesRegex: exports.DEFAULT_IGNORED_REGEX_STRING,
+            ignoreArgsIfArgsAfterAreUsed: false,
+        },
+    ],
+    create(context, [userOptions]) {
+        var _a;
+        const parserServices = util.getParserServices(context, true);
+        const tsProgram = parserServices.program;
+        const afterAllDiagnosticsCallbacks = [];
+        const options = {
+            ignoredNames: userOptions && typeof userOptions.ignoredNamesRegex === 'string'
+                ? new RegExp(userOptions.ignoredNamesRegex)
+                : null,
+            ignoreArgsIfArgsAfterAreUsed: (_a = userOptions.ignoreArgsIfArgsAfterAreUsed) !== null && _a !== void 0 ? _a : false,
+        };
+        function handleIdentifier(identifier) {
+            function report(type) {
+                const node = parserServices.tsNodeToESTreeNodeMap.get(identifier);
+                const regex = options.ignoredNames;
+                const name = identifier.getText();
+                if (regex) {
+                    if (!regex.test(name)) {
+                        context.report({
+                            node,
+                            messageId: 'unusedWithIgnorePattern',
+                            data: {
+                                name,
+                                type,
+                                pattern: regex.toString(),
+                            },
+                        });
+                    }
+                }
+                else {
+                    context.report({
+                        node,
+                        messageId: 'unused',
+                        data: {
+                            name,
+                            type,
+                        },
+                    });
+                }
+            }
+            const parent = identifier.parent;
+            // is a single variable diagnostic
+            switch (parent.kind) {
+                case ts.SyntaxKind.BindingElement:
+                case ts.SyntaxKind.ObjectBindingPattern:
+                    report('Destructured Variable');
+                    break;
+                case ts.SyntaxKind.ClassDeclaration:
+                    report('Class');
+                    break;
+                case ts.SyntaxKind.EnumDeclaration:
+                    report('Enum');
+                    break;
+                case ts.SyntaxKind.FunctionDeclaration:
+                    report('Function');
+                    break;
+                // this won't happen because there are specific nodes that wrap up named/default import identifiers
+                // case ts.SyntaxKind.ImportDeclaration:
+                // import equals is always treated as a variable
+                case ts.SyntaxKind.ImportEqualsDeclaration:
+                // the default import is NOT used, but a named import is used
+                case ts.SyntaxKind.ImportClause:
+                // a named import is NOT used, but either another named import, or the default import is used
+                case ts.SyntaxKind.ImportSpecifier:
+                // a namespace import is NOT used, but the default import is used
+                case ts.SyntaxKind.NamespaceImport:
+                    report('Import');
+                    break;
+                case ts.SyntaxKind.InterfaceDeclaration:
+                    report('Interface');
+                    break;
+                case ts.SyntaxKind.MethodDeclaration:
+                    report('Method');
+                    break;
+                case ts.SyntaxKind.Parameter:
+                    handleParameterDeclaration(identifier, parent);
+                    break;
+                case ts.SyntaxKind.PropertyDeclaration:
+                    // eslint-disable-next-line @typescript-eslint/internal/prefer-ast-types-enum
+                    report('Property');
+                    break;
+                case ts.SyntaxKind.TypeAliasDeclaration:
+                    report('Type');
+                    break;
+                case ts.SyntaxKind.TypeParameter:
+                    handleTypeParam(identifier);
+                    break;
+                case ts.SyntaxKind.VariableDeclaration:
+                    report('Variable');
+                    break;
+                default:
+                    throw new Error(`Unknown node with kind ${parent.kind}.`);
+                // TODO - should we just handle this gracefully?
+                // report('Unknown Node');
+                // break;
+            }
+        }
+        const unusedParameters = new Set();
+        function handleParameterDeclaration(identifier, parent) {
+            const name = identifier.getText();
+            // regardless of if the parameter is ignored, track that it had a diagnostic fired on it
+            unusedParameters.add(identifier);
+            /*
+            NOTE - Typescript will automatically ignore parameters that have a
+                   leading underscore in their name. We cannot do anything about this.
+            */
+            function report() {
+                const node = parserServices.tsNodeToESTreeNodeMap.get(identifier);
+                context.report({
+                    node,
+                    messageId: 'unused',
+                    data: {
+                        name,
+                        type: 'Parameter',
+                    },
+                });
+            }
+            const isLastParameter = parent.parent.parameters.indexOf(parent) ===
+                parent.parent.parameters.length - 1;
+            if (!isLastParameter && options.ignoreArgsIfArgsAfterAreUsed) {
+                // once all diagnostics are processed, we can check if the following args are unused
+                afterAllDiagnosticsCallbacks.push(() => {
+                    for (const param of parent.parent.parameters) {
+                        if (!unusedParameters.has(param.name)) {
+                            return;
+                        }
+                    }
+                    // none of the following params were unused, so report
+                    report();
+                });
+            }
+            else {
+                report();
+            }
+        }
+        function handleImportDeclaration(parent) {
+            // the entire import statement is unused
+            /*
+            NOTE - Typescript will automatically ignore imports that have a
+                   leading underscore in their name. We cannot do anything about this.
+            */
+            context.report({
+                messageId: 'unusedImport',
+                node: parserServices.tsNodeToESTreeNodeMap.get(parent),
+            });
+        }
+        function handleDestructure(parent) {
+            // the entire destructure is unused
+            // note that this case only ever triggers for simple, single-level destructured objects
+            // i.e. these will not trigger it:
+            // - const {a:_a, b, c: {d}} = z;
+            // - const [a, b] = c;
+            parent.elements.forEach(element => {
+                if (element.kind === ts.SyntaxKind.BindingElement) {
+                    const name = element.name;
+                    if (name.kind === ts.SyntaxKind.Identifier) {
+                        handleIdentifier(name);
+                    }
+                }
+            });
+        }
+        function handleTypeParamList(node) {
+            // the entire generic decl list is unused
+            /*
+            NOTE - Typescript will automatically ignore generics that have a
+                   leading underscore in their name. We cannot do anything about this.
+            */
+            const parent = parserServices.tsNodeToESTreeNodeMap.get(node);
+            context.report({
+                messageId: 'unusedTypeParameters',
+                node: parent.typeParameters,
+            });
+        }
+        function handleTypeParam(identifier) {
+            context.report({
+                node: parserServices.tsNodeToESTreeNodeMap.get(identifier),
+                messageId: 'unused',
+                data: {
+                    name: identifier.getText(),
+                    type: 'Type Parameter',
+                },
+            });
+        }
+        return {
+            'Program:exit'(program) {
+                const tsNode = parserServices.esTreeNodeToTSNodeMap.get(program);
+                const sourceFile = util.getSourceFileOfNode(tsNode);
+                const diagnostics = tsProgram.getSemanticDiagnostics(sourceFile);
+                diagnostics.forEach(diag => {
+                    if (isUnusedDiagnostic(diag.code)) {
+                        if (diag.start !== undefined) {
+                            const node = util.getTokenAtPosition(sourceFile, diag.start);
+                            const parent = node.parent;
+                            if (isIdentifier(node)) {
+                                handleIdentifier(node);
+                            }
+                            else if (isImport(parent)) {
+                                handleImportDeclaration(parent);
+                            }
+                            else if (isDestructure(parent)) {
+                                handleDestructure(parent);
+                            }
+                            else if (isGeneric(node, parent)) {
+                                handleTypeParamList(parent);
+                            }
+                        }
+                    }
+                });
+                // trigger all the checks to be done after all the diagnostics have been evaluated
+                afterAllDiagnosticsCallbacks.forEach(cb => cb());
+            },
+        };
+    },
+});
+/**
+ * Checks if the diagnostic code is one of the expected "unused var" codes
+ */
+function isUnusedDiagnostic(code) {
+    return [
+        6133,
+        6138,
+        6192,
+        6196,
+        6198,
+        6199,
+        6205,
+    ].includes(code);
+}
+/**
+ * Checks if the given node is a destructuring pattern
+ */
+function isDestructure(node) {
+    return (node.kind === ts.SyntaxKind.ObjectBindingPattern ||
+        node.kind === ts.SyntaxKind.ArrayBindingPattern);
+}
+function isImport(node) {
+    return node.kind === ts.SyntaxKind.ImportDeclaration;
+}
+function isIdentifier(node) {
+    return node.kind === ts.SyntaxKind.Identifier;
+}
+function isGeneric(node, parent) {
+    return (node.kind === ts.SyntaxKind.LessThanToken &&
+        parent.typeParameters !== undefined);
+}
+//# sourceMappingURL=no-unused-vars-experimental.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars-experimental.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars-experimental.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..d5e15835db30eef55fb1876bcc59fb9239b61801
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars-experimental.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-unused-vars-experimental.js","sourceRoot":"","sources":["../../src/rules/no-unused-vars-experimental.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars.js
new file mode 100644
index 0000000000000000000000000000000000000000..3de6e7d247f8c2f7137349ea50d14a85b7371fbf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars.js
@@ -0,0 +1,483 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const scope_manager_1 = require("@typescript-eslint/scope-manager");
+const ast_utils_1 = require("eslint/lib/rules/utils/ast-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-unused-vars',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallow unused variables',
+            category: 'Variables',
+            recommended: 'warn',
+            extendsBaseRule: 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',
+                            },
+                        },
+                        additionalProperties: false,
+                    },
+                ],
+            },
+        ],
+        messages: {
+            unusedVar: "'{{varName}}' is {{action}} but never used{{additional}}.",
+        },
+    },
+    defaultOptions: [{}],
+    create(context) {
+        const filename = context.getFilename();
+        const sourceCode = context.getSourceCode();
+        const MODULE_DECL_CACHE = new Map();
+        const options = (() => {
+            var _a, _b, _c, _d;
+            const options = {
+                vars: 'all',
+                args: 'after-used',
+                ignoreRestSiblings: false,
+                caughtErrors: 'none',
+            };
+            const firstOption = context.options[0];
+            if (firstOption) {
+                if (typeof firstOption === 'string') {
+                    options.vars = firstOption;
+                }
+                else {
+                    options.vars = (_a = firstOption.vars) !== null && _a !== void 0 ? _a : options.vars;
+                    options.args = (_b = firstOption.args) !== null && _b !== void 0 ? _b : options.args;
+                    options.ignoreRestSiblings = (_c = firstOption.ignoreRestSiblings) !== null && _c !== void 0 ? _c : options.ignoreRestSiblings;
+                    options.caughtErrors = (_d = firstOption.caughtErrors) !== null && _d !== void 0 ? _d : options.caughtErrors;
+                    if (firstOption.varsIgnorePattern) {
+                        options.varsIgnorePattern = new RegExp(firstOption.varsIgnorePattern, 'u');
+                    }
+                    if (firstOption.argsIgnorePattern) {
+                        options.argsIgnorePattern = new RegExp(firstOption.argsIgnorePattern, 'u');
+                    }
+                    if (firstOption.caughtErrorsIgnorePattern) {
+                        options.caughtErrorsIgnorePattern = new RegExp(firstOption.caughtErrorsIgnorePattern, 'u');
+                    }
+                }
+            }
+            return options;
+        })();
+        function collectUnusedVariables() {
+            var _a, _b, _c;
+            /**
+             * Determines if a variable has a sibling rest property
+             * @param variable eslint-scope variable object.
+             * @returns True if the variable is exported, false if not.
+             */
+            function hasRestSpreadSibling(variable) {
+                if (options.ignoreRestSiblings) {
+                    return variable.defs.some(def => {
+                        const propertyNode = def.name.parent;
+                        const patternNode = propertyNode.parent;
+                        return (propertyNode.type === experimental_utils_1.AST_NODE_TYPES.Property &&
+                            patternNode.type === experimental_utils_1.AST_NODE_TYPES.ObjectPattern &&
+                            patternNode.properties[patternNode.properties.length - 1].type ===
+                                experimental_utils_1.AST_NODE_TYPES.RestElement);
+                    });
+                }
+                return false;
+            }
+            /**
+             * Checks whether the given variable is after the last used parameter.
+             * @param variable The variable to check.
+             * @returns `true` if the variable is defined after the last used parameter.
+             */
+            function isAfterLastUsedArg(variable) {
+                const def = variable.defs[0];
+                const params = context.getDeclaredVariables(def.node);
+                const posteriorParams = params.slice(params.indexOf(variable) + 1);
+                // If any used parameters occur after this parameter, do not report.
+                return !posteriorParams.some(v => v.references.length > 0 || v.eslintUsed);
+            }
+            const unusedVariablesOriginal = util.collectUnusedVariables(context);
+            const unusedVariablesReturn = [];
+            for (const variable of unusedVariablesOriginal) {
+                // explicit global variables don't have definitions.
+                if (variable.defs.length === 0) {
+                    unusedVariablesReturn.push(variable);
+                    continue;
+                }
+                const def = variable.defs[0];
+                if (variable.scope.type === experimental_utils_1.TSESLint.Scope.ScopeType.global &&
+                    options.vars === 'local') {
+                    // skip variables in the global scope if configured to
+                    continue;
+                }
+                // skip catch variables
+                if (def.type === experimental_utils_1.TSESLint.Scope.DefinitionType.CatchClause) {
+                    if (options.caughtErrors === 'none') {
+                        continue;
+                    }
+                    // skip ignored parameters
+                    if ('name' in def.name && ((_a = options.caughtErrorsIgnorePattern) === null || _a === void 0 ? void 0 : _a.test(def.name.name))) {
+                        continue;
+                    }
+                }
+                if (def.type === experimental_utils_1.TSESLint.Scope.DefinitionType.Parameter) {
+                    // if "args" option is "none", skip any parameter
+                    if (options.args === 'none') {
+                        continue;
+                    }
+                    // skip ignored parameters
+                    if ('name' in def.name && ((_b = options.argsIgnorePattern) === null || _b === void 0 ? void 0 : _b.test(def.name.name))) {
+                        continue;
+                    }
+                    // if "args" option is "after-used", skip used variables
+                    if (options.args === 'after-used' &&
+                        util.isFunction(def.name.parent) &&
+                        !isAfterLastUsedArg(variable)) {
+                        continue;
+                    }
+                }
+                else {
+                    // skip ignored variables
+                    if ('name' in def.name && ((_c = options.varsIgnorePattern) === null || _c === void 0 ? void 0 : _c.test(def.name.name))) {
+                        continue;
+                    }
+                }
+                if (hasRestSpreadSibling(variable)) {
+                    continue;
+                }
+                // in case another rule has run and used the collectUnusedVariables,
+                // we want to ensure our selectors that marked variables as used are respected
+                if (variable.eslintUsed) {
+                    continue;
+                }
+                unusedVariablesReturn.push(variable);
+            }
+            return unusedVariablesReturn;
+        }
+        return {
+            // declaration file handling
+            [ambientDeclarationSelector(experimental_utils_1.AST_NODE_TYPES.Program, true)](node) {
+                if (!util.isDefinitionFile(filename)) {
+                    return;
+                }
+                markDeclarationChildAsUsed(node);
+            },
+            // children of a namespace that is a child of a declared namespace are auto-exported
+            [ambientDeclarationSelector('TSModuleDeclaration[declare = true] > TSModuleBlock TSModuleDeclaration > TSModuleBlock', false)](node) {
+                markDeclarationChildAsUsed(node);
+            },
+            // declared namespace handling
+            [ambientDeclarationSelector('TSModuleDeclaration[declare = true] > TSModuleBlock', false)](node) {
+                var _a;
+                const moduleDecl = util.nullThrows((_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent, util.NullThrowsReasons.MissingParent);
+                // declared ambient modules with an `export =` statement will only export that one thing
+                // all other statements are not automatically exported in this case
+                if (moduleDecl.id.type === experimental_utils_1.AST_NODE_TYPES.Literal &&
+                    checkModuleDeclForExportEquals(moduleDecl)) {
+                    return;
+                }
+                markDeclarationChildAsUsed(node);
+            },
+            // collect
+            'Program:exit'(programNode) {
+                /**
+                 * Generates the message data about the variable being defined and unused,
+                 * including the ignore pattern if configured.
+                 * @param unusedVar eslint-scope variable object.
+                 * @returns The message data to be used with this unused variable.
+                 */
+                function getDefinedMessageData(unusedVar) {
+                    var _a;
+                    const defType = (_a = unusedVar === null || unusedVar === void 0 ? void 0 : unusedVar.defs[0]) === null || _a === void 0 ? void 0 : _a.type;
+                    let type;
+                    let pattern;
+                    if (defType === experimental_utils_1.TSESLint.Scope.DefinitionType.CatchClause &&
+                        options.caughtErrorsIgnorePattern) {
+                        type = 'args';
+                        pattern = options.caughtErrorsIgnorePattern.toString();
+                    }
+                    else if (defType === experimental_utils_1.TSESLint.Scope.DefinitionType.Parameter &&
+                        options.argsIgnorePattern) {
+                        type = 'args';
+                        pattern = options.argsIgnorePattern.toString();
+                    }
+                    else if (defType !== experimental_utils_1.TSESLint.Scope.DefinitionType.Parameter &&
+                        options.varsIgnorePattern) {
+                        type = 'vars';
+                        pattern = options.varsIgnorePattern.toString();
+                    }
+                    const additional = type
+                        ? `. Allowed unused ${type} must match ${pattern}`
+                        : '';
+                    return {
+                        varName: unusedVar.name,
+                        action: 'defined',
+                        additional,
+                    };
+                }
+                /**
+                 * Generate the warning message about the variable being
+                 * assigned and unused, including the ignore pattern if configured.
+                 * @param unusedVar eslint-scope variable object.
+                 * @returns The message data to be used with this unused variable.
+                 */
+                function getAssignedMessageData(unusedVar) {
+                    const additional = options.varsIgnorePattern
+                        ? `. Allowed unused vars must match ${options.varsIgnorePattern.toString()}`
+                        : '';
+                    return {
+                        varName: unusedVar.name,
+                        action: 'assigned a value',
+                        additional,
+                    };
+                }
+                const unusedVars = collectUnusedVariables();
+                for (let i = 0, l = unusedVars.length; i < l; ++i) {
+                    const unusedVar = unusedVars[i];
+                    // Report the first declaration.
+                    if (unusedVar.defs.length > 0) {
+                        context.report({
+                            node: unusedVar.references.length
+                                ? unusedVar.references[unusedVar.references.length - 1]
+                                    .identifier
+                                : unusedVar.identifiers[0],
+                            messageId: 'unusedVar',
+                            data: unusedVar.references.some(ref => ref.isWrite())
+                                ? getAssignedMessageData(unusedVar)
+                                : getDefinedMessageData(unusedVar),
+                        });
+                        // If there are no regular declaration, report the first `/*globals*/` comment directive.
+                    }
+                    else if ('eslintExplicitGlobalComments' in unusedVar &&
+                        unusedVar.eslintExplicitGlobalComments) {
+                        const directiveComment = unusedVar.eslintExplicitGlobalComments[0];
+                        context.report({
+                            node: programNode,
+                            loc: ast_utils_1.getNameLocationInGlobalDirectiveComment(sourceCode, directiveComment, unusedVar.name),
+                            messageId: 'unusedVar',
+                            data: getDefinedMessageData(unusedVar),
+                        });
+                    }
+                }
+            },
+        };
+        function checkModuleDeclForExportEquals(node) {
+            var _a, _b;
+            const cached = MODULE_DECL_CACHE.get(node);
+            if (cached != null) {
+                return cached;
+            }
+            for (const statement of (_b = (_a = node.body) === null || _a === void 0 ? void 0 : _a.body) !== null && _b !== void 0 ? _b : []) {
+                if (statement.type === experimental_utils_1.AST_NODE_TYPES.TSExportAssignment) {
+                    MODULE_DECL_CACHE.set(node, true);
+                    return true;
+                }
+            }
+            MODULE_DECL_CACHE.set(node, false);
+            return false;
+        }
+        function ambientDeclarationSelector(parent, childDeclare) {
+            return [
+                // Types are ambiently exported
+                `${parent} > :matches(${[
+                    experimental_utils_1.AST_NODE_TYPES.TSInterfaceDeclaration,
+                    experimental_utils_1.AST_NODE_TYPES.TSTypeAliasDeclaration,
+                ].join(', ')})`,
+                // Value things are ambiently exported if they are "declare"d
+                `${parent} > :matches(${[
+                    experimental_utils_1.AST_NODE_TYPES.ClassDeclaration,
+                    experimental_utils_1.AST_NODE_TYPES.TSDeclareFunction,
+                    experimental_utils_1.AST_NODE_TYPES.TSEnumDeclaration,
+                    experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration,
+                    experimental_utils_1.AST_NODE_TYPES.VariableDeclaration,
+                ].join(', ')})${childDeclare ? '[declare = true]' : ''}`,
+            ].join(', ');
+        }
+        function markDeclarationChildAsUsed(node) {
+            var _a;
+            const identifiers = [];
+            switch (node.type) {
+                case experimental_utils_1.AST_NODE_TYPES.TSInterfaceDeclaration:
+                case experimental_utils_1.AST_NODE_TYPES.TSTypeAliasDeclaration:
+                case experimental_utils_1.AST_NODE_TYPES.ClassDeclaration:
+                case experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration:
+                case experimental_utils_1.AST_NODE_TYPES.TSDeclareFunction:
+                case experimental_utils_1.AST_NODE_TYPES.TSEnumDeclaration:
+                case experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration:
+                    if (((_a = node.id) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.Identifier) {
+                        identifiers.push(node.id);
+                    }
+                    break;
+                case experimental_utils_1.AST_NODE_TYPES.VariableDeclaration:
+                    for (const declaration of node.declarations) {
+                        visitPattern(declaration, pattern => {
+                            identifiers.push(pattern);
+                        });
+                    }
+                    break;
+            }
+            let scope = context.getScope();
+            const shouldUseUpperScope = [
+                experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration,
+                experimental_utils_1.AST_NODE_TYPES.TSDeclareFunction,
+            ].includes(node.type);
+            if (scope.variableScope !== scope) {
+                scope = scope.variableScope;
+            }
+            else if (shouldUseUpperScope && scope.upper) {
+                scope = scope.upper;
+            }
+            for (const id of identifiers) {
+                const superVar = scope.set.get(id.name);
+                if (superVar) {
+                    superVar.eslintUsed = true;
+                }
+            }
+        }
+        function visitPattern(node, cb) {
+            const visitor = new scope_manager_1.PatternVisitor({}, node, cb);
+            visitor.visit(node);
+        }
+    },
+});
+/*
+
+###### TODO ######
+
+Edge cases that aren't currently handled due to laziness and them being super edgy edge cases
+
+
+--- function params referenced in typeof type refs in the function declaration ---
+--- NOTE - TS gets these cases wrong
+
+function _foo(
+  arg: number // arg should be unused
+): typeof arg {
+  return 1 as any;
+}
+
+function _bar(
+  arg: number, // arg should be unused
+  _arg2: typeof arg,
+) {}
+
+
+--- function names referenced in typeof type refs in the function declaration ---
+--- NOTE - TS gets these cases right
+
+function foo( // foo should be unused
+): typeof foo {
+    return 1 as any;
+}
+
+function bar( // bar should be unused
+  _arg: typeof bar
+) {}
+
+
+--- if an interface is merged into a namespace  ---
+--- NOTE - TS gets these cases wrong
+
+namespace Test {
+    interface Foo { // Foo should be unused here
+        a: string;
+    }
+    export namespace Foo {
+       export type T = 'b';
+    }
+}
+type T = Test.Foo; // Error: Namespace 'Test' has no exported member 'Foo'.
+
+
+namespace Test {
+    export interface Foo {
+        a: string;
+    }
+    namespace Foo { // Foo should be unused here
+       export type T = 'b';
+    }
+}
+type T = Test.Foo.T; // Error: Namespace 'Test' has no exported member 'Foo'.
+
+*/
+/*
+
+###### TODO ######
+
+We currently extend base `no-unused-vars` implementation because it's easier and lighter-weight.
+
+Because of this, there are a few false-negatives which won't get caught.
+We could fix these if we fork the base rule; but that's a lot of code (~650 lines) to add in.
+I didn't want to do that just yet without some real-world issues, considering these are pretty rare edge-cases.
+
+These cases are mishandled because the base rule assumes that each variable has one def, but type-value shadowing
+creates a variable with two defs
+
+--- type-only or value-only references to type/value shadowed variables ---
+--- NOTE - TS gets these cases wrong
+
+type T = 1;
+const T = 2; // this T should be unused
+
+type U = T; // this U should be unused
+const U = 3;
+
+const _V = U;
+
+
+--- partially exported type/value shadowed variables ---
+--- NOTE - TS gets these cases wrong
+
+export interface Foo {}
+const Foo = 1; // this Foo should be unused
+
+interface Bar {} // this Bar should be unused
+export const Bar = 1;
+
+*/
+//# sourceMappingURL=no-unused-vars.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..bc17bcdfe3abe8f292ee8baf9485c77382fbdc43
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-unused-vars.js","sourceRoot":"","sources":["../../src/rules/no-unused-vars.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAI+C;AAC/C,oEAAkE;AAClE,gEAA2F;AAC3F,8CAAgC;AA2BhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,2BAA2B;YACxC,QAAQ,EAAE,WAAW;YACrB,WAAW,EAAE,MAAM;YACnB,eAAe,EAAE,IAAI;SACtB;QACD,MAAM,EAAE;YACN;gBACE,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;qBACvB;oBACD;wBACE,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,IAAI,EAAE;gCACJ,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;6BACvB;4BACD,iBAAiB,EAAE;gCACjB,IAAI,EAAE,QAAQ;6BACf;4BACD,IAAI,EAAE;gCACJ,IAAI,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC;6BACpC;4BACD,kBAAkB,EAAE;gCAClB,IAAI,EAAE,SAAS;6BAChB;4BACD,iBAAiB,EAAE;gCACjB,IAAI,EAAE,QAAQ;6BACf;4BACD,YAAY,EAAE;gCACZ,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;6BACtB;4BACD,yBAAyB,EAAE;gCACzB,IAAI,EAAE,QAAQ;6BACf;yBACF;wBACD,oBAAoB,EAAE,KAAK;qBAC5B;iBACF;aACF;SACF;QACD,QAAQ,EAAE;YACR,SAAS,EAAE,2DAA2D;SACvE;KACF;IACD,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,MAAM,CAAC,OAAO;QACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAyC,CAAC;QAE3E,MAAM,OAAO,GAAG,CAAC,GAAsB,EAAE;;YACvC,MAAM,OAAO,GAAsB;gBACjC,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,YAAY;gBAClB,kBAAkB,EAAE,KAAK;gBACzB,YAAY,EAAE,MAAM;aACrB,CAAC;YAEF,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAEvC,IAAI,WAAW,EAAE;gBACf,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;oBACnC,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;iBAC5B;qBAAM;oBACL,OAAO,CAAC,IAAI,SAAG,WAAW,CAAC,IAAI,mCAAI,OAAO,CAAC,IAAI,CAAC;oBAChD,OAAO,CAAC,IAAI,SAAG,WAAW,CAAC,IAAI,mCAAI,OAAO,CAAC,IAAI,CAAC;oBAChD,OAAO,CAAC,kBAAkB,SACxB,WAAW,CAAC,kBAAkB,mCAAI,OAAO,CAAC,kBAAkB,CAAC;oBAC/D,OAAO,CAAC,YAAY,SAClB,WAAW,CAAC,YAAY,mCAAI,OAAO,CAAC,YAAY,CAAC;oBAEnD,IAAI,WAAW,CAAC,iBAAiB,EAAE;wBACjC,OAAO,CAAC,iBAAiB,GAAG,IAAI,MAAM,CACpC,WAAW,CAAC,iBAAiB,EAC7B,GAAG,CACJ,CAAC;qBACH;oBAED,IAAI,WAAW,CAAC,iBAAiB,EAAE;wBACjC,OAAO,CAAC,iBAAiB,GAAG,IAAI,MAAM,CACpC,WAAW,CAAC,iBAAiB,EAC7B,GAAG,CACJ,CAAC;qBACH;oBAED,IAAI,WAAW,CAAC,yBAAyB,EAAE;wBACzC,OAAO,CAAC,yBAAyB,GAAG,IAAI,MAAM,CAC5C,WAAW,CAAC,yBAAyB,EACrC,GAAG,CACJ,CAAC;qBACH;iBACF;aACF;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,EAAE,CAAC;QAEL,SAAS,sBAAsB;;YAC7B;;;;eAIG;YACH,SAAS,oBAAoB,CAC3B,QAAiC;gBAEjC,IAAI,OAAO,CAAC,kBAAkB,EAAE;oBAC9B,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;wBAC9B,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,MAAO,CAAC;wBACtC,MAAM,WAAW,GAAG,YAAY,CAAC,MAAO,CAAC;wBAEzC,OAAO,CACL,YAAY,CAAC,IAAI,KAAK,mCAAc,CAAC,QAAQ;4BAC7C,WAAW,CAAC,IAAI,KAAK,mCAAc,CAAC,aAAa;4BACjD,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI;gCAC5D,mCAAc,CAAC,WAAW,CAC7B,CAAC;oBACJ,CAAC,CAAC,CAAC;iBACJ;gBAED,OAAO,KAAK,CAAC;YACf,CAAC;YAED;;;;eAIG;YACH,SAAS,kBAAkB,CAAC,QAAiC;gBAC3D,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACtD,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBAEnE,oEAAoE;gBACpE,OAAO,CAAC,eAAe,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAC7C,CAAC;YACJ,CAAC;YAED,MAAM,uBAAuB,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;YACrE,MAAM,qBAAqB,GAA8B,EAAE,CAAC;YAC5D,KAAK,MAAM,QAAQ,IAAI,uBAAuB,EAAE;gBAC9C,oDAAoD;gBACpD,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC9B,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACrC,SAAS;iBACV;gBACD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAE7B,IACE,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,6BAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;oBACvD,OAAO,CAAC,IAAI,KAAK,OAAO,EACxB;oBACA,sDAAsD;oBACtD,SAAS;iBACV;gBAED,uBAAuB;gBACvB,IAAI,GAAG,CAAC,IAAI,KAAK,6BAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE;oBAC1D,IAAI,OAAO,CAAC,YAAY,KAAK,MAAM,EAAE;wBACnC,SAAS;qBACV;oBACD,0BAA0B;oBAC1B,IACE,MAAM,IAAI,GAAG,CAAC,IAAI,WAClB,OAAO,CAAC,yBAAyB,0CAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAC,EACtD;wBACA,SAAS;qBACV;iBACF;gBAED,IAAI,GAAG,CAAC,IAAI,KAAK,6BAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE;oBACxD,iDAAiD;oBACjD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;wBAC3B,SAAS;qBACV;oBACD,0BAA0B;oBAC1B,IACE,MAAM,IAAI,GAAG,CAAC,IAAI,WAClB,OAAO,CAAC,iBAAiB,0CAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAC,EAC9C;wBACA,SAAS;qBACV;oBACD,wDAAwD;oBACxD,IACE,OAAO,CAAC,IAAI,KAAK,YAAY;wBAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;wBAChC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAC7B;wBACA,SAAS;qBACV;iBACF;qBAAM;oBACL,yBAAyB;oBACzB,IACE,MAAM,IAAI,GAAG,CAAC,IAAI,WAClB,OAAO,CAAC,iBAAiB,0CAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAC,EAC9C;wBACA,SAAS;qBACV;iBACF;gBAED,IAAI,oBAAoB,CAAC,QAAQ,CAAC,EAAE;oBAClC,SAAS;iBACV;gBAED,oEAAoE;gBACpE,8EAA8E;gBAC9E,IAAI,QAAQ,CAAC,UAAU,EAAE;oBACvB,SAAS;iBACV;gBAED,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACtC;YAED,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QAED,OAAO;YACL,4BAA4B;YAC5B,CAAC,0BAA0B,CAAC,mCAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CACxD,IAA6B;gBAE7B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE;oBACpC,OAAO;iBACR;gBACD,0BAA0B,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;YAED,oFAAoF;YACpF,CAAC,0BAA0B,CACzB,yFAAyF,EACzF,KAAK,CACN,CAAC,CAAC,IAA6B;gBAC9B,0BAA0B,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;YAED,8BAA8B;YAC9B,CAAC,0BAA0B,CACzB,qDAAqD,EACrD,KAAK,CACN,CAAC,CAAC,IAA6B;;gBAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,OAChC,IAAI,CAAC,MAAM,0CAAE,MAAM,EACnB,IAAI,CAAC,iBAAiB,CAAC,aAAa,CACL,CAAC;gBAElC,wFAAwF;gBACxF,mEAAmE;gBACnE,IACE,UAAU,CAAC,EAAE,CAAC,IAAI,KAAK,mCAAc,CAAC,OAAO;oBAC7C,8BAA8B,CAAC,UAAU,CAAC,EAC1C;oBACA,OAAO;iBACR;gBAED,0BAA0B,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;YAED,UAAU;YACV,cAAc,CAAC,WAAW;gBACxB;;;;;mBAKG;gBACH,SAAS,qBAAqB,CAC5B,SAAkC;;oBAElC,MAAM,OAAO,SAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,CAAC,CAAC,2CAAG,IAAI,CAAC;oBACzC,IAAI,IAAI,CAAC;oBACT,IAAI,OAAO,CAAC;oBAEZ,IACE,OAAO,KAAK,6BAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW;wBACrD,OAAO,CAAC,yBAAyB,EACjC;wBACA,IAAI,GAAG,MAAM,CAAC;wBACd,OAAO,GAAG,OAAO,CAAC,yBAAyB,CAAC,QAAQ,EAAE,CAAC;qBACxD;yBAAM,IACL,OAAO,KAAK,6BAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS;wBACnD,OAAO,CAAC,iBAAiB,EACzB;wBACA,IAAI,GAAG,MAAM,CAAC;wBACd,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;qBAChD;yBAAM,IACL,OAAO,KAAK,6BAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS;wBACnD,OAAO,CAAC,iBAAiB,EACzB;wBACA,IAAI,GAAG,MAAM,CAAC;wBACd,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;qBAChD;oBAED,MAAM,UAAU,GAAG,IAAI;wBACrB,CAAC,CAAC,oBAAoB,IAAI,eAAe,OAAO,EAAE;wBAClD,CAAC,CAAC,EAAE,CAAC;oBAEP,OAAO;wBACL,OAAO,EAAE,SAAS,CAAC,IAAI;wBACvB,MAAM,EAAE,SAAS;wBACjB,UAAU;qBACX,CAAC;gBACJ,CAAC;gBAED;;;;;mBAKG;gBACH,SAAS,sBAAsB,CAC7B,SAAkC;oBAElC,MAAM,UAAU,GAAG,OAAO,CAAC,iBAAiB;wBAC1C,CAAC,CAAC,oCAAoC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAE;wBAC5E,CAAC,CAAC,EAAE,CAAC;oBAEP,OAAO;wBACL,OAAO,EAAE,SAAS,CAAC,IAAI;wBACvB,MAAM,EAAE,kBAAkB;wBAC1B,UAAU;qBACX,CAAC;gBACJ,CAAC;gBAED,MAAM,UAAU,GAAG,sBAAsB,EAAE,CAAC;gBAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;oBACjD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;oBAEhC,gCAAgC;oBAChC,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC7B,OAAO,CAAC,MAAM,CAAC;4BACb,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,MAAM;gCAC/B,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;qCAClD,UAAU;gCACf,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;4BAC5B,SAAS,EAAE,WAAW;4BACtB,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gCACnD,CAAC,CAAC,sBAAsB,CAAC,SAAS,CAAC;gCACnC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC;yBACrC,CAAC,CAAC;wBAEH,yFAAyF;qBAC1F;yBAAM,IACL,8BAA8B,IAAI,SAAS;wBAC3C,SAAS,CAAC,4BAA4B,EACtC;wBACA,MAAM,gBAAgB,GAAG,SAAS,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;wBAEnE,OAAO,CAAC,MAAM,CAAC;4BACb,IAAI,EAAE,WAAW;4BACjB,GAAG,EAAE,mDAAuC,CAC1C,UAAU,EACV,gBAAgB,EAChB,SAAS,CAAC,IAAI,CACf;4BACD,SAAS,EAAE,WAAW;4BACtB,IAAI,EAAE,qBAAqB,CAAC,SAAS,CAAC;yBACvC,CAAC,CAAC;qBACJ;iBACF;YACH,CAAC;SACF,CAAC;QAEF,SAAS,8BAA8B,CACrC,IAAkC;;YAElC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,MAAM,IAAI,IAAI,EAAE;gBAClB,OAAO,MAAM,CAAC;aACf;YAED,KAAK,MAAM,SAAS,gBAAI,IAAI,CAAC,IAAI,0CAAE,IAAI,mCAAI,EAAE,EAAE;gBAC7C,IAAI,SAAS,CAAC,IAAI,KAAK,mCAAc,CAAC,kBAAkB,EAAE;oBACxD,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBAClC,OAAO,IAAI,CAAC;iBACb;aACF;YAED,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QAWD,SAAS,0BAA0B,CACjC,MAAc,EACd,YAAqB;YAErB,OAAO;gBACL,+BAA+B;gBAC/B,GAAG,MAAM,eAAe;oBACtB,mCAAc,CAAC,sBAAsB;oBACrC,mCAAc,CAAC,sBAAsB;iBACtC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACf,6DAA6D;gBAC7D,GAAG,MAAM,eAAe;oBACtB,mCAAc,CAAC,gBAAgB;oBAC/B,mCAAc,CAAC,iBAAiB;oBAChC,mCAAc,CAAC,iBAAiB;oBAChC,mCAAc,CAAC,mBAAmB;oBAClC,mCAAc,CAAC,mBAAmB;iBACnC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE;aACzD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QACD,SAAS,0BAA0B,CAAC,IAA6B;;YAC/D,MAAM,WAAW,GAA0B,EAAE,CAAC;YAC9C,QAAQ,IAAI,CAAC,IAAI,EAAE;gBACjB,KAAK,mCAAc,CAAC,sBAAsB,CAAC;gBAC3C,KAAK,mCAAc,CAAC,sBAAsB,CAAC;gBAC3C,KAAK,mCAAc,CAAC,gBAAgB,CAAC;gBACrC,KAAK,mCAAc,CAAC,mBAAmB,CAAC;gBACxC,KAAK,mCAAc,CAAC,iBAAiB,CAAC;gBACtC,KAAK,mCAAc,CAAC,iBAAiB,CAAC;gBACtC,KAAK,mCAAc,CAAC,mBAAmB;oBACrC,IAAI,OAAA,IAAI,CAAC,EAAE,0CAAE,IAAI,MAAK,mCAAc,CAAC,UAAU,EAAE;wBAC/C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;qBAC3B;oBACD,MAAM;gBAER,KAAK,mCAAc,CAAC,mBAAmB;oBACrC,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE;wBAC3C,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE;4BAClC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBAC5B,CAAC,CAAC,CAAC;qBACJ;oBACD,MAAM;aACT;YAED,IAAI,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,mBAAmB,GAAG;gBAC1B,mCAAc,CAAC,mBAAmB;gBAClC,mCAAc,CAAC,iBAAiB;aACjC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEtB,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,EAAE;gBACjC,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;aAC7B;iBAAM,IAAI,mBAAmB,IAAI,KAAK,CAAC,KAAK,EAAE;gBAC7C,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;aACrB;YAED,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE;gBAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,QAAQ,EAAE;oBACZ,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;iBAC5B;aACF;QACH,CAAC;QAED,SAAS,YAAY,CACnB,IAAmB,EACnB,EAAuC;YAEvC,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2DE;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCE"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-use-before-define.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-use-before-define.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f2ef47c600aedf0c1076e2211b6623202deda77
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-use-before-define.js
@@ -0,0 +1,294 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+const SENTINEL_TYPE = /^(?:(?:Function|Class)(?:Declaration|Expression)|ArrowFunctionExpression|CatchClause|ImportDeclaration|ExportNamedDeclaration)$/;
+/**
+ * Parses a given value as options.
+ */
+function parseOptions(options) {
+    let functions = true;
+    let classes = true;
+    let enums = true;
+    let variables = true;
+    let typedefs = true;
+    let ignoreTypeReferences = true;
+    if (typeof options === 'string') {
+        functions = options !== 'nofunc';
+    }
+    else if (typeof options === 'object' && options !== null) {
+        functions = options.functions !== false;
+        classes = options.classes !== false;
+        enums = options.enums !== false;
+        variables = options.variables !== false;
+        typedefs = options.typedefs !== false;
+        ignoreTypeReferences = options.ignoreTypeReferences !== false;
+    }
+    return {
+        functions,
+        classes,
+        enums,
+        variables,
+        typedefs,
+        ignoreTypeReferences,
+    };
+}
+/**
+ * Checks whether or not a given variable is a function declaration.
+ */
+function isFunction(variable) {
+    return variable.defs[0].type === 'FunctionName';
+}
+/**
+ * Checks whether or not a given variable is a type declaration.
+ */
+function isTypedef(variable) {
+    return variable.defs[0].type === 'Type';
+}
+/**
+ * Checks whether or not a given variable is a enum declaration.
+ */
+function isOuterEnum(variable, reference) {
+    return (variable.defs[0].type == 'TSEnumName' &&
+        variable.scope.variableScope !== reference.from.variableScope);
+}
+/**
+ * Checks whether or not a given variable is a class declaration in an upper function scope.
+ */
+function isOuterClass(variable, reference) {
+    return (variable.defs[0].type === 'ClassName' &&
+        variable.scope.variableScope !== reference.from.variableScope);
+}
+/**
+ * Checks whether or not a given variable is a variable declaration in an upper function scope.
+ */
+function isOuterVariable(variable, reference) {
+    return (variable.defs[0].type === 'Variable' &&
+        variable.scope.variableScope !== reference.from.variableScope);
+}
+/**
+ * Recursively checks whether or not a given reference has a type query declaration among it's parents
+ */
+function referenceContainsTypeQuery(node) {
+    switch (node.type) {
+        case experimental_utils_1.AST_NODE_TYPES.TSTypeQuery:
+            return true;
+        case experimental_utils_1.AST_NODE_TYPES.TSQualifiedName:
+        case experimental_utils_1.AST_NODE_TYPES.Identifier:
+            if (!node.parent) {
+                return false;
+            }
+            return referenceContainsTypeQuery(node.parent);
+        default:
+            // if we find a different node, there's no chance that we're in a TSTypeQuery
+            return false;
+    }
+}
+/**
+ * Checks whether or not a given reference is a type reference.
+ */
+function isTypeReference(reference) {
+    return (reference.isTypeReference ||
+        referenceContainsTypeQuery(reference.identifier));
+}
+/**
+ * Checks whether or not a given location is inside of the range of a given node.
+ */
+function isInRange(node, location) {
+    return !!node && node.range[0] <= location && location <= node.range[1];
+}
+/**
+ * Decorators are transpiled such that the decorator is placed after the class declaration
+ * So it is considered safe
+ */
+function isClassRefInClassDecorator(variable, reference) {
+    if (variable.defs[0].type !== 'ClassName') {
+        return false;
+    }
+    if (!variable.defs[0].node.decorators ||
+        variable.defs[0].node.decorators.length === 0) {
+        return false;
+    }
+    for (const deco of variable.defs[0].node.decorators) {
+        if (reference.identifier.range[0] >= deco.range[0] &&
+            reference.identifier.range[1] <= deco.range[1]) {
+            return true;
+        }
+    }
+    return false;
+}
+/**
+ * Checks whether or not a given reference is inside of the initializers of a given variable.
+ *
+ * @returns `true` in the following cases:
+ * - var a = a
+ * - var [a = a] = list
+ * - var {a = a} = obj
+ * - for (var a in a) {}
+ * - for (var a of a) {}
+ */
+function isInInitializer(variable, reference) {
+    var _a;
+    if (variable.scope !== reference.from) {
+        return false;
+    }
+    let node = variable.identifiers[0].parent;
+    const location = reference.identifier.range[1];
+    while (node) {
+        if (node.type === experimental_utils_1.AST_NODE_TYPES.VariableDeclarator) {
+            if (isInRange(node.init, location)) {
+                return true;
+            }
+            if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) &&
+                (node.parent.parent.type === experimental_utils_1.AST_NODE_TYPES.ForInStatement ||
+                    node.parent.parent.type === experimental_utils_1.AST_NODE_TYPES.ForOfStatement) &&
+                isInRange(node.parent.parent.right, location)) {
+                return true;
+            }
+            break;
+        }
+        else if (node.type === experimental_utils_1.AST_NODE_TYPES.AssignmentPattern) {
+            if (isInRange(node.right, location)) {
+                return true;
+            }
+        }
+        else if (SENTINEL_TYPE.test(node.type)) {
+            break;
+        }
+        node = node.parent;
+    }
+    return false;
+}
+exports.default = util.createRule({
+    name: 'no-use-before-define',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallow the use of variables before they are defined',
+            category: 'Variables',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        messages: {
+            noUseBeforeDefine: "'{{name}}' was used before it was defined.",
+        },
+        schema: [
+            {
+                oneOf: [
+                    {
+                        enum: ['nofunc'],
+                    },
+                    {
+                        type: 'object',
+                        properties: {
+                            functions: { type: 'boolean' },
+                            classes: { type: 'boolean' },
+                            enums: { type: 'boolean' },
+                            variables: { type: 'boolean' },
+                            typedefs: { type: 'boolean' },
+                            ignoreTypeReferences: { type: 'boolean' },
+                        },
+                        additionalProperties: false,
+                    },
+                ],
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            functions: true,
+            classes: true,
+            enums: true,
+            variables: true,
+            typedefs: true,
+            ignoreTypeReferences: true,
+        },
+    ],
+    create(context, optionsWithDefault) {
+        const options = parseOptions(optionsWithDefault[0]);
+        /**
+         * Determines whether a given use-before-define case should be reported according to the options.
+         * @param variable The variable that gets used before being defined
+         * @param reference The reference to the variable
+         */
+        function isForbidden(variable, reference) {
+            if (options.ignoreTypeReferences && isTypeReference(reference)) {
+                return false;
+            }
+            if (isFunction(variable)) {
+                return options.functions;
+            }
+            if (isOuterClass(variable, reference)) {
+                return options.classes;
+            }
+            if (isOuterVariable(variable, reference)) {
+                return options.variables;
+            }
+            if (isOuterEnum(variable, reference)) {
+                return options.enums;
+            }
+            if (isTypedef(variable)) {
+                return options.typedefs;
+            }
+            return true;
+        }
+        /**
+         * Finds and validates all variables in a given scope.
+         */
+        function findVariablesInScope(scope) {
+            scope.references.forEach(reference => {
+                const variable = reference.resolved;
+                // Skips when the reference is:
+                // - initializations.
+                // - referring to an undefined variable.
+                // - referring to a global environment variable (there're no identifiers).
+                // - located preceded by the variable (except in initializers).
+                // - allowed by options.
+                if (reference.init ||
+                    !variable ||
+                    variable.identifiers.length === 0 ||
+                    (variable.identifiers[0].range[1] <= reference.identifier.range[1] &&
+                        !isInInitializer(variable, reference)) ||
+                    !isForbidden(variable, reference) ||
+                    isClassRefInClassDecorator(variable, reference) ||
+                    reference.from.type === experimental_utils_1.TSESLint.Scope.ScopeType.functionType) {
+                    return;
+                }
+                // Reports.
+                context.report({
+                    node: reference.identifier,
+                    messageId: 'noUseBeforeDefine',
+                    data: {
+                        name: reference.identifier.name,
+                    },
+                });
+            });
+            scope.childScopes.forEach(findVariablesInScope);
+        }
+        return {
+            Program() {
+                findVariablesInScope(context.getScope());
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-use-before-define.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-use-before-define.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-use-before-define.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..2d7dce1bdf97c746764a554ac5f59ea5ed527beb
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-use-before-define.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-use-before-define.js","sourceRoot":"","sources":["../../src/rules/no-use-before-define.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-useless-constructor.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-useless-constructor.js
new file mode 100644
index 0000000000000000000000000000000000000000..936e0839c466e3adce3a6617d1ce19cd335cf1c8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-useless-constructor.js
@@ -0,0 +1,87 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const no_useless_constructor_1 = __importDefault(require("eslint/lib/rules/no-useless-constructor"));
+const util = __importStar(require("../util"));
+/**
+ * Check if method with accessibility is not useless
+ */
+function checkAccessibility(node) {
+    switch (node.accessibility) {
+        case 'protected':
+        case 'private':
+            return false;
+        case 'public':
+            if (node.parent &&
+                node.parent.type === experimental_utils_1.AST_NODE_TYPES.ClassBody &&
+                node.parent.parent &&
+                'superClass' in node.parent.parent &&
+                node.parent.parent.superClass) {
+                return false;
+            }
+            break;
+    }
+    return true;
+}
+/**
+ * Check if method is not unless due to typescript parameter properties
+ */
+function checkParams(node) {
+    return (!node.value.params ||
+        !node.value.params.some(param => param.type === experimental_utils_1.AST_NODE_TYPES.TSParameterProperty));
+}
+exports.default = util.createRule({
+    name: 'no-useless-constructor',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallow unnecessary constructors',
+            category: 'Best Practices',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        schema: no_useless_constructor_1.default.meta.schema,
+        messages: (_a = no_useless_constructor_1.default.meta.messages) !== null && _a !== void 0 ? _a : {
+            noUselessConstructor: 'Useless constructor.',
+        },
+    },
+    defaultOptions: [],
+    create(context) {
+        const rules = no_useless_constructor_1.default.create(context);
+        return {
+            MethodDefinition(node) {
+                if (node.value &&
+                    node.value.type === experimental_utils_1.AST_NODE_TYPES.FunctionExpression &&
+                    node.value.body &&
+                    checkAccessibility(node) &&
+                    checkParams(node)) {
+                    rules.MethodDefinition(node);
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-useless-constructor.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-useless-constructor.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-useless-constructor.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..865009c387356e2f4a957bd53360f4582bed76fc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-useless-constructor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-useless-constructor.js","sourceRoot":"","sources":["../../src/rules/no-useless-constructor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,qGAA+D;AAC/D,8CAAgC;AAKhC;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAA+B;IACzD,QAAQ,IAAI,CAAC,aAAa,EAAE;QAC1B,KAAK,WAAW,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ;YACX,IACE,IAAI,CAAC,MAAM;gBACX,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,mCAAc,CAAC,SAAS;gBAC7C,IAAI,CAAC,MAAM,CAAC,MAAM;gBAClB,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;gBAClC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAC7B;gBACA,OAAO,KAAK,CAAC;aACd;YACD,MAAM;KACT;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,IAA+B;IAClD,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;QAClB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CACrB,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,mCAAc,CAAC,mBAAmB,CAC3D,CACF,CAAC;AACJ,CAAC;AAED,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,wBAAwB;IAC9B,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,mCAAmC;YAChD,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,IAAI;SACtB;QACD,MAAM,EAAE,gCAAQ,CAAC,IAAI,CAAC,MAAM;QAC5B,QAAQ,QAAE,gCAAQ,CAAC,IAAI,CAAC,QAAQ,mCAAI;YAClC,oBAAoB,EAAE,sBAAsB;SAC7C;KACF;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,gCAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO;YACL,gBAAgB,CAAC,IAAI;gBACnB,IACE,IAAI,CAAC,KAAK;oBACV,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,mCAAc,CAAC,kBAAkB;oBACrD,IAAI,CAAC,KAAK,CAAC,IAAI;oBACf,kBAAkB,CAAC,IAAI,CAAC;oBACxB,WAAW,CAAC,IAAI,CAAC,EACjB;oBACA,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;iBAC9B;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-var-requires.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-var-requires.js
new file mode 100644
index 0000000000000000000000000000000000000000..c042fe09a040bda54fe0e4bd7865bac45737789a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-var-requires.js
@@ -0,0 +1,62 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'no-var-requires',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Disallows the use of require statements except in import statements',
+            category: 'Best Practices',
+            recommended: 'error',
+        },
+        messages: {
+            noVarReqs: 'Require statement not part of import statement.',
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        return {
+            CallExpression(node) {
+                var _a;
+                const parent = ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.ChainExpression
+                    ? node.parent.parent
+                    : node.parent;
+                if (node.callee.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                    node.callee.name === 'require' &&
+                    parent &&
+                    (parent.type === experimental_utils_1.AST_NODE_TYPES.VariableDeclarator ||
+                        parent.type === experimental_utils_1.AST_NODE_TYPES.CallExpression ||
+                        parent.type === experimental_utils_1.AST_NODE_TYPES.TSAsExpression ||
+                        parent.type === experimental_utils_1.AST_NODE_TYPES.MemberExpression)) {
+                    context.report({
+                        node,
+                        messageId: 'noVarReqs',
+                    });
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=no-var-requires.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-var-requires.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-var-requires.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..3d9eefcbfb41a1c6748b7ae41483472bdd55c248
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-var-requires.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-var-requires.js","sourceRoot":"","sources":["../../src/rules/no-var-requires.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,8CAAgC;AAKhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,iBAAiB;IACvB,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,qEAAqE;YACvE,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,OAAO;SACrB;QACD,QAAQ,EAAE;YACR,SAAS,EAAE,iDAAiD;SAC7D;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,cAAc,CAAC,IAA6B;;gBAC1C,MAAM,MAAM,GACV,OAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,MAAK,mCAAc,CAAC,eAAe;oBAClD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;oBACpB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClB,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,mCAAc,CAAC,UAAU;oBAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;oBAC9B,MAAM;oBACN,CAAC,MAAM,CAAC,IAAI,KAAK,mCAAc,CAAC,kBAAkB;wBAChD,MAAM,CAAC,IAAI,KAAK,mCAAc,CAAC,cAAc;wBAC7C,MAAM,CAAC,IAAI,KAAK,mCAAc,CAAC,cAAc;wBAC7C,MAAM,CAAC,IAAI,KAAK,mCAAc,CAAC,gBAAgB,CAAC,EAClD;oBACA,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,WAAW;qBACvB,CAAC,CAAC;iBACJ;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/non-nullable-type-assertion-style.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/non-nullable-type-assertion-style.js
new file mode 100644
index 0000000000000000000000000000000000000000..03aa2dd76aef4b53ce29ef74cb8b361d06a233a8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/non-nullable-type-assertion-style.js
@@ -0,0 +1,101 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const tsutils = __importStar(require("tsutils"));
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'non-nullable-type-assertion-style',
+    meta: {
+        docs: {
+            category: 'Best Practices',
+            description: 'Prefers a non-null assertion over explicit type cast when possible',
+            recommended: false,
+            requiresTypeChecking: true,
+            suggestion: true,
+        },
+        fixable: 'code',
+        messages: {
+            preferNonNullAssertion: 'Use a ! assertion to more succintly remove null and undefined from the type.',
+        },
+        schema: [],
+        type: 'suggestion',
+    },
+    defaultOptions: [],
+    create(context) {
+        const parserServices = util.getParserServices(context);
+        const checker = parserServices.program.getTypeChecker();
+        const sourceCode = context.getSourceCode();
+        const getTypesIfNotLoose = (node) => {
+            const type = checker.getTypeAtLocation(parserServices.esTreeNodeToTSNodeMap.get(node));
+            if (tsutils.isTypeFlagSet(type, ts.TypeFlags.Any | ts.TypeFlags.Unknown)) {
+                return undefined;
+            }
+            return tsutils.unionTypeParts(type);
+        };
+        const sameTypeWithoutNullish = (assertedTypes, originalTypes) => {
+            const nonNullishOriginalTypes = originalTypes.filter(type => type.flags !== ts.TypeFlags.Null &&
+                type.flags !== ts.TypeFlags.Undefined);
+            for (const assertedType of assertedTypes) {
+                if (!nonNullishOriginalTypes.includes(assertedType)) {
+                    return false;
+                }
+            }
+            for (const originalType of nonNullishOriginalTypes) {
+                if (!assertedTypes.includes(originalType)) {
+                    return false;
+                }
+            }
+            return true;
+        };
+        const isConstAssertion = (node) => {
+            return (node.typeAnnotation.type === experimental_utils_1.AST_NODE_TYPES.TSTypeReference &&
+                node.typeAnnotation.typeName.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                node.typeAnnotation.typeName.name === 'const');
+        };
+        return {
+            'TSAsExpression, TSTypeAssertion'(node) {
+                if (isConstAssertion(node)) {
+                    return;
+                }
+                const originalTypes = getTypesIfNotLoose(node.expression);
+                if (!originalTypes) {
+                    return;
+                }
+                const assertedTypes = getTypesIfNotLoose(node.typeAnnotation);
+                if (!assertedTypes) {
+                    return;
+                }
+                if (sameTypeWithoutNullish(assertedTypes, originalTypes)) {
+                    context.report({
+                        fix(fixer) {
+                            return fixer.replaceText(node, `${sourceCode.getText(node.expression)}!`);
+                        },
+                        messageId: 'preferNonNullAssertion',
+                        node,
+                    });
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=non-nullable-type-assertion-style.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/non-nullable-type-assertion-style.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/non-nullable-type-assertion-style.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..ffa72ba3c578c4c2386dbc586e9ee7a58aa3aca1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/non-nullable-type-assertion-style.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"non-nullable-type-assertion-style.js","sourceRoot":"","sources":["../../src/rules/non-nullable-type-assertion-style.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-as-const.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-as-const.js
new file mode 100644
index 0000000000000000000000000000000000000000..caf2a55ded4ce2ba7ad0536370ead5cbcc70ade9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-as-const.js
@@ -0,0 +1,88 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'prefer-as-const',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Prefer usage of `as const` over literal type',
+            category: 'Best Practices',
+            recommended: 'error',
+            suggestion: true,
+        },
+        fixable: 'code',
+        messages: {
+            preferConstAssertion: 'Expected a `const` instead of a literal type assertion.',
+            variableConstAssertion: 'Expected a `const` assertion instead of a literal type annotation.',
+            variableSuggest: 'You should use `as const` instead of type annotation.',
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        function compareTypes(valueNode, typeNode, canFix) {
+            if (valueNode.type === experimental_utils_1.AST_NODE_TYPES.Literal &&
+                typeNode.type === experimental_utils_1.AST_NODE_TYPES.TSLiteralType &&
+                'raw' in typeNode.literal &&
+                valueNode.raw === typeNode.literal.raw) {
+                if (canFix) {
+                    context.report({
+                        node: typeNode,
+                        messageId: 'preferConstAssertion',
+                        fix: fixer => fixer.replaceText(typeNode, 'const'),
+                    });
+                }
+                else {
+                    context.report({
+                        node: typeNode,
+                        messageId: 'variableConstAssertion',
+                        suggest: [
+                            {
+                                messageId: 'variableSuggest',
+                                fix: (fixer) => [
+                                    fixer.remove(typeNode.parent),
+                                    fixer.insertTextAfter(valueNode, ' as const'),
+                                ],
+                            },
+                        ],
+                    });
+                }
+            }
+        }
+        return {
+            TSAsExpression(node) {
+                compareTypes(node.expression, node.typeAnnotation, true);
+            },
+            TSTypeAssertion(node) {
+                compareTypes(node.expression, node.typeAnnotation, true);
+            },
+            VariableDeclarator(node) {
+                if (node.init && node.id.typeAnnotation) {
+                    compareTypes(node.init, node.id.typeAnnotation.typeAnnotation, false);
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=prefer-as-const.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-as-const.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-as-const.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..93e89b80a6bac907b7ef3ec58a8799c788c9c5ab
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-as-const.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"prefer-as-const.js","sourceRoot":"","sources":["../../src/rules/prefer-as-const.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAI+C;AAC/C,8CAAgC;AAEhC,kBAAe,IAAI,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,iBAAiB;IACvB,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,8CAA8C;YAC3D,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,OAAO;YACpB,UAAU,EAAE,IAAI;SACjB;QACD,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE;YACR,oBAAoB,EAClB,yDAAyD;YAC3D,sBAAsB,EACpB,oEAAoE;YACtE,eAAe,EAAE,uDAAuD;SACzE;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,SAAS,YAAY,CACnB,SAA8B,EAC9B,QAA2B,EAC3B,MAAe;YAEf,IACE,SAAS,CAAC,IAAI,KAAK,mCAAc,CAAC,OAAO;gBACzC,QAAQ,CAAC,IAAI,KAAK,mCAAc,CAAC,aAAa;gBAC9C,KAAK,IAAI,QAAQ,CAAC,OAAO;gBACzB,SAAS,CAAC,GAAG,KAAK,QAAQ,CAAC,OAAO,CAAC,GAAG,EACtC;gBACA,IAAI,MAAM,EAAE;oBACV,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,QAAQ;wBACd,SAAS,EAAE,sBAAsB;wBACjC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC;qBACnD,CAAC,CAAC;iBACJ;qBAAM;oBACL,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,QAAQ;wBACd,SAAS,EAAE,wBAAwB;wBACnC,OAAO,EAAE;4BACP;gCACE,SAAS,EAAE,iBAAiB;gCAC5B,GAAG,EAAE,CAAC,KAAK,EAAsB,EAAE,CAAC;oCAClC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAO,CAAC;oCAC9B,KAAK,CAAC,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC;iCAC9C;6BACF;yBACF;qBACF,CAAC,CAAC;iBACJ;aACF;QACH,CAAC;QAED,OAAO;YACL,cAAc,CAAC,IAAI;gBACjB,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YAC3D,CAAC;YACD,eAAe,CAAC,IAAI;gBAClB,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YAC3D,CAAC;YACD,kBAAkB,CAAC,IAAI;gBACrB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE;oBACvC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;iBACvE;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-enum-initializers.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-enum-initializers.js
new file mode 100644
index 0000000000000000000000000000000000000000..f81e3dc4b3ef9b9dd39fad1b26045f8f36f89040
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-enum-initializers.js
@@ -0,0 +1,85 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'prefer-enum-initializers',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Prefer initializing each enums member value',
+            category: 'Best Practices',
+            recommended: false,
+            suggestion: true,
+        },
+        messages: {
+            defineInitializer: "The value of the member '{{ name }}' should be explicitly defined",
+            defineInitializerSuggestion: 'Can be fixed to {{ name }} = {{ suggested }}',
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        const sourceCode = context.getSourceCode();
+        function TSEnumDeclaration(node) {
+            const { members } = node;
+            members.forEach((member, index) => {
+                if (member.initializer == null) {
+                    const name = sourceCode.getText(member);
+                    context.report({
+                        node: member,
+                        messageId: 'defineInitializer',
+                        data: {
+                            name,
+                        },
+                        suggest: [
+                            {
+                                messageId: 'defineInitializerSuggestion',
+                                data: { name, suggested: index },
+                                fix: (fixer) => {
+                                    return fixer.replaceText(member, `${name} = ${index}`);
+                                },
+                            },
+                            {
+                                messageId: 'defineInitializerSuggestion',
+                                data: { name, suggested: index + 1 },
+                                fix: (fixer) => {
+                                    return fixer.replaceText(member, `${name} = ${index + 1}`);
+                                },
+                            },
+                            {
+                                messageId: 'defineInitializerSuggestion',
+                                data: { name, suggested: `'${name}'` },
+                                fix: (fixer) => {
+                                    return fixer.replaceText(member, `${name} = '${name}'`);
+                                },
+                            },
+                        ],
+                    });
+                }
+            });
+        }
+        return {
+            TSEnumDeclaration,
+        };
+    },
+});
+//# sourceMappingURL=prefer-enum-initializers.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-enum-initializers.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-enum-initializers.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..5a2c3bf26cd7cfab8f4744802709e8ec9c368a7d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-enum-initializers.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"prefer-enum-initializers.js","sourceRoot":"","sources":["../../src/rules/prefer-enum-initializers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA,8CAAgC;AAKhC,kBAAe,IAAI,CAAC,UAAU,CAAiB;IAC7C,IAAI,EAAE,0BAA0B;IAChC,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,6CAA6C;YAC1D,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,IAAI;SACjB;QACD,QAAQ,EAAE;YACR,iBAAiB,EACf,mEAAmE;YACrE,2BAA2B,EACzB,8CAA8C;SACjD;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAE3C,SAAS,iBAAiB,CAAC,IAAgC;YACzD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;YAEzB,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAChC,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI,EAAE;oBAC9B,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBACxC,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,MAAM;wBACZ,SAAS,EAAE,mBAAmB;wBAC9B,IAAI,EAAE;4BACJ,IAAI;yBACL;wBACD,OAAO,EAAE;4BACP;gCACE,SAAS,EAAE,6BAA6B;gCACxC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE;gCAChC,GAAG,EAAE,CAAC,KAAK,EAAoB,EAAE;oCAC/B,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC;gCACzD,CAAC;6BACF;4BACD;gCACE,SAAS,EAAE,6BAA6B;gCACxC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,GAAG,CAAC,EAAE;gCACpC,GAAG,EAAE,CAAC,KAAK,EAAoB,EAAE;oCAC/B,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;gCAC7D,CAAC;6BACF;4BACD;gCACE,SAAS,EAAE,6BAA6B;gCACxC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,GAAG,EAAE;gCACtC,GAAG,EAAE,CAAC,KAAK,EAAoB,EAAE;oCAC/B,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,IAAI,OAAO,IAAI,GAAG,CAAC,CAAC;gCAC1D,CAAC;6BACF;yBACF;qBACF,CAAC,CAAC;iBACJ;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,iBAAiB;SAClB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-for-of.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-for-of.js
new file mode 100644
index 0000000000000000000000000000000000000000..acd31ea22ab44d7290aa1a8405731ff5a80469c6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-for-of.js
@@ -0,0 +1,178 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'prefer-for-of',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Prefer a ‘for-of’ loop over a standard ‘for’ loop if the index is only used to access the array being iterated',
+            category: 'Stylistic Issues',
+            recommended: false,
+        },
+        messages: {
+            preferForOf: 'Expected a `for-of` loop instead of a `for` loop with this simple iteration.',
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        function isSingleVariableDeclaration(node) {
+            return (node !== null &&
+                node.type === experimental_utils_1.AST_NODE_TYPES.VariableDeclaration &&
+                node.kind !== 'const' &&
+                node.declarations.length === 1);
+        }
+        function isLiteral(node, value) {
+            return node.type === experimental_utils_1.AST_NODE_TYPES.Literal && node.value === value;
+        }
+        function isZeroInitialized(node) {
+            return node.init !== null && isLiteral(node.init, 0);
+        }
+        function isMatchingIdentifier(node, name) {
+            return node.type === experimental_utils_1.AST_NODE_TYPES.Identifier && node.name === name;
+        }
+        function isLessThanLengthExpression(node, name) {
+            if (node !== null &&
+                node.type === experimental_utils_1.AST_NODE_TYPES.BinaryExpression &&
+                node.operator === '<' &&
+                isMatchingIdentifier(node.left, name) &&
+                node.right.type === experimental_utils_1.AST_NODE_TYPES.MemberExpression &&
+                isMatchingIdentifier(node.right.property, 'length')) {
+                return node.right.object;
+            }
+            return null;
+        }
+        function isIncrement(node, name) {
+            if (!node) {
+                return false;
+            }
+            switch (node.type) {
+                case experimental_utils_1.AST_NODE_TYPES.UpdateExpression:
+                    // x++ or ++x
+                    return (node.operator === '++' && isMatchingIdentifier(node.argument, name));
+                case experimental_utils_1.AST_NODE_TYPES.AssignmentExpression:
+                    if (isMatchingIdentifier(node.left, name)) {
+                        if (node.operator === '+=') {
+                            // x += 1
+                            return isLiteral(node.right, 1);
+                        }
+                        else if (node.operator === '=') {
+                            // x = x + 1 or x = 1 + x
+                            const expr = node.right;
+                            return (expr.type === experimental_utils_1.AST_NODE_TYPES.BinaryExpression &&
+                                expr.operator === '+' &&
+                                ((isMatchingIdentifier(expr.left, name) &&
+                                    isLiteral(expr.right, 1)) ||
+                                    (isLiteral(expr.left, 1) &&
+                                        isMatchingIdentifier(expr.right, name))));
+                        }
+                    }
+            }
+            return false;
+        }
+        function contains(outer, inner) {
+            return (outer.range[0] <= inner.range[0] && outer.range[1] >= inner.range[1]);
+        }
+        function isAssignee(node) {
+            var _a;
+            const parent = node.parent;
+            if (!parent) {
+                return false;
+            }
+            // a[i] = 1, a[i] += 1, etc.
+            if (parent.type === experimental_utils_1.AST_NODE_TYPES.AssignmentExpression &&
+                parent.left === node) {
+                return true;
+            }
+            // delete a[i]
+            if (parent.type === experimental_utils_1.AST_NODE_TYPES.UnaryExpression &&
+                parent.operator === 'delete' &&
+                parent.argument === node) {
+                return true;
+            }
+            // a[i]++, --a[i], etc.
+            if (parent.type === experimental_utils_1.AST_NODE_TYPES.UpdateExpression &&
+                parent.argument === node) {
+                return true;
+            }
+            // [a[i]] = [0]
+            if (parent.type === experimental_utils_1.AST_NODE_TYPES.ArrayPattern) {
+                return true;
+            }
+            // [...a[i]] = [0]
+            if (parent.type === experimental_utils_1.AST_NODE_TYPES.RestElement) {
+                return true;
+            }
+            // ({ foo: a[i] }) = { foo: 0 }
+            if (parent.type === experimental_utils_1.AST_NODE_TYPES.Property &&
+                parent.value === node &&
+                ((_a = parent.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.ObjectExpression &&
+                isAssignee(parent.parent)) {
+                return true;
+            }
+            return false;
+        }
+        function isIndexOnlyUsedWithArray(body, indexVar, arrayExpression) {
+            const sourceCode = context.getSourceCode();
+            const arrayText = sourceCode.getText(arrayExpression);
+            return indexVar.references.every(reference => {
+                const id = reference.identifier;
+                const node = id.parent;
+                return (!contains(body, id) ||
+                    (node !== undefined &&
+                        node.type === experimental_utils_1.AST_NODE_TYPES.MemberExpression &&
+                        node.property === id &&
+                        sourceCode.getText(node.object) === arrayText &&
+                        !isAssignee(node)));
+            });
+        }
+        return {
+            'ForStatement:exit'(node) {
+                if (!isSingleVariableDeclaration(node.init)) {
+                    return;
+                }
+                const declarator = node.init.declarations[0];
+                if (!declarator ||
+                    !isZeroInitialized(declarator) ||
+                    declarator.id.type !== experimental_utils_1.AST_NODE_TYPES.Identifier) {
+                    return;
+                }
+                const indexName = declarator.id.name;
+                const arrayExpression = isLessThanLengthExpression(node.test, indexName);
+                if (!arrayExpression) {
+                    return;
+                }
+                const [indexVar] = context.getDeclaredVariables(node.init);
+                if (isIncrement(node.update, indexName) &&
+                    isIndexOnlyUsedWithArray(node.body, indexVar, arrayExpression)) {
+                    context.report({
+                        node,
+                        messageId: 'preferForOf',
+                    });
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=prefer-for-of.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-for-of.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-for-of.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b7cc1d9944d939d2d8710bc01a59efaa2a9a4f3b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-for-of.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"prefer-for-of.js","sourceRoot":"","sources":["../../src/rules/prefer-for-of.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-function-type.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-function-type.js
new file mode 100644
index 0000000000000000000000000000000000000000..b10172c0e36abf1292bff8aeaf0548fb5f0f6be8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-function-type.js
@@ -0,0 +1,177 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.phrases = void 0;
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.phrases = {
+    [experimental_utils_1.AST_NODE_TYPES.TSTypeLiteral]: 'Type literal',
+    [experimental_utils_1.AST_NODE_TYPES.TSInterfaceDeclaration]: 'Interface',
+};
+exports.default = util.createRule({
+    name: 'prefer-function-type',
+    meta: {
+        docs: {
+            description: 'Use function types instead of interfaces with call signatures',
+            category: 'Best Practices',
+            recommended: false,
+        },
+        fixable: 'code',
+        messages: {
+            functionTypeOverCallableType: '{{ literalOrInterface }} only has a call signature, you should use a function type instead.',
+            unexpectedThisOnFunctionOnlyInterface: "`this` refers to the function type '{{ interfaceName }}', did you intend to use a generic `this` parameter like `<Self>(this: Self, ...) => Self` instead?",
+        },
+        schema: [],
+        type: 'suggestion',
+    },
+    defaultOptions: [],
+    create(context) {
+        const sourceCode = context.getSourceCode();
+        /**
+         * Checks if there the interface has exactly one supertype that isn't named 'Function'
+         * @param node The node being checked
+         */
+        function hasOneSupertype(node) {
+            if (!node.extends || node.extends.length === 0) {
+                return false;
+            }
+            if (node.extends.length !== 1) {
+                return true;
+            }
+            const expr = node.extends[0].expression;
+            return (expr.type !== experimental_utils_1.AST_NODE_TYPES.Identifier || expr.name !== 'Function');
+        }
+        /**
+         * @param parent The parent of the call signature causing the diagnostic
+         */
+        function shouldWrapSuggestion(parent) {
+            if (!parent) {
+                return false;
+            }
+            switch (parent.type) {
+                case experimental_utils_1.AST_NODE_TYPES.TSUnionType:
+                case experimental_utils_1.AST_NODE_TYPES.TSIntersectionType:
+                case experimental_utils_1.AST_NODE_TYPES.TSArrayType:
+                    return true;
+                default:
+                    return false;
+            }
+        }
+        /**
+         * @param call The call signature causing the diagnostic
+         * @param parent The parent of the call
+         * @returns The suggestion to report
+         */
+        function renderSuggestion(call, parent) {
+            const start = call.range[0];
+            const colonPos = call.returnType.range[0] - start;
+            const text = sourceCode.getText().slice(start, call.range[1]);
+            let suggestion = `${text.slice(0, colonPos)} =>${text.slice(colonPos + 1)}`;
+            if (shouldWrapSuggestion(parent.parent)) {
+                suggestion = `(${suggestion})`;
+            }
+            if (parent.type === experimental_utils_1.AST_NODE_TYPES.TSInterfaceDeclaration) {
+                if (typeof parent.typeParameters !== 'undefined') {
+                    return `type ${sourceCode
+                        .getText()
+                        .slice(parent.id.range[0], parent.typeParameters.range[1])} = ${suggestion}`;
+                }
+                return `type ${parent.id.name} = ${suggestion}`;
+            }
+            return suggestion.endsWith(';') ? suggestion.slice(0, -1) : suggestion;
+        }
+        /**
+         * @param member The TypeElement being checked
+         * @param node The parent of member being checked
+         */
+        function checkMember(member, node, tsThisTypes = null) {
+            if ((member.type === experimental_utils_1.AST_NODE_TYPES.TSCallSignatureDeclaration ||
+                member.type === experimental_utils_1.AST_NODE_TYPES.TSConstructSignatureDeclaration) &&
+                typeof member.returnType !== 'undefined') {
+                if (tsThisTypes !== null &&
+                    tsThisTypes.length > 0 &&
+                    node.type === experimental_utils_1.AST_NODE_TYPES.TSInterfaceDeclaration) {
+                    // the message can be confusing if we don't point directly to the `this` node instead of the whole member
+                    // and in favour of generating at most one error we'll only report the first occurrence of `this` if there are multiple
+                    context.report({
+                        node: tsThisTypes[0],
+                        messageId: 'unexpectedThisOnFunctionOnlyInterface',
+                        data: {
+                            interfaceName: node.id.name,
+                        },
+                    });
+                    return;
+                }
+                const suggestion = renderSuggestion(member, node);
+                const fixStart = node.type === experimental_utils_1.AST_NODE_TYPES.TSTypeLiteral
+                    ? node.range[0]
+                    : sourceCode
+                        .getTokens(node)
+                        .filter(token => token.type === experimental_utils_1.AST_TOKEN_TYPES.Keyword &&
+                        token.value === 'interface')[0].range[0];
+                context.report({
+                    node: member,
+                    messageId: 'functionTypeOverCallableType',
+                    data: {
+                        literalOrInterface: exports.phrases[node.type],
+                    },
+                    fix(fixer) {
+                        return fixer.replaceTextRange([fixStart, node.range[1]], suggestion);
+                    },
+                });
+            }
+        }
+        let tsThisTypes = null;
+        let literalNesting = 0;
+        return {
+            TSInterfaceDeclaration() {
+                // when entering an interface reset the count of `this`s to empty.
+                tsThisTypes = [];
+            },
+            'TSInterfaceDeclaration TSThisType'(node) {
+                // inside an interface keep track of all ThisType references.
+                // unless it's inside a nested type literal in which case it's invalid code anyway
+                // we don't want to incorrectly say "it refers to name" while typescript says it's completely invalid.
+                if (literalNesting === 0 && tsThisTypes !== null) {
+                    tsThisTypes.push(node);
+                }
+            },
+            'TSInterfaceDeclaration:exit'(node) {
+                if (!hasOneSupertype(node) && node.body.body.length === 1) {
+                    checkMember(node.body.body[0], node, tsThisTypes);
+                }
+                // on exit check member and reset the array to nothing.
+                tsThisTypes = null;
+            },
+            // keep track of nested literals to avoid complaining about invalid `this` uses
+            'TSInterfaceDeclaration TSTypeLiteral'() {
+                literalNesting += 1;
+            },
+            'TSInterfaceDeclaration TSTypeLiteral:exit'() {
+                literalNesting -= 1;
+            },
+            'TSTypeLiteral[members.length = 1]'(node) {
+                checkMember(node.members[0], node);
+            },
+        };
+    },
+});
+//# sourceMappingURL=prefer-function-type.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-function-type.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-function-type.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e87d7e229dc63d7166c639e3d9cd60e211425def
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-function-type.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"prefer-function-type.js","sourceRoot":"","sources":["../../src/rules/prefer-function-type.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-includes.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-includes.js
new file mode 100644
index 0000000000000000000000000000000000000000..e352e96457d1244394ae36ee45cdcf92d5fee5cd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-includes.js
@@ -0,0 +1,208 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const regexpp_1 = require("regexpp");
+const ts = __importStar(require("typescript"));
+const util_1 = require("../util");
+exports.default = util_1.createRule({
+    name: 'prefer-includes',
+    defaultOptions: [],
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Enforce `includes` method over `indexOf` method',
+            category: 'Best Practices',
+            recommended: false,
+            requiresTypeChecking: true,
+        },
+        fixable: 'code',
+        messages: {
+            preferIncludes: "Use 'includes()' method instead.",
+            preferStringIncludes: 'Use `String#includes()` method with a string instead.',
+        },
+        schema: [],
+    },
+    create(context) {
+        const globalScope = context.getScope();
+        const services = util_1.getParserServices(context);
+        const types = services.program.getTypeChecker();
+        function isNumber(node, value) {
+            const evaluated = util_1.getStaticValue(node, globalScope);
+            return evaluated !== null && evaluated.value === value;
+        }
+        function isPositiveCheck(node) {
+            switch (node.operator) {
+                case '!==':
+                case '!=':
+                case '>':
+                    return isNumber(node.right, -1);
+                case '>=':
+                    return isNumber(node.right, 0);
+                default:
+                    return false;
+            }
+        }
+        function isNegativeCheck(node) {
+            switch (node.operator) {
+                case '===':
+                case '==':
+                case '<=':
+                    return isNumber(node.right, -1);
+                case '<':
+                    return isNumber(node.right, 0);
+                default:
+                    return false;
+            }
+        }
+        function hasSameParameters(nodeA, nodeB) {
+            if (!ts.isFunctionLike(nodeA) || !ts.isFunctionLike(nodeB)) {
+                return false;
+            }
+            const paramsA = nodeA.parameters;
+            const paramsB = nodeB.parameters;
+            if (paramsA.length !== paramsB.length) {
+                return false;
+            }
+            for (let i = 0; i < paramsA.length; ++i) {
+                const paramA = paramsA[i];
+                const paramB = paramsB[i];
+                // Check name, type, and question token once.
+                if (paramA.getText() !== paramB.getText()) {
+                    return false;
+                }
+            }
+            return true;
+        }
+        /**
+         * Parse a given node if it's a `RegExp` instance.
+         * @param node The node to parse.
+         */
+        function parseRegExp(node) {
+            const evaluated = util_1.getStaticValue(node, globalScope);
+            if (evaluated == null || !(evaluated.value instanceof RegExp)) {
+                return null;
+            }
+            const { pattern, flags } = regexpp_1.parseRegExpLiteral(evaluated.value);
+            if (pattern.alternatives.length !== 1 ||
+                flags.ignoreCase ||
+                flags.global) {
+                return null;
+            }
+            // Check if it can determine a unique string.
+            const chars = pattern.alternatives[0].elements;
+            if (!chars.every(c => c.type === 'Character')) {
+                return null;
+            }
+            // To string.
+            return String.fromCodePoint(...chars.map(c => c.value));
+        }
+        return {
+            [[
+                // a.indexOf(b) !== 1
+                "BinaryExpression > CallExpression.left > MemberExpression.callee[property.name='indexOf'][computed=false]",
+                // a?.indexOf(b) !== 1
+                "BinaryExpression > ChainExpression.left > CallExpression > MemberExpression.callee[property.name='indexOf'][computed=false]",
+            ].join(', ')](node) {
+                var _a, _b, _c;
+                // Check if the comparison is equivalent to `includes()`.
+                const callNode = node.parent;
+                const compareNode = (((_a = callNode.parent) === null || _a === void 0 ? void 0 : _a.type) ===
+                    experimental_utils_1.AST_NODE_TYPES.ChainExpression
+                    ? callNode.parent.parent
+                    : callNode.parent);
+                const negative = isNegativeCheck(compareNode);
+                if (!negative && !isPositiveCheck(compareNode)) {
+                    return;
+                }
+                // Get the symbol of `indexOf` method.
+                const tsNode = services.esTreeNodeToTSNodeMap.get(node.property);
+                const indexofMethodDeclarations = (_b = types
+                    .getSymbolAtLocation(tsNode)) === null || _b === void 0 ? void 0 : _b.getDeclarations();
+                if (indexofMethodDeclarations == null ||
+                    indexofMethodDeclarations.length === 0) {
+                    return;
+                }
+                // Check if every declaration of `indexOf` method has `includes` method
+                // and the two methods have the same parameters.
+                for (const instanceofMethodDecl of indexofMethodDeclarations) {
+                    const typeDecl = instanceofMethodDecl.parent;
+                    const type = types.getTypeAtLocation(typeDecl);
+                    const includesMethodDecl = (_c = type
+                        .getProperty('includes')) === null || _c === void 0 ? void 0 : _c.getDeclarations();
+                    if (includesMethodDecl == null ||
+                        !includesMethodDecl.some(includesMethodDecl => hasSameParameters(includesMethodDecl, instanceofMethodDecl))) {
+                        return;
+                    }
+                }
+                // Report it.
+                context.report({
+                    node: compareNode,
+                    messageId: 'preferIncludes',
+                    *fix(fixer) {
+                        if (negative) {
+                            yield fixer.insertTextBefore(callNode, '!');
+                        }
+                        yield fixer.replaceText(node.property, 'includes');
+                        yield fixer.removeRange([callNode.range[1], compareNode.range[1]]);
+                    },
+                });
+            },
+            // /bar/.test(foo)
+            'CallExpression > MemberExpression.callee[property.name="test"][computed=false]'(node) {
+                var _a;
+                const callNode = node.parent;
+                const text = callNode.arguments.length === 1 ? parseRegExp(node.object) : null;
+                if (text == null) {
+                    return;
+                }
+                //check the argument type of test methods
+                const argument = callNode.arguments[0];
+                const tsNode = services.esTreeNodeToTSNodeMap.get(argument);
+                const type = util_1.getConstrainedTypeAtLocation(types, tsNode);
+                const includesMethodDecl = (_a = type
+                    .getProperty('includes')) === null || _a === void 0 ? void 0 : _a.getDeclarations();
+                if (includesMethodDecl == null) {
+                    return;
+                }
+                context.report({
+                    node: callNode,
+                    messageId: 'preferStringIncludes',
+                    *fix(fixer) {
+                        const argNode = callNode.arguments[0];
+                        const needsParen = argNode.type !== experimental_utils_1.AST_NODE_TYPES.Literal &&
+                            argNode.type !== experimental_utils_1.AST_NODE_TYPES.TemplateLiteral &&
+                            argNode.type !== experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                            argNode.type !== experimental_utils_1.AST_NODE_TYPES.MemberExpression &&
+                            argNode.type !== experimental_utils_1.AST_NODE_TYPES.CallExpression;
+                        yield fixer.removeRange([callNode.range[0], argNode.range[0]]);
+                        if (needsParen) {
+                            yield fixer.insertTextBefore(argNode, '(');
+                            yield fixer.insertTextAfter(argNode, ')');
+                        }
+                        yield fixer.insertTextAfter(argNode, `${node.optional ? '?.' : '.'}includes(${JSON.stringify(text)}`);
+                    },
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=prefer-includes.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-includes.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-includes.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b0f5b8056f73cb891b04db101536035fb8f60ad4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-includes.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"prefer-includes.js","sourceRoot":"","sources":["../../src/rules/prefer-includes.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-literal-enum-member.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-literal-enum-member.js
new file mode 100644
index 0000000000000000000000000000000000000000..edb54e2f87454c907b72818d28b33637572d0943
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-literal-enum-member.js
@@ -0,0 +1,51 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util_1 = require("../util");
+exports.default = util_1.createRule({
+    name: 'prefer-literal-enum-member',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Require that all enum members be literal values to prevent unintended enum member name shadow issues',
+            category: 'Best Practices',
+            recommended: false,
+            requiresTypeChecking: false,
+        },
+        messages: {
+            notLiteral: `Explicit enum value must only be a literal value (string, number, boolean, etc).`,
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        return {
+            TSEnumMember(node) {
+                // If there is no initializer, then this node is just the name of the member, so ignore.
+                if (node.initializer == null) {
+                    return;
+                }
+                // any old literal
+                if (node.initializer.type === experimental_utils_1.AST_NODE_TYPES.Literal) {
+                    return;
+                }
+                // TemplateLiteral without expressions
+                if (node.initializer.type === experimental_utils_1.AST_NODE_TYPES.TemplateLiteral &&
+                    node.initializer.expressions.length === 0) {
+                    return;
+                }
+                // -1 and +1
+                if (node.initializer.type === experimental_utils_1.AST_NODE_TYPES.UnaryExpression &&
+                    ['+', '-'].includes(node.initializer.operator) &&
+                    node.initializer.argument.type === experimental_utils_1.AST_NODE_TYPES.Literal) {
+                    return;
+                }
+                context.report({
+                    node: node.id,
+                    messageId: 'notLiteral',
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=prefer-literal-enum-member.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-literal-enum-member.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-literal-enum-member.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..328fd00bf7877de4751a69481b53f2f78171b3d6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-literal-enum-member.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"prefer-literal-enum-member.js","sourceRoot":"","sources":["../../src/rules/prefer-literal-enum-member.ts"],"names":[],"mappings":";;AAAA,8EAAuE;AACvE,kCAAqC;AAErC,kBAAe,iBAAU,CAAC;IACxB,IAAI,EAAE,4BAA4B;IAClC,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EACT,sGAAsG;YACxG,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,KAAK;YAClB,oBAAoB,EAAE,KAAK;SAC5B;QACD,QAAQ,EAAE;YACR,UAAU,EAAE,kFAAkF;SAC/F;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,YAAY,CAAC,IAAI;gBACf,wFAAwF;gBACxF,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;oBAC5B,OAAO;iBACR;gBACD,kBAAkB;gBAClB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,mCAAc,CAAC,OAAO,EAAE;oBACpD,OAAO;iBACR;gBACD,sCAAsC;gBACtC,IACE,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,mCAAc,CAAC,eAAe;oBACxD,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EACzC;oBACA,OAAO;iBACR;gBACD,YAAY;gBACZ,IACE,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,mCAAc,CAAC,eAAe;oBACxD,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;oBAC9C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,KAAK,mCAAc,CAAC,OAAO,EACzD;oBACA,OAAO;iBACR;gBAED,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI,EAAE,IAAI,CAAC,EAAE;oBACb,SAAS,EAAE,YAAY;iBACxB,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-namespace-keyword.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-namespace-keyword.js
new file mode 100644
index 0000000000000000000000000000000000000000..26303e7926d7fa37a5183a5d0368995af4c43f17
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-namespace-keyword.js
@@ -0,0 +1,65 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'prefer-namespace-keyword',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Require the use of the `namespace` keyword instead of the `module` keyword to declare custom TypeScript modules',
+            category: 'Best Practices',
+            recommended: 'error',
+        },
+        fixable: 'code',
+        messages: {
+            useNamespace: "Use 'namespace' instead of 'module' to declare custom TypeScript modules.",
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        const sourceCode = context.getSourceCode();
+        return {
+            TSModuleDeclaration(node) {
+                // Do nothing if the name is a string.
+                if (!node.id || node.id.type === experimental_utils_1.AST_NODE_TYPES.Literal) {
+                    return;
+                }
+                // Get tokens of the declaration header.
+                const moduleType = sourceCode.getTokenBefore(node.id);
+                if (moduleType &&
+                    moduleType.type === experimental_utils_1.AST_TOKEN_TYPES.Identifier &&
+                    moduleType.value === 'module') {
+                    context.report({
+                        node,
+                        messageId: 'useNamespace',
+                        fix(fixer) {
+                            return fixer.replaceText(moduleType, 'namespace');
+                        },
+                    });
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=prefer-namespace-keyword.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-namespace-keyword.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-namespace-keyword.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c4765a0569d08828f0b55921e9b15c5e17a3f34f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-namespace-keyword.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"prefer-namespace-keyword.js","sourceRoot":"","sources":["../../src/rules/prefer-namespace-keyword.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,8CAAgC;AAEhC,kBAAe,IAAI,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,0BAA0B;IAChC,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EACT,iHAAiH;YACnH,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,OAAO;SACrB;QACD,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE;YACR,YAAY,EACV,2EAA2E;SAC9E;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAE3C,OAAO;YACL,mBAAmB,CAAC,IAAI;gBACtB,sCAAsC;gBACtC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,mCAAc,CAAC,OAAO,EAAE;oBACvD,OAAO;iBACR;gBACD,wCAAwC;gBACxC,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEtD,IACE,UAAU;oBACV,UAAU,CAAC,IAAI,KAAK,oCAAe,CAAC,UAAU;oBAC9C,UAAU,CAAC,KAAK,KAAK,QAAQ,EAC7B;oBACA,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,cAAc;wBACzB,GAAG,CAAC,KAAK;4BACP,OAAO,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;wBACpD,CAAC;qBACF,CAAC,CAAC;iBACJ;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-nullish-coalescing.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-nullish-coalescing.js
new file mode 100644
index 0000000000000000000000000000000000000000..840e5c3e216441c76d5ff6707d0def252b3e8a43
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-nullish-coalescing.js
@@ -0,0 +1,160 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'prefer-nullish-coalescing',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Enforce the usage of the nullish coalescing operator instead of logical chaining',
+            category: 'Best Practices',
+            recommended: false,
+            suggestion: true,
+            requiresTypeChecking: true,
+        },
+        messages: {
+            preferNullish: 'Prefer using nullish coalescing operator (`??`) instead of a logical or (`||`), as it is a safer operator.',
+            suggestNullish: 'Fix to nullish coalescing operator (`??`).',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    ignoreConditionalTests: {
+                        type: 'boolean',
+                    },
+                    ignoreMixedLogicalExpressions: {
+                        type: 'boolean',
+                    },
+                    forceSuggestionFixer: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            ignoreConditionalTests: true,
+            ignoreMixedLogicalExpressions: true,
+        },
+    ],
+    create(context, [{ ignoreConditionalTests, ignoreMixedLogicalExpressions }]) {
+        const parserServices = util.getParserServices(context);
+        const sourceCode = context.getSourceCode();
+        const checker = parserServices.program.getTypeChecker();
+        return {
+            'LogicalExpression[operator = "||"]'(node) {
+                const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+                const type = checker.getTypeAtLocation(tsNode.left);
+                const isNullish = util.isNullableType(type, { allowUndefined: true });
+                if (!isNullish) {
+                    return;
+                }
+                if (ignoreConditionalTests === true && isConditionalTest(node)) {
+                    return;
+                }
+                const isMixedLogical = isMixedLogicalExpression(node);
+                if (ignoreMixedLogicalExpressions === true && isMixedLogical) {
+                    return;
+                }
+                const barBarOperator = util.nullThrows(sourceCode.getTokenAfter(node.left, token => token.type === experimental_utils_1.AST_TOKEN_TYPES.Punctuator &&
+                    token.value === node.operator), util.NullThrowsReasons.MissingToken('operator', node.type));
+                function* fix(fixer) {
+                    if (node.parent && util.isLogicalOrOperator(node.parent)) {
+                        // '&&' and '??' operations cannot be mixed without parentheses (e.g. a && b ?? c)
+                        if (node.left.type === experimental_utils_1.AST_NODE_TYPES.LogicalExpression &&
+                            !util.isLogicalOrOperator(node.left.left)) {
+                            yield fixer.insertTextBefore(node.left.right, '(');
+                        }
+                        else {
+                            yield fixer.insertTextBefore(node.left, '(');
+                        }
+                        yield fixer.insertTextAfter(node.right, ')');
+                    }
+                    yield fixer.replaceText(barBarOperator, '??');
+                }
+                context.report({
+                    node: barBarOperator,
+                    messageId: 'preferNullish',
+                    suggest: [
+                        {
+                            messageId: 'suggestNullish',
+                            fix,
+                        },
+                    ],
+                });
+            },
+        };
+    },
+});
+function isConditionalTest(node) {
+    const parents = new Set([node]);
+    let current = node.parent;
+    while (current) {
+        parents.add(current);
+        if ((current.type === experimental_utils_1.AST_NODE_TYPES.ConditionalExpression ||
+            current.type === experimental_utils_1.AST_NODE_TYPES.DoWhileStatement ||
+            current.type === experimental_utils_1.AST_NODE_TYPES.IfStatement ||
+            current.type === experimental_utils_1.AST_NODE_TYPES.ForStatement ||
+            current.type === experimental_utils_1.AST_NODE_TYPES.WhileStatement) &&
+            parents.has(current.test)) {
+            return true;
+        }
+        if ([
+            experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression,
+            experimental_utils_1.AST_NODE_TYPES.FunctionExpression,
+        ].includes(current.type)) {
+            /**
+             * This is a weird situation like:
+             * `if (() => a || b) {}`
+             * `if (function () { return a || b }) {}`
+             */
+            return false;
+        }
+        current = current.parent;
+    }
+    return false;
+}
+function isMixedLogicalExpression(node) {
+    const seen = new Set();
+    const queue = [node.parent, node.left, node.right];
+    for (const current of queue) {
+        if (seen.has(current)) {
+            continue;
+        }
+        seen.add(current);
+        if (current && current.type === experimental_utils_1.AST_NODE_TYPES.LogicalExpression) {
+            if (current.operator === '&&') {
+                return true;
+            }
+            else if (current.operator === '||') {
+                // check the pieces of the node to catch cases like `a || b || c && d`
+                queue.push(current.parent, current.left, current.right);
+            }
+        }
+    }
+    return false;
+}
+//# sourceMappingURL=prefer-nullish-coalescing.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-nullish-coalescing.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-nullish-coalescing.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b46f8d4afc99550575c39271e3da6dfdf614ea1b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-nullish-coalescing.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"prefer-nullish-coalescing.js","sourceRoot":"","sources":["../../src/rules/prefer-nullish-coalescing.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8eb961b9440b5e072ee9fe294a027c604dd0ee4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain.js
@@ -0,0 +1,318 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+/*
+The AST is always constructed such the first element is always the deepest element.
+
+I.e. for this code: `foo && foo.bar && foo.bar.baz && foo.bar.baz.buzz`
+The AST will look like this:
+{
+  left: {
+    left: {
+      left: foo
+      right: foo.bar
+    }
+    right: foo.bar.baz
+  }
+  right: foo.bar.baz.buzz
+}
+*/
+exports.default = util.createRule({
+    name: 'prefer-optional-chain',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Prefer using concise optional chain expressions instead of chained logical ands',
+            category: 'Best Practices',
+            recommended: false,
+            suggestion: true,
+        },
+        messages: {
+            preferOptionalChain: "Prefer using an optional chain expression instead, as it's more concise and easier to read.",
+            optionalChainSuggest: 'Change to an optional chain.',
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        const sourceCode = context.getSourceCode();
+        return {
+            [[
+                'LogicalExpression[operator="&&"] > Identifier',
+                'LogicalExpression[operator="&&"] > MemberExpression',
+                'LogicalExpression[operator="&&"] > ChainExpression > MemberExpression',
+                'LogicalExpression[operator="&&"] > BinaryExpression[operator="!=="]',
+                'LogicalExpression[operator="&&"] > BinaryExpression[operator="!="]',
+            ].join(',')](initialIdentifierOrNotEqualsExpr) {
+                var _a;
+                // selector guarantees this cast
+                const initialExpression = (((_a = initialIdentifierOrNotEqualsExpr.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.ChainExpression
+                    ? initialIdentifierOrNotEqualsExpr.parent.parent
+                    : initialIdentifierOrNotEqualsExpr.parent);
+                if (initialExpression.left !== initialIdentifierOrNotEqualsExpr) {
+                    // the node(identifier or member expression) is not the deepest left node
+                    return;
+                }
+                if (!isValidChainTarget(initialIdentifierOrNotEqualsExpr, true)) {
+                    return;
+                }
+                // walk up the tree to figure out how many logical expressions we can include
+                let previous = initialExpression;
+                let current = initialExpression;
+                let previousLeftText = getText(initialIdentifierOrNotEqualsExpr);
+                let optionallyChainedCode = previousLeftText;
+                let expressionCount = 1;
+                while (current.type === experimental_utils_1.AST_NODE_TYPES.LogicalExpression) {
+                    if (!isValidChainTarget(current.right, 
+                    // only allow identifiers for the first chain - foo && foo()
+                    expressionCount === 1)) {
+                        break;
+                    }
+                    const leftText = previousLeftText;
+                    const rightText = getText(current.right);
+                    // can't just use startsWith because of cases like foo && fooBar.baz;
+                    const matchRegex = new RegExp(`^${
+                    // escape regex characters
+                    leftText.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}[^a-zA-Z0-9_$]`);
+                    if (!matchRegex.test(rightText) &&
+                        // handle redundant cases like foo.bar && foo.bar
+                        leftText !== rightText) {
+                        break;
+                    }
+                    // omit weird doubled up expression that make no sense like foo.bar && foo.bar
+                    if (rightText !== leftText) {
+                        expressionCount += 1;
+                        previousLeftText = rightText;
+                        /*
+                        Diff the left and right text to construct the fix string
+                        There are the following cases:
+            
+                        1)
+                        rightText === 'foo.bar.baz.buzz'
+                        leftText === 'foo.bar.baz'
+                        diff === '.buzz'
+            
+                        2)
+                        rightText === 'foo.bar.baz.buzz()'
+                        leftText === 'foo.bar.baz'
+                        diff === '.buzz()'
+            
+                        3)
+                        rightText === 'foo.bar.baz.buzz()'
+                        leftText === 'foo.bar.baz.buzz'
+                        diff === '()'
+            
+                        4)
+                        rightText === 'foo.bar.baz[buzz]'
+                        leftText === 'foo.bar.baz'
+                        diff === '[buzz]'
+            
+                        5)
+                        rightText === 'foo.bar.baz?.buzz'
+                        leftText === 'foo.bar.baz'
+                        diff === '?.buzz'
+                        */
+                        const diff = rightText.replace(leftText, '');
+                        if (diff.startsWith('?')) {
+                            // item was "pre optional chained"
+                            optionallyChainedCode += diff;
+                        }
+                        else {
+                            const needsDot = diff.startsWith('(') || diff.startsWith('[');
+                            optionallyChainedCode += `?${needsDot ? '.' : ''}${diff}`;
+                        }
+                    }
+                    previous = current;
+                    current = util.nullThrows(current.parent, util.NullThrowsReasons.MissingParent);
+                }
+                if (expressionCount > 1) {
+                    if (previous.right.type === experimental_utils_1.AST_NODE_TYPES.BinaryExpression) {
+                        // case like foo && foo.bar !== someValue
+                        optionallyChainedCode += ` ${previous.right.operator} ${sourceCode.getText(previous.right.right)}`;
+                    }
+                    context.report({
+                        node: previous,
+                        messageId: 'preferOptionalChain',
+                        suggest: [
+                            {
+                                messageId: 'optionalChainSuggest',
+                                fix: (fixer) => [
+                                    fixer.replaceText(previous, optionallyChainedCode),
+                                ],
+                            },
+                        ],
+                    });
+                }
+            },
+        };
+        function getText(node) {
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.BinaryExpression) {
+                return getText(
+                // isValidChainTarget ensures this is type safe
+                node.left);
+            }
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.CallExpression) {
+                const calleeText = getText(
+                // isValidChainTarget ensures this is type safe
+                node.callee);
+                // ensure that the call arguments are left untouched, or else we can break cases that _need_ whitespace:
+                // - JSX: <Foo Needs Space Between Attrs />
+                // - Unary Operators: typeof foo, await bar, delete baz
+                const closingParenToken = util.nullThrows(sourceCode.getLastToken(node), util.NullThrowsReasons.MissingToken('closing parenthesis', node.type));
+                const openingParenToken = util.nullThrows(sourceCode.getFirstTokenBetween(node.callee, closingParenToken, util.isOpeningParenToken), util.NullThrowsReasons.MissingToken('opening parenthesis', node.type));
+                const argumentsText = sourceCode.text.substring(openingParenToken.range[0], closingParenToken.range[1]);
+                return `${calleeText}${argumentsText}`;
+            }
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.Identifier) {
+                return node.name;
+            }
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.ThisExpression) {
+                return 'this';
+            }
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.ChainExpression) {
+                /* istanbul ignore if */ if (node.expression.type === experimental_utils_1.AST_NODE_TYPES.TSNonNullExpression) {
+                    // this shouldn't happen
+                    return '';
+                }
+                return getText(node.expression);
+            }
+            return getMemberExpressionText(node);
+        }
+        /**
+         * Gets a normalized representation of the given MemberExpression
+         */
+        function getMemberExpressionText(node) {
+            let objectText;
+            // cases should match the list in ALLOWED_MEMBER_OBJECT_TYPES
+            switch (node.object.type) {
+                case experimental_utils_1.AST_NODE_TYPES.CallExpression:
+                case experimental_utils_1.AST_NODE_TYPES.Identifier:
+                    objectText = getText(node.object);
+                    break;
+                case experimental_utils_1.AST_NODE_TYPES.MemberExpression:
+                    objectText = getMemberExpressionText(node.object);
+                    break;
+                case experimental_utils_1.AST_NODE_TYPES.ThisExpression:
+                    objectText = getText(node.object);
+                    break;
+                /* istanbul ignore next */
+                default:
+                    throw new Error(`Unexpected member object type: ${node.object.type}`);
+            }
+            let propertyText;
+            if (node.computed) {
+                // cases should match the list in ALLOWED_COMPUTED_PROP_TYPES
+                switch (node.property.type) {
+                    case experimental_utils_1.AST_NODE_TYPES.Identifier:
+                        propertyText = getText(node.property);
+                        break;
+                    case experimental_utils_1.AST_NODE_TYPES.Literal:
+                    case experimental_utils_1.AST_NODE_TYPES.TemplateLiteral:
+                        propertyText = sourceCode.getText(node.property);
+                        break;
+                    case experimental_utils_1.AST_NODE_TYPES.MemberExpression:
+                        propertyText = getMemberExpressionText(node.property);
+                        break;
+                    /* istanbul ignore next */
+                    default:
+                        throw new Error(`Unexpected member property type: ${node.object.type}`);
+                }
+                return `${objectText}${node.optional ? '?.' : ''}[${propertyText}]`;
+            }
+            else {
+                // cases should match the list in ALLOWED_NON_COMPUTED_PROP_TYPES
+                switch (node.property.type) {
+                    case experimental_utils_1.AST_NODE_TYPES.Identifier:
+                        propertyText = getText(node.property);
+                        break;
+                    /* istanbul ignore next */
+                    default:
+                        throw new Error(`Unexpected member property type: ${node.object.type}`);
+                }
+                return `${objectText}${node.optional ? '?.' : '.'}${propertyText}`;
+            }
+        }
+    },
+});
+const ALLOWED_MEMBER_OBJECT_TYPES = new Set([
+    experimental_utils_1.AST_NODE_TYPES.CallExpression,
+    experimental_utils_1.AST_NODE_TYPES.Identifier,
+    experimental_utils_1.AST_NODE_TYPES.MemberExpression,
+    experimental_utils_1.AST_NODE_TYPES.ThisExpression,
+]);
+const ALLOWED_COMPUTED_PROP_TYPES = new Set([
+    experimental_utils_1.AST_NODE_TYPES.Identifier,
+    experimental_utils_1.AST_NODE_TYPES.Literal,
+    experimental_utils_1.AST_NODE_TYPES.MemberExpression,
+    experimental_utils_1.AST_NODE_TYPES.TemplateLiteral,
+]);
+const ALLOWED_NON_COMPUTED_PROP_TYPES = new Set([
+    experimental_utils_1.AST_NODE_TYPES.Identifier,
+]);
+function isValidChainTarget(node, allowIdentifier) {
+    if (node.type === experimental_utils_1.AST_NODE_TYPES.ChainExpression) {
+        return isValidChainTarget(node.expression, allowIdentifier);
+    }
+    if (node.type === experimental_utils_1.AST_NODE_TYPES.MemberExpression) {
+        const isObjectValid = ALLOWED_MEMBER_OBJECT_TYPES.has(node.object.type) &&
+            // make sure to validate the expression is of our expected structure
+            isValidChainTarget(node.object, true);
+        const isPropertyValid = node.computed
+            ? ALLOWED_COMPUTED_PROP_TYPES.has(node.property.type) &&
+                // make sure to validate the member expression is of our expected structure
+                (node.property.type === experimental_utils_1.AST_NODE_TYPES.MemberExpression
+                    ? isValidChainTarget(node.property, allowIdentifier)
+                    : true)
+            : ALLOWED_NON_COMPUTED_PROP_TYPES.has(node.property.type);
+        return isObjectValid && isPropertyValid;
+    }
+    if (node.type === experimental_utils_1.AST_NODE_TYPES.CallExpression) {
+        return isValidChainTarget(node.callee, allowIdentifier);
+    }
+    if (allowIdentifier &&
+        (node.type === experimental_utils_1.AST_NODE_TYPES.Identifier ||
+            node.type === experimental_utils_1.AST_NODE_TYPES.ThisExpression)) {
+        return true;
+    }
+    /*
+    special case for the following, where we only want the left
+    - foo !== null
+    - foo != null
+    - foo !== undefined
+    - foo != undefined
+    */
+    if (node.type === experimental_utils_1.AST_NODE_TYPES.BinaryExpression &&
+        ['!==', '!='].includes(node.operator) &&
+        isValidChainTarget(node.left, allowIdentifier)) {
+        if (node.right.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+            node.right.name === 'undefined') {
+            return true;
+        }
+        if (node.right.type === experimental_utils_1.AST_NODE_TYPES.Literal &&
+            node.right.value === null) {
+            return true;
+        }
+    }
+    return false;
+}
+//# sourceMappingURL=prefer-optional-chain.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..1ce75dd7a7c8162990dde43a249ab73f6a769eeb
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"prefer-optional-chain.js","sourceRoot":"","sources":["../../src/rules/prefer-optional-chain.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly-parameter-types.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly-parameter-types.js
new file mode 100644
index 0000000000000000000000000000000000000000..e80cf169b4bd753fc0bb93b6e847d53da1cf43d1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly-parameter-types.js
@@ -0,0 +1,99 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'prefer-readonly-parameter-types',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Requires that function parameters are typed as readonly to prevent accidental mutation of inputs',
+            category: 'Possible Errors',
+            recommended: false,
+            requiresTypeChecking: true,
+        },
+        schema: [
+            {
+                type: 'object',
+                additionalProperties: false,
+                properties: {
+                    checkParameterProperties: {
+                        type: 'boolean',
+                    },
+                    ignoreInferredTypes: {
+                        type: 'boolean',
+                    },
+                },
+            },
+        ],
+        messages: {
+            shouldBeReadonly: 'Parameter should be a read only type.',
+        },
+    },
+    defaultOptions: [
+        {
+            checkParameterProperties: true,
+            ignoreInferredTypes: false,
+        },
+    ],
+    create(context, options) {
+        const [{ checkParameterProperties, ignoreInferredTypes }] = options;
+        const { esTreeNodeToTSNodeMap, program } = util.getParserServices(context);
+        const checker = program.getTypeChecker();
+        return {
+            [[
+                experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression,
+                experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration,
+                experimental_utils_1.AST_NODE_TYPES.FunctionExpression,
+                experimental_utils_1.AST_NODE_TYPES.TSCallSignatureDeclaration,
+                experimental_utils_1.AST_NODE_TYPES.TSConstructSignatureDeclaration,
+                experimental_utils_1.AST_NODE_TYPES.TSDeclareFunction,
+                experimental_utils_1.AST_NODE_TYPES.TSEmptyBodyFunctionExpression,
+                experimental_utils_1.AST_NODE_TYPES.TSFunctionType,
+                experimental_utils_1.AST_NODE_TYPES.TSMethodSignature,
+            ].join(', ')](node) {
+                for (const param of node.params) {
+                    if (!checkParameterProperties &&
+                        param.type === experimental_utils_1.AST_NODE_TYPES.TSParameterProperty) {
+                        continue;
+                    }
+                    const actualParam = param.type === experimental_utils_1.AST_NODE_TYPES.TSParameterProperty
+                        ? param.parameter
+                        : param;
+                    if (ignoreInferredTypes && actualParam.typeAnnotation == null) {
+                        continue;
+                    }
+                    const tsNode = esTreeNodeToTSNodeMap.get(actualParam);
+                    const type = checker.getTypeAtLocation(tsNode);
+                    const isReadOnly = util.isTypeReadonly(checker, type);
+                    if (!isReadOnly) {
+                        context.report({
+                            node: actualParam,
+                            messageId: 'shouldBeReadonly',
+                        });
+                    }
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=prefer-readonly-parameter-types.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly-parameter-types.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly-parameter-types.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..3fca6fec6d11d67ea79e99665b1729760e54ec3c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly-parameter-types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"prefer-readonly-parameter-types.js","sourceRoot":"","sources":["../../src/rules/prefer-readonly-parameter-types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,8CAAgC;AAUhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,iCAAiC;IACvC,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EACT,kGAAkG;YACpG,QAAQ,EAAE,iBAAiB;YAC3B,WAAW,EAAE,KAAK;YAClB,oBAAoB,EAAE,IAAI;SAC3B;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACV,wBAAwB,EAAE;wBACxB,IAAI,EAAE,SAAS;qBAChB;oBACD,mBAAmB,EAAE;wBACnB,IAAI,EAAE,SAAS;qBAChB;iBACF;aACF;SACF;QACD,QAAQ,EAAE;YACR,gBAAgB,EAAE,uCAAuC;SAC1D;KACF;IACD,cAAc,EAAE;QACd;YACE,wBAAwB,EAAE,IAAI;YAC9B,mBAAmB,EAAE,KAAK;SAC3B;KACF;IACD,MAAM,CAAC,OAAO,EAAE,OAAO;QACrB,MAAM,CAAC,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,CAAC,GAAG,OAAO,CAAC;QACpE,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QAEzC,OAAO;YACL,CAAC;gBACC,mCAAc,CAAC,uBAAuB;gBACtC,mCAAc,CAAC,mBAAmB;gBAClC,mCAAc,CAAC,kBAAkB;gBACjC,mCAAc,CAAC,0BAA0B;gBACzC,mCAAc,CAAC,+BAA+B;gBAC9C,mCAAc,CAAC,iBAAiB;gBAChC,mCAAc,CAAC,6BAA6B;gBAC5C,mCAAc,CAAC,cAAc;gBAC7B,mCAAc,CAAC,iBAAiB;aACjC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACX,IAS8B;gBAE9B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;oBAC/B,IACE,CAAC,wBAAwB;wBACzB,KAAK,CAAC,IAAI,KAAK,mCAAc,CAAC,mBAAmB,EACjD;wBACA,SAAS;qBACV;oBAED,MAAM,WAAW,GACf,KAAK,CAAC,IAAI,KAAK,mCAAc,CAAC,mBAAmB;wBAC/C,CAAC,CAAC,KAAK,CAAC,SAAS;wBACjB,CAAC,CAAC,KAAK,CAAC;oBAEZ,IAAI,mBAAmB,IAAI,WAAW,CAAC,cAAc,IAAI,IAAI,EAAE;wBAC7D,SAAS;qBACV;oBAED,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBACtD,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;oBAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAEtD,IAAI,CAAC,UAAU,EAAE;wBACf,OAAO,CAAC,MAAM,CAAC;4BACb,IAAI,EAAE,WAAW;4BACjB,SAAS,EAAE,kBAAkB;yBAC9B,CAAC,CAAC;qBACJ;iBACF;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly.js
new file mode 100644
index 0000000000000000000000000000000000000000..ede07d7ec5cfe200ddf2bcad2b10d42d76ffd4d5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly.js
@@ -0,0 +1,265 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const tsutils = __importStar(require("tsutils"));
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+const util_1 = require("../util");
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const functionScopeBoundaries = [
+    experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression,
+    experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.FunctionExpression,
+    experimental_utils_1.AST_NODE_TYPES.MethodDefinition,
+].join(', ');
+exports.default = util.createRule({
+    name: 'prefer-readonly',
+    meta: {
+        docs: {
+            description: "Requires that private members are marked as `readonly` if they're never modified outside of the constructor",
+            category: 'Best Practices',
+            recommended: false,
+            requiresTypeChecking: true,
+        },
+        fixable: 'code',
+        messages: {
+            preferReadonly: "Member '{{name}}' is never reassigned; mark it as `readonly`.",
+        },
+        schema: [
+            {
+                allowAdditionalProperties: false,
+                properties: {
+                    onlyInlineLambdas: {
+                        type: 'boolean',
+                    },
+                },
+                type: 'object',
+            },
+        ],
+        type: 'suggestion',
+    },
+    defaultOptions: [{ onlyInlineLambdas: false }],
+    create(context, [{ onlyInlineLambdas }]) {
+        const parserServices = util.getParserServices(context);
+        const checker = parserServices.program.getTypeChecker();
+        const classScopeStack = [];
+        function handlePropertyAccessExpression(node, parent, classScope) {
+            if (ts.isBinaryExpression(parent)) {
+                handleParentBinaryExpression(node, parent, classScope);
+                return;
+            }
+            if (ts.isDeleteExpression(parent) || isDestructuringAssignment(node)) {
+                classScope.addVariableModification(node);
+                return;
+            }
+            if (ts.isPostfixUnaryExpression(parent) ||
+                ts.isPrefixUnaryExpression(parent)) {
+                handleParentPostfixOrPrefixUnaryExpression(parent, classScope);
+            }
+        }
+        function handleParentBinaryExpression(node, parent, classScope) {
+            if (parent.left === node &&
+                tsutils.isAssignmentKind(parent.operatorToken.kind)) {
+                classScope.addVariableModification(node);
+            }
+        }
+        function handleParentPostfixOrPrefixUnaryExpression(node, classScope) {
+            if (node.operator === ts.SyntaxKind.PlusPlusToken ||
+                node.operator === ts.SyntaxKind.MinusMinusToken) {
+                classScope.addVariableModification(node.operand);
+            }
+        }
+        function isDestructuringAssignment(node) {
+            let current = node.parent;
+            while (current) {
+                const parent = current.parent;
+                if (ts.isObjectLiteralExpression(parent) ||
+                    ts.isArrayLiteralExpression(parent) ||
+                    ts.isSpreadAssignment(parent) ||
+                    (ts.isSpreadElement(parent) &&
+                        ts.isArrayLiteralExpression(parent.parent))) {
+                    current = parent;
+                }
+                else if (ts.isBinaryExpression(parent)) {
+                    return (parent.left === current &&
+                        parent.operatorToken.kind === ts.SyntaxKind.EqualsToken);
+                }
+                else {
+                    break;
+                }
+            }
+            return false;
+        }
+        function isConstructor(node) {
+            return (node.type === experimental_utils_1.AST_NODE_TYPES.MethodDefinition &&
+                node.kind === 'constructor');
+        }
+        function isFunctionScopeBoundaryInStack(node) {
+            if (classScopeStack.length === 0) {
+                return false;
+            }
+            const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+            if (ts.isConstructorDeclaration(tsNode)) {
+                return false;
+            }
+            return tsutils.isFunctionScopeBoundary(tsNode);
+        }
+        function getEsNodesFromViolatingNode(violatingNode) {
+            if (ts.isParameterPropertyDeclaration(violatingNode, violatingNode.parent)) {
+                return {
+                    esNode: parserServices.tsNodeToESTreeNodeMap.get(violatingNode.name),
+                    nameNode: parserServices.tsNodeToESTreeNodeMap.get(violatingNode.name),
+                };
+            }
+            return {
+                esNode: parserServices.tsNodeToESTreeNodeMap.get(violatingNode),
+                nameNode: parserServices.tsNodeToESTreeNodeMap.get(violatingNode.name),
+            };
+        }
+        return {
+            'ClassDeclaration, ClassExpression'(node) {
+                classScopeStack.push(new ClassScope(checker, parserServices.esTreeNodeToTSNodeMap.get(node), onlyInlineLambdas));
+            },
+            'ClassDeclaration, ClassExpression:exit'() {
+                const finalizedClassScope = classScopeStack.pop();
+                const sourceCode = context.getSourceCode();
+                for (const violatingNode of finalizedClassScope.finalizeUnmodifiedPrivateNonReadonlys()) {
+                    const { esNode, nameNode } = getEsNodesFromViolatingNode(violatingNode);
+                    context.report({
+                        data: {
+                            name: sourceCode.getText(nameNode),
+                        },
+                        fix: fixer => fixer.insertTextBefore(nameNode, 'readonly '),
+                        messageId: 'preferReadonly',
+                        node: esNode,
+                    });
+                }
+            },
+            MemberExpression(node) {
+                if (classScopeStack.length !== 0 && !node.computed) {
+                    const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+                    handlePropertyAccessExpression(tsNode, tsNode.parent, classScopeStack[classScopeStack.length - 1]);
+                }
+            },
+            [functionScopeBoundaries](node) {
+                if (isConstructor(node)) {
+                    classScopeStack[classScopeStack.length - 1].enterConstructor(parserServices.esTreeNodeToTSNodeMap.get(node));
+                }
+                else if (isFunctionScopeBoundaryInStack(node)) {
+                    classScopeStack[classScopeStack.length - 1].enterNonConstructor();
+                }
+            },
+            [`${functionScopeBoundaries}:exit`](node) {
+                if (isConstructor(node)) {
+                    classScopeStack[classScopeStack.length - 1].exitConstructor();
+                }
+                else if (isFunctionScopeBoundaryInStack(node)) {
+                    classScopeStack[classScopeStack.length - 1].exitNonConstructor();
+                }
+            },
+        };
+    },
+});
+const OUTSIDE_CONSTRUCTOR = -1;
+const DIRECTLY_INSIDE_CONSTRUCTOR = 0;
+class ClassScope {
+    constructor(checker, classNode, onlyInlineLambdas) {
+        this.checker = checker;
+        this.onlyInlineLambdas = onlyInlineLambdas;
+        this.privateModifiableMembers = new Map();
+        this.privateModifiableStatics = new Map();
+        this.memberVariableModifications = new Set();
+        this.staticVariableModifications = new Set();
+        this.constructorScopeDepth = OUTSIDE_CONSTRUCTOR;
+        this.checker = checker;
+        this.classType = checker.getTypeAtLocation(classNode);
+        for (const member of classNode.members) {
+            if (ts.isPropertyDeclaration(member)) {
+                this.addDeclaredVariable(member);
+            }
+        }
+    }
+    addDeclaredVariable(node) {
+        if (!tsutils.isModifierFlagSet(node, ts.ModifierFlags.Private) ||
+            tsutils.isModifierFlagSet(node, ts.ModifierFlags.Readonly) ||
+            ts.isComputedPropertyName(node.name)) {
+            return;
+        }
+        if (this.onlyInlineLambdas &&
+            node.initializer !== undefined &&
+            !ts.isArrowFunction(node.initializer)) {
+            return;
+        }
+        (tsutils.isModifierFlagSet(node, ts.ModifierFlags.Static)
+            ? this.privateModifiableStatics
+            : this.privateModifiableMembers).set(node.name.getText(), node);
+    }
+    addVariableModification(node) {
+        const modifierType = this.checker.getTypeAtLocation(node.expression);
+        if (!modifierType.getSymbol() ||
+            !util_1.typeIsOrHasBaseType(modifierType, this.classType)) {
+            return;
+        }
+        const modifyingStatic = tsutils.isObjectType(modifierType) &&
+            tsutils.isObjectFlagSet(modifierType, ts.ObjectFlags.Anonymous);
+        if (!modifyingStatic &&
+            this.constructorScopeDepth === DIRECTLY_INSIDE_CONSTRUCTOR) {
+            return;
+        }
+        (modifyingStatic
+            ? this.staticVariableModifications
+            : this.memberVariableModifications).add(node.name.text);
+    }
+    enterConstructor(node) {
+        this.constructorScopeDepth = DIRECTLY_INSIDE_CONSTRUCTOR;
+        for (const parameter of node.parameters) {
+            if (tsutils.isModifierFlagSet(parameter, ts.ModifierFlags.Private)) {
+                this.addDeclaredVariable(parameter);
+            }
+        }
+    }
+    exitConstructor() {
+        this.constructorScopeDepth = OUTSIDE_CONSTRUCTOR;
+    }
+    enterNonConstructor() {
+        if (this.constructorScopeDepth !== OUTSIDE_CONSTRUCTOR) {
+            this.constructorScopeDepth += 1;
+        }
+    }
+    exitNonConstructor() {
+        if (this.constructorScopeDepth !== OUTSIDE_CONSTRUCTOR) {
+            this.constructorScopeDepth -= 1;
+        }
+    }
+    finalizeUnmodifiedPrivateNonReadonlys() {
+        this.memberVariableModifications.forEach(variableName => {
+            this.privateModifiableMembers.delete(variableName);
+        });
+        this.staticVariableModifications.forEach(variableName => {
+            this.privateModifiableStatics.delete(variableName);
+        });
+        return [
+            ...Array.from(this.privateModifiableMembers.values()),
+            ...Array.from(this.privateModifiableStatics.values()),
+        ];
+    }
+}
+//# sourceMappingURL=prefer-readonly.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..1aae677d9c63cadcae3e642c2277118064111e90
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"prefer-readonly.js","sourceRoot":"","sources":["../../src/rules/prefer-readonly.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-reduce-type-parameter.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-reduce-type-parameter.js
new file mode 100644
index 0000000000000000000000000000000000000000..d1084796208bda13bb07ddde9d630cd4d7daad4a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-reduce-type-parameter.js
@@ -0,0 +1,92 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+const getMemberExpressionName = (member) => {
+    if (!member.computed) {
+        return member.property.name;
+    }
+    if (member.property.type === experimental_utils_1.AST_NODE_TYPES.Literal &&
+        typeof member.property.value === 'string') {
+        return member.property.value;
+    }
+    return null;
+};
+exports.default = util.createRule({
+    name: 'prefer-reduce-type-parameter',
+    meta: {
+        type: 'problem',
+        docs: {
+            category: 'Best Practices',
+            recommended: false,
+            description: 'Prefer using type parameter when calling `Array#reduce` instead of casting',
+            requiresTypeChecking: true,
+        },
+        messages: {
+            preferTypeParameter: 'Unnecessary cast: Array#reduce accepts a type parameter for the default value.',
+        },
+        fixable: 'code',
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        const service = util.getParserServices(context);
+        const checker = service.program.getTypeChecker();
+        return {
+            'CallExpression > MemberExpression.callee'(callee) {
+                if (getMemberExpressionName(callee) !== 'reduce') {
+                    return;
+                }
+                const [, secondArg] = callee.parent.arguments;
+                if (callee.parent.arguments.length < 2 ||
+                    !util.isTypeAssertion(secondArg)) {
+                    return;
+                }
+                // Get the symbol of the `reduce` method.
+                const tsNode = service.esTreeNodeToTSNodeMap.get(callee.object);
+                const calleeObjType = util.getConstrainedTypeAtLocation(checker, tsNode);
+                // Check the owner type of the `reduce` method.
+                if (checker.isArrayType(calleeObjType)) {
+                    context.report({
+                        messageId: 'preferTypeParameter',
+                        node: secondArg,
+                        fix: fixer => [
+                            fixer.removeRange([
+                                secondArg.range[0],
+                                secondArg.expression.range[0],
+                            ]),
+                            fixer.removeRange([
+                                secondArg.expression.range[1],
+                                secondArg.range[1],
+                            ]),
+                            fixer.insertTextAfter(callee, `<${context
+                                .getSourceCode()
+                                .getText(secondArg.typeAnnotation)}>`),
+                        ],
+                    });
+                    return;
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=prefer-reduce-type-parameter.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-reduce-type-parameter.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-reduce-type-parameter.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..647e716615a79244428ea9a0f07259d7928682ff
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-reduce-type-parameter.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"prefer-reduce-type-parameter.js","sourceRoot":"","sources":["../../src/rules/prefer-reduce-type-parameter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,8CAAgC;AAMhC,MAAM,uBAAuB,GAAG,CAC9B,MAAiC,EAClB,EAAE;IACjB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;QACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC7B;IAED,IACE,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,mCAAc,CAAC,OAAO;QAC/C,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,EACzC;QACA,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;KAC9B;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,kBAAe,IAAI,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,8BAA8B;IACpC,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,KAAK;YAClB,WAAW,EACT,4EAA4E;YAC9E,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE;YACR,mBAAmB,EACjB,gFAAgF;SACnF;QACD,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAEjD,OAAO;YACL,0CAA0C,CACxC,MAAgD;gBAEhD,IAAI,uBAAuB,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE;oBAChD,OAAO;iBACR;gBAED,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;gBAE9C,IACE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;oBAClC,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAChC;oBACA,OAAO;iBACR;gBAED,yCAAyC;gBACzC,MAAM,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAChE,MAAM,aAAa,GAAG,IAAI,CAAC,4BAA4B,CACrD,OAAO,EACP,MAAM,CACP,CAAC;gBAEF,+CAA+C;gBAC/C,IAAI,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;oBACtC,OAAO,CAAC,MAAM,CAAC;wBACb,SAAS,EAAE,qBAAqB;wBAChC,IAAI,EAAE,SAAS;wBACf,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;4BACZ,KAAK,CAAC,WAAW,CAAC;gCAChB,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gCAClB,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;6BAC9B,CAAC;4BACF,KAAK,CAAC,WAAW,CAAC;gCAChB,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;gCAC7B,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;6BACnB,CAAC;4BACF,KAAK,CAAC,eAAe,CACnB,MAAM,EACN,IAAI,OAAO;iCACR,aAAa,EAAE;iCACf,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CACxC;yBACF;qBACF,CAAC,CAAC;oBAEH,OAAO;iBACR;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-regexp-exec.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-regexp-exec.js
new file mode 100644
index 0000000000000000000000000000000000000000..a09b655950f2d1c74e72d3f5727c8e9db0652724
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-regexp-exec.js
@@ -0,0 +1,54 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const util_1 = require("../util");
+exports.default = util_1.createRule({
+    name: 'prefer-regexp-exec',
+    defaultOptions: [],
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Enforce that `RegExp#exec` is used instead of `String#match` if no global flag is provided',
+            category: 'Best Practices',
+            recommended: 'error',
+            requiresTypeChecking: true,
+        },
+        messages: {
+            regExpExecOverStringMatch: 'Use the `RegExp#exec()` method instead.',
+        },
+        schema: [],
+    },
+    create(context) {
+        const globalScope = context.getScope();
+        const service = util_1.getParserServices(context);
+        const typeChecker = service.program.getTypeChecker();
+        /**
+         * Check if a given node is a string.
+         * @param node The node to check.
+         */
+        function isStringType(node) {
+            const objectType = typeChecker.getTypeAtLocation(service.esTreeNodeToTSNodeMap.get(node));
+            return util_1.getTypeName(typeChecker, objectType) === 'string';
+        }
+        return {
+            "CallExpression[arguments.length=1] > MemberExpression.callee[property.name='match'][computed=false]"(node) {
+                const callNode = node.parent;
+                const arg = callNode.arguments[0];
+                const evaluated = util_1.getStaticValue(arg, globalScope);
+                // Don't report regular expressions with global flag.
+                if (evaluated &&
+                    evaluated.value instanceof RegExp &&
+                    evaluated.value.flags.includes('g')) {
+                    return;
+                }
+                if (isStringType(node.object)) {
+                    context.report({
+                        node: callNode,
+                        messageId: 'regExpExecOverStringMatch',
+                    });
+                    return;
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=prefer-regexp-exec.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-regexp-exec.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-regexp-exec.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..3aa5e7362f9904d8bc8d1d979abeba4d119d5f82
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-regexp-exec.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"prefer-regexp-exec.js","sourceRoot":"","sources":["../../src/rules/prefer-regexp-exec.ts"],"names":[],"mappings":";;AACA,kCAKiB;AAEjB,kBAAe,iBAAU,CAAC;IACxB,IAAI,EAAE,oBAAoB;IAC1B,cAAc,EAAE,EAAE;IAElB,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EACT,4FAA4F;YAC9F,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,OAAO;YACpB,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE;YACR,yBAAyB,EAAE,yCAAyC;SACrE;QACD,MAAM,EAAE,EAAE;KACX;IAED,MAAM,CAAC,OAAO;QACZ,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,wBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAErD;;;WAGG;QACH,SAAS,YAAY,CAAC,IAAqC;YACzD,MAAM,UAAU,GAAG,WAAW,CAAC,iBAAiB,CAC9C,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CACxC,CAAC;YACF,OAAO,kBAAW,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,QAAQ,CAAC;QAC3D,CAAC;QAED,OAAO;YACL,qGAAqG,CACnG,IAA+B;gBAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAiC,CAAC;gBACxD,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,SAAS,GAAG,qBAAc,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBAEnD,qDAAqD;gBACrD,IACE,SAAS;oBACT,SAAS,CAAC,KAAK,YAAY,MAAM;oBACjC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EACnC;oBACA,OAAO;iBACR;gBAED,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;oBAC7B,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,QAAQ;wBACd,SAAS,EAAE,2BAA2B;qBACvC,CAAC,CAAC;oBACH,OAAO;iBACR;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-string-starts-ends-with.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-string-starts-ends-with.js
new file mode 100644
index 0000000000000000000000000000000000000000..9786ec5cc8adfb54da3ccadc74cc1038d363b936
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-string-starts-ends-with.js
@@ -0,0 +1,490 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const regexpp_1 = require("regexpp");
+const util_1 = require("../util");
+const EQ_OPERATORS = /^[=!]=/;
+const regexpp = new regexpp_1.RegExpParser();
+exports.default = util_1.createRule({
+    name: 'prefer-string-starts-ends-with',
+    defaultOptions: [],
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Enforce the use of `String#startsWith` and `String#endsWith` instead of other equivalent methods of checking substrings',
+            category: 'Best Practices',
+            recommended: false,
+            requiresTypeChecking: true,
+        },
+        messages: {
+            preferStartsWith: "Use 'String#startsWith' method instead.",
+            preferEndsWith: "Use the 'String#endsWith' method instead.",
+        },
+        schema: [],
+        fixable: 'code',
+    },
+    create(context) {
+        const globalScope = context.getScope();
+        const sourceCode = context.getSourceCode();
+        const service = util_1.getParserServices(context);
+        const typeChecker = service.program.getTypeChecker();
+        /**
+         * Check if a given node is a string.
+         * @param node The node to check.
+         */
+        function isStringType(node) {
+            const objectType = typeChecker.getTypeAtLocation(service.esTreeNodeToTSNodeMap.get(node));
+            return util_1.getTypeName(typeChecker, objectType) === 'string';
+        }
+        /**
+         * Check if a given node is a `Literal` node that is null.
+         * @param node The node to check.
+         */
+        function isNull(node) {
+            const evaluated = util_1.getStaticValue(node, globalScope);
+            return evaluated != null && evaluated.value === null;
+        }
+        /**
+         * Check if a given node is a `Literal` node that is a given value.
+         * @param node The node to check.
+         * @param value The expected value of the `Literal` node.
+         */
+        function isNumber(node, value) {
+            const evaluated = util_1.getStaticValue(node, globalScope);
+            return evaluated != null && evaluated.value === value;
+        }
+        /**
+         * Check if a given node is a `Literal` node that is a character.
+         * @param node The node to check.
+         * @param kind The method name to get a character.
+         */
+        function isCharacter(node) {
+            const evaluated = util_1.getStaticValue(node, globalScope);
+            return (evaluated != null &&
+                typeof evaluated.value === 'string' &&
+                // checks if the string is a character long
+                evaluated.value[0] === evaluated.value);
+        }
+        /**
+         * Check if a given node is `==`, `===`, `!=`, or `!==`.
+         * @param node The node to check.
+         */
+        function isEqualityComparison(node) {
+            return (node.type === experimental_utils_1.AST_NODE_TYPES.BinaryExpression &&
+                EQ_OPERATORS.test(node.operator));
+        }
+        /**
+         * Check if two given nodes are the same meaning.
+         * @param node1 A node to compare.
+         * @param node2 Another node to compare.
+         */
+        function isSameTokens(node1, node2) {
+            const tokens1 = sourceCode.getTokens(node1);
+            const tokens2 = sourceCode.getTokens(node2);
+            if (tokens1.length !== tokens2.length) {
+                return false;
+            }
+            for (let i = 0; i < tokens1.length; ++i) {
+                const token1 = tokens1[i];
+                const token2 = tokens2[i];
+                if (token1.type !== token2.type || token1.value !== token2.value) {
+                    return false;
+                }
+            }
+            return true;
+        }
+        /**
+         * Check if a given node is the expression of the length of a string.
+         *
+         * - If `length` property access of `expectedObjectNode`, it's `true`.
+         *   E.g., `foo` → `foo.length` / `"foo"` → `"foo".length`
+         * - If `expectedObjectNode` is a string literal, `node` can be a number.
+         *   E.g., `"foo"` → `3`
+         *
+         * @param node The node to check.
+         * @param expectedObjectNode The node which is expected as the receiver of `length` property.
+         */
+        function isLengthExpression(node, expectedObjectNode) {
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.MemberExpression) {
+                return (util_1.getPropertyName(node, globalScope) === 'length' &&
+                    isSameTokens(node.object, expectedObjectNode));
+            }
+            const evaluatedLength = util_1.getStaticValue(node, globalScope);
+            const evaluatedString = util_1.getStaticValue(expectedObjectNode, globalScope);
+            return (evaluatedLength != null &&
+                evaluatedString != null &&
+                typeof evaluatedLength.value === 'number' &&
+                typeof evaluatedString.value === 'string' &&
+                evaluatedLength.value === evaluatedString.value.length);
+        }
+        /**
+         * Check if a given node is a negative index expression
+         *
+         * E.g. `s.slice(- <expr>)`, `s.substring(s.length - <expr>)`
+         *
+         * @param node The node to check.
+         * @param expectedIndexedNode The node which is expected as the receiver of index expression.
+         */
+        function isNegativeIndexExpression(node, expectedIndexedNode) {
+            return ((node.type === experimental_utils_1.AST_NODE_TYPES.UnaryExpression &&
+                node.operator === '-') ||
+                (node.type === experimental_utils_1.AST_NODE_TYPES.BinaryExpression &&
+                    node.operator === '-' &&
+                    isLengthExpression(node.left, expectedIndexedNode)));
+        }
+        /**
+         * Check if a given node is the expression of the last index.
+         *
+         * E.g. `foo.length - 1`
+         *
+         * @param node The node to check.
+         * @param expectedObjectNode The node which is expected as the receiver of `length` property.
+         */
+        function isLastIndexExpression(node, expectedObjectNode) {
+            return (node.type === experimental_utils_1.AST_NODE_TYPES.BinaryExpression &&
+                node.operator === '-' &&
+                isLengthExpression(node.left, expectedObjectNode) &&
+                isNumber(node.right, 1));
+        }
+        /**
+         * Get the range of the property of a given `MemberExpression` node.
+         *
+         * - `obj[foo]` → the range of `[foo]`
+         * - `obf.foo` → the range of `.foo`
+         * - `(obj).foo` → the range of `.foo`
+         *
+         * @param node The member expression node to get.
+         */
+        function getPropertyRange(node) {
+            const dotOrOpenBracket = sourceCode.getTokenAfter(node.object, util_1.isNotClosingParenToken);
+            return [dotOrOpenBracket.range[0], node.range[1]];
+        }
+        /**
+         * Parse a given `RegExp` pattern to that string if it's a static string.
+         * @param pattern The RegExp pattern text to parse.
+         * @param uFlag The Unicode flag of the RegExp.
+         */
+        function parseRegExpText(pattern, uFlag) {
+            // Parse it.
+            const ast = regexpp.parsePattern(pattern, undefined, undefined, uFlag);
+            if (ast.alternatives.length !== 1) {
+                return null;
+            }
+            // Drop `^`/`$` assertion.
+            const chars = ast.alternatives[0].elements;
+            const first = chars[0];
+            if (first.type === 'Assertion' && first.kind === 'start') {
+                chars.shift();
+            }
+            else {
+                chars.pop();
+            }
+            // Check if it can determine a unique string.
+            if (!chars.every(c => c.type === 'Character')) {
+                return null;
+            }
+            // To string.
+            return String.fromCodePoint(...chars.map(c => c.value));
+        }
+        /**
+         * Parse a given node if it's a `RegExp` instance.
+         * @param node The node to parse.
+         */
+        function parseRegExp(node) {
+            const evaluated = util_1.getStaticValue(node, globalScope);
+            if (evaluated == null || !(evaluated.value instanceof RegExp)) {
+                return null;
+            }
+            const { source, flags } = evaluated.value;
+            const isStartsWith = source.startsWith('^');
+            const isEndsWith = source.endsWith('$');
+            if (isStartsWith === isEndsWith ||
+                flags.includes('i') ||
+                flags.includes('m')) {
+                return null;
+            }
+            const text = parseRegExpText(source, flags.includes('u'));
+            if (text == null) {
+                return null;
+            }
+            return { isEndsWith, isStartsWith, text };
+        }
+        function getLeftNode(node) {
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.ChainExpression) {
+                return getLeftNode(node.expression);
+            }
+            let leftNode;
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.CallExpression) {
+                leftNode = node.callee;
+            }
+            else {
+                leftNode = node;
+            }
+            if (leftNode.type !== experimental_utils_1.AST_NODE_TYPES.MemberExpression) {
+                throw new Error(`Expected a MemberExpression, got ${leftNode.type}`);
+            }
+            return leftNode;
+        }
+        /**
+         * Fix code with using the right operand as the search string.
+         * For example: `foo.slice(0, 3) === 'bar'` → `foo.startsWith('bar')`
+         * @param fixer The rule fixer.
+         * @param node The node which was reported.
+         * @param kind The kind of the report.
+         * @param isNegative The flag to fix to negative condition.
+         */
+        function* fixWithRightOperand(fixer, node, kind, isNegative, isOptional) {
+            // left is CallExpression or MemberExpression.
+            const leftNode = getLeftNode(node.left);
+            const propertyRange = getPropertyRange(leftNode);
+            if (isNegative) {
+                yield fixer.insertTextBefore(node, '!');
+            }
+            yield fixer.replaceTextRange([propertyRange[0], node.right.range[0]], `${isOptional ? '?.' : '.'}${kind}sWith(`);
+            yield fixer.replaceTextRange([node.right.range[1], node.range[1]], ')');
+        }
+        /**
+         * Fix code with using the first argument as the search string.
+         * For example: `foo.indexOf('bar') === 0` → `foo.startsWith('bar')`
+         * @param fixer The rule fixer.
+         * @param node The node which was reported.
+         * @param kind The kind of the report.
+         * @param negative The flag to fix to negative condition.
+         */
+        function* fixWithArgument(fixer, node, callNode, calleeNode, kind, negative, isOptional) {
+            if (negative) {
+                yield fixer.insertTextBefore(node, '!');
+            }
+            yield fixer.replaceTextRange(getPropertyRange(calleeNode), `${isOptional ? '?.' : '.'}${kind}sWith`);
+            yield fixer.removeRange([callNode.range[1], node.range[1]]);
+        }
+        function getParent(node) {
+            var _a;
+            return util_1.nullThrows(((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.ChainExpression
+                ? node.parent.parent
+                : node.parent, util_1.NullThrowsReasons.MissingParent);
+        }
+        return {
+            // foo[0] === "a"
+            // foo.charAt(0) === "a"
+            // foo[foo.length - 1] === "a"
+            // foo.charAt(foo.length - 1) === "a"
+            [[
+                'BinaryExpression > MemberExpression.left[computed=true]',
+                'BinaryExpression > CallExpression.left > MemberExpression.callee[property.name="charAt"][computed=false]',
+                'BinaryExpression > ChainExpression.left > MemberExpression[computed=true]',
+                'BinaryExpression > ChainExpression.left > CallExpression > MemberExpression.callee[property.name="charAt"][computed=false]',
+            ].join(', ')](node) {
+                let parentNode = getParent(node);
+                let indexNode = null;
+                if ((parentNode === null || parentNode === void 0 ? void 0 : parentNode.type) === experimental_utils_1.AST_NODE_TYPES.CallExpression) {
+                    if (parentNode.arguments.length === 1) {
+                        indexNode = parentNode.arguments[0];
+                    }
+                    parentNode = getParent(parentNode);
+                }
+                else {
+                    indexNode = node.property;
+                }
+                if (indexNode == null ||
+                    !isEqualityComparison(parentNode) ||
+                    !isStringType(node.object)) {
+                    return;
+                }
+                const isEndsWith = isLastIndexExpression(indexNode, node.object);
+                const isStartsWith = !isEndsWith && isNumber(indexNode, 0);
+                if (!isStartsWith && !isEndsWith) {
+                    return;
+                }
+                const eqNode = parentNode;
+                context.report({
+                    node: parentNode,
+                    messageId: isStartsWith ? 'preferStartsWith' : 'preferEndsWith',
+                    fix(fixer) {
+                        // Don't fix if it can change the behavior.
+                        if (!isCharacter(eqNode.right)) {
+                            return null;
+                        }
+                        return fixWithRightOperand(fixer, eqNode, isStartsWith ? 'start' : 'end', eqNode.operator.startsWith('!'), node.optional);
+                    },
+                });
+            },
+            // foo.indexOf('bar') === 0
+            [[
+                'BinaryExpression > CallExpression.left > MemberExpression.callee[property.name="indexOf"][computed=false]',
+                'BinaryExpression > ChainExpression.left > CallExpression > MemberExpression.callee[property.name="indexOf"][computed=false]',
+            ].join(', ')](node) {
+                const callNode = getParent(node);
+                const parentNode = getParent(callNode);
+                if (callNode.arguments.length !== 1 ||
+                    !isEqualityComparison(parentNode) ||
+                    !isNumber(parentNode.right, 0) ||
+                    !isStringType(node.object)) {
+                    return;
+                }
+                context.report({
+                    node: parentNode,
+                    messageId: 'preferStartsWith',
+                    fix(fixer) {
+                        return fixWithArgument(fixer, parentNode, callNode, node, 'start', parentNode.operator.startsWith('!'), node.optional);
+                    },
+                });
+            },
+            // foo.lastIndexOf('bar') === foo.length - 3
+            // foo.lastIndexOf(bar) === foo.length - bar.length
+            [[
+                'BinaryExpression > CallExpression.left > MemberExpression.callee[property.name="lastIndexOf"][computed=false]',
+                'BinaryExpression > ChainExpression.left > CallExpression > MemberExpression.callee[property.name="lastIndexOf"][computed=false]',
+            ].join(', ')](node) {
+                const callNode = getParent(node);
+                const parentNode = getParent(callNode);
+                if (callNode.arguments.length !== 1 ||
+                    !isEqualityComparison(parentNode) ||
+                    parentNode.right.type !== experimental_utils_1.AST_NODE_TYPES.BinaryExpression ||
+                    parentNode.right.operator !== '-' ||
+                    !isLengthExpression(parentNode.right.left, node.object) ||
+                    !isLengthExpression(parentNode.right.right, callNode.arguments[0]) ||
+                    !isStringType(node.object)) {
+                    return;
+                }
+                context.report({
+                    node: parentNode,
+                    messageId: 'preferEndsWith',
+                    fix(fixer) {
+                        return fixWithArgument(fixer, parentNode, callNode, node, 'end', parentNode.operator.startsWith('!'), node.optional);
+                    },
+                });
+            },
+            // foo.match(/^bar/) === null
+            // foo.match(/bar$/) === null
+            [[
+                'BinaryExpression > CallExpression.left > MemberExpression.callee[property.name="match"][computed=false]',
+                'BinaryExpression > ChainExpression.left > CallExpression > MemberExpression.callee[property.name="match"][computed=false]',
+            ].join(', ')](node) {
+                const callNode = getParent(node);
+                const parentNode = getParent(callNode);
+                if (!isEqualityComparison(parentNode) ||
+                    !isNull(parentNode.right) ||
+                    !isStringType(node.object)) {
+                    return;
+                }
+                const parsed = callNode.arguments.length === 1
+                    ? parseRegExp(callNode.arguments[0])
+                    : null;
+                if (parsed == null) {
+                    return;
+                }
+                const { isStartsWith, text } = parsed;
+                context.report({
+                    node: callNode,
+                    messageId: isStartsWith ? 'preferStartsWith' : 'preferEndsWith',
+                    *fix(fixer) {
+                        if (!parentNode.operator.startsWith('!')) {
+                            yield fixer.insertTextBefore(parentNode, '!');
+                        }
+                        yield fixer.replaceTextRange(getPropertyRange(node), `${node.optional ? '?.' : '.'}${isStartsWith ? 'start' : 'end'}sWith`);
+                        yield fixer.replaceText(callNode.arguments[0], JSON.stringify(text));
+                        yield fixer.removeRange([callNode.range[1], parentNode.range[1]]);
+                    },
+                });
+            },
+            // foo.slice(0, 3) === 'bar'
+            // foo.slice(-3) === 'bar'
+            // foo.slice(-3, foo.length) === 'bar'
+            // foo.substring(0, 3) === 'bar'
+            // foo.substring(foo.length - 3) === 'bar'
+            // foo.substring(foo.length - 3, foo.length) === 'bar'
+            [[
+                'BinaryExpression > CallExpression.left > MemberExpression.callee[property.name="slice"][computed=false]',
+                'BinaryExpression > CallExpression.left > MemberExpression.callee[property.name="substring"][computed=false]',
+                'BinaryExpression > ChainExpression.left > CallExpression > MemberExpression.callee[property.name="slice"][computed=false]',
+                'BinaryExpression > ChainExpression.left > CallExpression > MemberExpression.callee[property.name="substring"][computed=false]',
+            ].join(', ')](node) {
+                const callNode = getParent(node);
+                const parentNode = getParent(callNode);
+                if (!isEqualityComparison(parentNode) || !isStringType(node.object)) {
+                    return;
+                }
+                const isEndsWith = (callNode.arguments.length === 1 ||
+                    (callNode.arguments.length === 2 &&
+                        isLengthExpression(callNode.arguments[1], node.object))) &&
+                    isNegativeIndexExpression(callNode.arguments[0], node.object);
+                const isStartsWith = !isEndsWith &&
+                    callNode.arguments.length === 2 &&
+                    isNumber(callNode.arguments[0], 0) &&
+                    !isNegativeIndexExpression(callNode.arguments[1], node.object);
+                if (!isStartsWith && !isEndsWith) {
+                    return;
+                }
+                const eqNode = parentNode;
+                const negativeIndexSupported = node.property.name === 'slice';
+                context.report({
+                    node: parentNode,
+                    messageId: isStartsWith ? 'preferStartsWith' : 'preferEndsWith',
+                    fix(fixer) {
+                        // Don't fix if it can change the behavior.
+                        if (eqNode.operator.length === 2 &&
+                            (eqNode.right.type !== experimental_utils_1.AST_NODE_TYPES.Literal ||
+                                typeof eqNode.right.value !== 'string')) {
+                            return null;
+                        }
+                        // code being checked is likely mistake:
+                        // unequal length of strings being checked for equality
+                        // or reliant on behavior of substring (negative indices interpreted as 0)
+                        if (isStartsWith) {
+                            if (!isLengthExpression(callNode.arguments[1], eqNode.right)) {
+                                return null;
+                            }
+                        }
+                        else {
+                            const posNode = callNode.arguments[0];
+                            const posNodeIsAbsolutelyValid = (posNode.type === experimental_utils_1.AST_NODE_TYPES.BinaryExpression &&
+                                posNode.operator === '-' &&
+                                isLengthExpression(posNode.left, node.object) &&
+                                isLengthExpression(posNode.right, eqNode.right)) ||
+                                (negativeIndexSupported &&
+                                    posNode.type === experimental_utils_1.AST_NODE_TYPES.UnaryExpression &&
+                                    posNode.operator === '-' &&
+                                    isLengthExpression(posNode.argument, eqNode.right));
+                            if (!posNodeIsAbsolutelyValid) {
+                                return null;
+                            }
+                        }
+                        return fixWithRightOperand(fixer, parentNode, isStartsWith ? 'start' : 'end', parentNode.operator.startsWith('!'), node.optional);
+                    },
+                });
+            },
+            // /^bar/.test(foo)
+            // /bar$/.test(foo)
+            'CallExpression > MemberExpression.callee[property.name="test"][computed=false]'(node) {
+                const callNode = getParent(node);
+                const parsed = callNode.arguments.length === 1 ? parseRegExp(node.object) : null;
+                if (parsed == null) {
+                    return;
+                }
+                const { isStartsWith, text } = parsed;
+                const messageId = isStartsWith ? 'preferStartsWith' : 'preferEndsWith';
+                const methodName = isStartsWith ? 'startsWith' : 'endsWith';
+                context.report({
+                    node: callNode,
+                    messageId,
+                    *fix(fixer) {
+                        const argNode = callNode.arguments[0];
+                        const needsParen = argNode.type !== experimental_utils_1.AST_NODE_TYPES.Literal &&
+                            argNode.type !== experimental_utils_1.AST_NODE_TYPES.TemplateLiteral &&
+                            argNode.type !== experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                            argNode.type !== experimental_utils_1.AST_NODE_TYPES.MemberExpression &&
+                            argNode.type !== experimental_utils_1.AST_NODE_TYPES.CallExpression;
+                        yield fixer.removeRange([callNode.range[0], argNode.range[0]]);
+                        if (needsParen) {
+                            yield fixer.insertTextBefore(argNode, '(');
+                            yield fixer.insertTextAfter(argNode, ')');
+                        }
+                        yield fixer.insertTextAfter(argNode, `${node.optional ? '?.' : '.'}${methodName}(${JSON.stringify(text)}`);
+                    },
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=prefer-string-starts-ends-with.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-string-starts-ends-with.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-string-starts-ends-with.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..0fd8ff84fe211080a58487c68e2576c642122a78
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-string-starts-ends-with.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"prefer-string-starts-ends-with.js","sourceRoot":"","sources":["../../src/rules/prefer-string-starts-ends-with.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-ts-expect-error.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-ts-expect-error.js
new file mode 100644
index 0000000000000000000000000000000000000000..e086529eb571002de334057af013d64b43a6369f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-ts-expect-error.js
@@ -0,0 +1,81 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const util = __importStar(require("../util"));
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+exports.default = util.createRule({
+    name: 'prefer-ts-expect-error',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Recommends using `@ts-expect-error` over `@ts-ignore`',
+            category: 'Best Practices',
+            recommended: false,
+        },
+        fixable: 'code',
+        messages: {
+            preferExpectErrorComment: 'Use "@ts-expect-error" to ensure an error is actually being suppressed.',
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        const tsIgnoreRegExpSingleLine = /^\s*\/?\s*@ts-ignore/;
+        const tsIgnoreRegExpMultiLine = /^\s*(?:\/|\*)*\s*@ts-ignore/;
+        const sourceCode = context.getSourceCode();
+        function isLineComment(comment) {
+            return comment.type === experimental_utils_1.AST_TOKEN_TYPES.Line;
+        }
+        function getLastCommentLine(comment) {
+            if (isLineComment(comment)) {
+                return comment.value;
+            }
+            // For multiline comments - we look at only the last line.
+            const commentlines = comment.value.split('\n');
+            return commentlines[commentlines.length - 1];
+        }
+        function isValidTsIgnorePresent(comment) {
+            const line = getLastCommentLine(comment);
+            return isLineComment(comment)
+                ? tsIgnoreRegExpSingleLine.test(line)
+                : tsIgnoreRegExpMultiLine.test(line);
+        }
+        return {
+            Program() {
+                const comments = sourceCode.getAllComments();
+                comments.forEach(comment => {
+                    if (isValidTsIgnorePresent(comment)) {
+                        const lineCommentRuleFixer = (fixer) => fixer.replaceText(comment, `//${comment.value.replace('@ts-ignore', '@ts-expect-error')}`);
+                        const blockCommentRuleFixer = (fixer) => fixer.replaceText(comment, `/*${comment.value.replace('@ts-ignore', '@ts-expect-error')}*/`);
+                        context.report({
+                            node: comment,
+                            messageId: 'preferExpectErrorComment',
+                            fix: isLineComment(comment)
+                                ? lineCommentRuleFixer
+                                : blockCommentRuleFixer,
+                        });
+                    }
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=prefer-ts-expect-error.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-ts-expect-error.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-ts-expect-error.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..46807474875e7e5efaf4cac49e17b3dcdc0e56a1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-ts-expect-error.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"prefer-ts-expect-error.js","sourceRoot":"","sources":["../../src/rules/prefer-ts-expect-error.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8CAAgC;AAChC,8EAG+C;AAQ/C,kBAAe,IAAI,CAAC,UAAU,CAAiB;IAC7C,IAAI,EAAE,wBAAwB;IAC9B,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,uDAAuD;YACpE,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,KAAK;SACnB;QACD,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE;YACR,wBAAwB,EACtB,yEAAyE;SAC5E;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;QACxD,MAAM,uBAAuB,GAAG,6BAA6B,CAAC;QAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAE3C,SAAS,aAAa,CAAC,OAAyB;YAC9C,OAAO,OAAO,CAAC,IAAI,KAAK,oCAAe,CAAC,IAAI,CAAC;QAC/C,CAAC;QAED,SAAS,kBAAkB,CAAC,OAAyB;YACnD,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE;gBAC1B,OAAO,OAAO,CAAC,KAAK,CAAC;aACtB;YAED,0DAA0D;YAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,SAAS,sBAAsB,CAAC,OAAyB;YACvD,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,aAAa,CAAC,OAAO,CAAC;gBAC3B,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;gBACrC,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QAED,OAAO;YACL,OAAO;gBACL,MAAM,QAAQ,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;gBAC7C,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBACzB,IAAI,sBAAsB,CAAC,OAAO,CAAC,EAAE;wBACnC,MAAM,oBAAoB,GAAG,CAAC,KAAgB,EAAW,EAAE,CACzD,KAAK,CAAC,WAAW,CACf,OAAO,EACP,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE,CAC/D,CAAC;wBAEJ,MAAM,qBAAqB,GAAG,CAAC,KAAgB,EAAW,EAAE,CAC1D,KAAK,CAAC,WAAW,CACf,OAAO,EACP,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,CACxB,YAAY,EACZ,kBAAkB,CACnB,IAAI,CACN,CAAC;wBAEJ,OAAO,CAAC,MAAM,CAAC;4BACb,IAAI,EAAE,OAAO;4BACb,SAAS,EAAE,0BAA0B;4BACrC,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC;gCACzB,CAAC,CAAC,oBAAoB;gCACtB,CAAC,CAAC,qBAAqB;yBAC1B,CAAC,CAAC;qBACJ;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/promise-function-async.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/promise-function-async.js
new file mode 100644
index 0000000000000000000000000000000000000000..7fb94ed3f9d87367b06188d6e41a5a80bd58a7a5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/promise-function-async.js
@@ -0,0 +1,159 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'promise-function-async',
+    meta: {
+        type: 'suggestion',
+        fixable: 'code',
+        docs: {
+            description: 'Requires any function or method that returns a Promise to be marked async',
+            category: 'Best Practices',
+            recommended: false,
+            requiresTypeChecking: true,
+        },
+        messages: {
+            missingAsync: 'Functions that return promises must be async.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    allowAny: {
+                        type: 'boolean',
+                    },
+                    allowedPromiseNames: {
+                        type: 'array',
+                        items: {
+                            type: 'string',
+                        },
+                    },
+                    checkArrowFunctions: {
+                        type: 'boolean',
+                    },
+                    checkFunctionDeclarations: {
+                        type: 'boolean',
+                    },
+                    checkFunctionExpressions: {
+                        type: 'boolean',
+                    },
+                    checkMethodDeclarations: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            allowAny: true,
+            allowedPromiseNames: [],
+            checkArrowFunctions: true,
+            checkFunctionDeclarations: true,
+            checkFunctionExpressions: true,
+            checkMethodDeclarations: true,
+        },
+    ],
+    create(context, [{ allowAny, allowedPromiseNames, checkArrowFunctions, checkFunctionDeclarations, checkFunctionExpressions, checkMethodDeclarations, },]) {
+        const allAllowedPromiseNames = new Set([
+            'Promise',
+            ...allowedPromiseNames,
+        ]);
+        const parserServices = util.getParserServices(context);
+        const checker = parserServices.program.getTypeChecker();
+        function validateNode(node) {
+            var _a;
+            const originalNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+            const signatures = checker
+                .getTypeAtLocation(originalNode)
+                .getCallSignatures();
+            if (!signatures.length) {
+                return;
+            }
+            const returnType = checker.getReturnTypeOfSignature(signatures[0]);
+            if (!util.containsAllTypesByName(returnType, allowAny, allAllowedPromiseNames)) {
+                // Return type is not a promise
+                return;
+            }
+            if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.TSAbstractMethodDefinition) {
+                // Abstract method can't be async
+                return;
+            }
+            if (node.parent &&
+                (node.parent.type === experimental_utils_1.AST_NODE_TYPES.Property ||
+                    node.parent.type === experimental_utils_1.AST_NODE_TYPES.MethodDefinition) &&
+                (node.parent.kind === 'get' || node.parent.kind === 'set')) {
+                // Getters and setters can't be async
+                return;
+            }
+            if (util.isTypeFlagSet(returnType, ts.TypeFlags.Any | ts.TypeFlags.Unknown)) {
+                // Report without auto fixer because the return type is unknown
+                return context.report({
+                    messageId: 'missingAsync',
+                    node,
+                });
+            }
+            context.report({
+                messageId: 'missingAsync',
+                node,
+                fix: fixer => {
+                    if (node.parent &&
+                        (node.parent.type === experimental_utils_1.AST_NODE_TYPES.MethodDefinition ||
+                            (node.parent.type === experimental_utils_1.AST_NODE_TYPES.Property &&
+                                node.parent.method))) {
+                        return fixer.insertTextBefore(node.parent.key, 'async ');
+                    }
+                    return fixer.insertTextBefore(node, 'async ');
+                },
+            });
+        }
+        return {
+            'ArrowFunctionExpression[async = false]'(node) {
+                if (checkArrowFunctions) {
+                    validateNode(node);
+                }
+            },
+            'FunctionDeclaration[async = false]'(node) {
+                if (checkFunctionDeclarations) {
+                    validateNode(node);
+                }
+            },
+            'FunctionExpression[async = false]'(node) {
+                if (node.parent &&
+                    node.parent.type === experimental_utils_1.AST_NODE_TYPES.MethodDefinition &&
+                    node.parent.kind === 'method') {
+                    if (checkMethodDeclarations) {
+                        validateNode(node);
+                    }
+                    return;
+                }
+                if (checkFunctionExpressions) {
+                    validateNode(node);
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=promise-function-async.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/promise-function-async.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/promise-function-async.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..904b541ec253c7e9d94398536b0d73d310b5192c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/promise-function-async.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"promise-function-async.js","sourceRoot":"","sources":["../../src/rules/promise-function-async.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/quotes.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/quotes.js
new file mode 100644
index 0000000000000000000000000000000000000000..17e820c1a571a813886c5e9a0b4f0b641e9adb8b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/quotes.js
@@ -0,0 +1,86 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const quotes_1 = __importDefault(require("eslint/lib/rules/quotes"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'quotes',
+    meta: {
+        type: 'layout',
+        docs: {
+            description: 'Enforce the consistent use of either backticks, double, or single quotes',
+            category: 'Stylistic Issues',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        fixable: 'code',
+        messages: (_a = quotes_1.default.meta.messages) !== null && _a !== void 0 ? _a : {
+            wrongQuotes: 'Strings must use {{description}}.',
+        },
+        schema: quotes_1.default.meta.schema,
+    },
+    defaultOptions: [
+        'double',
+        {
+            allowTemplateLiterals: false,
+            avoidEscape: false,
+        },
+    ],
+    create(context, [option]) {
+        const rules = quotes_1.default.create(context);
+        function isAllowedAsNonBacktick(node) {
+            const parent = node.parent;
+            switch (parent === null || parent === void 0 ? void 0 : parent.type) {
+                case experimental_utils_1.AST_NODE_TYPES.TSAbstractMethodDefinition:
+                case experimental_utils_1.AST_NODE_TYPES.TSMethodSignature:
+                case experimental_utils_1.AST_NODE_TYPES.TSPropertySignature:
+                case experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration:
+                case experimental_utils_1.AST_NODE_TYPES.TSLiteralType:
+                case experimental_utils_1.AST_NODE_TYPES.TSExternalModuleReference:
+                    return true;
+                case experimental_utils_1.AST_NODE_TYPES.TSEnumMember:
+                    return node === parent.id;
+                case experimental_utils_1.AST_NODE_TYPES.TSAbstractClassProperty:
+                case experimental_utils_1.AST_NODE_TYPES.ClassProperty:
+                    return node === parent.key;
+                default:
+                    return false;
+            }
+        }
+        return {
+            Literal(node) {
+                if (option === 'backtick' && isAllowedAsNonBacktick(node)) {
+                    return;
+                }
+                rules.Literal(node);
+            },
+            TemplateLiteral(node) {
+                rules.TemplateLiteral(node);
+            },
+        };
+    },
+});
+//# sourceMappingURL=quotes.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/quotes.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/quotes.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..de3a0e5dcf846cc86affa888427ebbb68d898789
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/quotes.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"quotes.js","sourceRoot":"","sources":["../../src/rules/quotes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,qEAA+C;AAC/C,8CAAgC;AAKhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE;YACJ,WAAW,EACT,0EAA0E;YAC5E,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,IAAI;SACtB;QACD,OAAO,EAAE,MAAM;QACf,QAAQ,QAAE,gBAAQ,CAAC,IAAI,CAAC,QAAQ,mCAAI;YAClC,WAAW,EAAE,mCAAmC;SACjD;QACD,MAAM,EAAE,gBAAQ,CAAC,IAAI,CAAC,MAAM;KAC7B;IACD,cAAc,EAAE;QACd,QAAQ;QACR;YACE,qBAAqB,EAAE,KAAK;YAC5B,WAAW,EAAE,KAAK;SACnB;KACF;IACD,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;QACtB,MAAM,KAAK,GAAG,gBAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEvC,SAAS,sBAAsB,CAAC,IAAsB;YACpD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAE3B,QAAQ,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,EAAE;gBACpB,KAAK,mCAAc,CAAC,0BAA0B,CAAC;gBAC/C,KAAK,mCAAc,CAAC,iBAAiB,CAAC;gBACtC,KAAK,mCAAc,CAAC,mBAAmB,CAAC;gBACxC,KAAK,mCAAc,CAAC,mBAAmB,CAAC;gBACxC,KAAK,mCAAc,CAAC,aAAa,CAAC;gBAClC,KAAK,mCAAc,CAAC,yBAAyB;oBAC3C,OAAO,IAAI,CAAC;gBAEd,KAAK,mCAAc,CAAC,YAAY;oBAC9B,OAAO,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;gBAE5B,KAAK,mCAAc,CAAC,uBAAuB,CAAC;gBAC5C,KAAK,mCAAc,CAAC,aAAa;oBAC/B,OAAO,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC;gBAE7B;oBACE,OAAO,KAAK,CAAC;aAChB;QACH,CAAC;QAED,OAAO;YACL,OAAO,CAAC,IAAI;gBACV,IAAI,MAAM,KAAK,UAAU,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;oBACzD,OAAO;iBACR;gBAED,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YAED,eAAe,CAAC,IAAI;gBAClB,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-array-sort-compare.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-array-sort-compare.js
new file mode 100644
index 0000000000000000000000000000000000000000..e71e0d5113a13fed14374e0662166f7eb61b8e59
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-array-sort-compare.js
@@ -0,0 +1,81 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'require-array-sort-compare',
+    defaultOptions: [
+        {
+            ignoreStringArrays: false,
+        },
+    ],
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Requires `Array#sort` calls to always provide a `compareFunction`',
+            category: 'Best Practices',
+            recommended: false,
+            requiresTypeChecking: true,
+        },
+        messages: {
+            requireCompare: "Require 'compare' argument.",
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    ignoreStringArrays: {
+                        type: 'boolean',
+                    },
+                },
+            },
+        ],
+    },
+    create(context, [options]) {
+        const service = util.getParserServices(context);
+        const checker = service.program.getTypeChecker();
+        /**
+         * Check if a given node is an array which all elements are string.
+         * @param node
+         */
+        function isStringArrayNode(node) {
+            const type = checker.getTypeAtLocation(service.esTreeNodeToTSNodeMap.get(node));
+            if (checker.isArrayType(type) || checker.isTupleType(type)) {
+                const typeArgs = checker.getTypeArguments(type);
+                return typeArgs.every(arg => util.getTypeName(checker, arg) === 'string');
+            }
+            return false;
+        }
+        return {
+            "CallExpression[arguments.length=0] > MemberExpression[property.name='sort'][computed=false]"(callee) {
+                const tsNode = service.esTreeNodeToTSNodeMap.get(callee.object);
+                const calleeObjType = util.getConstrainedTypeAtLocation(checker, tsNode);
+                if (options.ignoreStringArrays && isStringArrayNode(callee.object)) {
+                    return;
+                }
+                if (util.isTypeArrayTypeOrUnionOfArrayTypes(calleeObjType, checker)) {
+                    context.report({ node: callee.parent, messageId: 'requireCompare' });
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=require-array-sort-compare.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-array-sort-compare.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-array-sort-compare.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..1a04cc46e879784e00891708ab97717e1b34a8b7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-array-sort-compare.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"require-array-sort-compare.js","sourceRoot":"","sources":["../../src/rules/require-array-sort-compare.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA,8CAAgC;AAShC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,4BAA4B;IAClC,cAAc,EAAE;QACd;YACE,kBAAkB,EAAE,KAAK;SAC1B;KACF;IAED,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,mEAAmE;YACrE,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,KAAK;YAClB,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE;YACR,cAAc,EAAE,6BAA6B;SAC9C;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,kBAAkB,EAAE;wBAClB,IAAI,EAAE,SAAS;qBAChB;iBACF;aACF;SACF;KACF;IAED,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAEjD;;;WAGG;QACH,SAAS,iBAAiB,CAAC,IAAqC;YAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CACpC,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CACxC,CAAC;YACF,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;gBAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAChD,OAAO,QAAQ,CAAC,KAAK,CACnB,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,QAAQ,CACnD,CAAC;aACH;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO;YACL,6FAA6F,CAC3F,MAAiC;gBAEjC,MAAM,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAChE,MAAM,aAAa,GAAG,IAAI,CAAC,4BAA4B,CACrD,OAAO,EACP,MAAM,CACP,CAAC;gBAEF,IAAI,OAAO,CAAC,kBAAkB,IAAI,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;oBAClE,OAAO;iBACR;gBAED,IAAI,IAAI,CAAC,kCAAkC,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE;oBACnE,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;iBACvE;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-await.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-await.js
new file mode 100644
index 0000000000000000000000000000000000000000..3bdbc095a2f7b62569d2765873617cbb248f052e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-await.js
@@ -0,0 +1,193 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const tsutils = __importStar(require("tsutils"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'require-await',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Disallow async functions which have no `await` expression',
+            category: 'Best Practices',
+            recommended: 'error',
+            requiresTypeChecking: true,
+            extendsBaseRule: true,
+        },
+        schema: [],
+        messages: {
+            missingAwait: "{{name}} has no 'await' expression.",
+        },
+    },
+    defaultOptions: [],
+    create(context) {
+        const parserServices = util.getParserServices(context);
+        const checker = parserServices.program.getTypeChecker();
+        const sourceCode = context.getSourceCode();
+        let scopeInfo = null;
+        /**
+         * Push the scope info object to the stack.
+         */
+        function enterFunction(node) {
+            scopeInfo = {
+                upper: scopeInfo,
+                hasAwait: false,
+                hasAsync: node.async,
+                isGen: node.generator || false,
+                isAsyncYield: false,
+            };
+        }
+        /**
+         * Pop the top scope info object from the stack.
+         * Also, it reports the function if needed.
+         */
+        function exitFunction(node) {
+            /* istanbul ignore if */ if (!scopeInfo) {
+                // this shouldn't ever happen, as we have to exit a function after we enter it
+                return;
+            }
+            if (node.async &&
+                !scopeInfo.hasAwait &&
+                !isEmptyFunction(node) &&
+                !(scopeInfo.isGen && scopeInfo.isAsyncYield)) {
+                context.report({
+                    node,
+                    loc: getFunctionHeadLoc(node, sourceCode),
+                    messageId: 'missingAwait',
+                    data: {
+                        name: util.upperCaseFirst(util.getFunctionNameWithKind(node)),
+                    },
+                });
+            }
+            scopeInfo = scopeInfo.upper;
+        }
+        /**
+         * Checks if the node returns a thenable type
+         */
+        function isThenableType(node) {
+            const type = checker.getTypeAtLocation(node);
+            return tsutils.isThenableType(checker, node, type);
+        }
+        /**
+         * Marks the current scope as having an await
+         */
+        function markAsHasAwait() {
+            if (!scopeInfo) {
+                return;
+            }
+            scopeInfo.hasAwait = true;
+        }
+        /**
+         * mark `scopeInfo.isAsyncYield` to `true` if its a generator
+         * function and the delegate is `true`
+         */
+        function markAsHasDelegateGen(node) {
+            var _a;
+            if (!scopeInfo || !scopeInfo.isGen || !node.argument) {
+                return;
+            }
+            if (((_a = node === null || node === void 0 ? void 0 : node.argument) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.Literal) {
+                // making this `false` as for literals we don't need to check the definition
+                // eg : async function* run() { yield* 1 }
+                scopeInfo.isAsyncYield = false;
+            }
+            const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node === null || node === void 0 ? void 0 : node.argument);
+            const type = checker.getTypeAtLocation(tsNode);
+            const symbol = type.getSymbol();
+            // async function* test1() {yield* asyncGenerator() }
+            if ((symbol === null || symbol === void 0 ? void 0 : symbol.getName()) === 'AsyncGenerator') {
+                scopeInfo.isAsyncYield = true;
+            }
+        }
+        return {
+            FunctionDeclaration: enterFunction,
+            FunctionExpression: enterFunction,
+            ArrowFunctionExpression: enterFunction,
+            'FunctionDeclaration:exit': exitFunction,
+            'FunctionExpression:exit': exitFunction,
+            'ArrowFunctionExpression:exit': exitFunction,
+            AwaitExpression: markAsHasAwait,
+            'ForOfStatement[await = true]': markAsHasAwait,
+            'YieldExpression[delegate = true]': markAsHasDelegateGen,
+            // check body-less async arrow function.
+            // ignore `async () => await foo` because it's obviously correct
+            'ArrowFunctionExpression[async = true] > :not(BlockStatement, AwaitExpression)'(node) {
+                const expression = parserServices.esTreeNodeToTSNodeMap.get(node);
+                if (expression && isThenableType(expression)) {
+                    markAsHasAwait();
+                }
+            },
+            ReturnStatement(node) {
+                // short circuit early to avoid unnecessary type checks
+                if (!scopeInfo || scopeInfo.hasAwait || !scopeInfo.hasAsync) {
+                    return;
+                }
+                const { expression } = parserServices.esTreeNodeToTSNodeMap.get(node);
+                if (expression && isThenableType(expression)) {
+                    markAsHasAwait();
+                }
+            },
+        };
+    },
+});
+function isEmptyFunction(node) {
+    var _a;
+    return (((_a = node.body) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.BlockStatement &&
+        node.body.body.length === 0);
+}
+// https://github.com/eslint/eslint/blob/03a69dbe86d5b5768a310105416ae726822e3c1c/lib/rules/utils/ast-utils.js#L382-L392
+/**
+ * Gets the `(` token of the given function node.
+ */
+function getOpeningParenOfParams(node, sourceCode) {
+    return util.nullThrows(node.id
+        ? sourceCode.getTokenAfter(node.id, util.isOpeningParenToken)
+        : sourceCode.getFirstToken(node, util.isOpeningParenToken), util.NullThrowsReasons.MissingToken('(', node.type));
+}
+// https://github.com/eslint/eslint/blob/03a69dbe86d5b5768a310105416ae726822e3c1c/lib/rules/utils/ast-utils.js#L1220-L1242
+/**
+ * Gets the location of the given function node for reporting.
+ */
+function getFunctionHeadLoc(node, sourceCode) {
+    const parent = util.nullThrows(node.parent, util.NullThrowsReasons.MissingParent);
+    let start = null;
+    let end = null;
+    if (node.type === experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression) {
+        const arrowToken = util.nullThrows(sourceCode.getTokenBefore(node.body, util.isArrowToken), util.NullThrowsReasons.MissingToken('=>', node.type));
+        start = arrowToken.loc.start;
+        end = arrowToken.loc.end;
+    }
+    else if (parent.type === experimental_utils_1.AST_NODE_TYPES.Property ||
+        parent.type === experimental_utils_1.AST_NODE_TYPES.MethodDefinition) {
+        start = parent.loc.start;
+        end = getOpeningParenOfParams(node, sourceCode).loc.start;
+    }
+    else {
+        start = node.loc.start;
+        end = getOpeningParenOfParams(node, sourceCode).loc.start;
+    }
+    return {
+        start,
+        end,
+    };
+}
+//# sourceMappingURL=require-await.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-await.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-await.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..bab6931d7c8981f101dc1cbf4f3e0afac817588e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-await.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"require-await.js","sourceRoot":"","sources":["../../src/rules/require-await.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-plus-operands.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-plus-operands.js
new file mode 100644
index 0000000000000000000000000000000000000000..3cf1a4c31ab50209dbbab81a5fd660836a8a00a1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-plus-operands.js
@@ -0,0 +1,134 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'restrict-plus-operands',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'When adding two variables, operands must both be of type number or of type string',
+            category: 'Best Practices',
+            recommended: 'error',
+            requiresTypeChecking: true,
+        },
+        messages: {
+            notNumbers: "Operands of '+' operation must either be both strings or both numbers.",
+            notStrings: "Operands of '+' operation must either be both strings or both numbers. Consider using a template literal.",
+            notBigInts: "Operands of '+' operation must be both bigints.",
+        },
+        schema: [
+            {
+                type: 'object',
+                additionalProperties: false,
+                properties: {
+                    checkCompoundAssignments: {
+                        type: 'boolean',
+                    },
+                },
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            checkCompoundAssignments: false,
+        },
+    ],
+    create(context, [{ checkCompoundAssignments }]) {
+        const service = util.getParserServices(context);
+        const typeChecker = service.program.getTypeChecker();
+        /**
+         * Helper function to get base type of node
+         */
+        function getBaseTypeOfLiteralType(type) {
+            if (type.isNumberLiteral()) {
+                return 'number';
+            }
+            if (type.isStringLiteral()) {
+                return 'string';
+            }
+            // is BigIntLiteral
+            if (type.flags & ts.TypeFlags.BigIntLiteral) {
+                return 'bigint';
+            }
+            if (type.isUnion()) {
+                const types = type.types.map(getBaseTypeOfLiteralType);
+                return types.every(value => value === types[0]) ? types[0] : 'invalid';
+            }
+            if (type.isIntersection()) {
+                const types = type.types.map(getBaseTypeOfLiteralType);
+                return types.some(value => value === 'string') ? 'string' : 'invalid';
+            }
+            const stringType = typeChecker.typeToString(type);
+            if (stringType === 'number' ||
+                stringType === 'string' ||
+                stringType === 'bigint') {
+                return stringType;
+            }
+            return 'invalid';
+        }
+        /**
+         * Helper function to get base type of node
+         * @param node the node to be evaluated.
+         */
+        function getNodeType(node) {
+            const tsNode = service.esTreeNodeToTSNodeMap.get(node);
+            const type = util.getConstrainedTypeAtLocation(typeChecker, tsNode);
+            return getBaseTypeOfLiteralType(type);
+        }
+        function checkPlusOperands(node) {
+            const leftType = getNodeType(node.left);
+            const rightType = getNodeType(node.right);
+            if (leftType === 'invalid' ||
+                rightType === 'invalid' ||
+                leftType !== rightType) {
+                if (leftType === 'string' || rightType === 'string') {
+                    context.report({
+                        node,
+                        messageId: 'notStrings',
+                    });
+                }
+                else if (leftType === 'bigint' || rightType === 'bigint') {
+                    context.report({
+                        node,
+                        messageId: 'notBigInts',
+                    });
+                }
+                else {
+                    context.report({
+                        node,
+                        messageId: 'notNumbers',
+                    });
+                }
+            }
+        }
+        return {
+            "BinaryExpression[operator='+']": checkPlusOperands,
+            "AssignmentExpression[operator='+=']"(node) {
+                if (checkCompoundAssignments) {
+                    checkPlusOperands(node);
+                }
+            },
+        };
+    },
+});
+//# sourceMappingURL=restrict-plus-operands.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-plus-operands.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-plus-operands.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..99ee95b1dc5f20f5de99cbea5907b08426b4bc9e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-plus-operands.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"restrict-plus-operands.js","sourceRoot":"","sources":["../../src/rules/restrict-plus-operands.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-template-expressions.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-template-expressions.js
new file mode 100644
index 0000000000000000000000000000000000000000..e72f791971fe15f6c49aa2a5dd645c259b5cb47e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-template-expressions.js
@@ -0,0 +1,111 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'restrict-template-expressions',
+    meta: {
+        type: 'problem',
+        docs: {
+            description: 'Enforce template literal expressions to be of string type',
+            category: 'Best Practices',
+            recommended: 'error',
+            requiresTypeChecking: true,
+        },
+        messages: {
+            invalidType: 'Invalid type "{{type}}" of template literal expression.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    allowNumber: { type: 'boolean' },
+                    allowBoolean: { type: 'boolean' },
+                    allowAny: { type: 'boolean' },
+                    allowNullish: { type: 'boolean' },
+                },
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            allowNumber: true,
+        },
+    ],
+    create(context, [options]) {
+        const service = util.getParserServices(context);
+        const typeChecker = service.program.getTypeChecker();
+        function isUnderlyingTypePrimitive(type) {
+            if (util.isTypeFlagSet(type, ts.TypeFlags.StringLike)) {
+                return true;
+            }
+            if (options.allowNumber &&
+                util.isTypeFlagSet(type, ts.TypeFlags.NumberLike | ts.TypeFlags.BigIntLike)) {
+                return true;
+            }
+            if (options.allowBoolean &&
+                util.isTypeFlagSet(type, ts.TypeFlags.BooleanLike)) {
+                return true;
+            }
+            if (options.allowAny && util.isTypeAnyType(type)) {
+                return true;
+            }
+            if (options.allowNullish &&
+                util.isTypeFlagSet(type, ts.TypeFlags.Null | ts.TypeFlags.Undefined)) {
+                return true;
+            }
+            return false;
+        }
+        return {
+            TemplateLiteral(node) {
+                // don't check tagged template literals
+                if (node.parent.type === experimental_utils_1.AST_NODE_TYPES.TaggedTemplateExpression) {
+                    return;
+                }
+                for (const expression of node.expressions) {
+                    const expressionType = util.getConstrainedTypeAtLocation(typeChecker, service.esTreeNodeToTSNodeMap.get(expression));
+                    if (!isInnerUnionOrIntersectionConformingTo(expressionType, isUnderlyingTypePrimitive)) {
+                        context.report({
+                            node: expression,
+                            messageId: 'invalidType',
+                            data: { type: typeChecker.typeToString(expressionType) },
+                        });
+                    }
+                }
+            },
+        };
+        function isInnerUnionOrIntersectionConformingTo(type, predicate) {
+            return rec(type);
+            function rec(innerType) {
+                if (innerType.isUnion()) {
+                    return innerType.types.every(rec);
+                }
+                if (innerType.isIntersection()) {
+                    return innerType.types.some(rec);
+                }
+                return predicate(innerType);
+            }
+        }
+    },
+});
+//# sourceMappingURL=restrict-template-expressions.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-template-expressions.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-template-expressions.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..2e517055939b483c07be36683979d6d5d624cd8f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-template-expressions.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"restrict-template-expressions.js","sourceRoot":"","sources":["../../src/rules/restrict-template-expressions.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/return-await.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/return-await.js
new file mode 100644
index 0000000000000000000000000000000000000000..bf8b749506894a0dff76086945daf46f2fa4ff2a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/return-await.js
@@ -0,0 +1,235 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const tsutils = __importStar(require("tsutils"));
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'return-await',
+    meta: {
+        docs: {
+            description: 'Enforces consistent returning of awaited values',
+            category: 'Best Practices',
+            recommended: false,
+            requiresTypeChecking: true,
+            extendsBaseRule: 'no-return-await',
+        },
+        fixable: 'code',
+        type: 'problem',
+        messages: {
+            nonPromiseAwait: 'Returning an awaited value that is not a promise is not allowed.',
+            disallowedPromiseAwait: 'Returning an awaited promise is not allowed in this context.',
+            requiredPromiseAwait: 'Returning an awaited promise is required in this context.',
+        },
+        schema: [
+            {
+                enum: ['in-try-catch', 'always', 'never'],
+            },
+        ],
+    },
+    defaultOptions: ['in-try-catch'],
+    create(context, [option]) {
+        const parserServices = util.getParserServices(context);
+        const checker = parserServices.program.getTypeChecker();
+        const sourceCode = context.getSourceCode();
+        let scopeInfo = null;
+        function enterFunction(node) {
+            scopeInfo = {
+                hasAsync: node.async,
+            };
+        }
+        function inTry(node) {
+            let ancestor = node.parent;
+            while (ancestor && !ts.isFunctionLike(ancestor)) {
+                if (tsutils.isTryStatement(ancestor)) {
+                    return true;
+                }
+                ancestor = ancestor.parent;
+            }
+            return false;
+        }
+        function inCatch(node) {
+            let ancestor = node.parent;
+            while (ancestor && !ts.isFunctionLike(ancestor)) {
+                if (tsutils.isCatchClause(ancestor)) {
+                    return true;
+                }
+                ancestor = ancestor.parent;
+            }
+            return false;
+        }
+        function isReturnPromiseInFinally(node) {
+            let ancestor = node.parent;
+            while (ancestor && !ts.isFunctionLike(ancestor)) {
+                if (tsutils.isTryStatement(ancestor.parent) &&
+                    tsutils.isBlock(ancestor) &&
+                    ancestor.parent.end === ancestor.end) {
+                    return true;
+                }
+                ancestor = ancestor.parent;
+            }
+            return false;
+        }
+        function hasFinallyBlock(node) {
+            let ancestor = node.parent;
+            while (ancestor && !ts.isFunctionLike(ancestor)) {
+                if (tsutils.isTryStatement(ancestor)) {
+                    return !!ancestor.finallyBlock;
+                }
+                ancestor = ancestor.parent;
+            }
+            return false;
+        }
+        // function findTokensToRemove()
+        function removeAwait(fixer, node) {
+            // Should always be an await node; but let's be safe.
+            /* istanbul ignore if */ if (!util.isAwaitExpression(node)) {
+                return null;
+            }
+            const awaitToken = sourceCode.getFirstToken(node, util.isAwaitKeyword);
+            // Should always be the case; but let's be safe.
+            /* istanbul ignore if */ if (!awaitToken) {
+                return null;
+            }
+            const startAt = awaitToken.range[0];
+            let endAt = awaitToken.range[1];
+            // Also remove any extraneous whitespace after `await`, if there is any.
+            const nextToken = sourceCode.getTokenAfter(awaitToken, {
+                includeComments: true,
+            });
+            if (nextToken) {
+                endAt = nextToken.range[0];
+            }
+            return fixer.removeRange([startAt, endAt]);
+        }
+        function insertAwait(fixer, node) {
+            return fixer.insertTextBefore(node, 'await ');
+        }
+        function test(node, expression) {
+            let child;
+            const isAwait = tsutils.isAwaitExpression(expression);
+            if (isAwait) {
+                child = expression.getChildAt(1);
+            }
+            else {
+                child = expression;
+            }
+            const type = checker.getTypeAtLocation(child);
+            const isThenable = tsutils.isThenableType(checker, expression, type);
+            if (!isAwait && !isThenable) {
+                return;
+            }
+            if (isAwait && !isThenable) {
+                // any/unknown could be thenable; do not auto-fix
+                const useAutoFix = !(util.isTypeAnyType(type) || util.isTypeUnknownType(type));
+                const fix = (fixer) => removeAwait(fixer, node);
+                context.report(Object.assign({ messageId: 'nonPromiseAwait', node }, (useAutoFix
+                    ? { fix }
+                    : {
+                        suggest: [
+                            {
+                                messageId: 'nonPromiseAwait',
+                                fix,
+                            },
+                        ],
+                    })));
+                return;
+            }
+            if (option === 'always') {
+                if (!isAwait && isThenable) {
+                    context.report({
+                        messageId: 'requiredPromiseAwait',
+                        node,
+                        fix: fixer => insertAwait(fixer, node),
+                    });
+                }
+                return;
+            }
+            if (option === 'never') {
+                if (isAwait) {
+                    context.report({
+                        messageId: 'disallowedPromiseAwait',
+                        node,
+                        fix: fixer => removeAwait(fixer, node),
+                    });
+                }
+                return;
+            }
+            if (option === 'in-try-catch') {
+                const isInTryCatch = inTry(expression) || inCatch(expression);
+                if (isAwait && !isInTryCatch) {
+                    context.report({
+                        messageId: 'disallowedPromiseAwait',
+                        node,
+                        fix: fixer => removeAwait(fixer, node),
+                    });
+                }
+                else if (!isAwait && isInTryCatch) {
+                    if (inCatch(expression) && !hasFinallyBlock(expression)) {
+                        return;
+                    }
+                    if (isReturnPromiseInFinally(expression)) {
+                        return;
+                    }
+                    context.report({
+                        messageId: 'requiredPromiseAwait',
+                        node,
+                        fix: fixer => insertAwait(fixer, node),
+                    });
+                }
+                return;
+            }
+        }
+        function findPossiblyReturnedNodes(node) {
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.ConditionalExpression) {
+                return [
+                    ...findPossiblyReturnedNodes(node.alternate),
+                    ...findPossiblyReturnedNodes(node.consequent),
+                ];
+            }
+            return [node];
+        }
+        return {
+            FunctionDeclaration: enterFunction,
+            FunctionExpression: enterFunction,
+            ArrowFunctionExpression: enterFunction,
+            'ArrowFunctionExpression[async = true]:exit'(node) {
+                if (node.body.type !== experimental_utils_1.AST_NODE_TYPES.BlockStatement) {
+                    findPossiblyReturnedNodes(node.body).forEach(node => {
+                        const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+                        test(node, tsNode);
+                    });
+                }
+            },
+            ReturnStatement(node) {
+                if (!scopeInfo || !scopeInfo.hasAsync || !node.argument) {
+                    return;
+                }
+                findPossiblyReturnedNodes(node.argument).forEach(node => {
+                    const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+                    test(node, tsNode);
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=return-await.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/return-await.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/return-await.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..eebf8b6edf8189b42105c217702de938023410e5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/return-await.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"return-await.js","sourceRoot":"","sources":["../../src/rules/return-await.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/semi.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/semi.js
new file mode 100644
index 0000000000000000000000000000000000000000..7e2ccde16f007eb0187a71afb6caaa143ce113fb
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/semi.js
@@ -0,0 +1,84 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const semi_1 = __importDefault(require("eslint/lib/rules/semi"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'semi',
+    meta: {
+        type: 'layout',
+        docs: {
+            description: 'Require or disallow semicolons instead of ASI',
+            category: 'Stylistic Issues',
+            // too opinionated to be recommended
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        fixable: 'code',
+        schema: semi_1.default.meta.schema,
+        messages: (_a = semi_1.default.meta.messages) !== null && _a !== void 0 ? _a : {
+            missingSemi: 'Missing semicolon.',
+            extraSemi: 'Extra semicolon.',
+        },
+    },
+    defaultOptions: [
+        'always',
+        {
+            omitLastInOneLineBlock: false,
+            beforeStatementContinuationChars: 'any',
+        },
+    ],
+    create(context) {
+        const rules = semi_1.default.create(context);
+        const checkForSemicolon = rules.ExpressionStatement;
+        /*
+          The following nodes are handled by the member-delimiter-style rule
+          AST_NODE_TYPES.TSCallSignatureDeclaration,
+          AST_NODE_TYPES.TSConstructSignatureDeclaration,
+          AST_NODE_TYPES.TSIndexSignature,
+          AST_NODE_TYPES.TSMethodSignature,
+          AST_NODE_TYPES.TSPropertySignature,
+        */
+        const nodesToCheck = [
+            experimental_utils_1.AST_NODE_TYPES.ClassProperty,
+            experimental_utils_1.AST_NODE_TYPES.TSAbstractClassProperty,
+            experimental_utils_1.AST_NODE_TYPES.TSAbstractMethodDefinition,
+            experimental_utils_1.AST_NODE_TYPES.TSDeclareFunction,
+            experimental_utils_1.AST_NODE_TYPES.TSExportAssignment,
+            experimental_utils_1.AST_NODE_TYPES.TSImportEqualsDeclaration,
+            experimental_utils_1.AST_NODE_TYPES.TSTypeAliasDeclaration,
+        ].reduce((acc, node) => {
+            acc[node] = checkForSemicolon;
+            return acc;
+        }, {});
+        return Object.assign(Object.assign(Object.assign({}, rules), nodesToCheck), { ExportDefaultDeclaration(node) {
+                if (node.declaration.type !== experimental_utils_1.AST_NODE_TYPES.TSInterfaceDeclaration) {
+                    rules.ExportDefaultDeclaration(node);
+                }
+            } });
+    },
+});
+//# sourceMappingURL=semi.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/semi.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/semi.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..5c2e0f7f70ba9578145482620c0a9733c7dc7dbd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/semi.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"semi.js","sourceRoot":"","sources":["../../src/rules/semi.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8EAI+C;AAC/C,iEAA6C;AAC7C,8CAAgC;AAKhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE;YACJ,WAAW,EAAE,+CAA+C;YAC5D,QAAQ,EAAE,kBAAkB;YAC5B,oCAAoC;YACpC,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,IAAI;SACtB;QACD,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,cAAQ,CAAC,IAAI,CAAC,MAAM;QAC5B,QAAQ,QAAE,cAAQ,CAAC,IAAI,CAAC,QAAQ,mCAAI;YAClC,WAAW,EAAE,oBAAoB;YACjC,SAAS,EAAE,kBAAkB;SAC9B;KACF;IACD,cAAc,EAAE;QACd,QAAQ;QACR;YACE,sBAAsB,EAAE,KAAK;YAC7B,gCAAgC,EAAE,KAAK;SACxC;KACF;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,cAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,iBAAiB,GAAG,KAAK,CAAC,mBAE/B,CAAC;QAEF;;;;;;;UAOE;QACF,MAAM,YAAY,GAAG;YACnB,mCAAc,CAAC,aAAa;YAC5B,mCAAc,CAAC,uBAAuB;YACtC,mCAAc,CAAC,0BAA0B;YACzC,mCAAc,CAAC,iBAAiB;YAChC,mCAAc,CAAC,kBAAkB;YACjC,mCAAc,CAAC,yBAAyB;YACxC,mCAAc,CAAC,sBAAsB;SACtC,CAAC,MAAM,CAAwB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAC5C,GAAG,CAAC,IAAc,CAAC,GAAG,iBAAiB,CAAC;YACxC,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,qDACK,KAAK,GACL,YAAY,KACf,wBAAwB,CAAC,IAAI;gBAC3B,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,mCAAc,CAAC,sBAAsB,EAAE;oBACnE,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;iBACtC;YACH,CAAC,IACD;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-before-function-paren.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-before-function-paren.js
new file mode 100644
index 0000000000000000000000000000000000000000..3d9772307a785ebed3b61444912e6cf11620152b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-before-function-paren.js
@@ -0,0 +1,158 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'space-before-function-paren',
+    meta: {
+        type: 'layout',
+        docs: {
+            description: 'Enforces consistent spacing before function parenthesis',
+            category: 'Stylistic Issues',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        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,
+                    },
+                ],
+            },
+        ],
+        messages: {
+            unexpected: 'Unexpected space before function parentheses.',
+            missing: 'Missing space before function parentheses.',
+        },
+    },
+    defaultOptions: ['always'],
+    create(context) {
+        const sourceCode = context.getSourceCode();
+        const baseConfig = typeof context.options[0] === 'string' ? context.options[0] : 'always';
+        const overrideConfig = typeof context.options[0] === 'object' ? context.options[0] : {};
+        /**
+         * Determines whether a function has a name.
+         * @param {ASTNode} node The function node.
+         * @returns {boolean} Whether the function has a name.
+         */
+        function isNamedFunction(node) {
+            if (node.id != null) {
+                return true;
+            }
+            const parent = node.parent;
+            return (parent.type === experimental_utils_1.AST_NODE_TYPES.MethodDefinition ||
+                parent.type === experimental_utils_1.AST_NODE_TYPES.TSAbstractMethodDefinition ||
+                (parent.type === experimental_utils_1.AST_NODE_TYPES.Property &&
+                    (parent.kind === 'get' || parent.kind === 'set' || parent.method)));
+        }
+        /**
+         * Gets the config for a given function
+         * @param {ASTNode} node The function node
+         * @returns {string} "always", "never", or "ignore"
+         */
+        function getConfigForFunction(node) {
+            var _a, _b, _c;
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression) {
+                // Always ignore non-async functions and arrow functions without parens, e.g. async foo => bar
+                if (node.async &&
+                    util.isOpeningParenToken(sourceCode.getFirstToken(node, { skip: 1 }))) {
+                    return (_a = overrideConfig.asyncArrow) !== null && _a !== void 0 ? _a : baseConfig;
+                }
+            }
+            else if (isNamedFunction(node)) {
+                return (_b = overrideConfig.named) !== null && _b !== void 0 ? _b : baseConfig;
+                // `generator-star-spacing` should warn anonymous generators. E.g. `function* () {}`
+            }
+            else if (!node.generator) {
+                return (_c = overrideConfig.anonymous) !== null && _c !== void 0 ? _c : baseConfig;
+            }
+            return 'ignore';
+        }
+        /**
+         * Checks the parens of a function node
+         * @param {ASTNode} node A function node
+         * @returns {void}
+         */
+        function checkFunction(node) {
+            const functionConfig = getConfigForFunction(node);
+            if (functionConfig === 'ignore') {
+                return;
+            }
+            let leftToken, rightToken;
+            if (node.typeParameters) {
+                leftToken = sourceCode.getLastToken(node.typeParameters);
+                rightToken = sourceCode.getTokenAfter(leftToken);
+            }
+            else {
+                rightToken = sourceCode.getFirstToken(node, util.isOpeningParenToken);
+                leftToken = sourceCode.getTokenBefore(rightToken);
+            }
+            const hasSpacing = sourceCode.isSpaceBetweenTokens(leftToken, rightToken);
+            if (hasSpacing && functionConfig === 'never') {
+                context.report({
+                    node,
+                    loc: {
+                        start: leftToken.loc.end,
+                        end: rightToken.loc.start,
+                    },
+                    messageId: 'unexpected',
+                    fix: fixer => fixer.removeRange([leftToken.range[1], rightToken.range[0]]),
+                });
+            }
+            else if (!hasSpacing &&
+                functionConfig === 'always' &&
+                (!node.typeParameters || node.id)) {
+                context.report({
+                    node,
+                    loc: rightToken.loc,
+                    messageId: 'missing',
+                    fix: fixer => fixer.insertTextAfter(leftToken, ' '),
+                });
+            }
+        }
+        return {
+            ArrowFunctionExpression: checkFunction,
+            FunctionDeclaration: checkFunction,
+            FunctionExpression: checkFunction,
+            TSEmptyBodyFunctionExpression: checkFunction,
+            TSDeclareFunction: checkFunction,
+        };
+    },
+});
+//# sourceMappingURL=space-before-function-paren.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-before-function-paren.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-before-function-paren.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..4f69e199314d8a2e0d06e7ace5890e75748bd4ec
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-before-function-paren.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"space-before-function-paren.js","sourceRoot":"","sources":["../../src/rules/space-before-function-paren.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-infix-ops.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-infix-ops.js
new file mode 100644
index 0000000000000000000000000000000000000000..8651b09c7146cb5866ba6ec0da6c5cbe95792d57
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-infix-ops.js
@@ -0,0 +1,98 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const space_infix_ops_1 = __importDefault(require("eslint/lib/rules/space-infix-ops"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'space-infix-ops',
+    meta: {
+        type: 'layout',
+        docs: {
+            description: 'This rule is aimed at ensuring there are spaces around infix operators.',
+            category: 'Stylistic Issues',
+            recommended: false,
+            extendsBaseRule: true,
+        },
+        fixable: space_infix_ops_1.default.meta.fixable,
+        schema: space_infix_ops_1.default.meta.schema,
+        messages: (_a = space_infix_ops_1.default.meta.messages) !== null && _a !== void 0 ? _a : {
+            missingSpace: "Operator '{{operator}}' must be spaced.",
+        },
+    },
+    defaultOptions: [
+        {
+            int32Hint: false,
+        },
+    ],
+    create(context) {
+        const rules = space_infix_ops_1.default.create(context);
+        const sourceCode = context.getSourceCode();
+        /**
+         * Check if it has an assignment char and report if it's faulty
+         * @param node The node to report
+         */
+        function checkForAssignmentSpace(node) {
+            if (!node.initializer) {
+                return;
+            }
+            const leftNode = sourceCode.getTokenByRangeStart(node.id.range[0]);
+            const rightNode = sourceCode.getTokenByRangeStart(node.initializer.range[0]);
+            if (!rightNode) {
+                return;
+            }
+            const operator = sourceCode.getFirstTokenBetween(leftNode, rightNode, token => token.type === experimental_utils_1.AST_TOKEN_TYPES.Punctuator && token.value === '=');
+            const prev = sourceCode.getTokenBefore(operator);
+            const next = sourceCode.getTokenAfter(operator);
+            if (operator &&
+                (!sourceCode.isSpaceBetweenTokens(prev, operator) ||
+                    !sourceCode.isSpaceBetweenTokens(operator, next))) {
+                context.report({
+                    node: node,
+                    loc: operator.loc,
+                    messageId: 'missingSpace',
+                    data: {
+                        operator: operator.value,
+                    },
+                    fix(fixer) {
+                        const previousToken = sourceCode.getTokenBefore(operator);
+                        const afterToken = sourceCode.getTokenAfter(operator);
+                        let fixString = '';
+                        if (operator.range[0] - previousToken.range[1] === 0) {
+                            fixString = ' ';
+                        }
+                        fixString += operator.value;
+                        if (afterToken.range[0] - operator.range[1] === 0) {
+                            fixString += ' ';
+                        }
+                        return fixer.replaceText(operator, fixString);
+                    },
+                });
+            }
+        }
+        return Object.assign(Object.assign({}, rules), { TSEnumMember: checkForAssignmentSpace });
+    },
+});
+//# sourceMappingURL=space-infix-ops.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-infix-ops.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-infix-ops.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..71409a322c22eb9304d61afecb666ef9953a37d5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-infix-ops.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"space-infix-ops.js","sourceRoot":"","sources":["../../src/rules/space-infix-ops.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8EAG+C;AAC/C,uFAAwD;AACxD,8CAAgC;AAKhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,iBAAiB;IACvB,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE;YACJ,WAAW,EACT,yEAAyE;YAC3E,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,IAAI;SACtB;QACD,OAAO,EAAE,yBAAQ,CAAC,IAAI,CAAC,OAAO;QAC9B,MAAM,EAAE,yBAAQ,CAAC,IAAI,CAAC,MAAM;QAC5B,QAAQ,QAAE,yBAAQ,CAAC,IAAI,CAAC,QAAQ,mCAAI;YAClC,YAAY,EAAE,yCAAyC;SACxD;KACF;IACD,cAAc,EAAE;QACd;YACE,SAAS,EAAE,KAAK;SACjB;KACF;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,yBAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAE3C;;;WAGG;QACH,SAAS,uBAAuB,CAAC,IAA2B;YAC1D,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACrB,OAAO;aACR;YAED,MAAM,QAAQ,GAAG,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC;YACpE,MAAM,SAAS,GAAG,UAAU,CAAC,oBAAoB,CAC/C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CACzB,CAAC;YAEH,IAAI,CAAC,SAAS,EAAE;gBACd,OAAO;aACR;YAED,MAAM,QAAQ,GAAG,UAAU,CAAC,oBAAoB,CAC9C,QAAQ,EACR,SAAS,EACT,KAAK,CAAC,EAAE,CACN,KAAK,CAAC,IAAI,KAAK,oCAAe,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,CACnE,CAAC;YACF,MAAM,IAAI,GAAG,UAAU,CAAC,cAAc,CAAC,QAAS,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,CAAC,QAAS,CAAC,CAAC;YAEjD,IACE,QAAQ;gBACR,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAK,EAAE,QAAQ,CAAC;oBAChD,CAAC,UAAU,CAAC,oBAAoB,CAAC,QAAQ,EAAE,IAAK,CAAC,CAAC,EACpD;gBACA,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI,EAAE,IAAI;oBACV,GAAG,EAAE,QAAQ,CAAC,GAAG;oBACjB,SAAS,EAAE,cAAc;oBACzB,IAAI,EAAE;wBACJ,QAAQ,EAAE,QAAQ,CAAC,KAAK;qBACzB;oBACD,GAAG,CAAC,KAAK;wBACP,MAAM,aAAa,GAAG,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;wBAC1D,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;wBACtD,IAAI,SAAS,GAAG,EAAE,CAAC;wBAEnB,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,aAAc,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;4BACrD,SAAS,GAAG,GAAG,CAAC;yBACjB;wBAED,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC;wBAE5B,IAAI,UAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;4BAClD,SAAS,IAAI,GAAG,CAAC;yBAClB;wBAED,OAAO,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;oBAChD,CAAC;iBACF,CAAC,CAAC;aACJ;QACH,CAAC;QAED,uCACK,KAAK,KACR,YAAY,EAAE,uBAAuB,IACrC;IACJ,CAAC;CACF,CAAC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/strict-boolean-expressions.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/strict-boolean-expressions.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f2454c2a6c84f4a4f02b836e2e9bd9a6db5e8bc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/strict-boolean-expressions.js
@@ -0,0 +1,265 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const ts = __importStar(require("typescript"));
+const tsutils = __importStar(require("tsutils"));
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'strict-boolean-expressions',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Restricts the types allowed in boolean expressions',
+            category: 'Best Practices',
+            recommended: false,
+            requiresTypeChecking: true,
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    allowString: { type: 'boolean' },
+                    allowNumber: { type: 'boolean' },
+                    allowNullableObject: { type: 'boolean' },
+                    allowNullableBoolean: { type: 'boolean' },
+                    allowNullableString: { type: 'boolean' },
+                    allowNullableNumber: { type: 'boolean' },
+                    allowAny: { type: 'boolean' },
+                    allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+        messages: {
+            conditionErrorOther: 'Unexpected value in conditional. ' +
+                'A boolean expression is required.',
+            conditionErrorAny: 'Unexpected any value in conditional. ' +
+                'An explicit comparison or type cast is required.',
+            conditionErrorNullish: 'Unexpected nullish value in conditional. ' +
+                'The condition is always false.',
+            conditionErrorNullableBoolean: 'Unexpected nullable boolean value in conditional. ' +
+                'Please handle the nullish case explicitly.',
+            conditionErrorString: 'Unexpected string value in conditional. ' +
+                'An explicit empty string check is required.',
+            conditionErrorNullableString: 'Unexpected nullable string value in conditional. ' +
+                'Please handle the nullish/empty cases explicitly.',
+            conditionErrorNumber: 'Unexpected number value in conditional. ' +
+                'An explicit zero/NaN check is required.',
+            conditionErrorNullableNumber: 'Unexpected nullable number value in conditional. ' +
+                'Please handle the nullish/zero/NaN cases explicitly.',
+            conditionErrorObject: 'Unexpected object value in conditional. ' +
+                'The condition is always true.',
+            conditionErrorNullableObject: 'Unexpected nullable object value in conditional. ' +
+                'An explicit null check is required.',
+            noStrictNullCheck: 'This rule requires the `strictNullChecks` compiler option to be turned on to function correctly.',
+        },
+    },
+    defaultOptions: [
+        {
+            allowString: true,
+            allowNumber: true,
+            allowNullableObject: true,
+            allowNullableBoolean: false,
+            allowNullableString: false,
+            allowNullableNumber: false,
+            allowAny: false,
+            allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing: false,
+        },
+    ],
+    create(context, [options]) {
+        const service = util.getParserServices(context);
+        const checker = service.program.getTypeChecker();
+        const compilerOptions = service.program.getCompilerOptions();
+        const isStrictNullChecks = tsutils.isStrictCompilerOptionEnabled(compilerOptions, 'strictNullChecks');
+        if (!isStrictNullChecks &&
+            options.allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing !== true) {
+            context.report({
+                loc: {
+                    start: { line: 0, column: 0 },
+                    end: { line: 0, column: 0 },
+                },
+                messageId: 'noStrictNullCheck',
+            });
+        }
+        const checkedNodes = new Set();
+        return {
+            ConditionalExpression: checkTestExpression,
+            DoWhileStatement: checkTestExpression,
+            ForStatement: checkTestExpression,
+            IfStatement: checkTestExpression,
+            WhileStatement: checkTestExpression,
+            'LogicalExpression[operator!="??"]': checkNode,
+            'UnaryExpression[operator="!"]': checkUnaryLogicalExpression,
+        };
+        function checkTestExpression(node) {
+            if (node.test == null) {
+                return;
+            }
+            checkNode(node.test, true);
+        }
+        function checkUnaryLogicalExpression(node) {
+            checkNode(node.argument, true);
+        }
+        /**
+         * This function analyzes the type of a node and checks if it is allowed in a boolean context.
+         * It can recurse when checking nested logical operators, so that only the outermost operands are reported.
+         * The right operand of a logical expression is ignored unless it's a part of a test expression (if/while/ternary/etc).
+         * @param node The AST node to check.
+         * @param isTestExpr Whether the node is a descendant of a test expression.
+         */
+        function checkNode(node, isTestExpr = false) {
+            // prevent checking the same node multiple times
+            if (checkedNodes.has(node)) {
+                return;
+            }
+            checkedNodes.add(node);
+            // for logical operator, we check its operands
+            if (node.type === experimental_utils_1.AST_NODE_TYPES.LogicalExpression &&
+                node.operator !== '??') {
+                checkNode(node.left, isTestExpr);
+                // we ignore the right operand when not in a context of a test expression
+                if (isTestExpr) {
+                    checkNode(node.right, isTestExpr);
+                }
+                return;
+            }
+            const tsNode = service.esTreeNodeToTSNodeMap.get(node);
+            const type = util.getConstrainedTypeAtLocation(checker, tsNode);
+            const types = inspectVariantTypes(tsutils.unionTypeParts(type));
+            const is = (...wantedTypes) => types.size === wantedTypes.length &&
+                wantedTypes.every(type => types.has(type));
+            // boolean
+            if (is('boolean')) {
+                // boolean is always okay
+                return;
+            }
+            // never
+            if (is('never')) {
+                // never is always okay
+                return;
+            }
+            // nullish
+            if (is('nullish')) {
+                // condition is always false
+                context.report({ node, messageId: 'conditionErrorNullish' });
+                return;
+            }
+            // nullable boolean
+            if (is('nullish', 'boolean')) {
+                if (!options.allowNullableBoolean) {
+                    context.report({ node, messageId: 'conditionErrorNullableBoolean' });
+                }
+                return;
+            }
+            // string
+            if (is('string')) {
+                if (!options.allowString) {
+                    context.report({ node, messageId: 'conditionErrorString' });
+                }
+                return;
+            }
+            // nullable string
+            if (is('nullish', 'string')) {
+                if (!options.allowNullableString) {
+                    context.report({ node, messageId: 'conditionErrorNullableString' });
+                }
+                return;
+            }
+            // number
+            if (is('number')) {
+                if (!options.allowNumber) {
+                    context.report({ node, messageId: 'conditionErrorNumber' });
+                }
+                return;
+            }
+            // nullable number
+            if (is('nullish', 'number')) {
+                if (!options.allowNullableNumber) {
+                    context.report({ node, messageId: 'conditionErrorNullableNumber' });
+                }
+                return;
+            }
+            // object
+            if (is('object')) {
+                // condition is always true
+                context.report({ node, messageId: 'conditionErrorObject' });
+                return;
+            }
+            // nullable object
+            if (is('nullish', 'object')) {
+                if (!options.allowNullableObject) {
+                    context.report({ node, messageId: 'conditionErrorNullableObject' });
+                }
+                return;
+            }
+            // any
+            if (is('any')) {
+                if (!options.allowAny) {
+                    context.report({ node, messageId: 'conditionErrorAny' });
+                }
+                return;
+            }
+            // other
+            context.report({ node, messageId: 'conditionErrorOther' });
+        }
+        /**
+         * Check union variants for the types we care about
+         */
+        function inspectVariantTypes(types) {
+            const variantTypes = new Set();
+            if (types.some(type => tsutils.isTypeFlagSet(type, ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.VoidLike))) {
+                variantTypes.add('nullish');
+            }
+            if (types.some(type => tsutils.isTypeFlagSet(type, ts.TypeFlags.BooleanLike))) {
+                variantTypes.add('boolean');
+            }
+            if (types.some(type => tsutils.isTypeFlagSet(type, ts.TypeFlags.StringLike))) {
+                variantTypes.add('string');
+            }
+            if (types.some(type => tsutils.isTypeFlagSet(type, ts.TypeFlags.NumberLike | ts.TypeFlags.BigIntLike))) {
+                variantTypes.add('number');
+            }
+            if (types.some(type => !tsutils.isTypeFlagSet(type, ts.TypeFlags.Null |
+                ts.TypeFlags.Undefined |
+                ts.TypeFlags.VoidLike |
+                ts.TypeFlags.BooleanLike |
+                ts.TypeFlags.StringLike |
+                ts.TypeFlags.NumberLike |
+                ts.TypeFlags.BigIntLike |
+                ts.TypeFlags.Any |
+                ts.TypeFlags.Unknown |
+                ts.TypeFlags.Never))) {
+                variantTypes.add('object');
+            }
+            if (types.some(type => util.isTypeAnyType(type) || util.isTypeUnknownType(type))) {
+                variantTypes.add('any');
+            }
+            if (types.some(type => tsutils.isTypeFlagSet(type, ts.TypeFlags.Never))) {
+                variantTypes.add('never');
+            }
+            return variantTypes;
+        }
+    },
+});
+//# sourceMappingURL=strict-boolean-expressions.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/strict-boolean-expressions.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/strict-boolean-expressions.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..0c4d8dfb5f32193cace41d05a9b8cf9184f9fc10
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/strict-boolean-expressions.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"strict-boolean-expressions.js","sourceRoot":"","sources":["../../src/rules/strict-boolean-expressions.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/switch-exhaustiveness-check.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/switch-exhaustiveness-check.js
new file mode 100644
index 0000000000000000000000000000000000000000..110d2f745036d628fb4d8b1c9e3b8ed7610390f4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/switch-exhaustiveness-check.js
@@ -0,0 +1,144 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const ts = __importStar(require("typescript"));
+const util_1 = require("../util");
+const tsutils_1 = require("tsutils");
+exports.default = util_1.createRule({
+    name: 'switch-exhaustiveness-check',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Exhaustiveness checking in switch with union type',
+            category: 'Best Practices',
+            recommended: false,
+            suggestion: true,
+            requiresTypeChecking: true,
+        },
+        schema: [],
+        messages: {
+            switchIsNotExhaustive: 'Switch is not exhaustive. Cases not matched: {{missingBranches}}',
+            addMissingCases: 'Add branches for missing cases.',
+        },
+    },
+    defaultOptions: [],
+    create(context) {
+        const sourceCode = context.getSourceCode();
+        const service = util_1.getParserServices(context);
+        const checker = service.program.getTypeChecker();
+        const compilerOptions = service.program.getCompilerOptions();
+        function getNodeType(node) {
+            const tsNode = service.esTreeNodeToTSNodeMap.get(node);
+            return util_1.getConstrainedTypeAtLocation(checker, tsNode);
+        }
+        function fixSwitch(fixer, node, missingBranchTypes, symbolName) {
+            var _a;
+            const lastCase = node.cases.length > 0 ? node.cases[node.cases.length - 1] : null;
+            const caseIndent = lastCase
+                ? ' '.repeat(lastCase.loc.start.column)
+                : // if there are no cases, use indentation of the switch statement
+                    // and leave it to user to format it correctly
+                    ' '.repeat(node.loc.start.column);
+            const missingCases = [];
+            for (const missingBranchType of missingBranchTypes) {
+                // While running this rule on checker.ts of TypeScript project
+                // the fix introduced a compiler error due to:
+                //
+                // type __String = (string & {
+                //         __escapedIdentifier: void;
+                //     }) | (void & {
+                //         __escapedIdentifier: void;
+                //     }) | InternalSymbolName;
+                //
+                // The following check fixes it.
+                if (missingBranchType.isIntersection()) {
+                    continue;
+                }
+                const missingBranchName = (_a = missingBranchType.getSymbol()) === null || _a === void 0 ? void 0 : _a.escapedName;
+                let caseTest = checker.typeToString(missingBranchType);
+                if (symbolName &&
+                    (missingBranchName || missingBranchName === '') &&
+                    util_1.requiresQuoting(missingBranchName.toString(), compilerOptions.target)) {
+                    caseTest = `${symbolName}['${missingBranchName}']`;
+                }
+                const errorMessage = `Not implemented yet: ${caseTest} case`;
+                missingCases.push(`case ${caseTest}: { throw new Error('${errorMessage}') }`);
+            }
+            const fixString = missingCases
+                .map(code => `${caseIndent}${code}`)
+                .join('\n');
+            if (lastCase) {
+                return fixer.insertTextAfter(lastCase, `\n${fixString}`);
+            }
+            // there were no existing cases
+            const openingBrace = sourceCode.getTokenAfter(node.discriminant, util_1.isOpeningBraceToken);
+            const closingBrace = sourceCode.getTokenAfter(node.discriminant, util_1.isClosingBraceToken);
+            return fixer.replaceTextRange([openingBrace.range[0], closingBrace.range[1]], ['{', fixString, `${caseIndent}}`].join('\n'));
+        }
+        function checkSwitchExhaustive(node) {
+            var _a;
+            const discriminantType = getNodeType(node.discriminant);
+            const symbolName = (_a = discriminantType.getSymbol()) === null || _a === void 0 ? void 0 : _a.escapedName;
+            if (discriminantType.isUnion()) {
+                const unionTypes = tsutils_1.unionTypeParts(discriminantType);
+                const caseTypes = new Set();
+                for (const switchCase of node.cases) {
+                    if (switchCase.test === null) {
+                        // Switch has 'default' branch - do nothing.
+                        return;
+                    }
+                    caseTypes.add(getNodeType(switchCase.test));
+                }
+                const missingBranchTypes = unionTypes.filter(unionType => !caseTypes.has(unionType));
+                if (missingBranchTypes.length === 0) {
+                    // All cases matched - do nothing.
+                    return;
+                }
+                context.report({
+                    node: node.discriminant,
+                    messageId: 'switchIsNotExhaustive',
+                    data: {
+                        missingBranches: missingBranchTypes
+                            .map(missingType => {
+                            var _a;
+                            return tsutils_1.isTypeFlagSet(missingType, ts.TypeFlags.ESSymbolLike)
+                                ? `typeof ${(_a = missingType.getSymbol()) === null || _a === void 0 ? void 0 : _a.escapedName}`
+                                : checker.typeToString(missingType);
+                        })
+                            .join(' | '),
+                    },
+                    suggest: [
+                        {
+                            messageId: 'addMissingCases',
+                            fix(fixer) {
+                                return fixSwitch(fixer, node, missingBranchTypes, symbolName === null || symbolName === void 0 ? void 0 : symbolName.toString());
+                            },
+                        },
+                    ],
+                });
+            }
+        }
+        return {
+            SwitchStatement: checkSwitchExhaustive,
+        };
+    },
+});
+//# sourceMappingURL=switch-exhaustiveness-check.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/switch-exhaustiveness-check.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/switch-exhaustiveness-check.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..27333a9d1d1a96f2de27ac3bed9b3e8c9e14769a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/switch-exhaustiveness-check.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"switch-exhaustiveness-check.js","sourceRoot":"","sources":["../../src/rules/switch-exhaustiveness-check.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/triple-slash-reference.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/triple-slash-reference.js
new file mode 100644
index 0000000000000000000000000000000000000000..e5139ed76fdae392b73fabc0db35d6120b237b32
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/triple-slash-reference.js
@@ -0,0 +1,126 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'triple-slash-reference',
+    meta: {
+        type: 'suggestion',
+        docs: {
+            description: 'Sets preference level for triple slash directives versus ES6-style import declarations',
+            category: 'Best Practices',
+            recommended: 'error',
+        },
+        messages: {
+            tripleSlashReference: 'Do not use a triple slash reference for {{module}}, use `import` style instead.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    lib: {
+                        enum: ['always', 'never'],
+                    },
+                    path: {
+                        enum: ['always', 'never'],
+                    },
+                    types: {
+                        enum: ['always', 'never', 'prefer-import'],
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [
+        {
+            lib: 'always',
+            path: 'never',
+            types: 'prefer-import',
+        },
+    ],
+    create(context, [{ lib, path, types }]) {
+        let programNode;
+        const sourceCode = context.getSourceCode();
+        const references = [];
+        function hasMatchingReference(source) {
+            references.forEach(reference => {
+                if (reference.importName === source.value) {
+                    context.report({
+                        node: reference.comment,
+                        messageId: 'tripleSlashReference',
+                        data: {
+                            module: reference.importName,
+                        },
+                    });
+                }
+            });
+        }
+        return {
+            ImportDeclaration(node) {
+                if (programNode) {
+                    hasMatchingReference(node.source);
+                }
+            },
+            TSImportEqualsDeclaration(node) {
+                if (programNode) {
+                    const reference = node.moduleReference;
+                    if (reference.type === experimental_utils_1.AST_NODE_TYPES.TSExternalModuleReference) {
+                        hasMatchingReference(reference.expression);
+                    }
+                }
+            },
+            Program(node) {
+                if (lib === 'always' && path === 'always' && types == 'always') {
+                    return;
+                }
+                programNode = node;
+                const referenceRegExp = /^\/\s*<reference\s*(types|path|lib)\s*=\s*["|'](.*)["|']/;
+                const commentsBefore = sourceCode.getCommentsBefore(programNode);
+                commentsBefore.forEach(comment => {
+                    if (comment.type !== experimental_utils_1.AST_TOKEN_TYPES.Line) {
+                        return;
+                    }
+                    const referenceResult = referenceRegExp.exec(comment.value);
+                    if (referenceResult) {
+                        if ((referenceResult[1] === 'types' && types === 'never') ||
+                            (referenceResult[1] === 'path' && path === 'never') ||
+                            (referenceResult[1] === 'lib' && lib === 'never')) {
+                            context.report({
+                                node: comment,
+                                messageId: 'tripleSlashReference',
+                                data: {
+                                    module: referenceResult[2],
+                                },
+                            });
+                            return;
+                        }
+                        if (referenceResult[1] === 'types' && types === 'prefer-import') {
+                            references.push({ comment, importName: referenceResult[2] });
+                        }
+                    }
+                });
+            },
+        };
+    },
+});
+//# sourceMappingURL=triple-slash-reference.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/triple-slash-reference.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/triple-slash-reference.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..92735abd33133f0d2a765e7d93bba77706df39a5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/triple-slash-reference.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"triple-slash-reference.js","sourceRoot":"","sources":["../../src/rules/triple-slash-reference.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/type-annotation-spacing.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/type-annotation-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..fc017d7a9f66c461d22eefc3776096c44562e961
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/type-annotation-spacing.js
@@ -0,0 +1,221 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const util = __importStar(require("../util"));
+const util_1 = require("../util");
+const definition = {
+    type: 'object',
+    properties: {
+        before: { type: 'boolean' },
+        after: { type: 'boolean' },
+    },
+    additionalProperties: false,
+};
+function createRules(options) {
+    var _a;
+    const globals = Object.assign(Object.assign({}, ((options === null || options === void 0 ? void 0 : options.before) !== undefined ? { before: options.before } : {})), ((options === null || options === void 0 ? void 0 : options.after) !== undefined ? { after: options.after } : {}));
+    const override = (_a = options === null || options === void 0 ? void 0 : options.overrides) !== null && _a !== void 0 ? _a : {};
+    const colon = Object.assign(Object.assign({ before: false, after: true }, globals), override === null || override === void 0 ? void 0 : override.colon);
+    const arrow = Object.assign(Object.assign({ before: true, after: true }, globals), override === null || override === void 0 ? void 0 : override.arrow);
+    return {
+        colon: colon,
+        arrow: arrow,
+        variable: Object.assign(Object.assign({}, colon), override === null || override === void 0 ? void 0 : override.variable),
+        property: Object.assign(Object.assign({}, colon), override === null || override === void 0 ? void 0 : override.property),
+        parameter: Object.assign(Object.assign({}, colon), override === null || override === void 0 ? void 0 : override.parameter),
+        returnType: Object.assign(Object.assign({}, colon), override === null || override === void 0 ? void 0 : override.returnType),
+    };
+}
+function getIdentifierRules(rules, node) {
+    const scope = node === null || node === void 0 ? void 0 : node.parent;
+    if (util_1.isVariableDeclarator(scope)) {
+        return rules.variable;
+    }
+    else if (util_1.isFunctionOrFunctionType(scope)) {
+        return rules.parameter;
+    }
+    else {
+        return rules.colon;
+    }
+}
+function getRules(rules, node) {
+    var _a;
+    const scope = (_a = node === null || node === void 0 ? void 0 : node.parent) === null || _a === void 0 ? void 0 : _a.parent;
+    if (util_1.isTSFunctionType(scope) || util_1.isTSConstructorType(scope)) {
+        return rules.arrow;
+    }
+    else if (util_1.isIdentifier(scope)) {
+        return getIdentifierRules(rules, scope);
+    }
+    else if (util_1.isClassOrTypeElement(scope)) {
+        return rules.property;
+    }
+    else if (util_1.isFunction(scope)) {
+        return rules.returnType;
+    }
+    else {
+        return rules.colon;
+    }
+}
+exports.default = util.createRule({
+    name: 'type-annotation-spacing',
+    meta: {
+        type: 'layout',
+        docs: {
+            description: 'Require consistent spacing around type annotations',
+            category: 'Stylistic Issues',
+            recommended: false,
+        },
+        fixable: 'whitespace',
+        messages: {
+            expectedSpaceAfter: "Expected a space after the '{{type}}'.",
+            expectedSpaceBefore: "Expected a space before the '{{type}}'.",
+            unexpectedSpaceAfter: "Unexpected space after the '{{type}}'.",
+            unexpectedSpaceBefore: "Unexpected space before the '{{type}}'.",
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    before: { type: 'boolean' },
+                    after: { type: 'boolean' },
+                    overrides: {
+                        type: 'object',
+                        properties: {
+                            colon: definition,
+                            arrow: definition,
+                            variable: definition,
+                            parameter: definition,
+                            property: definition,
+                            returnType: definition,
+                        },
+                        additionalProperties: false,
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+    },
+    defaultOptions: [
+        // technically there is a default, but the overrides mean
+        // that if we apply them here, it will break the no override case.
+        {},
+    ],
+    create(context, [options]) {
+        const punctuators = [':', '=>'];
+        const sourceCode = context.getSourceCode();
+        const ruleSet = createRules(options);
+        /**
+         * Checks if there's proper spacing around type annotations (no space
+         * before colon, one space after).
+         */
+        function checkTypeAnnotationSpacing(typeAnnotation) {
+            const nextToken = typeAnnotation;
+            const punctuatorTokenEnd = sourceCode.getTokenBefore(nextToken);
+            let punctuatorTokenStart = punctuatorTokenEnd;
+            let previousToken = sourceCode.getTokenBefore(punctuatorTokenEnd);
+            let type = punctuatorTokenEnd.value;
+            if (!punctuators.includes(type)) {
+                return;
+            }
+            const { before, after } = getRules(ruleSet, typeAnnotation);
+            if (type === ':' && previousToken.value === '?') {
+                // shift the start to the ?
+                type = '?:';
+                punctuatorTokenStart = previousToken;
+                previousToken = sourceCode.getTokenBefore(previousToken);
+                // handle the +/- modifiers for optional modification operators
+                if (previousToken.value === '+' || previousToken.value === '-') {
+                    type = `${previousToken.value}?:`;
+                    punctuatorTokenStart = previousToken;
+                    previousToken = sourceCode.getTokenBefore(previousToken);
+                }
+            }
+            const previousDelta = punctuatorTokenStart.range[0] - previousToken.range[1];
+            const nextDelta = nextToken.range[0] - punctuatorTokenEnd.range[1];
+            if (after && nextDelta === 0) {
+                context.report({
+                    node: punctuatorTokenEnd,
+                    messageId: 'expectedSpaceAfter',
+                    data: {
+                        type,
+                    },
+                    fix(fixer) {
+                        return fixer.insertTextAfter(punctuatorTokenEnd, ' ');
+                    },
+                });
+            }
+            else if (!after && nextDelta > 0) {
+                context.report({
+                    node: punctuatorTokenEnd,
+                    messageId: 'unexpectedSpaceAfter',
+                    data: {
+                        type,
+                    },
+                    fix(fixer) {
+                        return fixer.removeRange([
+                            punctuatorTokenEnd.range[1],
+                            nextToken.range[0],
+                        ]);
+                    },
+                });
+            }
+            if (before && previousDelta === 0) {
+                context.report({
+                    node: punctuatorTokenStart,
+                    messageId: 'expectedSpaceBefore',
+                    data: {
+                        type,
+                    },
+                    fix(fixer) {
+                        return fixer.insertTextAfter(previousToken, ' ');
+                    },
+                });
+            }
+            else if (!before && previousDelta > 0) {
+                context.report({
+                    node: punctuatorTokenStart,
+                    messageId: 'unexpectedSpaceBefore',
+                    data: {
+                        type,
+                    },
+                    fix(fixer) {
+                        return fixer.removeRange([
+                            previousToken.range[1],
+                            punctuatorTokenStart.range[0],
+                        ]);
+                    },
+                });
+            }
+        }
+        return {
+            TSMappedType(node) {
+                if (node.typeAnnotation) {
+                    checkTypeAnnotationSpacing(node.typeAnnotation);
+                }
+            },
+            TSTypeAnnotation(node) {
+                checkTypeAnnotationSpacing(node.typeAnnotation);
+            },
+        };
+    },
+});
+//# sourceMappingURL=type-annotation-spacing.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/type-annotation-spacing.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/type-annotation-spacing.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..fb0086405b4ca01bab6d92da09fd86a777aec362
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/type-annotation-spacing.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"type-annotation-spacing.js","sourceRoot":"","sources":["../../src/rules/type-annotation-spacing.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/typedef.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/typedef.js
new file mode 100644
index 0000000000000000000000000000000000000000..fb4c63ca4c8849e85a2eeecace323c4d5e3a304d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/typedef.js
@@ -0,0 +1,204 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'typedef',
+    meta: {
+        docs: {
+            description: 'Requires type annotations to exist',
+            category: 'Stylistic Issues',
+            recommended: false,
+        },
+        messages: {
+            expectedTypedef: 'Expected a type annotation.',
+            expectedTypedefNamed: 'Expected {{name}} to have a type annotation.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    ["arrayDestructuring" /* ArrayDestructuring */]: { type: 'boolean' },
+                    ["arrowParameter" /* ArrowParameter */]: { type: 'boolean' },
+                    ["memberVariableDeclaration" /* MemberVariableDeclaration */]: { type: 'boolean' },
+                    ["objectDestructuring" /* ObjectDestructuring */]: { type: 'boolean' },
+                    ["parameter" /* Parameter */]: { type: 'boolean' },
+                    ["propertyDeclaration" /* PropertyDeclaration */]: { type: 'boolean' },
+                    ["variableDeclaration" /* VariableDeclaration */]: { type: 'boolean' },
+                    ["variableDeclarationIgnoreFunction" /* VariableDeclarationIgnoreFunction */]: { type: 'boolean' },
+                },
+            },
+        ],
+        type: 'suggestion',
+    },
+    defaultOptions: [
+        {
+            ["arrayDestructuring" /* ArrayDestructuring */]: false,
+            ["arrowParameter" /* ArrowParameter */]: false,
+            ["memberVariableDeclaration" /* MemberVariableDeclaration */]: false,
+            ["objectDestructuring" /* ObjectDestructuring */]: false,
+            ["parameter" /* Parameter */]: false,
+            ["propertyDeclaration" /* PropertyDeclaration */]: false,
+            ["variableDeclaration" /* VariableDeclaration */]: false,
+            ["variableDeclarationIgnoreFunction" /* VariableDeclarationIgnoreFunction */]: false,
+        },
+    ],
+    create(context, [options]) {
+        function report(location, name) {
+            context.report({
+                node: location,
+                messageId: name ? 'expectedTypedefNamed' : 'expectedTypedef',
+                data: { name },
+            });
+        }
+        function getNodeName(node) {
+            return node.type === experimental_utils_1.AST_NODE_TYPES.Identifier ? node.name : undefined;
+        }
+        function isForOfStatementContext(node) {
+            let current = node.parent;
+            while (current) {
+                switch (current.type) {
+                    case experimental_utils_1.AST_NODE_TYPES.VariableDeclarator:
+                    case experimental_utils_1.AST_NODE_TYPES.VariableDeclaration:
+                    case experimental_utils_1.AST_NODE_TYPES.ObjectPattern:
+                    case experimental_utils_1.AST_NODE_TYPES.ArrayPattern:
+                    case experimental_utils_1.AST_NODE_TYPES.Property:
+                        current = current.parent;
+                        break;
+                    case experimental_utils_1.AST_NODE_TYPES.ForOfStatement:
+                        return true;
+                    default:
+                        current = undefined;
+                }
+            }
+            return false;
+        }
+        function checkParameters(params) {
+            for (const param of params) {
+                let annotationNode;
+                switch (param.type) {
+                    case experimental_utils_1.AST_NODE_TYPES.AssignmentPattern:
+                        annotationNode = param.left;
+                        break;
+                    case experimental_utils_1.AST_NODE_TYPES.TSParameterProperty:
+                        annotationNode = param.parameter;
+                        // Check TS parameter property with default value like `constructor(private param: string = 'something') {}`
+                        if (annotationNode &&
+                            annotationNode.type === experimental_utils_1.AST_NODE_TYPES.AssignmentPattern) {
+                            annotationNode = annotationNode.left;
+                        }
+                        break;
+                    default:
+                        annotationNode = param;
+                        break;
+                }
+                if (annotationNode !== undefined && !annotationNode.typeAnnotation) {
+                    report(param, getNodeName(param));
+                }
+            }
+        }
+        function isVariableDeclarationIgnoreFunction(node) {
+            return (!!options["variableDeclarationIgnoreFunction" /* VariableDeclarationIgnoreFunction */] &&
+                (node.type === experimental_utils_1.AST_NODE_TYPES.FunctionExpression ||
+                    node.type === experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression));
+        }
+        return {
+            ArrayPattern(node) {
+                var _a;
+                if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.RestElement &&
+                    node.parent.typeAnnotation) {
+                    return;
+                }
+                if (options["arrayDestructuring" /* ArrayDestructuring */] &&
+                    !node.typeAnnotation &&
+                    !isForOfStatementContext(node)) {
+                    report(node);
+                }
+            },
+            ArrowFunctionExpression(node) {
+                if (options["arrowParameter" /* ArrowParameter */]) {
+                    checkParameters(node.params);
+                }
+            },
+            ClassProperty(node) {
+                if (node.value && isVariableDeclarationIgnoreFunction(node.value)) {
+                    return;
+                }
+                if (options["memberVariableDeclaration" /* MemberVariableDeclaration */] &&
+                    !node.typeAnnotation) {
+                    report(node, node.key.type === experimental_utils_1.AST_NODE_TYPES.Identifier
+                        ? node.key.name
+                        : undefined);
+                }
+            },
+            'FunctionDeclaration, FunctionExpression'(node) {
+                if (options["parameter" /* Parameter */]) {
+                    checkParameters(node.params);
+                }
+            },
+            ObjectPattern(node) {
+                if (options["objectDestructuring" /* ObjectDestructuring */] &&
+                    !node.typeAnnotation &&
+                    !isForOfStatementContext(node)) {
+                    report(node);
+                }
+            },
+            'TSIndexSignature, TSPropertySignature'(node) {
+                if (options["propertyDeclaration" /* PropertyDeclaration */] && !node.typeAnnotation) {
+                    report(node, node.type === experimental_utils_1.AST_NODE_TYPES.TSPropertySignature
+                        ? getNodeName(node.key)
+                        : undefined);
+                }
+            },
+            VariableDeclarator(node) {
+                if (!options["variableDeclaration" /* VariableDeclaration */] ||
+                    node.id.typeAnnotation ||
+                    (node.id.type === experimental_utils_1.AST_NODE_TYPES.ArrayPattern &&
+                        !options["arrayDestructuring" /* ArrayDestructuring */]) ||
+                    (node.id.type === experimental_utils_1.AST_NODE_TYPES.ObjectPattern &&
+                        !options["objectDestructuring" /* ObjectDestructuring */]) ||
+                    (node.init && isVariableDeclarationIgnoreFunction(node.init))) {
+                    return;
+                }
+                let current = node.parent;
+                while (current) {
+                    switch (current.type) {
+                        case experimental_utils_1.AST_NODE_TYPES.VariableDeclaration:
+                            // Keep looking upwards
+                            current = current.parent;
+                            break;
+                        case experimental_utils_1.AST_NODE_TYPES.ForOfStatement:
+                        case experimental_utils_1.AST_NODE_TYPES.ForInStatement:
+                            // Stop traversing and don't report an error
+                            return;
+                        default:
+                            // Stop traversing
+                            current = undefined;
+                            break;
+                    }
+                }
+                report(node, getNodeName(node.id));
+            },
+        };
+    },
+});
+//# sourceMappingURL=typedef.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/typedef.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/typedef.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..bc2080836b9df1f4ae8c008c70dbbaa9890dc807
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/typedef.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"typedef.js","sourceRoot":"","sources":["../../src/rules/typedef.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unbound-method.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unbound-method.js
new file mode 100644
index 0000000000000000000000000000000000000000..184b481ca6931802b42d3b9c1a50c20d66fb818f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unbound-method.js
@@ -0,0 +1,265 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const tsutils = __importStar(require("tsutils"));
+const ts = __importStar(require("typescript"));
+const util = __importStar(require("../util"));
+/**
+ * The following is a list of exceptions to the rule
+ * Generated via the following script.
+ * This is statically defined to save making purposely invalid calls every lint run
+ * ```
+SUPPORTED_GLOBALS.flatMap(namespace => {
+  const object = window[namespace];
+    return Object.getOwnPropertyNames(object)
+      .filter(
+        name =>
+          !name.startsWith('_') &&
+          typeof object[name] === 'function',
+      )
+      .map(name => {
+        try {
+          const x = object[name];
+          x();
+        } catch (e) {
+          if (e.message.includes("called on non-object")) {
+            return `${namespace}.${name}`;
+          }
+        }
+      });
+}).filter(Boolean);
+   * ```
+ */
+const nativelyNotBoundMembers = new Set([
+    'Promise.all',
+    'Promise.race',
+    'Promise.resolve',
+    'Promise.reject',
+    'Promise.allSettled',
+    'Object.defineProperties',
+    'Object.defineProperty',
+    'Reflect.defineProperty',
+    'Reflect.deleteProperty',
+    'Reflect.get',
+    'Reflect.getOwnPropertyDescriptor',
+    'Reflect.getPrototypeOf',
+    'Reflect.has',
+    'Reflect.isExtensible',
+    'Reflect.ownKeys',
+    'Reflect.preventExtensions',
+    'Reflect.set',
+    'Reflect.setPrototypeOf',
+]);
+const SUPPORTED_GLOBALS = [
+    'Number',
+    'Object',
+    'String',
+    'RegExp',
+    'Symbol',
+    'Array',
+    'Proxy',
+    'Date',
+    'Infinity',
+    'Atomics',
+    'Reflect',
+    'console',
+    'Math',
+    'JSON',
+    'Intl',
+];
+const nativelyBoundMembers = SUPPORTED_GLOBALS.map(namespace => {
+    if (!(namespace in global)) {
+        // node.js might not have namespaces like Intl depending on compilation options
+        // https://nodejs.org/api/intl.html#intl_options_for_building_node_js
+        return [];
+    }
+    const object = global[namespace];
+    return Object.getOwnPropertyNames(object)
+        .filter(name => !name.startsWith('_') &&
+        typeof object[name] === 'function')
+        .map(name => `${namespace}.${name}`);
+})
+    .reduce((arr, names) => arr.concat(names), [])
+    .filter(name => !nativelyNotBoundMembers.has(name));
+const isNotImported = (symbol, currentSourceFile) => {
+    const { valueDeclaration } = symbol;
+    if (!valueDeclaration) {
+        // working around https://github.com/microsoft/TypeScript/issues/31294
+        return false;
+    }
+    return (!!currentSourceFile &&
+        currentSourceFile !== valueDeclaration.getSourceFile());
+};
+const getNodeName = (node) => node.type === experimental_utils_1.AST_NODE_TYPES.Identifier ? node.name : null;
+const getMemberFullName = (node) => `${getNodeName(node.object)}.${getNodeName(node.property)}`;
+exports.default = util.createRule({
+    name: 'unbound-method',
+    meta: {
+        docs: {
+            category: 'Best Practices',
+            description: 'Enforces unbound methods are called with their expected scope',
+            recommended: 'error',
+            requiresTypeChecking: true,
+        },
+        messages: {
+            unbound: 'Avoid referencing unbound methods which may cause unintentional scoping of `this`.',
+        },
+        schema: [
+            {
+                type: 'object',
+                properties: {
+                    ignoreStatic: {
+                        type: 'boolean',
+                    },
+                },
+                additionalProperties: false,
+            },
+        ],
+        type: 'problem',
+    },
+    defaultOptions: [
+        {
+            ignoreStatic: false,
+        },
+    ],
+    create(context, [{ ignoreStatic }]) {
+        const parserServices = util.getParserServices(context);
+        const checker = parserServices.program.getTypeChecker();
+        const currentSourceFile = parserServices.program.getSourceFile(context.getFilename());
+        return {
+            MemberExpression(node) {
+                if (isSafeUse(node)) {
+                    return;
+                }
+                const objectSymbol = checker.getSymbolAtLocation(parserServices.esTreeNodeToTSNodeMap.get(node.object));
+                if (objectSymbol &&
+                    nativelyBoundMembers.includes(getMemberFullName(node)) &&
+                    isNotImported(objectSymbol, currentSourceFile)) {
+                    return;
+                }
+                const originalNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+                const symbol = checker.getSymbolAtLocation(originalNode);
+                if (symbol && isDangerousMethod(symbol, ignoreStatic)) {
+                    context.report({
+                        messageId: 'unbound',
+                        node,
+                    });
+                }
+            },
+            'VariableDeclarator, AssignmentExpression'(node) {
+                const [idNode, initNode] = node.type === experimental_utils_1.AST_NODE_TYPES.VariableDeclarator
+                    ? [node.id, node.init]
+                    : [node.left, node.right];
+                if (initNode && idNode.type === experimental_utils_1.AST_NODE_TYPES.ObjectPattern) {
+                    const tsNode = parserServices.esTreeNodeToTSNodeMap.get(initNode);
+                    const rightSymbol = checker.getSymbolAtLocation(tsNode);
+                    const initTypes = checker.getTypeAtLocation(tsNode);
+                    const notImported = rightSymbol && isNotImported(rightSymbol, currentSourceFile);
+                    idNode.properties.forEach(property => {
+                        if (property.type === experimental_utils_1.AST_NODE_TYPES.Property &&
+                            property.key.type === experimental_utils_1.AST_NODE_TYPES.Identifier) {
+                            if (notImported &&
+                                util.isIdentifier(initNode) &&
+                                nativelyBoundMembers.includes(`${initNode.name}.${property.key.name}`)) {
+                                return;
+                            }
+                            const symbol = initTypes.getProperty(property.key.name);
+                            if (symbol && isDangerousMethod(symbol, ignoreStatic)) {
+                                context.report({
+                                    messageId: 'unbound',
+                                    node,
+                                });
+                            }
+                        }
+                    });
+                }
+            },
+        };
+    },
+});
+function isDangerousMethod(symbol, ignoreStatic) {
+    var _a, _b;
+    const { valueDeclaration } = symbol;
+    if (!valueDeclaration) {
+        // working around https://github.com/microsoft/TypeScript/issues/31294
+        return false;
+    }
+    switch (valueDeclaration.kind) {
+        case ts.SyntaxKind.PropertyDeclaration:
+            return (((_a = valueDeclaration.initializer) === null || _a === void 0 ? void 0 : _a.kind) ===
+                ts.SyntaxKind.FunctionExpression);
+        case ts.SyntaxKind.MethodDeclaration:
+        case ts.SyntaxKind.MethodSignature: {
+            const decl = valueDeclaration;
+            const firstParam = decl.parameters[0];
+            const thisArgIsVoid = (firstParam === null || firstParam === void 0 ? void 0 : firstParam.name.kind) === ts.SyntaxKind.Identifier &&
+                (firstParam === null || firstParam === void 0 ? void 0 : firstParam.name.escapedText) === 'this' &&
+                ((_b = firstParam === null || firstParam === void 0 ? void 0 : firstParam.type) === null || _b === void 0 ? void 0 : _b.kind) === ts.SyntaxKind.VoidKeyword;
+            return (!thisArgIsVoid &&
+                !(ignoreStatic &&
+                    tsutils.hasModifier(valueDeclaration.modifiers, ts.SyntaxKind.StaticKeyword)));
+        }
+    }
+    return false;
+}
+function isSafeUse(node) {
+    const parent = node.parent;
+    switch (parent === null || parent === void 0 ? void 0 : parent.type) {
+        case experimental_utils_1.AST_NODE_TYPES.IfStatement:
+        case experimental_utils_1.AST_NODE_TYPES.ForStatement:
+        case experimental_utils_1.AST_NODE_TYPES.MemberExpression:
+        case experimental_utils_1.AST_NODE_TYPES.SwitchStatement:
+        case experimental_utils_1.AST_NODE_TYPES.UpdateExpression:
+        case experimental_utils_1.AST_NODE_TYPES.WhileStatement:
+            return true;
+        case experimental_utils_1.AST_NODE_TYPES.CallExpression:
+            return parent.callee === node;
+        case experimental_utils_1.AST_NODE_TYPES.ConditionalExpression:
+            return parent.test === node;
+        case experimental_utils_1.AST_NODE_TYPES.TaggedTemplateExpression:
+            return parent.tag === node;
+        case experimental_utils_1.AST_NODE_TYPES.UnaryExpression:
+            // the first case is safe for obvious
+            // reasons. The second one is also fine
+            // since we're returning something falsy
+            return ['typeof', '!', 'void', 'delete'].includes(parent.operator);
+        case experimental_utils_1.AST_NODE_TYPES.BinaryExpression:
+            return ['instanceof', '==', '!=', '===', '!=='].includes(parent.operator);
+        case experimental_utils_1.AST_NODE_TYPES.AssignmentExpression:
+            return parent.operator === '=' && node === parent.left;
+        case experimental_utils_1.AST_NODE_TYPES.ChainExpression:
+        case experimental_utils_1.AST_NODE_TYPES.TSNonNullExpression:
+        case experimental_utils_1.AST_NODE_TYPES.TSAsExpression:
+        case experimental_utils_1.AST_NODE_TYPES.TSTypeAssertion:
+            return isSafeUse(parent);
+        case experimental_utils_1.AST_NODE_TYPES.LogicalExpression:
+            if (parent.operator === '&&' && parent.left === node) {
+                // this is safe, as && will return the left if and only if it's falsy
+                return true;
+            }
+            // in all other cases, it's likely the logical expression will return the method ref
+            // so make sure the parent is a safe usage
+            return isSafeUse(parent);
+    }
+    return false;
+}
+//# sourceMappingURL=unbound-method.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unbound-method.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unbound-method.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..68106777a208dae8bed6298b66c57a8d0594f489
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unbound-method.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unbound-method.js","sourceRoot":"","sources":["../../src/rules/unbound-method.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unified-signatures.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unified-signatures.js
new file mode 100644
index 0000000000000000000000000000000000000000..c20553a4c0520d36dcab607292271401bc07534b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unified-signatures.js
@@ -0,0 +1,396 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const util = __importStar(require("../util"));
+exports.default = util.createRule({
+    name: 'unified-signatures',
+    meta: {
+        docs: {
+            description: 'Warns for any two overloads that could be unified into one by using a union or an optional/rest parameter',
+            category: 'Variables',
+            // too opinionated to be recommended
+            recommended: false,
+        },
+        type: 'suggestion',
+        messages: {
+            omittingRestParameter: '{{failureStringStart}} with a rest parameter.',
+            omittingSingleParameter: '{{failureStringStart}} with an optional parameter.',
+            singleParameterDifference: '{{failureStringStart}} taking `{{type1}} | {{type2}}`.',
+        },
+        schema: [],
+    },
+    defaultOptions: [],
+    create(context) {
+        const sourceCode = context.getSourceCode();
+        //----------------------------------------------------------------------
+        // Helpers
+        //----------------------------------------------------------------------
+        function failureStringStart(otherLine) {
+            // For only 2 overloads we don't need to specify which is the other one.
+            const overloads = otherLine === undefined
+                ? 'These overloads'
+                : `This overload and the one on line ${otherLine}`;
+            return `${overloads} can be combined into one signature`;
+        }
+        function addFailures(failures) {
+            for (const failure of failures) {
+                const { unify, only2 } = failure;
+                switch (unify.kind) {
+                    case 'single-parameter-difference': {
+                        const { p0, p1 } = unify;
+                        const lineOfOtherOverload = only2 ? undefined : p0.loc.start.line;
+                        const typeAnnotation0 = isTSParameterProperty(p0)
+                            ? p0.parameter.typeAnnotation
+                            : p0.typeAnnotation;
+                        const typeAnnotation1 = isTSParameterProperty(p1)
+                            ? p1.parameter.typeAnnotation
+                            : p1.typeAnnotation;
+                        context.report({
+                            loc: p1.loc,
+                            messageId: 'singleParameterDifference',
+                            data: {
+                                failureStringStart: failureStringStart(lineOfOtherOverload),
+                                type1: sourceCode.getText(typeAnnotation0 === null || typeAnnotation0 === void 0 ? void 0 : typeAnnotation0.typeAnnotation),
+                                type2: sourceCode.getText(typeAnnotation1 === null || typeAnnotation1 === void 0 ? void 0 : typeAnnotation1.typeAnnotation),
+                            },
+                            node: p1,
+                        });
+                        break;
+                    }
+                    case 'extra-parameter': {
+                        const { extraParameter, otherSignature } = unify;
+                        const lineOfOtherOverload = only2
+                            ? undefined
+                            : otherSignature.loc.start.line;
+                        context.report({
+                            loc: extraParameter.loc,
+                            messageId: extraParameter.type === experimental_utils_1.AST_NODE_TYPES.RestElement
+                                ? 'omittingRestParameter'
+                                : 'omittingSingleParameter',
+                            data: {
+                                failureStringStart: failureStringStart(lineOfOtherOverload),
+                            },
+                            node: extraParameter,
+                        });
+                    }
+                }
+            }
+        }
+        function checkOverloads(signatures, typeParameters) {
+            const result = [];
+            const isTypeParameter = getIsTypeParameter(typeParameters);
+            for (const overloads of signatures) {
+                if (overloads.length === 2) {
+                    const signature0 = overloads[0].value || overloads[0];
+                    const signature1 = overloads[1].value || overloads[1];
+                    const unify = compareSignatures(signature0, signature1, isTypeParameter);
+                    if (unify !== undefined) {
+                        result.push({ unify, only2: true });
+                    }
+                }
+                else {
+                    forEachPair(overloads, (a, b) => {
+                        const signature0 = a.value || a;
+                        const signature1 = b.value || b;
+                        const unify = compareSignatures(signature0, signature1, isTypeParameter);
+                        if (unify !== undefined) {
+                            result.push({ unify, only2: false });
+                        }
+                    });
+                }
+            }
+            return result;
+        }
+        function compareSignatures(a, b, isTypeParameter) {
+            if (!signaturesCanBeUnified(a, b, isTypeParameter)) {
+                return undefined;
+            }
+            return a.params.length === b.params.length
+                ? signaturesDifferBySingleParameter(a.params, b.params)
+                : signaturesDifferByOptionalOrRestParameter(a, b);
+        }
+        function signaturesCanBeUnified(a, b, isTypeParameter) {
+            // Must return the same type.
+            const aTypeParams = a.typeParameters !== undefined ? a.typeParameters.params : undefined;
+            const bTypeParams = b.typeParameters !== undefined ? b.typeParameters.params : undefined;
+            return (typesAreEqual(a.returnType, b.returnType) &&
+                // Must take the same type parameters.
+                // If one uses a type parameter (from outside) and the other doesn't, they shouldn't be joined.
+                util.arraysAreEqual(aTypeParams, bTypeParams, typeParametersAreEqual) &&
+                signatureUsesTypeParameter(a, isTypeParameter) ===
+                    signatureUsesTypeParameter(b, isTypeParameter));
+        }
+        /** Detect `a(x: number, y: number, z: number)` and `a(x: number, y: string, z: number)`. */
+        function signaturesDifferBySingleParameter(types1, types2) {
+            const index = getIndexOfFirstDifference(types1, types2, parametersAreEqual);
+            if (index === undefined) {
+                return undefined;
+            }
+            // If remaining arrays are equal, the signatures differ by just one parameter type
+            if (!util.arraysAreEqual(types1.slice(index + 1), types2.slice(index + 1), parametersAreEqual)) {
+                return undefined;
+            }
+            const a = types1[index];
+            const b = types2[index];
+            // Can unify `a?: string` and `b?: number`. Can't unify `...args: string[]` and `...args: number[]`.
+            // See https://github.com/Microsoft/TypeScript/issues/5077
+            return parametersHaveEqualSigils(a, b) &&
+                a.type !== experimental_utils_1.AST_NODE_TYPES.RestElement
+                ? { kind: 'single-parameter-difference', p0: a, p1: b }
+                : undefined;
+        }
+        /**
+         * Detect `a(): void` and `a(x: number): void`.
+         * Returns the parameter declaration (`x: number` in this example) that should be optional/rest, and overload it's a part of.
+         */
+        function signaturesDifferByOptionalOrRestParameter(a, b) {
+            const sig1 = a.params;
+            const sig2 = b.params;
+            const minLength = Math.min(sig1.length, sig2.length);
+            const longer = sig1.length < sig2.length ? sig2 : sig1;
+            const shorter = sig1.length < sig2.length ? sig1 : sig2;
+            const shorterSig = sig1.length < sig2.length ? a : b;
+            // If one is has 2+ parameters more than the other, they must all be optional/rest.
+            // Differ by optional parameters: f() and f(x), f() and f(x, ?y, ...z)
+            // Not allowed: f() and f(x, y)
+            for (let i = minLength + 1; i < longer.length; i++) {
+                if (!parameterMayBeMissing(longer[i])) {
+                    return undefined;
+                }
+            }
+            for (let i = 0; i < minLength; i++) {
+                const sig1i = sig1[i];
+                const sig2i = sig2[i];
+                const typeAnnotation1 = isTSParameterProperty(sig1i)
+                    ? sig1i.parameter.typeAnnotation
+                    : sig1i.typeAnnotation;
+                const typeAnnotation2 = isTSParameterProperty(sig2i)
+                    ? sig2i.parameter.typeAnnotation
+                    : sig2i.typeAnnotation;
+                if (!typesAreEqual(typeAnnotation1, typeAnnotation2)) {
+                    return undefined;
+                }
+            }
+            if (minLength > 0 &&
+                shorter[minLength - 1].type === experimental_utils_1.AST_NODE_TYPES.RestElement) {
+                return undefined;
+            }
+            return {
+                extraParameter: longer[longer.length - 1],
+                kind: 'extra-parameter',
+                otherSignature: shorterSig,
+            };
+        }
+        /** Given type parameters, returns a function to test whether a type is one of those parameters. */
+        function getIsTypeParameter(typeParameters) {
+            if (typeParameters === undefined) {
+                return (() => false);
+            }
+            const set = new Set();
+            for (const t of typeParameters.params) {
+                set.add(t.name.name);
+            }
+            return (typeName => set.has(typeName));
+        }
+        /** True if any of the outer type parameters are used in a signature. */
+        function signatureUsesTypeParameter(sig, isTypeParameter) {
+            return sig.params.some((p) => typeContainsTypeParameter(isTSParameterProperty(p)
+                ? p.parameter.typeAnnotation
+                : p.typeAnnotation));
+            function typeContainsTypeParameter(type) {
+                if (!type) {
+                    return false;
+                }
+                if (type.type === experimental_utils_1.AST_NODE_TYPES.TSTypeReference) {
+                    const typeName = type.typeName;
+                    if (isIdentifier(typeName) && isTypeParameter(typeName.name)) {
+                        return true;
+                    }
+                }
+                return typeContainsTypeParameter(type.typeAnnotation ||
+                    type.elementType);
+            }
+        }
+        function isTSParameterProperty(node) {
+            return (node.type ===
+                experimental_utils_1.AST_NODE_TYPES.TSParameterProperty);
+        }
+        function parametersAreEqual(a, b) {
+            const typeAnnotationA = isTSParameterProperty(a)
+                ? a.parameter.typeAnnotation
+                : a.typeAnnotation;
+            const typeAnnotationB = isTSParameterProperty(b)
+                ? b.parameter.typeAnnotation
+                : b.typeAnnotation;
+            return (parametersHaveEqualSigils(a, b) &&
+                typesAreEqual(typeAnnotationA, typeAnnotationB));
+        }
+        /** True for optional/rest parameters. */
+        function parameterMayBeMissing(p) {
+            const optional = isTSParameterProperty(p)
+                ? p.parameter.optional
+                : p.optional;
+            return p.type === experimental_utils_1.AST_NODE_TYPES.RestElement || optional;
+        }
+        /** False if one is optional and the other isn't, or one is a rest parameter and the other isn't. */
+        function parametersHaveEqualSigils(a, b) {
+            const optionalA = isTSParameterProperty(a)
+                ? a.parameter.optional
+                : a.optional;
+            const optionalB = isTSParameterProperty(b)
+                ? b.parameter.optional
+                : b.optional;
+            return ((a.type === experimental_utils_1.AST_NODE_TYPES.RestElement) ===
+                (b.type === experimental_utils_1.AST_NODE_TYPES.RestElement) &&
+                (optionalA !== undefined) === (optionalB !== undefined));
+        }
+        function typeParametersAreEqual(a, b) {
+            return (a.name.name === b.name.name &&
+                constraintsAreEqual(a.constraint, b.constraint));
+        }
+        function typesAreEqual(a, b) {
+            return (a === b ||
+                (a !== undefined &&
+                    b !== undefined &&
+                    sourceCode.getText(a.typeAnnotation) ===
+                        sourceCode.getText(b.typeAnnotation)));
+        }
+        function constraintsAreEqual(a, b) {
+            return (a === b || (a !== undefined && b !== undefined && a.type === b.type));
+        }
+        /* Returns the first index where `a` and `b` differ. */
+        function getIndexOfFirstDifference(a, b, equal) {
+            for (let i = 0; i < a.length && i < b.length; i++) {
+                if (!equal(a[i], b[i])) {
+                    return i;
+                }
+            }
+            return undefined;
+        }
+        /** Calls `action` for every pair of values in `values`. */
+        function forEachPair(values, action) {
+            for (let i = 0; i < values.length; i++) {
+                for (let j = i + 1; j < values.length; j++) {
+                    action(values[i], values[j]);
+                }
+            }
+        }
+        const scopes = [];
+        let currentScope = {
+            overloads: new Map(),
+        };
+        function createScope(parent, typeParameters) {
+            currentScope && scopes.push(currentScope);
+            currentScope = {
+                overloads: new Map(),
+                parent,
+                typeParameters,
+            };
+        }
+        function checkScope() {
+            const failures = checkOverloads(Array.from(currentScope.overloads.values()), currentScope.typeParameters);
+            addFailures(failures);
+            currentScope = scopes.pop();
+        }
+        function addOverload(signature, key, containingNode) {
+            key = key !== null && key !== void 0 ? key : getOverloadKey(signature);
+            if (currentScope &&
+                (containingNode || signature).parent === currentScope.parent) {
+                const overloads = currentScope.overloads.get(key);
+                if (overloads !== undefined) {
+                    overloads.push(signature);
+                }
+                else {
+                    currentScope.overloads.set(key, [signature]);
+                }
+            }
+        }
+        //----------------------------------------------------------------------
+        // Public
+        //----------------------------------------------------------------------
+        return {
+            Program: createScope,
+            TSModuleBlock: createScope,
+            TSInterfaceDeclaration(node) {
+                createScope(node.body, node.typeParameters);
+            },
+            ClassDeclaration(node) {
+                createScope(node.body, node.typeParameters);
+            },
+            TSTypeLiteral: createScope,
+            // collect overloads
+            TSDeclareFunction(node) {
+                var _a, _b;
+                const exportingNode = getExportingNode(node);
+                addOverload(node, (_b = (_a = node.id) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : exportingNode === null || exportingNode === void 0 ? void 0 : exportingNode.type, exportingNode);
+            },
+            TSCallSignatureDeclaration: addOverload,
+            TSConstructSignatureDeclaration: addOverload,
+            TSMethodSignature: addOverload,
+            TSAbstractMethodDefinition(node) {
+                if (!node.value.body) {
+                    addOverload(node);
+                }
+            },
+            MethodDefinition(node) {
+                if (!node.value.body) {
+                    addOverload(node);
+                }
+            },
+            // validate scopes
+            'Program:exit': checkScope,
+            'TSModuleBlock:exit': checkScope,
+            'TSInterfaceDeclaration:exit': checkScope,
+            'ClassDeclaration:exit': checkScope,
+            'TSTypeLiteral:exit': checkScope,
+        };
+    },
+});
+function getExportingNode(node) {
+    return node.parent &&
+        (node.parent.type === experimental_utils_1.AST_NODE_TYPES.ExportNamedDeclaration ||
+            node.parent.type === experimental_utils_1.AST_NODE_TYPES.ExportDefaultDeclaration)
+        ? node.parent
+        : undefined;
+}
+function getOverloadKey(node) {
+    const info = getOverloadInfo(node);
+    return ((node.computed ? '0' : '1') +
+        (node.static ? '0' : '1') +
+        info);
+}
+function getOverloadInfo(node) {
+    switch (node.type) {
+        case experimental_utils_1.AST_NODE_TYPES.TSConstructSignatureDeclaration:
+            return 'constructor';
+        case experimental_utils_1.AST_NODE_TYPES.TSCallSignatureDeclaration:
+            return '()';
+        default: {
+            const { key } = node;
+            return isIdentifier(key) ? key.name : key.raw;
+        }
+    }
+}
+function isIdentifier(node) {
+    return node.type === experimental_utils_1.AST_NODE_TYPES.Identifier;
+}
+//# sourceMappingURL=unified-signatures.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unified-signatures.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unified-signatures.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..ce84d5caf8b5a4339dab899e4567ef01918971bc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unified-signatures.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unified-signatures.js","sourceRoot":"","sources":["../../src/rules/unified-signatures.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/astUtils.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/astUtils.js
new file mode 100644
index 0000000000000000000000000000000000000000..249bf798b8727d2133e4f295314438ccc2ccba64
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/astUtils.js
@@ -0,0 +1,15 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+// deeply re-export, for convenience
+__exportStar(require("@typescript-eslint/experimental-utils/dist/ast-utils"), exports);
+//# sourceMappingURL=astUtils.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/astUtils.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/astUtils.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..872e04e40e938a636c73941d0b0eb031d25412ea
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/astUtils.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"astUtils.js","sourceRoot":"","sources":["../../src/util/astUtils.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oCAAoC;AACpC,uFAAqE"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/collectUnusedVariables.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/collectUnusedVariables.js
new file mode 100644
index 0000000000000000000000000000000000000000..c99fe78cb2c6307f23be4cc0432324597a640842
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/collectUnusedVariables.js
@@ -0,0 +1,587 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to set private field on non-instance");
+    }
+    privateMap.set(receiver, value);
+    return value;
+};
+var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to get private field on non-instance");
+    }
+    return privateMap.get(receiver);
+};
+var _scopeManager;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.collectUnusedVariables = void 0;
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const scope_manager_1 = require("@typescript-eslint/scope-manager");
+const Visitor_1 = require("@typescript-eslint/scope-manager/dist/referencer/Visitor");
+const util = __importStar(require("."));
+class UnusedVarsVisitor extends Visitor_1.Visitor {
+    // readonly #unusedVariables = new Set<TSESLint.Scope.Variable>();
+    constructor(context) {
+        super({
+            visitChildrenEvenIfSelectorExists: true,
+        });
+        _scopeManager.set(this, void 0);
+        //#endregion HELPERS
+        //#region VISITORS
+        // NOTE - This is a simple visitor - meaning it does not support selectors
+        this.ClassDeclaration = this.visitClass;
+        this.ClassExpression = this.visitClass;
+        this.FunctionDeclaration = this.visitFunction;
+        this.FunctionExpression = this.visitFunction;
+        this.MethodDefinition = this.visitSetter;
+        this.Property = this.visitSetter;
+        this.TSCallSignatureDeclaration = this.visitFunctionTypeSignature;
+        this.TSConstructorType = this.visitFunctionTypeSignature;
+        this.TSConstructSignatureDeclaration = this.visitFunctionTypeSignature;
+        this.TSDeclareFunction = this.visitFunctionTypeSignature;
+        this.TSEmptyBodyFunctionExpression = this.visitFunctionTypeSignature;
+        this.TSFunctionType = this.visitFunctionTypeSignature;
+        this.TSMethodSignature = this.visitFunctionTypeSignature;
+        __classPrivateFieldSet(this, _scopeManager, util.nullThrows(context.getSourceCode().scopeManager, 'Missing required scope manager'));
+    }
+    static collectUnusedVariables(context) {
+        const program = context.getSourceCode().ast;
+        const cached = this.RESULTS_CACHE.get(program);
+        if (cached) {
+            return cached;
+        }
+        const visitor = new this(context);
+        visitor.visit(program);
+        const unusedVars = visitor.collectUnusedVariables(visitor.getScope(program));
+        this.RESULTS_CACHE.set(program, unusedVars);
+        return unusedVars;
+    }
+    collectUnusedVariables(scope, unusedVariables = new Set()) {
+        for (const variable of scope.variables) {
+            if (
+            // skip function expression names,
+            scope.functionExpressionScope ||
+                // variables marked with markVariableAsUsed(),
+                variable.eslintUsed ||
+                // implicit lib variables (from @typescript-eslint/scope-manager),
+                variable instanceof scope_manager_1.ImplicitLibVariable ||
+                // basic exported variables
+                isExported(variable) ||
+                // variables implicitly exported via a merged declaration
+                isMergableExported(variable) ||
+                // used variables
+                isUsedVariable(variable)) {
+                continue;
+            }
+            unusedVariables.add(variable);
+        }
+        for (const childScope of scope.childScopes) {
+            this.collectUnusedVariables(childScope, unusedVariables);
+        }
+        return unusedVariables;
+    }
+    //#region HELPERS
+    getScope(currentNode) {
+        // On Program node, get the outermost scope to avoid return Node.js special function scope or ES modules scope.
+        const inner = currentNode.type !== experimental_utils_1.AST_NODE_TYPES.Program;
+        let node = currentNode;
+        while (node) {
+            const scope = __classPrivateFieldGet(this, _scopeManager).acquire(node, inner);
+            if (scope) {
+                if (scope.type === 'function-expression-name') {
+                    return scope.childScopes[0];
+                }
+                return scope;
+            }
+            node = node.parent;
+        }
+        return __classPrivateFieldGet(this, _scopeManager).scopes[0];
+    }
+    markVariableAsUsed(variableOrIdentifierOrName, parent) {
+        if (typeof variableOrIdentifierOrName !== 'string' &&
+            !('type' in variableOrIdentifierOrName)) {
+            variableOrIdentifierOrName.eslintUsed = true;
+            return;
+        }
+        let name;
+        let node;
+        if (typeof variableOrIdentifierOrName === 'string') {
+            name = variableOrIdentifierOrName;
+            node = parent;
+        }
+        else {
+            name = variableOrIdentifierOrName.name;
+            node = variableOrIdentifierOrName;
+        }
+        let currentScope = this.getScope(node);
+        while (currentScope) {
+            const variable = currentScope.variables.find(scopeVar => scopeVar.name === name);
+            if (variable) {
+                variable.eslintUsed = true;
+                return;
+            }
+            currentScope = currentScope.upper;
+        }
+    }
+    visitClass(node) {
+        // skip a variable of class itself name in the class scope
+        const scope = this.getScope(node);
+        for (const variable of scope.variables) {
+            if (variable.identifiers[0] === scope.block.id) {
+                this.markVariableAsUsed(variable);
+                return;
+            }
+        }
+    }
+    visitFunction(node) {
+        const scope = this.getScope(node);
+        // skip implicit "arguments" variable
+        const variable = scope.set.get('arguments');
+        if ((variable === null || variable === void 0 ? void 0 : variable.defs.length) === 0) {
+            this.markVariableAsUsed(variable);
+        }
+    }
+    visitFunctionTypeSignature(node) {
+        // function type signature params create variables because they can be referenced within the signature,
+        // but they obviously aren't unused variables for the purposes of this rule.
+        for (const param of node.params) {
+            this.visitPattern(param, name => {
+                this.markVariableAsUsed(name);
+            });
+        }
+    }
+    visitSetter(node) {
+        if (node.kind === 'set') {
+            // ignore setter parameters because they're syntactically required to exist
+            for (const param of node.value.params) {
+                this.visitPattern(param, id => {
+                    this.markVariableAsUsed(id);
+                });
+            }
+        }
+    }
+    ForInStatement(node) {
+        /**
+         * (Brad Zacher): I hate that this has to exist.
+         * But it is required for compat with the base ESLint rule.
+         *
+         * In 2015, ESLint decided to add an exception for these two specific cases
+         * ```
+         * for (var key in object) return;
+         *
+         * var key;
+         * for (key in object) return;
+         * ```
+         *
+         * I disagree with it, but what are you going to do...
+         *
+         * https://github.com/eslint/eslint/issues/2342
+         */
+        let idOrVariable;
+        if (node.left.type === experimental_utils_1.AST_NODE_TYPES.VariableDeclaration) {
+            const variable = __classPrivateFieldGet(this, _scopeManager).getDeclaredVariables(node.left)[0];
+            if (!variable) {
+                return;
+            }
+            idOrVariable = variable;
+        }
+        if (node.left.type === experimental_utils_1.AST_NODE_TYPES.Identifier) {
+            idOrVariable = node.left;
+        }
+        if (idOrVariable == null) {
+            return;
+        }
+        let body = node.body;
+        if (node.body.type === experimental_utils_1.AST_NODE_TYPES.BlockStatement) {
+            if (node.body.body.length !== 1) {
+                return;
+            }
+            body = node.body.body[0];
+        }
+        if (body.type !== experimental_utils_1.AST_NODE_TYPES.ReturnStatement) {
+            return;
+        }
+        this.markVariableAsUsed(idOrVariable);
+    }
+    Identifier(node) {
+        const scope = this.getScope(node);
+        if (scope.type === experimental_utils_1.TSESLint.Scope.ScopeType.function &&
+            node.name === 'this') {
+            // this parameters should always be considered used as they're pseudo-parameters
+            if ('params' in scope.block && scope.block.params.includes(node)) {
+                this.markVariableAsUsed(node);
+            }
+        }
+    }
+    TSEnumDeclaration(node) {
+        // enum members create variables because they can be referenced within the enum,
+        // but they obviously aren't unused variables for the purposes of this rule.
+        const scope = this.getScope(node);
+        for (const variable of scope.variables) {
+            this.markVariableAsUsed(variable);
+        }
+    }
+    TSMappedType(node) {
+        // mapped types create a variable for their type name, but it's not necessary to reference it,
+        // so we shouldn't consider it as unused for the purpose of this rule.
+        this.markVariableAsUsed(node.typeParameter.name);
+    }
+    TSModuleDeclaration(node) {
+        // global augmentation can be in any file, and they do not need exports
+        if (node.global === true) {
+            this.markVariableAsUsed('global', node.parent);
+        }
+    }
+    TSParameterProperty(node) {
+        let identifier = null;
+        switch (node.parameter.type) {
+            case experimental_utils_1.AST_NODE_TYPES.AssignmentPattern:
+                if (node.parameter.left.type === experimental_utils_1.AST_NODE_TYPES.Identifier) {
+                    identifier = node.parameter.left;
+                }
+                break;
+            case experimental_utils_1.AST_NODE_TYPES.Identifier:
+                identifier = node.parameter;
+                break;
+        }
+        if (identifier) {
+            this.markVariableAsUsed(identifier);
+        }
+    }
+}
+_scopeManager = new WeakMap();
+UnusedVarsVisitor.RESULTS_CACHE = new WeakMap();
+//#region private helpers
+/**
+ * Checks the position of given nodes.
+ * @param inner A node which is expected as inside.
+ * @param outer A node which is expected as outside.
+ * @returns `true` if the `inner` node exists in the `outer` node.
+ */
+function isInside(inner, outer) {
+    return inner.range[0] >= outer.range[0] && inner.range[1] <= outer.range[1];
+}
+/**
+ * Determine if an identifier is referencing an enclosing name.
+ * This only applies to declarations that create their own scope (modules, functions, classes)
+ * @param ref The reference to check.
+ * @param nodes The candidate function nodes.
+ * @returns True if it's a self-reference, false if not.
+ */
+function isSelfReference(ref, nodes) {
+    let scope = ref.from;
+    while (scope) {
+        if (nodes.has(scope.block)) {
+            return true;
+        }
+        scope = scope.upper;
+    }
+    return false;
+}
+const MERGABLE_TYPES = new Set([
+    experimental_utils_1.AST_NODE_TYPES.TSInterfaceDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSTypeAliasDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.ClassDeclaration,
+    experimental_utils_1.AST_NODE_TYPES.FunctionDeclaration,
+]);
+/**
+ * Determine if the variable is directly exported
+ * @param variable the variable to check
+ * @param target the type of node that is expected to be exported
+ */
+function isMergableExported(variable) {
+    var _a, _b;
+    // If all of the merged things are of the same type, TS will error if not all of them are exported - so we only need to find one
+    for (const def of variable.defs) {
+        // parameters can never be exported.
+        // their `node` prop points to the function decl, which can be exported
+        // so we need to special case them
+        if (def.type === experimental_utils_1.TSESLint.Scope.DefinitionType.Parameter) {
+            continue;
+        }
+        if ((MERGABLE_TYPES.has(def.node.type) &&
+            ((_a = def.node.parent) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.ExportNamedDeclaration) ||
+            ((_b = def.node.parent) === null || _b === void 0 ? void 0 : _b.type) === experimental_utils_1.AST_NODE_TYPES.ExportDefaultDeclaration) {
+            return true;
+        }
+    }
+    return false;
+}
+/**
+ * Determines if a given variable is being exported from a module.
+ * @param variable eslint-scope variable object.
+ * @returns True if the variable is exported, false if not.
+ */
+function isExported(variable) {
+    const definition = variable.defs[0];
+    if (definition) {
+        let node = definition.node;
+        if (node.type === experimental_utils_1.AST_NODE_TYPES.VariableDeclarator) {
+            node = node.parent;
+        }
+        else if (definition.type === experimental_utils_1.TSESLint.Scope.DefinitionType.Parameter) {
+            return false;
+        }
+        return node.parent.type.indexOf('Export') === 0;
+    }
+    return false;
+}
+/**
+ * Determines if the variable is used.
+ * @param variable The variable to check.
+ * @returns True if the variable is used
+ */
+function isUsedVariable(variable) {
+    /**
+     * Gets a list of function definitions for a specified variable.
+     * @param variable eslint-scope variable object.
+     * @returns Function nodes.
+     */
+    function getFunctionDefinitions(variable) {
+        const functionDefinitions = new Set();
+        variable.defs.forEach(def => {
+            var _a, _b;
+            // FunctionDeclarations
+            if (def.type === experimental_utils_1.TSESLint.Scope.DefinitionType.FunctionName) {
+                functionDefinitions.add(def.node);
+            }
+            // FunctionExpressions
+            if (def.type === experimental_utils_1.TSESLint.Scope.DefinitionType.Variable &&
+                (((_a = def.node.init) === null || _a === void 0 ? void 0 : _a.type) === experimental_utils_1.AST_NODE_TYPES.FunctionExpression ||
+                    ((_b = def.node.init) === null || _b === void 0 ? void 0 : _b.type) === experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression)) {
+                functionDefinitions.add(def.node.init);
+            }
+        });
+        return functionDefinitions;
+    }
+    function getTypeDeclarations(variable) {
+        const nodes = new Set();
+        variable.defs.forEach(def => {
+            if (def.node.type === experimental_utils_1.AST_NODE_TYPES.TSInterfaceDeclaration ||
+                def.node.type === experimental_utils_1.AST_NODE_TYPES.TSTypeAliasDeclaration) {
+                nodes.add(def.node);
+            }
+        });
+        return nodes;
+    }
+    function getModuleDeclarations(variable) {
+        const nodes = new Set();
+        variable.defs.forEach(def => {
+            if (def.node.type === experimental_utils_1.AST_NODE_TYPES.TSModuleDeclaration) {
+                nodes.add(def.node);
+            }
+        });
+        return nodes;
+    }
+    /**
+     * Checks if the ref is contained within one of the given nodes
+     */
+    function isInsideOneOf(ref, nodes) {
+        for (const node of nodes) {
+            if (isInside(ref.identifier, node)) {
+                return true;
+            }
+        }
+        return false;
+    }
+    /**
+     * If a given reference is left-hand side of an assignment, this gets
+     * the right-hand side node of the assignment.
+     *
+     * In the following cases, this returns null.
+     *
+     * - The reference is not the LHS of an assignment expression.
+     * - The reference is inside of a loop.
+     * - The reference is inside of a function scope which is different from
+     *   the declaration.
+     * @param ref A reference to check.
+     * @param prevRhsNode The previous RHS node.
+     * @returns The RHS node or null.
+     */
+    function getRhsNode(ref, prevRhsNode) {
+        /**
+         * Checks whether the given node is in a loop or not.
+         * @param node The node to check.
+         * @returns `true` if the node is in a loop.
+         */
+        function isInLoop(node) {
+            let currentNode = node;
+            while (currentNode) {
+                if (util.isFunction(currentNode)) {
+                    break;
+                }
+                if (util.isLoop(currentNode)) {
+                    return true;
+                }
+                currentNode = currentNode.parent;
+            }
+            return false;
+        }
+        const id = ref.identifier;
+        const parent = id.parent;
+        const grandparent = parent.parent;
+        const refScope = ref.from.variableScope;
+        const varScope = ref.resolved.scope.variableScope;
+        const canBeUsedLater = refScope !== varScope || isInLoop(id);
+        /*
+         * Inherits the previous node if this reference is in the node.
+         * This is for `a = a + a`-like code.
+         */
+        if (prevRhsNode && isInside(id, prevRhsNode)) {
+            return prevRhsNode;
+        }
+        if (parent.type === experimental_utils_1.AST_NODE_TYPES.AssignmentExpression &&
+            grandparent.type === experimental_utils_1.AST_NODE_TYPES.ExpressionStatement &&
+            id === parent.left &&
+            !canBeUsedLater) {
+            return parent.right;
+        }
+        return null;
+    }
+    /**
+     * Checks whether a given reference is a read to update itself or not.
+     * @param ref A reference to check.
+     * @param rhsNode The RHS node of the previous assignment.
+     * @returns The reference is a read to update itself.
+     */
+    function isReadForItself(ref, rhsNode) {
+        /**
+         * Checks whether a given Identifier node exists inside of a function node which can be used later.
+         *
+         * "can be used later" means:
+         * - the function is assigned to a variable.
+         * - the function is bound to a property and the object can be used later.
+         * - the function is bound as an argument of a function call.
+         *
+         * If a reference exists in a function which can be used later, the reference is read when the function is called.
+         * @param id An Identifier node to check.
+         * @param rhsNode The RHS node of the previous assignment.
+         * @returns `true` if the `id` node exists inside of a function node which can be used later.
+         */
+        function isInsideOfStorableFunction(id, rhsNode) {
+            /**
+             * Finds a function node from ancestors of a node.
+             * @param node A start node to find.
+             * @returns A found function node.
+             */
+            function getUpperFunction(node) {
+                let currentNode = node;
+                while (currentNode) {
+                    if (util.isFunction(currentNode)) {
+                        return currentNode;
+                    }
+                    currentNode = currentNode.parent;
+                }
+                return null;
+            }
+            /**
+             * Checks whether a given function node is stored to somewhere or not.
+             * If the function node is stored, the function can be used later.
+             * @param funcNode A function node to check.
+             * @param rhsNode The RHS node of the previous assignment.
+             * @returns `true` if under the following conditions:
+             *      - the funcNode is assigned to a variable.
+             *      - the funcNode is bound as an argument of a function call.
+             *      - the function is bound to a property and the object satisfies above conditions.
+             */
+            function isStorableFunction(funcNode, rhsNode) {
+                let node = funcNode;
+                let parent = funcNode.parent;
+                while (parent && isInside(parent, rhsNode)) {
+                    switch (parent.type) {
+                        case experimental_utils_1.AST_NODE_TYPES.SequenceExpression:
+                            if (parent.expressions[parent.expressions.length - 1] !== node) {
+                                return false;
+                            }
+                            break;
+                        case experimental_utils_1.AST_NODE_TYPES.CallExpression:
+                        case experimental_utils_1.AST_NODE_TYPES.NewExpression:
+                            return parent.callee !== node;
+                        case experimental_utils_1.AST_NODE_TYPES.AssignmentExpression:
+                        case experimental_utils_1.AST_NODE_TYPES.TaggedTemplateExpression:
+                        case experimental_utils_1.AST_NODE_TYPES.YieldExpression:
+                            return true;
+                        default:
+                            if (parent.type.endsWith('Statement') ||
+                                parent.type.endsWith('Declaration')) {
+                                /*
+                                 * If it encountered statements, this is a complex pattern.
+                                 * Since analyzing complex patterns is hard, this returns `true` to avoid false positive.
+                                 */
+                                return true;
+                            }
+                    }
+                    node = parent;
+                    parent = parent.parent;
+                }
+                return false;
+            }
+            const funcNode = getUpperFunction(id);
+            return (!!funcNode &&
+                isInside(funcNode, rhsNode) &&
+                isStorableFunction(funcNode, rhsNode));
+        }
+        const id = ref.identifier;
+        const parent = id.parent;
+        const grandparent = parent.parent;
+        return (ref.isRead() && // in RHS of an assignment for itself. e.g. `a = a + 1`
+            // self update. e.g. `a += 1`, `a++`
+            ((parent.type === experimental_utils_1.AST_NODE_TYPES.AssignmentExpression &&
+                grandparent.type === experimental_utils_1.AST_NODE_TYPES.ExpressionStatement &&
+                parent.left === id) ||
+                (parent.type === experimental_utils_1.AST_NODE_TYPES.UpdateExpression &&
+                    grandparent.type === experimental_utils_1.AST_NODE_TYPES.ExpressionStatement) ||
+                (!!rhsNode &&
+                    isInside(id, rhsNode) &&
+                    !isInsideOfStorableFunction(id, rhsNode))));
+    }
+    const functionNodes = getFunctionDefinitions(variable);
+    const isFunctionDefinition = functionNodes.size > 0;
+    const typeDeclNodes = getTypeDeclarations(variable);
+    const isTypeDecl = typeDeclNodes.size > 0;
+    const moduleDeclNodes = getModuleDeclarations(variable);
+    const isModuleDecl = moduleDeclNodes.size > 0;
+    let rhsNode = null;
+    return variable.references.some(ref => {
+        const forItself = isReadForItself(ref, rhsNode);
+        rhsNode = getRhsNode(ref, rhsNode);
+        return (ref.isRead() &&
+            !forItself &&
+            !(isFunctionDefinition && isSelfReference(ref, functionNodes)) &&
+            !(isTypeDecl && isInsideOneOf(ref, typeDeclNodes)) &&
+            !(isModuleDecl && isSelfReference(ref, moduleDeclNodes)));
+    });
+}
+//#endregion private helpers
+/**
+ * Collects the set of unused variables for a given context.
+ *
+ * Due to complexity, this does not take into consideration:
+ * - variables within declaration files
+ * - variables within ambient module declarations
+ */
+function collectUnusedVariables(context) {
+    return UnusedVarsVisitor.collectUnusedVariables(context);
+}
+exports.collectUnusedVariables = collectUnusedVariables;
+//# sourceMappingURL=collectUnusedVariables.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/collectUnusedVariables.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/collectUnusedVariables.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b5a9601cbf374c51a331ced5e71ef76ddb79169f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/collectUnusedVariables.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"collectUnusedVariables.js","sourceRoot":"","sources":["../../src/util/collectUnusedVariables.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/createRule.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/createRule.js
new file mode 100644
index 0000000000000000000000000000000000000000..b7066ab418efe20a5d11437926a4b80bc4619bee
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/createRule.js
@@ -0,0 +1,8 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createRule = void 0;
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+// note - cannot migrate this to an import statement because it will make TSC copy the package.json to the dist folder
+const version = require('../../package.json').version;
+exports.createRule = experimental_utils_1.ESLintUtils.RuleCreator(name => `https://github.com/typescript-eslint/typescript-eslint/blob/v${version}/packages/eslint-plugin/docs/rules/${name}.md`);
+//# sourceMappingURL=createRule.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/createRule.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/createRule.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..768d51b074654596471ce52840607ffdf2a185ab
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/createRule.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"createRule.js","sourceRoot":"","sources":["../../src/util/createRule.ts"],"names":[],"mappings":";;;AAAA,8EAAoE;AAEpE,sHAAsH;AACtH,MAAM,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC;AAEzC,QAAA,UAAU,GAAG,gCAAW,CAAC,WAAW,CAC/C,IAAI,CAAC,EAAE,CACL,gEAAgE,OAAO,sCAAsC,IAAI,KAAK,CACzH,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/explicitReturnTypeUtils.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/explicitReturnTypeUtils.js
new file mode 100644
index 0000000000000000000000000000000000000000..ad102492dc3955d39cccca8c7efafadec6eeca8a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/explicitReturnTypeUtils.js
@@ -0,0 +1,241 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isTypedFunctionExpression = exports.doesImmediatelyReturnFunctionExpression = exports.checkFunctionReturnType = exports.checkFunctionExpressionReturnType = void 0;
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+const astUtils_1 = require("./astUtils");
+const nullThrows_1 = require("./nullThrows");
+/**
+ * Creates a report location for the given function.
+ * The location only encompasses the "start" of the function, and not the body
+ *
+ * eg.
+ * function foo(args) {}
+ * ^^^^^^^^^^^^^^^^^^
+ *
+ * get y(args) {}
+ * ^^^^^^^^^^^
+ *
+ * const x = (args) => {}
+ *           ^^^^^^^^^
+ */
+function getReporLoc(node, sourceCode) {
+    /**
+     * Returns start column position
+     * @param node
+     */
+    function getLocStart() {
+        /* highlight method name */
+        const parent = node.parent;
+        if (parent &&
+            (parent.type === experimental_utils_1.AST_NODE_TYPES.MethodDefinition ||
+                (parent.type === experimental_utils_1.AST_NODE_TYPES.Property && parent.method))) {
+            return parent.loc.start;
+        }
+        return node.loc.start;
+    }
+    /**
+     * Returns end column position
+     * @param node
+     */
+    function getLocEnd() {
+        /* highlight `=>` */
+        if (node.type === experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression) {
+            return sourceCode.getTokenBefore(node.body, token => token.type === experimental_utils_1.AST_TOKEN_TYPES.Punctuator && token.value === '=>').loc.end;
+        }
+        return sourceCode.getTokenBefore(node.body).loc.end;
+    }
+    return {
+        start: getLocStart(),
+        end: getLocEnd(),
+    };
+}
+/**
+ * Checks if a node is a variable declarator with a type annotation.
+ * ```
+ * const x: Foo = ...
+ * ```
+ */
+function isVariableDeclaratorWithTypeAnnotation(node) {
+    return (node.type === experimental_utils_1.AST_NODE_TYPES.VariableDeclarator && !!node.id.typeAnnotation);
+}
+/**
+ * Checks if a node is a class property with a type annotation.
+ * ```
+ * public x: Foo = ...
+ * ```
+ */
+function isClassPropertyWithTypeAnnotation(node) {
+    return node.type === experimental_utils_1.AST_NODE_TYPES.ClassProperty && !!node.typeAnnotation;
+}
+/**
+ * Checks if a node belongs to:
+ * ```
+ * new Foo(() => {})
+ *         ^^^^^^^^
+ * ```
+ */
+function isConstructorArgument(node) {
+    return node.type === experimental_utils_1.AST_NODE_TYPES.NewExpression;
+}
+/**
+ * Checks if a node belongs to:
+ * ```
+ * const x: Foo = { prop: () => {} }
+ * const x = { prop: () => {} } as Foo
+ * const x = <Foo>{ prop: () => {} }
+ * ```
+ */
+function isPropertyOfObjectWithType(property) {
+    if (!property || property.type !== experimental_utils_1.AST_NODE_TYPES.Property) {
+        return false;
+    }
+    const objectExpr = property.parent; // this shouldn't happen, checking just in case
+    /* istanbul ignore if */ if (!objectExpr ||
+        objectExpr.type !== experimental_utils_1.AST_NODE_TYPES.ObjectExpression) {
+        return false;
+    }
+    const parent = objectExpr.parent; // this shouldn't happen, checking just in case
+    /* istanbul ignore if */ if (!parent) {
+        return false;
+    }
+    return (astUtils_1.isTypeAssertion(parent) ||
+        isClassPropertyWithTypeAnnotation(parent) ||
+        isVariableDeclaratorWithTypeAnnotation(parent) ||
+        isFunctionArgument(parent));
+}
+/**
+ * Checks if a function belongs to:
+ * ```
+ * () => () => ...
+ * () => function () { ... }
+ * () => { return () => ... }
+ * () => { return function () { ... } }
+ * function fn() { return () => ... }
+ * function fn() { return function() { ... } }
+ * ```
+ */
+function doesImmediatelyReturnFunctionExpression({ body, }) {
+    // Should always have a body; really checking just in case
+    /* istanbul ignore if */ if (!body) {
+        return false;
+    }
+    // Check if body is a block with a single statement
+    if (body.type === experimental_utils_1.AST_NODE_TYPES.BlockStatement && body.body.length === 1) {
+        const [statement] = body.body;
+        // Check if that statement is a return statement with an argument
+        if (statement.type === experimental_utils_1.AST_NODE_TYPES.ReturnStatement &&
+            !!statement.argument) {
+            // If so, check that returned argument as body
+            body = statement.argument;
+        }
+    }
+    // Check if the body being returned is a function expression
+    return (body.type === experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression ||
+        body.type === experimental_utils_1.AST_NODE_TYPES.FunctionExpression);
+}
+exports.doesImmediatelyReturnFunctionExpression = doesImmediatelyReturnFunctionExpression;
+/**
+ * Checks if a node belongs to:
+ * ```
+ * foo(() => 1)
+ * ```
+ */
+function isFunctionArgument(parent, callee) {
+    return (parent.type === experimental_utils_1.AST_NODE_TYPES.CallExpression &&
+        // make sure this isn't an IIFE
+        parent.callee !== callee);
+}
+/**
+ * Checks if a function belongs to:
+ * ```
+ * () => ({ action: 'xxx' } as const)
+ * ```
+ */
+function returnsConstAssertionDirectly(node) {
+    const { body } = node;
+    if (astUtils_1.isTypeAssertion(body)) {
+        const { typeAnnotation } = body;
+        if (typeAnnotation.type === experimental_utils_1.AST_NODE_TYPES.TSTypeReference) {
+            const { typeName } = typeAnnotation;
+            if (typeName.type === experimental_utils_1.AST_NODE_TYPES.Identifier &&
+                typeName.name === 'const') {
+                return true;
+            }
+        }
+    }
+    return false;
+}
+/**
+ * True when the provided function expression is typed.
+ */
+function isTypedFunctionExpression(node, options) {
+    const parent = nullThrows_1.nullThrows(node.parent, nullThrows_1.NullThrowsReasons.MissingParent);
+    if (!options.allowTypedFunctionExpressions) {
+        return false;
+    }
+    return (astUtils_1.isTypeAssertion(parent) ||
+        isVariableDeclaratorWithTypeAnnotation(parent) ||
+        isClassPropertyWithTypeAnnotation(parent) ||
+        isPropertyOfObjectWithType(parent) ||
+        isFunctionArgument(parent, node) ||
+        isConstructorArgument(parent));
+}
+exports.isTypedFunctionExpression = isTypedFunctionExpression;
+/**
+ * Check whether the function expression return type is either typed or valid
+ * with the provided options.
+ */
+function isValidFunctionExpressionReturnType(node, options) {
+    if (isTypedFunctionExpression(node, options)) {
+        return true;
+    }
+    const parent = nullThrows_1.nullThrows(node.parent, nullThrows_1.NullThrowsReasons.MissingParent);
+    if (options.allowExpressions &&
+        parent.type !== experimental_utils_1.AST_NODE_TYPES.VariableDeclarator &&
+        parent.type !== experimental_utils_1.AST_NODE_TYPES.MethodDefinition &&
+        parent.type !== experimental_utils_1.AST_NODE_TYPES.ExportDefaultDeclaration &&
+        parent.type !== experimental_utils_1.AST_NODE_TYPES.ClassProperty) {
+        return true;
+    }
+    // https://github.com/typescript-eslint/typescript-eslint/issues/653
+    if (options.allowDirectConstAssertionInArrowFunctions &&
+        node.type === experimental_utils_1.AST_NODE_TYPES.ArrowFunctionExpression &&
+        returnsConstAssertionDirectly(node)) {
+        return true;
+    }
+    return false;
+}
+/**
+ * Check that the function expression or declaration is valid.
+ */
+function isValidFunctionReturnType(node, options) {
+    if (options.allowHigherOrderFunctions &&
+        doesImmediatelyReturnFunctionExpression(node)) {
+        return true;
+    }
+    if (node.returnType || astUtils_1.isConstructor(node.parent) || astUtils_1.isSetter(node.parent)) {
+        return true;
+    }
+    return false;
+}
+/**
+ * Checks if a function declaration/expression has a return type.
+ */
+function checkFunctionReturnType(node, options, sourceCode, report) {
+    if (isValidFunctionReturnType(node, options)) {
+        return;
+    }
+    report(getReporLoc(node, sourceCode));
+}
+exports.checkFunctionReturnType = checkFunctionReturnType;
+/**
+ * Checks if a function declaration/expression has a return type.
+ */
+function checkFunctionExpressionReturnType(node, options, sourceCode, report) {
+    if (isValidFunctionExpressionReturnType(node, options)) {
+        return;
+    }
+    checkFunctionReturnType(node, options, sourceCode, report);
+}
+exports.checkFunctionExpressionReturnType = checkFunctionExpressionReturnType;
+//# sourceMappingURL=explicitReturnTypeUtils.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/explicitReturnTypeUtils.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/explicitReturnTypeUtils.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..1dbb920a0ba3d0cafa14ad23356d05f8a8d0c752
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/explicitReturnTypeUtils.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"explicitReturnTypeUtils.js","sourceRoot":"","sources":["../../src/util/explicitReturnTypeUtils.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..659f8c160eed11e23814a64a7ec5083ae821d93b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js
@@ -0,0 +1,31 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getParserServices = exports.isObjectNotArray = exports.deepMerge = exports.applyDefault = void 0;
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+__exportStar(require("./astUtils"), exports);
+__exportStar(require("./collectUnusedVariables"), exports);
+__exportStar(require("./createRule"), exports);
+__exportStar(require("./isTypeReadonly"), exports);
+__exportStar(require("./misc"), exports);
+__exportStar(require("./nullThrows"), exports);
+__exportStar(require("./objectIterators"), exports);
+__exportStar(require("./propertyTypes"), exports);
+__exportStar(require("./requiresQuoting"), exports);
+__exportStar(require("./types"), exports);
+// this is done for convenience - saves migrating all of the old rules
+const { applyDefault, deepMerge, isObjectNotArray, getParserServices, } = experimental_utils_1.ESLintUtils;
+exports.applyDefault = applyDefault;
+exports.deepMerge = deepMerge;
+exports.isObjectNotArray = isObjectNotArray;
+exports.getParserServices = getParserServices;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..10f84cbb346a3b7d45ad4357f7568e4209f4af9a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,8EAAoE;AAEpE,6CAA2B;AAC3B,2DAAyC;AACzC,+CAA6B;AAC7B,mDAAiC;AACjC,yCAAuB;AACvB,+CAA6B;AAC7B,oDAAkC;AAClC,kDAAgC;AAChC,oDAAkC;AAClC,0CAAwB;AAExB,sEAAsE;AACtE,MAAM,EACJ,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,iBAAiB,GAClB,GAAG,gCAAW,CAAC;AAOd,oCAAY;AACZ,8BAAS;AACT,4CAAgB;AAChB,8CAAiB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/isTypeReadonly.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/isTypeReadonly.js
new file mode 100644
index 0000000000000000000000000000000000000000..78f5f46208a63436e6b9e321e782277234430df3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/isTypeReadonly.js
@@ -0,0 +1,140 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isTypeReadonly = void 0;
+const tsutils_1 = require("tsutils");
+const ts = __importStar(require("typescript"));
+const _1 = require(".");
+function isTypeReadonlyArrayOrTuple(checker, type, seenTypes) {
+    function checkTypeArguments(arrayType) {
+        const typeArguments = checker.getTypeArguments(arrayType);
+        // this shouldn't happen in reality as:
+        // - tuples require at least 1 type argument
+        // - ReadonlyArray requires at least 1 type argument
+        /* istanbul ignore if */ if (typeArguments.length === 0) {
+            return 3 /* Readonly */;
+        }
+        // validate the element types are also readonly
+        if (typeArguments.some(typeArg => isTypeReadonlyRecurser(checker, typeArg, seenTypes) ===
+            2 /* Mutable */)) {
+            return 2 /* Mutable */;
+        }
+        return 3 /* Readonly */;
+    }
+    if (checker.isArrayType(type)) {
+        const symbol = _1.nullThrows(type.getSymbol(), _1.NullThrowsReasons.MissingToken('symbol', 'array type'));
+        const escapedName = symbol.getEscapedName();
+        if (escapedName === 'Array') {
+            return 2 /* Mutable */;
+        }
+        return checkTypeArguments(type);
+    }
+    if (checker.isTupleType(type)) {
+        if (!type.target.readonly) {
+            return 2 /* Mutable */;
+        }
+        return checkTypeArguments(type);
+    }
+    return 1 /* UnknownType */;
+}
+function isTypeReadonlyObject(checker, type, seenTypes) {
+    function checkIndexSignature(kind) {
+        const indexInfo = checker.getIndexInfoOfType(type, kind);
+        if (indexInfo) {
+            return indexInfo.isReadonly
+                ? 3 /* Readonly */
+                : 2 /* Mutable */;
+        }
+        return 1 /* UnknownType */;
+    }
+    const properties = type.getProperties();
+    if (properties.length) {
+        // ensure the properties are marked as readonly
+        for (const property of properties) {
+            if (!tsutils_1.isPropertyReadonlyInType(type, property.getEscapedName(), checker)) {
+                return 2 /* Mutable */;
+            }
+        }
+        // all properties were readonly
+        // now ensure that all of the values are readonly also.
+        // do this after checking property readonly-ness as a perf optimization,
+        // as we might be able to bail out early due to a mutable property before
+        // doing this deep, potentially expensive check.
+        for (const property of properties) {
+            const propertyType = _1.nullThrows(_1.getTypeOfPropertyOfType(checker, type, property), _1.NullThrowsReasons.MissingToken(`property "${property.name}"`, 'type'));
+            // handle recursive types.
+            // we only need this simple check, because a mutable recursive type will break via the above prop readonly check
+            if (seenTypes.has(propertyType)) {
+                continue;
+            }
+            if (isTypeReadonlyRecurser(checker, propertyType, seenTypes) ===
+                2 /* Mutable */) {
+                return 2 /* Mutable */;
+            }
+        }
+    }
+    const isStringIndexSigReadonly = checkIndexSignature(ts.IndexKind.String);
+    if (isStringIndexSigReadonly === 2 /* Mutable */) {
+        return isStringIndexSigReadonly;
+    }
+    const isNumberIndexSigReadonly = checkIndexSignature(ts.IndexKind.Number);
+    if (isNumberIndexSigReadonly === 2 /* Mutable */) {
+        return isNumberIndexSigReadonly;
+    }
+    return 3 /* Readonly */;
+}
+// a helper function to ensure the seenTypes map is always passed down, except by the external caller
+function isTypeReadonlyRecurser(checker, type, seenTypes) {
+    seenTypes.add(type);
+    if (tsutils_1.isUnionType(type)) {
+        // all types in the union must be readonly
+        const result = tsutils_1.unionTypeParts(type).every(t => isTypeReadonlyRecurser(checker, t, seenTypes));
+        const readonlyness = result ? 3 /* Readonly */ : 2 /* Mutable */;
+        return readonlyness;
+    }
+    // all non-object, non-intersection types are readonly.
+    // this should only be primitive types
+    if (!tsutils_1.isObjectType(type) && !tsutils_1.isUnionOrIntersectionType(type)) {
+        return 3 /* Readonly */;
+    }
+    // pure function types are readonly
+    if (type.getCallSignatures().length > 0 &&
+        type.getProperties().length === 0) {
+        return 3 /* Readonly */;
+    }
+    const isReadonlyArray = isTypeReadonlyArrayOrTuple(checker, type, seenTypes);
+    if (isReadonlyArray !== 1 /* UnknownType */) {
+        return isReadonlyArray;
+    }
+    const isReadonlyObject = isTypeReadonlyObject(checker, type, seenTypes);
+    /* istanbul ignore else */ if (isReadonlyObject !== 1 /* UnknownType */) {
+        return isReadonlyObject;
+    }
+    throw new Error('Unhandled type');
+}
+/**
+ * Checks if the given type is readonly
+ */
+function isTypeReadonly(checker, type) {
+    return (isTypeReadonlyRecurser(checker, type, new Set()) === 3 /* Readonly */);
+}
+exports.isTypeReadonly = isTypeReadonly;
+//# sourceMappingURL=isTypeReadonly.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/isTypeReadonly.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/isTypeReadonly.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..7cfab62df29983dfb19ae6d0e5e1ff7fe92ea155
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/isTypeReadonly.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"isTypeReadonly.js","sourceRoot":"","sources":["../../src/util/isTypeReadonly.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js
new file mode 100644
index 0000000000000000000000000000000000000000..0cb96ca5067e6feaa25b458dfbad957bbd6b8510
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js
@@ -0,0 +1,67 @@
+"use strict";
+/**
+ * @fileoverview Really small utility functions that didn't deserve their own files
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.upperCaseFirst = exports.isDefinitionFile = exports.getNameFromMember = exports.getNameFromIndexSignature = exports.getEnumNames = exports.findFirstResult = exports.arraysAreEqual = void 0;
+const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
+/**
+ * Check if the context file name is *.d.ts or *.d.tsx
+ */
+function isDefinitionFile(fileName) {
+    return /\.d\.tsx?$/i.test(fileName || '');
+}
+exports.isDefinitionFile = isDefinitionFile;
+/**
+ * Upper cases the first character or the string
+ */
+function upperCaseFirst(str) {
+    return str[0].toUpperCase() + str.slice(1);
+}
+exports.upperCaseFirst = upperCaseFirst;
+function arraysAreEqual(a, b, eq) {
+    return (a === b ||
+        (a !== undefined &&
+            b !== undefined &&
+            a.length === b.length &&
+            a.every((x, idx) => eq(x, b[idx]))));
+}
+exports.arraysAreEqual = arraysAreEqual;
+/** Returns the first non-`undefined` result. */
+function findFirstResult(inputs, getResult) {
+    for (const element of inputs) {
+        const result = getResult(element);
+        if (result !== undefined) {
+            return result;
+        }
+    }
+    return undefined;
+}
+exports.findFirstResult = findFirstResult;
+/**
+ * Gets a string representation of the name of the index signature.
+ */
+function getNameFromIndexSignature(node) {
+    const propName = node.parameters.find((parameter) => parameter.type === experimental_utils_1.AST_NODE_TYPES.Identifier);
+    return propName ? propName.name : '(index signature)';
+}
+exports.getNameFromIndexSignature = getNameFromIndexSignature;
+/**
+ * Gets a string name representation of the name of the given MethodDefinition
+ * or ClassProperty node, with handling for computed property names.
+ */
+function getNameFromMember(member, sourceCode) {
+    if (member.key.type === experimental_utils_1.AST_NODE_TYPES.Identifier) {
+        return member.key.name;
+    }
+    if (member.key.type === experimental_utils_1.AST_NODE_TYPES.Literal) {
+        return `${member.key.value}`;
+    }
+    return sourceCode.text.slice(...member.key.range);
+}
+exports.getNameFromMember = getNameFromMember;
+function getEnumNames(myEnum) {
+    return Object.keys(myEnum).filter(x => isNaN(parseInt(x)));
+}
+exports.getEnumNames = getEnumNames;
+//# sourceMappingURL=misc.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c3a0e48024b4fe039016143fa4fddef6ecf5da2b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/util/misc.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,8EAI+C;AAE/C;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAAgB;IACxC,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC;AAiGC,4CAAgB;AA/FlB;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AA4FC,wCAAc;AAvFhB,SAAS,cAAc,CACrB,CAAkB,EAClB,CAAkB,EAClB,EAA2B;IAE3B,OAAO,CACL,CAAC,KAAK,CAAC;QACP,CAAC,CAAC,KAAK,SAAS;YACd,CAAC,KAAK,SAAS;YACf,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YACrB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACtC,CAAC;AACJ,CAAC;AAkEC,wCAAc;AAhEhB,gDAAgD;AAChD,SAAS,eAAe,CACtB,MAAW,EACX,SAAkC;IAElC,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE;QAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO,MAAM,CAAC;SACf;KACF;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAuDC,0CAAe;AArDjB;;GAEG;AACH,SAAS,yBAAyB,CAAC,IAA+B;IAChE,MAAM,QAAQ,GAAsC,IAAI,CAAC,UAAU,CAAC,IAAI,CACtE,CAAC,SAA6B,EAAoC,EAAE,CAClE,SAAS,CAAC,IAAI,KAAK,mCAAc,CAAC,UAAU,CAC/C,CAAC;IACF,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACxD,CAAC;AA8CC,8DAAyB;AA5C3B;;;GAGG;AACH,SAAS,iBAAiB,CACxB,MAOgC,EAChC,UAA+B;IAE/B,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,mCAAc,CAAC,UAAU,EAAE;QACjD,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;KACxB;IACD,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,mCAAc,CAAC,OAAO,EAAE;QAC9C,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;KAC9B;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC;AAsBC,8CAAiB;AAXnB,SAAS,YAAY,CAAmB,MAA0B;IAChE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAQ,CAAC;AACpE,CAAC;AAOC,oCAAY"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/nullThrows.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/nullThrows.js
new file mode 100644
index 0000000000000000000000000000000000000000..e5507a2ed475bb9dc090a05c28a068fa1be8f03b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/nullThrows.js
@@ -0,0 +1,28 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.NullThrowsReasons = exports.nullThrows = void 0;
+/**
+ * A set of common reasons for calling nullThrows
+ */
+const NullThrowsReasons = {
+    MissingParent: 'Expected node to have a parent.',
+    MissingToken: (token, thing) => `Expected to find a ${token} for the ${thing}.`,
+};
+exports.NullThrowsReasons = NullThrowsReasons;
+/**
+ * Assert that a value must not be null or undefined.
+ * This is a nice explicit alternative to the non-null assertion operator.
+ */
+function nullThrows(value, message) {
+    // this function is primarily used to keep types happy in a safe way
+    // i.e. is used when we expect that a value is never nullish
+    // this means that it's pretty much impossible to test the below if...
+    // so ignore it in coverage metrics.
+    /* istanbul ignore if */
+    if (value === null || value === undefined) {
+        throw new Error(`Non-null Assertion Failed: ${message}`);
+    }
+    return value;
+}
+exports.nullThrows = nullThrows;
+//# sourceMappingURL=nullThrows.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/nullThrows.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/nullThrows.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..acc485af00ba62a5d884addfba5d038389e90eb7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/nullThrows.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"nullThrows.js","sourceRoot":"","sources":["../../src/util/nullThrows.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAM,iBAAiB,GAAG;IACxB,aAAa,EAAE,iCAAiC;IAChD,YAAY,EAAE,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE,CAC7C,sBAAsB,KAAK,YAAY,KAAK,GAAG;CACzC,CAAC;AAoBU,8CAAiB;AAlBtC;;;GAGG;AACH,SAAS,UAAU,CAAI,KAA2B,EAAE,OAAe;IACjE,oEAAoE;IACpE,4DAA4D;IAC5D,sEAAsE;IAEtE,oCAAoC;IACpC,wBAAwB;IACxB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QACzC,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;KAC1D;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAEQ,gCAAU"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/objectIterators.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/objectIterators.js
new file mode 100644
index 0000000000000000000000000000000000000000..16f733641ece670fb11972f6c67e2267998ca388
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/objectIterators.js
@@ -0,0 +1,27 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.objectReduceKey = exports.objectMapKey = exports.objectForEachKey = void 0;
+function objectForEachKey(obj, callback) {
+    const keys = Object.keys(obj);
+    for (const key of keys) {
+        callback(key);
+    }
+}
+exports.objectForEachKey = objectForEachKey;
+function objectMapKey(obj, callback) {
+    const values = [];
+    objectForEachKey(obj, key => {
+        values.push(callback(key));
+    });
+    return values;
+}
+exports.objectMapKey = objectMapKey;
+function objectReduceKey(obj, callback, initial) {
+    let accumulator = initial;
+    objectForEachKey(obj, key => {
+        accumulator = callback(accumulator, key);
+    });
+    return accumulator;
+}
+exports.objectReduceKey = objectReduceKey;
+//# sourceMappingURL=objectIterators.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/objectIterators.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/objectIterators.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..82a35bf959ef8b6399e3d1fa9406abd5f809388a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/objectIterators.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"objectIterators.js","sourceRoot":"","sources":["../../src/util/objectIterators.ts"],"names":[],"mappings":";;;AAAA,SAAS,gBAAgB,CACvB,GAAM,EACN,QAAgC;IAEhC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,QAAQ,CAAC,GAAG,CAAC,CAAC;KACf;AACH,CAAC;AAyBQ,4CAAgB;AAvBzB,SAAS,YAAY,CACnB,GAAM,EACN,QAAmC;IAEnC,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;QAC1B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAc0B,oCAAY;AAZvC,SAAS,eAAe,CACtB,GAAM,EACN,QAA2D,EAC3D,OAAqB;IAErB,IAAI,WAAW,GAAG,OAAO,CAAC;IAC1B,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;QAC1B,WAAW,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC;AACrB,CAAC;AAEwC,0CAAe"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/propertyTypes.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/propertyTypes.js
new file mode 100644
index 0000000000000000000000000000000000000000..6470d8f481ad9b8ca35122d1a27e1948ca8da2f0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/propertyTypes.js
@@ -0,0 +1,23 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getTypeOfPropertyOfType = exports.getTypeOfPropertyOfName = void 0;
+function getTypeOfPropertyOfName(checker, type, name, escapedName) {
+    // Most names are directly usable in the checker and aren't different from escaped names
+    if (!escapedName || !name.startsWith('__')) {
+        return checker.getTypeOfPropertyOfType(type, name);
+    }
+    // Symbolic names may differ in their escaped name compared to their human-readable name
+    // https://github.com/typescript-eslint/typescript-eslint/issues/2143
+    const escapedProperty = type
+        .getProperties()
+        .find(property => property.escapedName === escapedName);
+    return escapedProperty
+        ? checker.getDeclaredTypeOfSymbol(escapedProperty)
+        : undefined;
+}
+exports.getTypeOfPropertyOfName = getTypeOfPropertyOfName;
+function getTypeOfPropertyOfType(checker, type, property) {
+    return getTypeOfPropertyOfName(checker, type, property.getName(), property.getEscapedName());
+}
+exports.getTypeOfPropertyOfType = getTypeOfPropertyOfType;
+//# sourceMappingURL=propertyTypes.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/propertyTypes.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/propertyTypes.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..06e4a077c153ca06c3b897923a6a20cfcfaeee9d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/propertyTypes.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"propertyTypes.js","sourceRoot":"","sources":["../../src/util/propertyTypes.ts"],"names":[],"mappings":";;;AAEA,SAAgB,uBAAuB,CACrC,OAAuB,EACvB,IAAa,EACb,IAAY,EACZ,WAAyB;IAEzB,wFAAwF;IACxF,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QAC1C,OAAO,OAAO,CAAC,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACpD;IAED,wFAAwF;IACxF,qEAAqE;IACrE,MAAM,eAAe,GAAG,IAAI;SACzB,aAAa,EAAE;SACf,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;IAE1D,OAAO,eAAe;QACpB,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,eAAe,CAAC;QAClD,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AApBD,0DAoBC;AAED,SAAgB,uBAAuB,CACrC,OAAuB,EACvB,IAAa,EACb,QAAmB;IAEnB,OAAO,uBAAuB,CAC5B,OAAO,EACP,IAAI,EACJ,QAAQ,CAAC,OAAO,EAAE,EAClB,QAAQ,CAAC,cAAc,EAAE,CAC1B,CAAC;AACJ,CAAC;AAXD,0DAWC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/requiresQuoting.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/requiresQuoting.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8dafe277d40fd0665c0319311c64302cce94e9e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/requiresQuoting.js
@@ -0,0 +1,39 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.requiresQuoting = void 0;
+const ts = __importStar(require("typescript"));
+function requiresQuoting(name, target = ts.ScriptTarget.ESNext) {
+    if (name.length === 0) {
+        return true;
+    }
+    if (!ts.isIdentifierStart(name.charCodeAt(0), target)) {
+        return true;
+    }
+    for (let i = 1; i < name.length; i += 1) {
+        if (!ts.isIdentifierPart(name.charCodeAt(i), target)) {
+            return true;
+        }
+    }
+    return false;
+}
+exports.requiresQuoting = requiresQuoting;
+//# sourceMappingURL=requiresQuoting.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/requiresQuoting.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/requiresQuoting.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..bea7ea2ae0d8c7d24a9a2d9da4e04dc295cadbcd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/requiresQuoting.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"requiresQuoting.js","sourceRoot":"","sources":["../../src/util/requiresQuoting.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAEjC,SAAS,eAAe,CACtB,IAAY,EACZ,SAA0B,EAAE,CAAC,YAAY,CAAC,MAAM;IAEhD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACrB,OAAO,IAAI,CAAC;KACb;IAED,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE;QACrD,OAAO,IAAI,CAAC;KACb;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QACvC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE;YACpD,OAAO,IAAI,CAAC;SACb;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAEQ,0CAAe"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/types.js b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/types.js
new file mode 100644
index 0000000000000000000000000000000000000000..bb543a3588d50b6a14460dce7502a1d333a2fd58
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/types.js
@@ -0,0 +1,411 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getContextualType = exports.isUnsafeAssignment = exports.isAnyOrAnyArrayTypeDiscriminated = exports.isTypeUnknownArrayType = exports.isTypeAnyArrayType = exports.isTypeAnyType = exports.isTypeUnknownType = exports.getTypeArguments = exports.getEqualsKind = exports.getTokenAtPosition = exports.getSourceFileOfNode = exports.typeIsOrHasBaseType = exports.isTypeFlagSet = exports.getTypeFlags = exports.getDeclaration = exports.isNullableType = exports.getConstrainedTypeAtLocation = exports.getTypeName = exports.containsAllTypesByName = exports.isTypeArrayTypeOrUnionOfArrayTypes = void 0;
+const debug_1 = __importDefault(require("debug"));
+const tsutils_1 = require("tsutils");
+const ts = __importStar(require("typescript"));
+const log = debug_1.default('typescript-eslint:eslint-plugin:utils:types');
+/**
+ * Checks if the given type is either an array type,
+ * or a union made up solely of array types.
+ */
+function isTypeArrayTypeOrUnionOfArrayTypes(type, checker) {
+    for (const t of tsutils_1.unionTypeParts(type)) {
+        if (!checker.isArrayType(t)) {
+            return false;
+        }
+    }
+    return true;
+}
+exports.isTypeArrayTypeOrUnionOfArrayTypes = isTypeArrayTypeOrUnionOfArrayTypes;
+/**
+ * @param type Type being checked by name.
+ * @param allowedNames Symbol names checking on the type.
+ * @returns Whether the type is, extends, or contains all of the allowed names.
+ */
+function containsAllTypesByName(type, allowAny, allowedNames) {
+    if (isTypeFlagSet(type, ts.TypeFlags.Any | ts.TypeFlags.Unknown)) {
+        return !allowAny;
+    }
+    if (tsutils_1.isTypeReference(type)) {
+        type = type.target;
+    }
+    const symbol = type.getSymbol();
+    if (symbol && allowedNames.has(symbol.name)) {
+        return true;
+    }
+    if (tsutils_1.isUnionOrIntersectionType(type)) {
+        return type.types.every(t => containsAllTypesByName(t, allowAny, allowedNames));
+    }
+    const bases = type.getBaseTypes();
+    return (typeof bases !== 'undefined' &&
+        bases.length > 0 &&
+        bases.every(t => containsAllTypesByName(t, allowAny, allowedNames)));
+}
+exports.containsAllTypesByName = containsAllTypesByName;
+/**
+ * Get the type name of a given type.
+ * @param typeChecker The context sensitive TypeScript TypeChecker.
+ * @param type The type to get the name of.
+ */
+function getTypeName(typeChecker, type) {
+    // It handles `string` and string literal types as string.
+    if ((type.flags & ts.TypeFlags.StringLike) !== 0) {
+        return 'string';
+    }
+    // If the type is a type parameter which extends primitive string types,
+    // but it was not recognized as a string like. So check the constraint
+    // type of the type parameter.
+    if ((type.flags & ts.TypeFlags.TypeParameter) !== 0) {
+        // `type.getConstraint()` method doesn't return the constraint type of
+        // the type parameter for some reason. So this gets the constraint type
+        // via AST.
+        const symbol = type.getSymbol();
+        const decls = symbol === null || symbol === void 0 ? void 0 : symbol.getDeclarations();
+        const typeParamDecl = decls === null || decls === void 0 ? void 0 : decls[0];
+        if (ts.isTypeParameterDeclaration(typeParamDecl) &&
+            typeParamDecl.constraint != null) {
+            return getTypeName(typeChecker, typeChecker.getTypeFromTypeNode(typeParamDecl.constraint));
+        }
+    }
+    // If the type is a union and all types in the union are string like,
+    // return `string`. For example:
+    // - `"a" | "b"` is string.
+    // - `string | string[]` is not string.
+    if (type.isUnion() &&
+        type.types
+            .map(value => getTypeName(typeChecker, value))
+            .every(t => t === 'string')) {
+        return 'string';
+    }
+    // If the type is an intersection and a type in the intersection is string
+    // like, return `string`. For example: `string & {__htmlEscaped: void}`
+    if (type.isIntersection() &&
+        type.types
+            .map(value => getTypeName(typeChecker, value))
+            .some(t => t === 'string')) {
+        return 'string';
+    }
+    return typeChecker.typeToString(type);
+}
+exports.getTypeName = getTypeName;
+/**
+ * Resolves the given node's type. Will resolve to the type's generic constraint, if it has one.
+ */
+function getConstrainedTypeAtLocation(checker, node) {
+    const nodeType = checker.getTypeAtLocation(node);
+    const constrained = checker.getBaseConstraintOfType(nodeType);
+    return constrained !== null && constrained !== void 0 ? constrained : nodeType;
+}
+exports.getConstrainedTypeAtLocation = getConstrainedTypeAtLocation;
+/**
+ * Checks if the given type is (or accepts) nullable
+ * @param isReceiver true if the type is a receiving type (i.e. the type of a called function's parameter)
+ */
+function isNullableType(type, { isReceiver = false, allowUndefined = true, } = {}) {
+    const flags = getTypeFlags(type);
+    if (isReceiver && flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) {
+        return true;
+    }
+    if (allowUndefined) {
+        return (flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined)) !== 0;
+    }
+    else {
+        return (flags & ts.TypeFlags.Null) !== 0;
+    }
+}
+exports.isNullableType = isNullableType;
+/**
+ * Gets the declaration for the given variable
+ */
+function getDeclaration(checker, node) {
+    var _a;
+    const symbol = checker.getSymbolAtLocation(node);
+    if (!symbol) {
+        return null;
+    }
+    const declarations = symbol.getDeclarations();
+    return (_a = declarations === null || declarations === void 0 ? void 0 : declarations[0]) !== null && _a !== void 0 ? _a : null;
+}
+exports.getDeclaration = getDeclaration;
+/**
+ * Gets all of the type flags in a type, iterating through unions automatically
+ */
+function getTypeFlags(type) {
+    let flags = 0;
+    for (const t of tsutils_1.unionTypeParts(type)) {
+        flags |= t.flags;
+    }
+    return flags;
+}
+exports.getTypeFlags = getTypeFlags;
+/**
+ * Checks if the given type is (or accepts) the given flags
+ * @param isReceiver true if the type is a receiving type (i.e. the type of a called function's parameter)
+ */
+function isTypeFlagSet(type, flagsToCheck, isReceiver) {
+    const flags = getTypeFlags(type);
+    if (isReceiver && flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) {
+        return true;
+    }
+    return (flags & flagsToCheck) !== 0;
+}
+exports.isTypeFlagSet = isTypeFlagSet;
+/**
+ * @returns Whether a type is an instance of the parent type, including for the parent's base types.
+ */
+function typeIsOrHasBaseType(type, parentType) {
+    const parentSymbol = parentType.getSymbol();
+    if (!type.getSymbol() || !parentSymbol) {
+        return false;
+    }
+    const typeAndBaseTypes = [type];
+    const ancestorTypes = type.getBaseTypes();
+    if (ancestorTypes) {
+        typeAndBaseTypes.push(...ancestorTypes);
+    }
+    for (const baseType of typeAndBaseTypes) {
+        const baseSymbol = baseType.getSymbol();
+        if (baseSymbol && baseSymbol.name === parentSymbol.name) {
+            return true;
+        }
+    }
+    return false;
+}
+exports.typeIsOrHasBaseType = typeIsOrHasBaseType;
+/**
+ * Gets the source file for a given node
+ */
+function getSourceFileOfNode(node) {
+    while (node && node.kind !== ts.SyntaxKind.SourceFile) {
+        node = node.parent;
+    }
+    return node;
+}
+exports.getSourceFileOfNode = getSourceFileOfNode;
+function getTokenAtPosition(sourceFile, position) {
+    const queue = [sourceFile];
+    let current;
+    while (queue.length > 0) {
+        current = queue.shift();
+        // find the child that contains 'position'
+        for (const child of current.getChildren(sourceFile)) {
+            const start = child.getFullStart();
+            if (start > position) {
+                // If this child begins after position, then all subsequent children will as well.
+                return current;
+            }
+            const end = child.getEnd();
+            if (position < end ||
+                (position === end && child.kind === ts.SyntaxKind.EndOfFileToken)) {
+                queue.push(child);
+                break;
+            }
+        }
+    }
+    return current;
+}
+exports.getTokenAtPosition = getTokenAtPosition;
+function getEqualsKind(operator) {
+    switch (operator) {
+        case '==':
+            return {
+                isPositive: true,
+                isStrict: false,
+            };
+        case '===':
+            return {
+                isPositive: true,
+                isStrict: true,
+            };
+        case '!=':
+            return {
+                isPositive: false,
+                isStrict: false,
+            };
+        case '!==':
+            return {
+                isPositive: false,
+                isStrict: true,
+            };
+        default:
+            return undefined;
+    }
+}
+exports.getEqualsKind = getEqualsKind;
+function getTypeArguments(type, checker) {
+    var _a;
+    // getTypeArguments was only added in TS3.7
+    if (checker.getTypeArguments) {
+        return checker.getTypeArguments(type);
+    }
+    return (_a = type.typeArguments) !== null && _a !== void 0 ? _a : [];
+}
+exports.getTypeArguments = getTypeArguments;
+/**
+ * @returns true if the type is `unknown`
+ */
+function isTypeUnknownType(type) {
+    return isTypeFlagSet(type, ts.TypeFlags.Unknown);
+}
+exports.isTypeUnknownType = isTypeUnknownType;
+/**
+ * @returns true if the type is `any`
+ */
+function isTypeAnyType(type) {
+    if (isTypeFlagSet(type, ts.TypeFlags.Any)) {
+        if (type.intrinsicName === 'error') {
+            log('Found an "error" any type');
+        }
+        return true;
+    }
+    return false;
+}
+exports.isTypeAnyType = isTypeAnyType;
+/**
+ * @returns true if the type is `any[]`
+ */
+function isTypeAnyArrayType(type, checker) {
+    return (checker.isArrayType(type) &&
+        isTypeAnyType(
+        // getTypeArguments was only added in TS3.7
+        getTypeArguments(type, checker)[0]));
+}
+exports.isTypeAnyArrayType = isTypeAnyArrayType;
+/**
+ * @returns true if the type is `unknown[]`
+ */
+function isTypeUnknownArrayType(type, checker) {
+    return (checker.isArrayType(type) &&
+        isTypeUnknownType(
+        // getTypeArguments was only added in TS3.7
+        getTypeArguments(type, checker)[0]));
+}
+exports.isTypeUnknownArrayType = isTypeUnknownArrayType;
+/**
+ * @returns `AnyType.Any` if the type is `any`, `AnyType.AnyArray` if the type is `any[]` or `readonly any[]`,
+ *          otherwise it returns `AnyType.Safe`.
+ */
+function isAnyOrAnyArrayTypeDiscriminated(node, checker) {
+    const type = checker.getTypeAtLocation(node);
+    if (isTypeAnyType(type)) {
+        return 0 /* Any */;
+    }
+    if (isTypeAnyArrayType(type, checker)) {
+        return 1 /* AnyArray */;
+    }
+    return 2 /* Safe */;
+}
+exports.isAnyOrAnyArrayTypeDiscriminated = isAnyOrAnyArrayTypeDiscriminated;
+/**
+ * Does a simple check to see if there is an any being assigned to a non-any type.
+ *
+ * This also checks generic positions to ensure there's no unsafe sub-assignments.
+ * Note: in the case of generic positions, it makes the assumption that the two types are the same.
+ *
+ * @example See tests for examples
+ *
+ * @returns false if it's safe, or an object with the two types if it's unsafe
+ */
+function isUnsafeAssignment(type, receiver, checker) {
+    var _a, _b;
+    if (isTypeAnyType(type)) {
+        // Allow assignment of any ==> unknown.
+        if (isTypeUnknownType(receiver)) {
+            return false;
+        }
+        if (!isTypeAnyType(receiver)) {
+            return { sender: type, receiver };
+        }
+    }
+    if (tsutils_1.isTypeReference(type) && tsutils_1.isTypeReference(receiver)) {
+        // TODO - figure out how to handle cases like this,
+        // where the types are assignable, but not the same type
+        /*
+        function foo(): ReadonlySet<number> { return new Set<any>(); }
+    
+        // and
+    
+        type Test<T> = { prop: T }
+        type Test2 = { prop: string }
+        declare const a: Test<any>;
+        const b: Test2 = a;
+        */
+        if (type.target !== receiver.target) {
+            // if the type references are different, assume safe, as we won't know how to compare the two types
+            // the generic positions might not be equivalent for both types
+            return false;
+        }
+        const typeArguments = (_a = type.typeArguments) !== null && _a !== void 0 ? _a : [];
+        const receiverTypeArguments = (_b = receiver.typeArguments) !== null && _b !== void 0 ? _b : [];
+        for (let i = 0; i < typeArguments.length; i += 1) {
+            const arg = typeArguments[i];
+            const receiverArg = receiverTypeArguments[i];
+            const unsafe = isUnsafeAssignment(arg, receiverArg, checker);
+            if (unsafe) {
+                return { sender: type, receiver };
+            }
+        }
+        return false;
+    }
+    return false;
+}
+exports.isUnsafeAssignment = isUnsafeAssignment;
+/**
+ * Returns the contextual type of a given node.
+ * Contextual type is the type of the target the node is going into.
+ * i.e. the type of a called function's parameter, or the defined type of a variable declaration
+ */
+function getContextualType(checker, node) {
+    const parent = node.parent;
+    if (!parent) {
+        return;
+    }
+    if (tsutils_1.isCallExpression(parent) || tsutils_1.isNewExpression(parent)) {
+        if (node === parent.expression) {
+            // is the callee, so has no contextual type
+            return;
+        }
+    }
+    else if (tsutils_1.isVariableDeclaration(parent) ||
+        tsutils_1.isPropertyDeclaration(parent) ||
+        tsutils_1.isParameterDeclaration(parent)) {
+        return parent.type ? checker.getTypeFromTypeNode(parent.type) : undefined;
+    }
+    else if (tsutils_1.isJsxExpression(parent)) {
+        return checker.getContextualType(parent);
+    }
+    else if (tsutils_1.isPropertyAssignment(parent) && tsutils_1.isIdentifier(node)) {
+        return checker.getContextualType(node);
+    }
+    else if (![ts.SyntaxKind.TemplateSpan, ts.SyntaxKind.JsxExpression].includes(parent.kind)) {
+        // parent is not something we know we can get the contextual type of
+        return;
+    }
+    // TODO - support return statement checking
+    return checker.getContextualType(node);
+}
+exports.getContextualType = getContextualType;
+//# sourceMappingURL=types.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/types.js.map b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/types.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..275e1eedd270f2261f10051af7be2fdf7367706e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/dist/util/types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/util/types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/adjacent-overload-signatures.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/adjacent-overload-signatures.md
new file mode 100644
index 0000000000000000000000000000000000000000..e7a1596d16746c0b02e90a98c7b3644fca2164b4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/adjacent-overload-signatures.md
@@ -0,0 +1,89 @@
+# Require that member overloads be consecutive (`adjacent-overload-signatures`)
+
+Grouping overloaded members together can improve readability of the code.
+
+## Rule Details
+
+This rule aims to standardize the way overloaded members are organized.
+
+The following patterns are considered warnings:
+
+```ts
+declare namespace Foo {
+  export function foo(s: string): void;
+  export function foo(n: number): void;
+  export function bar(): void;
+  export function foo(sn: string | number): void;
+}
+
+type Foo = {
+  foo(s: string): void;
+  foo(n: number): void;
+  bar(): void;
+  foo(sn: string | number): void;
+};
+
+interface Foo {
+  foo(s: string): void;
+  foo(n: number): void;
+  bar(): void;
+  foo(sn: string | number): void;
+}
+
+class Foo {
+  foo(s: string): void;
+  foo(n: number): void;
+  bar(): void {}
+  foo(sn: string | number): void {}
+}
+
+export function foo(s: string): void;
+export function foo(n: number): void;
+export function bar(): void;
+export function foo(sn: string | number): void;
+```
+
+The following patterns are not warnings:
+
+```ts
+declare namespace Foo {
+  export function foo(s: string): void;
+  export function foo(n: number): void;
+  export function foo(sn: string | number): void;
+  export function bar(): void;
+}
+
+type Foo = {
+  foo(s: string): void;
+  foo(n: number): void;
+  foo(sn: string | number): void;
+  bar(): void;
+};
+
+interface Foo {
+  foo(s: string): void;
+  foo(n: number): void;
+  foo(sn: string | number): void;
+  bar(): void;
+}
+
+class Foo {
+  foo(s: string): void;
+  foo(n: number): void;
+  foo(sn: string | number): void {}
+  bar(): void {}
+}
+
+export function bar(): void;
+export function foo(s: string): void;
+export function foo(n: number): void;
+export function foo(sn: string | number): void;
+```
+
+## When Not To Use It
+
+If you don't care about the general structure of the code, then you will not need this rule.
+
+## Compatibility
+
+- TSLint: [adjacent-overload-signatures](https://palantir.github.io/tslint/rules/adjacent-overload-signatures/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/array-type.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/array-type.md
new file mode 100644
index 0000000000000000000000000000000000000000..75e2b1c6d655a19bd0c3f0c651a86cea9cf999f8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/array-type.md
@@ -0,0 +1,116 @@
+# Requires using either `T[]` or `Array<T>` for arrays (`array-type`)
+
+Using the same style for array definitions across your codebase makes it easier for your developers to read and understand the types.
+
+## Rule Details
+
+This rule aims to standardize usage of array types within your codebase.
+
+## Options
+
+```ts
+type ArrayOption = 'array' | 'generic' | 'array-simple';
+type Options = {
+  default: ArrayOption;
+  readonly?: ArrayOption;
+};
+
+const defaultOptions: Options = {
+  default: 'array',
+};
+```
+
+The rule accepts an options object with the following properties:
+
+- `default` - sets the array type expected for mutable cases.
+- `readonly` - sets the array type expected for readonly arrays. If this is omitted, then the value for `default` will be used.
+
+Each property can be set to one of three strings: `'array' | 'generic' | 'array-simple'`.
+
+The default config will enforce that all mutable and readonly arrays use the `'array'` syntax.
+
+### `"array"`
+
+Always use `T[]` or `readonly T[]` for all array types.
+
+Incorrect code for `"array"`:
+
+```ts
+const x: Array<string> = ['a', 'b'];
+const y: ReadonlyArray<string> = ['a', 'b'];
+```
+
+Correct code for `"array"`:
+
+```ts
+const x: string[] = ['a', 'b'];
+const y: readonly string[] = ['a', 'b'];
+```
+
+### `"generic"`
+
+Always use `Array<T>` or `ReadonlyArray<T>` for all array types.
+
+Incorrect code for `"generic"`:
+
+```ts
+const x: string[] = ['a', 'b'];
+const y: readonly string[] = ['a', 'b'];
+```
+
+Correct code for `"generic"`:
+
+```ts
+const x: Array<string> = ['a', 'b'];
+const y: ReadonlyArray<string> = ['a', 'b'];
+```
+
+### `"array-simple"`
+
+Use `T[]` or `readonly T[]` for simple types (i.e. types which are just primitive names or type references).
+Use `Array<T>` or `ReadonlyArray<T>` for all other types (union types, intersection types, object types, function types, etc).
+
+Incorrect code for `"array-simple"`:
+
+```ts
+const a: (string | number)[] = ['a', 'b'];
+const b: { prop: string }[] = [{ prop: 'a' }];
+const c: (() => void)[] = [() => {}];
+const d: Array<MyType> = ['a', 'b'];
+const e: Array<string> = ['a', 'b'];
+const f: ReadonlyArray<string> = ['a', 'b'];
+```
+
+Correct code for `"array-simple"`:
+
+```ts
+const a: Array<string | number> = ['a', 'b'];
+const b: Array<{ prop: string }> = [{ prop: 'a' }];
+const c: Array<() => void> = [() => {}];
+const d: MyType[] = ['a', 'b'];
+const e: string[] = ['a', 'b'];
+const f: readonly string[] = ['a', 'b'];
+```
+
+## Combination matrix
+
+This matrix lists all possible option combinations and their expected results for different types of Arrays.
+
+| defaultOption  | readonlyOption | Array with simple type | Array with non simple type | Readonly array with simple type | Readonly array with non simple type |
+| -------------- | -------------- | ---------------------- | -------------------------- | ------------------------------- | ----------------------------------- |
+| `array`        |                | `number[]`             | `(Foo & Bar)[]`            | `readonly number[]`             | `readonly (Foo & Bar)[]`            |
+| `array`        | `array`        | `number[]`             | `(Foo & Bar)[]`            | `readonly number[]`             | `readonly (Foo & Bar)[]`            |
+| `array`        | `array-simple` | `number[]`             | `(Foo & Bar)[]`            | `readonly number[]`             | `ReadonlyArray<Foo & Bar>`          |
+| `array`        | `generic`      | `number[]`             | `(Foo & Bar)[]`            | `ReadonlyArray<number>`         | `ReadonlyArray<Foo & Bar>`          |
+| `array-simple` |                | `number[]`             | `Array<Foo & Bar>`         | `readonly number[]`             | `ReadonlyArray<Foo & Bar>`          |
+| `array-simple` | `array`        | `number[]`             | `Array<Foo & Bar>`         | `readonly number[]`             | `readonly (Foo & Bar)[]`            |
+| `array-simple` | `array-simple` | `number[]`             | `Array<Foo & Bar>`         | `readonly number[]`             | `ReadonlyArray<Foo & Bar>`          |
+| `array-simple` | `generic`      | `number[]`             | `Array<Foo & Bar>`         | `ReadonlyArray<number>`         | `ReadonlyArray<Foo & Bar>`          |
+| `generic`      |                | `Array<number>`        | `Array<Foo & Bar>`         | `ReadonlyArray<number>`         | `ReadonlyArray<Foo & Bar>`          |
+| `generic`      | `array`        | `Array<number>`        | `Array<Foo & Bar>`         | `readonly number[]`             | `readonly (Foo & Bar)[]`            |
+| `generic`      | `array-simple` | `Array<number>`        | `Array<Foo & Bar>`         | `readonly number[]`             | `ReadonlyArray<Foo & Bar>`          |
+| `generic`      | `generic`      | `Array<number>`        | `Array<Foo & Bar>`         | `ReadonlyArray<number>`         | `ReadonlyArray<Foo & Bar>`          |
+
+## Related to
+
+- TSLint: [array-type](https://palantir.github.io/tslint/rules/array-type/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/await-thenable.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/await-thenable.md
new file mode 100644
index 0000000000000000000000000000000000000000..fc65df9be38fe98ecc4625a8a156be60f113f051
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/await-thenable.md
@@ -0,0 +1,33 @@
+# Disallows awaiting a value that is not a Thenable (`await-thenable`)
+
+This rule disallows awaiting a value that is not a "Thenable" (an object which has `then` method, such as a Promise).
+While it is valid JavaScript to await a non-`Promise`-like value (it will resolve immediately), this pattern is often a programmer error, such as forgetting to add parenthesis to call a function that returns a Promise.
+
+## Rule Details
+
+Examples of **incorrect** code for this rule:
+
+```ts
+await 'value';
+
+const createValue = () => 'value';
+await createValue();
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+await Promise.resolve('value');
+
+const createValue = async () => 'value';
+await createValue();
+```
+
+## When Not To Use It
+
+If you want to allow code to `await` non-Promise values.
+This is generally not preferred, but can sometimes be useful for visual consistency.
+
+## Related to
+
+- TSLint: ['await-promise'](https://palantir.github.io/tslint/rules/await-promise)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/ban-ts-comment.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/ban-ts-comment.md
new file mode 100644
index 0000000000000000000000000000000000000000..bfdd4104751dcf445573cf370032d1b78985cf2b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/ban-ts-comment.md
@@ -0,0 +1,132 @@
+# Bans `@ts-<directive>` comments from being used or requires descriptions after directive (`ban-ts-comment`)
+
+TypeScript provides several directive comments that can be used to alter how it processes files.
+Using these to suppress TypeScript Compiler Errors reduces the effectiveness of TypeScript overall.
+
+The directive comments supported by TypeScript are:
+
+```ts
+// @ts-expect-error
+// @ts-ignore
+// @ts-nocheck
+// @ts-check
+```
+
+## Rule Details
+
+This rule lets you set which directive comments you want to allow in your codebase.
+By default, only `@ts-check` is allowed, as it enables rather than suppresses errors.
+
+The configuration looks like this:
+
+```ts
+interface Options {
+  'ts-expect-error'?: boolean | 'allow-with-description';
+  'ts-ignore'?: boolean | 'allow-with-description';
+  'ts-nocheck'?: boolean | 'allow-with-description';
+  'ts-check'?: boolean | 'allow-with-description';
+  minimumDescriptionLength?: number;
+}
+
+const defaultOptions: Options = {
+  'ts-expect-error': 'allow-with-description',
+  'ts-ignore': true,
+  'ts-nocheck': true,
+  'ts-check': false,
+  minimumDescriptionLength: 3,
+};
+```
+
+### `ts-expect-error`, `ts-ignore`, `ts-nocheck`, `ts-check` directives
+
+A value of `true` for a particular directive means that this rule will report if it finds any usage of said directive.
+
+For example, with the defaults above the following patterns are considered warnings for single line or comment block lines:
+
+```ts
+if (false) {
+  // @ts-ignore: Unreachable code error
+  console.log('hello');
+}
+if (false) {
+  /*
+  @ts-ignore: Unreachable code error
+  */
+  console.log('hello');
+}
+```
+
+The following patterns are not warnings:
+
+```ts
+if (false) {
+  // Compiler warns about unreachable code error
+  console.log('hello');
+}
+```
+
+### `allow-with-description`
+
+A value of `'allow-with-description'` for a particular directive means that this rule will report if it finds a directive that does not have a description following the directive (on the same line).
+
+For example, with `{ 'ts-expect-error': 'allow-with-description' }` the following patterns are considered a warning:
+
+```ts
+if (false) {
+  // @ts-expect-error
+  console.log('hello');
+}
+if (false) {
+  /* @ts-expect-error */
+  console.log('hello');
+}
+```
+
+The following patterns are not a warning:
+
+```ts
+if (false) {
+  // @ts-expect-error: Unreachable code error
+  console.log('hello');
+}
+if (false) {
+  /*
+  @ts-expect-error: Unreachable code error
+  */
+  console.log('hello');
+}
+```
+
+### `minimumDescriptionLength`
+
+Use `minimumDescriptionLength` to set a minimum length for descriptions when using the `allow-with-description` option for a directive.
+
+For example, with `{ 'ts-expect-error': 'allow-with-description', minimumDescriptionLength: 10 }` the following pattern is considered a warning:
+
+```ts
+if (false) {
+  // @ts-expect-error: TODO
+  console.log('hello');
+}
+```
+
+The following pattern is not a warning:
+
+```ts
+if (false) {
+  // @ts-expect-error The rationale for this override is described in issue #1337 on GitLab
+  console.log('hello');
+}
+```
+
+## When Not To Use It
+
+If you want to use all of the TypeScript directives.
+
+## Further Reading
+
+- TypeScript [Type Checking JavaScript Files](https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html)
+
+## Compatibility
+
+- TSLint: [ban-ts-ignore](https://palantir.github.io/tslint/rules/ban-ts-ignore/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/ban-tslint-comment.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/ban-tslint-comment.md
new file mode 100644
index 0000000000000000000000000000000000000000..6af168f4bc4e682be2ce8cfae4ed81f607cd2159
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/ban-tslint-comment.md
@@ -0,0 +1,29 @@
+# Bans `// tslint:<rule-flag>` comments from being used (`ban-tslint-comment`)
+
+Useful when migrating from TSLint to ESLint. Once TSLint has been removed, this rule helps locate TSLint annotations (e.g. `// tslint:disable`).
+
+## Rule Details
+
+Examples of **incorrect** code for this rule:
+
+All TSLint [rule flags](https://palantir.github.io/tslint/usage/rule-flags/)
+
+```js
+/* tslint:disable */
+/* tslint:enable */
+/* tslint:disable:rule1 rule2 rule3... */
+/* tslint:enable:rule1 rule2 rule3... */
+// tslint:disable-next-line
+someCode(); // tslint:disable-line
+// tslint:disable-next-line:rule1 rule2 rule3...
+```
+
+Examples of **correct** code for this rule:
+
+```js
+// This is a comment that just happens to mention tslint
+```
+
+## When Not To Use It
+
+If you are still using TSLint.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/ban-types.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/ban-types.md
new file mode 100644
index 0000000000000000000000000000000000000000..bf59ffb846181b8aa73a1d30b218f236d31c01e4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/ban-types.md
@@ -0,0 +1,188 @@
+# Bans specific types from being used (`ban-types`)
+
+Some builtin types have aliases, some types are considered dangerous or harmful.
+It's often a good idea to ban certain types to help with consistency and safety.
+
+## Rule Details
+
+This rule bans specific types and can suggest alternatives.
+Note that it does not ban the corresponding runtime objects from being used.
+
+## Options
+
+```ts
+type Options = {
+  types?: {
+    [typeName: string]:
+      | false
+      | string
+      | {
+          message: string;
+          fixWith?: string;
+        };
+  };
+  extendDefaults?: boolean;
+};
+```
+
+The rule accepts a single object as options, with the following keys:
+
+- `types` - An object whose keys are the types you want to ban, and the values are error messages.
+  - The type can either be a type name literal (`Foo`), a type name with generic parameter instantiation(s) (`Foo<Bar>`), the empty object literal (`{}`), or the empty tuple type (`[]`).
+  - The values can be a string, which is the error message to be reported, `false` to specifically disable this type
+    or it can be an object with the following properties:
+    - `message: string` - the message to display when the type is matched.
+    - `fixWith?: string` - a string to replace the banned type with when the fixer is run. If this is omitted, no fix will be done.
+- `extendDefaults` - if you're specifying custom `types`, you can set this to `true` to extend the default `types` configuration.
+  - This is a convenience option to save you copying across the defaults when adding another type.
+  - If this is `false`, the rule will _only_ use the types defined in your configuration.
+
+Example configuration:
+
+```jsonc
+{
+  "@typescript-eslint/ban-types": [
+    "error",
+    {
+      "types": {
+        // add a custom message to help explain why not to use it
+        "Foo": "Don't use Foo because it is unsafe",
+
+        // add a custom message, AND tell the plugin how to fix it
+        "String": {
+          "message": "Use string instead",
+          "fixWith": "string"
+        },
+
+        "{}": {
+          "message": "Use object instead",
+          "fixWith": "object"
+        }
+      }
+    }
+  ]
+}
+```
+
+### Default Options
+
+The default options provide a set of "best practices", intended to provide safety and standardization in your codebase:
+
+- Don't use the upper-case primitive types, you should use the lower-case types for consistency.
+- Avoid the `Function` type, as it provides little safety for the following reasons:
+  - It provides no type safety when calling the value, which means it's easy to provide the wrong arguments.
+  - It accepts class declarations, which will fail when called, as they are called without the `new` keyword.
+- Avoid the `Object` and `{}` types, as they mean "any non-nullish value".
+  - This is a point of confusion for many developers, who think it means "any object type".
+  - See [this comment for more information](https://github.com/typescript-eslint/typescript-eslint/issues/2063#issuecomment-675156492).
+- Avoid the `object` type, as it is currently hard to use due to not being able to assert that keys exist.
+  - See [microsoft/TypeScript#21732](https://github.com/microsoft/TypeScript/issues/21732).
+
+**_Important note:_** the default options suggest using `Record<string, unknown>`; this was a stylistic decision, as the built-in `Record` type is considered to look cleaner.
+
+<details>
+<summary>Default Options</summary>
+
+```ts
+const defaultTypes = {
+  String: {
+    message: 'Use string instead',
+    fixWith: 'string',
+  },
+  Boolean: {
+    message: 'Use boolean instead',
+    fixWith: 'boolean',
+  },
+  Number: {
+    message: 'Use number instead',
+    fixWith: 'number',
+  },
+  Symbol: {
+    message: 'Use symbol instead',
+    fixWith: 'symbol',
+  },
+
+  Function: {
+    message: [
+      'The `Function` type accepts any function-like value.',
+      'It provides no type safety when calling the function, which can be a common source of bugs.',
+      'It also accepts things like class declarations, which will throw at runtime as they will not be called with `new`.',
+      'If you are expecting the function to accept certain arguments, you should explicitly define the function shape.',
+    ].join('\n'),
+  },
+
+  // object typing
+  Object: {
+    message: [
+      'The `Object` type actually means "any non-nullish value", so it is marginally better than `unknown`.',
+      '- If you want a type meaning "any object", you probably want `Record<string, unknown>` instead.',
+      '- If you want a type meaning "any value", you probably want `unknown` instead.',
+    ].join('\n'),
+  },
+  '{}': {
+    message: [
+      '`{}` actually means "any non-nullish value".',
+      '- If you want a type meaning "any object", you probably want `Record<string, unknown>` instead.',
+      '- If you want a type meaning "any value", you probably want `unknown` instead.',
+    ].join('\n'),
+  },
+  object: {
+    message: [
+      'The `object` type is currently hard to use ([see this issue](https://github.com/microsoft/TypeScript/issues/21732)).',
+      'Consider using `Record<string, unknown>` instead, as it allows you to more easily inspect and use the keys.',
+    ].join('\n'),
+  },
+};
+```
+
+</details>
+
+### Examples
+
+Examples of **incorrect** code with the default options:
+
+```ts
+// use lower-case primitives for consistency
+const str: String = 'foo';
+const bool: Boolean = true;
+const num: Number = 1;
+const symb: Symbol = Symbol('foo');
+
+// use a proper function type
+const func: Function = () => 1;
+
+// use safer object types
+const lowerObj: object = {};
+
+const capitalObj1: Object = 1;
+const capitalObj2: Object = { a: 'string' };
+
+const curly1: {} = 1;
+const curly2: {} = { a: 'string' };
+```
+
+Examples of **correct** code with the default options:
+
+```ts
+// use lower-case primitives for consistency
+const str: string = 'foo';
+const bool: boolean = true;
+const num: number = 1;
+const symb: symbol = Symbol('foo');
+
+// use a proper function type
+const func: () => number = () => 1;
+
+// use safer object types
+const lowerObj: Record<string, unknown> = {};
+
+const capitalObj1: number = 1;
+const capitalObj2: { a: string } = { a: 'string' };
+
+const curly1: number = 1;
+const curly2: Record<'a', string> = { a: 'string' };
+```
+
+## Compatibility
+
+- TSLint: [ban-types](https://palantir.github.io/tslint/rules/ban-types/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/brace-style.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/brace-style.md
new file mode 100644
index 0000000000000000000000000000000000000000..06dfa1619fb260a425f7a12adc951a58ef1deb2f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/brace-style.md
@@ -0,0 +1,22 @@
+# Enforce consistent brace style for blocks (`brace-style`)
+
+## Rule Details
+
+This rule extends the base [`eslint/brace-style`](https://eslint.org/docs/rules/brace-style) rule.
+It adds support for `enum`, `interface`, `namespace` and `module` declarations.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "brace-style": "off",
+  "@typescript-eslint/brace-style": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/brace-style` options](https://eslint.org/docs/rules/brace-style#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/brace-style.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/camelcase.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/camelcase.md
new file mode 100644
index 0000000000000000000000000000000000000000..cea28224965f6ea2f4e4e1bc0c591d45807ac0dc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/camelcase.md
@@ -0,0 +1,8 @@
+## DEPRECATED
+
+This rule has been deprecated in favour of the [`naming-convention`](./naming-convention.md) rule.
+
+<!--
+This doc file has been left on purpose because `camelcase` is a core eslint rule.
+This exists to help direct people to the replacement rule.
+-->
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/class-literal-property-style.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/class-literal-property-style.md
new file mode 100644
index 0000000000000000000000000000000000000000..1bca8390fd3bac105393d30c7ce5e53b57038618
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/class-literal-property-style.md
@@ -0,0 +1,96 @@
+# Ensures that literals on classes are exposed in a consistent style (`class-literal-property-style`)
+
+When writing TypeScript applications, it's typically safe to store literal values on classes using fields with the `readonly` modifier to prevent them from being reassigned.
+When writing TypeScript libraries that could be used by JavaScript users however, it's typically safer to expose these literals using `getter`s, since the `readonly` modifier is enforced at compile type.
+
+## Rule Details
+
+This rule aims to ensure that literals exposed by classes are done so consistently, in one of the two style described above.
+By default this rule prefers the `fields` style as it means JS doesn't have to setup & teardown a function closure.
+
+Note that this rule only checks for constant _literal_ values (string, template string, number, bigint, boolean, regexp, null). It does not check objects or arrays, because a readonly field behaves differently to a getter in those cases. It also does not check functions, as it is a common pattern to use readonly fields with arrow function values as auto-bound methods.
+This is because these types can be mutated and carry with them more complex implications about their usage.
+
+### The `fields` style
+
+This style checks for any getter methods that return literal values, and requires them to be defined using fields with the `readonly` modifier instead.
+
+Examples of **correct** code with the `fields` style:
+
+```ts
+/* eslint @typescript-eslint/class-literal-property-style: ["error", "fields"] */
+
+class Mx {
+  public readonly myField1 = 1;
+
+  // not a literal
+  public readonly myField2 = [1, 2, 3];
+
+  private readonly ['myField3'] = 'hello world';
+
+  public get myField4() {
+    return `hello from ${window.location.href}`;
+  }
+}
+```
+
+Examples of **incorrect** code with the `fields` style:
+
+```ts
+/* eslint @typescript-eslint/class-literal-property-style: ["error", "fields"] */
+
+class Mx {
+  public static get myField1() {
+    return 1;
+  }
+
+  private get ['myField2']() {
+    return 'hello world';
+  }
+}
+```
+
+### The `getters` style
+
+This style checks for any `readonly` fields that are assigned literal values, and requires them to be defined as getters instead.
+This style pairs well with the [`@typescript-eslint/prefer-readonly`](prefer-readonly.md) rule,
+as it will identify fields that can be `readonly`, and thus should be made into getters.
+
+Examples of **correct** code with the `getters` style:
+
+```ts
+/* eslint @typescript-eslint/class-literal-property-style: ["error", "getters"] */
+
+class Mx {
+  // no readonly modifier
+  public myField1 = 'hello';
+
+  // not a literal
+  public readonly myField2 = [1, 2, 3];
+
+  public static get myField3() {
+    return 1;
+  }
+
+  private get ['myField4']() {
+    return 'hello world';
+  }
+}
+```
+
+Examples of **incorrect** code with the `getters` style:
+
+```ts
+/* eslint @typescript-eslint/class-literal-property-style: ["error", "getters"] */
+
+class Mx {
+  readonly myField1 = 1;
+  readonly myField2 = `hello world`;
+  private readonly myField3 = 'hello world';
+}
+```
+
+## When Not To Use It
+
+When you have no strong preference, or do not wish to enforce a particular style
+for how literal values are exposed by your classes.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/comma-dangle.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/comma-dangle.md
new file mode 100644
index 0000000000000000000000000000000000000000..bfb40d338bcfbb5f71b902bd5b6c8a2399946487
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/comma-dangle.md
@@ -0,0 +1,34 @@
+# Require or disallow trailing comma (`comma-dangle`)
+
+## Rule Details
+
+This rule extends the base [`eslint/comma-dangle`](https://eslint.org/docs/rules/comma-dangle) rule.
+It adds support for TypeScript syntax.
+
+See the [ESLint documentation](https://eslint.org/docs/rules/comma-dangle) for more details on the `comma-dangle` rule.
+
+## Rule Changes
+
+```cjson
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "comma-dangle": "off",
+  "@typescript-eslint/comma-dangle": ["error"]
+}
+```
+
+In addition to the options supported by the `comma-dangle` rule in ESLint core, the rule adds the following options:
+
+## Options
+
+This rule has a string option and an object option.
+
+- Object option:
+
+  - `"enums"` is for trailing comma in enum. (e.g. `enum Foo = {Bar,}`)
+  - `"generics"` is for trailing comma in generic. (e.g. `function foo<T,>() {}`)
+  - `"tuples"` is for trailing comma in tuple. (e.g. `type Foo = [string,]`)
+
+- [See the other options allowed](https://github.com/eslint/eslint/blob/master/docs/rules/comma-dangle.md#options)
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/comma-dangle.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/comma-spacing.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/comma-spacing.md
new file mode 100644
index 0000000000000000000000000000000000000000..0920180416ad70b1d48c99ad7734ae3c7afbd682
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/comma-spacing.md
@@ -0,0 +1,22 @@
+# Enforces consistent spacing before and after commas (`comma-spacing`)
+
+## Rule Details
+
+This rule extends the base [`eslint/comma-spacing`](https://eslint.org/docs/rules/comma-spacing) rule.
+It adds support for trailing comma in a types parameters list.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "comma-spacing": "off",
+  "@typescript-eslint/comma-spacing": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/comma-spacing` options](https://eslint.org/docs/rules/comma-spacing#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/comma-spacing.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-indexed-object-style.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-indexed-object-style.md
new file mode 100644
index 0000000000000000000000000000000000000000..c98997c5e0a6dcb147f420f72cf5951f72f868c6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-indexed-object-style.md
@@ -0,0 +1,67 @@
+# Enforce or disallow the use of the record type (`consistent-indexed-object-style`)
+
+TypeScript supports defining object show keys can be flexible using an index signature. TypeScript also has a builtin type named `Record` to create an empty object defining only an index signature. For example, the following types are equal:
+
+```ts
+interface Foo {
+  [key: string]: unknown;
+}
+
+type Foo = {
+  [key: string]: unknown;
+};
+
+type Foo = Record<string, unknown>;
+```
+
+## Options
+
+- `"record"`: Set to `"record"` to only allow the `Record` type. Set to `"index-signature"` to only allow index signatures. (Defaults to `"record"`)
+
+For example:
+
+```CJSON
+{
+    "@typescript-eslint/consistent-indexed-object-style": ["error", "index-signature"]
+}
+```
+
+## Rule details
+
+This rule enforces a consistent way to define records.
+
+Examples of **incorrect** code with `record` option.
+
+```ts
+interface Foo {
+  [key: string]: unknown;
+}
+
+type Foo = {
+  [key: string]: unknown;
+};
+```
+
+Examples of **correct** code with `record` option.
+
+```ts
+type Foo = Record<string, unknown>;
+```
+
+Examples of **incorrect** code with `index-signature` option.
+
+```ts
+type Foo = Record<string, unknown>;
+```
+
+Examples of **correct** code with `index-signature` option.
+
+```ts
+interface Foo {
+  [key: string]: unknown;
+}
+
+type Foo = {
+  [key: string]: unknown;
+};
+```
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-type-assertions.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-type-assertions.md
new file mode 100644
index 0000000000000000000000000000000000000000..899647636cb62b751a56192afc848a888083ad51
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-type-assertions.md
@@ -0,0 +1,94 @@
+# Enforces consistent usage of type assertions (`consistent-type-assertions`)
+
+## Rule Details
+
+This rule aims to standardize the use of type assertion style across the codebase.
+
+Type assertions are also commonly referred as "type casting" in TypeScript (even though it is technically slightly different to what is understood by type casting in other languages), so you can think of type assertions and type casting referring to the same thing. It is essentially you saying to the TypeScript compiler, "in this case, I know better than you!".
+
+In addition to ensuring that type assertions are written in a consistent way, this rule also helps make your codebase more type-safe.
+
+`const` assertions, [introduced in TypeScript 3.4](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#const-assertions), is always allowed by this rule. Examples of it include `let x = "hello" as const;` and `let x = <const>"hello";`.
+
+## Options
+
+```ts
+type Options =
+  | {
+      assertionStyle: 'as' | 'angle-bracket';
+      objectLiteralTypeAssertions: 'allow' | 'allow-as-parameter' | 'never';
+    }
+  | {
+      assertionStyle: 'never';
+    };
+
+const defaultOptions: Options = {
+  assertionStyle: 'as',
+  objectLiteralTypeAssertions: 'allow',
+};
+```
+
+### `assertionStyle`
+
+This option defines the expected assertion style. Valid values for `assertionStyle` are:
+
+- `as` will enforce that you always use `... as foo`.
+- `angle-bracket` will enforce that you always use `<foo>...`
+- `never` will enforce that you do not do any type assertions.
+
+Most codebases will want to enforce not using `angle-bracket` style because it conflicts with JSX syntax, and is confusing when paired with generic syntax.
+
+Some codebases like to go for an extra level of type safety, and ban assertions altogether via the `never` option.
+
+### `objectLiteralTypeAssertions`
+
+Always prefer `const x: T = { ... };` to `const x = { ... } as T;` (or similar with angle brackets). The type assertion in the latter case is either unnecessary or will probably hide an error.
+
+The compiler will warn for excess properties with this syntax, but not missing _required_ fields. For example: `const x: { foo: number } = {};` will fail to compile, but `const x = {} as { foo: number }` will succeed.
+
+The const assertion `const x = { foo: 1 } as const`, introduced in TypeScript 3.4, is considered beneficial and is ignored by this option.
+
+Assertions to `any` are also ignored by this option.
+
+Examples of **incorrect** code for `{ assertionStyle: 'as', objectLiteralTypeAssertions: 'never' }` (and for `{ assertionStyle: 'as', objectLiteralTypeAssertions: 'allow-as-parameter' }`)
+
+```ts
+const x = { ... } as T;
+
+function foo() {
+  return { ... } as T;
+}
+```
+
+Examples of **correct** code for `{ assertionStyle: 'as', objectLiteralTypeAssertions: 'never' }`.
+
+```ts
+const x: T = { ... };
+const y = { ... } as any;
+const z = { ... } as unknown;
+
+function foo(): T {
+  return { ... };
+}
+```
+
+Examples of **correct** code for `{ assertionStyle: 'as', objectLiteralTypeAssertions: 'allow-as-parameter' }`.
+
+```tsx
+const x: T = { ... };
+const y = { ... } as any;
+const z = { ... } as unknown;
+foo({ ... } as T);
+new Clazz({ ... } as T);
+function foo() { throw { bar: 5 } as Foo }
+const foo = <Foo props={{ ... } as Bar}/>;
+```
+
+## When Not To Use It
+
+If you do not want to enforce consistent type assertions.
+
+## Compatibility
+
+- TSLint: [no-angle-bracket-type-assertion](https://palantir.github.io/tslint/rules/no-angle-bracket-type-assertion/)
+- TSLint: [no-object-literal-type-assertion](https://palantir.github.io/tslint/rules/no-object-literal-type-assertion/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-type-definitions.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-type-definitions.md
new file mode 100644
index 0000000000000000000000000000000000000000..52afd3f9a81c338ac65766105ba882a5ff4b7188
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-type-definitions.md
@@ -0,0 +1,74 @@
+# Consistent with type definition either `interface` or `type` (`consistent-type-definitions`)
+
+There are two ways to define a type.
+
+```ts
+// type alias
+type T1 = {
+  a: string;
+  b: number;
+};
+
+// interface keyword
+interface T2 {
+  a: string;
+  b: number;
+}
+```
+
+## Options
+
+This rule accepts one string option:
+
+- `"interface"`: enforce using `interface`s for object type definitions.
+- `"type"`: enforce using `type`s for object type definitions.
+
+For example:
+
+```jsonc
+{
+  // Use type for object definitions
+  "@typescript-eslint/consistent-type-definitions": ["error", "type"]
+}
+```
+
+## Rule Details
+
+Examples of **incorrect** code with `interface` option.
+
+```ts
+type T = { x: number };
+```
+
+Examples of **correct** code with `interface` option.
+
+```ts
+type T = string;
+type Foo = string | {};
+
+interface T {
+  x: number;
+}
+```
+
+Examples of **incorrect** code with `type` option.
+
+```ts
+interface T {
+  x: number;
+}
+```
+
+Examples of **correct** code with `type` option.
+
+```ts
+type T = { x: number };
+```
+
+## When Not To Use It
+
+If you specifically want to use an interface or type literal for stylistic reasons, you can disable this rule.
+
+## Compatibility
+
+- TSLint: [interface-over-type-literal](https://palantir.github.io/tslint/rules/interface-over-type-literal/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-type-imports.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-type-imports.md
new file mode 100644
index 0000000000000000000000000000000000000000..a6d06aae8514a97cb9d34053bf635c03ae328b15
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-type-imports.md
@@ -0,0 +1,66 @@
+# Enforces consistent usage of type imports (`consistent-type-imports`)
+
+TypeScript 3.8 added support for type-only imports.
+Type-only imports allow you to specify that an import can only be used in a type location, allowing certain optimizations within compilers.
+
+## Rule Details
+
+This rule aims to standardize the use of type imports style across the codebase.
+
+## Options
+
+```ts
+type Options = {
+  prefer: 'type-imports' | 'no-type-imports';
+  disallowTypeAnnotations: boolean;
+};
+
+const defaultOptions: Options = {
+  prefer: 'type-imports',
+  disallowTypeAnnotations: true,
+};
+```
+
+### `prefer`
+
+This option defines the expected import kind for type-only imports. Valid values for `prefer` are:
+
+- `type-imports` will enforce that you always use `import type Foo from '...'`. It is default.
+- `no-type-imports` will enforce that you always use `import Foo from '...'`.
+
+Examples of **correct** code with `{prefer: 'type-imports'}`, and **incorrect** code with `{prefer: 'no-type-imports'}`.
+
+```ts
+import type { Foo } from 'Foo';
+import type Bar from 'Bar';
+type T = Foo;
+const x: Bar = 1;
+```
+
+Examples of **incorrect** code with `{prefer: 'type-imports'}`, and **correct** code with `{prefer: 'no-type-imports'}`.
+
+```ts
+import { Foo } from 'Foo';
+import Bar from 'Bar';
+type T = Foo;
+const x: Bar = 1;
+```
+
+### `disallowTypeAnnotations`
+
+If `true`, type imports in type annotations (`import()`) is not allowed.
+Default is `true`.
+
+Examples of **incorrect** code with `{disallowTypeAnnotations: true}`.
+
+```ts
+type T = import('Foo').Foo;
+const x: import('Bar') = 1;
+```
+
+## When Not To Use It
+
+- If you are not using TypeScript 3.8 (or greater), then you will not be able to use this rule, as type-only imports are not allowed.
+- Certain libraries use the non-inlined imports to infer information about the variables. For example, for dependency injection.  
+  type-only imports cannot be used with these libraries. See [#2559](https://github.com/typescript-eslint/typescript-eslint/issues/2559#issuecomment-692780580)
+- If you specifically want to use both import kinds for stylistic reasons, you can disable this rule.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/default-param-last.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/default-param-last.md
new file mode 100644
index 0000000000000000000000000000000000000000..c9c51df40a36db177a9f301dc01ab7ae2644bc68
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/default-param-last.md
@@ -0,0 +1,56 @@
+# Enforce default parameters to be last (`default-param-last`)
+
+## Rule Details
+
+This rule extends the base [`eslint/default-param-last`](https://eslint.org/docs/rules/default-param-last) rule.
+It adds support for optional parameters.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+/* eslint @typescript-eslint/default-param-last: ["error"] */
+
+function f(a = 0, b: number) {}
+function f(a: number, b = 0, c: number) {}
+function f(a: number, b?: number, c: number) {}
+class Foo {
+  constructor(public a = 10, private b: number) {}
+}
+class Foo {
+  constructor(public a?: number, private b: number) {}
+}
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+/* eslint @typescript-eslint/default-param-last: ["error"] */
+
+function f(a = 0) {}
+function f(a: number, b = 0) {}
+function f(a: number, b?: number) {}
+function f(a: number, b?: number, c = 0) {}
+function f(a: number, b = 0, c?: number) {}
+class Foo {
+  constructor(public a, private b = 0) {}
+}
+class Foo {
+  constructor(public a, private b?: number) {}
+}
+```
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "default-param-last": "off",
+  "@typescript-eslint/default-param-last": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/default-param-last` options](https://eslint.org/docs/rules/default-param-last#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/default-param-last.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/dot-notation.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/dot-notation.md
new file mode 100644
index 0000000000000000000000000000000000000000..56097090e2e06378cd347c0a0c928b7c1abaf144
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/dot-notation.md
@@ -0,0 +1,61 @@
+# enforce dot notation whenever possible (`dot-notation`)
+
+## Rule Details
+
+This rule extends the base [`eslint/dot-notation`](https://eslint.org/docs/rules/dot-notation) rule.
+It adds support for optionally ignoring computed `private` member access.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "dot-notation": "off",
+  "@typescript-eslint/dot-notation": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/dot-notation`](https://eslint.org/docs/rules/dot-notation#options) options.
+This rule adds the following options:
+
+```ts
+interface Options extends BaseDotNotationOptions {
+  allowPrivateClassPropertyAccess?: boolean;
+  allowProtectedClassPropertyAccess?: boolean;
+}
+const defaultOptions: Options = {
+  ...baseDotNotationDefaultOptions,
+  allowPrivateClassPropertyAccess: false,
+  allowProtectedClassPropertyAccess: false,
+};
+```
+
+### `allowPrivateClassPropertyAccess`
+
+Example of a correct code when `allowPrivateClassPropertyAccess` is set to `true`
+
+```ts
+class X {
+  private priv_prop = 123;
+}
+
+const x = new X();
+x['priv_prop'] = 123;
+```
+
+### `allowProtectedClassPropertyAccess`
+
+Example of a correct code when `allowProtectedClassPropertyAccess` is set to `true`
+
+```ts
+class X {
+  protected protected_prop = 123;
+}
+
+const x = new X();
+x['protected_prop'] = 123;
+```
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/dot-notation.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/explicit-function-return-type.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/explicit-function-return-type.md
new file mode 100644
index 0000000000000000000000000000000000000000..894a99617532455822f03285547ce83ce4e9c584
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/explicit-function-return-type.md
@@ -0,0 +1,248 @@
+# Require explicit return types on functions and class methods (`explicit-function-return-type`)
+
+Explicit types for function return values makes it clear to any calling code what type is returned.
+This ensures that the return value is assigned to a variable of the correct type; or in the case
+where there is no return value, that the calling code doesn't try to use the undefined value when it
+shouldn't.
+
+## Rule Details
+
+This rule aims to ensure that the values returned from functions are of the expected type.
+
+The following patterns are considered warnings:
+
+```ts
+// Should indicate that no value is returned (void)
+function test() {
+  return;
+}
+
+// Should indicate that a number is returned
+var fn = function () {
+  return 1;
+};
+
+// Should indicate that a string is returned
+var arrowFn = () => 'test';
+
+class Test {
+  // Should indicate that no value is returned (void)
+  method() {
+    return;
+  }
+}
+```
+
+The following patterns are not warnings:
+
+```ts
+// No return value should be expected (void)
+function test(): void {
+  return;
+}
+
+// A return value of type number
+var fn = function (): number {
+  return 1;
+};
+
+// A return value of type string
+var arrowFn = (): string => 'test';
+
+class Test {
+  // No return value should be expected (void)
+  method(): void {
+    return;
+  }
+}
+```
+
+## Options
+
+The rule accepts an options object with the following properties:
+
+```ts
+type Options = {
+  // if true, only functions which are part of a declaration will be checked
+  allowExpressions?: boolean;
+  // if true, type annotations are also allowed on the variable of a function expression rather than on the function directly
+  allowTypedFunctionExpressions?: boolean;
+  // if true, functions immediately returning another function expression will not be checked
+  allowHigherOrderFunctions?: boolean;
+  // if true, arrow functions immediately returning a `as const` value will not be checked
+  allowDirectConstAssertionInArrowFunctions?: boolean;
+  // if true, concise arrow functions that start with the void keyword will not be checked
+  allowConciseArrowFunctionExpressionsStartingWithVoid?: boolean;
+};
+
+const defaults = {
+  allowExpressions: false,
+  allowTypedFunctionExpressions: true,
+  allowHigherOrderFunctions: true,
+  allowDirectConstAssertionInArrowFunctions: true,
+  allowConciseArrowFunctionExpressionsStartingWithVoid: false,
+};
+```
+
+### Configuring in a mixed JS/TS codebase
+
+If you are working on a codebase within which you lint non-TypeScript code (i.e. `.js`/`.jsx`), you should ensure that you should use [ESLint `overrides`](https://eslint.org/docs/user-guide/configuring#disabling-rules-only-for-a-group-of-files) to only enable the rule on `.ts`/`.tsx` files. If you don't, then you will get unfixable lint errors reported within `.js`/`.jsx` files.
+
+```jsonc
+{
+  "rules": {
+    // disable the rule for all files
+    "@typescript-eslint/explicit-function-return-type": "off"
+  },
+  "overrides": [
+    {
+      // enable the rule specifically for TypeScript files
+      "files": ["*.ts", "*.tsx"],
+      "rules": {
+        "@typescript-eslint/explicit-function-return-type": ["error"]
+      }
+    }
+  ]
+}
+```
+
+### `allowExpressions`
+
+Examples of **incorrect** code for this rule with `{ allowExpressions: true }`:
+
+```ts
+function test() {}
+
+const fn = () => {};
+
+export default () => {};
+```
+
+Examples of **correct** code for this rule with `{ allowExpressions: true }`:
+
+```ts
+node.addEventListener('click', () => {});
+
+node.addEventListener('click', function () {});
+
+const foo = arr.map(i => i * i);
+```
+
+### `allowTypedFunctionExpressions`
+
+Examples of **incorrect** code for this rule with `{ allowTypedFunctionExpressions: true }`:
+
+```ts
+let arrowFn = () => 'test';
+
+let funcExpr = function () {
+  return 'test';
+};
+
+let objectProp = {
+  foo: () => 1,
+};
+```
+
+Examples of additional **correct** code for this rule with `{ allowTypedFunctionExpressions: true }`:
+
+```ts
+type FuncType = () => string;
+
+let arrowFn: FuncType = () => 'test';
+
+let funcExpr: FuncType = function() {
+  return 'test';
+};
+
+let asTyped = (() => '') as () => string;
+let castTyped = <() => string>(() => '');
+
+interface ObjectType {
+  foo(): number;
+}
+let objectProp: ObjectType = {
+  foo: () => 1,
+};
+let objectPropAs = {
+  foo: () => 1,
+} as ObjectType;
+let objectPropCast = <ObjectType>{
+  foo: () => 1,
+};
+
+declare functionWithArg(arg: () => number);
+functionWithArg(() => 1);
+
+declare functionWithObjectArg(arg: { method: () => number });
+functionWithObjectArg({
+  method() {
+    return 1;
+  },
+});
+```
+
+### `allowHigherOrderFunctions`
+
+Examples of **incorrect** code for this rule with `{ allowHigherOrderFunctions: true }`:
+
+```ts
+var arrowFn = () => () => {};
+
+function fn() {
+  return function () {};
+}
+```
+
+Examples of **correct** code for this rule with `{ allowHigherOrderFunctions: true }`:
+
+```ts
+var arrowFn = () => (): void => {};
+
+function fn() {
+  return function (): void {};
+}
+```
+
+### `allowDirectConstAssertionInArrowFunctions`
+
+Examples of **incorrect** code for this rule with `{ allowDirectConstAssertionInArrowFunctions: true }`:
+
+```ts
+const func = (value: number) => ({ type: 'X', value } as any);
+const func = (value: number) => ({ type: 'X', value } as Action);
+```
+
+Examples of **correct** code for this rule with `{ allowDirectConstAssertionInArrowFunctions: true }`:
+
+```ts
+const func = (value: number) => ({ foo: 'bar', value } as const);
+const func = () => x as const;
+```
+
+### `allowConciseArrowFunctionExpressionsStartingWithVoid`
+
+Examples of **incorrect** code for this rule with `{ allowConciseArrowFunctionExpressionsStartingWithVoid: true }`:
+
+```ts
+var join = (a: string, b: string) => `${a}${b}`;
+
+const log = (message: string) => {
+  console.log(message);
+};
+```
+
+Examples of **correct** code for this rule with `{ allowConciseArrowFunctionExpressionsStartingWithVoid: true }`:
+
+```ts
+var log = (message: string) => void console.log(message);
+```
+
+## When Not To Use It
+
+If you don't wish to prevent calling code from using function return values in unexpected ways, then
+you will not need this rule.
+
+## Further Reading
+
+- TypeScript [Functions](https://www.typescriptlang.org/docs/handbook/functions.html#function-types)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/explicit-member-accessibility.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/explicit-member-accessibility.md
new file mode 100644
index 0000000000000000000000000000000000000000..cfbb3154f9020da037a197b3b17723b91d34a6ea
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/explicit-member-accessibility.md
@@ -0,0 +1,348 @@
+# Require explicit accessibility modifiers on class properties and methods (`explicit-member-accessibility`)
+
+Leaving off accessibility modifier and making everything public can make
+your interface hard to use by others.
+If you make all internal pieces private or protected, your interface will
+be easier to use.
+
+## Rule Details
+
+This rule aims to make code more readable and explicit about who can use
+which properties.
+
+## Options
+
+```ts
+type AccessibilityLevel =
+  | 'explicit' // require an accessor (including public)
+  | 'no-public' // don't require public
+  | 'off'; // don't check
+
+type Options = {
+  accessibility?: AccessibilityLevel;
+  ignoredMethodNames?: string[];
+  overrides?: {
+    accessors?: AccessibilityLevel;
+    constructors?: AccessibilityLevel;
+    methods?: AccessibilityLevel;
+    properties?: AccessibilityLevel;
+    parameterProperties?: AccessibilityLevel;
+  };
+};
+
+const defaultOptions: Options = {
+  accessibility: 'explicit',
+};
+```
+
+### Configuring in a mixed JS/TS codebase
+
+If you are working on a codebase within which you lint non-TypeScript code (i.e. `.js`/`.jsx`), you should ensure that you should use [ESLint `overrides`](https://eslint.org/docs/user-guide/configuring#disabling-rules-only-for-a-group-of-files) to only enable the rule on `.ts`/`.tsx` files. If you don't, then you will get unfixable lint errors reported within `.js`/`.jsx` files.
+
+```jsonc
+{
+  "rules": {
+    // disable the rule for all files
+    "@typescript-eslint/explicit-member-accessibility": "off"
+  },
+  "overrides": [
+    {
+      // enable the rule specifically for TypeScript files
+      "files": ["*.ts", "*.tsx"],
+      "rules": {
+        "@typescript-eslint/explicit-member-accessibility": ["error"]
+      }
+    }
+  ]
+}
+```
+
+### `accessibility`
+
+This rule in its default state requires no configuration and will enforce that every class member has an accessibility modifier. If you would like to allow for some implicit public members then you have the following options:
+
+```ts
+{
+  accessibility: 'explicit',
+  overrides: {
+    accessors: 'explicit',
+    constructors: 'no-public',
+    methods: 'explicit',
+    properties: 'off',
+    parameterProperties: 'explicit'
+  }
+}
+```
+
+Note the above is an example of a possible configuration you could use - it is not the default configuration.
+
+The following patterns are considered incorrect code if no options are provided:
+
+```ts
+class Animal {
+  constructor(name) {
+    // No accessibility modifier
+    this.animalName = name;
+  }
+  animalName: string; // No accessibility modifier
+  get name(): string {
+    // No accessibility modifier
+    return this.animalName;
+  }
+  set name(value: string) {
+    // No accessibility modifier
+    this.animalName = value;
+  }
+  walk() {
+    // method
+  }
+}
+```
+
+The following patterns are considered correct with the default options `{ accessibility: 'explicit' }`:
+
+```ts
+class Animal {
+  public constructor(public breed, name) {
+    // Parameter property and constructor
+    this.animalName = name;
+  }
+  private animalName: string; // Property
+  get name(): string {
+    // get accessor
+    return this.animalName;
+  }
+  set name(value: string) {
+    // set accessor
+    this.animalName = value;
+  }
+  public walk() {
+    // method
+  }
+}
+```
+
+The following patterns are considered incorrect with the accessibility set to **no-public** `[{ accessibility: 'no-public' }]`:
+
+```ts
+class Animal {
+  public constructor(public breed, name) {
+    // Parameter property and constructor
+    this.animalName = name;
+  }
+  public animalName: string; // Property
+  public get name(): string {
+    // get accessor
+    return this.animalName;
+  }
+  public set name(value: string) {
+    // set accessor
+    this.animalName = value;
+  }
+  public walk() {
+    // method
+  }
+}
+```
+
+The following patterns are considered correct with the accessibility set to **no-public** `[{ accessibility: 'no-public' }]`:
+
+```ts
+class Animal {
+  constructor(protected breed, name) {
+    // Parameter property and constructor
+    this.name = name;
+  }
+  private animalName: string; // Property
+  get name(): string {
+    // get accessor
+    return this.animalName;
+  }
+  private set name(value: string) {
+    // set accessor
+    this.animalName = value;
+  }
+  protected walk() {
+    // method
+  }
+}
+```
+
+### Overrides
+
+There are three ways in which an override can be used.
+
+- To disallow the use of public on a given member.
+- To enforce explicit member accessibility when the root has allowed implicit public accessibility
+- To disable any checks on given member type
+
+#### Disallow the use of public on a given member
+
+e.g. `[ { overrides: { constructors: 'no-public' } } ]`
+
+The following patterns are considered incorrect with the example override
+
+```ts
+class Animal {
+  public constructor(protected animalName) {}
+  public get name() {
+    return this.animalName;
+  }
+}
+```
+
+The following patterns are considered correct with the example override
+
+```ts
+class Animal {
+  constructor(protected animalName) {}
+  public get name() {
+    return this.animalName;
+  }
+}
+```
+
+#### Require explicit accessibility for a given member
+
+e.g. `[ { accessibility: 'no-public', overrides: { properties: 'explicit' } } ]`
+
+The following patterns are considered incorrect with the example override
+
+```ts
+class Animal {
+  constructor(protected animalName) {}
+  get name() {
+    return this.animalName;
+  }
+  protected set name(value: string) {
+    this.animalName = value;
+  }
+  legs: number;
+  private hasFleas: boolean;
+}
+```
+
+The following patterns are considered correct with the example override
+
+```ts
+class Animal {
+  constructor(protected animalName) {}
+  get name() {
+    return this.animalName;
+  }
+  protected set name(value: string) {
+    this.animalName = value;
+  }
+  public legs: number;
+  private hasFleas: boolean;
+}
+```
+
+e.g. `[ { accessibility: 'off', overrides: { parameterProperties: 'explicit' } } ]`
+
+The following code is considered incorrect with the example override
+
+```ts
+class Animal {
+  constructor(readonly animalName: string) {}
+}
+```
+
+The following code patterns are considered correct with the example override
+
+```ts
+class Animal {
+  constructor(public readonly animalName: string) {}
+}
+
+class Animal {
+  constructor(public animalName: string) {}
+}
+
+class Animal {
+  constructor(animalName: string) {}
+}
+```
+
+e.g. `[ { accessibility: 'off', overrides: { parameterProperties: 'no-public' } } ]`
+
+The following code is considered incorrect with the example override
+
+```ts
+class Animal {
+  constructor(public readonly animalName: string) {}
+}
+```
+
+The following code is considered correct with the example override
+
+```ts
+class Animal {
+  constructor(public animalName: string) {}
+}
+```
+
+#### Disable any checks on given member type
+
+e.g. `[{ overrides: { accessors : 'off' } } ]`
+
+As no checks on the overridden member type are performed all permutations of visibility are permitted for that member type
+
+The follow pattern is considered incorrect for the given configuration
+
+```ts
+class Animal {
+  constructor(protected animalName) {}
+  public get name() {
+    return this.animalName;
+  }
+  get legs() {
+    return this.legCount;
+  }
+}
+```
+
+The following patterns are considered correct with the example override
+
+```ts
+class Animal {
+  public constructor(protected animalName) {}
+  public get name() {
+    return this.animalName;
+  }
+  get legs() {
+    return this.legCount;
+  }
+}
+```
+
+### Except specific methods
+
+If you want to ignore some specific methods, you can do it by specifying method names. Note that this option does not care for the context, and will ignore every method with these names, which could lead to it missing some cases. You should use this sparingly.
+e.g. `[ { ignoredMethodNames: ['specificMethod', 'whateverMethod'] } ]`
+
+```ts
+class Animal {
+  get specificMethod() {
+    console.log('No error because you specified this method on option');
+  }
+  get whateverMethod() {
+    console.log('No error because you specified this method on option');
+  }
+  public get otherMethod() {
+    console.log('This method comply with this rule');
+  }
+}
+```
+
+## When Not To Use It
+
+If you think defaulting to public is a good default, then you should consider using the `no-public` setting. If you want to mix implicit and explicit public members then disable this rule.
+
+## Further Reading
+
+- TypeScript [Accessibility Modifiers](https://www.typescriptlang.org/docs/handbook/classes.html#public-private-and-protected-modifiers)
+
+## Compatibility
+
+- TSLint: [member-access](http://palantir.github.io/tslint/rules/member-access/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/explicit-module-boundary-types.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/explicit-module-boundary-types.md
new file mode 100644
index 0000000000000000000000000000000000000000..f33a8d5b79d0db2a8ff688ba82a7f215d9984e10
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/explicit-module-boundary-types.md
@@ -0,0 +1,274 @@
+# Require explicit return and argument types on exported functions' and classes' public class methods (`explicit-module-boundary-types`)
+
+Explicit types for function return values and arguments makes it clear to any calling code what is the module boundary's input and output.
+
+Consider using this rule in place of [`no-untyped-public-signature`](./no-untyped-public-signature.md) which has been deprecated.
+
+## Rule Details
+
+This rule aims to ensure that the values returned from a module are of the expected type.
+
+The following patterns are considered warnings:
+
+```ts
+// Should indicate that no value is returned (void)
+export function test() {
+  return;
+}
+
+// Should indicate that a number is returned
+export default function () {
+  return 1;
+}
+
+// Should indicate that a string is returned
+export var arrowFn = () => 'test';
+
+// All arguments should be typed
+export var arrowFn = (arg): string => `test ${arg}`;
+export var arrowFn = (arg: any): string => `test ${arg}`;
+
+export class Test {
+  // Should indicate that no value is returned (void)
+  method() {
+    return;
+  }
+}
+```
+
+The following patterns are not warnings:
+
+```ts
+// Function is not exported
+function test() {
+  return;
+}
+
+// A return value of type number
+export var fn = function (): number {
+  return 1;
+};
+
+// A return value of type string
+export var arrowFn = (arg: string): string => `test ${arg}`;
+
+// All arguments should be typed
+export var arrowFn = (arg: string): string => `test ${arg}`;
+export var arrowFn = (arg: unknown): string => `test ${arg}`;
+
+// Class is not exported
+class Test {
+  method() {
+    return;
+  }
+}
+```
+
+## Options
+
+The rule accepts an options object with the following properties:
+
+```ts
+type Options = {
+  /**
+   * If true, the rule will not report for arguments that are explicitly typed as `any`
+   */
+  allowArgumentsExplicitlyTypedAsAny?: boolean;
+  /**
+   * If true, body-less arrow functions that return an `as const` type assertion will not
+   * require an explicit return value annotation.
+   * You must still type the parameters of the function.
+   */
+  allowDirectConstAssertionInArrowFunctions?: boolean;
+  /**
+   * An array of function/method names that will not have their arguments or their return values checked.
+   */
+  allowedNames?: string[];
+  /**
+   * If true, functions immediately returning another function expression will not
+   * require an explicit return value annotation.
+   * You must still type the parameters of the function.
+   */
+  allowHigherOrderFunctions?: boolean;
+  /**
+   * If true, type annotations are also allowed on the variable of a function expression
+   * rather than on the function arguments/return value directly.
+   */
+  allowTypedFunctionExpressions?: boolean;
+};
+
+const defaults = {
+  allowArgumentsExplicitlyTypedAsAny: false,
+  allowDirectConstAssertionInArrowFunctions: true,
+  allowedNames: [],
+  allowHigherOrderFunctions: true,
+  allowTypedFunctionExpressions: true,
+};
+```
+
+### Configuring in a mixed JS/TS codebase
+
+If you are working on a codebase within which you lint non-TypeScript code (i.e. `.js`/`.jsx`), you should ensure that you should use [ESLint `overrides`](https://eslint.org/docs/user-guide/configuring#disabling-rules-only-for-a-group-of-files) to only enable the rule on `.ts`/`.tsx` files. If you don't, then you will get unfixable lint errors reported within `.js`/`.jsx` files.
+
+```jsonc
+{
+  "rules": {
+    // disable the rule for all files
+    "@typescript-eslint/explicit-module-boundary-types": "off"
+  },
+  "overrides": [
+    {
+      // enable the rule specifically for TypeScript files
+      "files": ["*.ts", "*.tsx"],
+      "rules": {
+        "@typescript-eslint/explicit-module-boundary-types": ["error"]
+      }
+    }
+  ]
+}
+```
+
+### `allowArgumentsExplicitlyTypedAsAny`
+
+Examples of **incorrect** code for this rule with `{ allowArgumentsExplicitlyTypedAsAny: true }`:
+
+```ts
+export const func = (value: any): void => ({ type: 'X', value });
+export function foo(value: any): void {}
+```
+
+Examples of **correct** code for this rule with `{ allowArgumentsExplicitlyTypedAsAny: true }`:
+
+```ts
+export const func = (value: number): void => ({ type: 'X', value });
+export function foo(value: number): void {}
+```
+
+### `allowDirectConstAssertionInArrowFunctions`
+
+Examples of **incorrect** code for this rule with `{ allowDirectConstAssertionInArrowFunctions: true }`:
+
+```ts
+export const func = (value: number) => ({ type: 'X', value });
+export const foo = () => {
+  return {
+    bar: true,
+  } as const;
+};
+export const bar = () => 1;
+export const baz = arg => arg as const;
+```
+
+Examples of **correct** code for this rule with `{ allowDirectConstAssertionInArrowFunctions: true }`:
+
+```ts
+export const func = (value: number) => ({ type: 'X', value } as const);
+export const foo = () =>
+  ({
+    bar: true,
+  } as const);
+export const bar = () => 1 as const;
+export const baz = (arg: string) => arg as const;
+```
+
+### `allowedNames`
+
+You may pass function/method names you would like this rule to ignore, like so:
+
+```json
+{
+  "@typescript-eslint/explicit-module-boundary-types": [
+    "error",
+    {
+      "allowedNames": ["ignoredFunctionName", "ignoredMethodName"]
+    }
+  ]
+}
+```
+
+### `allowHigherOrderFunctions`
+
+Examples of **incorrect** code for this rule with `{ allowHigherOrderFunctions: true }`:
+
+```ts
+export var arrowFn = () => () => {};
+
+export function fn() {
+  return function () {};
+}
+
+export function foo(outer) {
+  return function (inner): void {};
+}
+```
+
+Examples of **correct** code for this rule with `{ allowHigherOrderFunctions: true }`:
+
+```ts
+export var arrowFn = () => (): void => {};
+
+export function fn() {
+  return function (): void {};
+}
+
+export function foo(outer: string) {
+  return function (inner: string): void {};
+}
+```
+
+### `allowTypedFunctionExpressions`
+
+Examples of **incorrect** code for this rule with `{ allowTypedFunctionExpressions: true }`:
+
+```ts
+export let arrowFn = () => 'test';
+
+export let funcExpr = function () {
+  return 'test';
+};
+
+export let objectProp = {
+  foo: () => 1,
+};
+
+export const foo = bar => {};
+```
+
+Examples of additional **correct** code for this rule with `{ allowTypedFunctionExpressions: true }`:
+
+```ts
+type FuncType = () => string;
+
+export let arrowFn: FuncType = () => 'test';
+
+export let funcExpr: FuncType = function () {
+  return 'test';
+};
+
+export let asTyped = (() => '') as () => string;
+export let castTyped = <() => string>(() => '');
+
+interface ObjectType {
+  foo(): number;
+}
+export let objectProp: ObjectType = {
+  foo: () => 1,
+};
+export let objectPropAs = {
+  foo: () => 1,
+} as ObjectType;
+export let objectPropCast = <ObjectType>{
+  foo: () => 1,
+};
+
+type FooType = (bar: string) => void;
+export const foo: FooType = bar => {};
+```
+
+## When Not To Use It
+
+If you wish to make sure all functions have explicit return types, as opposed to only the module boundaries, you can use [explicit-function-return-type](./explicit-function-return-type.md)
+
+## Further Reading
+
+- TypeScript [Functions](https://www.typescriptlang.org/docs/handbook/functions.html#function-types)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/func-call-spacing.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/func-call-spacing.md
new file mode 100644
index 0000000000000000000000000000000000000000..8aa9e7e0cbff29c1602f6e4e2187d4180f06a00e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/func-call-spacing.md
@@ -0,0 +1,22 @@
+# Require or disallow spacing between function identifiers and their invocations (`func-call-spacing`)
+
+## Rule Details
+
+This rule extends the base [`eslint/func-call-spacing`](https://eslint.org/docs/rules/func-call-spacing) rule.
+It adds support for generic type parameters on function calls.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "func-call-spacing": "off",
+  "@typescript-eslint/func-call-spacing": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/func-call-spacing` options](https://eslint.org/docs/rules/func-call-spacing#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/func-call-spacing.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/indent.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/indent.md
new file mode 100644
index 0000000000000000000000000000000000000000..023c774657ae11e7a7acd98524adee921aa3266f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/indent.md
@@ -0,0 +1,24 @@
+# Enforce consistent indentation (`indent`)
+
+## PLEASE READ THIS ISSUE BEFORE USING THIS RULE [#1824](https://github.com/typescript-eslint/typescript-eslint/issues/1824)
+
+## Rule Details
+
+This rule extends the base [`eslint/indent`](https://eslint.org/docs/rules/indent) rule.
+It adds support for TypeScript nodes.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "indent": "off",
+  "@typescript-eslint/indent": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/indent` options](https://eslint.org/docs/rules/indent#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/indent.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/init-declarations.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/init-declarations.md
new file mode 100644
index 0000000000000000000000000000000000000000..f83c5bd9c3f4d40f8a948bf53c69639807731908
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/init-declarations.md
@@ -0,0 +1,22 @@
+# require or disallow initialization in variable declarations (`init-declarations`)
+
+## Rule Details
+
+This rule extends the base [`eslint/init-declarations`](https://eslint.org/docs/rules/init-declarations) rule.
+It adds support for TypeScript's `declare` variables.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "init-declarations": "off",
+  "@typescript-eslint/init-declarations": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/init-declarations` options](https://eslint.org/docs/rules/init-declarations#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/init-declarations.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/keyword-spacing.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/keyword-spacing.md
new file mode 100644
index 0000000000000000000000000000000000000000..3178542d2d68944fcbdefe95515e94b90c0ee8ea
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/keyword-spacing.md
@@ -0,0 +1,22 @@
+# Enforce consistent spacing before and after keywords (`keyword-spacing`)
+
+## Rule Details
+
+This rule extends the base [`eslint/keyword-spacing`](https://eslint.org/docs/rules/keyword-spacing) rule.
+This version adds support for generic type parameters on function calls.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "keyword-spacing": "off",
+  "@typescript-eslint/keyword-spacing": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/keyword-spacing` options](https://eslint.org/docs/rules/keyword-spacing#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/keyword-spacing.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/lines-between-class-members.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/lines-between-class-members.md
new file mode 100644
index 0000000000000000000000000000000000000000..e2692bb18a0c7f5f8db256731c7bb20ee6064e29
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/lines-between-class-members.md
@@ -0,0 +1,73 @@
+# Require or disallow an empty line between class members (`lines-between-class-members`)
+
+This rule improves readability by enforcing lines between class members. It will not check empty lines before the first member and after the last member. This rule require or disallow an empty line between class members.
+
+## Rule Details
+
+This rule extends the base [`eslint/lines-between-class-members`](https://eslint.org/docs/rules/lines-between-class-members) rule.
+It adds support for ignoring overload methods in a class.
+
+See the [ESLint documentation](https://eslint.org/docs/rules/lines-between-class-members) for more details on the `lines-between-class-members` rule.
+
+## Rule Changes
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "lines-between-class-members": "off",
+  "@typescript-eslint/lines-between-class-members": ["error"]
+}
+```
+
+In addition to the options supported by the `lines-between-class-members` rule in ESLint core, the rule adds the following options:
+
+## Options
+
+This rule has a string option and an object option.
+
+- Object option:
+
+  - `"exceptAfterOverload": true` (default) - Skip checking empty lines after overload class members
+  - `"exceptAfterOverload": false` - **do not** skip checking empty lines after overload class members
+
+- [See the other options allowed](https://github.com/eslint/eslint/blob/master/docs/rules/lines-between-class-members.md#options)
+
+### `exceptAfterOverload: true`
+
+Examples of **correct** code for the `{ "exceptAfterOverload": true }` option:
+
+```ts
+/*eslint @typescript-eslint/lines-between-class-members: ["error", "always", { "exceptAfterOverload": true }]*/
+
+class foo {
+  bar(a: string): void;
+  bar(a: string, b: string): void;
+  bar(a: string, b: string) {}
+
+  baz() {}
+
+  qux() {}
+}
+```
+
+### `exceptAfterOverload: false`
+
+Examples of **correct** code for the `{ "exceptAfterOverload": false }` option:
+
+```ts
+/*eslint @typescript-eslint/lines-between-class-members: ["error", "always", { "exceptAfterOverload": false }]*/
+
+class foo {
+  bar(a: string): void;
+
+  bar(a: string, b: string): void;
+
+  bar(a: string, b: string) {}
+
+  baz() {}
+
+  qux() {}
+}
+```
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/lines-between-class-members.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/member-delimiter-style.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/member-delimiter-style.md
new file mode 100644
index 0000000000000000000000000000000000000000..ed1b09577563cec683e6f504f81addd0ee40a66b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/member-delimiter-style.md
@@ -0,0 +1,194 @@
+# Require a specific member delimiter style for interfaces and type literals (`member-delimiter-style`)
+
+Enforces a consistent member delimiter style in interfaces and type literals. There are three member delimiter styles primarily used in TypeScript:
+
+- Semicolon style (default, preferred in TypeScript).
+
+<!-- prettier-ignore -->
+```ts
+interface Foo {
+    name: string;
+    greet(): void;
+}
+
+type Bar = {
+    name: string;
+    greet(): void;
+}
+```
+
+- Comma style (JSON style).
+
+<!-- prettier-ignore -->
+```ts
+interface Foo {
+    name: string,
+    greet(): void,
+}
+
+type Bar = {
+    name: string,
+    greet(): void,
+}
+```
+
+- Line break (none) style.
+
+<!-- prettier-ignore -->
+```ts
+interface Foo {
+    name: string
+    greet(): void
+}
+
+type Bar = {
+    name: string
+    greet(): void
+}
+```
+
+The rule also enforces the presence (or absence) of the delimiter in the last member of the interface and/or type literal.
+Finally, this rule can enforce separate delimiter syntax for single line declarations.
+
+## Rule Details
+
+This rule aims to standardize the way interface and type literal members are delimited.
+
+## Options
+
+```ts
+interface BaseConfig {
+  multiline?: {
+    delimiter?: 'none' | 'semi' | 'comma';
+    requireLast?: boolean;
+  };
+  singleline?: {
+    delimiter?: 'semi' | 'comma';
+    requireLast?: boolean;
+  };
+}
+type Config = BaseConfig & {
+  overrides?: {
+    interface?: BaseConfig;
+    typeLiteral?: BaseConfig;
+  };
+};
+```
+
+Default config:
+
+```JSON
+{
+    "multiline": {
+        "delimiter": "semi",
+        "requireLast": true
+    },
+    "singleline": {
+        "delimiter": "semi",
+        "requireLast": false
+    }
+}
+```
+
+`multiline` config only applies to multiline `interface`/`type` definitions.
+`singleline` config only applies to single line `interface`/`type` definitions.
+The two configs are entirely separate, and do not effect one another.
+
+### `delimiter`
+
+Accepts three values (or two for `singleline`):
+
+- `comma` - each member should be delimited with a comma (`,`).
+- `semi` - each member should be delimited with a semicolon (`;`).
+- `none` - each member should be delimited with nothing.
+  - NOTE - this is not an option for `singleline` because having no delimiter between members on a single line is a syntax error in TS.
+
+### `requireLast`
+
+Determines whether or not the last member in the `interface`/`type` should have a delimiter:
+
+- `true` - the last member **_must_** have a delimiter.
+- `false` - the last member **_must not_** have a delimiter.
+
+### `overrides`
+
+Allows you to specify options specifically for either `interface`s or `type` definitions / inline `type`s.
+
+For example, to require commas for `type`s, and semicolons for multiline `interface`s:
+
+```JSON
+{
+    "multiline": {
+        "delimiter": "comma",
+        "requireLast": true
+    },
+    "singleline": {
+        "delimiter": "comma",
+        "requireLast": true
+    },
+    "overrides": {
+        "interface": {
+            "multiline": {
+                "delimiter": "semi",
+                "requireLast": true
+            }
+        }
+    }
+}
+```
+
+## Examples
+
+Examples of **incorrect** code for this rule with the default config:
+
+<!-- prettier-ignore -->
+```ts
+// missing semicolon delimiter
+interface Foo {
+    name: string
+    greet(): string
+}
+
+// using incorrect delimiter
+interface Bar {
+    name: string,
+    greet(): string,
+}
+
+// missing last member delimiter
+interface Baz {
+    name: string;
+    greet(): string
+}
+
+// incorrect delimiter
+type FooBar = { name: string, greet(): string }
+
+// last member should not have delimiter
+type FooBar = { name: string; greet(): string; }
+```
+
+Examples of **correct** code for this rule with the default config:
+
+<!-- prettier-ignore -->
+```ts
+interface Foo {
+    name: string;
+    greet(): string;
+}
+
+interface Foo { name: string }
+
+type Bar = {
+    name: string;
+    greet(): string;
+}
+
+type Bar = { name: string }
+
+type FooBar = { name: string; greet(): string }
+```
+
+## When Not To Use It
+
+If you don't care about enforcing a consistent member delimiter in interfaces and type literals, then you will not need this rule.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/member-ordering.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/member-ordering.md
new file mode 100644
index 0000000000000000000000000000000000000000..eda1c573c8e94f085618f11b33bc6b4d30ac081b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/member-ordering.md
@@ -0,0 +1,867 @@
+# Require a consistent member declaration order (`member-ordering`)
+
+A consistent ordering of fields, methods and constructors can make interfaces, type literals, classes and class expressions easier to read, navigate and edit.
+
+## Rule Details
+
+This rule aims to standardize the way class declarations, class expressions, interfaces and type literals are structured and ordered.
+
+### Grouping and sorting member groups
+
+It allows to group members by their type (e.g. `public-static-field`, `protected-static-field`, `private-static-field`, `public-instance-field`, ...) and enforce a certain order for these groups. By default, their order is the same inside `classes`, `classExpressions`, `interfaces` and `typeLiterals` (note: not all member types apply to `interfaces` and `typeLiterals`). It is possible to define the order for any of those individually or to change the default order for all of them by setting the `default` option.
+
+### Sorting members
+
+Besides grouping the members and sorting their groups, this rule also allows to sort the members themselves (e.g. `a`, `b`, `c`, ...). You have 2 options: Sort all of them while ignoring their type or sort them while respecting their types (e.g. sort all fields in an interface alphabetically).
+
+## Options
+
+These options allow to specify how to group the members and sort their groups.
+
+- Sort groups, don't enforce member order: Use `memberTypes`
+- Sort members, don't enforce group order: Use `order`
+- Sort members within groups: Use `memberTypes` and `order`
+
+```ts
+type TypeOptions<T> =
+  | {
+    memberTypes: Array<T> | 'never',
+    order?: 'alphabetically' | 'as-written',
+  }
+  | {
+    order: 'alphabetically',
+  };
+
+{
+  default?: TypeOptions<MemberTypes>,
+
+  classes?: TypeOptions<MemberTypes>,
+  classExpressions?: TypeOptions<MemberTypes>,
+
+  interfaces?: TypeOptions<'signature' | 'field' | 'method' | 'constructor'>,
+  typeLiterals?: TypeOptions<'signature' | 'field' | 'method' | 'constructor'>,
+}
+```
+
+See below for the possible definitions of `MemberType`.
+
+### Deprecated syntax
+
+Note: There is a deprecated syntax to specify the member types as an array.
+
+### Member types (granular form)
+
+There are multiple ways to specify the member types. The most explicit and granular form is the following:
+
+```jsonc
+[
+  // Index signature
+  "signature",
+
+  // Fields
+  "public-static-field",
+  "protected-static-field",
+  "private-static-field",
+  "public-decorated-field",
+  "protected-decorated-field",
+  "private-decorated-field",
+  "public-instance-field",
+  "protected-instance-field",
+  "private-instance-field",
+  "public-abstract-field",
+  "protected-abstract-field",
+  "private-abstract-field",
+
+  // Constructors
+  "public-constructor",
+  "protected-constructor",
+  "private-constructor",
+
+  // Methods
+  "public-static-method",
+  "protected-static-method",
+  "private-static-method",
+  "public-decorated-method",
+  "protected-decorated-method",
+  "private-decorated-method",
+  "public-instance-method",
+  "protected-instance-method",
+  "private-instance-method",
+  "public-abstract-method",
+  "protected-abstract-method",
+  "private-abstract-method"
+]
+```
+
+Note: If you only specify some of the possible types, the non-specified ones can have any particular order. This means that they can be placed before, within or after the specified types and the linter won't complain about it.
+
+### Member group types (with accessibility, ignoring scope)
+
+It is also possible to group member types by their accessibility (`static`, `instance`, `abstract`), ignoring their scope.
+
+```jsonc
+[
+  // Index signature
+  // No accessibility for index signature. See above.
+
+  // Fields
+  "public-field", // = ["public-static-field", "public-instance-field"]
+  "protected-field", // = ["protected-static-field", "protected-instance-field"]
+  "private-field", // = ["private-static-field", "private-instance-field"]
+
+  // Constructors
+  // Only the accessibility of constructors is configurable. See below.
+
+  // Methods
+  "public-method", // = ["public-static-method", "public-instance-method"]
+  "protected-method", // = ["protected-static-method", "protected-instance-method"]
+  "private-method" // = ["private-static-method", "private-instance-method"]
+]
+```
+
+### Member group types (with accessibility and a decorator)
+
+It is also possible to group methods or fields with a decorator separately, optionally specifying
+their accessibility.
+
+```jsonc
+[
+  // Index signature
+  // No decorators for index signature.
+
+  // Fields
+  "public-decorated-field",
+  "protected-decorated-field",
+  "private-decorated-field",
+
+  "decorated-field", // = ["public-decorated-field", "protected-decorated-field", "private-decorated-field"]
+
+  // Constructors
+  // There are no decorators for constructors.
+
+  "public-decorated-method",
+  "protected-decorated-method",
+  "private-decorated-method",
+
+  "decorated-method" // = ["public-decorated-method", "protected-decorated-method", "private-decorated-method"]
+]
+```
+
+### Member group types (with scope, ignoring accessibility)
+
+Another option is to group the member types by their scope (`public`, `protected`, `private`), ignoring their accessibility.
+
+```jsonc
+[
+  // Index signature
+  // No scope for index signature. See above.
+
+  // Fields
+  "static-field", // = ["public-static-field", "protected-static-field", "private-static-field"]
+  "instance-field", // = ["public-instance-field", "protected-instance-field", "private-instance-field"]
+  "abstract-field", // = ["public-abstract-field", "protected-abstract-field", "private-abstract-field"]
+
+  // Constructors
+  "constructor", // = ["public-constructor", "protected-constructor", "private-constructor"]
+
+  // Methods
+  "static-method", // = ["public-static-method", "protected-static-method", "private-static-method"]
+  "instance-method", // = ["public-instance-method", "protected-instance-method", "private-instance-method"]
+  "abstract-method" // = ["public-abstract-method", "protected-abstract-method", "private-abstract-method"]
+]
+```
+
+### Member group types (with scope and accessibility)
+
+The third grouping option is to ignore both scope and accessibility.
+
+```jsonc
+[
+  // Index signature
+  // No grouping for index signature. See above.
+
+  // Fields
+  "field", // = ["public-static-field", "protected-static-field", "private-static-field", "public-instance-field", "protected-instance-field", "private-instance-field",
+  //              "public-abstract-field", "protected-abstract-field", private-abstract-field"]
+
+  // Constructors
+  // Only the accessibility of constructors is configurable. See above.
+
+  // Methods
+  "method" // = ["public-static-method", "protected-static-method", "private-static-method", "public-instance-method", "protected-instance-method", "private-instance-method",
+  //                "public-abstract-method", "protected-abstract-method", "private-abstract-method"]
+]
+```
+
+### Default configuration
+
+The default configuration looks as follows:
+
+```jsonc
+{
+  "default": [
+    // Index signature
+    "signature",
+
+    // Fields
+    "public-static-field",
+    "protected-static-field",
+    "private-static-field",
+
+    "public-decorated-field",
+    "protected-decorated-field",
+    "private-decorated-field",
+
+    "public-instance-field",
+    "protected-instance-field",
+    "private-instance-field",
+
+    "public-abstract-field",
+    "protected-abstract-field",
+    "private-abstract-field",
+
+    "public-field",
+    "protected-field",
+    "private-field",
+
+    "static-field",
+    "instance-field",
+    "abstract-field",
+
+    "decorated-field",
+
+    "field",
+
+    // Constructors
+    "public-constructor",
+    "protected-constructor",
+    "private-constructor",
+
+    "constructor",
+
+    // Methods
+    "public-static-method",
+    "protected-static-method",
+    "private-static-method",
+
+    "public-decorated-method",
+    "protected-decorated-method",
+    "private-decorated-method",
+
+    "public-instance-method",
+    "protected-instance-method",
+    "private-instance-method",
+
+    "public-abstract-method",
+    "protected-abstract-method",
+    "private-abstract-method",
+
+    "public-method",
+    "protected-method",
+    "private-method",
+
+    "static-method",
+    "instance-method",
+    "abstract-method",
+
+    "decorated-method",
+
+    "method"
+  ]
+}
+```
+
+Note: The default configuration contains member group types which contain other member types (see above). This is intentional to provide better error messages.
+
+Note: By default, the members are not sorted. If you want to sort them alphabetically, you have to provide a custom configuration.
+
+## Examples
+
+### Custom `default` configuration
+
+Note: The `default` options are overwritten in these examples.
+
+#### Configuration: `{ "default": ["signature", "method", "constructor", "field"] }`
+
+##### Incorrect examples
+
+```ts
+interface Foo {
+  B: string; // -> field
+
+  new (); // -> constructor
+
+  A(): void; // -> method
+
+  [Z: string]: any; // -> signature
+}
+```
+
+Note: Wrong order.
+
+```ts
+type Foo = {
+  B: string; // -> field
+
+  // no constructor
+
+  A(): void; // -> method
+
+  // no signature
+};
+```
+
+Note: Not all specified member types have to exist.
+
+```ts
+class Foo {
+  private C: string; // -> field
+  public D: string; // -> field
+  protected static E: string; // -> field
+
+  constructor() {} // -> constructor
+
+  public static A(): void {} // -> method
+  public B(): void {} // -> method
+
+  [Z: string]: any; // -> signature
+}
+```
+
+Note: Accessibility or scope are ignored with this configuration.
+
+```ts
+const Foo = class {
+  private C: string; // -> field
+  public D: string; // -> field
+
+  constructor() {} // -> constructor
+
+  public static A(): void {} // -> method
+  public B(): void {} // -> method
+
+  [Z: string]: any; // -> signature
+
+  protected static E: string; // -> field
+};
+```
+
+Note: Not all members have to be grouped to find rule violations.
+
+##### Correct examples
+
+```ts
+interface Foo {
+  [Z: string]: any; // -> signature
+
+  A(): void; // -> method
+
+  new (); // -> constructor
+
+  B: string; // -> field
+}
+```
+
+```ts
+type Foo = {
+  // no signature
+
+  A(): void; // -> method
+
+  // no constructor
+
+  B: string; // -> field
+};
+```
+
+```ts
+class Foo {
+  [Z: string]: any; // -> signature
+
+  public static A(): void {} // -> method
+  public B(): void {} // -> method
+
+  constructor() {} // -> constructor
+
+  private C: string; // -> field
+  public D: string; // -> field
+  protected static E: string; // -> field
+}
+```
+
+```ts
+const Foo = class {
+  [Z: string]: any; // -> signature
+
+  public static A(): void {} // -> method
+  public B(): void {} // -> method
+
+  constructor() {} // -> constructor
+
+  private C: string; // -> field
+  public D: string; // -> field
+  protected static E: string; // -> field
+};
+```
+
+#### Configuration: `{ "default": ["public-instance-method", "public-static-field"] }`
+
+Note: This configuration does not apply to interfaces/type literals as accessibility and scope are not part of interfaces/type literals.
+
+##### Incorrect examples
+
+```ts
+class Foo {
+  private C: string; // (irrelevant)
+
+  public D: string; // (irrelevant)
+
+  public static E: string; // -> public static field
+
+  constructor() {} // (irrelevant)
+
+  public static A(): void {} // (irrelevant)
+
+  [Z: string]: any; // (irrelevant)
+
+  public B(): void {} // -> public instance method
+}
+```
+
+Note: Public instance methods should come first before public static fields. Everything else can be placed anywhere.
+
+```ts
+const Foo = class {
+  private C: string; // (irrelevant)
+
+  [Z: string]: any; // (irrelevant)
+
+  public static E: string; // -> public static field
+
+  public D: string; // (irrelevant)
+
+  constructor() {} // (irrelevant)
+
+  public static A(): void {} // (irrelevant)
+
+  public B(): void {} // -> public instance method
+};
+```
+
+Note: Public instance methods should come first before public static fields. Everything else can be placed anywhere.
+
+##### Correct examples
+
+```ts
+class Foo {
+  public B(): void {} // -> public instance method
+
+  private C: string; // (irrelevant)
+
+  public D: string; // (irrelevant)
+
+  public static E: string; // -> public static field
+
+  constructor() {} // (irrelevant)
+
+  public static A(): void {} // (irrelevant)
+
+  [Z: string]: any; // (irrelevant)
+}
+```
+
+```ts
+const Foo = class {
+  public B(): void {} // -> public instance method
+
+  private C: string; // (irrelevant)
+
+  [Z: string]: any; // (irrelevant)
+
+  public D: string; // (irrelevant)
+
+  constructor() {} // (irrelevant)
+
+  public static A(): void {} // (irrelevant)
+
+  public static E: string; // -> public static field
+};
+```
+
+#### Configuration: `{ "default": ["public-static-field", "static-field", "instance-field"] }`
+
+Note: This configuration does not apply to interfaces/type literals as accessibility and scope are not part of interfaces/type literals.
+
+##### Incorrect examples
+
+```ts
+class Foo {
+  private E: string; // -> instance field
+
+  private static B: string; // -> static field
+  protected static C: string; // -> static field
+  private static D: string; // -> static field
+
+  public static A: string; // -> public static field
+
+  [Z: string]: any; // (irrelevant)
+}
+```
+
+Note: Public static fields should come first, followed by static fields and instance fields.
+
+```ts
+const foo = class {
+  public T(): void {} // (irrelevant)
+
+  private static B: string; // -> static field
+
+  constructor() {} // (irrelevant)
+
+  private E: string; // -> instance field
+
+  protected static C: string; // -> static field
+  private static D: string; // -> static field
+
+  [Z: string]: any; // (irrelevant)
+
+  public static A: string; // -> public static field
+};
+```
+
+Note: Public static fields should come first, followed by static fields and instance fields.
+
+##### Correct examples
+
+```ts
+class Foo {
+  public static A: string; // -> public static field
+
+  private static B: string; // -> static field
+  protected static C: string; // -> static field
+  private static D: string; // -> static field
+
+  private E: string; // -> instance field
+}
+```
+
+```ts
+const foo = class {
+  [Z: string]: any; // -> signature
+
+  public static A: string; // -> public static field
+
+  constructor() {} // -> constructor
+
+  private static B: string; // -> static field
+  protected static C: string; // -> static field
+  private static D: string; // -> static field
+
+  private E: string; // -> instance field
+
+  public T(): void {} // -> method
+};
+```
+
+### Custom `classes` configuration
+
+Note: If this is not set, the `default` will automatically be applied to classes as well. If a `classes` configuration is provided, only this configuration will be used for `classes` (i.e. nothing will be merged with `default`).
+
+Note: The configuration for `classes` does not apply to class expressions (use `classExpressions` for them).
+
+#### Configuration: `{ "classes": ["method", "constructor", "field"] }`
+
+##### Incorrect example
+
+```ts
+class Foo {
+  private C: string; // -> field
+  public D: string; // -> field
+  protected static E: string; // -> field
+
+  constructor() {} // -> constructor
+
+  public static A(): void {} // -> method
+  public B(): void {} // -> method
+}
+```
+
+##### Correct example
+
+```ts
+class Foo {
+  public static A(): void {} // -> method
+  public B(): void {} // -> method
+
+  constructor() {} // -> constructor
+
+  private C: string; // -> field
+  public D: string; // -> field
+  protected static E: string; // -> field
+}
+```
+
+#### Configuration: `{ "classes": ["public-instance-method", "public-static-field"] }`
+
+##### Incorrect example
+
+```ts
+class Foo {
+  private C: string; // (irrelevant)
+
+  public D: string; // (irrelevant)
+
+  public static E: string; // -> public static field
+
+  constructor() {} // (irrelevant)
+
+  public static A(): void {} // (irrelevant)
+
+  public B(): void {} // -> public instance method
+}
+```
+
+##### Correct example
+
+```ts
+class Foo {
+  private C: string; // (irrelevant)
+
+  public D: string; // (irrelevant)
+
+  public B(): void {} // -> public instance method
+
+  constructor() {} // (irrelevant)
+
+  public static A(): void {} // (irrelevant)
+
+  public static E: string; // -> public static field
+}
+```
+
+### Custom `classExpressions` configuration
+
+Note: If this is not set, the `default` will automatically be applied to classes expressions as well. If a `classExpressions` configuration is provided, only this configuration will be used for `classExpressions` (i.e. nothing will be merged with `default`).
+
+Note: The configuration for `classExpressions` does not apply to classes (use `classes` for them).
+
+#### Configuration: `{ "classExpressions": ["method", "constructor", "field"] }`
+
+##### Incorrect example
+
+```ts
+const foo = class {
+  private C: string; // -> field
+  public D: string; // -> field
+  protected static E: string; // -> field
+
+  constructor() {} // -> constructor
+
+  public static A(): void {} // -> method
+  public B(): void {} // -> method
+};
+```
+
+##### Correct example
+
+```ts
+const foo = class {
+  public static A(): void {} // -> method
+  public B(): void {} // -> method
+
+  constructor() {} // -> constructor
+
+  private C: string; // -> field
+  public D: string; // -> field
+  protected static E: string; // -> field
+};
+```
+
+#### Configuration: `{ "classExpressions": ["public-instance-method", "public-static-field"] }`
+
+##### Incorrect example
+
+```ts
+const foo = class {
+  private C: string; // (irrelevant)
+
+  public D: string; // (irrelevant)
+
+  public static E: string; // -> public static field
+
+  constructor() {} // (irrelevant)
+
+  public static A(): void {} // (irrelevant)
+
+  public B(): void {} // -> public instance method
+};
+```
+
+##### Correct example
+
+```ts
+const foo = class {
+  private C: string; // (irrelevant)
+
+  public D: string; // (irrelevant)
+
+  public B(): void {} // -> public instance method
+
+  public static E: string; // -> public static field
+
+  constructor() {} // (irrelevant)
+
+  public static A(): void {} // (irrelevant)
+};
+```
+
+### Custom `interfaces` configuration
+
+Note: If this is not set, the `default` will automatically be applied to classes expressions as well. If a `interfaces` configuration is provided, only this configuration will be used for `interfaces` (i.e. nothing will be merged with `default`).
+
+Note: The configuration for `interfaces` only allows a limited set of member types: `signature`, `field`, `constructor` and `method`.
+
+Note: The configuration for `interfaces` does not apply to type literals (use `typeLiterals` for them).
+
+#### Configuration: `{ "interfaces": ["signature", "method", "constructor", "field"] }`
+
+##### Incorrect example
+
+```ts
+interface Foo {
+  B: string; // -> field
+
+  new (); // -> constructor
+
+  A(): void; // -> method
+
+  [Z: string]: any; // -> signature
+}
+```
+
+##### Correct example
+
+```ts
+interface Foo {
+  [Z: string]: any; // -> signature
+
+  A(): void; // -> method
+
+  new (); // -> constructor
+
+  B: string; // -> field
+}
+```
+
+### Custom `typeLiterals` configuration
+
+Note: If this is not set, the `default` will automatically be applied to classes expressions as well. If a `typeLiterals` configuration is provided, only this configuration will be used for `typeLiterals` (i.e. nothing will be merged with `default`).
+
+Note: The configuration for `typeLiterals` only allows a limited set of member types: `signature`, `field`, `constructor` and `method`.
+
+Note: The configuration for `typeLiterals` does not apply to interfaces (use `interfaces` for them).
+
+#### Configuration: `{ "typeLiterals": ["signature", "method", "constructor", "field"] }`
+
+##### Incorrect example
+
+```ts
+type Foo = {
+  B: string; // -> field
+
+  A(): void; // -> method
+
+  new (); // -> constructor
+
+  [Z: string]: any; // -> signature
+};
+```
+
+##### Correct example
+
+```ts
+type Foo = {
+  [Z: string]: any; // -> signature
+
+  A(): void; // -> method
+
+  new (); // -> constructor
+
+  B: string; // -> field
+};
+```
+
+### Sorting alphabetically within member groups
+
+It is possible to sort all members within a group alphabetically.
+
+#### Configuration: `{ "default": { "memberTypes": <Default Order>, "order": "alphabetically" } }`
+
+This will apply the default order (see above) and enforce an alphabetic order within each group.
+
+##### Incorrect examples
+
+```ts
+interface Foo {
+  a: x;
+  b: x;
+  c: x;
+
+  new (): Bar;
+  (): Baz;
+
+  a(): void;
+  b(): void;
+  c(): void;
+
+  // Wrong group order, should be placed before all field definitions
+  [a: string]: number;
+}
+```
+
+```ts
+interface Foo {
+  [a: string]: number;
+
+  a: x;
+  b: x;
+  c: x;
+
+  new (): Bar;
+  (): Baz;
+
+  // Wrong alphabetic order within group
+  c(): void;
+  b(): void;
+  a(): void;
+}
+```
+
+### Sorting alphabetically while ignoring member groups
+
+It is also possible to sort all members and ignore the member groups completely.
+
+#### Configuration: `{ "default": { "memberTypes": "never", "order": "alphabetically" } }`
+
+##### Incorrect example
+
+```ts
+interface Foo {
+  b(): void;
+  a: b;
+
+  [a: string]: number; // Order doesn't matter (no sortable identifier)
+  new (): Bar; // Order doesn't matter (no sortable identifier)
+  (): Baz; // Order doesn't matter (no sortable identifier)
+}
+```
+
+Note: Wrong alphabetic order `b(): void` should come after `a: b`.
+
+## When Not To Use It
+
+If you don't care about the general structure of your classes and interfaces, then you will not need this rule.
+
+## Compatibility
+
+- TSLint: [member-ordering](https://palantir.github.io/tslint/rules/member-ordering/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/method-signature-style.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/method-signature-style.md
new file mode 100644
index 0000000000000000000000000000000000000000..4358ee36ca06eca4dace2689cb641a9255f3b544
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/method-signature-style.md
@@ -0,0 +1,94 @@
+# Enforces using a particular method signature syntax. (`method-signature-style`)
+
+There are two ways to define an object/interface function property.
+
+```ts
+// method shorthand syntax
+interface T1 {
+  func(arg: string): number;
+}
+
+// regular property with function type
+interface T2 {
+  func: (arg: string) => number;
+}
+```
+
+A good practice is to use the TypeScript's `strict` option (which implies `strictFunctionTypes`) which enables correct typechecking for function properties only (method signatures get old behavior).
+
+TypeScript FAQ:
+
+> A method and a function property of the same type behave differently.
+> Methods are always bivariant in their argument, while function properties are contravariant in their argument under `strictFunctionTypes`.
+
+See the reasoning behind that in the [TypeScript PR for the compiler option](https://github.com/microsoft/TypeScript/pull/18654).
+
+## Options
+
+This rule accepts one string option:
+
+- `"property"`: Enforce using property signature for functions. Use this to enforce maximum correctness together with TypeScript's strict mode.
+- `"method"`: Enforce using method signature for functions. Use this if you aren't using TypeScript's strict mode and prefer this style.
+
+The default is `"property"`.
+
+## Rule Details
+
+Examples of **incorrect** code with `property` option.
+
+```ts
+interface T1 {
+  func(arg: string): number;
+}
+type T2 = {
+  func(arg: boolean): void;
+};
+interface T3 {
+  func(arg: number): void;
+  func(arg: string): void;
+  func(arg: boolean): void;
+}
+```
+
+Examples of **correct** code with `property` option.
+
+```ts
+interface T1 {
+  func: (arg: string) => number;
+}
+type T2 = {
+  func: (arg: boolean) => void;
+};
+// this is equivalent to the overload
+interface T3 {
+  func: ((arg: number) => void) &
+    ((arg: string) => void) &
+    ((arg: boolean) => void);
+}
+```
+
+Examples of **incorrect** code with `method` option.
+
+```ts
+interface T1 {
+  func: (arg: string) => number;
+}
+type T2 = {
+  func: (arg: boolean) => void;
+};
+```
+
+Examples of **correct** code with `method` option.
+
+```ts
+interface T1 {
+  func(arg: string): number;
+}
+type T2 = {
+  func(arg: boolean): void;
+};
+```
+
+## When Not To Use It
+
+If you don't want to enforce a particular style for object/interface function types, and/or if you don't use `strictFunctionTypes`, then you don't need this rule.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/naming-convention.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/naming-convention.md
new file mode 100644
index 0000000000000000000000000000000000000000..fc4d914e449f2c4aec0596456060021d1b20f714
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/naming-convention.md
@@ -0,0 +1,696 @@
+# Enforces naming conventions for everything across a codebase (`naming-convention`)
+
+Enforcing naming conventions helps keep the codebase consistent, and reduces overhead when thinking about how to name a variable.
+Additionally, a well-designed style guide can help communicate intent, such as by enforcing all private properties begin with an `_`, and all global-level constants are written in `UPPER_CASE`.
+
+There are many different rules that have existed over time, but they have had the problem of not having enough granularity, meaning it was hard to have a well defined style guide, and most of the time you needed 3 or more rules at once to enforce different conventions, hoping they didn't conflict.
+
+## Rule Details
+
+This rule allows you to enforce conventions for any identifier, using granular selectors to create a fine-grained style guide.
+
+### Note - this rule only needs type information in specific cases, detailed below
+
+## Options
+
+This rule accepts an array of objects, with each object describing a different naming convention.
+Each property will be described in detail below. Also see the examples section below for illustrated examples.
+
+```ts
+type Options = {
+  // format options
+  format:
+    | (
+        | 'camelCase'
+        | 'strictCamelCase'
+        | 'PascalCase'
+        | 'StrictPascalCase'
+        | 'snake_case'
+        | 'UPPER_CASE'
+      )[]
+    | null;
+  custom?: {
+    regex: string;
+    match: boolean;
+  };
+  leadingUnderscore?:
+    | 'forbid'
+    | 'require'
+    | 'requireDouble'
+    | 'allow'
+    | 'allowDouble'
+    | 'allowSingleOrDouble';
+  trailingUnderscore?:
+    | 'forbid'
+    | 'require'
+    | 'requireDouble'
+    | 'allow'
+    | 'allowDouble'
+    | 'allowSingleOrDouble';
+  prefix?: string[];
+  suffix?: string[];
+
+  // selector options
+  selector: Selector | Selector[];
+  filter?:
+    | string
+    | {
+        regex: string;
+        match: boolean;
+      };
+  // the allowed values for these are dependent on the selector - see below
+  modifiers?: Modifiers<Selector>[];
+  types?: Types<Selector>[];
+}[];
+
+// the default config is similar to ESLint's camelcase rule but more strict
+const defaultOptions: Options = [
+  {
+    selector: 'default',
+    format: ['camelCase'],
+    leadingUnderscore: 'allow',
+    trailingUnderscore: 'allow',
+  },
+
+  {
+    selector: 'variable',
+    format: ['camelCase', 'UPPER_CASE'],
+    leadingUnderscore: 'allow',
+    trailingUnderscore: 'allow',
+  },
+
+  {
+    selector: 'typeLike',
+    format: ['PascalCase'],
+  },
+];
+```
+
+### Format Options
+
+Every single selector can have the same set of format options.
+For information about how each selector is applied, see ["How does the rule evaluate a name's format?"](#how-does-the-rule-evaluate-a-names-format).
+
+#### `format`
+
+The `format` option defines the allowed formats for the identifier. This option accepts an array of the following values, and the identifier can match any of them:
+
+- `camelCase` - standard camelCase format - no underscores are allowed between characters, and consecutive capitals are allowed (i.e. both `myID` and `myId` are valid).
+- `strictCamelCase` - same as `camelCase`, but consecutive capitals are not allowed (i.e. `myId` is valid, but `myID` is not).
+- `PascalCase` - same as `camelCase`, except the first character must be upper-case.
+- `StrictPascalCase` - same as `strictCamelCase`, except the first character must be upper-case.
+- `snake_case` - standard snake_case format - all characters must be lower-case, and underscores are allowed.
+- `UPPER_CASE` - same as `snake_case`, except all characters must be upper-case.
+
+Instead of an array, you may also pass `null`. This signifies "this selector shall not have its format checked".
+This can be useful if you want to enforce no particular format for a specific selector, after applying a group selector.
+
+### `custom`
+
+The `custom` option defines a custom regex that the identifier must (or must not) match. This option allows you to have a bit more finer-grained control over identifiers, letting you ban (or force) certain patterns and substrings.
+Accepts an object with the following properties:
+
+- `regex` - accepts a regular expression (anything accepted into `new RegExp(regex)`).
+- `match` - true if the identifier _must_ match the `regex`, false if the identifier _must not_ match the `regex`.
+
+### `filter`
+
+The `filter` option operates similar to `custom`, accepting the same shaped object, except that it controls if the rest of the configuration should or should not be applied to an identifier.
+
+You can use this to include or exclude specific identifiers from specific configurations.
+
+Accepts an object with the following properties:
+
+- `regex` - accepts a regular expression (anything accepted into `new RegExp(regex)`).
+- `match` - true if the identifier _must_ match the `regex`, false if the identifier _must not_ match the `regex`.
+
+Alternatively, `filter` accepts a regular expression (anything accepted into `new RegExp(filter)`). In this case, it's treated as if you had passed an object with the regex and `match: true`.
+
+#### `leadingUnderscore` / `trailingUnderscore`
+
+The `leadingUnderscore` / `trailingUnderscore` options control whether leading/trailing underscores are considered valid. Accepts one of the following values:
+
+- `forbid` - a leading/trailing underscore is not allowed at all.
+- `require` - a single leading/trailing underscore must be included.
+- `requireDouble` - two leading/trailing underscores must be included.
+- `allow` - existence of a single leading/trailing underscore is not explicitly enforced.
+- `allowDouble` - existence of a double leading/trailing underscore is not explicitly enforced.
+- `allowSingleOrDouble` - existence of a single or a double leading/trailing underscore is not explicitly enforced.
+
+#### `prefix` / `suffix`
+
+The `prefix` / `suffix` options control which prefix/suffix strings must exist for the identifier. Accepts an array of strings.
+
+If these are provided, the identifier must start with one of the provided values. For example, if you provide `{ prefix: ['IFace', 'Class', 'Type'] }`, then the following names are valid: `IFaceFoo`, `ClassBar`, `TypeBaz`, but the name `Bang` is not valid, as it contains none of the prefixes.
+
+**Note:** As [documented above](#format-options), the prefix is trimmed before format is validated, therefore PascalCase must be used to allow variables such as `isEnabled` using the prefix `is`.
+
+### Selector Options
+
+- `selector` allows you to specify what types of identifiers to target.
+  - Accepts one or array of selectors to define an option block that applies to one or multiple selectors.
+  - For example, if you provide `{ selector: ['variable', 'function'] }`, then it will apply the same option to variable and function nodes.
+  - See [Allowed Selectors, Modifiers and Types](#allowed-selectors-modifiers-and-types) below for the complete list of allowed selectors.
+- `modifiers` allows you to specify which modifiers to granularly apply to, such as the accessibility (`private`/`public`/`protected`), or if the thing is `static`, etc.
+  - The name must match _all_ of the modifiers.
+  - For example, if you provide `{ modifiers: ['private', 'static', 'readonly'] }`, then it will only match something that is `private static readonly`, and something that is just `private` will not match.
+  - The following `modifiers` are allowed:
+    - `const` - matches a variable declared as being `const` (`const x = 1`).
+    - `destructured` - matches a variable declared via an object destructuring pattern (`const {x, z = 2}`).
+      - Note that this does not match renamed destructured properties (`const {x: y, a: b = 2}`).
+    - `global` - matches a variable/function declared in the top-level scope.
+    - `exported` - matches anything that is exported from the module.
+    - `unused` - matches anything that is not used.
+    - `requiresQuotes` - matches any name that requires quotes as it is not a valid identifier (i.e. has a space, a dash, etc in it).
+    - `public` - matches any member that is either explicitly declared as `public`, or has no visibility modifier (i.e. implicitly public).
+    - `readonly`, `static`, `abstract`, `protected`, `private` - matches any member explicitly declared with the given modifier.
+- `types` allows you to specify which types to match. This option supports simple, primitive types only (`boolean`, `string`, `number`, `array`, `function`).
+  - The name must match _one_ of the types.
+  - **_NOTE - Using this option will require that you lint with type information._**
+  - For example, this lets you do things like enforce that `boolean` variables are prefixed with a verb.
+  - The following `types` are allowed:
+    - `boolean` matches any type assignable to `boolean | null | undefined`
+    - `string` matches any type assignable to `string | null | undefined`
+    - `number` matches any type assignable to `number | null | undefined`
+    - `array` matches any type assignable to `Array<unknown> | null | undefined`
+    - `function` matches any type assignable to `Function | null | undefined`
+
+The ordering of selectors does not matter. The implementation will automatically sort the selectors to ensure they match from most-specific to least specific. It will keep checking selectors in that order until it finds one that matches the name. See ["How does the rule automatically order selectors?"](#how-does-the-rule-automatically-order-selectors)
+
+#### Allowed Selectors, Modifiers and Types
+
+There are two types of selectors, individual selectors, and grouped selectors.
+
+##### Individual Selectors
+
+Individual Selectors match specific, well-defined sets. There is no overlap between each of the individual selectors.
+
+- `variable` - matches any `var` / `let` / `const` variable name.
+  - Allowed `modifiers`: `const`, `destructured`, `global`, `exported`, `unused`.
+  - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`.
+- `function` - matches any named function declaration or named function expression.
+  - Allowed `modifiers`: `global`, `exported`, `unused`.
+  - Allowed `types`: none.
+- `parameter` - matches any function parameter. Does not match parameter properties.
+  - Allowed `modifiers`: `destructured`, `unused`.
+  - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`.
+- `classProperty` - matches any class property. Does not match properties that have direct function expression or arrow function expression values.
+  - Allowed `modifiers`: `abstract`, `private`, `protected`, `public`, `readonly`, `requiresQuotes`, `static`.
+  - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`.
+- `objectLiteralProperty` - matches any object literal property. Does not match properties that have direct function expression or arrow function expression values.
+  - Allowed `modifiers`: `public`, `requiresQuotes`.
+  - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`.
+- `typeProperty` - matches any object type property. Does not match properties that have direct function expression or arrow function expression values.
+  - Allowed `modifiers`: `public`, `readonly`, `requiresQuotes`.
+  - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`.
+- `parameterProperty` - matches any parameter property.
+  - Allowed `modifiers`: `private`, `protected`, `public`, `readonly`.
+  - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`.
+- `classMethod` - matches any class method. Also matches properties that have direct function expression or arrow function expression values. Does not match accessors.
+  - Allowed `modifiers`: `abstract`, `private`, `protected`, `public`, `requiresQuotes`, `static`.
+  - Allowed `types`: none.
+- `objectLiteralMethod` - matches any object literal method. Also matches properties that have direct function expression or arrow function expression values. Does not match accessors.
+  - Allowed `modifiers`: `public`, `requiresQuotes`.
+  - Allowed `types`: none.
+- `typeMethod` - matches any object type method. Also matches properties that have direct function expression or arrow function expression values. Does not match accessors.
+  - Allowed `modifiers`: `public`, `requiresQuotes`.
+  - Allowed `types`: none.
+- `accessor` - matches any accessor.
+  - Allowed `modifiers`: `abstract`, `private`, `protected`, `public`, `requiresQuotes`, `static`.
+  - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`.
+- `enumMember` - matches any enum member.
+  - Allowed `modifiers`: `requiresQuotes`.
+  - Allowed `types`: none.
+- `class` - matches any class declaration.
+  - Allowed `modifiers`: `abstract`, `exported`, `unused`.
+  - Allowed `types`: none.
+- `interface` - matches any interface declaration.
+  - Allowed `modifiers`: `exported`, `unused`.
+  - Allowed `types`: none.
+- `typeAlias` - matches any type alias declaration.
+  - Allowed `modifiers`: `exported`, `unused`.
+  - Allowed `types`: none.
+- `enum` - matches any enum declaration.
+  - Allowed `modifiers`: `exported`, `unused`.
+  - Allowed `types`: none.
+- `typeParameter` - matches any generic type parameter declaration.
+  - Allowed `modifiers`: `unused`.
+  - Allowed `types`: none.
+
+##### Group Selectors
+
+Group Selectors are provided for convenience, and essentially bundle up sets of individual selectors.
+
+- `default` - matches everything.
+  - Allowed `modifiers`: all modifiers.
+  - Allowed `types`: none.
+- `variableLike` - matches the same as `variable`, `function` and `parameter`.
+  - Allowed `modifiers`: `unused`.
+  - Allowed `types`: none.
+- `memberLike` - matches the same as `property`, `parameterProperty`, `method`, `accessor`, `enumMember`.
+  - Allowed `modifiers`: `private`, `protected`, `public`, `static`, `readonly`, `abstract`, `requiresQuotes`.
+  - Allowed `types`: none.
+- `typeLike` - matches the same as `class`, `interface`, `typeAlias`, `enum`, `typeParameter`.
+  - Allowed `modifiers`: `abstract`, `unused`.
+  - Allowed `types`: none.
+- `property` - matches the same as `classProperty`, `objectLiteralProperty`, `typeProperty`.
+  - Allowed `modifiers`: `private`, `protected`, `public`, `static`, `readonly`, `abstract`, `requiresQuotes`.
+  - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`.
+- `method` - matches the same as `classMethod`, `objectLiteralMethod`, `typeMethod`.
+  - Allowed `modifiers`: `private`, `protected`, `public`, `static`, `readonly`, `abstract`, `requiresQuotes`.
+  - Allowed `types`: none.
+
+## FAQ
+
+This is a big rule, and there's a lot of docs. Here are a few clarifications that people often ask about or figure out via trial-and-error.
+
+### How does the rule evaluate a selector?
+
+Each selector is checked in the following way:
+
+1. check the `selector`
+   1. if `selector` is one individual selector → the name's type must be of that type.
+   1. if `selector` is a group selector → the name's type must be one of the grouped types.
+   1. if `selector` is an array of selectors → apply the above for each selector in the array.
+1. check the `filter`
+   1. if `filter` is omitted → skip this step.
+   1. if the name matches the `filter` → continue evaluating this selector.
+   1. if the name does not match the `filter` → skip this selector and continue to the next selector.
+1. check the `types`
+   1. if `types` is omitted → skip this step.
+   1. if the name has a type in `types` → continue evaluating this selector.
+   1. if the name does not have a type in `types` → skip this selector and continue to the next selector.
+
+A name is considered to pass the config if it:
+
+1. Matches one selector and passes all of that selector's format checks.
+2. Matches no selectors.
+
+A name is considered to fail the config if it matches one selector and fails one that selector's format checks.
+
+### How does the rule automatically order selectors?
+
+Each identifier should match exactly one selector. It may match multiple group selectors - but only ever one selector.
+With that in mind - the base sort order works out to be:
+
+1. Individual Selectors
+2. Grouped Selectors
+3. Default Selector
+
+Within each of these categories, some further sorting occurs based on what selector options are supplied:
+
+1. `filter` is given the highest priority above all else.
+2. `types`
+3. `modifiers`
+4. everything else
+
+For example, if you provide the following config:
+
+```ts
+[
+  /* 1 */ { selector: 'default', format: ['camelCase'] },
+  /* 2 */ { selector: 'variable', format: ['snake_case'] },
+  /* 3 */ { selector: 'variable', types: ['boolean'], format: ['UPPER_CASE'] },
+  /* 4 */ { selector: 'variableLike', format: ['PascalCase'] },
+];
+```
+
+Then for the code `const x = 1`, the rule will validate the selectors in the following order: `3`, `2`, `4`, `1`.
+To clearly spell it out:
+
+- (3) is tested first because it has `types` and is an individual selector.
+- (2) is tested next because it is an individual selector.
+- (1) is tested next as it is a grouped selector.
+- (4) is tested last as it is the base default selector.
+
+Its worth noting that whilst this order is applied, all selectors may not run on a name.
+This is explained in ["How does the rule evaluate a name's format?"](#how-does-the-rule-evaluate-a-names-format)
+
+### How does the rule evaluate a name's format?
+
+When the format of an identifier is checked, it is checked in the following order:
+
+1. validate leading underscore
+1. validate trailing underscore
+1. validate prefix
+1. validate suffix
+1. validate custom
+1. validate format
+
+For steps 1-4, if the identifier matches the option, the matching part will be removed.
+This is done so that you can apply formats like PascalCase without worrying about prefixes or underscores causing it to not match.
+
+One final note is that if the name were to become empty via this trimming process, it is considered to match all `format`s. An example of where this might be useful is for generic type parameters, where you want all names to be prefixed with `T`, but also want to allow for the single character `T` name.
+
+Here are some examples to help illustrate
+
+Name: `_IMyInterface`
+Selector:
+
+```json
+{
+  "leadingUnderscore": "require",
+  "prefix": ["I"],
+  "format": ["UPPER_CASE", "StrictPascalCase"]
+}
+```
+
+1. `name = _IMyInterface`
+1. validate leading underscore
+   1. config is provided
+   1. check name → pass
+   1. Trim underscore → `name = IMyInterface`
+1. validate trailing underscore
+   1. config is not provided → skip
+1. validate prefix
+   1. config is provided
+   1. check name → pass
+   1. Trim prefix → `name = MyInterface`
+1. validate suffix
+   1. config is not provided → skip
+1. validate custom
+   1. config is not provided → skip
+1. validate format
+   1. for each format...
+      1. `format = 'UPPER_CASE'`
+         1. check format → fail.
+            - Important to note that if you supply multiple formats - the name only needs to match _one_ of them!
+      1. `format = 'StrictPascalCase'`
+         1. check format → success.
+1. **_success_**
+
+Name: `IMyInterface`
+Selector:
+
+```json
+{
+  "format": ["StrictPascalCase"],
+  "trailingUnderscore": "allow",
+  "custom": {
+    "regex": "^I[A-Z]",
+    "match": false
+  }
+}
+```
+
+1. `name = IMyInterface`
+1. validate leading underscore
+   1. config is not provided → skip
+1. validate trailing underscore
+   1. config is provided
+   1. check name → pass
+   1. Trim underscore → `name = IMyInterface`
+1. validate prefix
+   1. config is not provided → skip
+1. validate suffix
+   1. config is not provided → skip
+1. validate custom
+   1. config is provided
+   1. `regex = new RegExp("^I[A-Z]")`
+   1. `regex.test(name) === custom.match`
+   1. **_fail_** → report and exit
+
+### What happens if I provide a `modifiers` to a Group Selector?
+
+Some group selectors accept `modifiers`. For the most part these will work exactly the same as with individual selectors.
+There is one exception to this in that a modifier might not apply to all individual selectors covered by a group selector.
+
+For example - `memberLike` includes the `enumMember` selector, and it allows the `protected` modifier.
+An `enumMember` can never ever be `protected`, which means that the following config will never match any `enumMember`:
+
+```json
+{
+  "selector": "memberLike",
+  "modifiers": ["protected"]
+}
+```
+
+To help with matching, members that cannot specify an accessibility will always have the `public` modifier. This means that the following config will always match any `enumMember`:
+
+```json
+{
+  "selector": "memberLike",
+  "modifiers": ["public"]
+}
+```
+
+## Examples
+
+### Enforce that all variables, functions and properties follow are camelCase
+
+```json
+{
+  "@typescript-eslint/naming-convention": [
+    "error",
+    { "selector": "variableLike", "format": ["camelCase"] }
+  ]
+}
+```
+
+### Enforce that private members are prefixed with an underscore
+
+```json
+{
+  "@typescript-eslint/naming-convention": [
+    "error",
+    {
+      "selector": "memberLike",
+      "modifiers": ["private"],
+      "format": ["camelCase"],
+      "leadingUnderscore": "require"
+    }
+  ]
+}
+```
+
+### Enforce that boolean variables are prefixed with an allowed verb
+
+**Note:** As [documented above](#format-options), the prefix is trimmed before format is validated, thus PascalCase must be used to allow variables such as `isEnabled`.
+
+```json
+{
+  "@typescript-eslint/naming-convention": [
+    "error",
+    {
+      "selector": "variable",
+      "types": ["boolean"],
+      "format": ["PascalCase"],
+      "prefix": ["is", "should", "has", "can", "did", "will"]
+    }
+  ]
+}
+```
+
+### Enforce that all variables are either in camelCase or UPPER_CASE
+
+```json
+{
+  "@typescript-eslint/naming-convention": [
+    "error",
+    {
+      "selector": "variable",
+      "format": ["camelCase", "UPPER_CASE"]
+    }
+  ]
+}
+```
+
+### Enforce that all const variables are in UPPER_CASE
+
+```json
+{
+  "@typescript-eslint/naming-convention": [
+    "error",
+    {
+      "selector": "variable",
+      "modifiers": ["const"],
+      "format": ["UPPER_CASE"]
+    }
+  ]
+}
+```
+
+### Enforce that type parameters (generics) are prefixed with `T`
+
+This allows you to emulate the old `generic-type-naming` rule.
+
+```json
+{
+  "@typescript-eslint/naming-convention": [
+    "error",
+    {
+      "selector": "typeParameter",
+      "format": ["PascalCase"],
+      "prefix": ["T"]
+    }
+  ]
+}
+```
+
+### Enforce that interface names do not begin with an `I`
+
+This allows you to emulate the old `interface-name-prefix` rule.
+
+```json
+{
+  "@typescript-eslint/naming-convention": [
+    "error",
+    {
+      "selector": "interface",
+      "format": ["PascalCase"],
+      "custom": {
+        "regex": "^I[A-Z]",
+        "match": false
+      }
+    }
+  ]
+}
+```
+
+### Enforce that variable and function names are in camelCase
+
+This allows you to lint multiple type with same pattern.
+
+```json
+{
+  "@typescript-eslint/naming-convention": [
+    "error",
+    {
+      "selector": ["variable", "function"],
+      "format": ["camelCase"],
+      "leadingUnderscore": "allow"
+    }
+  ]
+}
+```
+
+### Ignore properties that **_require_** quotes
+
+Sometimes you have to use a quoted name that breaks the convention (for example, HTTP headers).
+If this is a common thing in your codebase, then you have a few options.
+
+If you simply want to allow all property names that require quotes, you can use the `requiresQuotes` modifier to match any property name that _requires_ quoting, and use `format: null` to ignore the name.
+
+```jsonc
+{
+  "@typescript-eslint/naming-convention": [
+    "error",
+    {
+      "selector": [
+        "classProperty",
+        "objectLiteralProperty",
+        "typeProperty",
+        "classMethod",
+        "objectLiteralMethod",
+        "typeMethod",
+        "accessor",
+        "enumMember"
+      ],
+      "format": null,
+      "modifiers": ["requiresQuotes"]
+    }
+  ]
+}
+```
+
+If you have a small and known list of exceptions, you can use the `filter` option to ignore these specific names only:
+
+```jsonc
+{
+  "@typescript-eslint/naming-convention": [
+    "error",
+    {
+      "selector": "property",
+      "format": ["strictCamelCase"],
+      "filter": {
+        // you can expand this regex to add more allowed names
+        "regex": "^(Property-Name-One|Property-Name-Two)$",
+        "match": false
+      }
+    }
+  ]
+}
+```
+
+You can use the `filter` option to ignore names with specific characters:
+
+```jsonc
+{
+  "@typescript-eslint/naming-convention": [
+    "error",
+    {
+      "selector": "property",
+      "format": ["strictCamelCase"],
+      "filter": {
+        // you can expand this regex as you find more cases that require quoting that you want to allow
+        "regex": "[- ]",
+        "match": false
+      }
+    }
+  ]
+}
+```
+
+Note that there is no way to ignore any name that is quoted - only names that are required to be quoted.
+This is intentional - adding quotes around a name is not an escape hatch for proper naming.
+If you want an escape hatch for a specific name - you should can use an [`eslint-disable` comment](https://eslint.org/docs/user-guide/configuring#disabling-rules-with-inline-comments).
+
+### Ignore destructured names
+
+Sometimes you might want to allow destructured properties to retain their original name, even if it breaks your naming convention.
+
+You can use the `destructured` modifier to match these names, and explicitly set `format: null` to apply no formatting:
+
+```jsonc
+{
+  "@typescript-eslint/naming-convention": [
+    "error",
+    {
+      "selector": "variable",
+      "modifiers": ["destructured"],
+      "format": null
+    }
+  ]
+}
+```
+
+### Enforce the codebase follows ESLint's `camelcase` conventions
+
+```json
+{
+  "camelcase": "off",
+  "@typescript-eslint/naming-convention": [
+    "error",
+    {
+      "selector": "default",
+      "format": ["camelCase"]
+    },
+
+    {
+      "selector": "variable",
+      "format": ["camelCase", "UPPER_CASE"]
+    },
+    {
+      "selector": "parameter",
+      "format": ["camelCase"],
+      "leadingUnderscore": "allow"
+    },
+
+    {
+      "selector": "memberLike",
+      "modifiers": ["private"],
+      "format": ["camelCase"],
+      "leadingUnderscore": "require"
+    },
+
+    {
+      "selector": "typeLike",
+      "format": ["PascalCase"]
+    }
+  ]
+}
+```
+
+## When Not To Use It
+
+If you do not want to enforce naming conventions for anything.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-array-constructor.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-array-constructor.md
new file mode 100644
index 0000000000000000000000000000000000000000..fb9a68e7429fc69cdc2cf46f2231a9ab07193820
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-array-constructor.md
@@ -0,0 +1,43 @@
+# Disallow generic `Array` constructors (`no-array-constructor`)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-array-constructor`](https://eslint.org/docs/rules/no-array-constructor) rule.
+It adds support for the generically typed `Array` constructor (`new Array<Foo>()`).
+
+Examples of **incorrect** code for this rule:
+
+```ts
+/*eslint no-array-constructor: "error"*/
+
+Array(0, 1, 2);
+new Array(0, 1, 2);
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+/*eslint no-array-constructor: "error"*/
+
+Array<number>(0, 1, 2);
+new Array<Foo>(x, y, z);
+
+Array(500);
+new Array(someOtherArray.length);
+```
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-array-constructor": "off",
+  "@typescript-eslint/no-array-constructor": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/no-array-constructor` options](https://eslint.org/docs/rules/no-array-constructor#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-array-constructor.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-base-to-string.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-base-to-string.md
new file mode 100644
index 0000000000000000000000000000000000000000..f1c2abab3a785769c8000f274f84c7e09e96cf04
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-base-to-string.md
@@ -0,0 +1,87 @@
+# Requires that `.toString()` is only called on objects which provide useful information when stringified (`no-base-to-string`)
+
+JavaScript will call `toString()` on an object when it is converted to a string, such as when `+` adding to a string or in `${}` template literals.
+
+The default Object `.toString()` returns `"[object Object]"`, so this rule requires stringified objects define a more useful `.toString()` method.
+
+Note that `Function` provides its own `.toString()` that returns the function's code.
+Functions are not flagged by this rule.
+
+This rule has some overlap with [`restrict-plus-operands`](./restrict-plus-operands.md) and [`restrict-template-expressions`](./restrict-template-expressions.md).
+
+## Rule Details
+
+This rule prevents accidentally defaulting to the base Object `.toString()` method.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+// Passing an object or class instance to string concatenation:
+'' + {};
+
+class MyClass {}
+const value = new MyClass();
+value + '';
+
+// Interpolation and manual .toString() calls too:
+`Value: ${value}`;
+({}.toString());
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+// These types all have useful .toString()s
+'Text' + true;
+`Value: ${123}`;
+`Arrays too: ${[1, 2, 3]}`;
+(() => {}).toString();
+
+// Defining a custom .toString class is considered acceptable
+class CustomToString {
+  toString() {
+    return 'Hello, world!';
+  }
+}
+`Value: ${new CustomToString()}`;
+
+const literalWithToString = {
+  toString: () => 'Hello, world!',
+};
+
+`Value: ${literalWithToString}`;
+```
+
+## Options
+
+```ts
+type Options = {
+  ignoredTypeNames?: string[];
+};
+
+const defaultOptions: Options = {
+  ignoredTypeNames: ['RegExp'],
+};
+```
+
+### `ignoredTypeNames`
+
+A string array of type names to ignore, this is useful for types missing `toString()` (but actually has `toString()`).
+There are some types missing `toString()` in old version TypeScript, like `RegExp`, `URL`, `URLSearchParams` etc.
+
+The following patterns are considered correct with the default options `{ ignoredTypeNames: ["RegExp"] }`:
+
+```ts
+`${/regex/}`;
+'' + /regex/;
+/regex/.toString();
+let value = /regex/;
+value.toString();
+let text = `${value}`;
+```
+
+## When Not To Use It
+
+If you don't mind `"[object Object]"` in your strings, then you will not need this rule.
+
+- [`Object.prototype.toString()` MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-confusing-non-null-assertion.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-confusing-non-null-assertion.md
new file mode 100644
index 0000000000000000000000000000000000000000..a61f6a8a9f4ea0ed66453b2c66b97ff4187b63b5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-confusing-non-null-assertion.md
@@ -0,0 +1,46 @@
+# Disallow non-null assertion in locations that may be confusing (`no-confusing-non-null-assertion`)
+
+## Rule Details
+
+Using a non-null assertion (`!`) next to an assign or equals check (`=` or `==` or `===`) creates code that is confusing as it looks similar to a not equals check (`!=` `!==`).
+
+```typescript
+a! == b; // a non-null assertions(`!`) and an equals test(`==`)
+a !== b; // not equals test(`!==`)
+a! === b; // a non-null assertions(`!`) and an triple equals test(`===`)
+```
+
+Examples of **incorrect** code for this rule:
+
+```ts
+interface Foo {
+  bar?: string;
+  num?: number;
+}
+
+const foo: Foo = getFoo();
+const isEqualsBar = foo.bar! == 'hello';
+const isEqualsNum = 1 + foo.num! == 2;
+```
+
+Examples of **correct** code for this rule:
+
+<!-- prettier-ignore -->
+```ts
+interface Foo {
+  bar?: string;
+  num?: number;
+}
+
+const foo: Foo = getFoo();
+const isEqualsBar = foo.bar == 'hello';
+const isEqualsNum = (1 + foo.num!) == 2;
+```
+
+## When Not To Use It
+
+If you don't care about this confusion, then you will not need this rule.
+
+## Further Reading
+
+- [`Issue: Easy misunderstanding: "! ==="`](https://github.com/microsoft/TypeScript/issues/37837) in [TypeScript repo](https://github.com/microsoft/TypeScript)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-confusing-void-expression.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-confusing-void-expression.md
new file mode 100644
index 0000000000000000000000000000000000000000..8a00255170d54ee0924fb658c8730e1cfcdf10fa
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-confusing-void-expression.md
@@ -0,0 +1,149 @@
+# Requires expressions of type void to appear in statement position (`no-confusing-void-expression`)
+
+Returning the results of an expression whose type is void can be misleading.
+Attempting to do so is likely a symptom of expecting a different return type from a function.
+Even if used correctly, it can be misleading for other developers,
+who don't know what a particular function does and if its result matters.
+
+This rule provides automatic fixes for most common cases.
+
+## Examples
+
+Examples of **incorrect** code for this rule:
+
+```ts
+// somebody forgot that `alert` doesn't return anything
+const response = alert('Are you sure?');
+console.log(alert('Are you sure?'));
+
+// it's not obvious whether the chained promise will contain the response (fixable)
+promise.then(value => window.postMessage(value));
+
+// it looks like we are returning the result of `console.error` (fixable)
+function doSomething() {
+  if (!somethingToDo) {
+    return console.error('Nothing to do!');
+  }
+
+  console.log('Doing a thing...');
+}
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+// just a regular void function in a statement position
+alert('Hello, world!');
+
+// this function returns a boolean value so it's ok
+const response = confirm('Are you sure?');
+console.log(confirm('Are you sure?'));
+
+// now it's obvious that `postMessage` doesn't return any response
+promise.then(value => {
+  window.postMessage(value);
+});
+
+// now it's explicit that we want to log the error and return early
+function doSomething() {
+  if (!somethingToDo) {
+    console.error('Nothing to do!');
+    return;
+  }
+
+  console.log('Doing a thing...');
+}
+
+// using logical expressions for their side effects is fine
+cond && console.log('true');
+cond || console.error('false');
+cond ? console.log('true') : console.error('false');
+```
+
+## Options
+
+An object option can be specified. Each boolean flag makes the rule less strict.
+
+```ts
+type Options = {
+  ignoreArrowShorthand?: boolean;
+  ignoreVoidOperator?: boolean;
+};
+
+const defaults: Options = {
+  ignoreArrowShorthand: false,
+  ignoreVoidOperator: false,
+};
+```
+
+### `ignoreArrowShorthand`
+
+`false` by default.
+
+```json
+{
+  "@typescript-eslint/no-confusing-void-expression": [
+    "error",
+    { "ignoreArrowShorthand": true }
+  ]
+}
+```
+
+It might be undesirable to wrap every arrow function shorthand expression with braces.
+Especially when using Prettier formatter, which spreads such code across 3 lines instead of 1.
+
+Examples of additional **correct** code with this option enabled:
+
+```ts
+promise.then(value => window.postMessage(value));
+```
+
+### `ignoreVoidOperator`
+
+`false` by default.
+
+```json
+{
+  "@typescript-eslint/no-confusing-void-expression": [
+    "error",
+    { "ignoreVoidOperator": true }
+  ]
+}
+```
+
+It might be preferable to only use some distinct syntax
+to explicitly mark the confusing but valid usage of void expressions.
+This option allows void expressions which are explicitly wrapped in the `void` operator.
+This can help avoid confusion among other developers as long as they are made aware of this code style.
+
+This option also changes the automatic fixes for common cases to use the `void` operator.
+It also enables a suggestion fix to wrap the void expression with `void` operator for every problem reported.
+
+Examples of additional **correct** code with this option enabled:
+
+```ts
+// now it's obvious that we don't expect any response
+promise.then(value => void window.postMessage(value));
+
+// now it's explicit that we don't want to return anything
+function doSomething() {
+  if (!somethingToDo) {
+    return void console.error('Nothing to do!');
+  }
+
+  console.log('Doing a thing...');
+}
+
+// we are sure that we want to always log `undefined`
+console.log(void alert('Hello, world!'));
+```
+
+## When Not To Use It
+
+The return type of a function can be inspected by going to its definition or hovering over it in an IDE.
+If you don't care about being explicit about the void type in actual code then don't use this rule.
+Also, if you prefer concise coding style then also don't use it.
+
+## Related to
+
+- TSLint: ['no-void-expression'](https://palantir.github.io/tslint/rules/no-void-expression/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-dupe-class-members.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-dupe-class-members.md
new file mode 100644
index 0000000000000000000000000000000000000000..ddfc1b9f1bd8d840263f5153347984c6b643baa1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-dupe-class-members.md
@@ -0,0 +1,22 @@
+# Disallow duplicate class members (`no-dupe-class-members`)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-dupe-class-members`](https://eslint.org/docs/rules/no-dupe-class-members) rule.
+It adds support for TypeScript's method overload definitions.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-dupe-class-members": "off",
+  "@typescript-eslint/no-dupe-class-members": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/no-dupe-class-members` options](https://eslint.org/docs/rules/no-dupe-class-members#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-dupe-class-members.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-duplicate-imports.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-duplicate-imports.md
new file mode 100644
index 0000000000000000000000000000000000000000..140a8a1ece1415f7f73ae525c691b372fe336e31
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-duplicate-imports.md
@@ -0,0 +1,22 @@
+# Disallow duplicate imports (`no-duplicate-imports`)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-duplicate-imports`](https://eslint.org/docs/rules/no-duplicate-imports) rule.
+This version adds support for type-only import and export.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-duplicate-imports": "off",
+  "@typescript-eslint/no-duplicate-imports": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/no-duplicate-imports` options](https://eslint.org/docs/rules/no-duplicate-imports#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-duplicate-imports.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-dynamic-delete.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-dynamic-delete.md
new file mode 100644
index 0000000000000000000000000000000000000000..5d84cb1c9ade7a3d34190af6b4d442907f321625
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-dynamic-delete.md
@@ -0,0 +1,49 @@
+# Disallow the delete operator with computed key expressions (`no-dynamic-delete`)
+
+Deleting dynamically computed keys can be dangerous and in some cases not well optimized.
+
+## Rule Details
+
+Using the `delete` operator on keys that aren't runtime constants could be a sign that you're using the wrong data structures.
+Using `Object`s with added and removed keys can cause occasional edge case bugs, such as if a key is named `"hasOwnProperty"`.
+Consider using a `Map` or `Set` if you’re storing collections of objects.
+
+Examples of **correct** code with this rule:
+
+```ts
+const container: { [i: string]: number } = {
+  /* ... */
+};
+
+// Constant runtime lookups by string index
+delete container.aaa;
+
+// Constants that must be accessed by []
+delete container[7];
+delete container['-Infinity'];
+```
+
+Examples of **incorrect** code with this rule:
+
+```ts
+// Can be replaced with the constant equivalents, such as container.aaa
+delete container['aaa'];
+delete container['Infinity'];
+
+// Dynamic, difficult-to-reason-about lookups
+const name = 'name';
+delete container[name];
+delete container[name.toUpperCase()];
+```
+
+## When Not To Use It
+
+When you know your keys are safe to delete, this rule can be unnecessary.
+Some environments such as older browsers might not support `Map` and `Set`.
+
+Do not consider this rule as performance advice before profiling your code's bottlenecks.
+Even repeated minor performance slowdowns likely do not significantly affect your application's general perceived speed.
+
+## Related to
+
+- TSLint: [no-dynamic-delete](https://palantir.github.io/tslint/rules/no-dynamic-delete)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-empty-function.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-empty-function.md
new file mode 100644
index 0000000000000000000000000000000000000000..356700d834eab86c12396e9c45cdeee13c3f6971
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-empty-function.md
@@ -0,0 +1,90 @@
+# Disallow empty functions (`no-empty-function`)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-empty-function`](https://eslint.org/docs/rules/no-empty-function) rule.
+It adds support for handling TypeScript specific code that would otherwise trigger the rule.
+
+One example of valid TypeScript specific code that would otherwise trigger the `no-empty-function` rule is the use of [parameter properties](https://www.typescriptlang.org/docs/handbook/classes.html#parameter-properties) in constructor functions.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-empty-function": "off",
+  "@typescript-eslint/no-empty-function": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/no-empty-function` options](https://eslint.org/docs/rules/no-empty-function#options).
+This rule adds the following options:
+
+```ts
+type AdditionalAllowOptionEntries =
+  | 'private-constructors'
+  | 'protected-constructors'
+  | 'decoratedFunctions';
+
+type AllowOptionEntries =
+  | BaseNoEmptyFunctionAllowOptionEntries
+  | AdditionalAllowOptionEntries;
+
+interface Options extends BaseNoEmptyFunctionOptions {
+  allow?: Array<AllowOptionEntries>;
+}
+const defaultOptions: Options = {
+  ...baseNoEmptyFunctionDefaultOptions,
+  allow: [],
+};
+```
+
+### allow: `private-constructors`
+
+Examples of correct code for the `{ "allow": ["private-constructors"] }` option:
+
+```ts
+class Foo {
+  private constructor() {}
+}
+```
+
+### allow: `protected-constructors`
+
+Examples of correct code for the `{ "allow": ["protected-constructors"] }` option:
+
+```ts
+class Foo {
+  protected constructor() {}
+}
+```
+
+### allow: `decoratedFunctions`
+
+Examples of correct code for the `{ "allow": ["decoratedFunctions"] }` option:
+
+```ts
+@decorator()
+function foo() {}
+
+class Foo {
+  @decorator()
+  foo() {}
+}
+```
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-empty-function": "off",
+  "@typescript-eslint/no-empty-function": ["error"]
+}
+```
+
+---
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-empty-function.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-empty-interface.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-empty-interface.md
new file mode 100644
index 0000000000000000000000000000000000000000..7df218a7eca8dd13b8d0225e67b6507725ce9f46
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-empty-interface.md
@@ -0,0 +1,64 @@
+# Disallow the declaration of empty interfaces (`no-empty-interface`)
+
+An empty interface is equivalent to its supertype. If the interface does not implement a supertype, then
+the interface is equivalent to an empty object (`{}`). In both cases it can be omitted.
+
+## Rule Details
+
+This rule aims to ensure that only meaningful interfaces are declared in the code.
+
+The following patterns are considered warnings:
+
+```ts
+// an empty interface
+interface Foo {}
+
+// an interface with only one supertype (Bar === Foo)
+interface Bar extends Foo {}
+
+// an interface with an empty list of supertypes
+interface Baz {}
+```
+
+The following patterns are not warnings:
+
+```ts
+// an interface with any number of members
+interface Foo {
+  name: string;
+}
+
+// same as above
+interface Bar {
+  age: number;
+}
+
+// an interface with more than one supertype
+// in this case the interface can be used as a replacement of a union type.
+interface Baz extends Foo, Bar {}
+```
+
+### Options
+
+This rule accepts a single object option with the following default configuration:
+
+```json
+{
+  "@typescript-eslint/no-empty-interface": [
+    "error",
+    {
+      "allowSingleExtends": false
+    }
+  ]
+}
+```
+
+- `allowSingleExtends: true` will silence warnings about extending a single interface without adding additional members
+
+## When Not To Use It
+
+If you don't care about having empty/meaningless interfaces, then you will not need this rule.
+
+## Compatibility
+
+- TSLint: [no-empty-interface](https://palantir.github.io/tslint/rules/no-empty-interface/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-explicit-any.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-explicit-any.md
new file mode 100644
index 0000000000000000000000000000000000000000..7aeb465874ebce9d8c78c03a81c76ceacc5cd8bd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-explicit-any.md
@@ -0,0 +1,181 @@
+# Disallow usage of the `any` type (`no-explicit-any`)
+
+Using the `any` type defeats the purpose of using TypeScript.
+When `any` is used, all compiler type checks around that value are ignored.
+
+## Rule Details
+
+This rule doesn't allow `any` types to be defined.
+It aims to keep TypeScript maximally useful.
+TypeScript has a compiler flag for `--noImplicitAny` that will prevent
+an `any` type from being implied by the compiler, but doesn't prevent
+`any` from being explicitly used.
+
+The following patterns are considered warnings:
+
+```ts
+const age: any = 'seventeen';
+```
+
+```ts
+const ages: any[] = ['seventeen'];
+```
+
+```ts
+const ages: Array<any> = ['seventeen'];
+```
+
+```ts
+function greet(): any {}
+```
+
+```ts
+function greet(): any[] {}
+```
+
+```ts
+function greet(): Array<any> {}
+```
+
+```ts
+function greet(): Array<Array<any>> {}
+```
+
+```ts
+function greet(param: Array<any>): string {}
+```
+
+```ts
+function greet(param: Array<any>): Array<any> {}
+```
+
+The following patterns are not warnings:
+
+```ts
+const age: number = 17;
+```
+
+```ts
+const ages: number[] = [17];
+```
+
+```ts
+const ages: Array<number> = [17];
+```
+
+```ts
+function greet(): string {}
+```
+
+```ts
+function greet(): string[] {}
+```
+
+```ts
+function greet(): Array<string> {}
+```
+
+```ts
+function greet(): Array<Array<string>> {}
+```
+
+```ts
+function greet(param: Array<string>): string {}
+```
+
+```ts
+function greet(param: Array<string>): Array<string> {}
+```
+
+## Options
+
+The rule accepts an options object with the following properties:
+
+```ts
+type Options = {
+  // if true, auto-fixing will be made available in which the "any" type is converted to an "unknown" type
+  fixToUnknown: boolean;
+  // specify if arrays from the rest operator are considered okay
+  ignoreRestArgs: boolean;
+};
+
+const defaults = {
+  fixToUnknown: false,
+  ignoreRestArgs: false,
+};
+```
+
+### `ignoreRestArgs`
+
+A boolean to specify if arrays from the rest operator are considered okay. `false` by default.
+
+Examples of **incorrect** code for the `{ "ignoreRestArgs": false }` option:
+
+```ts
+/*eslint @typescript-eslint/no-explicit-any: ["error", { "ignoreRestArgs": false }]*/
+
+function foo1(...args: any[]): void {}
+function foo2(...args: readonly any[]): void {}
+function foo3(...args: Array<any>): void {}
+function foo4(...args: ReadonlyArray<any>): void {}
+
+declare function bar(...args: any[]): void;
+
+const baz = (...args: any[]) => {};
+const qux = function (...args: any[]) {};
+
+type Quux = (...args: any[]) => void;
+type Quuz = new (...args: any[]) => void;
+
+interface Grault {
+  (...args: any[]): void;
+}
+interface Corge {
+  new (...args: any[]): void;
+}
+interface Garply {
+  f(...args: any[]): void;
+}
+```
+
+Examples of **correct** code for the `{ "ignoreRestArgs": true }` option:
+
+```ts
+/*eslint @typescript-eslint/no-explicit-any: ["error", { "ignoreRestArgs": true }]*/
+
+function foo1(...args: any[]): void {}
+function foo2(...args: readonly any[]): void {}
+function foo3(...args: Array<any>): void {}
+function foo4(...args: ReadonlyArray<any>): void {}
+
+declare function bar(...args: any[]): void;
+
+const baz = (...args: any[]) => {};
+const qux = function (...args: any[]) {};
+
+type Quux = (...args: any[]) => void;
+type Quuz = new (...args: any[]) => void;
+
+interface Grault {
+  (...args: any[]): void;
+}
+interface Corge {
+  new (...args: any[]): void;
+}
+interface Garply {
+  f(...args: any[]): void;
+}
+```
+
+## When Not To Use It
+
+If an unknown type or a library without typings is used
+and you want to be able to specify `any`.
+
+## Further Reading
+
+- TypeScript [any type](https://www.typescriptlang.org/docs/handbook/basic-types.html#any)
+
+## Compatibility
+
+- TSLint: [no-any](https://palantir.github.io/tslint/rules/no-any/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extra-non-null-assertion.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extra-non-null-assertion.md
new file mode 100644
index 0000000000000000000000000000000000000000..0991efdee52f9423a44d2d555f48f20bdeefa627
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extra-non-null-assertion.md
@@ -0,0 +1,49 @@
+# Disallow extra non-null assertion (`no-extra-non-null-assertion`)
+
+## Rule Details
+
+Examples of **incorrect** code for this rule:
+
+```ts
+const foo: { bar: number } | null = null;
+const bar = foo!!!.bar;
+```
+
+```ts
+function foo(bar: number | undefined) {
+  const bar: number = bar!!!;
+}
+```
+
+```ts
+function foo(bar?: { n: number }) {
+  return bar!?.n;
+}
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+const foo: { bar: number } | null = null;
+const bar = foo!.bar;
+```
+
+```ts
+function foo(bar: number | undefined) {
+  const bar: number = bar!;
+}
+```
+
+```ts
+function foo(bar?: { n: number }) {
+  return bar?.n;
+}
+```
+
+## How to use
+
+```json
+{
+  "@typescript-eslint/no-extra-non-null-assertion": ["error"]
+}
+```
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extra-parens.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extra-parens.md
new file mode 100644
index 0000000000000000000000000000000000000000..8173b2ef1adba5d54415d166cfd91c073fc8f19d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extra-parens.md
@@ -0,0 +1,22 @@
+# Disallow unnecessary parentheses (`no-extra-parens`)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-extra-parens`](https://eslint.org/docs/rules/no-extra-parens) rule.
+It adds support for TypeScript type assertions.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-extra-parens": "off",
+  "@typescript-eslint/no-extra-parens": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/no-extra-parens` options](https://eslint.org/docs/rules/no-extra-parens#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-extra-parens.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extra-semi.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extra-semi.md
new file mode 100644
index 0000000000000000000000000000000000000000..f6865bd8b54afaadd56e583ad092d69f8afe93e3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extra-semi.md
@@ -0,0 +1,22 @@
+# Disallow unnecessary semicolons (`no-extra-semi`)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-extra-semi`](https://eslint.org/docs/rules/no-extra-semi) rule.
+It adds support for class properties.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-extra-semi": "off",
+  "@typescript-eslint/no-extra-semi": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/no-extra-semi` options](https://eslint.org/docs/rules/no-extra-semi#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-extra-semi.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extraneous-class.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extraneous-class.md
new file mode 100644
index 0000000000000000000000000000000000000000..abc84f272b4d0c7bbe0bc8f68d4d2448b6a3ccd2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extraneous-class.md
@@ -0,0 +1,80 @@
+# Forbids the use of classes as namespaces (`no-extraneous-class`)
+
+This rule warns when a class is accidentally used as a namespace.
+
+## Rule Details
+
+From TSLint’s docs:
+
+> Users who come from a Java-style OO language may wrap their utility functions in an extra class,
+> instead of putting them at the top level.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+class EmptyClass {}
+
+class ConstructorOnly {
+  constructor() {
+    foo();
+  }
+}
+
+// Use an object instead:
+class StaticOnly {
+  static version = 42;
+  static hello() {
+    console.log('Hello, world!');
+  }
+}
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+class EmptyClass extends SuperClass {}
+
+class ParameterProperties {
+  constructor(public name: string) {}
+}
+
+const StaticOnly = {
+  version: 42,
+  hello() {
+    console.log('Hello, world!');
+  },
+};
+```
+
+### Options
+
+This rule accepts a single object option.
+
+```ts
+type Options = {
+  // allow extraneous classes if they only contain a constructor
+  allowConstructorOnly?: boolean;
+  // allow extraneous classes if they have no body (i.e. are empty)
+  allowEmpty?: boolean;
+  // allow extraneous classes if they only contain static members
+  allowStaticOnly?: boolean;
+  // allow extraneous classes if they have a decorator
+  allowWithDecorator?: boolean;
+};
+
+const defaultOptions: Options = {
+  allowConstructorOnly: false,
+  allowEmpty: false,
+  allowStaticOnly: false,
+  allowWithDecorator: false,
+};
+```
+
+## When Not To Use It
+
+You can disable this rule if you don’t have anyone who would make these kinds of mistakes on your
+team or if you use classes as namespaces.
+
+## Compatibility
+
+[`no-unnecessary-class`](https://palantir.github.io/tslint/rules/no-unnecessary-class/) from TSLint
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-floating-promises.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-floating-promises.md
new file mode 100644
index 0000000000000000000000000000000000000000..bda8c26b78554f5f5cbaa02480882a54b33de917
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-floating-promises.md
@@ -0,0 +1,104 @@
+# Requires Promise-like values to be handled appropriately (`no-floating-promises`)
+
+This rule forbids usage of Promise-like values in statements without handling
+their errors appropriately. Unhandled promises can cause several issues, such
+as improperly sequenced operations, ignored Promise rejections and more. Valid
+ways of handling a Promise-valued statement include `await`ing, returning, and
+either calling `.then()` with two arguments or `.catch()` with one argument.
+
+## Rule Details
+
+Examples of **incorrect** code for this rule:
+
+```ts
+const promise = new Promise((resolve, reject) => resolve('value'));
+promise;
+
+async function returnsPromise() {
+  return 'value';
+}
+returnsPromise().then(() => {});
+
+Promise.reject('value').catch();
+
+Promise.reject('value').finally();
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+const promise = new Promise((resolve, reject) => resolve('value'));
+await promise;
+
+async function returnsPromise() {
+  return 'value';
+}
+returnsPromise().then(
+  () => {},
+  () => {},
+);
+
+Promise.reject('value').catch(() => {});
+
+Promise.reject('value').finally(() => {});
+```
+
+## Options
+
+The rule accepts an options object with the following properties:
+
+```ts
+type Options = {
+  // if true, checking void expressions will be skipped
+  ignoreVoid?: boolean;
+  // if true, checking for async iife will be skipped
+  ignoreIIFE?: boolean;
+};
+
+const defaults = {
+  ignoreVoid: true,
+  ignoreIIFE: false,
+};
+```
+
+### `ignoreVoid`
+
+This allows you to stop the rule reporting promises consumed with void operator.
+This can be a good way to explicitly mark a promise as intentionally not awaited.
+
+Examples of **correct** code for this rule with `{ ignoreVoid: true }`:
+
+```ts
+async function returnsPromise() {
+  return 'value';
+}
+void returnsPromise();
+
+void Promise.reject('value');
+```
+
+With this option set to `true`, and if you are using `no-void`, you should turn on the [`allowAsAStatement`](https://eslint.org/docs/rules/no-void#allowasstatement) option.
+
+### `ignoreIIFE`
+
+This allows you to skip checking of async iife
+
+Examples of **correct** code for this rule with `{ ignoreIIFE: true }`:
+
+```ts
+await(async function () {
+  await res(1);
+})();
+
+(async function () {
+  await res(1);
+})();
+```
+
+## When Not To Use It
+
+If you do not use Promise-like values in your codebase, or want to allow them to remain unhandled.
+
+## Related to
+
+- TSLint: ['no-floating-promises'](https://palantir.github.io/tslint/rules/no-floating-promises/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-for-in-array.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-for-in-array.md
new file mode 100644
index 0000000000000000000000000000000000000000..c5d4c3f648dd725b3b717a5d45729dd7e9e4c560
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-for-in-array.md
@@ -0,0 +1,44 @@
+# Disallow iterating over an array with a for-in loop (`no-for-in-array`)
+
+This rule prohibits iterating over an array with a for-in loop.
+
+## Rule Details
+
+Rationale from TSLint:
+
+A for-in loop (`for (var k in o)`) iterates over the properties of an Object.
+While it is legal to use for-in loops with array types, it is not common.
+for-in will iterate over the indices of the array as strings, omitting any "holes" in
+the array.
+More common is to use for-of, which iterates over the values of an array.
+If you want to iterate over the indices, alternatives include:
+
+```js
+array.forEach((value, index) => { ... });
+for (const [index, value] of array.entries()) { ... }
+for (let i = 0; i < array.length; i++) { ... }
+```
+
+Examples of **incorrect** code for this rule:
+
+```js
+for (const x in [3, 4, 5]) {
+  console.log(x);
+}
+```
+
+Examples of **correct** code for this rule:
+
+```js
+for (const x in { a: 3, b: 4, c: 5 }) {
+  console.log(x);
+}
+```
+
+## When Not To Use It
+
+If you want to iterate through a loop using the indices in an array as strings, you can turn off this rule.
+
+## Related to
+
+- TSLint: ['no-for-in-array'](https://palantir.github.io/tslint/rules/no-for-in-array/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-implicit-any-catch.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-implicit-any-catch.md
new file mode 100644
index 0000000000000000000000000000000000000000..8ef946b42865645db0afef8e21f3ea5a310b19b9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-implicit-any-catch.md
@@ -0,0 +1,76 @@
+# Disallow usage of the implicit `any` type in catch clauses (`no-implicit-any-catch`)
+
+TypeScript 4.0 added support for adding an explicit `any` or `unknown` type annotation on a catch clause variable.
+
+By default, TypeScript will type a catch clause variable as `any`, so explicitly annotating it as `unknown` can add a lot of safety to your codebase.
+
+The `noImplicitAny` flag in TypeScript does not cover this for backwards compatibility reasons.
+
+## Rule Details
+
+This rule requires an explicit type to be declared on a catch clause variable.
+
+The following pattern is considered a warning:
+
+```ts
+try {
+  // ...
+} catch (e) {
+  // ...
+}
+```
+
+The following pattern is **_not_** considered a warning:
+
+<!-- TODO: prettier currently removes the type annotations, re-enable this once prettier is updated -->
+<!-- prettier-ignore-start -->
+
+```ts
+try {
+  // ...
+} catch (e: unknown) {
+  // ...
+}
+```
+
+<!-- prettier-ignore-end -->
+
+## Options
+
+The rule accepts an options object with the following properties:
+
+```ts
+type Options = {
+  // if false, disallow specifying `: any` as the error type as well. See also `no-explicit-any`
+  allowExplicitAny: boolean;
+};
+
+const defaults = {
+  allowExplicitAny: false,
+};
+```
+
+### `allowExplicitAny`
+
+The follow is is **_not_** considered a warning with `{ allowExplicitAny: true }`
+
+<!-- TODO: prettier currently removes the type annotations, re-enable this once prettier is updated -->
+<!-- prettier-ignore-start -->
+
+```ts
+try {
+  // ...
+} catch (e: any) {
+  // ...
+}
+```
+
+<!-- prettier-ignore-end -->
+
+## When Not To Use It
+
+If you are not using TypeScript 4.0 (or greater), then you will not be able to use this rule, annotations on catch clauses is not supported.
+
+## Further Reading
+
+- [TypeScript 4.0 Beta Release Notes](https://devblogs.microsoft.com/typescript/announcing-typescript-4-0-beta/#unknown-on-catch)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-implied-eval.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-implied-eval.md
new file mode 100644
index 0000000000000000000000000000000000000000..a03ce72793523b48d9c1aa34f7a3df2a407ebad7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-implied-eval.md
@@ -0,0 +1,105 @@
+# Disallow the use of `eval()`-like methods (`no-implied-eval`)
+
+It's considered a good practice to avoid using `eval()`. There are security and performance implications involved with doing so, which is why many linters recommend disallowing `eval()`. However, there are some other ways to pass a string and have it interpreted as JavaScript code that have similar concerns.
+
+The first is using `setTimeout()`, `setInterval()`, `setImmediate` or `execScript()` (Internet Explorer only), all of which can accept a string of code as their first argument
+
+```ts
+setTimeout('alert(`Hi!`);', 100);
+```
+
+or using `new Function()`
+
+```ts
+const fn = new Function('a', 'b', 'return a + b');
+```
+
+This is considered an implied `eval()` because a string of code is
+passed in to be interpreted. The same can be done with `setInterval()`, `setImmediate()` and `execScript()`. All interpret the JavaScript code in the global scope.
+
+The best practice is to avoid using `new Function()` or `execScript()` and always use a function for the first argument of `setTimeout()`, `setInterval()` and `setImmediate()`.
+
+## Rule Details
+
+This rule aims to eliminate implied `eval()` through the use of `new Function()`, `setTimeout()`, `setInterval()`, `setImmediate()` or `execScript()`.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+/* eslint @typescript-eslint/no-implied-eval: "error" */
+
+setTimeout('alert(`Hi!`);', 100);
+
+setInterval('alert(`Hi!`);', 100);
+
+setImmediate('alert(`Hi!`)');
+
+execScript('alert(`Hi!`)');
+
+window.setTimeout('count = 5', 10);
+
+window.setInterval('foo = bar', 10);
+
+const fn = '() = {}';
+setTimeout(fn, 100);
+
+const fn = () => {
+  return 'x = 10';
+};
+setTimeout(fn(), 100);
+
+const fn = new Function('a', 'b', 'return a + b');
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+/* eslint @typescript-eslint/no-implied-eval: "error" */
+
+setTimeout(function () {
+  alert('Hi!');
+}, 100);
+
+setInterval(function () {
+  alert('Hi!');
+}, 100);
+
+setImmediate(function () {
+  alert('Hi!');
+});
+
+execScript(function () {
+  alert('Hi!');
+});
+
+const fn = () => {};
+setTimeout(fn, 100);
+
+const foo = {
+  fn: function () {},
+};
+setTimeout(foo.fn, 100);
+setTimeout(foo.fn.bind(this), 100);
+
+class Foo {
+  static fn = () => {};
+}
+
+setTimeout(Foo.fn, 100);
+```
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-implied-eval": "off",
+  "@typescript-eslint/no-implied-eval": ["error"]
+}
+```
+
+## When Not To Use It
+
+If you want to allow `new Function()` or `setTimeout()`, `setInterval()`, `setImmediate()` and `execScript()` with string arguments, then you can safely disable this rule.
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-implied-eval.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-inferrable-types.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-inferrable-types.md
new file mode 100644
index 0000000000000000000000000000000000000000..91fdfe6784a477fe6df0baeeaf7dad8c8e0ade82
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-inferrable-types.md
@@ -0,0 +1,146 @@
+# Disallows explicit type declarations for variables or parameters initialized to a number, string, or boolean (`no-inferrable-types`)
+
+Explicit types where they can be easily inferred may add unnecessary verbosity.
+
+## Rule Details
+
+This rule disallows explicit type declarations on parameters, variables
+and properties where the type can be easily inferred from its value.
+
+## Options
+
+This rule accepts the following options:
+
+```ts
+interface Options {
+  ignoreParameters?: boolean;
+  ignoreProperties?: boolean;
+}
+```
+
+### Default
+
+The default options are:
+
+```JSON
+{
+  "ignoreParameters": false,
+  "ignoreProperties": false,
+}
+```
+
+With these options, the following patterns are valid:
+
+```ts
+const a = 10n;
+const a = -10n;
+const a = BigInt(10);
+const a = -BigInt(10);
+const a = false;
+const a = true;
+const a = Boolean(null);
+const a = !0;
+const a = 10;
+const a = +10;
+const a = -10;
+const a = Number('1');
+const a = +Number('1');
+const a = -Number('1');
+const a = Infinity;
+const a = +Infinity;
+const a = -Infinity;
+const a = NaN;
+const a = +NaN;
+const a = -NaN;
+const a = null;
+const a = /a/;
+const a = RegExp('a');
+const a = new RegExp('a');
+const a = 'str';
+const a = `str`;
+const a = String(1);
+const a = Symbol('a');
+const a = undefined;
+const a = void someValue;
+
+class Foo {
+  prop = 5;
+}
+
+function fn(a = 5, b = true) {}
+
+function fn(a: number, b: boolean, c: string) {}
+```
+
+The following are invalid:
+
+```ts
+const a: bigint = 10n;
+const a: bigint = -10n;
+const a: bigint = BigInt(10);
+const a: bigint = -BigInt(10);
+const a: boolean = false;
+const a: boolean = true;
+const a: boolean = Boolean(null);
+const a: boolean = !0;
+const a: number = 10;
+const a: number = +10;
+const a: number = -10;
+const a: number = Number('1');
+const a: number = +Number('1');
+const a: number = -Number('1');
+const a: number = Infinity;
+const a: number = +Infinity;
+const a: number = -Infinity;
+const a: number = NaN;
+const a: number = +NaN;
+const a: number = -NaN;
+const a: null = null;
+const a: RegExp = /a/;
+const a: RegExp = RegExp('a');
+const a: RegExp = new RegExp('a');
+const a: string = 'str';
+const a: string = `str`;
+const a: string = String(1);
+const a: symbol = Symbol('a');
+const a: undefined = undefined;
+const a: undefined = void someValue;
+
+class Foo {
+  prop: number = 5;
+}
+
+function fn(a: number = 5, b: boolean = true) {}
+```
+
+### `ignoreParameters`
+
+When set to true, the following pattern is considered valid:
+
+```ts
+function foo(a: number = 5, b: boolean = true) {
+  // ...
+}
+```
+
+### `ignoreProperties`
+
+When set to true, the following pattern is considered valid:
+
+```ts
+class Foo {
+  prop: number = 5;
+}
+```
+
+## When Not To Use It
+
+If you do not want to enforce inferred types.
+
+## Further Reading
+
+TypeScript [Inference](https://www.typescriptlang.org/docs/handbook/type-inference.html)
+
+## Compatibility
+
+TSLint: [no-inferrable-types](https://palantir.github.io/tslint/rules/no-inferrable-types/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-invalid-this.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-invalid-this.md
new file mode 100644
index 0000000000000000000000000000000000000000..a7f907380af90baf7403f74e37d81faa18d12c4e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-invalid-this.md
@@ -0,0 +1,26 @@
+# Disallow `this` keywords outside of classes or class-like objects (`no-invalid-this`)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-invalid-this`](https://eslint.org/docs/rules/no-invalid-this) rule.
+It adds support for TypeScript's `this` parameters.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-invalid-this": "off",
+  "@typescript-eslint/no-invalid-this": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/no-invalid-this` options](https://eslint.org/docs/rules/no-invalid-this#options).
+
+## When Not To Use It
+
+When you are indifferent as to how your variables are initialized.
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-invalid-this.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-invalid-void-type.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-invalid-void-type.md
new file mode 100644
index 0000000000000000000000000000000000000000..567d9c0bb33e050db83414748325a50a38142b36
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-invalid-void-type.md
@@ -0,0 +1,126 @@
+# Disallows usage of `void` type outside of generic or return types (`no-invalid-void-type`)
+
+Disallows usage of `void` type outside of return types or generic type arguments.
+If `void` is used as return type, it shouldn’t be a part of intersection/union type with most other types.
+
+## Rationale
+
+The `void` type means “nothing” or that a function does not return any value,
+in contrast with implicit `undefined` type which means that a function returns a value `undefined`.
+So “nothing” cannot be mixed with any other types, other than `never`, which accepts all types.
+If you need this - use the `undefined` type instead.
+
+## Rule Details
+
+This rule aims to ensure that the `void` type is only used in valid places.
+
+The following patterns are considered warnings:
+
+```ts
+type PossibleValues = string | number | void;
+type MorePossibleValues = string | ((number & any) | (string | void));
+
+function logSomething(thing: void) {}
+function printArg<T = void>(arg: T) {}
+
+logAndReturn<void>(undefined);
+
+interface Interface {
+  lambda: () => void;
+  prop: void;
+}
+
+class MyClass {
+  private readonly propName: void;
+}
+```
+
+The following patterns are not considered warnings:
+
+```ts
+type NoOp = () => void;
+
+function noop(): void {}
+
+let trulyUndefined = void 0;
+
+async function promiseMeSomething(): Promise<void> {}
+
+type stillVoid = void | never;
+```
+
+### Options
+
+```ts
+interface Options {
+  allowInGenericTypeArguments?: boolean | string[];
+  allowAsThisParameter?: boolean;
+}
+
+const defaultOptions: Options = {
+  allowInGenericTypeArguments: true,
+  allowAsThisParameter: false,
+};
+```
+
+#### `allowInGenericTypeArguments`
+
+This option lets you control if `void` can be used as a valid value for generic type parameters.
+
+Alternatively, you can provide an array of strings which whitelist which types may accept `void` as a generic type parameter.
+
+Any types considered valid by this option will be considered valid as part of a union type with `void`.
+
+This option is `true` by default.
+
+The following patterns are considered warnings with `{ allowInGenericTypeArguments: false }`:
+
+```ts
+logAndReturn<void>(undefined);
+
+let voidPromise: Promise<void> = new Promise<void>(() => {});
+let voidMap: Map<string, void> = new Map<string, void>();
+```
+
+The following patterns are considered warnings with `{ allowInGenericTypeArguments: ['Ex.Mx.Tx'] }`:
+
+```ts
+logAndReturn<void>(undefined);
+
+type NotAllowedVoid1 = Mx.Tx<void>;
+type NotAllowedVoid2 = Tx<void>;
+type NotAllowedVoid3 = Promise<void>;
+```
+
+The following patterns are not considered warnings with `{ allowInGenericTypeArguments: ['Ex.Mx.Tx'] }`:
+
+```ts
+type AllowedVoid = Ex.Mx.Tx<void>;
+type AllowedVoidUnion = void | Ex.Mx.Tx<void>;
+```
+
+#### `allowAsThisParameter`
+
+This option allows specifying a `this` parameter of a function to be `void` when set to `true`.
+This pattern can be useful to explicitly label function types that do not use a `this` argument. [See the TypeScript docs for more information](https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters-in-callbacks).
+
+This option is `false` by default.
+
+The following patterns are considered warnings with `{ allowAsThisParameter: false }` but valid with `{ allowAsThisParameter: true }`:
+
+```ts
+function doThing(this: void) {}
+class Example {
+  static helper(this: void) {}
+  callback(this: void) {}
+}
+```
+
+## When Not To Use It
+
+If you don't care about if `void` is used with other types,
+or in invalid places, then you don't need this rule.
+
+## Compatibility
+
+- TSLint: [invalid-void](https://palantir.github.io/tslint/rules/invalid-void/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-loop-func.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-loop-func.md
new file mode 100644
index 0000000000000000000000000000000000000000..d4e66d6c7de79ac39a22f22997bda19bf0501d7c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-loop-func.md
@@ -0,0 +1,22 @@
+# Disallow function declarations that contain unsafe references inside loop statements (`no-loop-func`)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-loop-func`](https://eslint.org/docs/rules/no-loop-func) rule.
+It adds support for TypeScript types.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-loop-func": "off",
+  "@typescript-eslint/no-loop-func": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/no-loop-func` options](https://eslint.org/docs/rules/no-loop-func#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-loop-func.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-loss-of-precision.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-loss-of-precision.md
new file mode 100644
index 0000000000000000000000000000000000000000..d6cf7b71c14a61fa8035a5af7c7a276a16f2ef97
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-loss-of-precision.md
@@ -0,0 +1,19 @@
+# Disallow literal numbers that lose precision (`no-loss-of-precision`)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-loss-of-precision`](https://eslint.org/docs/rules/no-loss-of-precision) rule.
+It adds support for [numeric separators](https://github.com/tc39/proposal-numeric-separator).
+Note that this rule requires ESLint v7.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-loss-of-precision": "off",
+  "@typescript-eslint/no-loss-of-precision": ["error"]
+}
+```
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-loss-of-precision.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-magic-numbers.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-magic-numbers.md
new file mode 100644
index 0000000000000000000000000000000000000000..f41204c132bf68df7dabfbba586b34f8ec9003ae
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-magic-numbers.md
@@ -0,0 +1,119 @@
+# Disallow magic numbers (`no-magic-numbers`)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-magic-numbers`](https://eslint.org/docs/rules/no-magic-numbers) rule.
+It adds support for:
+
+- numeric literal types (`type T = 1`),
+- `enum` members (`enum Foo { bar = 1 }`),
+- `readonly` class properties (`class Foo { readonly bar = 1 }`).
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-magic-numbers": "off",
+  "@typescript-eslint/no-magic-numbers": [
+    "error",
+    {
+      /* options */
+    }
+  ]
+}
+```
+
+## Options
+
+See [`eslint/no-magic-numbers` options](https://eslint.org/docs/rules/no-magic-numbers#options).
+This rule adds the following options:
+
+```ts
+interface Options extends BaseNoMagicNumbersOptions {
+  ignoreEnums?: boolean;
+  ignoreNumericLiteralTypes?: boolean;
+  ignoreReadonlyClassProperties?: boolean;
+}
+
+const defaultOptions: Options = {
+  ...baseNoMagicNumbersDefaultOptions,
+  ignoreEnums: false,
+  ignoreNumericLiteralTypes: false,
+  ignoreReadonlyClassProperties: false,
+};
+```
+
+### `ignoreEnums`
+
+A boolean to specify if enums used in TypeScript are considered okay. `false` by default.
+
+Examples of **incorrect** code for the `{ "ignoreEnums": false }` option:
+
+```ts
+/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreEnums": false }]*/
+
+enum foo = {
+    SECOND = 1000,
+}
+```
+
+Examples of **correct** code for the `{ "ignoreEnums": true }` option:
+
+```ts
+/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreEnums": true }]*/
+
+enum foo = {
+    SECOND = 1000,
+}
+```
+
+### `ignoreNumericLiteralTypes`
+
+A boolean to specify if numbers used in TypeScript numeric literal types are considered okay. `false` by default.
+
+Examples of **incorrect** code for the `{ "ignoreNumericLiteralTypes": false }` option:
+
+```ts
+/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreNumericLiteralTypes": false }]*/
+
+type SmallPrimes = 2 | 3 | 5 | 7 | 11;
+```
+
+Examples of **correct** code for the `{ "ignoreNumericLiteralTypes": true }` option:
+
+```ts
+/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreNumericLiteralTypes": true }]*/
+
+type SmallPrimes = 2 | 3 | 5 | 7 | 11;
+```
+
+### `ignoreReadonlyClassProperties`
+
+Examples of **incorrect** code for the `{ "ignoreReadonlyClassProperties": false }` option:
+
+```ts
+/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreReadonlyClassProperties": false }]*/
+
+class Foo {
+  readonly A = 1;
+  readonly B = 2;
+  public static readonly C = 1;
+  static readonly D = 1;
+}
+```
+
+Examples of **correct** code for the `{ "ignoreReadonlyClassProperties": true }` option:
+
+```ts
+/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreReadonlyClassProperties": true }]*/
+
+class Foo {
+  readonly A = 1;
+  readonly B = 2;
+  public static readonly C = 1;
+  static readonly D = 1;
+}
+```
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-magic-numbers.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-misused-new.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-misused-new.md
new file mode 100644
index 0000000000000000000000000000000000000000..f315fcac289caca61e87fe99bee9c1aa2eb01fce
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-misused-new.md
@@ -0,0 +1,41 @@
+# Enforce valid definition of `new` and `constructor` (`no-misused-new`)
+
+Warns on apparent attempts to define constructors for interfaces or `new` for classes.
+
+## Rule Details
+
+Examples of **incorrect** code for this rule.
+
+```ts
+class C {
+  new(): C;
+}
+
+interface I {
+  new (): I;
+  constructor(): void;
+}
+```
+
+Examples of **correct** code for this rule.
+
+```ts
+class C {
+  constructor() {}
+}
+interface I {
+  new (): C;
+}
+```
+
+## Options
+
+```json
+{
+  "@typescript-eslint/no-misused-new": "error"
+}
+```
+
+## Compatibility
+
+- TSLint: [no-misused-new](https://palantir.github.io/tslint/rules/no-misused-new/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-misused-promises.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-misused-promises.md
new file mode 100644
index 0000000000000000000000000000000000000000..6a4c2a5579216145c328c0be81609936c77a1412
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-misused-promises.md
@@ -0,0 +1,119 @@
+# Avoid using promises in places not designed to handle them (`no-misused-promises`)
+
+This rule forbids using promises in places where the TypeScript compiler
+allows them but they are not handled properly. These situations can often arise
+due to a missing `await` keyword or just a misunderstanding of the way async
+functions are handled/awaited.
+
+## Rule Details
+
+Examples of **incorrect** code for this rule with `checksConditionals: true`:
+
+```ts
+const promise = Promise.resolve('value');
+
+if (promise) {
+  // Do something
+}
+
+const val = promise ? 123 : 456;
+
+while (promise) {
+  // Do something
+}
+```
+
+Examples of **incorrect** code for this rule with `checksVoidReturn: true`:
+
+```ts
+[1, 2, 3].forEach(async value => {
+  await doSomething(value);
+});
+
+new Promise(async (resolve, reject) => {
+  await doSomething();
+  resolve();
+});
+
+const eventEmitter = new EventEmitter();
+eventEmitter.on('some-event', async () => {
+  await doSomething();
+});
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+const promise = Promise.resolve('value');
+
+if (await promise) {
+  // Do something
+}
+
+const val = (await promise) ? 123 : 456;
+
+while (await promise) {
+  // Do something
+}
+
+for (const value of [1, 2, 3]) {
+  await doSomething(value);
+}
+
+new Promise((resolve, reject) => {
+  // Do something
+  resolve();
+});
+
+const eventEmitter = new EventEmitter();
+eventEmitter.on('some-event', () => {
+  doSomething();
+});
+```
+
+## Options
+
+This rule accepts a single option which is an object with `checksConditionals`
+and `checksVoidReturn` properties indicating which types of misuse to flag.
+Both are enabled by default
+
+If you don't want functions that return promises where a void return is
+expected to be checked, your configuration will look like this:
+
+```json
+{
+  "@typescript-eslint/no-misused-promises": [
+    "error",
+    {
+      "checksVoidReturn": false
+    }
+  ]
+}
+```
+
+Likewise, if you don't want to check conditionals, you can configure the rule
+like this:
+
+```json
+{
+  "@typescript-eslint/no-misused-promises": [
+    "error",
+    {
+      "checksConditionals": false
+    }
+  ]
+}
+```
+
+## When Not To Use It
+
+If you do not use Promises in your codebase or are not concerned with possible
+misuses of them outside of what the TypeScript compiler will check.
+
+## Related to
+
+- [`no-floating-promises`](./no-floating-promises.md)
+
+## Further Reading
+
+- [TypeScript void function assignability](https://github.com/Microsoft/TypeScript/wiki/FAQ#why-are-functions-returning-non-void-assignable-to-function-returning-void)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-namespace.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-namespace.md
new file mode 100644
index 0000000000000000000000000000000000000000..da83ada2bbaaa6f1867c8ae7aaa6d9c8bcda6a7d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-namespace.md
@@ -0,0 +1,115 @@
+# Disallow the use of custom TypeScript modules and namespaces (`no-namespace`)
+
+Custom TypeScript modules (`module foo {}`) and namespaces (`namespace foo {}`) are considered outdated
+ways to organize TypeScript code. ES2015 module syntax is now preferred (`import`/`export`).
+
+This rule still allows the use of TypeScript module declarations to describe external APIs (`declare module 'foo' {}`).
+
+## Rule Details
+
+This rule aims to standardize the way modules are declared.
+
+## Options
+
+This rule, in its default state, does not require any argument. If you would like to enable one
+or more of the following you may pass an object with the options set as follows:
+
+- `allowDeclarations` set to `true` will allow you to `declare` custom TypeScript modules and namespaces (Default: `false`).
+- `allowDefinitionFiles` set to `true` will allow you to `declare` and use custom TypeScript modules and namespaces
+  inside definition files (Default: `true`).
+
+Examples of **incorrect** code for the default `{ "allowDeclarations": false, "allowDefinitionFiles": true }` options:
+
+```ts
+module foo {}
+namespace foo {}
+
+declare module foo {}
+declare namespace foo {}
+```
+
+Examples of **correct** code for the default `{ "allowDeclarations": false, "allowDefinitionFiles": true }` options:
+
+```ts
+declare module 'foo' {}
+
+// anything inside a d.ts file
+```
+
+### `allowDeclarations`
+
+Examples of **incorrect** code for the `{ "allowDeclarations": true }` option:
+
+```ts
+module foo {}
+namespace foo {}
+```
+
+Examples of **correct** code for the `{ "allowDeclarations": true }` option:
+
+```ts
+declare module 'foo' {}
+declare module foo {}
+declare namespace foo {}
+
+declare global {
+  namespace foo {}
+}
+
+declare module foo {
+  namespace foo {}
+}
+```
+
+Examples of **incorrect** code for the `{ "allowDeclarations": false }` option:
+
+```ts
+module foo {}
+namespace foo {}
+declare module foo {}
+declare namespace foo {}
+```
+
+Examples of **correct** code for the `{ "allowDeclarations": false }` option:
+
+```ts
+declare module 'foo' {}
+```
+
+### `allowDefinitionFiles`
+
+Examples of **incorrect** code for the `{ "allowDefinitionFiles": true }` option:
+
+```ts
+// if outside a d.ts file
+module foo {}
+namespace foo {}
+
+// if outside a d.ts file and allowDeclarations = false
+module foo {}
+namespace foo {}
+declare module foo {}
+declare namespace foo {}
+```
+
+Examples of **correct** code for the `{ "allowDefinitionFiles": true }` option:
+
+```ts
+declare module 'foo' {}
+
+// anything inside a d.ts file
+```
+
+## When Not To Use It
+
+If you are using the ES2015 module syntax, then you will not need this rule.
+
+## Further Reading
+
+- [Modules](https://www.typescriptlang.org/docs/handbook/modules.html)
+- [Namespaces](https://www.typescriptlang.org/docs/handbook/namespaces.html)
+- [Namespaces and Modules](https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html)
+
+## Compatibility
+
+- TSLint: [no-namespace](https://palantir.github.io/tslint/rules/no-namespace/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-non-null-asserted-optional-chain.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-non-null-asserted-optional-chain.md
new file mode 100644
index 0000000000000000000000000000000000000000..fdb2a8a18f0813fad76b032bbc932dce9f21e2c0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-non-null-asserted-optional-chain.md
@@ -0,0 +1,48 @@
+# Disallows using a non-null assertion after an optional chain expression (`no-non-null-asserted-optional-chain`)
+
+## Rule Details
+
+Optional chain expressions are designed to return `undefined` if the optional property is nullish.
+Using non-null assertions after an optional chain expression is wrong, and introduces a serious type safety hole into your code.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+/* eslint @typescript-eslint/no-non-null-asserted-optional-chain: "error" */
+
+foo?.bar!;
+foo?.bar()!;
+
+// Prior to TS3.9, foo?.bar!.baz meant (foo?.bar).baz - i.e. the non-null assertion is applied to the entire chain so far.
+// For TS3.9 and greater, the non-null assertion is only applied to the property itself, so it's safe.
+// The following is incorrect code if you're using less than TS3.9
+foo?.bar!.baz;
+foo?.bar!();
+foo?.bar!().baz;
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+/* eslint @typescript-eslint/no-non-null-asserted-optional-chain: "error" */
+
+foo?.bar;
+(foo?.bar).baz;
+foo?.bar();
+foo?.bar();
+foo?.bar().baz;
+
+// The following is correct code if you're using TS3.9 or greater
+foo?.bar!.baz;
+foo?.bar!();
+foo?.bar!().baz;
+```
+
+## When Not To Use It
+
+If you are not using TypeScript 3.7 (or greater), then you will not need to use this rule, as the operator is not supported.
+
+## Further Reading
+
+- [TypeScript 3.7 Release Notes](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html)
+- [Optional Chaining Proposal](https://github.com/tc39/proposal-optional-chaining/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-non-null-assertion.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-non-null-assertion.md
new file mode 100644
index 0000000000000000000000000000000000000000..04de5768628e2d02668032b9daf7c85c5963934c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-non-null-assertion.md
@@ -0,0 +1,35 @@
+# Disallows non-null assertions using the `!` postfix operator (`no-non-null-assertion`)
+
+## Rule Details
+
+Using non-null assertions cancels the benefits of the strict null-checking mode.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+interface Foo {
+  bar?: string;
+}
+
+const foo: Foo = getFoo();
+const includesBaz: boolean = foo.bar!.includes('baz');
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+interface Foo {
+  bar?: string;
+}
+
+const foo: Foo = getFoo();
+const includesBaz: boolean = foo.bar?.includes('baz') ?? false;
+```
+
+## When Not To Use It
+
+If you don't care about strict null-checking, then you will not need this rule.
+
+## Further Reading
+
+- [`no-non-null-assertion`](https://palantir.github.io/tslint/rules/no-non-null-assertion/) in [TSLint](https://palantir.github.io/tslint/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-parameter-properties.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-parameter-properties.md
new file mode 100644
index 0000000000000000000000000000000000000000..bb2fd269196706b5029aa585a6b033d9ff04fc10
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-parameter-properties.md
@@ -0,0 +1,367 @@
+# Disallow the use of parameter properties in class constructors (`no-parameter-properties`)
+
+Parameter properties can be confusing to those new to TypeScript as they are less explicit than other ways
+of declaring and initializing class members.
+
+## Rule Details
+
+This rule disallows the use of parameter properties in constructors, forcing the user to explicitly
+declare all properties in the class.
+
+## Options
+
+This rule, in its default state, does not require any argument and would completely disallow the use of parameter properties.
+If you would like to allow certain types of parameter properties then you may pass an object with the following options:
+
+- `allows`, an array containing one or more of the allowed modifiers. Valid values are:
+  - `readonly`, allows **readonly** parameter properties.
+  - `private`, allows **private** parameter properties.
+  - `protected`, allows **protected** parameter properties.
+  - `public`, allows **public** parameter properties.
+  - `private readonly`, allows **private readonly** parameter properties.
+  - `protected readonly`, allows **protected readonly** parameter properties.
+  - `public readonly`, allows **public readonly** parameter properties.
+
+### default
+
+Examples of **incorrect** code for this rule with no options at all:
+
+```ts
+class Foo {
+  constructor(readonly name: string) {}
+}
+
+class Foo {
+  constructor(private name: string) {}
+}
+
+class Foo {
+  constructor(protected name: string) {}
+}
+
+class Foo {
+  constructor(public name: string) {}
+}
+
+class Foo {
+  constructor(private readonly name: string) {}
+}
+
+class Foo {
+  constructor(protected readonly name: string) {}
+}
+
+class Foo {
+  constructor(public readonly name: string) {}
+}
+```
+
+Examples of **correct** code for this rule with no options at all:
+
+```ts
+class Foo {
+  constructor(name: string) {}
+}
+```
+
+### readonly
+
+Examples of **incorrect** code for the `{ "allows": ["readonly"] }` options:
+
+```ts
+class Foo {
+  constructor(private name: string) {}
+}
+
+class Foo {
+  constructor(protected name: string) {}
+}
+
+class Foo {
+  constructor(public name: string) {}
+}
+
+class Foo {
+  constructor(private readonly name: string) {}
+}
+
+class Foo {
+  constructor(protected readonly name: string) {}
+}
+
+class Foo {
+  constructor(public readonly name: string) {}
+}
+```
+
+Examples of **correct** code for the `{ "allows": ["readonly"] }` options:
+
+```ts
+class Foo {
+  constructor(name: string) {}
+}
+
+class Foo {
+  constructor(readonly name: string) {}
+}
+```
+
+### private
+
+Examples of **incorrect** code for the `{ "allows": ["private"] }` options:
+
+```ts
+class Foo {
+  constructor(readonly name: string) {}
+}
+
+class Foo {
+  constructor(protected name: string) {}
+}
+
+class Foo {
+  constructor(public name: string) {}
+}
+
+class Foo {
+  constructor(private readonly name: string) {}
+}
+
+class Foo {
+  constructor(protected readonly name: string) {}
+}
+
+class Foo {
+  constructor(public readonly name: string) {}
+}
+```
+
+Examples of **correct** code for the `{ "allows": ["private"] }` options:
+
+```ts
+class Foo {
+  constructor(name: string) {}
+}
+
+class Foo {
+  constructor(private name: string) {}
+}
+```
+
+### protected
+
+Examples of **incorrect** code for the `{ "allows": ["protected"] }` options:
+
+```ts
+class Foo {
+  constructor(readonly name: string) {}
+}
+
+class Foo {
+  constructor(private name: string) {}
+}
+
+class Foo {
+  constructor(public name: string) {}
+}
+
+class Foo {
+  constructor(private readonly name: string) {}
+}
+
+class Foo {
+  constructor(protected readonly name: string) {}
+}
+
+class Foo {
+  constructor(public readonly name: string) {}
+}
+```
+
+Examples of **correct** code for the `{ "allows": ["protected"] }` options:
+
+```ts
+class Foo {
+  constructor(name: string) {}
+}
+
+class Foo {
+  constructor(protected name: string) {}
+}
+```
+
+### public
+
+Examples of **incorrect** code for the `{ "allows": ["public"] }` options:
+
+```ts
+class Foo {
+  constructor(readonly name: string) {}
+}
+
+class Foo {
+  constructor(private name: string) {}
+}
+
+class Foo {
+  constructor(protected name: string) {}
+}
+
+class Foo {
+  constructor(private readonly name: string) {}
+}
+
+class Foo {
+  constructor(protected readonly name: string) {}
+}
+
+class Foo {
+  constructor(public readonly name: string) {}
+}
+```
+
+Examples of **correct** code for the `{ "allows": ["public"] }` options:
+
+```ts
+class Foo {
+  constructor(name: string) {}
+}
+
+class Foo {
+  constructor(public name: string) {}
+}
+```
+
+### private readonly
+
+Examples of **incorrect** code for the `{ "allows": ["private readonly"] }` options:
+
+```ts
+class Foo {
+  constructor(readonly name: string) {}
+}
+
+class Foo {
+  constructor(private name: string) {}
+}
+
+class Foo {
+  constructor(protected name: string) {}
+}
+
+class Foo {
+  constructor(public name: string) {}
+}
+
+class Foo {
+  constructor(protected readonly name: string) {}
+}
+
+class Foo {
+  constructor(public readonly name: string) {}
+}
+```
+
+Examples of **correct** code for the `{ "allows": ["private readonly"] }` options:
+
+```ts
+class Foo {
+  constructor(name: string) {}
+}
+
+class Foo {
+  constructor(private readonly name: string) {}
+}
+```
+
+### protected readonly
+
+Examples of **incorrect** code for the `{ "allows": ["protected readonly"] }` options:
+
+```ts
+class Foo {
+  constructor(readonly name: string) {}
+}
+
+class Foo {
+  constructor(private name: string) {}
+}
+
+class Foo {
+  constructor(protected name: string) {}
+}
+
+class Foo {
+  constructor(public name: string) {}
+}
+
+class Foo {
+  constructor(private readonly name: string) {}
+}
+
+class Foo {
+  constructor(public readonly name: string) {}
+}
+```
+
+Examples of **correct** code for the `{ "allows": ["protected readonly"] }` options:
+
+```ts
+class Foo {
+  constructor(name: string) {}
+}
+
+class Foo {
+  constructor(protected readonly name: string) {}
+}
+```
+
+### public readonly
+
+Examples of **incorrect** code for the `{ "allows": ["public readonly"] }` options:
+
+```ts
+class Foo {
+  constructor(readonly name: string) {}
+}
+
+class Foo {
+  constructor(private name: string) {}
+}
+
+class Foo {
+  constructor(protected name: string) {}
+}
+
+class Foo {
+  constructor(public name: string) {}
+}
+
+class Foo {
+  constructor(private readonly name: string) {}
+}
+
+class Foo {
+  constructor(protected readonly name: string) {}
+}
+```
+
+Examples of **correct** code for the `{ "allows": ["public readonly"] }` options:
+
+```ts
+class Foo {
+  constructor(name: string) {}
+}
+
+class Foo {
+  constructor(public readonly name: string) {}
+}
+```
+
+## When Not To Use It
+
+If you don't care about the using parameter properties in constructors, then you will not need this rule.
+
+## Compatibility
+
+- TSLint: [no-parameter-properties](https://palantir.github.io/tslint/rules/no-parameter-properties/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-redeclare.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-redeclare.md
new file mode 100644
index 0000000000000000000000000000000000000000..4b5164d6f0e02e0169bbc4b0cc3908ee3997aead
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-redeclare.md
@@ -0,0 +1,79 @@
+# Disallow variable redeclaration (`no-redeclare`)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-redeclare`](https://eslint.org/docs/rules/no-redeclare) rule.
+It adds support for TypeScript function overloads, and declaration merging.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-redeclare": "off",
+  "@typescript-eslint/no-redeclare": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/no-redeclare` options](https://eslint.org/docs/rules/no-redeclare#options).
+This rule adds the following options:
+
+```ts
+interface Options extends BaseNoRedeclareOptions {
+  ignoreDeclarationMerge?: boolean;
+}
+
+const defaultOptions: Options = {
+  ...baseNoRedeclareDefaultOptions,
+  ignoreDeclarationMerge: true,
+};
+```
+
+### `ignoreDeclarationMerge`
+
+When set to `true`, the rule will ignore declaration merges between the following sets:
+
+- interface + interface
+- namespace + namespace
+- class + interface
+- class + namespace
+- class + interface + namespace
+- function + namespace
+
+Examples of **correct** code with `{ ignoreDeclarationMerge: true }`:
+
+```ts
+interface A {
+  prop1: 1;
+}
+interface A {
+  prop2: 2;
+}
+
+namespace Foo {
+  export const a = 1;
+}
+namespace Foo {
+  export const b = 2;
+}
+
+class Bar {}
+namespace Bar {}
+
+function Baz() {}
+namespace Baz {}
+```
+
+**Note:** Even with this option set to true, this rule will report if you name a type and a variable the same name. **_This is intentional_**.
+Declaring a variable and a type and a variable the same is usually an accident, and it can lead to hard-to-understand code.
+If you have a rare case where you're intentionally naming a type the same name as a variable, use a disable comment. For example:
+
+```ts
+type something = string;
+// eslint-disable-next-line @typescript-eslint/no-redeclare -- intentionally naming the variable the same as the type
+const something = 2;
+```
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-redeclare.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-require-imports.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-require-imports.md
new file mode 100644
index 0000000000000000000000000000000000000000..655fc57bd60ab7ce6a49265159e711cef149178a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-require-imports.md
@@ -0,0 +1,34 @@
+# Disallows invocation of `require()` (`no-require-imports`)
+
+Prefer the newer ES6-style imports over `require()`.
+
+## Rule Details
+
+Examples of **incorrect** code for this rule:
+
+```ts
+var lib = require('lib');
+let lib2 = require('lib2');
+var lib5 = require('lib5'),
+  lib6 = require('lib6');
+import lib8 = require('lib8');
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+import { l } from 'lib';
+var lib3 = load('not_an_import');
+var lib4 = lib2.subImport;
+var lib7 = 700;
+import lib9 = lib2.anotherSubImport;
+import lib10 from 'lib10';
+```
+
+## When Not To Use It
+
+If you don't care about TypeScript module syntax, then you will not need this rule.
+
+## Compatibility
+
+- TSLint: [no-require-imports](https://palantir.github.io/tslint/rules/no-require-imports/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-shadow.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-shadow.md
new file mode 100644
index 0000000000000000000000000000000000000000..bcb40d4fb5a0af4fe861c9c386ba2d0a619c84bd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-shadow.md
@@ -0,0 +1,87 @@
+# Disallow variable declarations from shadowing variables declared in the outer scope (`no-shadow`)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-shadow`](https://eslint.org/docs/rules/no-shadow) rule.
+It adds support for TypeScript's `this` parameters and global augmentation, and adds options for TypeScript features.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-shadow": "off",
+  "@typescript-eslint/no-shadow": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/no-shadow` options](https://eslint.org/docs/rules/no-shadow#options).
+This rule adds the following options:
+
+```ts
+interface Options extends BaseNoShadowOptions {
+  ignoreTypeValueShadow?: boolean;
+  ignoreFunctionTypeParameterNameValueShadow?: boolean;
+}
+
+const defaultOptions: Options = {
+  ...baseNoShadowDefaultOptions,
+  ignoreTypeValueShadow: true,
+  ignoreFunctionTypeParameterNameValueShadow: true,
+};
+```
+
+### `ignoreTypeValueShadow`
+
+When set to `true`, the rule will ignore the case when you name a type the same as a variable.
+
+TypeScript allows types and variables to shadow one-another. This is generally safe because you cannot use variables in type locations without a `typeof` operator, so there's little risk of confusion.
+
+Examples of **correct** code with `{ ignoreTypeValueShadow: true }`:
+
+```ts
+type Foo = number;
+const Foo = 1;
+
+interface Bar {
+  prop: number;
+}
+const Bar = 'test';
+```
+
+### `ignoreFunctionTypeParameterNameValueShadow`
+
+When set to `true`, the rule will ignore the case when you name a function type argument the same as a variable.
+
+Each of a function type's arguments creates a value variable within the scope of the function type. This is done so that you can reference the type later using the `typeof` operator:
+
+```ts
+type Func = (test: string) => typeof test;
+
+declare const fn: Func;
+const result = fn('str'); // typeof result === string
+```
+
+This means that function type arguments shadow value variable names in parent scopes:
+
+```ts
+let test = 1;
+type TestType = typeof test; // === number
+type Func = (test: string) => typeof test; // this "test" references the argument, not the variable
+
+declare const fn: Func;
+const result = fn('str'); // typeof result === string
+```
+
+If you do not use the `typeof` operator in a function type return type position, you can safely turn this option on.
+
+Examples of **correct** code with `{ ignoreFunctionTypeParameterNameValueShadow: true }`:
+
+```ts
+const test = 1;
+type Func = (test: string) => typeof test;
+```
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-shadow.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-this-alias.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-this-alias.md
new file mode 100644
index 0000000000000000000000000000000000000000..324929e52c2b245e8a44e9dcb4dfe6b94f6421b7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-this-alias.md
@@ -0,0 +1,60 @@
+# Disallow aliasing `this` (`no-this-alias`)
+
+This rule prohibits assigning variables to `this`.
+
+## Rule Details
+
+Rationale from TSLint:
+
+> Assigning a variable to `this` instead of properly using arrow lambdas may be a symptom of pre-ES6 practices
+> or not managing scope well.
+>
+> Instead of storing a reference to `this` and using it inside a `function () {`:
+>
+> ```js
+> const self = this;
+>
+> setTimeout(function () {
+>   self.doWork();
+> });
+> ```
+>
+> Use `() =>` arrow lambdas, as they preserve `this` scope for you:
+>
+> ```js
+> setTimeout(() => {
+>   this.doWork();
+> });
+> ```
+
+Examples of **incorrect** code for this rule:
+
+(see the rationale above)
+
+Examples of **correct** code for this rule:
+
+(see the rationale above)
+
+### Options
+
+You can pass an object option:
+
+```jsonc
+{
+  "@typescript-eslint/no-this-alias": [
+    "error",
+    {
+      "allowDestructuring": true, // Allow `const { props, state } = this`; false by default
+      "allowedNames": ["self"] // Allow `const self = this`; `[]` by default
+    }
+  ]
+}
+```
+
+## When Not To Use It
+
+If you need to assign `this` to variables, you shouldn’t use this rule.
+
+## Related to
+
+- TSLint: [`no-this-assignment`](https://palantir.github.io/tslint/rules/no-this-assignment/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-throw-literal.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-throw-literal.md
new file mode 100644
index 0000000000000000000000000000000000000000..0b89f10e9276d4dd0b08c4093a952df68417b8fa
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-throw-literal.md
@@ -0,0 +1,94 @@
+# Disallow throwing literals as exceptions (`no-throw-literal`)
+
+It is considered good practice to only `throw` the `Error` object itself or an object using the `Error` object as base objects for user-defined exceptions.
+The fundamental benefit of `Error` objects is that they automatically keep track of where they were built and originated.
+
+This rule restricts what can be thrown as an exception. When it was first created, it only prevented literals from being thrown (hence the name), but it has now been expanded to only allow expressions which have a possibility of being an `Error` object.
+
+## Rule Details
+
+This rule is aimed at maintaining consistency when throwing exception by disallowing to throw literals and other expressions which cannot possibly be an `Error` object.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+/*eslint @typescript-eslint/no-throw-literal: "error"*/
+
+throw 'error';
+
+throw 0;
+
+throw undefined;
+
+throw null;
+
+const err = new Error();
+throw 'an ' + err;
+
+const err = new Error();
+throw `${err}`;
+
+const err = '';
+throw err;
+
+function err() {
+  return '';
+}
+throw err();
+
+const foo = {
+  bar: '',
+};
+throw foo.bar;
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+/*eslint @typescript-eslint/no-throw-literal: "error"*/
+
+throw new Error();
+
+throw new Error("error");
+
+const e = new Error("error");
+throw e;
+
+try {
+    throw new Error("error");
+} catch (e) {
+    throw e;
+}
+
+const err = new Error();
+throw err;
+
+function err() {
+  return new Error();
+}
+throw err();
+
+const foo = {
+  bar: new Error();
+}
+throw foo.bar;
+
+class CustomError extends Error {
+  // ...
+};
+throw new CustomError();
+```
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-throw-literal": "off",
+  "@typescript-eslint/no-throw-literal": ["error"]
+}
+```
+
+---
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-throw-literal.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-type-alias.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-type-alias.md
new file mode 100644
index 0000000000000000000000000000000000000000..5b720b2f331d001298f6fb414e92c35703bb1572
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-type-alias.md
@@ -0,0 +1,569 @@
+# Disallow the use of type aliases (`no-type-alias`)
+
+In TypeScript, type aliases serve three purposes:
+
+- Aliasing other types so that we can refer to them using a simpler name.
+
+```ts
+// this...
+type Person = {
+    firstName: string,
+    lastName: string,
+    age: number
+};
+
+function addPerson(person : Person) { ... }
+
+// is easier to read than this...
+function addPerson(person : { firstName: string, lastName: string, age: number}) { ... }
+```
+
+- Act sort of like an interface, providing a set of methods and properties that must exist
+  in the objects implementing the type.
+
+```ts
+type Person = {
+    firstName: string,
+    lastName: string,
+    age: number,
+    walk: () => void,
+    talk: () => void
+};
+
+// you know person will have 3 properties and 2 methods,
+// because the structure has already been defined.
+var person : Person = { ... }
+
+// so we can be sure that this will work
+person.walk();
+```
+
+- Act like mapping tools between types to allow quick modifications.
+
+```ts
+type Immutable<T> = { readonly [P in keyof T]: T[P] };
+
+type Person = {
+  name: string;
+  age: number;
+};
+
+type ImmutablePerson = Immutable<Person>;
+
+var person: ImmutablePerson = { name: 'John', age: 30 };
+person.name = 'Brad'; // error, readonly property
+```
+
+When aliasing, the type alias does not create a new type, it just creates a new name
+to refer to the original type. So aliasing primitives and other simple types, tuples, unions
+or intersections can some times be redundant.
+
+```ts
+// this doesn't make much sense
+type myString = string;
+```
+
+On the other hand, using a type alias as an interface can limit your ability to:
+
+- Reuse your code: interfaces can be extended or implemented by other types. Type aliases cannot.
+- Debug your code: interfaces create a new name, so is easy to identify the base type of an object
+  while debugging the application.
+
+Finally, mapping types is an advanced technique and leaving it open can quickly become a pain point
+in your application.
+
+## Rule Details
+
+This rule disallows the use of type aliases in favor of interfaces
+and simplified types (primitives, tuples, unions, intersections, etc).
+
+## Options
+
+This rule, in its default state, does not require any argument. If you would like to enable one
+or more of the following you may pass an object with the options set as follows:
+
+- `allowAliases` set to `"always"` will allow you to do aliasing (Defaults to `"never"`).
+- `allowCallbacks` set to `"always"` will allow you to use type aliases with callbacks (Defaults to `"never"`)
+- `allowConditionalTypes` set to `"always"` will allow you to use type aliases with conditional types (Defaults to `"never"`)
+- `allowConstructors` set to `"always"` will allow you to use type aliases with constructors (Defaults to `"never"`)
+- `allowLiterals` set to `"always"` will allow you to use type aliases with literal objects (Defaults to `"never"`)
+- `allowMappedTypes` set to `"always"` will allow you to use type aliases as mapping tools (Defaults to `"never"`)
+- `allowTupleTypes` set to `"always"` will allow you to use type aliases with tuples (Defaults to `"never"`)
+
+### `allowAliases`
+
+This applies to primitive types and reference types.
+
+The setting accepts the following values:
+
+- `"always"` or `"never"` to active or deactivate the feature.
+- `"in-unions"`, allows aliasing in union statements, e.g. `type Foo = string | string[];`
+- `"in-intersections"`, allows aliasing in intersection statements, e.g. `type Foo = string & string[];`
+- `"in-unions-and-intersections"`, allows aliasing in union and/or intersection statements.
+
+Examples of **correct** code for the `{ "allowAliases": "always" }` options:
+
+```ts
+// primitives
+type Foo = 'a';
+
+type Foo = 'a' | 'b';
+
+type Foo = string;
+
+type Foo = string | string[];
+
+type Foo = string & string[];
+
+// reference types
+interface Bar {}
+class Baz implements Bar {}
+
+type Foo = Bar;
+
+type Foo = Bar | Baz;
+
+type Foo = Bar & Baz;
+```
+
+Examples of **incorrect** code for the `{ "allowAliases": "in-unions" }` option:
+
+```ts
+// primitives
+type Foo = 'a';
+
+type Foo = string;
+
+type Foo = string & string[];
+
+// reference types
+interface Bar {}
+class Baz implements Bar {}
+
+type Foo = Bar;
+
+type Foo = Bar & Baz;
+```
+
+Examples of **correct** code for the `{ "allowAliases": "in-unions" }` option:
+
+```ts
+// primitives
+type Foo = 'a' | 'b';
+
+type Foo = string | string[];
+
+// reference types
+interface Bar {}
+class Baz implements Bar {}
+
+type Foo = Bar | Baz;
+```
+
+Examples of **incorrect** code for the `{ "allowAliases": "in-intersections" }` option:
+
+```ts
+// primitives
+type Foo = 'a';
+
+type Foo = 'a' | 'b';
+
+type Foo = string;
+
+type Foo = string | string[];
+
+// reference types
+interface Bar {}
+class Baz implements Bar {}
+
+type Foo = Bar;
+
+type Foo = Bar | Baz;
+```
+
+Examples of **correct** code for the `{ "allowAliases": "in-intersections" }` option:
+
+```ts
+// primitives
+type Foo = string & string[];
+
+// reference types
+interface Bar {}
+class Baz implements Bar {}
+
+type Foo = Bar & Baz;
+```
+
+Examples of **incorrect** code for the `{ "allowAliases": "in-unions-and-intersections" }` option:
+
+```ts
+// primitives
+type Foo = 'a';
+
+type Foo = string;
+
+// reference types
+interface Bar {}
+class Baz implements Bar {}
+
+type Foo = Bar;
+```
+
+Examples of **correct** code for the `{ "allowAliases": "in-unions-and-intersections" }` option:
+
+```ts
+// primitives
+type Foo = 'a' | 'b';
+
+type Foo = string | string[];
+
+type Foo = string & string[];
+
+// reference types
+interface Bar {}
+class Baz implements Bar {}
+
+type Foo = Bar | Baz;
+
+type Foo = Bar & Baz;
+```
+
+### `allowCallbacks`
+
+This applies to function types.
+
+The setting accepts the following values:
+
+- `"always"` or `"never"` to active or deactivate the feature.
+
+Examples of **correct** code for the `{ "allowCallbacks": "always" }` option:
+
+```ts
+type Foo = () => void;
+
+type Foo = (name: string) => string;
+
+class Person {}
+
+type Foo = (name: string, age: number) => string | Person;
+
+type Foo = (name: string, age: number) => string & Person;
+```
+
+### `allowConditionalTypes`
+
+This applies to conditional types.
+
+Examples of **correct** code for the `{ "allowConditionalTypes": "always" }` option:
+
+```ts
+type Foo<T> = T extends number ? number : null;
+```
+
+### `allowConstructors`
+
+This applies to constructor types.
+
+The setting accepts the following values:
+
+- `"always"` or `"never"` to active or deactivate the feature.
+
+Examples of **correct** code for the `{ "allowConstructors": "always" }` option:
+
+```ts
+type Foo = new () => void;
+```
+
+### `allowLiterals`
+
+This applies to literal types (`type Foo = { ... }`).
+
+The setting accepts the following options:
+
+- `"always"` or `"never"` to active or deactivate the feature.
+- `"in-unions"`, allows literals in union statements, e.g. `type Foo = string | string[];`
+- `"in-intersections"`, allows literals in intersection statements, e.g. `type Foo = string & string[];`
+- `"in-unions-and-intersections"`, allows literals in union and/or intersection statements.
+
+Examples of **correct** code for the `{ "allowLiterals": "always" }` options:
+
+```ts
+type Foo = {};
+
+type Foo = {
+  name: string;
+  age: number;
+};
+
+type Foo = {
+  name: string;
+  age: number;
+  walk: (miles: number) => void;
+};
+
+type Foo = { name: string } | { age: number };
+
+type Foo = { name: string } & { age: number };
+```
+
+Examples of **incorrect** code for the `{ "allowLiterals": "in-unions" }` option:
+
+```ts
+type Foo = {};
+
+type Foo = {
+  name: string;
+  age: number;
+};
+
+type Foo = {
+  name: string;
+  age: number;
+  walk: (miles: number) => void;
+};
+
+type Foo = { name: string } & { age: number };
+```
+
+Examples of **correct** code for the `{ "allowLiterals": "in-unions" }` option:
+
+```ts
+type Foo = { name: string } | { age: number };
+```
+
+Examples of **incorrect** code for the `{ "allowLiterals": "in-intersections" }` option:
+
+```ts
+type Foo = {};
+
+type Foo = {
+  name: string;
+  age: number;
+};
+
+type Foo = {
+  name: string;
+  age: number;
+  walk: (miles: number) => void;
+};
+
+type Foo = { name: string } | { age: number };
+```
+
+Examples of **correct** code for the `{ "allowLiterals": "in-intersections" }` option:
+
+```ts
+type Foo = { name: string } & { age: number };
+```
+
+Examples of **incorrect** code for the `{ "allowLiterals": "in-unions-and-intersections" }` option:
+
+```ts
+type Foo = {};
+
+type Foo = {
+  name: string;
+  age: number;
+};
+
+type Foo = {
+  name: string;
+  age: number;
+  walk: (miles: number) => void;
+};
+```
+
+Examples of **correct** code for the `{ "allowLiterals": "in-unions-and-intersections" }` option:
+
+```ts
+type Foo = { name: string } | { age: number };
+
+type Foo = { name: string } & { age: number };
+```
+
+### `allowMappedTypes`
+
+This applies to literal types.
+
+The setting accepts the following values:
+
+- `"always"` or `"never"` to active or deactivate the feature.
+- `"in-unions"`, allows aliasing in union statements, e.g. `type Foo = string | string[];`
+- `"in-intersections"`, allows aliasing in intersection statements, e.g. `type Foo = string & string[];`
+- `"in-unions-and-intersections"`, allows aliasing in union and/or intersection statements.
+
+Examples of **correct** code for the `{ "allowMappedTypes": "always" }` options:
+
+```ts
+type Foo<T> = { readonly [P in keyof T]: T[P] };
+
+type Foo<T> = { [P in keyof T]?: T[P] };
+
+type Foo<T, U> =
+  | { readonly [P in keyof T]: T[P] }
+  | { readonly [P in keyof U]: U[P] };
+
+type Foo<T, U> = { [P in keyof T]?: T[P] } | { [P in keyof U]?: U[P] };
+
+type Foo<T, U> = { readonly [P in keyof T]: T[P] } &
+  { readonly [P in keyof U]: U[P] };
+
+type Foo<T, U> = { [P in keyof T]?: T[P] } & { [P in keyof U]?: U[P] };
+```
+
+Examples of **incorrect** code for the `{ "allowMappedTypes": "in-unions" }` option:
+
+```ts
+type Foo<T> = { readonly [P in keyof T]: T[P] };
+
+type Foo<T> = { [P in keyof T]?: T[P] };
+
+type Foo<T, U> = { readonly [P in keyof T]: T[P] } &
+  { readonly [P in keyof U]: U[P] };
+
+type Foo<T, U> = { [P in keyof T]?: T[P] } & { [P in keyof U]?: U[P] };
+```
+
+Examples of **correct** code for the `{ "allowMappedTypes": "in-unions" }` option:
+
+```ts
+type Foo<T, U> =
+  | { readonly [P in keyof T]: T[P] }
+  | { readonly [P in keyof U]: U[P] };
+
+type Foo<T, U> = { [P in keyof T]?: T[P] } | { [P in keyof U]?: U[P] };
+```
+
+Examples of **incorrect** code for the `{ "allowMappedTypes": "in-intersections" }` option:
+
+```ts
+type Foo<T> = { readonly [P in keyof T]: T[P] };
+
+type Foo<T> = { [P in keyof T]?: T[P] };
+
+type Foo<T, U> =
+  | { readonly [P in keyof T]: T[P] }
+  | { readonly [P in keyof U]: U[P] };
+
+type Foo<T, U> = { [P in keyof T]?: T[P] } | { [P in keyof U]?: U[P] };
+```
+
+Examples of **correct** code for the `{ "allowMappedTypes": "in-intersections" }` option:
+
+```ts
+type Foo<T, U> = { readonly [P in keyof T]: T[P] } &
+  { readonly [P in keyof U]: U[P] };
+
+type Foo<T, U> = { [P in keyof T]?: T[P] } & { [P in keyof U]?: U[P] };
+```
+
+Examples of **incorrect** code for the `{ "allowMappedTypes": "in-unions-and-intersections" }` option:
+
+```ts
+type Foo<T> = { readonly [P in keyof T]: T[P] };
+
+type Foo<T> = { [P in keyof T]?: T[P] };
+```
+
+Examples of **correct** code for the `{ "allowMappedTypes": "in-unions-and-intersections" }` option:
+
+```ts
+type Foo<T, U> =
+  | { readonly [P in keyof T]: T[P] }
+  | { readonly [P in keyof U]: U[P] };
+
+type Foo<T, U> = { [P in keyof T]?: T[P] } | { [P in keyof U]?: U[P] };
+
+type Foo<T, U> = { readonly [P in keyof T]: T[P] } &
+  { readonly [P in keyof U]: U[P] };
+
+type Foo<T, U> = { [P in keyof T]?: T[P] } & { [P in keyof U]?: U[P] };
+```
+
+### `allowTupleTypes`
+
+This applies to tuple types (`type Foo = [number]`).
+
+The setting accepts the following options:
+
+- `"always"` or `"never"` to active or deactivate the feature.
+- `"in-unions"`, allows tuples in union statements, e.g. `type Foo = [string] | [string, string];`
+- `"in-intersections"`, allows tuples in intersection statements, e.g. `type Foo = [string] & [string, string];`
+- `"in-unions-and-intersections"`, allows tuples in union and/or intersection statements.
+
+Examples of **correct** code for the `{ "allowTupleTypes": "always" }` options:
+
+```ts
+type Foo = [number];
+
+type Foo = [number] | [number, number];
+
+type Foo = [number] & [number, number];
+
+type Foo = [number] | ([number, number] & [string, string]);
+```
+
+Examples of **incorrect** code for the `{ "allowTupleTypes": "in-unions" }` option:
+
+```ts
+type Foo = [number];
+
+type Foo = [number] & [number, number];
+
+type Foo = [string] & [number];
+```
+
+Examples of **correct** code for the `{ "allowTupleTypes": "in-unions" }` option:
+
+```ts
+type Foo = [number] | [number, number];
+
+type Foo = [string] | [number];
+```
+
+Examples of **incorrect** code for the `{ "allowTupleTypes": "in-intersections" }` option:
+
+```ts
+type Foo = [number];
+
+type Foo = [number] | [number, number];
+
+type Foo = [string] | [number];
+```
+
+Examples of **correct** code for the `{ "allowTupleTypes": "in-intersections" }` option:
+
+```ts
+type Foo = [number] & [number, number];
+
+type Foo = [string] & [number];
+```
+
+Examples of **incorrect** code for the `{ "allowTupleTypes": "in-unions-and-intersections" }` option:
+
+```ts
+type Foo = [number];
+
+type Foo = [string];
+```
+
+Examples of **correct** code for the `{ "allowLiterals": "in-unions-and-intersections" }` option:
+
+```ts
+type Foo = [number] & [number, number];
+
+type Foo = [string] | [number];
+```
+
+## When Not To Use It
+
+When you can't express some shape with an interface or you need to use a union, tuple type,
+callback, etc. that would cause the code to be unreadable or impractical.
+
+## Further Reading
+
+- [Advance Types](https://www.typescriptlang.org/docs/handbook/advanced-types.html)
+
+## Related to
+
+- TSLint: [interface-over-type-literal](https://palantir.github.io/tslint/rules/interface-over-type-literal/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-boolean-literal-compare.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-boolean-literal-compare.md
new file mode 100644
index 0000000000000000000000000000000000000000..972b48a3bde07381af8a8d54b4df437919db8784
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-boolean-literal-compare.md
@@ -0,0 +1,138 @@
+# Flags unnecessary equality comparisons against boolean literals (`no-unnecessary-boolean-literal-compare`)
+
+Comparing boolean values to boolean literals is unnecessary, those comparisons result in the same booleans. Using the boolean values directly, or via a unary negation (`!value`), is more concise and clearer.
+
+## Rule Details
+
+This rule ensures that you do not include unnecessary comparisons with boolean literals.
+A comparison is considered unnecessary if it checks a boolean literal against any variable with just the `boolean` type.
+A comparison is **_not_** considered unnecessary if the type is a union of booleans (`string | boolean`, `someObject | boolean`).
+
+**Warning**: Do not use this rule when `strictNullChecks` is disabled.
+ESLint is not able to distinguish between `false` and `undefined` or `null` values.
+This can cause unintended code changes when using autofix.
+
+**Note**: Throughout this page, only strict equality (`===` and `!==`) are
+used in the examples. However, the implementation of the rule does not
+distinguish between strict and loose equality. Any example below that uses
+`===` would be treated the same way if `==` was used, and any example below
+that uses `!==` would be treated the same way if `!=` was used.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+declare const someCondition: boolean;
+if (someCondition === true) {
+}
+```
+
+Examples of **correct** code for this rule
+
+```ts
+declare const someCondition: boolean;
+if (someCondition) {
+}
+
+declare const someObjectBoolean: boolean | Record<string, unknown>;
+if (someObjectBoolean === true) {
+}
+
+declare const someStringBoolean: boolean | string;
+if (someStringBoolean === true) {
+}
+```
+
+## Options
+
+The rule accepts an options object with the following properties.
+
+```ts
+type Options = {
+  // if false, comparisons between a nullable boolean variable to `true` will be checked and fixed
+  allowComparingNullableBooleansToTrue?: boolean;
+  // if false, comparisons between a nullable boolean variable to `false` will be checked and fixed
+  allowComparingNullableBooleansToFalse?: boolean;
+};
+```
+
+### Defaults
+
+This rule always checks comparisons between a boolean variable and a boolean
+literal. Comparisons between nullable boolean variables and boolean literals
+are **not** checked by default.
+
+```ts
+const defaults = {
+  allowComparingNullableBooleansToTrue: true,
+  allowComparingNullableBooleansToFalse: true,
+};
+```
+
+### `allowComparingNullableBooleansToTrue`
+
+Examples of **incorrect** code for this rule with `{ allowComparingNullableBooleansToTrue: false }`:
+
+```ts
+declare const someUndefinedCondition: boolean | undefined;
+if (someUndefinedCondition === true) {
+}
+
+declare const someNullCondition: boolean | null;
+if (someNullCondition !== true) {
+}
+```
+
+Examples of **correct** code for this rule with `{ allowComparingNullableBooleansToTrue: false }`:
+
+```ts
+declare const someUndefinedCondition: boolean | undefined;
+if (someUndefinedCondition) {
+}
+
+declare const someNullCondition: boolean | null;
+if (!someNullCondition) {
+}
+```
+
+### `allowComparingNullableBooleansToFalse`
+
+Examples of **incorrect** code for this rule with `{ allowComparingNullableBooleansToFalse: false }`:
+
+```ts
+declare const someUndefinedCondition: boolean | undefined;
+if (someUndefinedCondition === false) {
+}
+
+declare const someNullCondition: boolean | null;
+if (someNullCondition !== false) {
+}
+```
+
+Examples of **correct** code for this rule with `{ allowComparingNullableBooleansToFalse: false }`:
+
+```ts
+declare const someUndefinedCondition: boolean | undefined;
+if (someUndefinedCondition ?? true) {
+}
+
+declare const someNullCondition: boolean | null;
+if (!(someNullCondition ?? true)) {
+}
+```
+
+## Fixer
+
+|           Comparison           | Fixer Output                    | Notes                                                                               |
+| :----------------------------: | ------------------------------- | ----------------------------------------------------------------------------------- |
+|     `booleanVar === true`      | `booleanLiteral`                |                                                                                     |
+|     `booleanVar !== true`      | `!booleanLiteral`               |                                                                                     |
+|     `booleanVar === false`     | `!booleanLiteral`               |                                                                                     |
+|     `booleanVar !== false`     | `booleanLiteral`                |                                                                                     |
+| `nullableBooleanVar === true`  | `nullableBooleanVar`            | Only checked/fixed if the `allowComparingNullableBooleansToTrue` option is `false`  |
+| `nullableBooleanVar !== true`  | `!nullableBooleanVar`           | Only checked/fixed if the `allowComparingNullableBooleansToTrue` option is `false`  |
+| `nullableBooleanVar === false` | `nullableBooleanVar ?? true`    | Only checked/fixed if the `allowComparingNullableBooleansToFalse` option is `false` |
+| `nullableBooleanVar !== false` | `!(nullableBooleanVar ?? true)` | Only checked/fixed if the `allowComparingNullableBooleansToFalse` option is `false` |
+
+## Related to
+
+- TSLint: [no-boolean-literal-compare](https://palantir.github.io/tslint/rules/no-boolean-literal-compare)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-condition.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-condition.md
new file mode 100644
index 0000000000000000000000000000000000000000..bff0f548f50e3553dc424eb7921df263a10f08a6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-condition.md
@@ -0,0 +1,107 @@
+# Prevents conditionals where the type is always truthy or always falsy (`no-unnecessary-condition`)
+
+Any expression being used as a condition must be able to evaluate as truthy or falsy in order to be considered "necessary". Conversely, any expression that always evaluates to truthy or always evaluates to falsy, as determined by the type of the expression, is considered unnecessary and will be flagged by this rule.
+
+The following expressions are checked:
+
+- Arguments to the `&&`, `||` and `?:` (ternary) operators
+- Conditions for `if`, `for`, `while`, and `do-while` statements
+- Base values of optional chain expressions
+
+Examples of **incorrect** code for this rule:
+
+```ts
+function head<T>(items: T[]) {
+  // items can never be nullable, so this is unnecessary
+  if (items) {
+    return items[0].toUpperCase();
+  }
+}
+
+function foo(arg: 'bar' | 'baz') {
+  // arg is never nullable or empty string, so this is unnecessary
+  if (arg) {
+  }
+}
+
+function bar<T>(arg: string) {
+  // arg can never be nullish, so ?. is unnecessary
+  return arg?.length;
+}
+
+// Checks array predicate return types, where possible
+[
+  [1, 2],
+  [3, 4],
+].filter(t => t); // number[] is always truthy
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+function head<T>(items: T[]) {
+  // Necessary, since items.length might be 0
+  if (items.length) {
+    return items[0].toUpperCase();
+  }
+}
+
+function foo(arg: string) {
+  // Necessary, since foo might be ''.
+  if (arg) {
+  }
+}
+
+function bar(arg?: string | null) {
+  // Necessary, since arg might be nullish
+  return arg?.length;
+}
+
+[0, 1, 2, 3].filter(t => t); // number can be truthy or falsy
+```
+
+## Options
+
+```ts
+type Options = {
+  // if true, the rule will ignore constant loop conditions
+  allowConstantLoopConditions?: boolean;
+  // if true, the rule will not error when running with a tsconfig that has strictNullChecks turned **off**
+  allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing?: boolean;
+};
+
+const defaultOptions: Options = {
+  allowConstantLoopConditions: false,
+  allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing: false,
+};
+```
+
+### `allowConstantLoopConditions`
+
+Example of correct code for `{ allowConstantLoopConditions: true }`:
+
+```ts
+while (true) {}
+for (; true; ) {}
+do {} while (true);
+```
+
+### `allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing`
+
+If this is set to `false`, then the rule will error on every file whose `tsconfig.json` does _not_ have the `strictNullChecks` compiler option (or `strict`) set to `true`.
+
+Without `strictNullChecks`, TypeScript essentially erases `undefined` and `null` from the types. This means when this rule inspects the types from a variable, **it will not be able to tell that the variable might be `null` or `undefined`**, which essentially makes this rule useless.
+
+You should be using `strictNullChecks` to ensure complete type-safety in your codebase.
+
+If for some reason you cannot turn on `strictNullChecks`, but still want to use this rule - you can use this option to allow it - but know that the behavior of this rule is _undefined_ with the compiler option turned off. We will not accept bug reports if you are using this option.
+
+## When Not To Use It
+
+The main downside to using this rule is the need for type information.
+
+## Related To
+
+- ESLint: [no-constant-condition](https://eslint.org/docs/rules/no-constant-condition) - `no-unnecessary-condition` is essentially a stronger version of `no-constant-condition`, but requires type information.
+
+- [strict-boolean-expressions](./strict-boolean-expressions.md) - a more opinionated version of `no-unnecessary-condition`. `strict-boolean-expressions` enforces a specific code style, while `no-unnecessary-condition` is about correctness.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-qualifier.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-qualifier.md
new file mode 100644
index 0000000000000000000000000000000000000000..56aba181cbae611b61078059cbd43b29e201aa0a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-qualifier.md
@@ -0,0 +1,79 @@
+# Warns when a namespace qualifier is unnecessary (`no-unnecessary-qualifier`)
+
+## Rule Details
+
+This rule aims to let users know when a namespace or enum qualifier is unnecessary,
+whether used for a type or for a value.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+namespace A {
+  export type B = number;
+  const x: A.B = 3;
+}
+```
+
+```ts
+namespace A {
+  export const x = 3;
+  export const y = A.x;
+}
+```
+
+```ts
+enum A {
+  B,
+  C = A.B,
+}
+```
+
+```ts
+namespace A {
+  export namespace B {
+    export type T = number;
+    const x: A.B.T = 3;
+  }
+}
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+namespace X {
+  export type T = number;
+}
+
+namespace Y {
+  export const x: X.T = 3;
+}
+```
+
+```ts
+enum A {
+  X,
+  Y,
+}
+
+enum B {
+  Z = A.X,
+}
+```
+
+```ts
+namespace X {
+  export type T = number;
+  namespace Y {
+    type T = string;
+    const x: X.T = 0;
+  }
+}
+```
+
+## When Not To Use It
+
+If you don't care about having unneeded namespace or enum qualifiers, then you don't need to use this rule.
+
+## Further Reading
+
+- TSLint: [no-unnecessary-qualifier](https://palantir.github.io/tslint/rules/no-unnecessary-qualifier/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-arguments.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-arguments.md
new file mode 100644
index 0000000000000000000000000000000000000000..f5caaa42cdfa844579a48f6e75d7723bda7915f9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-arguments.md
@@ -0,0 +1,53 @@
+# Enforces that type arguments will not be used if not required (`no-unnecessary-type-arguments`)
+
+Warns if an explicitly specified type argument is the default for that type parameter.
+
+## Rule Details
+
+Type parameters in TypeScript may specify a default value.
+For example:
+
+```ts
+function f<T = number>() {}
+```
+
+It is redundant to provide an explicit type parameter equal to that default.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+function f<T = number>() {}
+f<number>();
+
+function g<T = number, U = string>() {}
+g<string, string>();
+
+class C<T = number> {}
+function h(c: C<number>) {}
+new C<number>();
+class D extends C<number> {}
+
+interface I<T = number> {}
+class Impl implements I<number> {}
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+function f<T = number>() {}
+f<string>();
+
+function g<T = number, U = string>() {}
+g<number, number>();
+
+class C<T = number> {}
+new C<string>();
+class D extends C<string> {}
+
+interface I<T = number> {}
+class Impl implements I<string> {}
+```
+
+## Related to
+
+- TSLint: [use-default-type-parameter](https://palantir.github.io/tslint/rules/use-default-type-parameter)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-assertion.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-assertion.md
new file mode 100644
index 0000000000000000000000000000000000000000..4464b6483ef18aea56c2f5f210f4d2d1bc3dfd98
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-assertion.md
@@ -0,0 +1,73 @@
+# Warns if a type assertion does not change the type of an expression (`no-unnecessary-type-assertion`)
+
+This rule prohibits using a type assertion that does not change the type of an expression.
+
+## Rule Details
+
+This rule aims to prevent unnecessary type assertions.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+const foo = 3;
+const bar = foo!;
+```
+
+```ts
+const foo = <3>3;
+```
+
+```ts
+type Foo = 3;
+const foo = <Foo>3;
+```
+
+```ts
+type Foo = 3;
+const foo = 3 as Foo;
+```
+
+```ts
+function foo(x: number): number {
+  return x!; // unnecessary non-null
+}
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+const foo = <number>3;
+```
+
+```ts
+const foo = 3 as number;
+```
+
+```ts
+const foo = 'foo' as const;
+```
+
+```ts
+function foo(x: number | undefined): number {
+  return x!;
+}
+```
+
+### Options
+
+This rule optionally takes an object with a single property `typesToIgnore`, which can be set to a list of type names to ignore.
+
+For example, with `@typescript-eslint/no-unnecessary-type-assertion: ["error", { typesToIgnore: ['Foo'] }]`, the following is **correct** code":
+
+```ts
+type Foo = 3;
+const foo: Foo = 3;
+```
+
+## When Not To Use It
+
+If you don't care about having no-op type assertions in your code, then you can turn off this rule.
+
+## Related to
+
+- TSLint: ['no-unnecessary-type-assertion`](https://palantir.github.io/tslint/rules/no-unnecessary-type-assertion/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-constraint.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-constraint.md
new file mode 100644
index 0000000000000000000000000000000000000000..8656ace566e3f200daeed2fa3821932e3d38cc9f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-constraint.md
@@ -0,0 +1,55 @@
+# Disallows unnecessary constraints on generic types (`no-unnecessary-type-constraint`)
+
+## Rule Details
+
+Type parameters (`<T>`) may be "constrained" with an `extends` keyword ([docs](https://www.typescriptlang.org/docs/handbook/generics.html#generic-constraints)).
+When not provided, type parameters happen to default to:
+
+- As of TypeScript 3.9: `unknown` ([docs](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-9.html#type-parameters-that-extend-any-no-longer-act-as-any))
+- Before that, as of 3.5: `any` ([docs](https://devblogs.microsoft.com/typescript/announcing-typescript-3-5/#breaking-changes))
+
+It is therefore redundant to `extend` from these types in later versions of TypeScript.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+interface FooAny<T extends any> {}
+interface FooUnknown<T extends unknown> {}
+
+type BarAny<T extends any> = {};
+type BarUnknown<T extends unknown> = {};
+
+class BazAny<T extends any> {
+  quxUnknown<U extends unknown>() {}
+}
+
+class BazUnknown<T extends unknown> {
+  quxUnknown<U extends unknown>() {}
+}
+
+const QuuxAny = <T extends any>() => {};
+const QuuxUnknown = <T extends unknown>() => {};
+
+function QuuzAny<T extends any>() {}
+function QuuzUnknown<T extends unknown>() {}
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+interface Foo<T> {}
+
+type Bar<T> = {};
+
+class Baz<T> {
+    qux<U> { }
+}
+
+const Quux = <T>() => {};
+
+function Quuz<T>() {}
+```
+
+## When Not To Use It
+
+If you don't care about the specific styles of your type constraints, or never use them in the first place, then you will not need this rule.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-assignment.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-assignment.md
new file mode 100644
index 0000000000000000000000000000000000000000..64207e5365ec1778ed858c1de9287d39eb50d8f1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-assignment.md
@@ -0,0 +1,72 @@
+# Disallows assigning any to variables and properties (`no-unsafe-assignment`)
+
+Despite your best intentions, the `any` type can sometimes leak into your codebase.
+Assigning an `any` typed value to a variable can be hard to pick up on, particularly if it leaks in from an external library. Operations on the variable will not be checked at all by TypeScript, so it creates a potential safety hole, and source of bugs in your codebase.
+
+## Rule Details
+
+This rule disallows assigning `any` to a variable, and assigning `any[]` to an array destructuring.
+This rule also compares the assigned type to the variable's type to ensure you don't assign an unsafe `any` in a generic position to a receiver that's expecting a specific type. For example, it will error if you assign `Set<any>` to a variable declared as `Set<string>`.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+const x = 1 as any,
+  y = 1 as any;
+const [x] = 1 as any;
+const [x] = [] as any[];
+const [x] = [1 as any];
+[x] = [1] as [any];
+
+function foo(a = 1 as any) {}
+class Foo {
+  constructor(private a = 1 as any) {}
+}
+class Foo {
+  private a = 1 as any;
+}
+
+// generic position examples
+const x: Set<string> = new Set<any>();
+const x: Map<string, string> = new Map<string, any>();
+const x: Set<string[]> = new Set<any[]>();
+const x: Set<Set<Set<string>>> = new Set<Set<Set<any>>>();
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+const x = 1,
+  y = 1;
+const [x] = [1];
+[x] = [1] as [number];
+
+function foo(a = 1) {}
+class Foo {
+  constructor(private a = 1) {}
+}
+class Foo {
+  private a = 1;
+}
+
+// generic position examples
+const x: Set<string> = new Set<string>();
+const x: Map<string, string> = new Map<string, string>();
+const x: Set<string[]> = new Set<string[]>();
+const x: Set<Set<Set<string>>> = new Set<Set<Set<string>>>();
+```
+
+There are cases where the rule allows assignment of `any` to `unknown`.
+
+Example of `any` to `unknown` assignment that are allowed.
+
+```ts
+const x: unknown = y as any;
+const x: unknown[] = y as any[];
+const x: Set<unknown> = y as Set<any>;
+```
+
+## Related to
+
+- [`no-explicit-any`](./no-explicit-any.md)
+- TSLint: [`no-unsafe-any`](https://palantir.github.io/tslint/rules/no-unsafe-any/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-call.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-call.md
new file mode 100644
index 0000000000000000000000000000000000000000..1000e5921b8c12fac0a0b5b1c48a40c691f8b06f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-call.md
@@ -0,0 +1,48 @@
+# Disallows calling an any type value (`no-unsafe-call`)
+
+Despite your best intentions, the `any` type can sometimes leak into your codebase.
+The arguments to, and return value of calling an `any` typed variable are not checked at all by TypeScript, so it creates a potential safety hole, and source of bugs in your codebase.
+
+## Rule Details
+
+This rule disallows calling any variable that is typed as `any`.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+declare const anyVar: any;
+declare const nestedAny: { prop: any };
+
+anyVar();
+anyVar.a.b();
+
+nestedAny.prop();
+nestedAny.prop['a']();
+
+new anyVar();
+new nestedAny.prop();
+
+anyVar`foo`;
+nestedAny.prop`foo`;
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+declare const typedVar: () => void;
+declare const typedNested: { prop: { a: () => void } };
+
+typedVar();
+typedNested.prop.a();
+
+(() => {})();
+
+new Map();
+
+String.raw`foo`;
+```
+
+## Related to
+
+- [`no-explicit-any`](./no-explicit-any.md)
+- TSLint: [`no-unsafe-any`](https://palantir.github.io/tslint/rules/no-unsafe-any/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-member-access.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-member-access.md
new file mode 100644
index 0000000000000000000000000000000000000000..e64294f4e9908b948ac19adafe8e7ebb37101fd8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-member-access.md
@@ -0,0 +1,54 @@
+# Disallows member access on any typed variables (`no-unsafe-member-access`)
+
+Despite your best intentions, the `any` type can sometimes leak into your codebase.
+Member access on `any` typed variables is not checked at all by TypeScript, so it creates a potential safety hole, and source of bugs in your codebase.
+
+## Rule Details
+
+This rule disallows member access on any variable that is typed as `any`.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+declare const anyVar: any;
+declare const nestedAny: { prop: any };
+
+anyVar.a;
+anyVar.a.b;
+anyVar['a'];
+anyVar['a']['b'];
+
+nestedAny.prop.a;
+nestedAny.prop['a'];
+
+const key = 'a';
+nestedAny.prop[key];
+
+// Using an any to access a member is unsafe
+const arr = [1, 2, 3];
+arr[anyVar];
+nestedAny[anyVar];
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+declare const properlyTyped: { prop: { a: string } };
+
+properlyTyped.prop.a;
+properlyTyped.prop['a'];
+
+const key = 'a';
+properlyTyped.prop[key];
+
+const arr = [1, 2, 3];
+arr[1];
+const idx = 1;
+arr[idx];
+arr[idx++];
+```
+
+## Related to
+
+- [`no-explicit-any`](./no-explicit-any.md)
+- TSLint: [`no-unsafe-any`](https://palantir.github.io/tslint/rules/no-unsafe-any/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-return.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-return.md
new file mode 100644
index 0000000000000000000000000000000000000000..9810be3cf16f294f87747b5039acad506df601e4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-return.md
@@ -0,0 +1,89 @@
+# Disallows returning any from a function (`no-unsafe-return`)
+
+Despite your best intentions, the `any` type can sometimes leak into your codebase.
+Returned `any` typed values not checked at all by TypeScript, so it creates a potential safety hole, and source of bugs in your codebase.
+
+## Rule Details
+
+This rule disallows returning `any` or `any[]` from a function.
+This rule also compares the return type to the function's declared/inferred return type to ensure you don't return an unsafe `any` in a generic position to a receiver that's expecting a specific type. For example, it will error if you return `Set<any>` from a function declared as returning `Set<string>`.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+function foo1() {
+  return 1 as any;
+}
+function foo2() {
+  return Object.create(null);
+}
+const foo3 = () => {
+  return 1 as any;
+};
+const foo4 = () => Object.create(null);
+
+function foo5() {
+  return [] as any[];
+}
+function foo6() {
+  return [] as Array<any>;
+}
+function foo7() {
+  return [] as readonly any[];
+}
+function foo8() {
+  return [] as Readonly<any[]>;
+}
+const foo9 = () => {
+  return [] as any[];
+};
+const foo10 = () => [] as any[];
+
+const foo11 = (): string[] => [1, 2, 3] as any[];
+
+// generic position examples
+function assignability1(): Set<string> {
+  return new Set<any>([1]);
+}
+type TAssign = () => Set<string>;
+const assignability2: TAssign = () => new Set<any>([true]);
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+function foo1() {
+  return 1;
+}
+function foo2() {
+  return Object.create(null) as Record<string, unknown>;
+}
+
+const foo3 = () => [];
+const foo4 = () => ['a'];
+
+function assignability1(): Set<string> {
+  return new Set<string>(['foo']);
+}
+type TAssign = () => Set<string>;
+const assignability2: TAssign = () => new Set(['foo']);
+```
+
+There are cases where the rule allows to return `any` to `unknown`.
+
+Examples of `any` to `unknown` return that are allowed.
+
+```ts
+function foo1(): unknown {
+  return JSON.parse(singleObjString); // Return type for JSON.parse is any.
+}
+
+function foo2(): unknown[] {
+  return [] as any[];
+}
+```
+
+## Related to
+
+- [`no-explicit-any`](./no-explicit-any.md)
+- TSLint: [`no-unsafe-any`](https://palantir.github.io/tslint/rules/no-unsafe-any/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unused-expressions.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unused-expressions.md
new file mode 100644
index 0000000000000000000000000000000000000000..cb61c2ed0409715d1f78e02d879673b96a8af5c7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unused-expressions.md
@@ -0,0 +1,22 @@
+# Disallow unused expressions (`no-unused-expressions`)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-unused-expressions`](https://eslint.org/docs/rules/no-unused-expressions) rule.
+It adds support for optional call expressions `x?.()`, and directive in module declarations.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-unused-expressions": "off",
+  "@typescript-eslint/no-unused-expressions": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/no-unused-expressions` options](https://eslint.org/docs/rules/no-unused-expressions#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-unused-expressions.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unused-vars-experimental.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unused-vars-experimental.md
new file mode 100644
index 0000000000000000000000000000000000000000..918cbc595f5d53b9f127de4c720535dc568dcea3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unused-vars-experimental.md
@@ -0,0 +1,115 @@
+# Disallow unused variables and arguments (`no-unused-vars-experimental`)
+
+Variables that are declared and not used anywhere in the code are most likely an error due to incomplete refactoring. Such variables take up space in the code and can lead to confusion by readers.
+
+## Rule Details
+
+This rule leverages the TypeScript compiler's unused variable checks to report. This means that with all rule options set to `false`, it should report the same errors as if you used both the `noUnusedLocals` and `noUnusedParameters` compiler options.
+
+This rule is vastly different to, and maintains no compatibility with the base ESLint version of the rule.
+
+### Limitations
+
+There are two limitations to this rule when compared with ESLint's `no-unused-vars` rule, which are imposed by the fact that it directly uses TypeScript's implementation.
+
+1. This rule only works on files that TypeScript deems is a module (i.e. it has an `import` or an `export` statement).
+2. The rule is significantly less configurable, as it cannot deviate too far from the base implementation.
+
+## Supported Nodes
+
+This rule supports checks on the following features:
+
+- Declarations:
+  - `var` / `const` / `let`
+  - `function`
+  - `class`
+  - `enum`
+  - `interface`
+  - `type`
+- Class methods
+- Class properties and parameter properties
+- Function parameters
+- Generic type parameters
+- Import statements
+
+## Options
+
+```ts
+type Options = {
+  ignoredNamesRegex?: string | boolean;
+  ignoreArgsIfArgsAfterAreUsed?: boolean;
+};
+
+const defaultOptions: Options = {
+  ignoredNamesRegex: '^_',
+  ignoreArgsIfArgsAfterAreUsed: false,
+};
+```
+
+### `ignoredNamesRegex`
+
+This option accepts a regex string to match names against.
+Any matched names will be ignored and have no errors reported.
+If you set it to false, it will never ignore any names.
+
+The default value is `'^_'` (i.e. matches any name prefixed with an underscore).
+
+Examples of valid code with `{ variables: { ignoredNamesRegex: '^_' } }`.
+
+```ts
+const _unusedVar = 'unused';
+class _Unused {
+  private _unused = 1;
+  private _unusedMethod() {}
+}
+function _unusedFunction() {}
+enum _UnusedEnum {
+  a = 1,
+}
+interface _UnusedInterface {}
+type _UnusedType = {};
+```
+
+**_NOTE:_** The TypeScript compiler automatically ignores imports, function arguments, type parameter declarations, and object destructuring variables prefixed with an underscore.
+As this is hard-coded into the compiler, we cannot change this.
+
+Examples of valid code based on the unchangeable compiler settings
+
+```ts
+import _UnusedDefault, { _UnusedNamed } from 'foo';
+export function foo(_unusedProp: string) {}
+export class Foo<_UnusedGeneric> {}
+const { prop: _unusedDestructure } = foo;
+```
+
+## `ignoreArgsIfArgsAfterAreUsed`
+
+When true, this option will ignore unused function arguments if the arguments proceeding arguments are used.
+
+Examples of invalid code with `{ ignoreArgsIfArgsAfterAreUsed: false }`
+
+```ts
+function foo(unused: string, used: number) {
+  console.log(used);
+}
+
+class Foo {
+  constructor(unused: string, public used: number) {
+    console.log(used);
+  }
+}
+```
+
+Examples of valid code with `{ ignoreArgsIfArgsAfterAreUsed: true }`
+
+```ts
+function foo(unused: string, used: number) {
+  console.log(used);
+}
+
+class Foo {
+  constructor(unused: string, public used: number) {
+    console.log(used);
+  }
+}
+```
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unused-vars.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unused-vars.md
new file mode 100644
index 0000000000000000000000000000000000000000..5eaf167a379a743b8930ac7c36f13726b601989c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unused-vars.md
@@ -0,0 +1,22 @@
+# Disallow unused variables (`no-unused-vars`)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-unused-vars`](https://eslint.org/docs/rules/no-unused-vars) rule.
+It adds support for TypeScript features, such as types.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-unused-vars": "off",
+  "@typescript-eslint/no-unused-vars": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/no-unused-vars` options](https://eslint.org/docs/rules/no-unused-vars#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-unused-vars.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-use-before-define.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-use-before-define.md
new file mode 100644
index 0000000000000000000000000000000000000000..dfdab4d60f7076eb0db4d8f808cedbffe37cbbe4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-use-before-define.md
@@ -0,0 +1,106 @@
+# Disallow the use of variables before they are defined (`no-use-before-define`)
+
+## PLEASE READ THIS ISSUE BEFORE USING THIS RULE [#1856](https://github.com/typescript-eslint/typescript-eslint/issues/1856)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-use-before-define`](https://eslint.org/docs/rules/no-use-before-define) rule.
+It adds support for `type`, `interface` and `enum` declarations.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-use-before-define": "off",
+  "@typescript-eslint/no-use-before-define": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/no-use-before-define` options](https://eslint.org/docs/rules/no-use-before-define#options).
+This rule adds the following options:
+
+```ts
+interface Options extends BaseNoUseBeforeDefineOptions {
+  enums?: boolean;
+  typedefs?: boolean;
+  ignoreTypeReferences?: boolean;
+}
+
+const defaultOptions: Options = {
+  ...baseNoUseBeforeDefineDefaultOptions,
+  enums: true,
+  typedefs: true,
+  ignoreTypeReferences: true,
+};
+```
+
+### `enums`
+
+If this is `true`, this rule warns every reference to a enum before the enum declaration.
+If this is `false`, this rule will ignore references to enums, when the reference is in a child scope.
+
+Examples of **incorrect** code for the `{ "enums": false }` option:
+
+```ts
+/*eslint no-use-before-define: ["error", { "enums": false }]*/
+
+const x = Foo.FOO;
+
+enum Foo {
+  FOO,
+}
+```
+
+Examples of **correct** code for the `{ "enums": false }` option:
+
+```ts
+/*eslint no-use-before-define: ["error", { "enums": false }]*/
+
+function foo() {
+  return Foo.FOO;
+}
+
+enum Foo {
+  FOO,
+}
+```
+
+### `typedefs`
+
+If this is `true`, this rule warns every reference to a type before the type declaration.
+If this is `false`, this rule will ignore references to types.
+
+Examples of **correct** code for the `{ "typedefs": false }` option:
+
+```ts
+/*eslint no-use-before-define: ["error", { "typedefs": false }]*/
+
+let myVar: StringOrNumber;
+type StringOrNumber = string | number;
+```
+
+### `ignoreTypeReferences`
+
+If this is `true`, this rule ignores all type references, such as in type annotations and assertions.
+If this is `false`, this will will check all type references.
+
+Examples of **correct** code for the `{ "ignoreTypeReferences": true }` option:
+
+```ts
+/*eslint no-use-before-define: ["error", { "ignoreTypeReferences": true }]*/
+
+let var1: StringOrNumber;
+type StringOrNumber = string | number;
+
+let var2: Enum;
+enum Enum {}
+```
+
+### Other Options
+
+See [`eslint/no-use-before-define` options](https://eslint.org/docs/rules/no-use-before-define#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-use-before-define.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-useless-constructor.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-useless-constructor.md
new file mode 100644
index 0000000000000000000000000000000000000000..524ad4b92d9c40c4016d5a69766b064e1551eb02
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-useless-constructor.md
@@ -0,0 +1,26 @@
+# Disallow unnecessary constructors (`no-useless-constructor`)
+
+## Rule Details
+
+This rule extends the base [`eslint/no-useless-constructor`](https://eslint.org/docs/rules/no-useless-constructor) rule.
+It adds support for:
+
+- constructors marked as `protected` / `private` (i.e. marking a constructor as non-public),
+- `public` constructors when there is no superclass,
+- constructors with only parameter properties.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-useless-constructor": "off",
+  "@typescript-eslint/no-useless-constructor": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/no-useless-constructor` options](https://eslint.org/docs/rules/no-useless-constructor#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/no-useless-constructor.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-var-requires.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-var-requires.md
new file mode 100644
index 0000000000000000000000000000000000000000..104a54943cdadd8ac12214bb83951d2360484e75
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-var-requires.md
@@ -0,0 +1,29 @@
+# Disallows the use of require statements except in import statements (`no-var-requires`)
+
+In other words, the use of forms such as `var foo = require("foo")` are banned. Instead use ES6 style imports or `import foo = require("foo")` imports.
+
+## Rule Details
+
+Examples of **incorrect** code for this rule:
+
+```ts
+var foo = require('foo');
+const foo = require('foo');
+let foo = require('foo');
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+import foo = require('foo');
+require('foo');
+import foo from 'foo';
+```
+
+## When Not To Use It
+
+If you don't care about TypeScript module syntax, then you will not need this rule.
+
+## Compatibility
+
+- TSLint: [no-var-requires](https://palantir.github.io/tslint/rules/no-var-requires/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/non-nullable-type-assertion-style.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/non-nullable-type-assertion-style.md
new file mode 100644
index 0000000000000000000000000000000000000000..473f83b0a9bf4e34ec124003aab04bf7d1c74cc4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/non-nullable-type-assertion-style.md
@@ -0,0 +1,27 @@
+# Prefers a non-null assertion over explicit type cast when possible (`non-nullable-type-assertion-style`)
+
+This rule detects when an `as` cast is doing the same job as a `!` would, and suggests fixing the code to be an `!`.
+
+## Rule Details
+
+Examples of **incorrect** code for this rule:
+
+```ts
+const maybe = Math.random() > 0.5 ? '' : undefined;
+
+const definitely = maybe as string;
+const alsoDefinitely = <string>maybe;
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+const maybe = Math.random() > 0.5 ? '' : undefined;
+
+const definitely = maybe!;
+const alsoDefinitely = maybe!;
+```
+
+## When Not To Use It
+
+If you don't mind having unnecessarily verbose type casts, you can avoid this rule.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-as-const.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-as-const.md
new file mode 100644
index 0000000000000000000000000000000000000000..b710a8275e7aa383e17daac9c16ec814b3684321
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-as-const.md
@@ -0,0 +1,28 @@
+# Prefer usage of `as const` over literal type (`prefer-as-const`)
+
+This rule recommends usage of `const` assertion when type primitive value is equal to type.
+
+## Rule Details
+
+Examples of **incorrect** code for this rule:
+
+```ts
+let bar: 2 = 2;
+let foo = <'bar'>'bar';
+let foo = { bar: 'baz' as 'baz' };
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+let foo = 'bar';
+let foo = 'bar' as const;
+let foo: 'bar' = 'bar' as const;
+let bar = 'bar' as string;
+let foo = <string>'bar';
+let foo = { bar: 'baz' };
+```
+
+## When Not To Use It
+
+If you are using TypeScript < 3.4
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-enum-initializers.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-enum-initializers.md
new file mode 100644
index 0000000000000000000000000000000000000000..1e8f568d721fa301897cce937cc252417e5119c4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-enum-initializers.md
@@ -0,0 +1,70 @@
+# Prefer initializing each enums member value (`prefer-enum-initializers`)
+
+This rule recommends having each `enum`s member value explicitly initialized.
+
+`enum`s are a practical way to organize semantically related constant values. However, by implicitly defining values, `enum`s can lead to unexpected bugs if it's modified without paying attention to the order of its items.
+
+## Rule Details
+
+`enum`s infers sequential numbers automatically when initializers are omitted:
+
+```ts
+enum Status {
+  Open, // infer 0
+  Closed, // infer 1
+}
+```
+
+If a new member is added to the top of `Status`, both `Open` and `Closed` would have its values altered:
+
+```ts
+enum Status {
+  Pending, // infer 0
+  Open, // infer 1
+  Closed, // infer 2
+}
+```
+
+Examples of **incorrect** code for this rule:
+
+```ts
+enum Status {
+  Open = 1,
+  Close,
+}
+
+enum Direction {
+  Up,
+  Down,
+}
+
+enum Color {
+  Red,
+  Green = 'Green'
+  Blue = 'Blue',
+}
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+enum Status {
+  Open = 'Open',
+  Close = 'Close',
+}
+
+enum Direction {
+  Up = 1,
+  Down = 2,
+}
+
+enum Color {
+  Red = 'Red',
+  Green = 'Green',
+  Blue = 'Blue',
+}
+```
+
+## When Not To Use It
+
+If you don't care about `enum`s having implicit values you can safely disable this rule.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-for-of.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-for-of.md
new file mode 100644
index 0000000000000000000000000000000000000000..0b1e5570d757d8d91673bcff41e7bb03a385e192
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-for-of.md
@@ -0,0 +1,41 @@
+# Prefer a ‘for-of’ loop over a standard ‘for’ loop if the index is only used to access the array being iterated (`prefer-for-of`)
+
+This rule recommends a for-of loop when the loop index is only used to read from an array that is being iterated.
+
+## Rule Details
+
+For cases where the index is only used to read from the array being iterated, a for-of loop is easier to read and write.
+
+Examples of **incorrect** code for this rule:
+
+```js
+for (let i = 0; i < arr.length; i++) {
+  console.log(arr[i]);
+}
+```
+
+Examples of **correct** code for this rule:
+
+```js
+for (const x of arr) {
+  console.log(x);
+}
+
+for (let i = 0; i < arr.length; i++) {
+  // i is used to write to arr, so for-of could not be used.
+  arr[i] = 0;
+}
+
+for (let i = 0; i < arr.length; i++) {
+  // i is used independent of arr, so for-of could not be used.
+  console.log(i, arr[i]);
+}
+```
+
+## When Not To Use It
+
+If you transpile for browsers that do not support for-of loops, you may wish to use traditional for loops that produce more compact code.
+
+## Related to
+
+- TSLint: ['prefer-for-of'](https://palantir.github.io/tslint/rules/prefer-for-of/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-function-type.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-function-type.md
new file mode 100644
index 0000000000000000000000000000000000000000..5c3bc55c9f2c110a9a271db8b16ceda79ea8366b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-function-type.md
@@ -0,0 +1,81 @@
+# Use function types instead of interfaces with call signatures (`prefer-function-type`)
+
+## Rule Details
+
+This rule suggests using a function type instead of an interface or object type literal with a single call signature.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+interface Foo {
+  (): string;
+}
+```
+
+```ts
+function foo(bar: { (): number }): number {
+  return bar();
+}
+```
+
+```ts
+interface Foo extends Function {
+  (): void;
+}
+```
+
+```ts
+interface MixinMethod {
+  // returns the function itself, not the `this` argument.
+  (arg: string): this;
+}
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+interface Foo {
+  (): void;
+  bar: number;
+}
+```
+
+```ts
+function foo(bar: { (): string; baz: number }): string {
+  return bar();
+}
+```
+
+```ts
+interface Foo {
+  bar: string;
+}
+interface Bar extends Foo {
+  (): void;
+}
+```
+
+```ts
+// returns the `this` argument of function, retaining it's type.
+type MixinMethod = <TSelf>(this: TSelf, arg: string) => TSelf;
+// a function that returns itself is much clearer in this form.
+type ReturnsSelf = (arg: string) => ReturnsSelf;
+```
+
+```ts
+// multiple call signatures (overloads) is allowed:
+interface Overloaded {
+  (data: string): number;
+  (id: number): string;
+}
+// this is equivelent to Overloaded interface.
+type Intersection = ((data: string) => number) & ((id: number) => string);
+```
+
+## When Not To Use It
+
+If you specifically want to use an interface or type literal with a single call signature for stylistic reasons, you can disable this rule.
+
+## Further Reading
+
+- TSLint: [`callable-types`](https://palantir.github.io/tslint/rules/callable-types/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-includes.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-includes.md
new file mode 100644
index 0000000000000000000000000000000000000000..07cc9ea44e12fba688c86a2ea84c41cd23b88c54
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-includes.md
@@ -0,0 +1,71 @@
+# Enforce `includes` method over `indexOf` method (`prefer-includes`)
+
+Until ES5, we were using `String#indexOf` method to check whether a string contains an arbitrary substring or not.
+Until ES2015, we were using `Array#indexOf` method to check whether an array contains an arbitrary value or not.
+
+ES2015 has added `String#includes` and ES2016 has added `Array#includes`.
+It makes code more understandable if we use those `includes` methods for the purpose.
+
+## Rule Details
+
+This rule is aimed at suggesting `includes` method if `indexOf` method was used to check whether an object contains an arbitrary value or not.
+
+If the receiver object of the `indexOf` method call has `includes` method and the two methods have the same parameters, this rule does suggestion.
+There are such types: `String`, `Array`, `ReadonlyArray`, and typed arrays.
+
+Additionally, this rule reports the tests of simple regular expressions in favor of `String#includes`.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+let str: string;
+let array: any[];
+let readonlyArray: ReadonlyArray<any>;
+let typedArray: UInt8Array;
+let userDefined: {
+  indexOf(x: any): number;
+  includes(x: any): boolean;
+};
+
+str.indexOf(value) !== -1;
+array.indexOf(value) !== -1;
+readonlyArray.indexOf(value) === -1;
+typedArray.indexOf(value) > -1;
+userDefined.indexOf(value) >= 0;
+
+// simple RegExp test
+/foo/.test(str);
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+let array: any[];
+let readonlyArray: ReadonlyArray<any>;
+let typedArray: UInt8Array;
+let userDefined: {
+  indexOf(x: any): number;
+  includes(x: any): boolean;
+};
+let mismatchExample: {
+  indexOf(x: any, fromIndex?: number): number;
+  includes(x: any): boolean;
+};
+
+str.includes(value);
+array.includes(value);
+readonlyArray.includes(value);
+typedArray.includes(value);
+userDefined.includes(value);
+
+// the two methods have different parameters.
+mismatchExample.indexOf(value) >= 0;
+```
+
+## Options
+
+There are no options.
+
+## When Not To Use It
+
+If you don't want to suggest `includes`, you can safely turn this rule off.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-literal-enum-member.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-literal-enum-member.md
new file mode 100644
index 0000000000000000000000000000000000000000..e2350f3571130024c4f40cd882d3c3073a03484d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-literal-enum-member.md
@@ -0,0 +1,51 @@
+# Require that all enum members be literal values to prevent unintended enum member name shadow issues (`prefer-literal-enum-member`)
+
+TypeScript allows the value of an enum member to be many different kinds of valid JavaScript expressions. However, because enums create their own scope whereby each enum member becomes a variable in that scope, unexpected values could be used at runtime. Example:
+
+```ts
+const imOutside = 2;
+const b = 2;
+enum Foo {
+  outer = imOutside,
+  a = 1,
+  b = a,
+  c = b,
+  // does c == Foo.b == Foo.c == 1?
+  // or does c == b == 2?
+}
+```
+
+The answer is that `Foo.c` will be `1` at runtime. The [playground](https://www.typescriptlang.org/play/#src=const%20imOutside%20%3D%202%3B%0D%0Aconst%20b%20%3D%202%3B%0D%0Aenum%20Foo%20%7B%0D%0A%20%20%20%20outer%20%3D%20imOutside%2C%0D%0A%20%20%20%20a%20%3D%201%2C%0D%0A%20%20%20%20b%20%3D%20a%2C%0D%0A%20%20%20%20c%20%3D%20b%2C%0D%0A%20%20%20%20%2F%2F%20does%20c%20%3D%3D%20Foo.b%20%3D%3D%20Foo.c%20%3D%3D%201%3F%0D%0A%20%20%20%20%2F%2F%20or%20does%20c%20%3D%3D%20b%20%3D%3D%202%3F%0D%0A%7D) illustrates this quite nicely.
+
+## Rule Details
+
+This rule is meant to prevent unexpected results in code by requiring the use of literal values as enum members to prevent unexpected runtime behavior. Template literals, arrays, objects, constructors, and all other expression types can end up using a variable from its scope or the parent scope, which can result in the same unexpected behavior at runtime.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+const str = 'Test';
+enum Invalid {
+  A = str, // Variable assignment
+  B = {}, // Object assignment
+  C = `A template literal string`, // Template literal
+  D = new Set(1, 2, 3), // Constructor in assignment
+  E = 2 + 2, // Expression assignment
+}
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+enum Valid {
+  A,
+  B = 'TestStr', // A regular string
+  C = 4, // A number
+  D = null,
+  E = /some_regex/,
+}
+```
+
+## When Not To Use It
+
+If you want use anything other than simple literals as an enum value.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-namespace-keyword.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-namespace-keyword.md
new file mode 100644
index 0000000000000000000000000000000000000000..faeeaadf8c5822e3683d3412a58b3287dde92edf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-namespace-keyword.md
@@ -0,0 +1,22 @@
+# Require the use of the `namespace` keyword instead of the `module` keyword to declare custom TypeScript modules (`prefer-namespace-keyword`)
+
+In an effort to prevent further confusion between custom TypeScript modules and the new ES2015 modules, starting
+with TypeScript `v1.5` the keyword `namespace` is now the preferred way to declare custom TypeScript modules.
+
+## Rule Details
+
+This rule aims to standardize the way modules are declared.
+
+## When Not To Use It
+
+If you are using the ES2015 module syntax, then you will not need this rule.
+
+## Further Reading
+
+- [Modules](https://www.typescriptlang.org/docs/handbook/modules.html)
+- [Namespaces](https://www.typescriptlang.org/docs/handbook/namespaces.html)
+- [Namespaces and Modules](https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html)
+
+## Compatibility
+
+- TSLint: [no-internal-module](https://palantir.github.io/tslint/rules/no-internal-module/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-nullish-coalescing.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-nullish-coalescing.md
new file mode 100644
index 0000000000000000000000000000000000000000..bb32c02895be096bda46d02e1dd1a137d7b00f08
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-nullish-coalescing.md
@@ -0,0 +1,141 @@
+# Enforce the usage of the nullish coalescing operator instead of logical chaining (`prefer-nullish-coalescing`)
+
+TypeScript 3.7 added support for the nullish coalescing operator.
+This operator allows you to safely cascade a value when dealing with `null` or `undefined`.
+
+```ts
+function myFunc(foo: string | null) {
+  return foo ?? 'a string';
+}
+
+// is equivalent to
+
+function myFunc(foo: string | null) {
+  return foo !== null && foo !== undefined ? foo : 'a string';
+}
+```
+
+Because the nullish coalescing operator _only_ coalesces when the original value is `null` or `undefined`, it is much safer than relying upon logical OR operator chaining `||`; which coalesces on any _falsy_ value:
+
+```ts
+const emptyString = '';
+
+const nullish1 = emptyString ?? 'unsafe';
+const logical1 = emptyString || 'unsafe';
+
+// nullish1 === ''
+// logical1 === 'unsafe'
+
+declare const nullString: string | null;
+
+const nullish2 = nullString ?? 'safe';
+const logical2 = nullString || 'safe';
+
+// nullish2 === 'safe'
+// logical2 === 'safe'
+```
+
+## Rule Details
+
+This rule aims enforce the usage of the safer operator.
+
+## Options
+
+```ts
+type Options = [
+  {
+    ignoreConditionalTests?: boolean;
+    ignoreMixedLogicalExpressions?: boolean;
+  },
+];
+
+const defaultOptions = [
+  {
+    ignoreConditionalTests: true,
+    ignoreMixedLogicalExpressions: true,
+  },
+];
+```
+
+### `ignoreConditionalTests`
+
+Setting this option to `true` (the default) will cause the rule to ignore any cases that are located within a conditional test.
+
+Generally expressions within conditional tests intentionally use the falsy fallthrough behavior of the logical or operator, meaning that fixing the operator to the nullish coalesce operator could cause bugs.
+
+If you're looking to enforce stricter conditional tests, you should consider using the `strict-boolean-expressions` rule.
+
+Incorrect code for `ignoreConditionalTests: false`, and correct code for `ignoreConditionalTests: true`:
+
+```ts
+declare const a: string | null;
+declare const b: string | null;
+
+if (a || b) {
+}
+while (a || b) {}
+do {} while (a || b);
+for (let i = 0; a || b; i += 1) {}
+a || b ? true : false;
+```
+
+Correct code for `ignoreConditionalTests: false`:
+
+```ts
+declare const a: string | null;
+declare const b: string | null;
+
+if (a ?? b) {
+}
+while (a ?? b) {}
+do {} while (a ?? b);
+for (let i = 0; a ?? b; i += 1) {}
+a ?? b ? true : false;
+```
+
+### `ignoreMixedLogicalExpressions`
+
+Setting this option to `true` (the default) will cause the rule to ignore any logical or expressions that are part of a mixed logical expression (with `&&`).
+
+Generally expressions within mixed logical expressions intentionally use the falsy fallthrough behavior of the logical or operator, meaning that fixing the operator to the nullish coalesce operator could cause bugs.
+
+If you're looking to enforce stricter conditional tests, you should consider using the `strict-boolean-expressions` rule.
+
+Incorrect code for `ignoreMixedLogicalExpressions: false`, and correct code for `ignoreMixedLogicalExpressions: true`:
+
+```ts
+declare const a: string | null;
+declare const b: string | null;
+declare const c: string | null;
+declare const d: string | null;
+
+a || (b && c);
+(a && b) || c || d;
+a || (b && c) || d;
+a || (b && c && d);
+```
+
+Correct code for `ignoreMixedLogicalExpressions: false`:
+
+```ts
+declare const a: string | null;
+declare const b: string | null;
+declare const c: string | null;
+declare const d: string | null;
+
+a ?? (b && c);
+(a && b) ?? c ?? d;
+a ?? (b && c) ?? d;
+a ?? (b && c && d);
+```
+
+**_NOTE:_** Errors for this specific case will be presented as suggestions (see below), instead of fixes. This is because it is not always safe to automatically convert `||` to `??` within a mixed logical expression, as we cannot tell the intended precedence of the operator. Note that by design, `??` requires parentheses when used with `&&` or `||` in the same expression.
+
+## When Not To Use It
+
+If you are not using TypeScript 3.7 (or greater), then you will not be able to use this rule, as the operator is not supported.
+
+## Further Reading
+
+- [TypeScript 3.7 Release Notes](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html)
+- [Nullish Coalescing Operator Proposal](https://github.com/tc39/proposal-nullish-coalescing/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-optional-chain.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-optional-chain.md
new file mode 100644
index 0000000000000000000000000000000000000000..6505c93959a6aebc4bff7d30b6326c4c0d83f334
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-optional-chain.md
@@ -0,0 +1,82 @@
+# Prefer using concise optional chain expressions instead of chained logical ands (`prefer-optional-chain`)
+
+TypeScript 3.7 added support for the optional chain operator.
+This operator allows you to safely access properties and methods on objects when they are potentially `null` or `undefined`.
+
+```ts
+type T = {
+  a?: {
+    b?: {
+      c: string;
+      method?: () => void;
+    };
+  };
+};
+
+function myFunc(foo: T | null) {
+  return foo?.a?.b?.c;
+}
+// is roughly equivalent to
+function myFunc(foo: T | null) {
+  return foo && foo.a && foo.a.b && foo.a.b.c;
+}
+
+function myFunc(foo: T | null) {
+  return foo?.['a']?.b?.c;
+}
+// is roughly equivalent to
+function myFunc(foo: T | null) {
+  return foo && foo['a'] && foo['a'].b && foo['a'].b.c;
+}
+
+function myFunc(foo: T | null) {
+  return foo?.a?.b?.method?.();
+}
+// is roughly equivalent to
+function myFunc(foo: T | null) {
+  return foo && foo.a && foo.a.b && foo.a.b.method && foo.a.b.method();
+}
+```
+
+Because the optional chain operator _only_ chains when the property value is `null` or `undefined`, it is much safer than relying upon logical AND operator chaining `&&`; which chains on any _truthy_ value.
+
+## Rule Details
+
+This rule aims enforce the usage of the safer operator.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+foo && foo.a && foo.a.b && foo.a.b.c;
+foo && foo['a'] && foo['a'].b && foo['a'].b.c;
+foo && foo.a && foo.a.b && foo.a.b.method && foo.a.b.method();
+
+// this rule also supports converting chained strict nullish checks:
+foo &&
+  foo.a != null &&
+  foo.a.b !== null &&
+  foo.a.b.c != undefined &&
+  foo.a.b.c.d !== undefined &&
+  foo.a.b.c.d.e;
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+foo?.a?.b?.c;
+foo?.['a']?.b?.c;
+foo?.a?.b?.method?.();
+
+foo?.a?.b?.c?.d?.e;
+```
+
+**Note:** there are a few edge cases where this rule will false positive. Use your best judgement when evaluating reported errors.
+
+## When Not To Use It
+
+If you are not using TypeScript 3.7 (or greater), then you will not be able to use this rule, as the operator is not supported.
+
+## Further Reading
+
+- [TypeScript 3.7 Release Notes](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html)
+- [Optional Chaining Proposal](https://github.com/tc39/proposal-optional-chaining/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-readonly-parameter-types.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-readonly-parameter-types.md
new file mode 100644
index 0000000000000000000000000000000000000000..34544456f09ec4285c05f2f015623691ee05672b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-readonly-parameter-types.md
@@ -0,0 +1,216 @@
+# Requires that function parameters are typed as readonly to prevent accidental mutation of inputs (`prefer-readonly-parameter-types`)
+
+Mutating function arguments can lead to confusing, hard to debug behavior.
+Whilst it's easy to implicitly remember to not modify function arguments, explicitly typing arguments as readonly provides clear contract to consumers.
+This contract makes it easier for a consumer to reason about if a function has side-effects.
+
+## Rule Details
+
+This rule allows you to enforce that function parameters resolve to readonly types.
+A type is considered readonly if:
+
+- it is a primitive type (`string`, `number`, `boolean`, `symbol`, or an enum),
+- it is a function signature type,
+- it is a readonly array type whose element type is considered readonly.
+- it is a readonly tuple type whose elements are all considered readonly.
+- it is an object type whose properties are all marked as readonly, and whose values are all considered readonly.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+function array1(arg: string[]) {} // array is not readonly
+function array2(arg: readonly string[][]) {} // array element is not readonly
+function array3(arg: [string, number]) {} // tuple is not readonly
+function array4(arg: readonly [string[], number]) {} // tuple element is not readonly
+// the above examples work the same if you use ReadonlyArray<T> instead
+
+function object1(arg: { prop: string }) {} // property is not readonly
+function object2(arg: { readonly prop: string; prop2: string }) {} // not all properties are readonly
+function object3(arg: { readonly prop: { prop2: string } }) {} // nested property is not readonly
+// the above examples work the same if you use Readonly<T> instead
+
+interface CustomArrayType extends ReadonlyArray<string> {
+  prop: string; // note: this property is mutable
+}
+function custom1(arg: CustomArrayType) {}
+
+interface CustomFunction {
+  (): void;
+  prop: string; // note: this property is mutable
+}
+function custom2(arg: CustomFunction) {}
+
+function union(arg: string[] | ReadonlyArray<number[]>) {} // not all types are readonly
+
+// rule also checks function types
+interface Foo {
+  (arg: string[]): void;
+}
+interface Foo {
+  new (arg: string[]): void;
+}
+const x = { foo(arg: string[]): void; };
+function foo(arg: string[]);
+type Foo = (arg: string[]) => void;
+interface Foo {
+  foo(arg: string[]): void;
+}
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+function array1(arg: readonly string[]) {}
+function array2(arg: readonly (readonly string[])[]) {}
+function array3(arg: readonly [string, number]) {}
+function array4(arg: readonly [readonly string[], number]) {}
+// the above examples work the same if you use ReadonlyArray<T> instead
+
+function object1(arg: { readonly prop: string }) {}
+function object2(arg: { readonly prop: string; readonly prop2: string }) {}
+function object3(arg: { readonly prop: { readonly prop2: string } }) {}
+// the above examples work the same if you use Readonly<T> instead
+
+interface CustomArrayType extends ReadonlyArray<string> {
+  readonly prop: string;
+}
+function custom1(arg: Readonly<CustomArrayType>) {}
+// interfaces that extend the array types are not considered arrays, and thus must be made readonly.
+
+interface CustomFunction {
+  (): void;
+  readonly prop: string;
+}
+function custom2(arg: CustomFunction) {}
+
+function union(arg: readonly string[] | ReadonlyArray<number[]>) {}
+
+function primitive1(arg: string) {}
+function primitive2(arg: number) {}
+function primitive3(arg: boolean) {}
+function primitive4(arg: unknown) {}
+function primitive5(arg: null) {}
+function primitive6(arg: undefined) {}
+function primitive7(arg: any) {}
+function primitive8(arg: never) {}
+function primitive9(arg: string | number | undefined) {}
+
+function fnSig(arg: () => void) {}
+
+enum Foo { a, b }
+function enum(arg: Foo) {}
+
+function symb1(arg: symbol) {}
+const customSymbol = Symbol('a');
+function symb2(arg: typeof customSymbol) {}
+
+// function types
+interface Foo {
+  (arg: readonly string[]): void;
+}
+interface Foo {
+  new (arg: readonly string[]): void;
+}
+const x = { foo(arg: readonly string[]): void; };
+function foo(arg: readonly string[]);
+type Foo = (arg: readonly string[]) => void;
+interface Foo {
+  foo(arg: readonly string[]): void;
+}
+```
+
+## Options
+
+```ts
+interface Options {
+  checkParameterProperties?: boolean;
+  ignoreInferredTypes?: boolean;
+}
+
+const defaultOptions: Options = {
+  checkParameterProperties: true,
+  ignoreInferredTypes: false,
+};
+```
+
+### `checkParameterProperties`
+
+This option allows you to enable or disable the checking of parameter properties.
+Because parameter properties create properties on the class, it may be undesirable to force them to be readonly.
+
+Examples of **incorrect** code for this rule with `{checkParameterProperties: true}`:
+
+```ts
+class Foo {
+  constructor(private paramProp: string[]) {}
+}
+```
+
+Examples of **correct** code for this rule with `{checkParameterProperties: true}`:
+
+```ts
+class Foo {
+  constructor(private paramProp: readonly string[]) {}
+}
+```
+
+Examples of **correct** code for this rule with `{checkParameterProperties: false}`:
+
+```ts
+class Foo {
+  constructor(
+    private paramProp1: string[],
+    private paramProp2: readonly string[],
+  ) {}
+}
+```
+
+### `ignoreInferredTypes`
+
+This option allows you to ignore parameters which don't explicitly specify a type. This may be desirable in cases where an external dependency specifies a callback with mutable parameters, and manually annotating the callback's parameters is undesirable.
+
+Examples of **incorrect** code for this rule with `{ignoreInferredTypes: true}`:
+
+```ts
+import { acceptsCallback, CallbackOptions } from 'external-dependency';
+
+acceceptsCallback((options: CallbackOptions) => {});
+```
+
+<details>
+<summary>external-dependency.d.ts</summary>
+
+```ts
+export interface CallbackOptions {
+  prop: string;
+}
+type Callback = (options: CallbackOptions) => void;
+type AcceptsCallback = (callback: Callback) => void;
+
+export const acceptsCallback: AcceptsCallback;
+```
+
+</details>
+
+Examples of **correct** code for this rule with `{ignoreInferredTypes: true}`:
+
+```ts
+import { acceptsCallback } from 'external-dependency';
+
+acceceptsCallback(options => {});
+```
+
+<details>
+<summary>external-dependency.d.ts</summary>
+
+```ts
+export interface CallbackOptions {
+  prop: string;
+}
+type Callback = (options: CallbackOptions) => void;
+type AcceptsCallback = (callback: Callback) => void;
+
+export const acceptsCallback: AcceptsCallback;
+```
+
+</details>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-readonly.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-readonly.md
new file mode 100644
index 0000000000000000000000000000000000000000..9ce16a8c35fbbc4b82963cab5d30d3b83518ba49
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-readonly.md
@@ -0,0 +1,81 @@
+# Requires that private members are marked as `readonly` if they're never modified outside of the constructor (`prefer-readonly`)
+
+This rule enforces that private members are marked as `readonly` if they're never modified outside of the constructor.
+
+## Rule Details
+
+Member variables with the privacy `private` are never permitted to be modified outside of their declaring class.
+If that class never modifies their value, they may safely be marked as `readonly`.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+class Container {
+  // These member variables could be marked as readonly
+  private neverModifiedMember = true;
+  private onlyModifiedInConstructor: number;
+
+  public constructor(
+    onlyModifiedInConstructor: number,
+    // Private parameter properties can also be marked as readonly
+    private neverModifiedParameter: string,
+  ) {
+    this.onlyModifiedInConstructor = onlyModifiedInConstructor;
+  }
+}
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+class Container {
+  // Public members might be modified externally
+  public publicMember: boolean;
+
+  // Protected members might be modified by child classes
+  protected protectedMember: number;
+
+  // This is modified later on by the class
+  private modifiedLater = 'unchanged';
+
+  public mutate() {
+    this.modifiedLater = 'mutated';
+  }
+}
+```
+
+## Options
+
+This rule, in its default state, does not require any argument.
+
+### `onlyInlineLambdas`
+
+You may pass `"onlyInlineLambdas": true` as a rule option within an object to restrict checking only to members immediately assigned a lambda value.
+
+```jsonc
+{
+  "@typescript-eslint/prefer-readonly": ["error", { "onlyInlineLambdas": true }]
+}
+```
+
+Example of **correct** code for the `{ "onlyInlineLambdas": true }` options:
+
+```ts
+class Container {
+  private neverModifiedPrivate = 'unchanged';
+}
+```
+
+Example of **incorrect** code for the `{ "onlyInlineLambdas": true }` options:
+
+```ts
+class Container {
+  private onClick = () => {
+    /* ... */
+  };
+}
+```
+
+## Related to
+
+- TSLint: ['prefer-readonly'](https://palantir.github.io/tslint/rules/prefer-readonly)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-reduce-type-parameter.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-reduce-type-parameter.md
new file mode 100644
index 0000000000000000000000000000000000000000..d6f68021cc730473e194f03a731c58d889376311
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-reduce-type-parameter.md
@@ -0,0 +1,54 @@
+# Prefer using type parameter when calling `Array#reduce` instead of casting (`prefer-reduce-type-parameter`)
+
+It's common to call `Array#reduce` with a generic type, such as an array or object, as the initial value.
+Since these values are empty, their types are not usable:
+
+- `[]` has type `never[]`, which can't have items pushed into it as nothing is type `never`
+- `{}` has type `{}`, which doesn't have an index signature and so can't have properties added to it
+
+A common solution to this problem is to cast the initial value. While this will work, it's not the most optimal
+solution as casting has subtle effects on the underlying types that can allow bugs to slip in.
+
+A better (and lesser known) solution is to pass the type in as a generic parameter to `Array#reduce` explicitly.
+This means that TypeScript doesn't have to try to infer the type, and avoids the common pitfalls that come with casting.
+
+## Rule Details
+
+This rule looks for calls to `Array#reduce`, and warns if an initial value is being passed & casted,
+suggesting instead to pass the cast type to `Array#reduce` as its generic parameter.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+[1, 2, 3].reduce((arr, num) => arr.concat(num * 2), [] as number[]);
+
+['a', 'b'].reduce(
+  (accum, name) => ({
+    ...accum,
+    [name]: true,
+  }),
+  {} as Record<string, boolean>,
+);
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+[1, 2, 3].reduce<number[]>((arr, num) => arr.concat(num * 2), []);
+
+['a', 'b'].reduce<Record<string, boolean>>(
+  (accum, name) => ({
+    ...accum,
+    [name]: true,
+  }),
+  {},
+);
+```
+
+## Options
+
+There are no options.
+
+## When Not To Use It
+
+If you don't want to use typechecking in your linting, you can't use this rule.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-regexp-exec.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-regexp-exec.md
new file mode 100644
index 0000000000000000000000000000000000000000..4640d35a98ecc2a35d47d9e9e12b124765afff0e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-regexp-exec.md
@@ -0,0 +1,53 @@
+# Enforce that `RegExp#exec` is used instead of `String#match` if no global flag is provided (`prefer-regexp-exec`)
+
+`RegExp#exec` is faster than `String#match` and both work the same when not using the `/g` flag.
+
+## Rule Details
+
+This rule is aimed at enforcing the more performant way of applying regular expressions on strings.
+
+From [`String#match` on MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match):
+
+> If the regular expression does not include the g flag, returns the same result as `RegExp.exec()`.
+
+From [Stack Overflow](https://stackoverflow.com/questions/9214754/what-is-the-difference-between-regexp-s-exec-function-and-string-s-match-fun)
+
+> `RegExp.prototype.exec` is a lot faster than `String.prototype.match`, but that’s because they are not exactly the same thing, they are different.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+'something'.match(/thing/);
+
+'some things are just things'.match(/thing/);
+
+const text = 'something';
+const search = /thing/;
+text.match(search);
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+/thing/.exec('something');
+
+'some things are just things'.match(/thing/g);
+
+const text = 'something';
+const search = /thing/;
+search.exec(text);
+```
+
+## Options
+
+There are no options.
+
+```json
+{
+  "@typescript-eslint/prefer-regexp-exec": "error"
+}
+```
+
+## When Not To Use It
+
+If you prefer consistent use of `String#match` for both, with `g` flag and without it, you can turn this rule off.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-string-starts-ends-with.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-string-starts-ends-with.md
new file mode 100644
index 0000000000000000000000000000000000000000..110061d554b7505135064667fcbe6e9c6de8dbe5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-string-starts-ends-with.md
@@ -0,0 +1,54 @@
+# Enforce the use of `String#startsWith` and `String#endsWith` instead of other equivalent methods of checking substrings (`prefer-string-starts-ends-with`)
+
+There are multiple ways to verify if a string starts or ends with a specific string, such as `foo.indexOf('bar') === 0`.
+
+Since ES2015 has added `String#startsWith` and `String#endsWith`, this rule reports other ways to be consistent.
+
+## Rule Details
+
+This rule is aimed at enforcing a consistent way to check whether a string starts or ends with a specific string.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+let foo: string;
+
+// starts with
+foo[0] === 'b';
+foo.charAt(0) === 'b';
+foo.indexOf('bar') === 0;
+foo.slice(0, 3) === 'bar';
+foo.substring(0, 3) === 'bar';
+foo.match(/^bar/) != null;
+/^bar/.test(foo);
+
+// ends with
+foo[foo.length - 1] === 'b';
+foo.charAt(foo.length - 1) === 'b';
+foo.lastIndexOf('bar') === foo.length - 3;
+foo.slice(-3) === 'bar';
+foo.substring(foo.length - 3) === 'bar';
+foo.match(/bar$/) != null;
+/bar$/.test(foo);
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+foo.startsWith('bar');
+foo.endsWith('bar');
+```
+
+## Options
+
+There are no options.
+
+```JSON
+{
+    "@typescript-eslint/prefer-string-starts-ends-with": "error"
+}
+```
+
+## When Not To Use It
+
+If you don't mind that style, you can turn this rule off safely.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-ts-expect-error.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-ts-expect-error.md
new file mode 100644
index 0000000000000000000000000000000000000000..60fdf79c8069b3659bce9fa4c3b7fbc0f26d9c11
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-ts-expect-error.md
@@ -0,0 +1,65 @@
+# Recommends using `@ts-expect-error` over `@ts-ignore` (`prefer-ts-expect-error`)
+
+TypeScript allows you to suppress all errors on a line by placing a single-line comment or a comment block line starting with `@ts-ignore` immediately before the erroring line.
+While powerful, there is no way to know if a `@ts-ignore` is actually suppressing an error without manually investigating what happens when the `@ts-ignore` is removed.
+
+This means its easy for `@ts-ignore`s to be forgotten about, and remain in code even after the error they were suppressing is fixed.
+This is dangerous, as if a new error arises on that line it'll be suppressed by the forgotten about `@ts-ignore`, and so be missed.
+
+To address this, TS3.9 ships with a new single-line comment directive: `// @ts-expect-error`.
+
+This directive operates in the same manner as `@ts-ignore`, but will error if the line it's meant to be suppressing doesn't actually contain an error, making it a lot safer.
+
+## Rule Details
+
+This rule looks for usages of `@ts-ignore`, and flags them to be replaced with `@ts-expect-error`.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+// @ts-ignore
+const str: string = 1;
+
+/**
+ * Explaining comment
+ *
+ * @ts-ignore */
+const multiLine: number = 'value';
+
+/** @ts-ignore */
+const block: string = 1;
+
+const isOptionEnabled = (key: string): boolean => {
+  // @ts-ignore: if key isn't in globalOptions it'll be undefined which is false
+  return !!globalOptions[key];
+};
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+// @ts-expect-error
+const str: string = 1;
+
+/**
+ * Explaining comment
+ *
+ * @ts-expect-error */
+const multiLine: number = 'value';
+
+/** @ts-expect-error */
+const block: string = 1;
+
+const isOptionEnabled = (key: string): boolean => {
+  // @ts-expect-error: if key isn't in globalOptions it'll be undefined which is false
+  return !!globalOptions[key];
+};
+```
+
+## When Not To Use It
+
+If you are **NOT** using TypeScript 3.9 (or greater), then you will not be able to use this rule, as the directive is not supported
+
+## Further Reading
+
+- [Original Implementing PR](https://github.com/microsoft/TypeScript/pull/36014)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/promise-function-async.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/promise-function-async.md
new file mode 100644
index 0000000000000000000000000000000000000000..192e66a35775b6e03eb9d3db169cb68c62740e69
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/promise-function-async.md
@@ -0,0 +1,66 @@
+# Requires any function or method that returns a Promise to be marked async (`promise-function-async`)
+
+Requires any function or method that returns a Promise to be marked async.
+Ensures that each function is only capable of:
+
+- returning a rejected promise, or
+- throwing an Error object.
+
+In contrast, non-`async` `Promise` - returning functions are technically capable of either.
+Code that handles the results of those functions will often need to handle both cases, which can get complex.
+This rule's practice removes a requirement for creating code to handle both cases.
+
+## Rule Details
+
+Examples of **incorrect** code for this rule
+
+```ts
+const arrowFunctionReturnsPromise = () => Promise.resolve('value');
+
+function functionReturnsPromise() {
+  return Promise.resolve('value');
+}
+```
+
+Examples of **correct** code for this rule
+
+```ts
+const arrowFunctionReturnsPromise = async () => Promise.resolve('value');
+
+async function functionReturnsPromise() {
+  return Promise.resolve('value');
+}
+```
+
+## Options
+
+Options may be provided as an object with:
+
+- `allowAny` to indicate that `any` or `unknown` shouldn't be considered Promises (`true` by default).
+- `allowedPromiseNames` to indicate any extra names of classes or interfaces to be considered Promises when returned.
+
+In addition, each of the following properties may be provided, and default to `true`:
+
+- `checkArrowFunctions`
+- `checkFunctionDeclarations`
+- `checkFunctionExpressions`
+- `checkMethodDeclarations`
+
+```json
+{
+  "@typescript-eslint/promise-function-async": [
+    "error",
+    {
+      "allowedPromiseNames": ["Thenable"],
+      "checkArrowFunctions": true,
+      "checkFunctionDeclarations": true,
+      "checkFunctionExpressions": true,
+      "checkMethodDeclarations": true
+    }
+  ]
+}
+```
+
+## Related To
+
+- TSLint: [promise-function-async](https://palantir.github.io/tslint/rules/promise-function-async)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/quotes.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/quotes.md
new file mode 100644
index 0000000000000000000000000000000000000000..6b63587f6b4659ddfe5d007e0795342a2c12c300
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/quotes.md
@@ -0,0 +1,22 @@
+# Enforce the consistent use of either backticks, double, or single quotes (`quotes`)
+
+## Rule Details
+
+This rule extends the base [`eslint/quotes`](https://eslint.org/docs/rules/quotes) rule.
+It adds support for TypeScript features which allow quoted names, but not backtick quoted names.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "quotes": "off",
+  "@typescript-eslint/quotes": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/quotes` options](https://eslint.org/docs/rules/quotes#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/quotes.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/require-array-sort-compare.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/require-array-sort-compare.md
new file mode 100644
index 0000000000000000000000000000000000000000..78de19863f0ceee84fbce9514ca900f5cc5f76e7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/require-array-sort-compare.md
@@ -0,0 +1,85 @@
+# Requires `Array#sort` calls to always provide a `compareFunction` (`require-array-sort-compare`)
+
+This rule prevents invoking the `Array#sort()` method without providing a `compare` argument.
+
+When called without a compare function, `Array#sort()` converts all non-undefined array elements into strings and then compares said strings based off their UTF-16 code units.
+
+The result is that elements are sorted alphabetically, regardless of their type.
+When sorting numbers, this results in the classic "10 before 2" order:
+
+```ts
+[1, 2, 3, 10, 20, 30].sort(); //→ [1, 10, 2, 20, 3, 30]
+```
+
+This also means that `Array#sort` does not always sort consistently, as elements may have custom `#toString` implementations that are not deterministic; this trap is noted in the noted in the language specification thusly:
+
+> NOTE 2: Method calls performed by the `ToString` abstract operations in steps 5 and 7 have the potential to cause `SortCompare` to not behave as a consistent comparison function.<br> > https://www.ecma-international.org/ecma-262/9.0/#sec-sortcompare
+
+## Rule Details
+
+This rule aims to ensure all calls of the native `Array#sort` method provide a `compareFunction`, while ignoring calls to user-defined `sort` methods.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+const array: any[];
+const stringArray: string[];
+
+array.sort();
+
+// String arrays should be sorted using `String#localeCompare`.
+stringArray.sort();
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+const array: any[];
+const userDefinedType: { sort(): void };
+
+array.sort((a, b) => a - b);
+array.sort((a, b) => a.localeCompare(b));
+
+userDefinedType.sort();
+```
+
+## Options
+
+The rule accepts an options object with the following properties:
+
+```ts
+type Options = {
+  /**
+   * If true, an array which all elements are string is ignored.
+   */
+  ignoreStringArrays?: boolean;
+};
+
+const defaults = {
+  ignoreStringArrays: false,
+};
+```
+
+### `ignoreStringArrays`
+
+Examples of **incorrect** code for this rule with `{ ignoreStringArrays: true }`:
+
+```ts
+const one = 1;
+const two = 2;
+const three = 3;
+[one, two, three].sort();
+```
+
+Examples of **correct** code for this rule with `{ ignoreStringArrays: true }`:
+
+```ts
+const one = '1';
+const two = '2';
+const three = '3';
+[one, two, three].sort();
+```
+
+## When Not To Use It
+
+If you understand the language specification enough, you can turn this rule off safely.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/require-await.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/require-await.md
new file mode 100644
index 0000000000000000000000000000000000000000..2d8ad41fda9e07791dfa0e04da6ebccfb7320956
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/require-await.md
@@ -0,0 +1,32 @@
+# Disallow async functions which have no `await` expression (`require-await`)
+
+## Rule Details
+
+This rule extends the base [`eslint/require-await`](https://eslint.org/docs/rules/require-await) rule.
+It uses type information to add support for `async` functions that return a `Promise`.
+
+Examples of **correct** code for this rule:
+
+```ts
+async function returnsPromise1() {
+  return Promise.resolve(1);
+}
+
+const returnsPromise2 = () => returnsPromise1();
+```
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "require-await": "off",
+  "@typescript-eslint/require-await": "error"
+}
+```
+
+## Options
+
+See [`eslint/require-await` options](https://eslint.org/docs/rules/require-await#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/require-await.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/restrict-plus-operands.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/restrict-plus-operands.md
new file mode 100644
index 0000000000000000000000000000000000000000..0959f837739baa319c38ceaf962e3e64c3cdb2b7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/restrict-plus-operands.md
@@ -0,0 +1,58 @@
+# When adding two variables, operands must both be of type number or of type string (`restrict-plus-operands`)
+
+Examples of **correct** code:
+
+```ts
+var foo = parseInt('5.5', 10) + 10;
+var foo = 1n + 1n;
+```
+
+Examples of **incorrect** code:
+
+```ts
+var foo = '5.5' + 5;
+var foo = 1n + 1;
+```
+
+## Options
+
+This rule has an object option:
+
+- `"checkCompoundAssignments": false`: (default) does not check compound assignments (`+=`)
+- `"checkCompoundAssignments": true`
+
+### `checkCompoundAssignments`
+
+Examples of **incorrect** code for the `{ "checkCompoundAssignments": true }` option:
+
+```ts
+/*eslint @typescript-eslint/restrict-plus-operands: ["error", { "checkCompoundAssignments": true }]*/
+
+let foo: string | undefined;
+foo += 'some data';
+
+let bar: string = '';
+bar += 0;
+```
+
+Examples of **correct** code for the `{ "checkCompoundAssignments": true }` option:
+
+```ts
+/*eslint @typescript-eslint/restrict-plus-operands: ["error", { "checkCompoundAssignments": true }]*/
+
+let foo: number = 0;
+foo += 1;
+
+let bar = '';
+bar += 'test';
+```
+
+```json
+{
+  "@typescript-eslint/restrict-plus-operands": "error"
+}
+```
+
+## Compatibility
+
+- TSLint: [restrict-plus-operands](https://palantir.github.io/tslint/rules/restrict-plus-operands/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/restrict-template-expressions.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/restrict-template-expressions.md
new file mode 100644
index 0000000000000000000000000000000000000000..0ee7427ddac1d361286cf1daf6ab092405b7eead
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/restrict-template-expressions.md
@@ -0,0 +1,85 @@
+# Enforce template literal expressions to be of string type (`restrict-template-expressions`)
+
+Examples of **correct** code:
+
+```ts
+const arg = 'foo';
+const msg1 = `arg = ${arg}`;
+const msg2 = `arg = ${arg || 'default'}`;
+
+const stringWithKindProp: string & { _kind?: 'MyString' } = 'foo';
+const msg3 = `stringWithKindProp = ${stringWithKindProp}`;
+```
+
+Examples of **incorrect** code:
+
+```ts
+const arg1 = [1, 2];
+const msg1 = `arg1 = ${arg1}`;
+
+const arg2 = { name: 'Foo' };
+const msg2 = `arg2 = ${arg2 || null}`;
+```
+
+## Options
+
+The rule accepts an options object with the following properties:
+
+```ts
+type Options = {
+  // if true, also allow number type in template expressions
+  allowNumber?: boolean;
+  // if true, also allow boolean type in template expressions
+  allowBoolean?: boolean;
+  // if true, also allow any in template expressions
+  allowAny?: boolean;
+  // if true, also allow null and undefined in template expressions
+  allowNullish?: boolean;
+};
+
+const defaults = {
+  allowNumber: true,
+  allowBoolean: false,
+  allowAny: false,
+  allowNullish: false,
+};
+```
+
+### `allowNumber`
+
+Examples of additional **correct** code for this rule with `{ allowNumber: true }`:
+
+```ts
+const arg = 123;
+const msg1 = `arg = ${arg}`;
+const msg2 = `arg = ${arg || 'zero'}`;
+```
+
+### `allowBoolean`
+
+Examples of additional **correct** code for this rule with `{ allowBoolean: true }`:
+
+```ts
+const arg = true;
+const msg1 = `arg = ${arg}`;
+const msg2 = `arg = ${arg || 'not truthy'}`;
+```
+
+### `allowAny`
+
+Examples of additional **correct** code for this rule with `{ allowAny: true }`:
+
+```ts
+const user = JSON.parse('{ "name": "foo" }');
+const msg1 = `arg = ${user.name}`;
+const msg2 = `arg = ${user.name || 'the user with no name'}`;
+```
+
+### `allowNullish`
+
+Examples of additional **correct** code for this rule with `{ allowNullish: true }`:
+
+```ts
+const arg = condition ? 'ok' : null;
+const msg1 = `arg = ${arg}`;
+```
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/return-await.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/return-await.md
new file mode 100644
index 0000000000000000000000000000000000000000..3c621d2510445afb7d0044a1e615dd23a6187259
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/return-await.md
@@ -0,0 +1,208 @@
+# Enforces consistent returning of awaited values (`return-await`)
+
+Returning an awaited promise can make sense for better stack trace information as well as for consistent error handling (returned promises will not be caught in an async function try/catch).
+
+## Rule Details
+
+This rule builds on top of the [`eslint/no-return-await`](https://eslint.org/docs/rules/no-return-await) rule.
+It expands upon the base rule to add support for optionally requiring `return await` in certain cases.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "no-return-await": "off",
+  "@typescript-eslint/return-await": "error"
+}
+```
+
+## Options
+
+```ts
+type Options = 'in-try-catch' | 'always' | 'never';
+
+const defaultOptions: Options = 'in-try-catch';
+```
+
+### `in-try-catch`
+
+Requires that a returned promise must be `await`ed in `try-catch-finally` blocks, and disallows it elsewhere.
+Specifically:
+
+- if you `return` a promise within a `try`, then it must be `await`ed.
+- if you `return` a promise within a `catch`, and there **_is no_** `finally`, then it **_must not_** be `await`ed.
+- if you `return` a promise within a `catch`, and there **_is a_** `finally`, then it **_must_** be `await`ed.
+- if you `return` a promise within a `finally`, then it **_must not_** be `await`ed.
+
+Examples of **incorrect** code with `in-try-catch`:
+
+```ts
+async function invalidInTryCatch1() {
+  try {
+    return Promise.resolve('try');
+  } catch (e) {}
+}
+
+async function invalidInTryCatch2() {
+  try {
+    throw new Error('error');
+  } catch (e) {
+    return await Promise.resolve('catch');
+  }
+}
+
+async function invalidInTryCatch3() {
+  try {
+    throw new Error('error');
+  } catch (e) {
+    return Promise.resolve('catch');
+  } finally {
+    console.log('cleanup');
+  }
+}
+
+async function invalidInTryCatch4() {
+  try {
+    throw new Error('error');
+  } catch (e) {
+    throw new Error('error2');
+  } finally {
+    return await Promise.resolve('finally');
+  }
+}
+
+async function invalidInTryCatch5() {
+  return await Promise.resolve('try');
+}
+
+async function invalidInTryCatch6() {
+  return await 'value';
+}
+```
+
+Examples of **correct** code with `in-try-catch`:
+
+```ts
+async function validInTryCatch1() {
+  try {
+    return await Promise.resolve('try');
+  } catch (e) {}
+}
+
+async function validInTryCatch2() {
+  try {
+    throw new Error('error');
+  } catch (e) {
+    return Promise.resolve('catch');
+  }
+}
+
+async function validInTryCatch3() {
+  try {
+    throw new Error('error');
+  } catch (e) {
+    return await Promise.resolve('catch');
+  } finally {
+    console.log('cleanup');
+  }
+}
+
+async function validInTryCatch4() {
+  try {
+    throw new Error('error');
+  } catch (e) {
+    throw new Error('error2');
+  } finally {
+    return Promise.resolve('finally');
+  }
+}
+
+async function validInTryCatch5() {
+  return Promise.resolve('try');
+}
+
+async function validInTryCatch6() {
+  return 'value';
+}
+```
+
+### `always`
+
+Requires that all returned promises are `await`ed.
+
+Examples of **incorrect** code with `always`:
+
+```ts
+async function invalidAlways1() {
+  try {
+    return Promise.resolve('try');
+  } catch (e) {}
+}
+
+async function invalidAlways2() {
+  return Promise.resolve('try');
+}
+
+async function invalidAlways3() {
+  return await 'value';
+}
+```
+
+Examples of **correct** code with `always`:
+
+```ts
+async function validAlways1() {
+  try {
+    return await Promise.resolve('try');
+  } catch (e) {}
+}
+
+async function validAlways2() {
+  return await Promise.resolve('try');
+}
+
+async function validAlways3() {
+  return 'value';
+}
+```
+
+### `never`
+
+Disallows all `await`ing any returned promises.
+
+Examples of **incorrect** code with `never`:
+
+```ts
+async function invalidNever1() {
+  try {
+    return await Promise.resolve('try');
+  } catch (e) {}
+}
+
+async function invalidNever2() {
+  return await Promise.resolve('try');
+}
+
+async function invalidNever3() {
+  return await 'value';
+}
+```
+
+Examples of **correct** code with `never`:
+
+```ts
+async function validNever1() {
+  try {
+    return Promise.resolve('try');
+  } catch (e) {}
+}
+
+async function validNever2() {
+  return Promise.resolve('try');
+}
+
+async function validNever3() {
+  return 'value';
+}
+```
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/semi.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/semi.md
new file mode 100644
index 0000000000000000000000000000000000000000..c233d3546316754ac0a3c21d1422561a95788631
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/semi.md
@@ -0,0 +1,26 @@
+# Require or disallow semicolons instead of ASI (`semi`)
+
+This rule enforces consistent use of semicolons after statements.
+
+## Rule Details
+
+This rule extends the base [`eslint/semi`](https://eslint.org/docs/rules/semi) rule.
+It adds support for TypeScript features that require semicolons.
+
+See also the [`@typescript-eslint/member-delimiter-style`](member-delimiter-style.md) rule, which allows you to specify the delimiter for `type` and `interface` members.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "semi": "off",
+  "@typescript-eslint/semi": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/semi` options](https://eslint.org/docs/rules/semi#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/semi.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/space-before-function-paren.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/space-before-function-paren.md
new file mode 100644
index 0000000000000000000000000000000000000000..db2579e44d1bbb410a22a52901e0b52df07f573f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/space-before-function-paren.md
@@ -0,0 +1,22 @@
+# Enforces consistent spacing before function parenthesis (`space-before-function-paren`)
+
+## Rule Details
+
+This rule extends the base [`eslint/space-before-function-paren`](https://eslint.org/docs/rules/space-before-function-paren) rule.
+It adds support for generic type parameters on function calls.
+
+## How to use
+
+```jsonc
+{
+  // note you must disable the base rule as it can report incorrect errors
+  "space-before-function-paren": "off",
+  "@typescript-eslint/space-before-function-paren": ["error"]
+}
+```
+
+## Options
+
+See [`eslint/space-before-function-paren` options](https://eslint.org/docs/rules/space-before-function-paren#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/space-before-function-paren.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/space-infix-ops.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/space-infix-ops.md
new file mode 100644
index 0000000000000000000000000000000000000000..da36f25726e216be550041d6ff351b11e74670d4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/space-infix-ops.md
@@ -0,0 +1,26 @@
+# This rule is aimed at ensuring there are spaces around infix operators. (`space-infix-ops`)
+
+This rule extends the base [`eslint/space-infix-ops`](https://eslint.org/docs/rules/space-infix-ops) rule.
+
+It also add support for enum members
+
+```ts
+enum MyEnum {
+  KEY = 'value',
+}
+```
+
+## How to use
+
+```jsonc
+{
+  "space-infix-ops": "off",
+  "@typescript-eslint/space-infix-ops": ["error", { "int32Hint": false }]
+}
+```
+
+## Options
+
+See [`eslint/space-infix-ops` options](https://eslint.org/docs/rules/space-infix-ops#options).
+
+<sup>Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/master/docs/rules/space-infix-ops.md)</sup>
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/strict-boolean-expressions.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/strict-boolean-expressions.md
new file mode 100644
index 0000000000000000000000000000000000000000..243d54fda13a7bfc5886945c9a2e15114ec75863
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/strict-boolean-expressions.md
@@ -0,0 +1,162 @@
+# Restricts the types allowed in boolean expressions (`strict-boolean-expressions`)
+
+Forbids usage of non-boolean types in expressions where a boolean is expected.
+`boolean` and `never` types are always allowed.
+Additional types which are considered safe in a boolean context can be configured via options.
+
+The following nodes are considered boolean expressions and their type is checked:
+
+- Argument to the logical negation operator (`!arg`).
+- The condition in a conditional expression (`cond ? x : y`).
+- Conditions for `if`, `for`, `while`, and `do-while` statements.
+- Operands of logical binary operators (`lhs || rhs` and `lhs && rhs`).
+  - Right-hand side operand is ignored when it's not a descendant of another boolean expression.
+    This is to allow usage of boolean operators for their short-circuiting behavior.
+
+## Examples
+
+Examples of **incorrect** code for this rule:
+
+```ts
+// nullable numbers are considered unsafe by default
+let num: number | undefined = 0;
+if (num) {
+  console.log('num is defined');
+}
+
+// nullable strings are considered unsafe by default
+let str: string | null = null;
+if (!str) {
+  console.log('str is empty');
+}
+
+// nullable booleans are considered unsafe by default
+function foo(bool?: boolean) {
+  if (bool) {
+    bar();
+  }
+}
+
+// `any`, unconstrained generics and unions of more than one primitive type are disallowed
+const foo = <T>(arg: T) => (arg ? 1 : 0);
+
+// always-truthy and always-falsy types are disallowed
+let obj = {};
+while (obj) {
+  obj = getObj();
+}
+```
+
+Examples of **correct** code for this rule:
+
+```tsx
+// Using logical operators for their side effects is allowed
+const Component = () => {
+  const entry = map.get('foo') || {};
+  return entry && <p>Name: {entry.name}</p>;
+};
+
+// nullable values should be checked explicitly against null or undefined
+let num: number | undefined = 0;
+if (num != null) {
+  console.log('num is defined');
+}
+
+let str: string | null = null;
+if (str != null && !str) {
+  console.log('str is empty');
+}
+
+function foo(bool?: boolean) {
+  if (bool ?? false) {
+    bar();
+  }
+}
+
+// `any` types should be cast to boolean explicitly
+const foo = (arg: any) => (Boolean(arg) ? 1 : 0);
+```
+
+## Options
+
+```ts
+type Options = {
+  allowString?: boolean;
+  allowNumber?: boolean;
+  allowNullableObject?: boolean;
+  allowNullableBoolean?: boolean;
+  allowNullableString?: boolean;
+  allowNullableNumber?: boolean;
+  allowAny?: boolean;
+};
+
+const defaultOptions: Options = {
+  allowString: true,
+  allowNumber: true,
+  allowNullableObject: true,
+  allowNullableBoolean: false,
+  allowNullableString: false,
+  allowNullableNumber: false,
+  allowAny: false,
+  allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing: false,
+};
+```
+
+### `allowString`
+
+Allows `string` in a boolean context.
+This is safe because strings have only one falsy value (`""`).
+Set this to `false` if you prefer the explicit `str != ""` or `str.length > 0` style.
+
+### `allowNumber`
+
+Allows `number` in a boolean context.
+This is safe because numbers have only two falsy values (`0` and `NaN`).
+Set this to `false` if you prefer the explicit `num != 0` and `!Number.isNaN(num)` style.
+
+### `allowNullableObject`
+
+Allows `object | function | symbol | null | undefined` in a boolean context.
+This is safe because objects, functions and symbols don't have falsy values.
+Set this to `false` if you prefer the explicit `obj != null` style.
+
+### `allowNullableBoolean`
+
+Allows `boolean | null | undefined` in a boolean context.
+This is unsafe because nullable booleans can be either `false` or nullish.
+Set this to `false` if you want to enforce explicit `bool ?? false` or `bool ?? true` style.
+Set this to `true` if you don't mind implicitly treating false the same as a nullish value.
+
+### `allowNullableString`
+
+Allows `string | null | undefined` in a boolean context.
+This is unsafe because nullable strings can be either an empty string or nullish.
+Set this to `true` if you don't mind implicitly treating an empty string the same as a nullish value.
+
+### `allowNullableNumber`
+
+Allows `number | null | undefined` in a boolean context.
+This is unsafe because nullable numbers can be either a falsy number or nullish.
+Set this to `true` if you don't mind implicitly treating zero or NaN the same as a nullish value.
+
+### `allowAny`
+
+Allows `any` in a boolean context.
+This is unsafe for obvious reasons.
+Set this to `true` at your own risk.
+
+### `allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing`
+
+If this is set to `false`, then the rule will error on every file whose `tsconfig.json` does _not_ have the `strictNullChecks` compiler option (or `strict`) set to `true`.
+
+Without `strictNullChecks`, TypeScript essentially erases `undefined` and `null` from the types. This means when this rule inspects the types from a variable, **it will not be able to tell that the variable might be `null` or `undefined`**, which essentially makes this rule a lot less useful.
+
+You should be using `strictNullChecks` to ensure complete type-safety in your codebase.
+
+If for some reason you cannot turn on `strictNullChecks`, but still want to use this rule - you can use this option to allow it - but know that the behavior of this rule is _undefined_ with the compiler option turned off. We will not accept bug reports if you are using this option.
+
+## Related To
+
+- TSLint: [strict-boolean-expressions](https://palantir.github.io/tslint/rules/strict-boolean-expressions)
+
+- [no-unnecessary-condition](./no-unnecessary-condition.md) - Similar rule which reports always-truthy and always-falsy values in conditions
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/switch-exhaustiveness-check.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/switch-exhaustiveness-check.md
new file mode 100644
index 0000000000000000000000000000000000000000..a26c6e6dff27e0f1966b37746499956c12e24466
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/switch-exhaustiveness-check.md
@@ -0,0 +1,103 @@
+# Exhaustiveness checking in switch with union type (`switch-exhaustiveness-check`)
+
+Union type may have a lot of parts. It's easy to forget to consider all cases in switch. This rule reminds which parts are missing. If domain of the problem requires to have only a partial switch, developer may _explicitly_ add a default clause.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+type Day =
+  | 'Monday'
+  | 'Tuesday'
+  | 'Wednesday'
+  | 'Thursday'
+  | 'Friday'
+  | 'Saturday'
+  | 'Sunday';
+
+const day = 'Monday' as Day;
+let result = 0;
+
+switch (day) {
+  case 'Monday': {
+    result = 1;
+    break;
+  }
+}
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+type Day =
+  | 'Monday'
+  | 'Tuesday'
+  | 'Wednesday'
+  | 'Thursday'
+  | 'Friday'
+  | 'Saturday'
+  | 'Sunday';
+
+const day = 'Monday' as Day;
+let result = 0;
+
+switch (day) {
+  case 'Monday': {
+    result = 1;
+    break;
+  }
+  case 'Tuesday': {
+    result = 2;
+    break;
+  }
+  case 'Wednesday': {
+    result = 3;
+    break;
+  }
+  case 'Thursday': {
+    result = 4;
+    break;
+  }
+  case 'Friday': {
+    result = 5;
+    break;
+  }
+  case 'Saturday': {
+    result = 6;
+    break;
+  }
+  case 'Sunday': {
+    result = 7;
+    break;
+  }
+}
+```
+
+or
+
+```ts
+type Day =
+  | 'Monday'
+  | 'Tuesday'
+  | 'Wednesday'
+  | 'Thursday'
+  | 'Friday'
+  | 'Saturday'
+  | 'Sunday';
+
+const day = 'Monday' as Day;
+let result = 0;
+
+switch (day) {
+  case 'Monday': {
+    result = 1;
+    break;
+  }
+  default: {
+    result = 42;
+  }
+}
+```
+
+## When Not To Use It
+
+If program doesn't have union types with many parts. Downside of this rule is the need for type information, so it's slower than regular rules.
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/triple-slash-reference.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/triple-slash-reference.md
new file mode 100644
index 0000000000000000000000000000000000000000..af9e5498b6d4e163f2fb0c7217505285cea4eedf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/triple-slash-reference.md
@@ -0,0 +1,58 @@
+# Sets preference level for triple slash directives versus ES6-style import declarations (`triple-slash-reference`)
+
+Use of triple-slash reference type directives is discouraged in favor of the newer `import` style. This rule allows you to ban use of `/// <reference path="" />`, `/// <reference types="" />`, or `/// <reference lib="" />` directives.
+
+Consider using this rule in place of [`no-triple-slash-reference`](./no-triple-slash-reference.md) which has been deprecated.
+
+## Rule Details
+
+With `{ "path": "never", "types": "never", "lib": "never" }` options set, the following will all be **incorrect** usage:
+
+```ts
+/// <reference path="foo" />
+/// <reference types="bar" />
+/// <reference lib="baz" />
+```
+
+Examples of **incorrect** code for the `{ "types": "prefer-import" }` option. Note that these are only errors when **both** styles are used for the **same** module:
+
+```ts
+/// <reference types="foo" />
+import * as foo from 'foo';
+```
+
+```ts
+/// <reference types="foo" />
+import foo = require('foo');
+```
+
+With `{ "path": "always", "types": "always", "lib": "always" }` options set, the following will all be **correct** usage:
+
+```ts
+/// <reference path="foo" />
+/// <reference types="bar" />
+/// <reference lib="baz" />
+```
+
+Examples of **correct** code for the `{ "types": "prefer-import" }` option:
+
+```ts
+import * as foo from 'foo';
+```
+
+```ts
+import foo = require('foo');
+```
+
+## When To Use It
+
+If you want to ban use of one or all of the triple slash reference directives, or any time you might use triple-slash type reference directives and ES6 import declarations in the same file.
+
+## When Not To Use It
+
+If you want to use all flavors of triple slash reference directives.
+
+## Compatibility
+
+- TSLint: [no-reference](http://palantir.github.io/tslint/rules/no-reference/)
+- TSLint: [no-reference-import](https://palantir.github.io/tslint/rules/no-reference-import/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/type-annotation-spacing.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/type-annotation-spacing.md
new file mode 100644
index 0000000000000000000000000000000000000000..32b7b655814d66b240e08732f80aad27b0430b36
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/type-annotation-spacing.md
@@ -0,0 +1,291 @@
+# Require consistent spacing around type annotations (`type-annotation-spacing`)
+
+Spacing around type annotations improves readability of the code. Although the most commonly used style guideline for type annotations in TypeScript prescribes adding a space after the colon, but not before it, it is subjective to the preferences of a project. For example:
+
+<!-- prettier-ignore -->
+```ts
+// with space after, but not before (default if no option is specified)
+let foo: string = "bar";
+
+// with no spaces
+let foo:string = "bar";
+
+// with space before and after
+let foo : string = "bar";
+
+// with space before, but not after
+let foo :string = "bar";
+
+// with spaces before and after the fat arrow (default if no option is specified)
+type Foo = (string: name) => string;
+
+// with no spaces between the fat arrow
+type Foo = (string: name)=>string;
+
+// with space after, but not before the fat arrow
+type Foo = (string: name)=> string;
+
+// with space before, but not after the fat arrow
+type Foo = (string: name) =>string;
+```
+
+## Rule Details
+
+This rule aims to enforce specific spacing patterns around type annotations and function types in type literals.
+
+## Options
+
+This rule has an object option:
+
+- `"before": false`, (default for colon) disallows spaces before the colon/arrow.
+- `"before": true`, (default for arrow) requires a space before the colon/arrow.
+- `"after": true`, (default) requires a space after the colon/arrow.
+- `"after": false`, disallows spaces after the colon/arrow.
+- `"overrides"`, overrides the default options for type annotations with `colon` (e.g. `const foo: string`) and function types with `arrow` (e.g. `type Foo = () => {}`). Additionally allows granular overrides for `variable` (`const foo: string`),`parameter` (`function foo(bar: string) {...}`),`property` (`interface Foo { bar: string }`) and `returnType` (`function foo(): string {...}`) annotations.
+
+### defaults
+
+Examples of **incorrect** code for this rule with no options at all:
+
+<!-- prettier-ignore -->
+```ts
+let foo:string = "bar";
+let foo :string = "bar";
+let foo : string = "bar";
+
+function foo():string {}
+function foo() :string {}
+function foo() : string {}
+
+class Foo {
+    name:string;
+}
+
+class Foo {
+    name :string;
+}
+
+class Foo {
+    name : string;
+}
+
+type Foo = ()=>{};
+type Foo = () =>{};
+type Foo = ()=> {};
+```
+
+Examples of **correct** code for this rule with no options at all:
+
+<!-- prettier-ignore -->
+```ts
+let foo: string = "bar";
+
+function foo(): string {}
+
+class Foo {
+    name: string;
+}
+
+type Foo = () => {};
+```
+
+### after
+
+Examples of **incorrect** code for this rule with `{ "before": false, "after": true }`:
+
+<!-- prettier-ignore -->
+```ts
+let foo:string = "bar";
+let foo :string = "bar";
+let foo : string = "bar";
+
+function foo():string {}
+function foo() :string {}
+function foo() : string {}
+
+class Foo {
+    name:string;
+}
+
+class Foo {
+    name :string;
+}
+
+class Foo {
+    name : string;
+}
+
+type Foo = ()=>{};
+type Foo = () =>{};
+type Foo = () => {};
+```
+
+Examples of **correct** code for this rule with `{ "before": false, "after": true }`:
+
+<!-- prettier-ignore -->
+```ts
+let foo: string = "bar";
+
+function foo(): string {}
+
+class Foo {
+    name: string;
+}
+
+type Foo = ()=> {};
+```
+
+### before
+
+Examples of **incorrect** code for this rule with `{ "before": true, "after": true }` options:
+
+<!-- prettier-ignore -->
+```ts
+let foo: string = "bar";
+let foo:string = "bar";
+let foo :string = "bar";
+
+function foo(): string {}
+function foo():string {}
+function foo() :string {}
+
+class Foo {
+    name: string;
+}
+
+class Foo {
+    name:string;
+}
+
+class Foo {
+    name :string;
+}
+
+type Foo = ()=>{};
+type Foo = () =>{};
+type Foo = ()=> {};
+```
+
+Examples of **correct** code for this rule with `{ "before": true, "after": true }` options:
+
+<!-- prettier-ignore -->
+```ts
+let foo : string = "bar";
+
+function foo() : string {}
+
+class Foo {
+    name : string;
+}
+
+type Foo = () => {};
+```
+
+### overrides - colon
+
+Examples of **incorrect** code for this rule with `{ "before": false, "after": false, overrides: { colon: { before: true, after: true }} }` options:
+
+<!-- prettier-ignore -->
+```ts
+let foo: string = "bar";
+let foo:string = "bar";
+let foo :string = "bar";
+
+function foo(): string {}
+function foo():string {}
+function foo() :string {}
+
+class Foo {
+    name: string;
+}
+
+class Foo {
+    name:string;
+}
+
+class Foo {
+    name :string;
+}
+
+type Foo = () =>{};
+type Foo = ()=> {};
+type Foo = () => {};
+```
+
+Examples of **correct** code for this rule with `{ "before": false, "after": false, overrides: { colon: { before: true, after: true }} }` options:
+
+<!-- prettier-ignore -->
+```ts
+let foo : string = "bar";
+
+function foo() : string {}
+
+class Foo {
+    name : string;
+}
+
+type Foo = {
+    name: (name : string)=>string;
+}
+
+type Foo = ()=>{};
+```
+
+### overrides - arrow
+
+Examples of **incorrect** code for this rule with `{ "before": false, "after": false, overrides: { arrow: { before: true, after: true }} }` options:
+
+<!-- prettier-ignore -->
+```ts
+let foo: string = "bar";
+let foo : string = "bar";
+let foo :string = "bar";
+
+function foo(): string {}
+function foo():string {}
+function foo() :string {}
+
+class Foo {
+    name: string;
+}
+
+class Foo {
+    name : string;
+}
+
+class Foo {
+    name :string;
+}
+
+type Foo = ()=>{};
+type Foo = () =>{};
+type Foo = ()=> {};
+```
+
+Examples of **correct** code for this rule with `{ "before": false, "after": false, overrides: { arrow: { before: true, after: true }} }` options:
+
+<!-- prettier-ignore -->
+```ts
+let foo:string = "bar";
+
+function foo():string {}
+
+class Foo {
+    name:string;
+}
+
+type Foo = () => {};
+```
+
+## When Not To Use It
+
+If you don't want to enforce spacing for your type annotations, you can safely turn this rule off.
+
+## Further Reading
+
+- [TypeScript Type System](https://basarat.gitbooks.io/typescript/docs/types/type-system.html)
+- [Type Inference](https://www.typescriptlang.org/docs/handbook/type-inference.html)
+
+## Compatibility
+
+- TSLint: [`typedef-whitespace`](https://palantir.github.io/tslint/rules/typedef-whitespace/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/typedef.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/typedef.md
new file mode 100644
index 0000000000000000000000000000000000000000..6c96fa0317da8610bb8796e04879a8d0afc7aff2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/typedef.md
@@ -0,0 +1,308 @@
+# Requires type annotations to exist (`typedef`)
+
+TypeScript cannot always infer types for all places in code.
+Some locations require type annotations for their types to be inferred.
+
+```ts
+class ContainsText {
+  // There must be a type annotation here to infer the type
+  delayedText: string;
+
+  // `typedef` requires a type annotation here to maintain consistency
+  immediateTextExplicit: string = 'text';
+
+  // This is still a string type because of its initial value
+  immediateTextImplicit = 'text';
+}
+```
+
+**_Note:_** requiring type annotations unnecessarily can be cumbersome to maintain and generally reduces code readability.
+TypeScript is often better at inferring types than easily written type annotations would allow.
+
+**Instead of enabling `typedef`, it is generally recommended to use the `--noImplicitAny` and `--strictPropertyInitialization` compiler options to enforce type annotations only when useful.**
+
+## Rule Details
+
+This rule can enforce type annotations in locations regardless of whether they're required.
+This is typically used to maintain consistency for element types that sometimes require them.
+
+> To enforce type definitions existing on call signatures as per TSLint's `arrow-call-signature` and `call-signature` options, use `explicit-function-return-type`, or `explicit-module-boundary-types`.
+
+## Options
+
+```ts
+type Options = {
+  arrayDestructuring?: boolean;
+  arrowParameter?: boolean;
+  memberVariableDeclaration?: boolean;
+  objectDestructuring?: boolean;
+  parameter?: boolean;
+  propertyDeclaration?: boolean;
+  variableDeclaration?: boolean;
+  variableDeclarationIgnoreFunction?: boolean;
+};
+
+const defaultOptions: Options = {
+  arrayDestructuring: false,
+  arrowParameter: false,
+  memberVariableDeclaration: false,
+  objectDestructuring: false,
+  parameter: false,
+  propertyDeclaration: false,
+  variableDeclaration: false,
+  variableDeclarationIgnoreFunction: false,
+};
+```
+
+For example, with the following configuration:
+
+```json
+{
+  "rules": {
+    "@typescript-eslint/typedef": [
+      "error",
+      {
+        "arrowParameter": true,
+        "variableDeclaration": true
+      }
+    ]
+  }
+}
+```
+
+- Type annotations on arrow function parameters are required
+- Type annotations on variables are required
+
+### `arrayDestructuring`
+
+Whether to enforce type annotations on variables declared using array destructuring.
+
+Examples of **incorrect** code with `{ "arrayDestructuring": true }`:
+
+```ts
+const [a] = [1];
+const [b, c] = [1, 2];
+```
+
+Examples of **correct** code with `{ "arrayDestructuring": true }`:
+
+```ts
+const [a]: number[] = [1];
+const [b]: [number] = [2];
+const [c, d]: [boolean, string] = [true, 'text'];
+
+for (const [key, val] of new Map([['key', 1]])) {
+}
+```
+
+### `arrowParameter`
+
+Whether to enforce type annotations for parameters of arrow functions.
+
+Examples of **incorrect** code with `{ "arrowParameter": true }`:
+
+```ts
+const logsSize = size => console.log(size);
+
+['hello', 'world'].map(text => text.length);
+
+const mapper = {
+  map: text => text + '...',
+};
+```
+
+Examples of **correct** code with `{ "arrowParameter": true }`:
+
+```ts
+const logsSize = (size: number) => console.log(text);
+
+['hello', 'world'].map((text: string) => text.length);
+
+const mapper = {
+  map: (text: string) => text + '...',
+};
+```
+
+### `memberVariableDeclaration`
+
+Whether to enforce type annotations on member variables of classes.
+
+Examples of **incorrect** code with `{ "memberVariableDeclaration": true }`:
+
+```ts
+class ContainsText {
+  delayedText;
+  immediateTextImplicit = 'text';
+}
+```
+
+Examples of **correct** code with `{ "memberVariableDeclaration": true }`:
+
+```ts
+class ContainsText {
+  delayedText: string;
+  immediateTextImplicit: string = 'text';
+}
+```
+
+### `objectDestructuring`
+
+Whether to enforce type annotations on variables declared using object destructuring.
+
+Examples of **incorrect** code with `{ "objectDestructuring": true }`:
+
+```ts
+const { length } = 'text';
+const [b, c] = Math.random() ? [1, 2] : [3, 4];
+```
+
+Examples of **correct** code with `{ "objectDestructuring": true }`:
+
+```ts
+const { length }: { length: number } = 'text';
+const [b, c]: [number, number] = Math.random() ? [1, 2] : [3, 4];
+
+for (const { key, val } of [{ key: 'key', val: 1 }]) {
+}
+```
+
+### `parameter`
+
+Whether to enforce type annotations for parameters of functions and methods.
+
+Examples of **incorrect** code with `{ "parameter": true }`:
+
+```ts
+function logsSize(size): void {
+  console.log(size);
+}
+
+const doublesSize = function (size): number {
+  return size * 2;
+};
+
+const divider = {
+  curriesSize(size): number {
+    return size;
+  },
+  dividesSize: function (size): number {
+    return size / 2;
+  },
+};
+
+class Logger {
+  log(text): boolean {
+    console.log('>', text);
+    return true;
+  }
+}
+```
+
+Examples of **correct** code with `{ "parameter": true }`:
+
+```ts
+function logsSize(size: number): void {
+  console.log(size);
+}
+
+const doublesSize = function (size: number): number {
+  return size * 2;
+};
+
+const divider = {
+  curriesSize(size: number): number {
+    return size;
+  },
+  dividesSize: function (size: number): number {
+    return size / 2;
+  },
+};
+
+class Logger {
+  log(text: boolean): boolean {
+    console.log('>', text);
+    return true;
+  }
+}
+```
+
+### `propertyDeclaration`
+
+Whether to enforce type annotations for properties of interfaces and types.
+
+Examples of **incorrect** code with `{ "propertyDeclaration": true }`:
+
+```ts
+type Members = {
+  member;
+  otherMember;
+};
+```
+
+Examples of **correct** code with `{ "propertyDeclaration": true }`:
+
+```ts
+type Members = {
+  member: boolean;
+  otherMember: string;
+};
+```
+
+### `variableDeclaration`
+
+Whether to enforce type annotations for variable declarations, excluding array and object destructuring.
+
+Examples of **incorrect** code with `{ "variableDeclaration": true }`:
+
+```ts
+const text = 'text';
+let initialText = 'text';
+let delayedText;
+```
+
+Examples of **correct** code with `{ "variableDeclaration": true }`:
+
+```ts
+const text: string = 'text';
+let initialText: string = 'text';
+let delayedText: string;
+```
+
+### `variableDeclarationIgnoreFunction`
+
+Ignore variable declarations for non-arrow and arrow functions.
+
+Examples of **incorrect** code with `{ "variableDeclaration": true, "variableDeclarationIgnoreFunction": true }`:
+
+```ts
+const text = 'text';
+```
+
+Examples of **correct** code with `{ "variableDeclaration": true, "variableDeclarationIgnoreFunction": true }`:
+
+```ts
+const a = (): void => {};
+const b = function (): void => {};
+const c: () => void = (): void => {};
+
+class Foo {
+  a = (): void => {};
+  b = function (): void => {};
+  c = () => void = (): void => {};
+}
+```
+
+## When Not To Use It
+
+If you are using stricter TypeScript compiler options, particularly `--noImplicitAny` and/or `--strictPropertyInitialization`, you likely don't need this rule.
+
+In general, if you do not consider the cost of writing unnecessary type annotations reasonable, then do not use this rule.
+
+## Further Reading
+
+- [TypeScript Type System](https://basarat.gitbooks.io/typescript/docs/types/type-system.html)
+- [Type Inference](https://www.typescriptlang.org/docs/handbook/type-inference.html)
+
+## Compatibility
+
+- TSLint: [`typedef`](https://palantir.github.io/tslint/rules/typedef)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/unbound-method.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/unbound-method.md
new file mode 100644
index 0000000000000000000000000000000000000000..a9a4fe396a24c7ef046e84f7f71bff9075c0d4fc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/unbound-method.md
@@ -0,0 +1,108 @@
+# Enforces unbound methods are called with their expected scope (`unbound-method`)
+
+Warns when a method is used outside of a method call.
+
+Class functions don't preserve the class scope when passed as standalone variables.
+
+## Rule Details
+
+Examples of **incorrect** code for this rule
+
+```ts
+class MyClass {
+  public log(): void {
+    console.log(this);
+  }
+}
+
+const instance = new MyClass();
+
+// This logs the global scope (`window`/`global`), not the class instance
+const myLog = instance.log;
+myLog();
+
+// This log might later be called with an incorrect scope
+const { log } = instance;
+
+// arith.double may refer to `this` internally
+const arith = {
+  double(x: number): number {
+    return x * 2;
+  },
+};
+const { double } = arith;
+```
+
+Examples of **correct** code for this rule
+
+```ts
+class MyClass {
+  public logUnbound(): void {
+    console.log(this);
+  }
+
+  public logBound = () => console.log(this);
+}
+
+const instance = new MyClass();
+
+// logBound will always be bound with the correct scope
+const { logBound } = instance;
+logBound();
+
+// .bind and lambdas will also add a correct scope
+const dotBindLog = instance.logBound.bind(instance);
+const innerLog = () => instance.logBound();
+
+// arith.double explicitly declares that it does not refer to `this` internally
+const arith = {
+  double(this: void, x: number): number {
+    return x * 2;
+  },
+};
+const { double } = arith;
+```
+
+## Options
+
+The rule accepts an options object with the following property:
+
+- `ignoreStatic` to not check whether `static` methods are correctly bound
+
+### `ignoreStatic`
+
+Examples of **correct** code for this rule with `{ ignoreStatic: true }`:
+
+```ts
+class OtherClass {
+  static log() {
+    console.log(OtherClass);
+  }
+}
+
+// With `ignoreStatic`, statics are assumed to not rely on a particular scope
+const { log } = OtherClass;
+
+log();
+```
+
+### Example
+
+```json
+{
+  "@typescript-eslint/unbound-method": [
+    "error",
+    {
+      "ignoreStatic": true
+    }
+  ]
+}
+```
+
+## When Not To Use It
+
+If your code intentionally waits to bind methods after use, such as by passing a `scope: this` along with the method, you can disable this rule.
+
+## Related To
+
+- TSLint: [no-unbound-method](https://palantir.github.io/tslint/rules/no-unbound-method/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/unified-signatures.md b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/unified-signatures.md
new file mode 100644
index 0000000000000000000000000000000000000000..7ed5116c2aa607e485d3da455c04f1d23d88da35
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/docs/rules/unified-signatures.md
@@ -0,0 +1,33 @@
+# Warns for any two overloads that could be unified into one by using a union or an optional/rest parameter (`unified-signatures`)
+
+Warns for any two overloads that could be unified into one by using a union or an optional/rest parameter.
+
+## Rule Details
+
+This rule aims to keep the source code as maintainable as possible by reducing the amount of overloads.
+
+Examples of **incorrect** code for this rule:
+
+```ts
+function f(x: number): void;
+function f(x: string): void;
+```
+
+```ts
+f(): void;
+f(...x: number[]): void;
+```
+
+Examples of **correct** code for this rule:
+
+```ts
+function f(x: number | string): void;
+```
+
+```ts
+function f(x?: ...number[]): void;
+```
+
+## Related to
+
+- TSLint: [`unified-signatures`](https://palantir.github.io/tslint/rules/unified-signatures/)
diff --git a/server/node_modules/@typescript-eslint/eslint-plugin/package.json b/server/node_modules/@typescript-eslint/eslint-plugin/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..cf45aee79f88f76c0c4e60e45dddebe07f0e4f1f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/eslint-plugin/package.json
@@ -0,0 +1,104 @@
+{
+  "_from": "@typescript-eslint/eslint-plugin@latest",
+  "_id": "@typescript-eslint/eslint-plugin@4.11.0",
+  "_inBundle": false,
+  "_integrity": "sha512-x4arJMXBxyD6aBXLm3W7mSDZRiABzy+2PCLJbL7OPqlp53VXhaA1HKK7R2rTee5OlRhnUgnp8lZyVIqjnyPT6g==",
+  "_location": "/@typescript-eslint/eslint-plugin",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "tag",
+    "registry": true,
+    "raw": "@typescript-eslint/eslint-plugin@latest",
+    "name": "@typescript-eslint/eslint-plugin",
+    "escapedName": "@typescript-eslint%2feslint-plugin",
+    "scope": "@typescript-eslint",
+    "rawSpec": "latest",
+    "saveSpec": null,
+    "fetchSpec": "latest"
+  },
+  "_requiredBy": [
+    "#DEV:/",
+    "#USER"
+  ],
+  "_resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.11.0.tgz",
+  "_shasum": "bc6c1e4175c0cf42083da4314f7931ad12f731cc",
+  "_spec": "@typescript-eslint/eslint-plugin@latest",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server",
+  "bugs": {
+    "url": "https://github.com/typescript-eslint/typescript-eslint/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@typescript-eslint/experimental-utils": "4.11.0",
+    "@typescript-eslint/scope-manager": "4.11.0",
+    "debug": "^4.1.1",
+    "functional-red-black-tree": "^1.0.1",
+    "regexpp": "^3.0.0",
+    "semver": "^7.3.2",
+    "tsutils": "^3.17.1"
+  },
+  "deprecated": false,
+  "description": "TypeScript plugin for ESLint",
+  "devDependencies": {
+    "@types/debug": "*",
+    "@types/marked": "^1.1.0",
+    "@types/prettier": "*",
+    "chalk": "^4.0.0",
+    "marked": "^1.0.0",
+    "prettier": "*",
+    "typescript": "*"
+  },
+  "engines": {
+    "node": "^10.12.0 || >=12.0.0"
+  },
+  "files": [
+    "dist",
+    "docs",
+    "package.json",
+    "README.md",
+    "LICENSE"
+  ],
+  "funding": {
+    "type": "opencollective",
+    "url": "https://opencollective.com/typescript-eslint"
+  },
+  "gitHead": "e8f73e168a89ff9a84038e760a667b646ede5956",
+  "homepage": "https://github.com/typescript-eslint/typescript-eslint#readme",
+  "keywords": [
+    "eslint",
+    "eslintplugin",
+    "eslint-plugin",
+    "typescript"
+  ],
+  "license": "MIT",
+  "main": "dist/index.js",
+  "name": "@typescript-eslint/eslint-plugin",
+  "peerDependencies": {
+    "@typescript-eslint/parser": "^4.0.0",
+    "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
+  },
+  "peerDependenciesMeta": {
+    "typescript": {
+      "optional": true
+    }
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/typescript-eslint/typescript-eslint.git",
+    "directory": "packages/eslint-plugin"
+  },
+  "scripts": {
+    "build": "tsc -b tsconfig.build.json",
+    "check:configs": "jest tests/configs.test.ts --runTestsByPath --silent --runInBand",
+    "check:docs": "jest tests/docs.test.ts --runTestsByPath --silent --runInBand",
+    "clean": "tsc -b tsconfig.build.json --clean",
+    "format": "prettier --write \"./**/*.{ts,js,json,md}\" --ignore-path ../../.prettierignore",
+    "generate:configs": "../../node_modules/.bin/ts-node --files --transpile-only tools/generate-configs.ts",
+    "generate:rules-lists": "../../node_modules/.bin/ts-node --files --transpile-only tools/generate-rules-lists.ts",
+    "lint": "eslint . --ext .js,.ts --ignore-path ../../.eslintignore",
+    "postclean": "rimraf dist",
+    "test": "jest --coverage",
+    "typecheck": "tsc -p tsconfig.json --noEmit"
+  },
+  "version": "4.11.0"
+}
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/CHANGELOG.md b/server/node_modules/@typescript-eslint/experimental-utils/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..c050fe23955e4eb09d9161499507074a13957fe3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/CHANGELOG.md
@@ -0,0 +1,838 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [4.11.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.10.0...v4.11.0) (2020-12-21)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [4.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.9.1...v4.10.0) (2020-12-14)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+## [4.9.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.9.0...v4.9.1) (2020-12-07)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [4.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.2...v4.9.0) (2020-11-30)
+
+
+### Features
+
+* **eslint-plugin:** [no-unused-vars] fork the base rule ([#2768](https://github.com/typescript-eslint/typescript-eslint/issues/2768)) ([a8227a6](https://github.com/typescript-eslint/typescript-eslint/commit/a8227a6185dd24de4bfc7d766931643871155021)), closes [#2782](https://github.com/typescript-eslint/typescript-eslint/issues/2782) [#2714](https://github.com/typescript-eslint/typescript-eslint/issues/2714) [#2648](https://github.com/typescript-eslint/typescript-eslint/issues/2648)
+
+
+
+
+
+## [4.8.2](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.1...v4.8.2) (2020-11-23)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+## [4.8.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.0...v4.8.1) (2020-11-17)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [4.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.7.0...v4.8.0) (2020-11-16)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [4.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.6.1...v4.7.0) (2020-11-09)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+## [4.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.6.0...v4.6.1) (2020-11-02)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [4.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.5.0...v4.6.0) (2020-10-26)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [4.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.4.1...v4.5.0) (2020-10-19)
+
+
+### Features
+
+* **typescript-estree:** add flag EXPERIMENTAL_useSourceOfProjectReferenceRedirect ([#2669](https://github.com/typescript-eslint/typescript-eslint/issues/2669)) ([90a5878](https://github.com/typescript-eslint/typescript-eslint/commit/90a587845088da1b205e4d7d77dbc3f9447b1c5a))
+
+
+
+
+
+## [4.4.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.4.0...v4.4.1) (2020-10-12)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [4.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.3.0...v4.4.0) (2020-10-05)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [4.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.2.0...v4.3.0) (2020-09-28)
+
+
+### Bug Fixes
+
+* **experimental-utils:** treat RuleTester arrays as readonly ([#2601](https://github.com/typescript-eslint/typescript-eslint/issues/2601)) ([8025777](https://github.com/typescript-eslint/typescript-eslint/commit/80257776b78bd2b2b4389d6bd530b009a75fb520))
+
+
+
+
+
+# [4.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.1.1...v4.2.0) (2020-09-21)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+## [4.1.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.1.0...v4.1.1) (2020-09-14)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-use-before-define] false positive for function type arguments ([#2554](https://github.com/typescript-eslint/typescript-eslint/issues/2554)) ([189162d](https://github.com/typescript-eslint/typescript-eslint/commit/189162d46ecb116c420232937a7f86df913f4e79)), closes [#2527](https://github.com/typescript-eslint/typescript-eslint/issues/2527)
+
+
+
+
+
+# [4.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.0.1...v4.1.0) (2020-09-07)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+## [4.0.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.0.0...v4.0.1) (2020-08-31)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [4.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.10.1...v4.0.0) (2020-08-31)
+
+## [Please see the release notes for v4.0.0](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v4.0.0)
+
+### Features
+
+* consume new scope analysis package ([#2039](https://github.com/typescript-eslint/typescript-eslint/issues/2039)) ([3be125d](https://github.com/typescript-eslint/typescript-eslint/commit/3be125d9bdbee1984ac6037874edf619213bd3d0))
+* support ESTree optional chaining representation ([#2308](https://github.com/typescript-eslint/typescript-eslint/issues/2308)) ([e9d2ab6](https://github.com/typescript-eslint/typescript-eslint/commit/e9d2ab638b6767700b52797e74b814ea059beaae))
+
+
+
+
+
+## [3.10.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.10.0...v3.10.1) (2020-08-25)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [3.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.9.1...v3.10.0) (2020-08-24)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+## [3.9.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.9.0...v3.9.1) (2020-08-17)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [3.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.8.0...v3.9.0) (2020-08-10)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [3.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.7.1...v3.8.0) (2020-08-03)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+## [3.7.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.7.0...v3.7.1) (2020-07-27)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [3.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.6.1...v3.7.0) (2020-07-20)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+## [3.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.6.0...v3.6.1) (2020-07-13)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [3.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.5.0...v3.6.0) (2020-07-06)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [3.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.4.0...v3.5.0) (2020-06-29)
+
+
+### Features
+
+* add package scope-manager ([#1939](https://github.com/typescript-eslint/typescript-eslint/issues/1939)) ([682eb7e](https://github.com/typescript-eslint/typescript-eslint/commit/682eb7e009c3f22a542882dfd3602196a60d2a1e))
+* split types into their own package ([#2229](https://github.com/typescript-eslint/typescript-eslint/issues/2229)) ([5f45918](https://github.com/typescript-eslint/typescript-eslint/commit/5f4591886f3438329fbf2229b03ac66174334a24))
+
+
+
+
+
+# [3.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.3.0...v3.4.0) (2020-06-22)
+
+
+### Bug Fixes
+
+* **experimental-utils:** correct types for TS versions older than 3.8 ([#2217](https://github.com/typescript-eslint/typescript-eslint/issues/2217)) ([5e4dda2](https://github.com/typescript-eslint/typescript-eslint/commit/5e4dda264a7d6a6a1626848e7599faea1ac34922))
+* **experimental-utils:** getParserServices takes a readonly context ([#2235](https://github.com/typescript-eslint/typescript-eslint/issues/2235)) ([26da8de](https://github.com/typescript-eslint/typescript-eslint/commit/26da8de7fcde9eddec63212d79af781c4bb22991))
+
+
+
+
+
+# [3.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.2.0...v3.3.0) (2020-06-15)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [3.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.1.0...v3.2.0) (2020-06-08)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [prefer-optional-chain] handling first member expression ([#2156](https://github.com/typescript-eslint/typescript-eslint/issues/2156)) ([de18660](https://github.com/typescript-eslint/typescript-eslint/commit/de18660a8cf8f7033798646d8c5b0938d1accb12))
+
+
+
+
+
+# [3.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.0.2...v3.1.0) (2020-06-01)
+
+
+### Bug Fixes
+
+* **experimental-utils:** downlevel type declarations for versions older than 3.8 ([#2133](https://github.com/typescript-eslint/typescript-eslint/issues/2133)) ([7925823](https://github.com/typescript-eslint/typescript-eslint/commit/792582326a8065270b69a0ffcaad5a7b4b103ff3))
+
+
+### Features
+
+* **eslint-plugin:** [explicit-module-boundary-types] improve accuracy and coverage ([#2135](https://github.com/typescript-eslint/typescript-eslint/issues/2135)) ([caaa859](https://github.com/typescript-eslint/typescript-eslint/commit/caaa8599284d02ab3341e282cad35a52d0fb86c7))
+
+
+
+
+
+## [3.0.2](https://github.com/typescript-eslint/typescript-eslint/compare/v3.0.1...v3.0.2) (2020-05-27)
+
+
+### Bug Fixes
+
+* regression for eslint v6 ([#2105](https://github.com/typescript-eslint/typescript-eslint/issues/2105)) ([31fc503](https://github.com/typescript-eslint/typescript-eslint/commit/31fc5039ed919e1515fda673c186d5c83eb5beb3))
+
+
+
+
+
+## [3.0.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.0.0...v3.0.1) (2020-05-25)
+
+
+### Bug Fixes
+
+* **experimental-utils:** export `CLIEngine` & `ESLint` ([#2083](https://github.com/typescript-eslint/typescript-eslint/issues/2083)) ([014341b](https://github.com/typescript-eslint/typescript-eslint/commit/014341bb23261f609fc2a6fe7fece191466a084a))
+
+
+
+
+
+# [3.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.34.0...v3.0.0) (2020-05-21)
+
+## [Please see the release notes for v3.0.0](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v3.0.0)
+
+### Bug Fixes
+
+* **experimental-utils:** add back SourceCode.isSpaceBetweenTokens ([ae82ea4](https://github.com/typescript-eslint/typescript-eslint/commit/ae82ea4a85a4ca332ebe6104e96c59dba30411be))
+* **typescript-estree:** remove now defunct `Import` node type ([f199cbd](https://github.com/typescript-eslint/typescript-eslint/commit/f199cbdbbd892b5ba03bfff66f463f3d9c92ee9b))
+
+
+### Features
+
+* **experimental-utils:** upgrade eslint types for v7 ([#2023](https://github.com/typescript-eslint/typescript-eslint/issues/2023)) ([06869c9](https://github.com/typescript-eslint/typescript-eslint/commit/06869c9656fa37936126666845aee40aad546ebd))
+* drop support for node v8 ([#1997](https://github.com/typescript-eslint/typescript-eslint/issues/1997)) ([b6c3b7b](https://github.com/typescript-eslint/typescript-eslint/commit/b6c3b7b84b8d199fa75a46432febd4a364a63217))
+* upgrade to ESLint v7 ([#2022](https://github.com/typescript-eslint/typescript-eslint/issues/2022)) ([208de71](https://github.com/typescript-eslint/typescript-eslint/commit/208de71059746bf38e94bd460346ffb2698a3e12))
+* **eslint-plugin:** [ban-types] rework default options ([#848](https://github.com/typescript-eslint/typescript-eslint/issues/848)) ([8e31d5d](https://github.com/typescript-eslint/typescript-eslint/commit/8e31d5dbe9fe5227fdbefcecfd50ce5dd51360c3))
+* **typescript-estree:** always return parserServices ([#716](https://github.com/typescript-eslint/typescript-eslint/issues/716)) ([5b23443](https://github.com/typescript-eslint/typescript-eslint/commit/5b23443c48f3f62424db3e742243f3568080b946))
+
+
+
+
+
+# [2.34.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.33.0...v2.34.0) (2020-05-18)
+
+
+### Features
+
+* **experimental-utils:** add `suggestion` property for rule  modules ([#2033](https://github.com/typescript-eslint/typescript-eslint/issues/2033)) ([f42a5b0](https://github.com/typescript-eslint/typescript-eslint/commit/f42a5b09ebfa173f418a99c552b0cbe221567194))
+
+
+
+
+
+# [2.33.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.32.0...v2.33.0) (2020-05-12)
+
+
+### Bug Fixes
+
+* **experimental-utils:** remove accidental dep on json-schema ([#2010](https://github.com/typescript-eslint/typescript-eslint/issues/2010)) ([1875fba](https://github.com/typescript-eslint/typescript-eslint/commit/1875fbad41f2a3dda8f610f5dcd180c6205b73d3))
+
+
+
+
+
+# [2.32.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.31.0...v2.32.0) (2020-05-11)
+
+
+### Features
+
+* bump dependencies and align AST ([#2007](https://github.com/typescript-eslint/typescript-eslint/issues/2007)) ([18668b7](https://github.com/typescript-eslint/typescript-eslint/commit/18668b78fd7d1e5281af7fc26c76e0ca53297f69))
+
+
+
+
+
+# [2.31.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.30.0...v2.31.0) (2020-05-04)
+
+
+### Features
+
+* **experimental-utils:** expose our RuleTester extension ([#1948](https://github.com/typescript-eslint/typescript-eslint/issues/1948)) ([2dd1638](https://github.com/typescript-eslint/typescript-eslint/commit/2dd1638aaa2658ba99b2341861146b586f489121))
+
+
+
+
+
+# [2.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.29.0...v2.30.0) (2020-04-27)
+
+
+### Features
+
+* **experimental-utils:** allow rule options to be a readonly tuple ([#1924](https://github.com/typescript-eslint/typescript-eslint/issues/1924)) ([4ef6788](https://github.com/typescript-eslint/typescript-eslint/commit/4ef67884962b6aac61cc895aaa3ba16aa892ecf4))
+
+
+
+
+
+# [2.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.28.0...v2.29.0) (2020-04-20)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.28.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.27.0...v2.28.0) (2020-04-13)
+
+
+### Features
+
+* **eslint-plugin:** add rule `prefer-reduce-type-parameter` ([#1707](https://github.com/typescript-eslint/typescript-eslint/issues/1707)) ([c92d240](https://github.com/typescript-eslint/typescript-eslint/commit/c92d240e49113779053eac32038382b282812afc))
+
+
+
+
+
+# [2.27.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.26.0...v2.27.0) (2020-04-06)
+
+
+### Features
+
+* **experimental-utils:** add types for suggestions from CLIEngine ([#1844](https://github.com/typescript-eslint/typescript-eslint/issues/1844)) ([7c11bd6](https://github.com/typescript-eslint/typescript-eslint/commit/7c11bd66f2d0e5ea9d3943e6b8c66e6ddff50862))
+* **experimental-utils:** update eslint types to match v6.8 ([#1846](https://github.com/typescript-eslint/typescript-eslint/issues/1846)) ([16ce74d](https://github.com/typescript-eslint/typescript-eslint/commit/16ce74d247781ac890dc0baa30c384f97e581b6b))
+
+
+
+
+
+# [2.26.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.25.0...v2.26.0) (2020-03-30)
+
+
+### Features
+
+* **typescript-estree:** add option to ignore certain folders from glob resolution ([#1802](https://github.com/typescript-eslint/typescript-eslint/issues/1802)) ([1e29e69](https://github.com/typescript-eslint/typescript-eslint/commit/1e29e69b289d61107a7de67592beae331ba50222))
+
+
+
+
+
+# [2.25.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.24.0...v2.25.0) (2020-03-23)
+
+
+### Features
+
+* **experimental-utils:** expose ast utility functions ([#1670](https://github.com/typescript-eslint/typescript-eslint/issues/1670)) ([3eb5d45](https://github.com/typescript-eslint/typescript-eslint/commit/3eb5d4525e95c8ab990f55588b8d830a02ce5a9c))
+
+
+
+
+
+# [2.24.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.23.0...v2.24.0) (2020-03-16)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.23.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.22.0...v2.23.0) (2020-03-09)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.22.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.21.0...v2.22.0) (2020-03-02)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.21.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.20.0...v2.21.0) (2020-02-24)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.20.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.19.2...v2.20.0) (2020-02-17)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+## [2.19.2](https://github.com/typescript-eslint/typescript-eslint/compare/v2.19.1...v2.19.2) (2020-02-10)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+## [2.19.1](https://github.com/typescript-eslint/typescript-eslint/compare/v2.19.0...v2.19.1) (2020-02-10)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.19.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.18.0...v2.19.0) (2020-02-03)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.18.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.17.0...v2.18.0) (2020-01-27)
+
+
+### Bug Fixes
+
+* improve token types and add missing type guards ([#1497](https://github.com/typescript-eslint/typescript-eslint/issues/1497)) ([ce41d7d](https://github.com/typescript-eslint/typescript-eslint/commit/ce41d7de33bcb7ccf96c03ac1438304c5a49ff54))
+* **experimental-utils:** widen type of `settings` property ([#1527](https://github.com/typescript-eslint/typescript-eslint/issues/1527)) ([b515e47](https://github.com/typescript-eslint/typescript-eslint/commit/b515e47af2bc914c7ebcfa4be813409dcd86b1c3))
+
+
+### Features
+
+* **experimental-utils:** make RuleMetaData.docs optional ([#1462](https://github.com/typescript-eslint/typescript-eslint/issues/1462)) ([cde97ac](https://github.com/typescript-eslint/typescript-eslint/commit/cde97aca24df5a0f28f37006ed130ebc217fb2ad))
+* **parser:** clean up scope-analysis types ([#1481](https://github.com/typescript-eslint/typescript-eslint/issues/1481)) ([4a727fa](https://github.com/typescript-eslint/typescript-eslint/commit/4a727fa083d749dba9eaf39322856f5f69c28cd8))
+
+
+
+
+
+# [2.17.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.16.0...v2.17.0) (2020-01-20)
+
+
+### Features
+
+* **experimental-utils:** expose getParserServices from utils ([#1448](https://github.com/typescript-eslint/typescript-eslint/issues/1448)) ([982c8bc](https://github.com/typescript-eslint/typescript-eslint/commit/982c8bc))
+
+
+
+
+
+# [2.16.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.15.0...v2.16.0) (2020-01-13)
+
+
+### Features
+
+* **typescript-estree:** add parserOption to turn on debug logs ([#1413](https://github.com/typescript-eslint/typescript-eslint/issues/1413)) ([25092fd](https://github.com/typescript-eslint/typescript-eslint/commit/25092fd))
+* **typescript-estree:** add strict type mapping to esTreeNodeToTSNodeMap ([#1382](https://github.com/typescript-eslint/typescript-eslint/issues/1382)) ([d3d70a3](https://github.com/typescript-eslint/typescript-eslint/commit/d3d70a3))
+
+
+
+
+
+# [2.15.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.14.0...v2.15.0) (2020-01-06)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.14.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.13.0...v2.14.0) (2019-12-30)
+
+
+### Features
+
+* add internal eslint plugin for repo-specific lint rules ([#1373](https://github.com/typescript-eslint/typescript-eslint/issues/1373)) ([3a15413](https://github.com/typescript-eslint/typescript-eslint/commit/3a15413))
+
+
+
+
+
+# [2.13.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.12.0...v2.13.0) (2019-12-23)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.12.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.11.0...v2.12.0) (2019-12-16)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.11.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.10.0...v2.11.0) (2019-12-09)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.9.0...v2.10.0) (2019-12-02)
+
+
+### Features
+
+* **eslint-plugin:** [no-non-null-assert] add suggestion fixer ([#1260](https://github.com/typescript-eslint/typescript-eslint/issues/1260)) ([e350a21](https://github.com/typescript-eslint/typescript-eslint/commit/e350a21))
+* **experimental-utils:** add isSpaceBetween declaration to Sou… ([#1268](https://github.com/typescript-eslint/typescript-eslint/issues/1268)) ([f83f04b](https://github.com/typescript-eslint/typescript-eslint/commit/f83f04b))
+
+
+
+
+
+# [2.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.8.0...v2.9.0) (2019-11-25)
+
+
+### Features
+
+* suggestion types, suggestions for no-explicit-any ([#1250](https://github.com/typescript-eslint/typescript-eslint/issues/1250)) ([b16a4b6](https://github.com/typescript-eslint/typescript-eslint/commit/b16a4b6))
+* **eslint-plugin:** add prefer-nullish-coalescing ([#1069](https://github.com/typescript-eslint/typescript-eslint/issues/1069)) ([a9cd399](https://github.com/typescript-eslint/typescript-eslint/commit/a9cd399))
+* **eslint-plugin:** add rule prefer-optional-chain ([#1213](https://github.com/typescript-eslint/typescript-eslint/issues/1213)) ([ad7e1a7](https://github.com/typescript-eslint/typescript-eslint/commit/ad7e1a7))
+
+
+
+
+
+# [2.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.7.0...v2.8.0) (2019-11-18)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.6.1...v2.7.0) (2019-11-11)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+## [2.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v2.6.0...v2.6.1) (2019-11-04)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.5.0...v2.6.0) (2019-10-28)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.4.0...v2.5.0) (2019-10-21)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.3...v2.4.0) (2019-10-14)
+
+
+### Bug Fixes
+
+* support long running "watch" lint sessions ([#973](https://github.com/typescript-eslint/typescript-eslint/issues/973)) ([854620e](https://github.com/typescript-eslint/typescript-eslint/commit/854620e))
+
+
+### Features
+
+* **typescript-estree:** support for parsing 3.7 features ([#1045](https://github.com/typescript-eslint/typescript-eslint/issues/1045)) ([623febf](https://github.com/typescript-eslint/typescript-eslint/commit/623febf))
+
+
+
+
+
+## [2.3.3](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.2...v2.3.3) (2019-10-07)
+
+
+### Bug Fixes
+
+* **experimental-utils:** remove Rule.meta.extraDescription ([#1036](https://github.com/typescript-eslint/typescript-eslint/issues/1036)) ([192e23d](https://github.com/typescript-eslint/typescript-eslint/commit/192e23d))
+
+
+
+
+
+## [2.3.2](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.1...v2.3.2) (2019-09-30)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+## [2.3.1](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.0...v2.3.1) (2019-09-23)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.2.0...v2.3.0) (2019-09-16)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.1.0...v2.2.0) (2019-09-09)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.0.0...v2.1.0) (2019-09-02)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [2.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.13.0...v2.0.0) (2019-08-13)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** add `Literal` to `RuleListener` types ([#824](https://github.com/typescript-eslint/typescript-eslint/issues/824)) ([3c902a1](https://github.com/typescript-eslint/typescript-eslint/commit/3c902a1))
+* **utils:** add ES2019 as valid `ecmaVersion` ([#746](https://github.com/typescript-eslint/typescript-eslint/issues/746)) ([d11fbbe](https://github.com/typescript-eslint/typescript-eslint/commit/d11fbbe))
+
+
+### Features
+
+* explicitly support eslint v6 ([#645](https://github.com/typescript-eslint/typescript-eslint/issues/645)) ([34a7cf6](https://github.com/typescript-eslint/typescript-eslint/commit/34a7cf6))
+
+
+* feat(eslint-plugin)!: recommended-requiring-type-checking config (#846) ([d3470c9](https://github.com/typescript-eslint/typescript-eslint/commit/d3470c9)), closes [#846](https://github.com/typescript-eslint/typescript-eslint/issues/846)
+* feat(eslint-plugin)!: change recommended config (#729) ([428567d](https://github.com/typescript-eslint/typescript-eslint/commit/428567d)), closes [#729](https://github.com/typescript-eslint/typescript-eslint/issues/729)
+* feat(eslint-plugin)!: add rule `consistent-type-assertions` (#731) ([92e98de](https://github.com/typescript-eslint/typescript-eslint/commit/92e98de)), closes [#731](https://github.com/typescript-eslint/typescript-eslint/issues/731)
+
+
+### BREAKING CHANGES
+
+* removed some rules from recommended config
+* recommended config changes are considered breaking
+* Merges both no-angle-bracket-type-assertion and no-object-literal-type-assertion into one rule
+* Node 6 is no longer supported
+
+
+
+
+
+# [1.13.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.12.0...v1.13.0) (2019-07-21)
+
+
+### Bug Fixes
+
+* Correct `@types/json-schema` dependency ([#675](https://github.com/typescript-eslint/typescript-eslint/issues/675)) ([a5398ce](https://github.com/typescript-eslint/typescript-eslint/commit/a5398ce))
+* **utils:** move `typescript` from peer dep to dev dep ([#712](https://github.com/typescript-eslint/typescript-eslint/issues/712)) ([f949355](https://github.com/typescript-eslint/typescript-eslint/commit/f949355))
+* **utils:** RuleTester should not require a parser ([#713](https://github.com/typescript-eslint/typescript-eslint/issues/713)) ([158a417](https://github.com/typescript-eslint/typescript-eslint/commit/158a417))
+
+
+### Features
+
+* **eslint-plugin:** add new rule no-misused-promises ([#612](https://github.com/typescript-eslint/typescript-eslint/issues/612)) ([28a131d](https://github.com/typescript-eslint/typescript-eslint/commit/28a131d))
+
+
+
+
+
+# [1.12.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.11.0...v1.12.0) (2019-07-12)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
+# [1.11.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.10.2...v1.11.0) (2019-06-23)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** Remove duplicated code ([#611](https://github.com/typescript-eslint/typescript-eslint/issues/611)) ([c4df4ff](https://github.com/typescript-eslint/typescript-eslint/commit/c4df4ff))
+
+
+### Features
+
+* **eslint-plugin:** add `consistent-type-definitions` rule ([#463](https://github.com/typescript-eslint/typescript-eslint/issues/463)) ([ec87d06](https://github.com/typescript-eslint/typescript-eslint/commit/ec87d06))
+
+
+
+
+
+## [1.10.2](https://github.com/typescript-eslint/typescript-eslint/compare/v1.10.1...v1.10.2) (2019-06-10)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+## [1.10.1](https://github.com/typescript-eslint/typescript-eslint/compare/v1.10.0...v1.10.1) (2019-06-09)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+# [1.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.9.0...v1.10.0) (2019-06-09)
+
+### Bug Fixes
+
+- **experimental-utils:** add `endLine` and `endColumn` ([#517](https://github.com/typescript-eslint/typescript-eslint/issues/517)) ([d9e5f15](https://github.com/typescript-eslint/typescript-eslint/commit/d9e5f15))
+- **experimental-utils:** Avoid typescript import at runtime ([#584](https://github.com/typescript-eslint/typescript-eslint/issues/584)) ([fac5c7d](https://github.com/typescript-eslint/typescript-eslint/commit/fac5c7d)), closes [/github.com/typescript-eslint/typescript-eslint/pull/425#issuecomment-498162293](https://github.com//github.com/typescript-eslint/typescript-eslint/pull/425/issues/issuecomment-498162293)
+
+### Features
+
+- make utils/TSESLint export typed classes instead of just types ([#526](https://github.com/typescript-eslint/typescript-eslint/issues/526)) ([370ac72](https://github.com/typescript-eslint/typescript-eslint/commit/370ac72))
+- support TypeScript versions >=3.2.1 <3.6.0 ([#597](https://github.com/typescript-eslint/typescript-eslint/issues/597)) ([5d2b962](https://github.com/typescript-eslint/typescript-eslint/commit/5d2b962))
+
+# [1.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.8.0...v1.9.0) (2019-05-12)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+# [1.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.7.0...v1.8.0) (2019-05-10)
+
+### Features
+
+- Move shared types into their own package ([#425](https://github.com/typescript-eslint/typescript-eslint/issues/425)) ([a7a03ce](https://github.com/typescript-eslint/typescript-eslint/commit/a7a03ce))
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/LICENSE b/server/node_modules/@typescript-eslint/experimental-utils/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..7e7370143b26b5e2a826528507c7cc8df2d2eacf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 TypeScript ESLint and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/README.md b/server/node_modules/@typescript-eslint/experimental-utils/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..208578bfc113e08d440dba599cb6b98e93742920
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/README.md
@@ -0,0 +1,37 @@
+<h1 align="center">Utils for ESLint Plugins</h1>
+
+<p align="center">Utilities for working with TypeScript + ESLint together.</p>
+
+<p align="center">
+    <img src="https://github.com/typescript-eslint/typescript-eslint/workflows/CI/badge.svg" alt="CI" />
+    <a href="https://www.npmjs.com/package/@typescript-eslint/eslint-plugin"><img src="https://img.shields.io/npm/v/@typescript-eslint/eslint-plugin.svg?style=flat-square" alt="NPM Version" /></a>
+    <a href="https://www.npmjs.com/package/@typescript-eslint/eslint-plugin"><img src="https://img.shields.io/npm/dm/@typescript-eslint/eslint-plugin.svg?style=flat-square" alt="NPM Downloads" /></a>
+</p>
+
+## Note
+
+This package has inherited its version number from the `@typescript-eslint` project.
+Meaning that even though this package is `2.x.y`, you shouldn't expect 100% stability between minor version bumps.
+i.e. treat it as a `0.x.y` package.
+
+Feel free to use it now, and let us know what utilities you need or send us PRs with utilities you build on top of it.
+
+Once it is stable, it will be renamed to `@typescript-eslint/util` for a `4.0.0` release.
+
+## Exports
+
+| Name                                                           | Description                                                                                                                                                                                                                       |
+| -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [`ASTUtils`](./src/ast-utils)                                  | Tools for operating on the ESTree AST. Also includes the [`eslint-utils`](https://www.npmjs.com/package/eslint-utils) package, correctly typed to work with the types found in `TSESTree`                                         |
+| [`ESLintUtils`](./src/eslint-utils)                            | Tools for creating ESLint rules with TypeScript.                                                                                                                                                                                  |
+| `JSONSchema`                                                   | Types from the [`@types/json-schema`](https://www.npmjs.com/package/@types/json-schema) package, re-exported to save you having to manually import them. Also ensures you're using the same version of the types as this package. |
+| [`TSESLint`](./src/ts-eslint)                                  | Types for ESLint, correctly typed to work with the types found in `TSESTree`.                                                                                                                                                     |
+| [`TSESLintScope`](./src/ts-eslint-scope)                       | The [`eslint-scope`](https://www.npmjs.com/package/eslint-scope) package, correctly typed to work with the types found in both `TSESTree` and `TSESLint`                                                                          |
+| [`TSESTree`](../types/src/ts-estree.ts)                        | Types for the TypeScript flavor of ESTree created by `@typescript-eslint/typescript-estree`.                                                                                                                                      |
+| [`AST_NODE_TYPES`](../types/src/ast-node-types.ts)             | An enum with the names of every single _node_ found in `TSESTree`.                                                                                                                                                                |
+| [`AST_TOKEN_TYPES`](../types/src/ast-token-types.ts)           | An enum with the names of every single _token_ found in `TSESTree`.                                                                                                                                                               |
+| [`ParserServices`](../typescript-estree/src/parser-options.ts) | Typing for the parser services provided when parsing a file using `@typescript-eslint/typescript-estree`.                                                                                                                         |
+
+## Contributing
+
+[See the contributing guide here](../../CONTRIBUTING.md)
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/PatternMatcher.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/PatternMatcher.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8504686b2f82b9501472aa3bb496bf499509a541
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/PatternMatcher.d.ts
@@ -0,0 +1,48 @@
+interface PatternMatcher {
+    /**
+     * Iterate all matched parts in a given string.
+     *
+     * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#matcher-execall}
+     */
+    execAll(str: string): IterableIterator<RegExpExecArray>;
+    /**
+     * Check whether this pattern matches a given string or not.
+     *
+     * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#matcher-test}
+     */
+    test(str: string): boolean;
+    /**
+     * Replace all matched parts by a given replacer.
+     *
+     * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#matcher-symbol-replace}
+     * @example
+     * const { PatternMatcher } = require("eslint-utils")
+     * const matcher = new PatternMatcher(/\\p{Script=Greek}/g)
+     *
+     * module.exports = {
+     *     meta: {},
+     *     create(context) {
+     *         return {
+     *             "Literal[regex]"(node) {
+     *                 const replacedPattern = node.regex.pattern.replace(
+     *                     matcher,
+     *                     "[\\u0370-\\u0373\\u0375-\\u0377\\u037A-\\u037D\\u037F\\u0384\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03E1\\u03F0-\\u03FF\\u1D26-\\u1D2A\\u1D5D-\\u1D61\\u1D66-\\u1D6A\\u1DBF\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FC4\\u1FC6-\\u1FD3\\u1FD6-\\u1FDB\\u1FDD-\\u1FEF\\u1FF2-\\u1FF4\\u1FF6-\\u1FFE\\u2126\\uAB65]|\\uD800[\\uDD40-\\uDD8E\\uDDA0]|\\uD834[\\uDE00-\\uDE45]"
+     *                 )
+     *             },
+     *         }
+     *     },
+     * }
+     */
+    [Symbol.replace](str: string, replacer: string | ((...strs: string[]) => string)): string;
+}
+/**
+ * The class to find a pattern in strings as handling escape sequences.
+ * It ignores the found pattern if it's escaped with `\`.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#patternmatcher-class}
+ */
+declare const PatternMatcher: new (pattern: RegExp, options?: {
+    escaped?: boolean | undefined;
+} | undefined) => PatternMatcher;
+export { PatternMatcher };
+//# sourceMappingURL=PatternMatcher.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/ReferenceTracker.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/ReferenceTracker.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..12e48a7ba1738a76434c17fe66f6f9dd1f05a4b1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/ReferenceTracker.d.ts
@@ -0,0 +1,72 @@
+import { TSESTree } from '../../ts-estree';
+import * as TSESLint from '../../ts-eslint';
+declare const ReferenceTrackerREAD: unique symbol;
+declare const ReferenceTrackerCALL: unique symbol;
+declare const ReferenceTrackerCONSTRUCT: unique symbol;
+interface ReferenceTracker {
+    /**
+     * Iterate the references that the given `traceMap` determined.
+     * This method starts to search from global variables.
+     *
+     * @see {@link https://eslint-utils.mysticatea.dev/api/scope-utils.html#tracker-iterateglobalreferences}
+     */
+    iterateGlobalReferences<T>(traceMap: ReferenceTracker.TraceMap<T>): IterableIterator<ReferenceTracker.FoundReference<T>>;
+    /**
+     * Iterate the references that the given `traceMap` determined.
+     * This method starts to search from `require()` expression.
+     *
+     * @see {@link https://eslint-utils.mysticatea.dev/api/scope-utils.html#tracker-iteratecjsreferences}
+     */
+    iterateCjsReferences<T>(traceMap: ReferenceTracker.TraceMap<T>): IterableIterator<ReferenceTracker.FoundReference<T>>;
+    /**
+     * Iterate the references that the given `traceMap` determined.
+     * This method starts to search from `import`/`export` declarations.
+     *
+     * @see {@link https://eslint-utils.mysticatea.dev/api/scope-utils.html#tracker-iterateesmreferences}
+     */
+    iterateEsmReferences<T>(traceMap: ReferenceTracker.TraceMap<T>): IterableIterator<ReferenceTracker.FoundReference<T>>;
+}
+interface ReferenceTrackerStatic {
+    new (globalScope: TSESLint.Scope.Scope, options?: {
+        /**
+         * The mode which determines how the `tracker.iterateEsmReferences()` method scans CommonJS modules.
+         * If this is `"strict"`, the method binds CommonJS modules to the default export. Otherwise, the method binds
+         * CommonJS modules to both the default export and named exports. Optional. Default is `"strict"`.
+         */
+        mode: 'strict' | 'legacy';
+        /**
+         * The name list of Global Object. Optional. Default is `["global", "globalThis", "self", "window"]`.
+         */
+        globalObjectNames: readonly string[];
+    }): ReferenceTracker;
+    readonly READ: typeof ReferenceTrackerREAD;
+    readonly CALL: typeof ReferenceTrackerCALL;
+    readonly CONSTRUCT: typeof ReferenceTrackerCONSTRUCT;
+}
+declare namespace ReferenceTracker {
+    type READ = ReferenceTrackerStatic['READ'];
+    type CALL = ReferenceTrackerStatic['CALL'];
+    type CONSTRUCT = ReferenceTrackerStatic['CONSTRUCT'];
+    type ReferenceType = READ | CALL | CONSTRUCT;
+    type TraceMap<T = any> = Record<string, TraceMapElement<T>>;
+    interface TraceMapElement<T> {
+        [ReferenceTrackerREAD]?: T;
+        [ReferenceTrackerCALL]?: T;
+        [ReferenceTrackerCONSTRUCT]?: T;
+        [key: string]: TraceMapElement<T>;
+    }
+    interface FoundReference<T = any> {
+        node: TSESTree.Node;
+        path: readonly string[];
+        type: ReferenceType;
+        entry: T;
+    }
+}
+/**
+ * The tracker for references. This provides reference tracking for global variables, CommonJS modules, and ES modules.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/scope-utils.html#referencetracker-class}
+ */
+declare const ReferenceTracker: ReferenceTrackerStatic;
+export { ReferenceTracker };
+//# sourceMappingURL=ReferenceTracker.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/astUtilities.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/astUtilities.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..63d443b61660a7a06b8a3c8606d7e376d6cc0758
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/astUtilities.d.ts
@@ -0,0 +1,82 @@
+import { TSESTree } from '../../ts-estree';
+import * as TSESLint from '../../ts-eslint';
+/**
+ * Get the proper location of a given function node to report.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#getfunctionheadlocation}
+ */
+declare const getFunctionHeadLocation: (node: TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression, sourceCode: TSESLint.SourceCode) => TSESTree.SourceLocation;
+/**
+ * Get the name and kind of a given function node.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#getfunctionnamewithkind}
+ */
+declare const getFunctionNameWithKind: (node: TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression) => string;
+/**
+ * Get the property name of a given property node.
+ * If the node is a computed property, this tries to compute the property name by the getStringIfConstant function.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#getpropertyname}
+ * @returns The property name of the node. If the property name is not constant then it returns `null`.
+ */
+declare const getPropertyName: (node: TSESTree.MemberExpression | TSESTree.Property | TSESTree.MethodDefinition, initialScope?: import("@typescript-eslint/scope-manager/dist/scope/BlockScope").BlockScope | import("@typescript-eslint/scope-manager/dist/scope/CatchScope").CatchScope | import("@typescript-eslint/scope-manager/dist/scope/ClassScope").ClassScope | import("@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope").ConditionalTypeScope | import("@typescript-eslint/scope-manager/dist/scope/ForScope").ForScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope").FunctionExpressionNameScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionScope").FunctionScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope").FunctionTypeScope | import("@typescript-eslint/scope-manager/dist/scope/GlobalScope").GlobalScope | import("@typescript-eslint/scope-manager/dist/scope/MappedTypeScope").MappedTypeScope | import("@typescript-eslint/scope-manager/dist/scope/ModuleScope").ModuleScope | import("@typescript-eslint/scope-manager/dist/scope/SwitchScope").SwitchScope | import("@typescript-eslint/scope-manager/dist/scope/TSEnumScope").TSEnumScope | import("@typescript-eslint/scope-manager/dist/scope/TSModuleScope").TSModuleScope | import("@typescript-eslint/scope-manager/dist/scope/TypeScope").TypeScope | import("@typescript-eslint/scope-manager/dist/scope/WithScope").WithScope | undefined) => string | null;
+/**
+ * Get the value of a given node if it can decide the value statically.
+ * If the 2nd parameter `initialScope` was given, this function tries to resolve identifier references which are in the
+ * given node as much as possible. In the resolving way, it does on the assumption that built-in global objects have
+ * not been modified.
+ * For example, it considers `Symbol.iterator`, ` String.raw``hello`` `, and `Object.freeze({a: 1}).a` as static.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#getstaticvalue}
+ * @returns The `{ value: any }` shaped object. The `value` property is the static value. If it couldn't compute the
+ * static value of the node, it returns `null`.
+ */
+declare const getStaticValue: (node: TSESTree.Node, initialScope?: import("@typescript-eslint/scope-manager/dist/scope/BlockScope").BlockScope | import("@typescript-eslint/scope-manager/dist/scope/CatchScope").CatchScope | import("@typescript-eslint/scope-manager/dist/scope/ClassScope").ClassScope | import("@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope").ConditionalTypeScope | import("@typescript-eslint/scope-manager/dist/scope/ForScope").ForScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope").FunctionExpressionNameScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionScope").FunctionScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope").FunctionTypeScope | import("@typescript-eslint/scope-manager/dist/scope/GlobalScope").GlobalScope | import("@typescript-eslint/scope-manager/dist/scope/MappedTypeScope").MappedTypeScope | import("@typescript-eslint/scope-manager/dist/scope/ModuleScope").ModuleScope | import("@typescript-eslint/scope-manager/dist/scope/SwitchScope").SwitchScope | import("@typescript-eslint/scope-manager/dist/scope/TSEnumScope").TSEnumScope | import("@typescript-eslint/scope-manager/dist/scope/TSModuleScope").TSModuleScope | import("@typescript-eslint/scope-manager/dist/scope/TypeScope").TypeScope | import("@typescript-eslint/scope-manager/dist/scope/WithScope").WithScope | undefined) => {
+    value: unknown;
+} | null;
+/**
+ * Get the string value of a given node.
+ * This function is a tiny wrapper of the getStaticValue function.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#getstringifconstant}
+ */
+declare const getStringIfConstant: (node: TSESTree.Node, initialScope?: import("@typescript-eslint/scope-manager/dist/scope/BlockScope").BlockScope | import("@typescript-eslint/scope-manager/dist/scope/CatchScope").CatchScope | import("@typescript-eslint/scope-manager/dist/scope/ClassScope").ClassScope | import("@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope").ConditionalTypeScope | import("@typescript-eslint/scope-manager/dist/scope/ForScope").ForScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope").FunctionExpressionNameScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionScope").FunctionScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope").FunctionTypeScope | import("@typescript-eslint/scope-manager/dist/scope/GlobalScope").GlobalScope | import("@typescript-eslint/scope-manager/dist/scope/MappedTypeScope").MappedTypeScope | import("@typescript-eslint/scope-manager/dist/scope/ModuleScope").ModuleScope | import("@typescript-eslint/scope-manager/dist/scope/SwitchScope").SwitchScope | import("@typescript-eslint/scope-manager/dist/scope/TSEnumScope").TSEnumScope | import("@typescript-eslint/scope-manager/dist/scope/TSModuleScope").TSModuleScope | import("@typescript-eslint/scope-manager/dist/scope/TypeScope").TypeScope | import("@typescript-eslint/scope-manager/dist/scope/WithScope").WithScope | undefined) => string | null;
+/**
+ * Check whether a given node has any side effect or not.
+ * The side effect means that it may modify a certain variable or object member. This function considers the node which
+ * contains the following types as the node which has side effects:
+ * - `AssignmentExpression`
+ * - `AwaitExpression`
+ * - `CallExpression`
+ * - `ImportExpression`
+ * - `NewExpression`
+ * - `UnaryExpression([operator = "delete"])`
+ * - `UpdateExpression`
+ * - `YieldExpression`
+ * - When `options.considerGetters` is `true`:
+ *   - `MemberExpression`
+ * - When `options.considerImplicitTypeConversion` is `true`:
+ *   - `BinaryExpression([operator = "==" | "!=" | "<" | "<=" | ">" | ">=" | "<<" | ">>" | ">>>" | "+" | "-" | "*" | "/" | "%" | "|" | "^" | "&" | "in"])`
+ *   - `MemberExpression([computed = true])`
+ *   - `MethodDefinition([computed = true])`
+ *   - `Property([computed = true])`
+ *   - `UnaryExpression([operator = "-" | "+" | "!" | "~"])`
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#hassideeffect}
+ */
+declare const hasSideEffect: (node: TSESTree.Node, sourceCode: TSESLint.SourceCode, options?: {
+    considerGetters?: boolean | undefined;
+    considerImplicitTypeConversion?: boolean | undefined;
+} | undefined) => boolean;
+/**
+ * Check whether a given node is parenthesized or not.
+ * This function detects it correctly even if it's parenthesized by specific syntax.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#isparenthesized}
+ * @returns `true` if the node is parenthesized.
+ * If `times` was given, it returns `true` only if the node is parenthesized the `times` times.
+ * For example, `isParenthesized(2, node, sourceCode)` returns true for `((foo))`, but not for `(foo)`.
+ */
+declare const isParenthesized: (node: TSESTree.Node, sourceCode: TSESLint.SourceCode) => boolean;
+export { getFunctionHeadLocation, getFunctionNameWithKind, getPropertyName, getStaticValue, getStringIfConstant, hasSideEffect, isParenthesized, };
+//# sourceMappingURL=astUtilities.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/index.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f87e6a9285679cbd782d5439acc34e832c2d1fee
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/index.d.ts
@@ -0,0 +1,6 @@
+export * from './astUtilities';
+export * from './PatternMatcher';
+export * from './predicates';
+export * from './ReferenceTracker';
+export * from './scopeAnalysis';
+//# sourceMappingURL=index.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/predicates.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/predicates.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4229ae0207756b2b9d2e08e12619fa785325424d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/predicates.d.ts
@@ -0,0 +1,45 @@
+import { TSESTree } from '../../ts-estree';
+declare const isArrowToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: '=>';
+};
+declare const isNotArrowToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isClosingBraceToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: '}';
+};
+declare const isNotClosingBraceToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isClosingBracketToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: ']';
+};
+declare const isNotClosingBracketToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isClosingParenToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: ')';
+};
+declare const isNotClosingParenToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isColonToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: ':';
+};
+declare const isNotColonToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isCommaToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: ',';
+};
+declare const isNotCommaToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isCommentToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.Comment;
+declare const isNotCommentToken: <T extends TSESTree.Token>(token: T) => token is Exclude<T, TSESTree.Comment>;
+declare const isOpeningBraceToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: '{';
+};
+declare const isNotOpeningBraceToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isOpeningBracketToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: '[';
+};
+declare const isNotOpeningBracketToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isOpeningParenToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: '(';
+};
+declare const isNotOpeningParenToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isSemicolonToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: ';';
+};
+declare const isNotSemicolonToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+export { isArrowToken, isClosingBraceToken, isClosingBracketToken, isClosingParenToken, isColonToken, isCommaToken, isCommentToken, isNotArrowToken, isNotClosingBraceToken, isNotClosingBracketToken, isNotClosingParenToken, isNotColonToken, isNotCommaToken, isNotCommentToken, isNotOpeningBraceToken, isNotOpeningBracketToken, isNotOpeningParenToken, isNotSemicolonToken, isOpeningBraceToken, isOpeningBracketToken, isOpeningParenToken, isSemicolonToken, };
+//# sourceMappingURL=predicates.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/scopeAnalysis.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/scopeAnalysis.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1c086af7a4da0817c939fbb2b00a6d11e2504186
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/eslint-utils/scopeAnalysis.d.ts
@@ -0,0 +1,18 @@
+import { TSESTree } from '../../ts-estree';
+import * as TSESLint from '../../ts-eslint';
+/**
+ * Get the variable of a given name.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/scope-utils.html#findvariable}
+ */
+declare const findVariable: (initialScope: TSESLint.Scope.Scope, name: string) => TSESLint.Scope.Variable | null;
+/**
+ * Get the innermost scope which contains a given node.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/scope-utils.html#getinnermostscope}
+ * @returns The innermost scope which contains the given node.
+ * If such scope doesn't exist then it returns the 1st argument `initialScope`.
+ */
+declare const getInnermostScope: (initialScope: TSESLint.Scope.Scope, node: TSESTree.Node) => TSESLint.Scope.Scope;
+export { findVariable, getInnermostScope };
+//# sourceMappingURL=scopeAnalysis.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/index.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7dd440a0eea32f2b89f7bdea7087f0c52ab83d17
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/index.d.ts
@@ -0,0 +1,4 @@
+export * from './misc';
+export * from './predicates';
+export * from './eslint-utils';
+//# sourceMappingURL=index.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/misc.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/misc.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9886ba0a6ec79bdf48118ea13d8eafcd8f268225
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/misc.d.ts
@@ -0,0 +1,8 @@
+import { TSESTree } from '../ts-estree';
+declare const LINEBREAK_MATCHER: RegExp;
+/**
+ * Determines whether two adjacent tokens are on the same line
+ */
+declare function isTokenOnSameLine(left: TSESTree.Token | TSESTree.Comment, right: TSESTree.Token | TSESTree.Comment): boolean;
+export { isTokenOnSameLine, LINEBREAK_MATCHER };
+//# sourceMappingURL=misc.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/predicates.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/predicates.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bdfb288d355923dcf17c9935ad050c4492000390
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ast-utils/predicates.d.ts
@@ -0,0 +1,58 @@
+import { TSESTree } from '../ts-estree';
+declare function isOptionalChainPunctuator(token: TSESTree.Token | TSESTree.Comment): token is TSESTree.PunctuatorToken & {
+    value: '?.';
+};
+declare function isNotOptionalChainPunctuator(token: TSESTree.Token | TSESTree.Comment): boolean;
+declare function isNonNullAssertionPunctuator(token: TSESTree.Token | TSESTree.Comment): token is TSESTree.PunctuatorToken & {
+    value: '!';
+};
+declare function isNotNonNullAssertionPunctuator(token: TSESTree.Token | TSESTree.Comment): boolean;
+/**
+ * Returns true if and only if the node represents: foo?.() or foo.bar?.()
+ */
+declare function isOptionalCallExpression(node: TSESTree.Node): node is TSESTree.CallExpression & {
+    optional: true;
+};
+/**
+ * Returns true if and only if the node represents logical OR
+ */
+declare function isLogicalOrOperator(node: TSESTree.Node): node is TSESTree.LogicalExpression & {
+    operator: '||';
+};
+/**
+ * Checks if a node is a type assertion:
+ * ```
+ * x as foo
+ * <foo>x
+ * ```
+ */
+declare function isTypeAssertion(node: TSESTree.Node | undefined | null): node is TSESTree.TSAsExpression | TSESTree.TSTypeAssertion;
+declare function isVariableDeclarator(node: TSESTree.Node | undefined): node is TSESTree.VariableDeclarator;
+declare function isFunction(node: TSESTree.Node | undefined): node is TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration | TSESTree.FunctionExpression;
+declare function isFunctionType(node: TSESTree.Node | undefined): node is TSESTree.TSCallSignatureDeclaration | TSESTree.TSConstructorType | TSESTree.TSConstructSignatureDeclaration | TSESTree.TSEmptyBodyFunctionExpression | TSESTree.TSFunctionType | TSESTree.TSMethodSignature;
+declare function isFunctionOrFunctionType(node: TSESTree.Node | undefined): node is TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.TSCallSignatureDeclaration | TSESTree.TSConstructorType | TSESTree.TSConstructSignatureDeclaration | TSESTree.TSEmptyBodyFunctionExpression | TSESTree.TSFunctionType | TSESTree.TSMethodSignature;
+declare function isTSFunctionType(node: TSESTree.Node | undefined): node is TSESTree.TSFunctionType;
+declare function isTSConstructorType(node: TSESTree.Node | undefined): node is TSESTree.TSConstructorType;
+declare function isClassOrTypeElement(node: TSESTree.Node | undefined): node is TSESTree.ClassElement | TSESTree.TypeElement;
+/**
+ * Checks if a node is a constructor method.
+ */
+declare function isConstructor(node: TSESTree.Node | undefined): node is TSESTree.MethodDefinition;
+/**
+ * Checks if a node is a setter method.
+ */
+declare function isSetter(node: TSESTree.Node | undefined): node is TSESTree.MethodDefinition | TSESTree.Property;
+declare function isIdentifier(node: TSESTree.Node | undefined): node is TSESTree.Identifier;
+/**
+ * Checks if a node represents an `await …` expression.
+ */
+declare function isAwaitExpression(node: TSESTree.Node | undefined | null): node is TSESTree.AwaitExpression;
+/**
+ * Checks if a possible token is the `await` keyword.
+ */
+declare function isAwaitKeyword(node: TSESTree.Token | TSESTree.Comment | undefined | null): node is TSESTree.KeywordToken & {
+    value: 'await';
+};
+declare function isLoop(node: TSESTree.Node | undefined | null): node is TSESTree.DoWhileStatement | TSESTree.ForStatement | TSESTree.ForInStatement | TSESTree.ForOfStatement | TSESTree.WhileStatement;
+export { isAwaitExpression, isAwaitKeyword, isConstructor, isClassOrTypeElement, isFunction, isFunctionOrFunctionType, isFunctionType, isIdentifier, isLoop, isLogicalOrOperator, isNonNullAssertionPunctuator, isNotNonNullAssertionPunctuator, isNotOptionalChainPunctuator, isOptionalChainPunctuator, isOptionalCallExpression, isSetter, isTSConstructorType, isTSFunctionType, isTypeAssertion, isVariableDeclarator, };
+//# sourceMappingURL=predicates.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/InferTypesFromRule.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/InferTypesFromRule.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6519f94188570ff4966d9228840032b0da94f7e8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/InferTypesFromRule.d.ts
@@ -0,0 +1,11 @@
+import { RuleCreateFunction, RuleModule } from '../ts-eslint';
+/**
+ * Uses type inference to fetch the TOptions type from the given RuleModule
+ */
+declare type InferOptionsTypeFromRule<T> = T extends RuleModule<infer _TMessageIds, infer TOptions> ? TOptions : T extends RuleCreateFunction<infer _TMessageIds, infer TOptions> ? TOptions : unknown;
+/**
+ * Uses type inference to fetch the TMessageIds type from the given RuleModule
+ */
+declare type InferMessageIdsTypeFromRule<T> = T extends RuleModule<infer TMessageIds, infer _TOptions> ? TMessageIds : T extends RuleCreateFunction<infer TMessageIds, infer _TOptions> ? TMessageIds : unknown;
+export { InferOptionsTypeFromRule, InferMessageIdsTypeFromRule };
+//# sourceMappingURL=InferTypesFromRule.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/RuleCreator.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/RuleCreator.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cdbba0ad947c51b6c466c699dcfab7b6b016ae5e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/RuleCreator.d.ts
@@ -0,0 +1,13 @@
+import { RuleMetaData, RuleMetaDataDocs, RuleListener, RuleContext, RuleModule } from '../ts-eslint/Rule';
+declare type CreateRuleMetaDocs = Pick<RuleMetaDataDocs, Exclude<keyof RuleMetaDataDocs, 'url'>>;
+declare type CreateRuleMeta<TMessageIds extends string> = {
+    docs: CreateRuleMetaDocs;
+} & Pick<RuleMetaData<TMessageIds>, Exclude<keyof RuleMetaData<TMessageIds>, 'docs'>>;
+declare function RuleCreator(urlCreator: (ruleName: string) => string): <TOptions extends readonly unknown[], TMessageIds extends string, TRuleListener extends RuleListener = RuleListener>({ name, meta, defaultOptions, create, }: Readonly<{
+    name: string;
+    meta: CreateRuleMeta<TMessageIds>;
+    defaultOptions: Readonly<TOptions>;
+    create: (context: Readonly<RuleContext<TMessageIds, TOptions>>, optionsWithDefault: Readonly<TOptions>) => TRuleListener;
+}>) => RuleModule<TMessageIds, TOptions, TRuleListener>;
+export { RuleCreator };
+//# sourceMappingURL=RuleCreator.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/RuleTester.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/RuleTester.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..659aa2c04d4dc53e2c332050745f19c2eeb0028f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/RuleTester.d.ts
@@ -0,0 +1,18 @@
+import * as TSESLint from '../ts-eslint';
+declare const parser = "@typescript-eslint/parser";
+declare type RuleTesterConfig = Pick<TSESLint.RuleTesterConfig, Exclude<keyof TSESLint.RuleTesterConfig, 'parser'>> & {
+    parser: typeof parser;
+};
+declare class RuleTester extends TSESLint.RuleTester {
+    private "RuleTester.#private";
+    constructor(options: RuleTesterConfig);
+    private getFilename;
+    run<TMessageIds extends string, TOptions extends Readonly<unknown[]>>(name: string, rule: TSESLint.RuleModule<TMessageIds, TOptions>, testsReadonly: TSESLint.RunTests<TMessageIds, TOptions>): void;
+}
+/**
+ * Simple no-op tag to mark code samples as "should not format with prettier"
+ *   for the internal/plugin-test-formatting lint rule
+ */
+declare function noFormat(strings: TemplateStringsArray, ...keys: string[]): string;
+export { noFormat, RuleTester };
+//# sourceMappingURL=RuleTester.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/applyDefault.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/applyDefault.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..92f283988e6a90fe2e4c3bf4d996a307dd66bf7f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/applyDefault.d.ts
@@ -0,0 +1,10 @@
+/**
+ * Pure function - doesn't mutate either parameter!
+ * Uses the default options and overrides with the options provided by the user
+ * @param defaultOptions the defaults
+ * @param userOptions the user opts
+ * @returns the options with defaults
+ */
+declare function applyDefault<TUser extends readonly unknown[], TDefault extends TUser>(defaultOptions: TDefault, userOptions: TUser | null): TDefault;
+export { applyDefault };
+//# sourceMappingURL=applyDefault.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/batchedSingleLineTests.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/batchedSingleLineTests.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1d641b288c2b95287414d1e9a105e576133b3d5d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/batchedSingleLineTests.d.ts
@@ -0,0 +1,24 @@
+import { ValidTestCase, InvalidTestCase } from '../ts-eslint';
+/**
+ * Converts a batch of single line tests into a number of separate test cases.
+ * This makes it easier to write tests which use the same options.
+ *
+ * Why wouldn't you just leave them as one test?
+ * Because it makes the test error messages harder to decipher.
+ * This way each line will fail separately, instead of them all failing together.
+ */
+declare function batchedSingleLineTests<TOptions extends Readonly<unknown[]>>(test: ValidTestCase<TOptions>): ValidTestCase<TOptions>[];
+/**
+ * Converts a batch of single line tests into a number of separate test cases.
+ * This makes it easier to write tests which use the same options.
+ *
+ * Why wouldn't you just leave them as one test?
+ * Because it makes the test error messages harder to decipher.
+ * This way each line will fail separately, instead of them all failing together.
+ *
+ * Make sure you have your line numbers correct for error reporting, as it will match
+ * the line numbers up with the split tests!
+ */
+declare function batchedSingleLineTests<TMessageIds extends string, TOptions extends Readonly<unknown[]>>(test: InvalidTestCase<TMessageIds, TOptions>): InvalidTestCase<TMessageIds, TOptions>[];
+export { batchedSingleLineTests };
+//# sourceMappingURL=batchedSingleLineTests.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/deepMerge.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/deepMerge.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5c5f568ebcb804861e353c6c72e75c40be355296
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/deepMerge.d.ts
@@ -0,0 +1,17 @@
+declare type ObjectLike<T = unknown> = Record<string, T>;
+/**
+ * Check if the variable contains an object strictly rejecting arrays
+ * @param obj an object
+ * @returns `true` if obj is an object
+ */
+declare function isObjectNotArray<T extends ObjectLike>(obj: unknown | unknown[]): obj is T;
+/**
+ * Pure function - doesn't mutate either parameter!
+ * Merges two objects together deeply, overwriting the properties in first with the properties in second
+ * @param first The first object
+ * @param second The second object
+ * @returns a new object
+ */
+export declare function deepMerge(first?: ObjectLike, second?: ObjectLike): Record<string, unknown>;
+export { isObjectNotArray };
+//# sourceMappingURL=deepMerge.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/getParserServices.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/getParserServices.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..99c5af5e1a48adf3cd22ba7497145bda832ac479
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/getParserServices.d.ts
@@ -0,0 +1,8 @@
+import * as TSESLint from '../ts-eslint';
+import { ParserServices } from '../ts-estree';
+/**
+ * Try to retrieve typescript parser service from context
+ */
+declare function getParserServices<TMessageIds extends string, TOptions extends readonly unknown[]>(context: Readonly<TSESLint.RuleContext<TMessageIds, TOptions>>, allowWithoutFullTypeInformation?: boolean): ParserServices;
+export { getParserServices };
+//# sourceMappingURL=getParserServices.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/index.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2e861fbe35b2df99a46e23d80f1575d0ad63591b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/eslint-utils/index.d.ts
@@ -0,0 +1,8 @@
+export * from './applyDefault';
+export * from './batchedSingleLineTests';
+export * from './getParserServices';
+export * from './InferTypesFromRule';
+export * from './RuleCreator';
+export * from './RuleTester';
+export * from './deepMerge';
+//# sourceMappingURL=index.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/index.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c1ab1f7486a868d5abe88d8533075b09da326a4f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/index.d.ts
@@ -0,0 +1,8 @@
+import * as ASTUtils from './ast-utils';
+import * as ESLintUtils from './eslint-utils';
+import * as JSONSchema from './json-schema';
+import * as TSESLint from './ts-eslint';
+import * as TSESLintScope from './ts-eslint-scope';
+export { ASTUtils, ESLintUtils, JSONSchema, TSESLint, TSESLintScope };
+export * from './ts-estree';
+//# sourceMappingURL=index.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/json-schema.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/json-schema.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d481d15967c4869ddb890a45b9549672799c27c6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/json-schema.d.ts
@@ -0,0 +1,2 @@
+export { JSONSchema4, JSONSchema4Type, JSONSchema4TypeName, JSONSchema4Version, JSONSchema6, JSONSchema6Definition, JSONSchema6Type, JSONSchema6TypeName, JSONSchema6Version, JSONSchema7, JSONSchema7Array, JSONSchema7Definition, JSONSchema7Type, JSONSchema7TypeName, JSONSchema7Version, ValidationError, ValidationResult, } from 'json-schema';
+//# sourceMappingURL=json-schema.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Definition.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Definition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..73d881678689e27a3159960c2ce5ca2d69adbf15
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Definition.d.ts
@@ -0,0 +1,19 @@
+import { TSESTree } from '../ts-estree';
+interface Definition {
+    type: string;
+    name: TSESTree.BindingName;
+    node: TSESTree.Node;
+    parent?: TSESTree.Node | null;
+    index?: number | null;
+    kind?: string | null;
+    rest?: boolean;
+}
+interface DefinitionConstructor {
+    new (type: string, name: TSESTree.BindingName | TSESTree.PropertyName, node: TSESTree.Node, parent?: TSESTree.Node | null, index?: number | null, kind?: string | null): Definition;
+}
+declare const Definition: DefinitionConstructor;
+interface ParameterDefinition extends Definition {
+}
+declare const ParameterDefinition: DefinitionConstructor & (new (name: TSESTree.Node, node: TSESTree.Node, index?: number | null | undefined, rest?: boolean | undefined) => ParameterDefinition);
+export { Definition, ParameterDefinition };
+//# sourceMappingURL=Definition.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Options.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Options.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b9d22de61ffb9d2d07f335598f9437f62ea0c521
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Options.d.ts
@@ -0,0 +1,15 @@
+import { TSESTree } from '../ts-estree';
+declare type PatternVisitorCallback = (pattern: TSESTree.Identifier, info: {
+    rest: boolean;
+    topLevel: boolean;
+    assignments: TSESTree.AssignmentPattern[];
+}) => void;
+interface PatternVisitorOptions {
+    processRightHandNodes?: boolean;
+}
+interface Visitor {
+    visitChildren<T extends TSESTree.BaseNode | undefined | null>(node?: T): void;
+    visit<T extends TSESTree.BaseNode | undefined | null>(node?: T): void;
+}
+export { PatternVisitorCallback, PatternVisitorOptions, Visitor };
+//# sourceMappingURL=Options.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/PatternVisitor.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/PatternVisitor.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..37cf56df2d88a9f2255a941f7225ef135221ce79
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/PatternVisitor.d.ts
@@ -0,0 +1,25 @@
+import { TSESTree } from '../ts-estree';
+import { ScopeManager } from './ScopeManager';
+import { PatternVisitorCallback, PatternVisitorOptions, Visitor } from './Options';
+interface PatternVisitor extends Visitor {
+    options: PatternVisitorOptions;
+    scopeManager: ScopeManager;
+    parent?: TSESTree.Node;
+    rightHandNodes: TSESTree.Node[];
+    Identifier(pattern: TSESTree.Node): void;
+    Property(property: TSESTree.Node): void;
+    ArrayPattern(pattern: TSESTree.Node): void;
+    AssignmentPattern(pattern: TSESTree.Node): void;
+    RestElement(pattern: TSESTree.Node): void;
+    MemberExpression(node: TSESTree.Node): void;
+    SpreadElement(node: TSESTree.Node): void;
+    ArrayExpression(node: TSESTree.Node): void;
+    AssignmentExpression(node: TSESTree.Node): void;
+    CallExpression(node: TSESTree.Node): void;
+}
+declare const PatternVisitor: {
+    new (options: PatternVisitorOptions, rootPattern: TSESTree.BaseNode, callback: PatternVisitorCallback): PatternVisitor;
+    isPattern(node: TSESTree.Node): boolean;
+};
+export { PatternVisitor };
+//# sourceMappingURL=PatternVisitor.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Reference.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Reference.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..350a291b88a4f388d2563a7a4f2210984a48c1ca
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Reference.d.ts
@@ -0,0 +1,28 @@
+import { TSESTree } from '../ts-estree';
+import { Scope } from './Scope';
+import { Variable } from './Variable';
+export declare type ReferenceFlag = 0x1 | 0x2 | 0x3;
+interface Reference {
+    identifier: TSESTree.Identifier;
+    from: Scope;
+    resolved: Variable | null;
+    writeExpr: TSESTree.Node | null;
+    init: boolean;
+    partial: boolean;
+    __maybeImplicitGlobal: boolean;
+    tainted?: boolean;
+    typeMode?: boolean;
+    isWrite(): boolean;
+    isRead(): boolean;
+    isWriteOnly(): boolean;
+    isReadOnly(): boolean;
+    isReadWrite(): boolean;
+}
+declare const Reference: {
+    new (identifier: TSESTree.Identifier, scope: Scope, flag?: 3 | 2 | 1 | undefined, writeExpr?: TSESTree.ArrayExpression | TSESTree.ArrayPattern | TSESTree.ArrowFunctionExpression | TSESTree.AssignmentExpression | TSESTree.AssignmentPattern | TSESTree.AwaitExpression | TSESTree.BigIntLiteral | TSESTree.BinaryExpression | TSESTree.BlockStatement | TSESTree.BreakStatement | TSESTree.CallExpression | TSESTree.CatchClause | TSESTree.ChainExpression | TSESTree.ClassBody | TSESTree.ClassDeclaration | TSESTree.ClassExpression | TSESTree.ClassPropertyComputedName | TSESTree.ClassPropertyNonComputedName | TSESTree.ConditionalExpression | TSESTree.ContinueStatement | TSESTree.DebuggerStatement | TSESTree.Decorator | TSESTree.DoWhileStatement | TSESTree.EmptyStatement | TSESTree.ExportAllDeclaration | TSESTree.ExportDefaultDeclaration | TSESTree.ExportNamedDeclaration | TSESTree.ExportSpecifier | TSESTree.ExpressionStatement | TSESTree.ForInStatement | TSESTree.ForOfStatement | TSESTree.ForStatement | TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.Identifier | TSESTree.IfStatement | TSESTree.ImportDeclaration | TSESTree.ImportDefaultSpecifier | TSESTree.ImportExpression | TSESTree.ImportNamespaceSpecifier | TSESTree.ImportSpecifier | TSESTree.JSXAttribute | TSESTree.JSXClosingElement | TSESTree.JSXClosingFragment | TSESTree.JSXElement | TSESTree.JSXEmptyExpression | TSESTree.JSXExpressionContainer | TSESTree.JSXFragment | TSESTree.JSXIdentifier | TSESTree.JSXMemberExpression | TSESTree.JSXOpeningElement | TSESTree.JSXOpeningFragment | TSESTree.JSXSpreadAttribute | TSESTree.JSXSpreadChild | TSESTree.JSXText | TSESTree.LabeledStatement | TSESTree.BooleanLiteral | TSESTree.NumberLiteral | TSESTree.NullLiteral | TSESTree.RegExpLiteral | TSESTree.StringLiteral | TSESTree.LogicalExpression | TSESTree.MemberExpressionComputedName | TSESTree.MemberExpressionNonComputedName | TSESTree.MetaProperty | TSESTree.MethodDefinitionComputedName | TSESTree.MethodDefinitionNonComputedName | TSESTree.NewExpression | TSESTree.ObjectExpression | TSESTree.ObjectPattern | TSESTree.Program | TSESTree.PropertyComputedName | TSESTree.PropertyNonComputedName | TSESTree.RestElement | TSESTree.ReturnStatement | TSESTree.SequenceExpression | TSESTree.SpreadElement | TSESTree.Super | TSESTree.SwitchCase | TSESTree.SwitchStatement | TSESTree.TaggedTemplateExpression | TSESTree.TemplateElement | TSESTree.TemplateLiteral | TSESTree.ThisExpression | TSESTree.ThrowStatement | TSESTree.TryStatement | TSESTree.TSAbstractClassPropertyComputedName | TSESTree.TSAbstractClassPropertyNonComputedName | TSESTree.TSAbstractKeyword | TSESTree.TSAbstractMethodDefinitionComputedName | TSESTree.TSAbstractMethodDefinitionNonComputedName | TSESTree.TSAnyKeyword | TSESTree.TSArrayType | TSESTree.TSAsExpression | TSESTree.TSAsyncKeyword | TSESTree.TSBigIntKeyword | TSESTree.TSBooleanKeyword | TSESTree.TSCallSignatureDeclaration | TSESTree.TSClassImplements | TSESTree.TSConditionalType | TSESTree.TSConstructorType | TSESTree.TSConstructSignatureDeclaration | TSESTree.TSDeclareFunction | TSESTree.TSDeclareKeyword | TSESTree.TSEmptyBodyFunctionExpression | TSESTree.TSEnumDeclaration | TSESTree.TSEnumMemberComputedName | TSESTree.TSEnumMemberNonComputedName | TSESTree.TSExportAssignment | TSESTree.TSExportKeyword | TSESTree.TSExternalModuleReference | TSESTree.TSFunctionType | TSESTree.TSImportEqualsDeclaration | TSESTree.TSImportType | TSESTree.TSIndexedAccessType | TSESTree.TSIndexSignature | TSESTree.TSInferType | TSESTree.TSInterfaceBody | TSESTree.TSInterfaceDeclaration | TSESTree.TSInterfaceHeritage | TSESTree.TSIntersectionType | TSESTree.TSLiteralType | TSESTree.TSMappedType | TSESTree.TSMethodSignatureComputedName | TSESTree.TSMethodSignatureNonComputedName | TSESTree.TSModuleBlock | TSESTree.TSModuleDeclaration | TSESTree.TSNamedTupleMember | TSESTree.TSNamespaceExportDeclaration | TSESTree.TSNeverKeyword | TSESTree.TSNonNullExpression | TSESTree.TSNullKeyword | TSESTree.TSNumberKeyword | TSESTree.TSObjectKeyword | TSESTree.TSOptionalType | TSESTree.TSParameterProperty | TSESTree.TSParenthesizedType | TSESTree.TSPrivateKeyword | TSESTree.TSPropertySignatureComputedName | TSESTree.TSPropertySignatureNonComputedName | TSESTree.TSProtectedKeyword | TSESTree.TSPublicKeyword | TSESTree.TSQualifiedName | TSESTree.TSReadonlyKeyword | TSESTree.TSRestType | TSESTree.TSStaticKeyword | TSESTree.TSStringKeyword | TSESTree.TSSymbolKeyword | TSESTree.TSTemplateLiteralType | TSESTree.TSThisType | TSESTree.TSTupleType | TSESTree.TSTypeAliasDeclaration | TSESTree.TSTypeAnnotation | TSESTree.TSTypeAssertion | TSESTree.TSTypeLiteral | TSESTree.TSTypeOperator | TSESTree.TSTypeParameter | TSESTree.TSTypeParameterDeclaration | TSESTree.TSTypeParameterInstantiation | TSESTree.TSTypePredicate | TSESTree.TSTypeQuery | TSESTree.TSTypeReference | TSESTree.TSUndefinedKeyword | TSESTree.TSUnionType | TSESTree.TSUnknownKeyword | TSESTree.TSVoidKeyword | TSESTree.UnaryExpression | TSESTree.UpdateExpression | TSESTree.VariableDeclaration | TSESTree.VariableDeclarator | TSESTree.WhileStatement | TSESTree.WithStatement | TSESTree.YieldExpression | null | undefined, maybeImplicitGlobal?: boolean | undefined, partial?: boolean | undefined, init?: boolean | undefined): Reference;
+    READ: 0x1;
+    WRITE: 0x2;
+    RW: 0x3;
+};
+export { Reference };
+//# sourceMappingURL=Reference.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Referencer.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Referencer.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..384562046daabdd96b2dfa968597fdc8d466d92f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Referencer.d.ts
@@ -0,0 +1,55 @@
+import { TSESTree } from '../ts-estree';
+import { PatternVisitorCallback, PatternVisitorOptions, Visitor } from './Options';
+import { Scope } from './Scope';
+import { ScopeManager } from './ScopeManager';
+interface Referencer<SM extends ScopeManager> extends Visitor {
+    isInnerMethodDefinition: boolean;
+    options: any;
+    scopeManager: SM;
+    parent?: TSESTree.Node;
+    currentScope(): Scope;
+    close(node: TSESTree.Node): void;
+    pushInnerMethodDefinition(isInnerMethodDefinition: boolean): boolean;
+    popInnerMethodDefinition(isInnerMethodDefinition: boolean): void;
+    referencingDefaultValue(pattern: any, assignments: any, maybeImplicitGlobal: any, init: boolean): void;
+    visitPattern(node: TSESTree.Node, options: PatternVisitorOptions, callback: PatternVisitorCallback): void;
+    visitFunction(node: TSESTree.Node): void;
+    visitClass(node: TSESTree.Node): void;
+    visitProperty(node: TSESTree.Node): void;
+    visitForIn(node: TSESTree.Node): void;
+    visitVariableDeclaration(variableTargetScope: any, type: any, node: TSESTree.Node, index: any): void;
+    AssignmentExpression(node: TSESTree.Node): void;
+    CatchClause(node: TSESTree.Node): void;
+    Program(node: TSESTree.Program): void;
+    Identifier(node: TSESTree.Identifier): void;
+    UpdateExpression(node: TSESTree.Node): void;
+    MemberExpression(node: TSESTree.Node): void;
+    Property(node: TSESTree.Node): void;
+    MethodDefinition(node: TSESTree.Node): void;
+    BreakStatement(): void;
+    ContinueStatement(): void;
+    LabeledStatement(node: TSESTree.Node): void;
+    ForStatement(node: TSESTree.Node): void;
+    ClassExpression(node: TSESTree.Node): void;
+    ClassDeclaration(node: TSESTree.Node): void;
+    CallExpression(node: TSESTree.Node): void;
+    BlockStatement(node: TSESTree.Node): void;
+    ThisExpression(): void;
+    WithStatement(node: TSESTree.Node): void;
+    VariableDeclaration(node: TSESTree.Node): void;
+    SwitchStatement(node: TSESTree.Node): void;
+    FunctionDeclaration(node: TSESTree.Node): void;
+    FunctionExpression(node: TSESTree.Node): void;
+    ForOfStatement(node: TSESTree.Node): void;
+    ForInStatement(node: TSESTree.Node): void;
+    ArrowFunctionExpression(node: TSESTree.Node): void;
+    ImportDeclaration(node: TSESTree.Node): void;
+    visitExportDeclaration(node: TSESTree.Node): void;
+    ExportDeclaration(node: TSESTree.Node): void;
+    ExportNamedDeclaration(node: TSESTree.Node): void;
+    ExportSpecifier(node: TSESTree.Node): void;
+    MetaProperty(): void;
+}
+declare const Referencer: new <SM extends ScopeManager>(options: any, scopeManager: SM) => Referencer<SM>;
+export { Referencer };
+//# sourceMappingURL=Referencer.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Scope.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Scope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..33de3c98cd59e520cf76a047367ccc7966211872
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Scope.d.ts
@@ -0,0 +1,103 @@
+import { TSESTree } from '../ts-estree';
+import { Definition } from './Definition';
+import { Reference, ReferenceFlag } from './Reference';
+import { ScopeManager } from './ScopeManager';
+import { Variable } from './Variable';
+declare type ScopeType = 'block' | 'catch' | 'class' | 'for' | 'function' | 'function-expression-name' | 'global' | 'module' | 'switch' | 'with' | 'TDZ' | 'enum' | 'empty-function';
+interface Scope {
+    type: ScopeType;
+    isStrict: boolean;
+    upper: Scope | null;
+    childScopes: Scope[];
+    variableScope: Scope;
+    block: TSESTree.Node;
+    variables: Variable[];
+    set: Map<string, Variable>;
+    references: Reference[];
+    through: Reference[];
+    thisFound?: boolean;
+    taints: Map<string, boolean>;
+    functionExpressionScope: boolean;
+    __left: Reference[];
+    __shouldStaticallyClose(scopeManager: ScopeManager): boolean;
+    __shouldStaticallyCloseForGlobal(ref: any): boolean;
+    __staticCloseRef(ref: any): void;
+    __dynamicCloseRef(ref: any): void;
+    __globalCloseRef(ref: any): void;
+    __close(scopeManager: ScopeManager): Scope;
+    __isValidResolution(ref: any, variable: any): variable is Variable;
+    __resolve(ref: Reference): boolean;
+    __delegateToUpperScope(ref: any): void;
+    __addDeclaredVariablesOfNode(variable: any, node: TSESTree.Node): void;
+    __defineGeneric(name: string, set: Map<string, Variable>, variables: Variable[], node: TSESTree.Identifier, def: Definition): void;
+    __define(node: TSESTree.Node, def: Definition): void;
+    __referencing(node: TSESTree.Node, assign?: ReferenceFlag, writeExpr?: TSESTree.Node, maybeImplicitGlobal?: any, partial?: any, init?: any): void;
+    __detectEval(): void;
+    __detectThis(): void;
+    __isClosed(): boolean;
+    /**
+     * returns resolved {Reference}
+     * @method Scope#resolve
+     * @param {Espree.Identifier} ident - identifier to be resolved.
+     * @returns {Reference} reference
+     */
+    resolve(ident: TSESTree.Node): Reference;
+    /**
+     * returns this scope is static
+     * @method Scope#isStatic
+     * @returns {boolean} static
+     */
+    isStatic(): boolean;
+    /**
+     * returns this scope has materialized arguments
+     * @method Scope#isArgumentsMaterialized
+     * @returns {boolean} arguments materialized
+     */
+    isArgumentsMaterialized(): boolean;
+    /**
+     * returns this scope has materialized `this` reference
+     * @method Scope#isThisMaterialized
+     * @returns {boolean} this materialized
+     */
+    isThisMaterialized(): boolean;
+    isUsedName(name: any): boolean;
+}
+interface ScopeConstructor {
+    new (scopeManager: ScopeManager, type: ScopeType, upperScope: Scope | null, block: TSESTree.Node | null, isMethodDefinition: boolean): Scope;
+}
+declare const Scope: ScopeConstructor;
+interface ScopeChildConstructorWithUpperScope<T> {
+    new (scopeManager: ScopeManager, upperScope: Scope, block: TSESTree.Node | null): T;
+}
+interface GlobalScope extends Scope {
+}
+declare const GlobalScope: ScopeConstructor & (new (scopeManager: ScopeManager, block: TSESTree.Node | null) => GlobalScope);
+interface ModuleScope extends Scope {
+}
+declare const ModuleScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<ModuleScope>;
+interface FunctionExpressionNameScope extends Scope {
+}
+declare const FunctionExpressionNameScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<FunctionExpressionNameScope>;
+interface CatchScope extends Scope {
+}
+declare const CatchScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<CatchScope>;
+interface WithScope extends Scope {
+}
+declare const WithScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<WithScope>;
+interface BlockScope extends Scope {
+}
+declare const BlockScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<BlockScope>;
+interface SwitchScope extends Scope {
+}
+declare const SwitchScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<SwitchScope>;
+interface FunctionScope extends Scope {
+}
+declare const FunctionScope: ScopeConstructor & (new (scopeManager: ScopeManager, upperScope: Scope, block: TSESTree.Node | null, isMethodDefinition: boolean) => FunctionScope);
+interface ForScope extends Scope {
+}
+declare const ForScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<ForScope>;
+interface ClassScope extends Scope {
+}
+declare const ClassScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<ClassScope>;
+export { ScopeType, Scope, GlobalScope, ModuleScope, FunctionExpressionNameScope, CatchScope, WithScope, BlockScope, SwitchScope, FunctionScope, ForScope, ClassScope, };
+//# sourceMappingURL=Scope.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/ScopeManager.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/ScopeManager.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..68c86df7fa6eb9d3f891fd64d142ababf606258e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/ScopeManager.d.ts
@@ -0,0 +1,50 @@
+import { TSESTree } from '../ts-estree';
+import { EcmaVersion } from '../ts-eslint';
+import { Scope } from './Scope';
+import { Variable } from './Variable';
+interface ScopeManagerOptions {
+    directive?: boolean;
+    optimistic?: boolean;
+    ignoreEval?: boolean;
+    nodejsScope?: boolean;
+    sourceType?: 'module' | 'script';
+    impliedStrict?: boolean;
+    ecmaVersion?: EcmaVersion;
+}
+interface ScopeManager {
+    __options: ScopeManagerOptions;
+    __currentScope: Scope;
+    __nodeToScope: WeakMap<TSESTree.Node, Scope[]>;
+    __declaredVariables: WeakMap<TSESTree.Node, Variable[]>;
+    scopes: Scope[];
+    globalScope: Scope;
+    __useDirective(): boolean;
+    __isOptimistic(): boolean;
+    __ignoreEval(): boolean;
+    __isNodejsScope(): boolean;
+    isModule(): boolean;
+    isImpliedStrict(): boolean;
+    isStrictModeSupported(): boolean;
+    __get(node: TSESTree.Node): Scope | undefined;
+    getDeclaredVariables(node: TSESTree.Node): Variable[];
+    acquire(node: TSESTree.Node, inner?: boolean): Scope | null;
+    acquireAll(node: TSESTree.Node): Scope | null;
+    release(node: TSESTree.Node, inner?: boolean): Scope | null;
+    attach(): void;
+    detach(): void;
+    __nestScope<T extends Scope>(scope: T): T;
+    __nestGlobalScope(node: TSESTree.Node): Scope;
+    __nestBlockScope(node: TSESTree.Node): Scope;
+    __nestFunctionScope(node: TSESTree.Node, isMethodDefinition: boolean): Scope;
+    __nestForScope(node: TSESTree.Node): Scope;
+    __nestCatchScope(node: TSESTree.Node): Scope;
+    __nestWithScope(node: TSESTree.Node): Scope;
+    __nestClassScope(node: TSESTree.Node): Scope;
+    __nestSwitchScope(node: TSESTree.Node): Scope;
+    __nestModuleScope(node: TSESTree.Node): Scope;
+    __nestFunctionExpressionNameScope(node: TSESTree.Node): Scope;
+    __isES6(): boolean;
+}
+declare const ScopeManager: new (options: ScopeManagerOptions) => ScopeManager;
+export { ScopeManager, ScopeManagerOptions };
+//# sourceMappingURL=ScopeManager.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Variable.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Variable.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..34434999c1c1b87da10abb87397d530345c1dbd9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/Variable.d.ts
@@ -0,0 +1,17 @@
+import { TSESTree } from '../ts-estree';
+import { Reference } from './Reference';
+import { Definition } from './Definition';
+import { Scope } from './Scope';
+interface Variable {
+    name: string;
+    identifiers: TSESTree.Identifier[];
+    references: Reference[];
+    defs: Definition[];
+    eslintUsed?: boolean;
+    stack?: unknown;
+    tainted?: boolean;
+    scope?: Scope;
+}
+declare const Variable: new () => Variable;
+export { Variable };
+//# sourceMappingURL=Variable.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/analyze.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/analyze.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..50e599f1581d4fc8a120b60e101ee9130b52ae15
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/analyze.d.ts
@@ -0,0 +1,16 @@
+import { EcmaVersion } from '../ts-eslint';
+import { TSESTree } from '../ts-estree';
+import { ScopeManager } from './ScopeManager';
+interface AnalysisOptions {
+    optimistic?: boolean;
+    directive?: boolean;
+    ignoreEval?: boolean;
+    nodejsScope?: boolean;
+    impliedStrict?: boolean;
+    fallback?: string | ((node: TSESTree.Node) => string[]);
+    sourceType?: 'script' | 'module';
+    ecmaVersion?: EcmaVersion;
+}
+declare const analyze: (ast: TSESTree.Node, options?: AnalysisOptions | undefined) => ScopeManager;
+export { analyze, AnalysisOptions };
+//# sourceMappingURL=analyze.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/index.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..71b4a99185fbc813939ae0cb1776acd01c0cfecd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint-scope/index.d.ts
@@ -0,0 +1,11 @@
+export * from './analyze';
+export * from './Definition';
+export * from './Options';
+export * from './PatternVisitor';
+export * from './Reference';
+export * from './Referencer';
+export * from './Scope';
+export * from './ScopeManager';
+export * from './Variable';
+export declare const version: string;
+//# sourceMappingURL=index.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/AST.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/AST.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6bbd25738510ccd25d0840a5f5462634535dbfb6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/AST.d.ts
@@ -0,0 +1,9 @@
+import { TSESTree, AST_TOKEN_TYPES } from '../ts-estree';
+declare namespace AST {
+    type TokenType = AST_TOKEN_TYPES;
+    type Token = TSESTree.Token;
+    type SourceLocation = TSESTree.SourceLocation;
+    type Range = TSESTree.Range;
+}
+export { AST };
+//# sourceMappingURL=AST.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/CLIEngine.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/CLIEngine.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..355117204deea5f9d056ac5af64be7f72e762765
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/CLIEngine.d.ts
@@ -0,0 +1,143 @@
+import { Linter } from './Linter';
+import { RuleListener, RuleMetaData, RuleModule } from './Rule';
+declare class CLIEngineBase {
+    /**
+     * Creates a new instance of the core CLI engine.
+     * @param providedOptions The options for this instance.
+     */
+    constructor(options: CLIEngine.Options);
+    /**
+     * Add a plugin by passing its configuration
+     * @param name Name of the plugin.
+     * @param pluginObject Plugin configuration object.
+     */
+    addPlugin(name: string, pluginObject: Linter.Plugin): void;
+    /**
+     * Executes the current configuration on an array of file and directory names.
+     * @param patterns An array of file and directory names.
+     * @returns The results for all files that were linted.
+     */
+    executeOnFiles(patterns: string[]): CLIEngine.LintReport;
+    /**
+     * Executes the current configuration on text.
+     * @param text A string of JavaScript code to lint.
+     * @param filename An optional string representing the texts filename.
+     * @param warnIgnored Always warn when a file is ignored
+     * @returns The results for the linting.
+     */
+    executeOnText(text: string, filename?: string, warnIgnored?: boolean): CLIEngine.LintReport;
+    /**
+     * Returns a configuration object for the given file based on the CLI options.
+     * This is the same logic used by the ESLint CLI executable to determine configuration for each file it processes.
+     * @param filePath The path of the file to retrieve a config object for.
+     * @returns A configuration object for the file.
+     */
+    getConfigForFile(filePath: string): Linter.Config;
+    /**
+     * Returns the formatter representing the given format.
+     * @param format The name of the format to load or the path to a custom formatter.
+     * @returns The formatter function.
+     */
+    getFormatter(format?: string): CLIEngine.Formatter;
+    /**
+     * Checks if a given path is ignored by ESLint.
+     * @param filePath The path of the file to check.
+     * @returns Whether or not the given path is ignored.
+     */
+    isPathIgnored(filePath: string): boolean;
+    /**
+     * Resolves the patterns passed into `executeOnFiles()` into glob-based patterns for easier handling.
+     * @param patterns The file patterns passed on the command line.
+     * @returns The equivalent glob patterns.
+     */
+    resolveFileGlobPatterns(patterns: string[]): string[];
+    getRules<TMessageIds extends string = string, TOptions extends readonly unknown[] = unknown[], TRuleListener extends RuleListener = RuleListener>(): Map<string, RuleModule<TMessageIds, TOptions, TRuleListener>>;
+    /**
+     * Returns results that only contains errors.
+     * @param results The results to filter.
+     * @returns The filtered results.
+     */
+    static getErrorResults(results: CLIEngine.LintResult[]): CLIEngine.LintResult[];
+    /**
+     * Returns the formatter representing the given format or null if the `format` is not a string.
+     * @param format The name of the format to load or the path to a custom formatter.
+     * @returns The formatter function.
+     */
+    static getFormatter(format?: string): CLIEngine.Formatter;
+    /**
+     * Outputs fixes from the given results to files.
+     * @param report The report object created by CLIEngine.
+     */
+    static outputFixes(report: CLIEngine.LintReport): void;
+    static version: string;
+}
+declare namespace CLIEngine {
+    interface Options {
+        allowInlineConfig?: boolean;
+        baseConfig?: false | {
+            [name: string]: unknown;
+        };
+        cache?: boolean;
+        cacheFile?: string;
+        cacheLocation?: string;
+        configFile?: string;
+        cwd?: string;
+        envs?: string[];
+        errorOnUnmatchedPattern?: boolean;
+        extensions?: string[];
+        fix?: boolean;
+        globals?: string[];
+        ignore?: boolean;
+        ignorePath?: string;
+        ignorePattern?: string | string[];
+        useEslintrc?: boolean;
+        parser?: string;
+        parserOptions?: Linter.ParserOptions;
+        plugins?: string[];
+        resolvePluginsRelativeTo?: string;
+        rules?: {
+            [name: string]: Linter.RuleLevel | Linter.RuleLevelAndOptions;
+        };
+        rulePaths?: string[];
+        reportUnusedDisableDirectives?: boolean;
+    }
+    interface LintResult {
+        filePath: string;
+        messages: Linter.LintMessage[];
+        errorCount: number;
+        warningCount: number;
+        fixableErrorCount: number;
+        fixableWarningCount: number;
+        output?: string;
+        source?: string;
+    }
+    interface LintReport {
+        results: LintResult[];
+        errorCount: number;
+        warningCount: number;
+        fixableErrorCount: number;
+        fixableWarningCount: number;
+        usedDeprecatedRules: DeprecatedRuleUse[];
+    }
+    interface DeprecatedRuleUse {
+        ruleId: string;
+        replacedBy: string[];
+    }
+    interface LintResultData<TMessageIds extends string> {
+        rulesMeta: {
+            [ruleId: string]: RuleMetaData<TMessageIds>;
+        };
+    }
+    type Formatter = <TMessageIds extends string>(results: LintResult[], data?: LintResultData<TMessageIds>) => string;
+}
+declare const CLIEngine_base: typeof CLIEngineBase;
+/**
+ * The underlying utility that runs the ESLint command line interface. This object will read the filesystem for
+ * configuration and file information but will not output any results. Instead, it allows you direct access to the
+ * important information so you can deal with the output yourself.
+ * @deprecated use the ESLint class instead
+ */
+declare class CLIEngine extends CLIEngine_base {
+}
+export { CLIEngine };
+//# sourceMappingURL=CLIEngine.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/ESLint.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/ESLint.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3ee557cbc95044685286e24c8fe4c68c50e3c86c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/ESLint.d.ts
@@ -0,0 +1,341 @@
+import { Linter } from './Linter';
+declare class ESLintBase {
+    /**
+     * Creates a new instance of the main ESLint API.
+     * @param options The options for this instance.
+     */
+    constructor(options?: ESLint.ESLintOptions);
+    /**
+     * This method calculates the configuration for a given file, which can be useful for debugging purposes.
+     * - It resolves and merges extends and overrides settings into the top level configuration.
+     * - It resolves the parser setting to absolute paths.
+     * - It normalizes the plugins setting to align short names. (e.g., eslint-plugin-foo → foo)
+     * - It adds the processor setting if a legacy file extension processor is matched.
+     * - It doesn't interpret the env setting to the globals and parserOptions settings, so the result object contains
+     *   the env setting as is.
+     * @param filePath The path to the file whose configuration you would like to calculate. Directory paths are forbidden
+     *                 because ESLint cannot handle the overrides setting.
+     * @returns The promise that will be fulfilled with a configuration object.
+     */
+    calculateConfigForFile(filePath: string): Promise<Linter.Config>;
+    /**
+     * This method checks if a given file is ignored by your configuration.
+     * @param filePath The path to the file you want to check.
+     * @returns The promise that will be fulfilled with whether the file is ignored or not. If the file is ignored, then
+     *          it will return true.
+     */
+    isPathIgnored(filePath: string): Promise<boolean>;
+    /**
+     * This method lints the files that match the glob patterns and then returns the results.
+     * @param patterns The lint target files. This can contain any of file paths, directory paths, and glob patterns.
+     * @returns The promise that will be fulfilled with an array of LintResult objects.
+     */
+    lintFiles(patterns: string | string[]): Promise<ESLint.LintResult[]>;
+    /**
+     * This method lints the given source code text and then returns the results.
+     *
+     * By default, this method uses the configuration that applies to files in the current working directory (the cwd
+     * constructor option). If you want to use a different configuration, pass options.filePath, and ESLint will load the
+     * same configuration that eslint.lintFiles() would use for a file at options.filePath.
+     *
+     * If the options.filePath value is configured to be ignored, this method returns an empty array. If the
+     * options.warnIgnored option is set along with the options.filePath option, this method returns a LintResult object.
+     * In that case, the result may contain a warning that indicates the file was ignored.
+     * @param code The source code text to check.
+     * @param options The options.
+     * @returns The promise that will be fulfilled with an array of LintResult objects. This is an array (despite there
+     *          being only one lint result) in order to keep the interfaces between this and the eslint.lintFiles()
+     *          method similar.
+     */
+    lintText(code: string, options?: ESLint.LintTextOptions): Promise<ESLint.LintResult[]>;
+    /**
+     * This method loads a formatter. Formatters convert lint results to a human- or machine-readable string.
+     * @param name TThe path to the file you want to check.
+     * The following values are allowed:
+     * - undefined. In this case, loads the "stylish" built-in formatter.
+     * - A name of built-in formatters.
+     * - A name of third-party formatters. For examples:
+     * -- `foo` will load eslint-formatter-foo.
+     * -- `@foo` will load `@foo/eslint-formatter`.
+     * -- `@foo/bar` will load `@foo/eslint-formatter-bar`.
+     * - A path to the file that defines a formatter. The path must contain one or more path separators (/) in order to distinguish if it's a path or not. For example, start with ./.
+     * @returns The promise that will be fulfilled with a Formatter object.
+     */
+    loadFormatter(name?: string): Promise<ESLint.Formatter>;
+    /**
+     * This method copies the given results and removes warnings. The returned value contains only errors.
+     * @param results The LintResult objects to filter.
+     * @returns The filtered LintResult objects.
+     */
+    static getErrorResults(results: ESLint.LintResult): ESLint.LintResult;
+    /**
+     * This method writes code modified by ESLint's autofix feature into its respective file. If any of the modified
+     * files don't exist, this method does nothing.
+     * @param results The LintResult objects to write.
+     * @returns The promise that will be fulfilled after all files are written.
+     */
+    static outputFixes(results: ESLint.LintResult): Promise<void>;
+    /**
+     * The version text.
+     */
+    static readonly version: string;
+}
+declare namespace ESLint {
+    interface ESLintOptions {
+        /**
+         * If false is present, ESLint suppresses directive comments in source code.
+         * If this option is false, it overrides the noInlineConfig setting in your configurations.
+         */
+        allowInlineConfig?: boolean;
+        /**
+         * Configuration object, extended by all configurations used with this instance.
+         * You can use this option to define the default settings that will be used if your configuration files don't
+         * configure it.
+         */
+        baseConfig?: Linter.Config | null;
+        /**
+         * If true is present, the eslint.lintFiles() method caches lint results and uses it if each target file is not
+         * changed. Please mind that ESLint doesn't clear the cache when you upgrade ESLint plugins. In that case, you have
+         * to remove the cache file manually. The eslint.lintText() method doesn't use caches even if you pass the
+         * options.filePath to the method.
+         */
+        cache?: boolean;
+        /**
+         * The eslint.lintFiles() method writes caches into this file.
+         */
+        cacheLocation?: string;
+        /**
+         * The working directory. This must be an absolute path.
+         */
+        cwd?: string;
+        /**
+         * Unless set to false, the eslint.lintFiles() method will throw an error when no target files are found.
+         */
+        errorOnUnmatchedPattern?: boolean;
+        /**
+         * If you pass directory paths to the eslint.lintFiles() method, ESLint checks the files in those directories that
+         * have the given extensions. For example, when passing the src/ directory and extensions is [".js", ".ts"], ESLint
+         * will lint *.js and *.ts files in src/. If extensions is null, ESLint checks *.js files and files that match
+         * overrides[].files patterns in your configuration.
+         * Note: This option only applies when you pass directory paths to the eslint.lintFiles() method.
+         * If you pass glob patterns, ESLint will lint all files matching the glob pattern regardless of extension.
+         */
+        extensions?: string[] | null;
+        /**
+         * If true is present, the eslint.lintFiles() and eslint.lintText() methods work in autofix mode.
+         * If a predicate function is present, the methods pass each lint message to the function, then use only the
+         * lint messages for which the function returned true.
+         */
+        fix?: boolean | ((message: LintMessage) => boolean);
+        /**
+         * The types of the rules that the eslint.lintFiles() and eslint.lintText() methods use for autofix.
+         */
+        fixTypes?: string[];
+        /**
+         * If false is present, the eslint.lintFiles() method doesn't interpret glob patterns.
+         */
+        globInputPaths?: boolean;
+        /**
+         * If false is present, the eslint.lintFiles() method doesn't respect `.eslintignore` files or ignorePatterns in
+         * your configuration.
+         */
+        ignore?: boolean;
+        /**
+         * The path to a file ESLint uses instead of `$CWD/.eslintignore`.
+         * If a path is present and the file doesn't exist, this constructor will throw an error.
+         */
+        ignorePath?: string;
+        /**
+         * Configuration object, overrides all configurations used with this instance.
+         * You can use this option to define the settings that will be used even if your configuration files configure it.
+         */
+        overrideConfig?: Linter.ConfigOverride | null;
+        /**
+         * The path to a configuration file, overrides all configurations used with this instance.
+         * The options.overrideConfig option is applied after this option is applied.
+         */
+        overrideConfigFile?: string | null;
+        /**
+         * The plugin implementations that ESLint uses for the plugins setting of your configuration.
+         * This is a map-like object. Those keys are plugin IDs and each value is implementation.
+         */
+        plugins?: Record<string, Linter.Plugin> | null;
+        /**
+         * The severity to report unused eslint-disable directives.
+         * If this option is a severity, it overrides the reportUnusedDisableDirectives setting in your configurations.
+         */
+        reportUnusedDisableDirectives?: Linter.SeverityString | null;
+        /**
+         * The path to a directory where plugins should be resolved from.
+         * If null is present, ESLint loads plugins from the location of the configuration file that contains the plugin
+         * setting.
+         * If a path is present, ESLint loads all plugins from there.
+         */
+        resolvePluginsRelativeTo?: string | null;
+        /**
+         * An array of paths to directories to load custom rules from.
+         */
+        rulePaths?: string[];
+        /**
+         * If false is present, ESLint doesn't load configuration files (.eslintrc.* files).
+         * Only the configuration of the constructor options is valid.
+         */
+        useEslintrc?: boolean;
+    }
+    interface DeprecatedRuleInfo {
+        /**
+         *  The rule ID.
+         */
+        ruleId: string;
+        /**
+         *  The rule IDs that replace this deprecated rule.
+         */
+        replacedBy: string[];
+    }
+    /**
+     * The LintResult value is the information of the linting result of each file.
+     */
+    interface LintResult {
+        /**
+         * The number of errors. This includes fixable errors.
+         */
+        errorCount: number;
+        /**
+         * The absolute path to the file of this result. This is the string "<text>" if the file path is unknown (when you
+         * didn't pass the options.filePath option to the eslint.lintText() method).
+         */
+        filePath: string;
+        /**
+         * The number of errors that can be fixed automatically by the fix constructor option.
+         */
+        fixableErrorCount: number;
+        /**
+         * The number of warnings that can be fixed automatically by the fix constructor option.
+         */
+        fixableWarningCount: number;
+        /**
+         * The array of LintMessage objects.
+         */
+        messages: Linter.LintMessage[];
+        /**
+         * The source code of the file that was linted, with as many fixes applied as possible.
+         */
+        output?: string;
+        /**
+         * The original source code text. This property is undefined if any messages didn't exist or the output
+         * property exists.
+         */
+        source?: string;
+        /**
+         * The information about the deprecated rules that were used to check this file.
+         */
+        usedDeprecatedRules: DeprecatedRuleInfo[];
+        /**
+         * The number of warnings. This includes fixable warnings.
+         */
+        warningCount: number;
+    }
+    interface LintTextOptions {
+        /**
+         * The path to the file of the source code text. If omitted, the result.filePath becomes the string "<text>".
+         */
+        filePath?: string;
+        /**
+         * If true is present and the options.filePath is a file ESLint should ignore, this method returns a lint result
+         * contains a warning message.
+         */
+        warnIgnored?: boolean;
+    }
+    /**
+     * The LintMessage value is the information of each linting error.
+     */
+    interface LintMessage {
+        /**
+         * The 1-based column number of the begin point of this message.
+         */
+        column: number;
+        /**
+         * The 1-based column number of the end point of this message. This property is undefined if this message
+         * is not a range.
+         */
+        endColumn: number | undefined;
+        /**
+         * The 1-based line number of the end point of this message. This property is undefined if this
+         * message is not a range.
+         */
+        endLine: number | undefined;
+        /**
+         * The EditInfo object of autofix. This property is undefined if this message is not fixable.
+         */
+        fix: EditInfo | undefined;
+        /**
+         * The 1-based line number of the begin point of this message.
+         */
+        line: number;
+        /**
+         * The error message
+         */
+        message: string;
+        /**
+         * The rule name that generates this lint message. If this message is generated by the ESLint core rather than
+         * rules, this is null.
+         */
+        ruleId: string | null;
+        /**
+         * The severity of this message. 1 means warning and 2 means error.
+         */
+        severity: 1 | 2;
+        /**
+         * The list of suggestions. Each suggestion is the pair of a description and an EditInfo object to fix code. API
+         * users such as editor integrations can choose one of them to fix the problem of this message. This property is
+         * undefined if this message doesn't have any suggestions.
+         */
+        suggestions: {
+            desc: string;
+            fix: EditInfo;
+        }[] | undefined;
+    }
+    /**
+     * The EditInfo value is information to edit text.
+     *
+     * This edit information means replacing the range of the range property by the text property value. It's like
+     * sourceCodeText.slice(0, edit.range[0]) + edit.text + sourceCodeText.slice(edit.range[1]). Therefore, it's an add
+     * if the range[0] and range[1] property values are the same value, and it's removal if the text property value is
+     * empty string.
+     */
+    interface EditInfo {
+        /**
+         * The pair of 0-based indices in source code text to remove.
+         */
+        range: [
+            number,
+            number
+        ];
+        /**
+         * The text to add.
+         */
+        text: string;
+    }
+    /**
+     * The Formatter value is the object to convert the LintResult objects to text.
+     */
+    interface Formatter {
+        /**
+         * The method to convert the LintResult objects to text
+         */
+        format(results: LintResult[]): string;
+    }
+}
+declare const _ESLint: typeof ESLintBase;
+/**
+ * The ESLint class is the primary class to use in Node.js applications.
+ * This class depends on the Node.js fs module and the file system, so you cannot use it in browsers.
+ *
+ * If you want to lint code on browsers, use the Linter class instead.
+ *
+ * @since 7.0.0
+ */
+declare class ESLint extends _ESLint {
+}
+export { ESLint };
+//# sourceMappingURL=ESLint.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/Linter.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/Linter.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f616b30fb01ee3f009896a496ab3ebcbe17ff70b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/Linter.d.ts
@@ -0,0 +1,327 @@
+import { TSESTree, ParserServices } from '../ts-estree';
+import { ParserOptions as TSParserOptions } from './ParserOptions';
+import { RuleCreateFunction, RuleFix, RuleModule } from './Rule';
+import { Scope } from './Scope';
+import { SourceCode } from './SourceCode';
+declare class LinterBase {
+    /**
+     * Initialize the Linter.
+     * @param config the config object
+     */
+    constructor(config?: Linter.LinterOptions);
+    /**
+     * Define a new parser module
+     * @param parserId Name of the parser
+     * @param parserModule The parser object
+     */
+    defineParser(parserId: string, parserModule: Linter.ParserModule): void;
+    /**
+     * Defines a new linting rule.
+     * @param ruleId A unique rule identifier
+     * @param ruleModule Function from context to object mapping AST node types to event handlers
+     */
+    defineRule<TMessageIds extends string, TOptions extends readonly unknown[]>(ruleId: string, ruleModule: RuleModule<TMessageIds, TOptions> | RuleCreateFunction): void;
+    /**
+     * Defines many new linting rules.
+     * @param rulesToDefine map from unique rule identifier to rule
+     */
+    defineRules<TMessageIds extends string, TOptions extends readonly unknown[]>(rulesToDefine: Record<string, RuleModule<TMessageIds, TOptions> | RuleCreateFunction>): void;
+    /**
+     * Gets an object with all loaded rules.
+     * @returns All loaded rules
+     */
+    getRules(): Map<string, RuleModule<string, unknown[]>>;
+    /**
+     * Gets the `SourceCode` object representing the parsed source.
+     * @returns The `SourceCode` object.
+     */
+    getSourceCode(): SourceCode;
+    /**
+     * Verifies the text against the rules specified by the second argument.
+     * @param textOrSourceCode The text to parse or a SourceCode object.
+     * @param config An ESLintConfig instance to configure everything.
+     * @param filenameOrOptions The optional filename of the file being checked.
+     *        If this is not set, the filename will default to '<input>' in the rule context.
+     *        If this is an object, then it has "filename", "allowInlineConfig", and some properties.
+     * @returns The results as an array of messages or an empty array if no messages.
+     */
+    verify(textOrSourceCode: SourceCode | string, config: Linter.Config, filenameOrOptions?: string | Linter.VerifyOptions): Linter.LintMessage[];
+    /**
+     * Performs multiple autofix passes over the text until as many fixes as possible have been applied.
+     * @param text The source text to apply fixes to.
+     * @param config The ESLint config object to use.
+     * @param options The ESLint options object to use.
+     * @returns The result of the fix operation as returned from the SourceCodeFixer.
+     */
+    verifyAndFix(code: string, config: Linter.Config, options: Linter.FixOptions): Linter.FixReport;
+    /**
+     * The version from package.json.
+     */
+    readonly version: string;
+    /**
+     * The version from package.json.
+     */
+    static readonly version: string;
+}
+declare namespace Linter {
+    export interface LinterOptions {
+        /**
+         * path to a directory that should be considered as the current working directory.
+         */
+        cwd?: string;
+    }
+    export type Severity = 0 | 1 | 2;
+    export type SeverityString = 'off' | 'warn' | 'error';
+    export type RuleLevel = Severity | SeverityString;
+    export type RuleLevelAndOptions = [
+        RuleLevel,
+        ...unknown[]
+    ];
+    export type RuleEntry = RuleLevel | RuleLevelAndOptions;
+    export type RulesRecord = Partial<Record<string, RuleEntry>>;
+    interface BaseConfig {
+        $schema?: string;
+        /**
+         * The environment settings.
+         */
+        env?: {
+            [name: string]: boolean;
+        };
+        /**
+         * The path to other config files or the package name of shareable configs.
+         */
+        extends?: string | string[];
+        /**
+         * The global variable settings.
+         */
+        globals?: {
+            [name: string]: boolean;
+        };
+        /**
+         * The flag that disables directive comments.
+         */
+        noInlineConfig?: boolean;
+        /**
+         * The override settings per kind of files.
+         */
+        overrides?: ConfigOverride[];
+        /**
+         * The path to a parser or the package name of a parser.
+         */
+        parser?: string;
+        /**
+         * The parser options.
+         */
+        parserOptions?: ParserOptions;
+        /**
+         * The plugin specifiers.
+         */
+        plugins?: string[];
+        /**
+         * The processor specifier.
+         */
+        processor?: string;
+        /**
+         * The flag to report unused `eslint-disable` comments.
+         */
+        reportUnusedDisableDirectives?: boolean;
+        /**
+         * The rule settings.
+         */
+        rules?: RulesRecord;
+        /**
+         * The shared settings.
+         */
+        settings?: {
+            [name: string]: unknown;
+        };
+    }
+    export interface ConfigOverride extends BaseConfig {
+        excludedFiles?: string | string[];
+        files: string | string[];
+    }
+    export interface Config extends BaseConfig {
+        /**
+         * The glob patterns that ignore to lint.
+         */
+        ignorePatterns?: string | string[];
+        /**
+         * The root flag.
+         */
+        root?: boolean;
+    }
+    export type ParserOptions = TSParserOptions;
+    export interface VerifyOptions {
+        /**
+         * Allow/disallow inline comments' ability to change config once it is set. Defaults to true if not supplied.
+         * Useful if you want to validate JS without comments overriding rules.
+         */
+        allowInlineConfig?: boolean;
+        /**
+         * if `true` then the linter doesn't make `fix` properties into the lint result.
+         */
+        disableFixes?: boolean;
+        /**
+         * the filename of the source code.
+         */
+        filename?: string;
+        /**
+         * the predicate function that selects adopt code blocks.
+         */
+        filterCodeBlock?: (filename: string, text: string) => boolean;
+        /**
+         * postprocessor for report messages.
+         * If provided, this should accept an array of the message lists
+         * for each code block returned from the preprocessor, apply a mapping to
+         * the messages as appropriate, and return a one-dimensional array of
+         * messages.
+         */
+        postprocess?: Processor['postprocess'];
+        /**
+         * preprocessor for source text.
+         * If provided, this should accept a string of source text, and return an array of code blocks to lint.
+         */
+        preprocess?: Processor['preprocess'];
+        /**
+         * Adds reported errors for unused `eslint-disable` directives.
+         */
+        reportUnusedDisableDirectives?: boolean | SeverityString;
+    }
+    export interface FixOptions extends VerifyOptions {
+        /**
+         * Determines whether fixes should be applied.
+         */
+        fix?: boolean;
+    }
+    export interface LintSuggestion {
+        desc: string;
+        fix: RuleFix;
+        messageId?: string;
+    }
+    export interface LintMessage {
+        /**
+         * The 1-based column number.
+         */
+        column: number;
+        /**
+         * The 1-based column number of the end location.
+         */
+        endColumn?: number;
+        /**
+         * The 1-based line number of the end location.
+         */
+        endLine?: number;
+        /**
+         * If `true` then this is a fatal error.
+         */
+        fatal?: true;
+        /**
+         * Information for autofix.
+         */
+        fix?: RuleFix;
+        /**
+         * The 1-based line number.
+         */
+        line: number;
+        /**
+         * The error message.
+         */
+        message: string;
+        messageId?: string;
+        nodeType: string;
+        /**
+         * The ID of the rule which makes this message.
+         */
+        ruleId: string | null;
+        /**
+         * The severity of this message.
+         */
+        severity: Severity;
+        source: string | null;
+        /**
+         * Information for suggestions
+         */
+        suggestions?: LintSuggestion[];
+    }
+    export interface FixReport {
+        /**
+         * True, if the code was fixed
+         */
+        fixed: boolean;
+        /**
+         * Fixed code text (might be the same as input if no fixes were applied).
+         */
+        output: string;
+        /**
+         * Collection of all messages for the given code
+         */
+        messages: LintMessage[];
+    }
+    export type ParserModule = {
+        parse(text: string, options?: ParserOptions): TSESTree.Program;
+    } | {
+        parseForESLint(text: string, options?: ParserOptions): ESLintParseResult;
+    };
+    export interface ESLintParseResult {
+        ast: TSESTree.Program;
+        parserServices?: ParserServices;
+        scopeManager?: Scope.ScopeManager;
+        visitorKeys?: SourceCode.VisitorKeys;
+    }
+    export interface Processor {
+        /**
+         * The function to extract code blocks.
+         */
+        preprocess?: (text: string, filename: string) => Array<string | {
+            text: string;
+            filename: string;
+        }>;
+        /**
+         * The function to merge messages.
+         */
+        postprocess?: (messagesList: Linter.LintMessage[][], filename: string) => Linter.LintMessage[];
+        /**
+         * If `true` then it means the processor supports autofix.
+         */
+        supportsAutofix?: boolean;
+    }
+    export interface Environment {
+        /**
+         * The definition of global variables.
+         */
+        globals?: Record<string, Linter.Config>;
+        /**
+         * The parser options that will be enabled under this environment.
+         */
+        parserOptions?: ParserOptions;
+    }
+    export interface Plugin {
+        /**
+         * The definition of plugin configs.
+         */
+        configs?: Record<string, Linter.Config>;
+        /**
+         * The definition of plugin environments.
+         */
+        environments?: Record<string, Environment>;
+        /**
+         * The definition of plugin processors.
+         */
+        processors?: Record<string, Processor>;
+        /**
+         * The definition of plugin rules.
+         */
+        rules?: Record<string, RuleCreateFunction | RuleModule<string, unknown[]>>;
+    }
+    export {};
+}
+declare const Linter_base: typeof LinterBase;
+/**
+ * The Linter object does the actual evaluation of the JavaScript code. It doesn't do any filesystem operations, it
+ * simply parses and reports on the code. In particular, the Linter object does not process configuration objects
+ * or files.
+ */
+declare class Linter extends Linter_base {
+}
+export { Linter };
+//# sourceMappingURL=Linter.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/ParserOptions.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/ParserOptions.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0fd8e9041cccf6c34902b39979fcdf7f315e408a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/ParserOptions.d.ts
@@ -0,0 +1,2 @@
+export { DebugLevel, EcmaVersion, ParserOptions, SourceType, } from '@typescript-eslint/types';
+//# sourceMappingURL=ParserOptions.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/Rule.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/Rule.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..557120917cfea59c7bb9d5af52b0e3a0d7d62391
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/Rule.d.ts
@@ -0,0 +1,369 @@
+import { JSONSchema4 } from '../json-schema';
+import { ParserServices, TSESTree } from '../ts-estree';
+import { AST } from './AST';
+import { Linter } from './Linter';
+import { Scope } from './Scope';
+import { SourceCode } from './SourceCode';
+interface RuleMetaDataDocs {
+    /**
+     * The general category the rule falls within
+     */
+    category: 'Best Practices' | 'Stylistic Issues' | 'Variables' | 'Possible Errors';
+    /**
+     * Concise description of the rule
+     */
+    description: string;
+    /**
+     * The recommendation level for the rule.
+     * Used by the build tools to generate the recommended config.
+     * Set to false to not include it as a recommendation
+     */
+    recommended: 'error' | 'warn' | false;
+    /**
+     * The URL of the rule's docs
+     */
+    url: string;
+    /**
+     * Specifies whether the rule can return suggestions.
+     */
+    suggestion?: boolean;
+    /**
+     * Does the rule require us to create a full TypeScript Program in order for it
+     * to type-check code. This is only used for documentation purposes.
+     */
+    requiresTypeChecking?: boolean;
+    /**
+     * Does the rule extend (or is it based off of) an ESLint code rule?
+     * Alternately accepts the name of the base rule, in case the rule has been renamed.
+     * This is only used for documentation purposes.
+     */
+    extendsBaseRule?: boolean | string;
+}
+interface RuleMetaData<TMessageIds extends string> {
+    /**
+     * True if the rule is deprecated, false otherwise
+     */
+    deprecated?: boolean;
+    /**
+     * Documentation for the rule, unnecessary for custom rules/plugins
+     */
+    docs?: RuleMetaDataDocs;
+    /**
+     * The fixer category. Omit if there is no fixer
+     */
+    fixable?: 'code' | 'whitespace';
+    /**
+     * A map of messages which the rule can report.
+     * The key is the messageId, and the string is the parameterised error string.
+     * See: https://eslint.org/docs/developer-guide/working-with-rules#messageids
+     */
+    messages: Record<TMessageIds, string>;
+    /**
+     * The type of rule.
+     * - `"problem"` means the rule is identifying code that either will cause an error or may cause a confusing behavior. Developers should consider this a high priority to resolve.
+     * - `"suggestion"` means the rule is identifying something that could be done in a better way but no errors will occur if the code isn’t changed.
+     * - `"layout"` means the rule cares primarily about whitespace, semicolons, commas, and parentheses, all the parts of the program that determine how the code looks rather than how it executes. These rules work on parts of the code that aren’t specified in the AST.
+     */
+    type: 'suggestion' | 'problem' | 'layout';
+    /**
+     * The name of the rule this rule was replaced by, if it was deprecated.
+     */
+    replacedBy?: string[];
+    /**
+     * The options schema. Supply an empty array if there are no options.
+     */
+    schema: JSONSchema4 | JSONSchema4[];
+}
+interface RuleFix {
+    range: AST.Range;
+    text: string;
+}
+interface RuleFixer {
+    insertTextAfter(nodeOrToken: TSESTree.Node | TSESTree.Token, text: string): RuleFix;
+    insertTextAfterRange(range: AST.Range, text: string): RuleFix;
+    insertTextBefore(nodeOrToken: TSESTree.Node | TSESTree.Token, text: string): RuleFix;
+    insertTextBeforeRange(range: AST.Range, text: string): RuleFix;
+    remove(nodeOrToken: TSESTree.Node | TSESTree.Token): RuleFix;
+    removeRange(range: AST.Range): RuleFix;
+    replaceText(nodeOrToken: TSESTree.Node | TSESTree.Token, text: string): RuleFix;
+    replaceTextRange(range: AST.Range, text: string): RuleFix;
+}
+declare type ReportFixFunction = (fixer: RuleFixer) => null | RuleFix | RuleFix[] | IterableIterator<RuleFix>;
+declare type ReportSuggestionArray<TMessageIds extends string> = ReportDescriptorBase<TMessageIds>[];
+interface ReportDescriptorBase<TMessageIds extends string> {
+    /**
+     * The parameters for the message string associated with `messageId`.
+     */
+    readonly data?: Readonly<Record<string, unknown>>;
+    /**
+     * The fixer function.
+     */
+    readonly fix?: ReportFixFunction | null;
+    /**
+     * The messageId which is being reported.
+     */
+    readonly messageId: TMessageIds;
+}
+interface ReportDescriptorWithSuggestion<TMessageIds extends string> extends ReportDescriptorBase<TMessageIds> {
+    /**
+     * 6.7's Suggestions API
+     */
+    readonly suggest?: Readonly<ReportSuggestionArray<TMessageIds>> | null;
+}
+interface ReportDescriptorNodeOptionalLoc {
+    /**
+     * The Node or AST Token which the report is being attached to
+     */
+    readonly node: TSESTree.Node | TSESTree.Comment | TSESTree.Token;
+    /**
+     * An override of the location of the report
+     */
+    readonly loc?: Readonly<TSESTree.SourceLocation> | Readonly<TSESTree.LineAndColumnData>;
+}
+interface ReportDescriptorLocOnly {
+    /**
+     * An override of the location of the report
+     */
+    loc: Readonly<TSESTree.SourceLocation> | Readonly<TSESTree.LineAndColumnData>;
+}
+declare type ReportDescriptor<TMessageIds extends string> = ReportDescriptorWithSuggestion<TMessageIds> & (ReportDescriptorNodeOptionalLoc | ReportDescriptorLocOnly);
+interface RuleContext<TMessageIds extends string, TOptions extends readonly unknown[]> {
+    /**
+     * The rule ID.
+     */
+    id: string;
+    /**
+     * An array of the configured options for this rule.
+     * This array does not include the rule severity.
+     */
+    options: TOptions;
+    /**
+     * The name of the parser from configuration.
+     */
+    parserPath: string;
+    /**
+     * The parser options configured for this run
+     */
+    parserOptions: Linter.ParserOptions;
+    /**
+     * An object containing parser-provided services for rules
+     */
+    parserServices?: ParserServices;
+    /**
+     * The shared settings from configuration.
+     * We do not have any shared settings in this plugin.
+     */
+    settings: Record<string, unknown>;
+    /**
+     * Returns an array of the ancestors of the currently-traversed node, starting at
+     * the root of the AST and continuing through the direct parent of the current node.
+     * This array does not include the currently-traversed node itself.
+     */
+    getAncestors(): TSESTree.Node[];
+    /**
+     * Returns a list of variables declared by the given node.
+     * This information can be used to track references to variables.
+     */
+    getDeclaredVariables(node: TSESTree.Node): Scope.Variable[];
+    /**
+     * Returns the filename associated with the source.
+     */
+    getFilename(): string;
+    /**
+     * Returns the scope of the currently-traversed node.
+     * This information can be used track references to variables.
+     */
+    getScope(): Scope.Scope;
+    /**
+     * Returns a SourceCode object that you can use to work with the source that
+     * was passed to ESLint.
+     */
+    getSourceCode(): Readonly<SourceCode>;
+    /**
+     * Marks a variable with the given name in the current scope as used.
+     * This affects the no-unused-vars rule.
+     */
+    markVariableAsUsed(name: string): boolean;
+    /**
+     * Reports a problem in the code.
+     */
+    report(descriptor: ReportDescriptor<TMessageIds>): void;
+}
+declare type RuleFunction<T extends TSESTree.BaseNode = never> = (node: T) => void;
+interface RuleListener {
+    [nodeSelector: string]: RuleFunction | undefined;
+    ArrayExpression?: RuleFunction<TSESTree.ArrayExpression>;
+    ArrayPattern?: RuleFunction<TSESTree.ArrayPattern>;
+    ArrowFunctionExpression?: RuleFunction<TSESTree.ArrowFunctionExpression>;
+    AssignmentPattern?: RuleFunction<TSESTree.AssignmentPattern>;
+    AssignmentExpression?: RuleFunction<TSESTree.AssignmentExpression>;
+    AwaitExpression?: RuleFunction<TSESTree.AwaitExpression>;
+    BigIntLiteral?: RuleFunction<TSESTree.BigIntLiteral>;
+    BinaryExpression?: RuleFunction<TSESTree.BinaryExpression>;
+    BlockStatement?: RuleFunction<TSESTree.BlockStatement>;
+    BreakStatement?: RuleFunction<TSESTree.BreakStatement>;
+    CallExpression?: RuleFunction<TSESTree.CallExpression>;
+    CatchClause?: RuleFunction<TSESTree.CatchClause>;
+    ChainExpression?: RuleFunction<TSESTree.ChainExpression>;
+    ClassBody?: RuleFunction<TSESTree.ClassBody>;
+    ClassDeclaration?: RuleFunction<TSESTree.ClassDeclaration>;
+    ClassExpression?: RuleFunction<TSESTree.ClassExpression>;
+    ClassProperty?: RuleFunction<TSESTree.ClassProperty>;
+    Comment?: RuleFunction<TSESTree.Comment>;
+    ConditionalExpression?: RuleFunction<TSESTree.ConditionalExpression>;
+    ContinueStatement?: RuleFunction<TSESTree.ContinueStatement>;
+    DebuggerStatement?: RuleFunction<TSESTree.DebuggerStatement>;
+    Decorator?: RuleFunction<TSESTree.Decorator>;
+    DoWhileStatement?: RuleFunction<TSESTree.DoWhileStatement>;
+    EmptyStatement?: RuleFunction<TSESTree.EmptyStatement>;
+    ExportAllDeclaration?: RuleFunction<TSESTree.ExportAllDeclaration>;
+    ExportDefaultDeclaration?: RuleFunction<TSESTree.ExportDefaultDeclaration>;
+    ExportNamedDeclaration?: RuleFunction<TSESTree.ExportNamedDeclaration>;
+    ExportSpecifier?: RuleFunction<TSESTree.ExportSpecifier>;
+    ExpressionStatement?: RuleFunction<TSESTree.ExpressionStatement>;
+    ForInStatement?: RuleFunction<TSESTree.ForInStatement>;
+    ForOfStatement?: RuleFunction<TSESTree.ForOfStatement>;
+    ForStatement?: RuleFunction<TSESTree.ForStatement>;
+    FunctionDeclaration?: RuleFunction<TSESTree.FunctionDeclaration>;
+    FunctionExpression?: RuleFunction<TSESTree.FunctionExpression>;
+    Identifier?: RuleFunction<TSESTree.Identifier>;
+    IfStatement?: RuleFunction<TSESTree.IfStatement>;
+    ImportDeclaration?: RuleFunction<TSESTree.ImportDeclaration>;
+    ImportDefaultSpecifier?: RuleFunction<TSESTree.ImportDefaultSpecifier>;
+    ImportExpression?: RuleFunction<TSESTree.ImportExpression>;
+    ImportNamespaceSpecifier?: RuleFunction<TSESTree.ImportNamespaceSpecifier>;
+    ImportSpecifier?: RuleFunction<TSESTree.ImportSpecifier>;
+    JSXAttribute?: RuleFunction<TSESTree.JSXAttribute>;
+    JSXClosingElement?: RuleFunction<TSESTree.JSXClosingElement>;
+    JSXClosingFragment?: RuleFunction<TSESTree.JSXClosingFragment>;
+    JSXElement?: RuleFunction<TSESTree.JSXElement>;
+    JSXEmptyExpression?: RuleFunction<TSESTree.JSXEmptyExpression>;
+    JSXExpressionContainer?: RuleFunction<TSESTree.JSXExpressionContainer>;
+    JSXFragment?: RuleFunction<TSESTree.JSXFragment>;
+    JSXIdentifier?: RuleFunction<TSESTree.JSXIdentifier>;
+    JSXMemberExpression?: RuleFunction<TSESTree.JSXMemberExpression>;
+    JSXOpeningElement?: RuleFunction<TSESTree.JSXOpeningElement>;
+    JSXOpeningFragment?: RuleFunction<TSESTree.JSXOpeningFragment>;
+    JSXSpreadAttribute?: RuleFunction<TSESTree.JSXSpreadAttribute>;
+    JSXSpreadChild?: RuleFunction<TSESTree.JSXSpreadChild>;
+    JSXText?: RuleFunction<TSESTree.JSXText>;
+    LabeledStatement?: RuleFunction<TSESTree.LabeledStatement>;
+    Literal?: RuleFunction<TSESTree.Literal>;
+    LogicalExpression?: RuleFunction<TSESTree.LogicalExpression>;
+    MemberExpression?: RuleFunction<TSESTree.MemberExpression>;
+    MetaProperty?: RuleFunction<TSESTree.MetaProperty>;
+    MethodDefinition?: RuleFunction<TSESTree.MethodDefinition>;
+    NewExpression?: RuleFunction<TSESTree.NewExpression>;
+    ObjectExpression?: RuleFunction<TSESTree.ObjectExpression>;
+    ObjectPattern?: RuleFunction<TSESTree.ObjectPattern>;
+    Program?: RuleFunction<TSESTree.Program>;
+    Property?: RuleFunction<TSESTree.Property>;
+    RestElement?: RuleFunction<TSESTree.RestElement>;
+    ReturnStatement?: RuleFunction<TSESTree.ReturnStatement>;
+    SequenceExpression?: RuleFunction<TSESTree.SequenceExpression>;
+    SpreadElement?: RuleFunction<TSESTree.SpreadElement>;
+    Super?: RuleFunction<TSESTree.Super>;
+    SwitchCase?: RuleFunction<TSESTree.SwitchCase>;
+    SwitchStatement?: RuleFunction<TSESTree.SwitchStatement>;
+    TaggedTemplateExpression?: RuleFunction<TSESTree.TaggedTemplateExpression>;
+    TemplateElement?: RuleFunction<TSESTree.TemplateElement>;
+    TemplateLiteral?: RuleFunction<TSESTree.TemplateLiteral>;
+    ThisExpression?: RuleFunction<TSESTree.ThisExpression>;
+    ThrowStatement?: RuleFunction<TSESTree.ThrowStatement>;
+    Token?: RuleFunction<TSESTree.Token>;
+    TryStatement?: RuleFunction<TSESTree.TryStatement>;
+    TSAbstractClassProperty?: RuleFunction<TSESTree.TSAbstractClassProperty>;
+    TSAbstractKeyword?: RuleFunction<TSESTree.TSAbstractKeyword>;
+    TSAbstractMethodDefinition?: RuleFunction<TSESTree.TSAbstractMethodDefinition>;
+    TSAnyKeyword?: RuleFunction<TSESTree.TSAnyKeyword>;
+    TSArrayType?: RuleFunction<TSESTree.TSArrayType>;
+    TSAsExpression?: RuleFunction<TSESTree.TSAsExpression>;
+    TSAsyncKeyword?: RuleFunction<TSESTree.TSAsyncKeyword>;
+    TSBigIntKeyword?: RuleFunction<TSESTree.TSBigIntKeyword>;
+    TSBooleanKeyword?: RuleFunction<TSESTree.TSBooleanKeyword>;
+    TSCallSignatureDeclaration?: RuleFunction<TSESTree.TSCallSignatureDeclaration>;
+    TSClassImplements?: RuleFunction<TSESTree.TSClassImplements>;
+    TSConditionalType?: RuleFunction<TSESTree.TSConditionalType>;
+    TSConstructorType?: RuleFunction<TSESTree.TSConstructorType>;
+    TSConstructSignatureDeclaration?: RuleFunction<TSESTree.TSConstructSignatureDeclaration>;
+    TSDeclareKeyword?: RuleFunction<TSESTree.TSDeclareKeyword>;
+    TSDeclareFunction?: RuleFunction<TSESTree.TSDeclareFunction>;
+    TSEmptyBodyFunctionExpression?: RuleFunction<TSESTree.TSEmptyBodyFunctionExpression>;
+    TSEnumDeclaration?: RuleFunction<TSESTree.TSEnumDeclaration>;
+    TSEnumMember?: RuleFunction<TSESTree.TSEnumMember>;
+    TSExportAssignment?: RuleFunction<TSESTree.TSExportAssignment>;
+    TSExportKeyword?: RuleFunction<TSESTree.TSExportKeyword>;
+    TSExternalModuleReference?: RuleFunction<TSESTree.TSExternalModuleReference>;
+    TSFunctionType?: RuleFunction<TSESTree.TSFunctionType>;
+    TSImportEqualsDeclaration?: RuleFunction<TSESTree.TSImportEqualsDeclaration>;
+    TSImportType?: RuleFunction<TSESTree.TSImportType>;
+    TSIndexedAccessType?: RuleFunction<TSESTree.TSIndexedAccessType>;
+    TSIndexSignature?: RuleFunction<TSESTree.TSIndexSignature>;
+    TSInferType?: RuleFunction<TSESTree.TSInferType>;
+    TSInterfaceBody?: RuleFunction<TSESTree.TSInterfaceBody>;
+    TSInterfaceDeclaration?: RuleFunction<TSESTree.TSInterfaceDeclaration>;
+    TSInterfaceHeritage?: RuleFunction<TSESTree.TSInterfaceHeritage>;
+    TSIntersectionType?: RuleFunction<TSESTree.TSIntersectionType>;
+    TSLiteralType?: RuleFunction<TSESTree.TSLiteralType>;
+    TSMappedType?: RuleFunction<TSESTree.TSMappedType>;
+    TSMethodSignature?: RuleFunction<TSESTree.TSMethodSignature>;
+    TSModuleBlock?: RuleFunction<TSESTree.TSModuleBlock>;
+    TSModuleDeclaration?: RuleFunction<TSESTree.TSModuleDeclaration>;
+    TSNamespaceExportDeclaration?: RuleFunction<TSESTree.TSNamespaceExportDeclaration>;
+    TSNeverKeyword?: RuleFunction<TSESTree.TSNeverKeyword>;
+    TSNonNullExpression?: RuleFunction<TSESTree.TSNonNullExpression>;
+    TSNullKeyword?: RuleFunction<TSESTree.TSNullKeyword>;
+    TSNumberKeyword?: RuleFunction<TSESTree.TSNumberKeyword>;
+    TSObjectKeyword?: RuleFunction<TSESTree.TSObjectKeyword>;
+    TSOptionalType?: RuleFunction<TSESTree.TSOptionalType>;
+    TSParameterProperty?: RuleFunction<TSESTree.TSParameterProperty>;
+    TSParenthesizedType?: RuleFunction<TSESTree.TSParenthesizedType>;
+    TSPrivateKeyword?: RuleFunction<TSESTree.TSPrivateKeyword>;
+    TSPropertySignature?: RuleFunction<TSESTree.TSPropertySignature>;
+    TSProtectedKeyword?: RuleFunction<TSESTree.TSProtectedKeyword>;
+    TSPublicKeyword?: RuleFunction<TSESTree.TSPublicKeyword>;
+    TSQualifiedName?: RuleFunction<TSESTree.TSQualifiedName>;
+    TSReadonlyKeyword?: RuleFunction<TSESTree.TSReadonlyKeyword>;
+    TSRestType?: RuleFunction<TSESTree.TSRestType>;
+    TSStaticKeyword?: RuleFunction<TSESTree.TSStaticKeyword>;
+    TSStringKeyword?: RuleFunction<TSESTree.TSStringKeyword>;
+    TSSymbolKeyword?: RuleFunction<TSESTree.TSSymbolKeyword>;
+    TSThisType?: RuleFunction<TSESTree.TSThisType>;
+    TSTupleType?: RuleFunction<TSESTree.TSTupleType>;
+    TSTypeAliasDeclaration?: RuleFunction<TSESTree.TSTypeAliasDeclaration>;
+    TSTypeAnnotation?: RuleFunction<TSESTree.TSTypeAnnotation>;
+    TSTypeAssertion?: RuleFunction<TSESTree.TSTypeAssertion>;
+    TSTypeLiteral?: RuleFunction<TSESTree.TSTypeLiteral>;
+    TSTypeOperator?: RuleFunction<TSESTree.TSTypeOperator>;
+    TSTypeParameter?: RuleFunction<TSESTree.TSTypeParameter>;
+    TSTypeParameterDeclaration?: RuleFunction<TSESTree.TSTypeParameterDeclaration>;
+    TSTypeParameterInstantiation?: RuleFunction<TSESTree.TSTypeParameterInstantiation>;
+    TSTypePredicate?: RuleFunction<TSESTree.TSTypePredicate>;
+    TSTypeQuery?: RuleFunction<TSESTree.TSTypeQuery>;
+    TSTypeReference?: RuleFunction<TSESTree.TSTypeReference>;
+    TSUndefinedKeyword?: RuleFunction<TSESTree.TSUndefinedKeyword>;
+    TSUnionType?: RuleFunction<TSESTree.TSUnionType>;
+    TSUnknownKeyword?: RuleFunction<TSESTree.TSUnknownKeyword>;
+    TSVoidKeyword?: RuleFunction<TSESTree.TSVoidKeyword>;
+    UnaryExpression?: RuleFunction<TSESTree.UnaryExpression>;
+    UpdateExpression?: RuleFunction<TSESTree.UpdateExpression>;
+    VariableDeclaration?: RuleFunction<TSESTree.VariableDeclaration>;
+    VariableDeclarator?: RuleFunction<TSESTree.VariableDeclarator>;
+    WhileStatement?: RuleFunction<TSESTree.WhileStatement>;
+    WithStatement?: RuleFunction<TSESTree.WithStatement>;
+    YieldExpression?: RuleFunction<TSESTree.YieldExpression>;
+}
+interface RuleModule<TMessageIds extends string, TOptions extends readonly unknown[], TRuleListener extends RuleListener = RuleListener> {
+    /**
+     * Metadata about the rule
+     */
+    meta: RuleMetaData<TMessageIds>;
+    /**
+     * Function which returns an object with methods that ESLint calls to “visit”
+     * nodes while traversing the abstract syntax tree.
+     */
+    create(context: Readonly<RuleContext<TMessageIds, TOptions>>): TRuleListener;
+}
+declare type RuleCreateFunction<TMessageIds extends string = never, TOptions extends readonly unknown[] = unknown[], TRuleListener extends RuleListener = RuleListener> = (context: Readonly<RuleContext<TMessageIds, TOptions>>) => TRuleListener;
+export { ReportDescriptor, ReportFixFunction, ReportSuggestionArray, RuleContext, RuleCreateFunction, RuleFix, RuleFixer, RuleFunction, RuleListener, RuleMetaData, RuleMetaDataDocs, RuleModule, };
+//# sourceMappingURL=Rule.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/RuleTester.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/RuleTester.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9bec562f7b325c52696c431a60259f2c91a17a46
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/RuleTester.d.ts
@@ -0,0 +1,143 @@
+import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '../ts-estree';
+import { ParserOptions } from './ParserOptions';
+import { RuleCreateFunction, RuleModule } from './Rule';
+interface ValidTestCase<TOptions extends Readonly<unknown[]>> {
+    /**
+     * Code for the test case.
+     */
+    readonly code: string;
+    /**
+     * Environments for the test case.
+     */
+    readonly env?: Readonly<Record<string, boolean>>;
+    /**
+     * The fake filename for the test case. Useful for rules that make assertion about filenames.
+     */
+    readonly filename?: string;
+    /**
+     * The additional global variables.
+     */
+    readonly globals?: Record<string, 'readonly' | 'writable' | 'off' | true>;
+    /**
+     * Options for the test case.
+     */
+    readonly options?: Readonly<TOptions>;
+    /**
+     * The absolute path for the parser.
+     */
+    readonly parser?: string;
+    /**
+     * Options for the parser.
+     */
+    readonly parserOptions?: Readonly<ParserOptions>;
+    /**
+     * Settings for the test case.
+     */
+    readonly settings?: Readonly<Record<string, unknown>>;
+}
+interface SuggestionOutput<TMessageIds extends string> {
+    /**
+     * Reported message ID.
+     */
+    readonly messageId: TMessageIds;
+    /**
+     * The data used to fill the message template.
+     */
+    readonly data?: Readonly<Record<string, unknown>>;
+    /**
+     * NOTE: Suggestions will be applied as a stand-alone change, without triggering multi-pass fixes.
+     * Each individual error has its own suggestion, so you have to show the correct, _isolated_ output for each suggestion.
+     */
+    readonly output: string;
+}
+interface InvalidTestCase<TMessageIds extends string, TOptions extends Readonly<unknown[]>> extends ValidTestCase<TOptions> {
+    /**
+     * Expected errors.
+     */
+    readonly errors: readonly TestCaseError<TMessageIds>[];
+    /**
+     * The expected code after autofixes are applied. If set to `null`, the test runner will assert that no autofix is suggested.
+     */
+    readonly output?: string | null;
+}
+interface TestCaseError<TMessageIds extends string> {
+    /**
+     * The 1-based column number of the reported start location.
+     */
+    readonly column?: number;
+    /**
+     * The data used to fill the message template.
+     */
+    readonly data?: Readonly<Record<string, unknown>>;
+    /**
+     * The 1-based column number of the reported end location.
+     */
+    readonly endColumn?: number;
+    /**
+     * The 1-based line number of the reported end location.
+     */
+    readonly endLine?: number;
+    /**
+     * The 1-based line number of the reported start location.
+     */
+    readonly line?: number;
+    /**
+     * Reported message ID.
+     */
+    readonly messageId: TMessageIds;
+    /**
+     * Reported suggestions.
+     */
+    readonly suggestions?: SuggestionOutput<TMessageIds>[] | null;
+    /**
+     * The type of the reported AST node.
+     */
+    readonly type?: AST_NODE_TYPES | AST_TOKEN_TYPES;
+}
+interface RunTests<TMessageIds extends string, TOptions extends Readonly<unknown[]>> {
+    readonly valid: readonly (ValidTestCase<TOptions> | string)[];
+    readonly invalid: readonly InvalidTestCase<TMessageIds, TOptions>[];
+}
+interface RuleTesterConfig {
+    readonly parser: string;
+    readonly parserOptions?: Readonly<ParserOptions>;
+}
+declare class RuleTesterBase {
+    /**
+     * Creates a new instance of RuleTester.
+     * @param testerConfig extra configuration for the tester
+     */
+    constructor(testerConfig?: RuleTesterConfig);
+    /**
+     * Adds a new rule test to execute.
+     * @param ruleName The name of the rule to run.
+     * @param rule The rule to test.
+     * @param test The collection of tests to run.
+     */
+    run<TMessageIds extends string, TOptions extends Readonly<unknown[]>>(ruleName: string, rule: RuleModule<TMessageIds, TOptions>, tests: RunTests<TMessageIds, TOptions>): void;
+    /**
+     * If you supply a value to this property, the rule tester will call this instead of using the version defined on
+     * the global namespace.
+     * @param text a string describing the rule
+     * @param callback the test callback
+     */
+    static describe?: (text: string, callback: () => void) => void;
+    /**
+     * If you supply a value to this property, the rule tester will call this instead of using the version defined on
+     * the global namespace.
+     * @param text a string describing the test case
+     * @param callback the test callback
+     */
+    static it?: (text: string, callback: () => void) => void;
+    /**
+     * Define a rule for one particular run of tests.
+     * @param name The name of the rule to define.
+     * @param rule The rule definition.
+     */
+    defineRule<TMessageIds extends string, TOptions extends Readonly<unknown[]>>(name: string, rule: RuleModule<TMessageIds, TOptions> | RuleCreateFunction<TMessageIds, TOptions>): void;
+}
+declare const RuleTester_base: typeof RuleTesterBase;
+declare class RuleTester extends RuleTester_base {
+}
+export { InvalidTestCase, SuggestionOutput, RuleTester, RuleTesterConfig, RunTests, TestCaseError, ValidTestCase, };
+//# sourceMappingURL=RuleTester.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/Scope.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/Scope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e164aaa728457b60bc11ffba08912779a504fa89
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/Scope.d.ts
@@ -0,0 +1,44 @@
+import * as scopeManager from '@typescript-eslint/scope-manager';
+declare namespace Scope {
+    type ScopeManager = scopeManager.ScopeManager;
+    type Reference = scopeManager.Reference;
+    type Variable = scopeManager.Variable | scopeManager.ESLintScopeVariable;
+    type Scope = scopeManager.Scope;
+    const ScopeType: typeof scopeManager.ScopeType;
+    type DefinitionType = scopeManager.Definition;
+    type Definition = scopeManager.Definition;
+    const DefinitionType: typeof scopeManager.DefinitionType;
+    namespace Definitions {
+        type CatchClauseDefinition = scopeManager.CatchClauseDefinition;
+        type ClassNameDefinition = scopeManager.ClassNameDefinition;
+        type FunctionNameDefinition = scopeManager.FunctionNameDefinition;
+        type ImplicitGlobalVariableDefinition = scopeManager.ImplicitGlobalVariableDefinition;
+        type ImportBindingDefinition = scopeManager.ImportBindingDefinition;
+        type ParameterDefinition = scopeManager.ParameterDefinition;
+        type TSEnumMemberDefinition = scopeManager.TSEnumMemberDefinition;
+        type TSEnumNameDefinition = scopeManager.TSEnumNameDefinition;
+        type TSModuleNameDefinition = scopeManager.TSModuleNameDefinition;
+        type TypeDefinition = scopeManager.TypeDefinition;
+        type VariableDefinition = scopeManager.VariableDefinition;
+    }
+    namespace Scopes {
+        type BlockScope = scopeManager.BlockScope;
+        type CatchScope = scopeManager.CatchScope;
+        type ClassScope = scopeManager.ClassScope;
+        type ConditionalTypeScope = scopeManager.ConditionalTypeScope;
+        type ForScope = scopeManager.ForScope;
+        type FunctionExpressionNameScope = scopeManager.FunctionExpressionNameScope;
+        type FunctionScope = scopeManager.FunctionScope;
+        type FunctionTypeScope = scopeManager.FunctionTypeScope;
+        type GlobalScope = scopeManager.GlobalScope;
+        type MappedTypeScope = scopeManager.MappedTypeScope;
+        type ModuleScope = scopeManager.ModuleScope;
+        type SwitchScope = scopeManager.SwitchScope;
+        type TSEnumScope = scopeManager.TSEnumScope;
+        type TSModuleScope = scopeManager.TSModuleScope;
+        type TypeScope = scopeManager.TypeScope;
+        type WithScope = scopeManager.WithScope;
+    }
+}
+export { Scope };
+//# sourceMappingURL=Scope.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/SourceCode.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/SourceCode.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..23a4f339b17918702b6bc5c7e403fbd2b2417d0f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/SourceCode.d.ts
@@ -0,0 +1,350 @@
+import { ParserServices, TSESTree } from '../ts-estree';
+import { Scope } from './Scope';
+declare class TokenStore {
+    /**
+     * Checks whether any comments exist or not between the given 2 nodes.
+     * @param left The node to check.
+     * @param right The node to check.
+     * @returns `true` if one or more comments exist.
+     */
+    commentsExistBetween(left: TSESTree.Node | TSESTree.Token, right: TSESTree.Node | TSESTree.Token): boolean;
+    /**
+     * Gets all comment tokens directly after the given node or token.
+     * @param nodeOrToken The AST node or token to check for adjacent comment tokens.
+     * @returns An array of comments in occurrence order.
+     */
+    getCommentsAfter(nodeOrToken: TSESTree.Node | TSESTree.Token): TSESTree.Comment[];
+    /**
+     * Gets all comment tokens directly before the given node or token.
+     * @param nodeOrToken The AST node or token to check for adjacent comment tokens.
+     * @returns An array of comments in occurrence order.
+     */
+    getCommentsBefore(nodeOrToken: TSESTree.Node | TSESTree.Token): TSESTree.Comment[];
+    /**
+     * Gets all comment tokens inside the given node.
+     * @param node The AST node to get the comments for.
+     * @returns An array of comments in occurrence order.
+     */
+    getCommentsInside(node: TSESTree.Node): TSESTree.Comment[];
+    /**
+     * Gets the first token of the given node.
+     * @param node The AST node.
+     * @param option The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.
+     * @returns An object representing the token.
+     */
+    getFirstToken<T extends SourceCode.CursorWithSkipOptions>(node: TSESTree.Node, options?: T): SourceCode.ReturnTypeFromOptions<T> | null;
+    /**
+     * Gets the first token between two non-overlapping nodes.
+     * @param left Node before the desired token range.
+     * @param right Node after the desired token range.
+     * @param option The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.
+     * @returns An object representing the token.
+     */
+    getFirstTokenBetween<T extends SourceCode.CursorWithSkipOptions>(left: TSESTree.Node | TSESTree.Token | TSESTree.Comment, right: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T> | null;
+    /**
+     * Gets the first `count` tokens of the given node.
+     * @param node The AST node.
+     * @param options The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.
+     * @returns Tokens.
+     */
+    getFirstTokens<T extends SourceCode.CursorWithCountOptions>(node: TSESTree.Node, options?: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets the first `count` tokens between two non-overlapping nodes.
+     * @param left Node before the desired token range.
+     * @param right Node after the desired token range.
+     * @param options The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.
+     * @returns Tokens between left and right.
+     */
+    getFirstTokensBetween<T extends SourceCode.CursorWithCountOptions>(left: TSESTree.Node | TSESTree.Token | TSESTree.Comment, right: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets the last token of the given node.
+     * @param node The AST node.
+     * @param option The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.
+     * @returns An object representing the token.
+     */
+    getLastToken<T extends SourceCode.CursorWithSkipOptions>(node: TSESTree.Node, options?: T): SourceCode.ReturnTypeFromOptions<T> | null;
+    /**
+     * Gets the last token between two non-overlapping nodes.
+     * @param left Node before the desired token range.
+     * @param right Node after the desired token range.
+     * @param option The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.
+     * @returns An object representing the token.
+     */
+    getLastTokenBetween<T extends SourceCode.CursorWithSkipOptions>(left: TSESTree.Node | TSESTree.Token | TSESTree.Comment, right: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T> | null;
+    /**
+     * Gets the last `count` tokens of the given node.
+     * @param node The AST node.
+     * @param options The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.
+     * @returns Tokens.
+     */
+    getLastTokens<T extends SourceCode.CursorWithCountOptions>(node: TSESTree.Node, options?: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets the last `count` tokens between two non-overlapping nodes.
+     * @param left Node before the desired token range.
+     * @param right Node after the desired token range.
+     * @param options The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.
+     * @returns Tokens between left and right.
+     */
+    getLastTokensBetween<T extends SourceCode.CursorWithCountOptions>(left: TSESTree.Node | TSESTree.Token | TSESTree.Comment, right: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets the token that follows a given node or token.
+     * @param node The AST node or token.
+     * @param option The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.
+     * @returns An object representing the token.
+     */
+    getTokenAfter<T extends SourceCode.CursorWithSkipOptions>(node: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T> | null;
+    /**
+     * Gets the token that precedes a given node or token.
+     * @param node The AST node or token.
+     * @param options The option object
+     * @returns An object representing the token.
+     */
+    getTokenBefore<T extends SourceCode.CursorWithSkipOptions>(node: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T> | null;
+    /**
+     * Gets the token starting at the specified index.
+     * @param offset Index of the start of the token's range.
+     * @param option The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.
+     * @returns The token starting at index, or null if no such token.
+     */
+    getTokenByRangeStart<T extends {
+        includeComments?: boolean;
+    }>(offset: number, options?: T): SourceCode.ReturnTypeFromOptions<T> | null;
+    /**
+     * Gets all tokens that are related to the given node.
+     * @param node The AST node.
+     * @param beforeCount The number of tokens before the node to retrieve.
+     * @param afterCount The number of tokens after the node to retrieve.
+     * @returns Array of objects representing tokens.
+     */
+    getTokens(node: TSESTree.Node, beforeCount?: number, afterCount?: number): TSESTree.Token[];
+    /**
+     * Gets all tokens that are related to the given node.
+     * @param node The AST node.
+     * @param options The option object. If this is a function then it's `options.filter`.
+     * @returns Array of objects representing tokens.
+     */
+    getTokens<T extends SourceCode.CursorWithCountOptions>(node: TSESTree.Node, options: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets the `count` tokens that follows a given node or token.
+     * @param node The AST node.
+     * @param options The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.
+     * @returns Tokens.
+     */
+    getTokensAfter<T extends SourceCode.CursorWithCountOptions>(node: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets the `count` tokens that precedes a given node or token.
+     * @param node The AST node.
+     * @param options The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.
+     * @returns Tokens.
+     */
+    getTokensBefore<T extends SourceCode.CursorWithCountOptions>(node: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets all of the tokens between two non-overlapping nodes.
+     * @param left Node before the desired token range.
+     * @param right Node after the desired token range.
+     * @param options The option object. If this is a function then it's `options.filter`.
+     * @returns Tokens between left and right.
+     */
+    getTokensBetween<T extends SourceCode.CursorWithCountOptions>(left: TSESTree.Node | TSESTree.Token | TSESTree.Comment, right: TSESTree.Node | TSESTree.Token | TSESTree.Comment, padding?: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets all of the tokens between two non-overlapping nodes.
+     * @param left Node before the desired token range.
+     * @param right Node after the desired token range.
+     * @param padding Number of extra tokens on either side of center.
+     * @returns Tokens between left and right.
+     */
+    getTokensBetween<T extends SourceCode.CursorWithCountOptions>(left: TSESTree.Node | TSESTree.Token | TSESTree.Comment, right: TSESTree.Node | TSESTree.Token | TSESTree.Comment, padding?: number): SourceCode.ReturnTypeFromOptions<T>[];
+}
+declare class SourceCodeBase extends TokenStore {
+    /**
+     * Represents parsed source code.
+     * @param text The source code text.
+     * @param ast The Program node of the AST representing the code. This AST should be created from the text that BOM was stripped.
+     */
+    constructor(text: string, ast: SourceCode.Program);
+    /**
+     * Represents parsed source code.
+     * @param config The config object.
+     */
+    constructor(config: SourceCode.SourceCodeConfig);
+    /**
+     * The parsed AST for the source code.
+     */
+    ast: SourceCode.Program;
+    /**
+     * Retrieves an array containing all comments in the source code.
+     * @returns An array of comment nodes.
+     */
+    getAllComments(): TSESTree.Comment[];
+    /**
+     * Gets all comments for the given node.
+     * @param node The AST node to get the comments for.
+     * @returns An object containing a leading and trailing array of comments indexed by their position.
+     */
+    getComments(node: TSESTree.Node): {
+        leading: TSESTree.Comment[];
+        trailing: TSESTree.Comment[];
+    };
+    /**
+     * Converts a (line, column) pair into a range index.
+     * @param loc A line/column location
+     * @returns The range index of the location in the file.
+     */
+    getIndexFromLoc(location: TSESTree.LineAndColumnData): number;
+    /**
+     * Gets the entire source text split into an array of lines.
+     * @returns The source text as an array of lines.
+     */
+    getLines(): string[];
+    /**
+     * Converts a source text index into a (line, column) pair.
+     * @param index The index of a character in a file
+     * @returns A {line, column} location object with a 0-indexed column
+     */
+    getLocFromIndex(index: number): TSESTree.LineAndColumnData;
+    /**
+     * Gets the deepest node containing a range index.
+     * @param index Range index of the desired node.
+     * @returns The node if found or `null` if not found.
+     */
+    getNodeByRangeIndex(index: number): TSESTree.Node | null;
+    /**
+     * Gets the source code for the given node.
+     * @param node The AST node to get the text for.
+     * @param beforeCount The number of characters before the node to retrieve.
+     * @param afterCount The number of characters after the node to retrieve.
+     * @returns The text representing the AST node.
+     */
+    getText(node?: TSESTree.Node, beforeCount?: number, afterCount?: number): string;
+    /**
+     * The flag to indicate that the source code has Unicode BOM.
+     */
+    hasBOM: boolean;
+    /**
+     * Determines if two nodes or tokens have at least one whitespace character
+     * between them. Order does not matter. Returns false if the given nodes or
+     * tokens overlap.
+     * This was added in v6.7.0.
+     * @since 6.7.0
+     * @param first The first node or token to check between.
+     * @param second The second node or token to check between.
+     * @returns True if there is a whitespace character between any of the tokens found between the two given nodes or tokens.
+     */
+    isSpaceBetween?(first: TSESTree.Token | TSESTree.Comment | TSESTree.Node, second: TSESTree.Token | TSESTree.Comment | TSESTree.Node): boolean;
+    /**
+     * Determines if two nodes or tokens have at least one whitespace character
+     * between them. Order does not matter. Returns false if the given nodes or
+     * tokens overlap.
+     * For backward compatibility, this method returns true if there are
+     * `JSXText` tokens that contain whitespace between the two.
+     * @param first The first node or token to check between.
+     * @param second The second node or token to check between.
+     * @returns {boolean} True if there is a whitespace character between
+     * any of the tokens found between the two given nodes or tokens.
+     * @deprecated in favor of isSpaceBetween
+     */
+    isSpaceBetweenTokens(first: TSESTree.Token, second: TSESTree.Token): boolean;
+    /**
+     * The source code split into lines according to ECMA-262 specification.
+     * This is done to avoid each rule needing to do so separately.
+     */
+    lines: string[];
+    /**
+     * The indexes in `text` that each line starts
+     */
+    lineStartIndices: number[];
+    /**
+     * The parser services of this source code.
+     */
+    parserServices: ParserServices;
+    /**
+     * The scope of this source code.
+     */
+    scopeManager: Scope.ScopeManager | null;
+    /**
+     * The original text source code. BOM was stripped from this text.
+     */
+    text: string;
+    /**
+     * All of the tokens and comments in the AST.
+     */
+    tokensAndComments: (TSESTree.Comment | TSESTree.Token)[];
+    /**
+     * The visitor keys to traverse AST.
+     */
+    visitorKeys: SourceCode.VisitorKeys;
+    /**
+     * Split the source code into multiple lines based on the line delimiters.
+     * @param text Source code as a string.
+     * @returns Array of source code lines.
+     */
+    static splitLines(text: string): string[];
+}
+declare namespace SourceCode {
+    interface Program extends TSESTree.Program {
+        comments: TSESTree.Comment[];
+        tokens: TSESTree.Token[];
+    }
+    interface SourceCodeConfig {
+        /**
+         * The Program node of the AST representing the code. This AST should be created from the text that BOM was stripped.
+         */
+        ast: Program;
+        /**
+         * The parser services.
+         */
+        parserServices: ParserServices | null;
+        /**
+         * The scope of this source code.
+         */
+        scopeManager: Scope.ScopeManager | null;
+        /**
+         * The source code text.
+         */
+        text: string;
+        /**
+         * The visitor keys to traverse AST.
+         */
+        visitorKeys: VisitorKeys | null;
+    }
+    interface VisitorKeys {
+        [nodeType: string]: string[];
+    }
+    type FilterPredicate = (tokenOrComment: TSESTree.Token | TSESTree.Comment) => boolean;
+    type ReturnTypeFromOptions<T> = T extends {
+        includeComments: true;
+    } ? TSESTree.Token : Exclude<TSESTree.Token, TSESTree.Comment>;
+    type CursorWithSkipOptions = number | FilterPredicate | {
+        /**
+         * The predicate function to choose tokens.
+         */
+        filter?: FilterPredicate;
+        /**
+         * The flag to iterate comments as well.
+         */
+        includeComments?: boolean;
+        /**
+         * The count of tokens the cursor skips.
+         */
+        skip?: number;
+    };
+    type CursorWithCountOptions = number | FilterPredicate | {
+        /**
+         * The predicate function to choose tokens.
+         */
+        filter?: FilterPredicate;
+        /**
+         * The flag to iterate comments as well.
+         */
+        includeComments?: boolean;
+        /**
+         * The maximum count of tokens the cursor iterates.
+         */
+        count?: number;
+    };
+}
+declare const SourceCode_base: typeof SourceCodeBase;
+declare class SourceCode extends SourceCode_base {
+}
+export { SourceCode };
+//# sourceMappingURL=SourceCode.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/index.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..20f1eadc3defd87ef723e31a8f1bda93fd692fe7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-eslint/index.d.ts
@@ -0,0 +1,10 @@
+export * from './AST';
+export * from './CLIEngine';
+export * from './ESLint';
+export * from './Linter';
+export * from './ParserOptions';
+export * from './Rule';
+export * from './RuleTester';
+export * from './Scope';
+export * from './SourceCode';
+//# sourceMappingURL=index.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-estree.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-estree.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..00a221b06c4aa21c062e64aacf28f9d393b824b0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/_ts3.4/dist/ts-estree.d.ts
@@ -0,0 +1,3 @@
+export { AST_NODE_TYPES, AST_TOKEN_TYPES, TSESTree, } from '@typescript-eslint/types';
+export { ParserServices } from '@typescript-eslint/typescript-estree/dist/parser-options';
+//# sourceMappingURL=ts-estree.d.ts.map
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/PatternMatcher.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/PatternMatcher.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..436baca2715d587b7331a7bcc4d752c9a8401fcb
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/PatternMatcher.d.ts
@@ -0,0 +1,48 @@
+interface PatternMatcher {
+    /**
+     * Iterate all matched parts in a given string.
+     *
+     * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#matcher-execall}
+     */
+    execAll(str: string): IterableIterator<RegExpExecArray>;
+    /**
+     * Check whether this pattern matches a given string or not.
+     *
+     * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#matcher-test}
+     */
+    test(str: string): boolean;
+    /**
+     * Replace all matched parts by a given replacer.
+     *
+     * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#matcher-symbol-replace}
+     * @example
+     * const { PatternMatcher } = require("eslint-utils")
+     * const matcher = new PatternMatcher(/\\p{Script=Greek}/g)
+     *
+     * module.exports = {
+     *     meta: {},
+     *     create(context) {
+     *         return {
+     *             "Literal[regex]"(node) {
+     *                 const replacedPattern = node.regex.pattern.replace(
+     *                     matcher,
+     *                     "[\\u0370-\\u0373\\u0375-\\u0377\\u037A-\\u037D\\u037F\\u0384\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03E1\\u03F0-\\u03FF\\u1D26-\\u1D2A\\u1D5D-\\u1D61\\u1D66-\\u1D6A\\u1DBF\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FC4\\u1FC6-\\u1FD3\\u1FD6-\\u1FDB\\u1FDD-\\u1FEF\\u1FF2-\\u1FF4\\u1FF6-\\u1FFE\\u2126\\uAB65]|\\uD800[\\uDD40-\\uDD8E\\uDDA0]|\\uD834[\\uDE00-\\uDE45]"
+     *                 )
+     *             },
+     *         }
+     *     },
+     * }
+     */
+    [Symbol.replace](str: string, replacer: string | ((...strs: string[]) => string)): string;
+}
+/**
+ * The class to find a pattern in strings as handling escape sequences.
+ * It ignores the found pattern if it's escaped with `\`.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#patternmatcher-class}
+ */
+declare const PatternMatcher: new (pattern: RegExp, options?: {
+    escaped?: boolean | undefined;
+} | undefined) => PatternMatcher;
+export { PatternMatcher };
+//# sourceMappingURL=PatternMatcher.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/PatternMatcher.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/PatternMatcher.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..29c100aa29086bba7e09947706d0a61f35749eb1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/PatternMatcher.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"PatternMatcher.d.ts","sourceRoot":"","sources":["../../../src/ast-utils/eslint-utils/PatternMatcher.ts"],"names":[],"mappings":"AAEA,UAAU,cAAc;IACtB;;;;OAIG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAExD;;;;OAIG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAE3B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC,CACd,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,GACjD,MAAM,CAAC;CACX;AAED;;;;;GAKG;AACH,QAAA,MAAM,cAAc,gBACJ,MAAM;;kBAAoC,cACzD,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/PatternMatcher.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/PatternMatcher.js
new file mode 100644
index 0000000000000000000000000000000000000000..0f2983d6d55f221f9d916bd7bd2ad6d1ae431caf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/PatternMatcher.js
@@ -0,0 +1,32 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.PatternMatcher = void 0;
+const eslintUtils = __importStar(require("eslint-utils"));
+/**
+ * The class to find a pattern in strings as handling escape sequences.
+ * It ignores the found pattern if it's escaped with `\`.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#patternmatcher-class}
+ */
+const PatternMatcher = eslintUtils.PatternMatcher;
+exports.PatternMatcher = PatternMatcher;
+//# sourceMappingURL=PatternMatcher.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/PatternMatcher.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/PatternMatcher.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..886c2d0c861858af6487fd062ecfdac0bd3c8024
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/PatternMatcher.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"PatternMatcher.js","sourceRoot":"","sources":["../../../src/ast-utils/eslint-utils/PatternMatcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA4C;AA6C5C;;;;;GAKG;AACH,MAAM,cAAc,GAAG,WAAW,CAAC,cAElC,CAAC;AAEO,wCAAc"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/ReferenceTracker.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/ReferenceTracker.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2a5135775348c452866ee64954ea33f214d9ddbc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/ReferenceTracker.d.ts
@@ -0,0 +1,72 @@
+import { TSESTree } from '../../ts-estree';
+import * as TSESLint from '../../ts-eslint';
+declare const ReferenceTrackerREAD: unique symbol;
+declare const ReferenceTrackerCALL: unique symbol;
+declare const ReferenceTrackerCONSTRUCT: unique symbol;
+interface ReferenceTracker {
+    /**
+     * Iterate the references that the given `traceMap` determined.
+     * This method starts to search from global variables.
+     *
+     * @see {@link https://eslint-utils.mysticatea.dev/api/scope-utils.html#tracker-iterateglobalreferences}
+     */
+    iterateGlobalReferences<T>(traceMap: ReferenceTracker.TraceMap<T>): IterableIterator<ReferenceTracker.FoundReference<T>>;
+    /**
+     * Iterate the references that the given `traceMap` determined.
+     * This method starts to search from `require()` expression.
+     *
+     * @see {@link https://eslint-utils.mysticatea.dev/api/scope-utils.html#tracker-iteratecjsreferences}
+     */
+    iterateCjsReferences<T>(traceMap: ReferenceTracker.TraceMap<T>): IterableIterator<ReferenceTracker.FoundReference<T>>;
+    /**
+     * Iterate the references that the given `traceMap` determined.
+     * This method starts to search from `import`/`export` declarations.
+     *
+     * @see {@link https://eslint-utils.mysticatea.dev/api/scope-utils.html#tracker-iterateesmreferences}
+     */
+    iterateEsmReferences<T>(traceMap: ReferenceTracker.TraceMap<T>): IterableIterator<ReferenceTracker.FoundReference<T>>;
+}
+interface ReferenceTrackerStatic {
+    new (globalScope: TSESLint.Scope.Scope, options?: {
+        /**
+         * The mode which determines how the `tracker.iterateEsmReferences()` method scans CommonJS modules.
+         * If this is `"strict"`, the method binds CommonJS modules to the default export. Otherwise, the method binds
+         * CommonJS modules to both the default export and named exports. Optional. Default is `"strict"`.
+         */
+        mode: 'strict' | 'legacy';
+        /**
+         * The name list of Global Object. Optional. Default is `["global", "globalThis", "self", "window"]`.
+         */
+        globalObjectNames: readonly string[];
+    }): ReferenceTracker;
+    readonly READ: typeof ReferenceTrackerREAD;
+    readonly CALL: typeof ReferenceTrackerCALL;
+    readonly CONSTRUCT: typeof ReferenceTrackerCONSTRUCT;
+}
+declare namespace ReferenceTracker {
+    type READ = ReferenceTrackerStatic['READ'];
+    type CALL = ReferenceTrackerStatic['CALL'];
+    type CONSTRUCT = ReferenceTrackerStatic['CONSTRUCT'];
+    type ReferenceType = READ | CALL | CONSTRUCT;
+    type TraceMap<T = any> = Record<string, TraceMapElement<T>>;
+    interface TraceMapElement<T> {
+        [ReferenceTrackerREAD]?: T;
+        [ReferenceTrackerCALL]?: T;
+        [ReferenceTrackerCONSTRUCT]?: T;
+        [key: string]: TraceMapElement<T>;
+    }
+    interface FoundReference<T = any> {
+        node: TSESTree.Node;
+        path: readonly string[];
+        type: ReferenceType;
+        entry: T;
+    }
+}
+/**
+ * The tracker for references. This provides reference tracking for global variables, CommonJS modules, and ES modules.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/scope-utils.html#referencetracker-class}
+ */
+declare const ReferenceTracker: ReferenceTrackerStatic;
+export { ReferenceTracker };
+//# sourceMappingURL=ReferenceTracker.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/ReferenceTracker.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/ReferenceTracker.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..84fa9dd5ee9c8e11809ed12be90ab1b43e3f26be
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/ReferenceTracker.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ReferenceTracker.d.ts","sourceRoot":"","sources":["../../../src/ast-utils/eslint-utils/ReferenceTracker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAE5C,QAAA,MAAM,oBAAoB,EAAE,OAAO,MAA0C,CAAC;AAC9E,QAAA,MAAM,oBAAoB,EAAE,OAAO,MAA0C,CAAC;AAC9E,QAAA,MAAM,yBAAyB,EAAE,OAAO,MACA,CAAC;AAEzC,UAAU,gBAAgB;IACxB;;;;;OAKG;IACH,uBAAuB,CAAC,CAAC,EACvB,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,GACrC,gBAAgB,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAExD;;;;;OAKG;IACH,oBAAoB,CAAC,CAAC,EACpB,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,GACrC,gBAAgB,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAExD;;;;;OAKG;IACH,oBAAoB,CAAC,CAAC,EACpB,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,GACrC,gBAAgB,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;CACzD;AACD,UAAU,sBAAsB;IAC9B,KACE,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EACjC,OAAO,CAAC,EAAE;QACR;;;;WAIG;QACH,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAC1B;;WAEG;QACH,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;KACtC,GACA,gBAAgB,CAAC;IAEpB,QAAQ,CAAC,IAAI,EAAE,OAAO,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,OAAO,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,OAAO,yBAAyB,CAAC;CACtD;AAED,kBAAU,gBAAgB,CAAC;IACzB,KAAY,IAAI,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAClD,KAAY,IAAI,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAClD,KAAY,SAAS,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC5D,KAAY,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;IAEpD,KAAY,QAAQ,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,UAAiB,eAAe,CAAC,CAAC;QAChC,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;KACnC;IAED,UAAiB,cAAc,CAAC,CAAC,GAAG,GAAG;QACrC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;QACpB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;QACxB,IAAI,EAAE,aAAa,CAAC;QACpB,KAAK,EAAE,CAAC,CAAC;KACV;CACF;AAED;;;;GAIG;AACH,QAAA,MAAM,gBAAgB,wBAAyD,CAAC;AAEhF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/ReferenceTracker.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/ReferenceTracker.js
new file mode 100644
index 0000000000000000000000000000000000000000..89f1f7d2e19d7cc0ee2a8abb773b6088e0d31b69
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/ReferenceTracker.js
@@ -0,0 +1,35 @@
+"use strict";
+/* eslint-disable @typescript-eslint/no-namespace */
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ReferenceTracker = void 0;
+const eslintUtils = __importStar(require("eslint-utils"));
+const ReferenceTrackerREAD = eslintUtils.ReferenceTracker.READ;
+const ReferenceTrackerCALL = eslintUtils.ReferenceTracker.CALL;
+const ReferenceTrackerCONSTRUCT = eslintUtils.ReferenceTracker.CONSTRUCT;
+/**
+ * The tracker for references. This provides reference tracking for global variables, CommonJS modules, and ES modules.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/scope-utils.html#referencetracker-class}
+ */
+const ReferenceTracker = eslintUtils.ReferenceTracker;
+exports.ReferenceTracker = ReferenceTracker;
+//# sourceMappingURL=ReferenceTracker.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/ReferenceTracker.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/ReferenceTracker.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..52d6efde17715033ba0415d9b8ff903fd49ff45f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/ReferenceTracker.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ReferenceTracker.js","sourceRoot":"","sources":["../../../src/ast-utils/eslint-utils/ReferenceTracker.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;;;;;;;;;;;;;;;;;;;;AAEpD,0DAA4C;AAI5C,MAAM,oBAAoB,GAAkB,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC9E,MAAM,oBAAoB,GAAkB,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC9E,MAAM,yBAAyB,GAC7B,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC;AA6EzC;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,WAAW,CAAC,gBAA0C,CAAC;AAEvE,4CAAgB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/astUtilities.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/astUtilities.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fec065f433019e1b07d8fe2ed3ceec1a5b2d82fa
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/astUtilities.d.ts
@@ -0,0 +1,82 @@
+import { TSESTree } from '../../ts-estree';
+import * as TSESLint from '../../ts-eslint';
+/**
+ * Get the proper location of a given function node to report.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#getfunctionheadlocation}
+ */
+declare const getFunctionHeadLocation: (node: TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression, sourceCode: TSESLint.SourceCode) => TSESTree.SourceLocation;
+/**
+ * Get the name and kind of a given function node.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#getfunctionnamewithkind}
+ */
+declare const getFunctionNameWithKind: (node: TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression) => string;
+/**
+ * Get the property name of a given property node.
+ * If the node is a computed property, this tries to compute the property name by the getStringIfConstant function.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#getpropertyname}
+ * @returns The property name of the node. If the property name is not constant then it returns `null`.
+ */
+declare const getPropertyName: (node: TSESTree.MemberExpression | TSESTree.Property | TSESTree.MethodDefinition, initialScope?: import("@typescript-eslint/scope-manager/dist/scope/BlockScope").BlockScope | import("@typescript-eslint/scope-manager/dist/scope/CatchScope").CatchScope | import("@typescript-eslint/scope-manager/dist/scope/ClassScope").ClassScope | import("@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope").ConditionalTypeScope | import("@typescript-eslint/scope-manager/dist/scope/ForScope").ForScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope").FunctionExpressionNameScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionScope").FunctionScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope").FunctionTypeScope | import("@typescript-eslint/scope-manager/dist/scope/GlobalScope").GlobalScope | import("@typescript-eslint/scope-manager/dist/scope/MappedTypeScope").MappedTypeScope | import("@typescript-eslint/scope-manager/dist/scope/ModuleScope").ModuleScope | import("@typescript-eslint/scope-manager/dist/scope/SwitchScope").SwitchScope | import("@typescript-eslint/scope-manager/dist/scope/TSEnumScope").TSEnumScope | import("@typescript-eslint/scope-manager/dist/scope/TSModuleScope").TSModuleScope | import("@typescript-eslint/scope-manager/dist/scope/TypeScope").TypeScope | import("@typescript-eslint/scope-manager/dist/scope/WithScope").WithScope | undefined) => string | null;
+/**
+ * Get the value of a given node if it can decide the value statically.
+ * If the 2nd parameter `initialScope` was given, this function tries to resolve identifier references which are in the
+ * given node as much as possible. In the resolving way, it does on the assumption that built-in global objects have
+ * not been modified.
+ * For example, it considers `Symbol.iterator`, ` String.raw``hello`` `, and `Object.freeze({a: 1}).a` as static.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#getstaticvalue}
+ * @returns The `{ value: any }` shaped object. The `value` property is the static value. If it couldn't compute the
+ * static value of the node, it returns `null`.
+ */
+declare const getStaticValue: (node: TSESTree.Node, initialScope?: import("@typescript-eslint/scope-manager/dist/scope/BlockScope").BlockScope | import("@typescript-eslint/scope-manager/dist/scope/CatchScope").CatchScope | import("@typescript-eslint/scope-manager/dist/scope/ClassScope").ClassScope | import("@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope").ConditionalTypeScope | import("@typescript-eslint/scope-manager/dist/scope/ForScope").ForScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope").FunctionExpressionNameScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionScope").FunctionScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope").FunctionTypeScope | import("@typescript-eslint/scope-manager/dist/scope/GlobalScope").GlobalScope | import("@typescript-eslint/scope-manager/dist/scope/MappedTypeScope").MappedTypeScope | import("@typescript-eslint/scope-manager/dist/scope/ModuleScope").ModuleScope | import("@typescript-eslint/scope-manager/dist/scope/SwitchScope").SwitchScope | import("@typescript-eslint/scope-manager/dist/scope/TSEnumScope").TSEnumScope | import("@typescript-eslint/scope-manager/dist/scope/TSModuleScope").TSModuleScope | import("@typescript-eslint/scope-manager/dist/scope/TypeScope").TypeScope | import("@typescript-eslint/scope-manager/dist/scope/WithScope").WithScope | undefined) => {
+    value: unknown;
+} | null;
+/**
+ * Get the string value of a given node.
+ * This function is a tiny wrapper of the getStaticValue function.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#getstringifconstant}
+ */
+declare const getStringIfConstant: (node: TSESTree.Node, initialScope?: import("@typescript-eslint/scope-manager/dist/scope/BlockScope").BlockScope | import("@typescript-eslint/scope-manager/dist/scope/CatchScope").CatchScope | import("@typescript-eslint/scope-manager/dist/scope/ClassScope").ClassScope | import("@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope").ConditionalTypeScope | import("@typescript-eslint/scope-manager/dist/scope/ForScope").ForScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope").FunctionExpressionNameScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionScope").FunctionScope | import("@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope").FunctionTypeScope | import("@typescript-eslint/scope-manager/dist/scope/GlobalScope").GlobalScope | import("@typescript-eslint/scope-manager/dist/scope/MappedTypeScope").MappedTypeScope | import("@typescript-eslint/scope-manager/dist/scope/ModuleScope").ModuleScope | import("@typescript-eslint/scope-manager/dist/scope/SwitchScope").SwitchScope | import("@typescript-eslint/scope-manager/dist/scope/TSEnumScope").TSEnumScope | import("@typescript-eslint/scope-manager/dist/scope/TSModuleScope").TSModuleScope | import("@typescript-eslint/scope-manager/dist/scope/TypeScope").TypeScope | import("@typescript-eslint/scope-manager/dist/scope/WithScope").WithScope | undefined) => string | null;
+/**
+ * Check whether a given node has any side effect or not.
+ * The side effect means that it may modify a certain variable or object member. This function considers the node which
+ * contains the following types as the node which has side effects:
+ * - `AssignmentExpression`
+ * - `AwaitExpression`
+ * - `CallExpression`
+ * - `ImportExpression`
+ * - `NewExpression`
+ * - `UnaryExpression([operator = "delete"])`
+ * - `UpdateExpression`
+ * - `YieldExpression`
+ * - When `options.considerGetters` is `true`:
+ *   - `MemberExpression`
+ * - When `options.considerImplicitTypeConversion` is `true`:
+ *   - `BinaryExpression([operator = "==" | "!=" | "<" | "<=" | ">" | ">=" | "<<" | ">>" | ">>>" | "+" | "-" | "*" | "/" | "%" | "|" | "^" | "&" | "in"])`
+ *   - `MemberExpression([computed = true])`
+ *   - `MethodDefinition([computed = true])`
+ *   - `Property([computed = true])`
+ *   - `UnaryExpression([operator = "-" | "+" | "!" | "~"])`
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#hassideeffect}
+ */
+declare const hasSideEffect: (node: TSESTree.Node, sourceCode: TSESLint.SourceCode, options?: {
+    considerGetters?: boolean | undefined;
+    considerImplicitTypeConversion?: boolean | undefined;
+} | undefined) => boolean;
+/**
+ * Check whether a given node is parenthesized or not.
+ * This function detects it correctly even if it's parenthesized by specific syntax.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#isparenthesized}
+ * @returns `true` if the node is parenthesized.
+ * If `times` was given, it returns `true` only if the node is parenthesized the `times` times.
+ * For example, `isParenthesized(2, node, sourceCode)` returns true for `((foo))`, but not for `(foo)`.
+ */
+declare const isParenthesized: (node: TSESTree.Node, sourceCode: TSESLint.SourceCode) => boolean;
+export { getFunctionHeadLocation, getFunctionNameWithKind, getPropertyName, getStaticValue, getStringIfConstant, hasSideEffect, isParenthesized, };
+//# sourceMappingURL=astUtilities.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/astUtilities.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/astUtilities.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..18cbf2dcfed21001534d5da8f2947fd37f1bca86
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/astUtilities.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"astUtilities.d.ts","sourceRoot":"","sources":["../../../src/ast-utils/eslint-utils/astUtilities.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAE5C;;;;GAIG;AACH,QAAA,MAAM,uBAAuB,SAEvB,SAAS,mBAAmB,GAC5B,SAAS,kBAAkB,GAC3B,SAAS,uBAAuB,cACxB,SAAS,UAAU,KAC5B,SAAS,cAAc,CAAC;AAE7B;;;;GAIG;AACH,QAAA,MAAM,uBAAuB,SAEvB,SAAS,mBAAmB,GAC5B,SAAS,kBAAkB,GAC3B,SAAS,uBAAuB,KACjC,MAAM,CAAC;AAEZ;;;;;;GAMG;AACH,QAAA,MAAM,eAAe,SAEf,SAAS,gBAAgB,GACzB,SAAS,QAAQ,GACjB,SAAS,gBAAgB,y1CAE1B,MAAM,GAAG,IAAI,CAAC;AAEnB;;;;;;;;;;GAUG;AACH,QAAA,MAAM,cAAc,SACZ,SAAS,IAAI,y1CAEhB;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAC;AAE/B;;;;;GAKG;AACH,QAAA,MAAM,mBAAmB,SACjB,SAAS,IAAI,y1CAEhB,MAAM,GAAG,IAAI,CAAC;AAEnB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,QAAA,MAAM,aAAa,SACX,SAAS,IAAI,cACP,SAAS,UAAU;;;kBAK5B,OAAO,CAAC;AAEb;;;;;;;;GAQG;AACH,QAAA,MAAM,eAAe,SACb,SAAS,IAAI,cACP,SAAS,UAAU,KAC5B,OAAO,CAAC;AAEb,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,eAAe,GAChB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/astUtilities.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/astUtilities.js
new file mode 100644
index 0000000000000000000000000000000000000000..a7f6458c889bc1f6e9d5fab7c82ce5636c9262d2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/astUtilities.js
@@ -0,0 +1,104 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isParenthesized = exports.hasSideEffect = exports.getStringIfConstant = exports.getStaticValue = exports.getPropertyName = exports.getFunctionNameWithKind = exports.getFunctionHeadLocation = void 0;
+const eslintUtils = __importStar(require("eslint-utils"));
+/**
+ * Get the proper location of a given function node to report.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#getfunctionheadlocation}
+ */
+const getFunctionHeadLocation = eslintUtils.getFunctionHeadLocation;
+exports.getFunctionHeadLocation = getFunctionHeadLocation;
+/**
+ * Get the name and kind of a given function node.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#getfunctionnamewithkind}
+ */
+const getFunctionNameWithKind = eslintUtils.getFunctionNameWithKind;
+exports.getFunctionNameWithKind = getFunctionNameWithKind;
+/**
+ * Get the property name of a given property node.
+ * If the node is a computed property, this tries to compute the property name by the getStringIfConstant function.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#getpropertyname}
+ * @returns The property name of the node. If the property name is not constant then it returns `null`.
+ */
+const getPropertyName = eslintUtils.getPropertyName;
+exports.getPropertyName = getPropertyName;
+/**
+ * Get the value of a given node if it can decide the value statically.
+ * If the 2nd parameter `initialScope` was given, this function tries to resolve identifier references which are in the
+ * given node as much as possible. In the resolving way, it does on the assumption that built-in global objects have
+ * not been modified.
+ * For example, it considers `Symbol.iterator`, ` String.raw``hello`` `, and `Object.freeze({a: 1}).a` as static.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#getstaticvalue}
+ * @returns The `{ value: any }` shaped object. The `value` property is the static value. If it couldn't compute the
+ * static value of the node, it returns `null`.
+ */
+const getStaticValue = eslintUtils.getStaticValue;
+exports.getStaticValue = getStaticValue;
+/**
+ * Get the string value of a given node.
+ * This function is a tiny wrapper of the getStaticValue function.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#getstringifconstant}
+ */
+const getStringIfConstant = eslintUtils.getStringIfConstant;
+exports.getStringIfConstant = getStringIfConstant;
+/**
+ * Check whether a given node has any side effect or not.
+ * The side effect means that it may modify a certain variable or object member. This function considers the node which
+ * contains the following types as the node which has side effects:
+ * - `AssignmentExpression`
+ * - `AwaitExpression`
+ * - `CallExpression`
+ * - `ImportExpression`
+ * - `NewExpression`
+ * - `UnaryExpression([operator = "delete"])`
+ * - `UpdateExpression`
+ * - `YieldExpression`
+ * - When `options.considerGetters` is `true`:
+ *   - `MemberExpression`
+ * - When `options.considerImplicitTypeConversion` is `true`:
+ *   - `BinaryExpression([operator = "==" | "!=" | "<" | "<=" | ">" | ">=" | "<<" | ">>" | ">>>" | "+" | "-" | "*" | "/" | "%" | "|" | "^" | "&" | "in"])`
+ *   - `MemberExpression([computed = true])`
+ *   - `MethodDefinition([computed = true])`
+ *   - `Property([computed = true])`
+ *   - `UnaryExpression([operator = "-" | "+" | "!" | "~"])`
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#hassideeffect}
+ */
+const hasSideEffect = eslintUtils.hasSideEffect;
+exports.hasSideEffect = hasSideEffect;
+/**
+ * Check whether a given node is parenthesized or not.
+ * This function detects it correctly even if it's parenthesized by specific syntax.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/ast-utils.html#isparenthesized}
+ * @returns `true` if the node is parenthesized.
+ * If `times` was given, it returns `true` only if the node is parenthesized the `times` times.
+ * For example, `isParenthesized(2, node, sourceCode)` returns true for `((foo))`, but not for `(foo)`.
+ */
+const isParenthesized = eslintUtils.isParenthesized;
+exports.isParenthesized = isParenthesized;
+//# sourceMappingURL=astUtilities.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/astUtilities.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/astUtilities.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..5227cc01829104001bfc5a9be50dd682cbecde97
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/astUtilities.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"astUtilities.js","sourceRoot":"","sources":["../../../src/ast-utils/eslint-utils/astUtilities.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA4C;AAI5C;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,WAAW,CAAC,uBAMhB,CAAC;AAuG3B,0DAAuB;AArGzB;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,WAAW,CAAC,uBAKjC,CAAC;AA4FV,0DAAuB;AA1FzB;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,WAAW,CAAC,eAMlB,CAAC;AA8EjB,0CAAe;AA5EjB;;;;;;;;;;GAUG;AACH,MAAM,cAAc,GAAG,WAAW,CAAC,cAGL,CAAC;AA+D7B,wCAAc;AA7DhB;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,WAAW,CAAC,mBAGtB,CAAC;AAqDjB,kDAAmB;AAnDrB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,aAAa,GAAG,WAAW,CAAC,aAOtB,CAAC;AAsBX,sCAAa;AApBf;;;;;;;;GAQG;AACH,MAAM,eAAe,GAAG,WAAW,CAAC,eAGxB,CAAC;AASX,0CAAe"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/index.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3ec74aa223c5a4475f18dbc5c806305f6393fcc7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/index.d.ts
@@ -0,0 +1,6 @@
+export * from './astUtilities';
+export * from './PatternMatcher';
+export * from './predicates';
+export * from './ReferenceTracker';
+export * from './scopeAnalysis';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/index.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e6a66720681eb1bf909f995f603034c20ec4ca88
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ast-utils/eslint-utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/index.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..67dc7ce3588908b910dfe998cf9eaa8bad42ed87
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/index.js
@@ -0,0 +1,18 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("./astUtilities"), exports);
+__exportStar(require("./PatternMatcher"), exports);
+__exportStar(require("./predicates"), exports);
+__exportStar(require("./ReferenceTracker"), exports);
+__exportStar(require("./scopeAnalysis"), exports);
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/index.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..f2e4e02d6cfc7e95d11d3588dc72e6de229dfb9a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ast-utils/eslint-utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAA+B;AAC/B,mDAAiC;AACjC,+CAA6B;AAC7B,qDAAmC;AACnC,kDAAgC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/predicates.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/predicates.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..867d24b696eadd3748d6f8a11e1d54f49fd6f220
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/predicates.d.ts
@@ -0,0 +1,45 @@
+import { TSESTree } from '../../ts-estree';
+declare const isArrowToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: '=>';
+};
+declare const isNotArrowToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isClosingBraceToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: '}';
+};
+declare const isNotClosingBraceToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isClosingBracketToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: ']';
+};
+declare const isNotClosingBracketToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isClosingParenToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: ')';
+};
+declare const isNotClosingParenToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isColonToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: ':';
+};
+declare const isNotColonToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isCommaToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: ',';
+};
+declare const isNotCommaToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isCommentToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.Comment;
+declare const isNotCommentToken: <T extends TSESTree.Token>(token: T) => token is Exclude<T, TSESTree.Comment>;
+declare const isOpeningBraceToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: '{';
+};
+declare const isNotOpeningBraceToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isOpeningBracketToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: '[';
+};
+declare const isNotOpeningBracketToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isOpeningParenToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: '(';
+};
+declare const isNotOpeningParenToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+declare const isSemicolonToken: (token: TSESTree.Token | TSESTree.Comment) => token is TSESTree.PunctuatorToken & {
+    value: ';';
+};
+declare const isNotSemicolonToken: (token: TSESTree.Token | TSESTree.Comment) => boolean;
+export { isArrowToken, isClosingBraceToken, isClosingBracketToken, isClosingParenToken, isColonToken, isCommaToken, isCommentToken, isNotArrowToken, isNotClosingBraceToken, isNotClosingBracketToken, isNotClosingParenToken, isNotColonToken, isNotCommaToken, isNotCommentToken, isNotOpeningBraceToken, isNotOpeningBracketToken, isNotOpeningParenToken, isNotSemicolonToken, isOpeningBraceToken, isOpeningBracketToken, isOpeningParenToken, isSemicolonToken, };
+//# sourceMappingURL=predicates.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/predicates.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/predicates.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e8079514cd782c8d2c349d9e660c3dbce564c584
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/predicates.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"predicates.d.ts","sourceRoot":"","sources":["../../../src/ast-utils/eslint-utils/predicates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,QAAA,MAAM,YAAY,UACT,SAAS,KAAK,GAAG,SAAS,OAAO;WACQ,IAAI;CAAE,CAAC;AACzD,QAAA,MAAM,eAAe,UACZ,SAAS,KAAK,GAAG,SAAS,OAAO,KACrC,OAAO,CAAC;AAEb,QAAA,MAAM,mBAAmB,UAChB,SAAS,KAAK,GAAG,SAAS,OAAO;WACQ,GAAG;CAAE,CAAC;AACxD,QAAA,MAAM,sBAAsB,UACnB,SAAS,KAAK,GAAG,SAAS,OAAO,KACrC,OAAO,CAAC;AAEb,QAAA,MAAM,qBAAqB,UAClB,SAAS,KAAK,GAAG,SAAS,OAAO;WACQ,GAAG;CAAE,CAAC;AACxD,QAAA,MAAM,wBAAwB,UACrB,SAAS,KAAK,GAAG,SAAS,OAAO,KACrC,OAAO,CAAC;AAEb,QAAA,MAAM,mBAAmB,UAChB,SAAS,KAAK,GAAG,SAAS,OAAO;WACQ,GAAG;CAAE,CAAC;AACxD,QAAA,MAAM,sBAAsB,UACnB,SAAS,KAAK,GAAG,SAAS,OAAO,KACrC,OAAO,CAAC;AAEb,QAAA,MAAM,YAAY,UACT,SAAS,KAAK,GAAG,SAAS,OAAO;WACQ,GAAG;CAAE,CAAC;AACxD,QAAA,MAAM,eAAe,UACZ,SAAS,KAAK,GAAG,SAAS,OAAO,KACrC,OAAO,CAAC;AAEb,QAAA,MAAM,YAAY,UACT,SAAS,KAAK,GAAG,SAAS,OAAO;WACQ,GAAG;CAAE,CAAC;AACxD,QAAA,MAAM,eAAe,UACZ,SAAS,KAAK,GAAG,SAAS,OAAO,KACrC,OAAO,CAAC;AAEb,QAAA,MAAM,cAAc,UACX,SAAS,KAAK,GAAG,SAAS,OAAO,8BACZ,CAAC;AAC/B,QAAA,MAAM,iBAAiB,+EAImB,CAAC;AAE3C,QAAA,MAAM,mBAAmB,UAChB,SAAS,KAAK,GAAG,SAAS,OAAO;WACQ,GAAG;CAAE,CAAC;AACxD,QAAA,MAAM,sBAAsB,UACnB,SAAS,KAAK,GAAG,SAAS,OAAO,KACrC,OAAO,CAAC;AAEb,QAAA,MAAM,qBAAqB,UAClB,SAAS,KAAK,GAAG,SAAS,OAAO;WACQ,GAAG;CAAE,CAAC;AACxD,QAAA,MAAM,wBAAwB,UACrB,SAAS,KAAK,GAAG,SAAS,OAAO,KACrC,OAAO,CAAC;AAEb,QAAA,MAAM,mBAAmB,UAChB,SAAS,KAAK,GAAG,SAAS,OAAO;WACQ,GAAG;CAAE,CAAC;AACxD,QAAA,MAAM,sBAAsB,UACnB,SAAS,KAAK,GAAG,SAAS,OAAO,KACrC,OAAO,CAAC;AAEb,QAAA,MAAM,gBAAgB,UACb,SAAS,KAAK,GAAG,SAAS,OAAO;WACQ,GAAG;CAAE,CAAC;AACxD,QAAA,MAAM,mBAAmB,UAChB,SAAS,KAAK,GAAG,SAAS,OAAO,KACrC,OAAO,CAAC;AAEb,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,GACjB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/predicates.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/predicates.js
new file mode 100644
index 0000000000000000000000000000000000000000..cea9b98280268e701cf4d1202a552f72b6b9ad4e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/predicates.js
@@ -0,0 +1,68 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isSemicolonToken = exports.isOpeningParenToken = exports.isOpeningBracketToken = exports.isOpeningBraceToken = exports.isNotSemicolonToken = exports.isNotOpeningParenToken = exports.isNotOpeningBracketToken = exports.isNotOpeningBraceToken = exports.isNotCommentToken = exports.isNotCommaToken = exports.isNotColonToken = exports.isNotClosingParenToken = exports.isNotClosingBracketToken = exports.isNotClosingBraceToken = exports.isNotArrowToken = exports.isCommentToken = exports.isCommaToken = exports.isColonToken = exports.isClosingParenToken = exports.isClosingBracketToken = exports.isClosingBraceToken = exports.isArrowToken = void 0;
+const eslintUtils = __importStar(require("eslint-utils"));
+const isArrowToken = eslintUtils.isArrowToken;
+exports.isArrowToken = isArrowToken;
+const isNotArrowToken = eslintUtils.isNotArrowToken;
+exports.isNotArrowToken = isNotArrowToken;
+const isClosingBraceToken = eslintUtils.isClosingBraceToken;
+exports.isClosingBraceToken = isClosingBraceToken;
+const isNotClosingBraceToken = eslintUtils.isNotClosingBraceToken;
+exports.isNotClosingBraceToken = isNotClosingBraceToken;
+const isClosingBracketToken = eslintUtils.isClosingBracketToken;
+exports.isClosingBracketToken = isClosingBracketToken;
+const isNotClosingBracketToken = eslintUtils.isNotClosingBracketToken;
+exports.isNotClosingBracketToken = isNotClosingBracketToken;
+const isClosingParenToken = eslintUtils.isClosingParenToken;
+exports.isClosingParenToken = isClosingParenToken;
+const isNotClosingParenToken = eslintUtils.isNotClosingParenToken;
+exports.isNotClosingParenToken = isNotClosingParenToken;
+const isColonToken = eslintUtils.isColonToken;
+exports.isColonToken = isColonToken;
+const isNotColonToken = eslintUtils.isNotColonToken;
+exports.isNotColonToken = isNotColonToken;
+const isCommaToken = eslintUtils.isCommaToken;
+exports.isCommaToken = isCommaToken;
+const isNotCommaToken = eslintUtils.isNotCommaToken;
+exports.isNotCommaToken = isNotCommaToken;
+const isCommentToken = eslintUtils.isCommentToken;
+exports.isCommentToken = isCommentToken;
+const isNotCommentToken = eslintUtils.isNotCommentToken;
+exports.isNotCommentToken = isNotCommentToken;
+const isOpeningBraceToken = eslintUtils.isOpeningBraceToken;
+exports.isOpeningBraceToken = isOpeningBraceToken;
+const isNotOpeningBraceToken = eslintUtils.isNotOpeningBraceToken;
+exports.isNotOpeningBraceToken = isNotOpeningBraceToken;
+const isOpeningBracketToken = eslintUtils.isOpeningBracketToken;
+exports.isOpeningBracketToken = isOpeningBracketToken;
+const isNotOpeningBracketToken = eslintUtils.isNotOpeningBracketToken;
+exports.isNotOpeningBracketToken = isNotOpeningBracketToken;
+const isOpeningParenToken = eslintUtils.isOpeningParenToken;
+exports.isOpeningParenToken = isOpeningParenToken;
+const isNotOpeningParenToken = eslintUtils.isNotOpeningParenToken;
+exports.isNotOpeningParenToken = isNotOpeningParenToken;
+const isSemicolonToken = eslintUtils.isSemicolonToken;
+exports.isSemicolonToken = isSemicolonToken;
+const isNotSemicolonToken = eslintUtils.isNotSemicolonToken;
+exports.isNotSemicolonToken = isNotSemicolonToken;
+//# sourceMappingURL=predicates.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/predicates.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/predicates.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b39d5cf4b6c1946dbcc0fef916cd60b4c9c32353
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/predicates.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"predicates.js","sourceRoot":"","sources":["../../../src/ast-utils/eslint-utils/predicates.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA4C;AAG5C,MAAM,YAAY,GAAG,WAAW,CAAC,YAEuB,CAAC;AA8EvD,oCAAY;AA7Ed,MAAM,eAAe,GAAG,WAAW,CAAC,eAExB,CAAC;AAkFX,0CAAe;AAhFjB,MAAM,mBAAmB,GAAG,WAAW,CAAC,mBAEe,CAAC;AAwEtD,kDAAmB;AAvErB,MAAM,sBAAsB,GAAG,WAAW,CAAC,sBAE/B,CAAC;AA4EX,wDAAsB;AA1ExB,MAAM,qBAAqB,GAAG,WAAW,CAAC,qBAEa,CAAC;AAkEtD,sDAAqB;AAjEvB,MAAM,wBAAwB,GAAG,WAAW,CAAC,wBAEjC,CAAC;AAsEX,4DAAwB;AApE1B,MAAM,mBAAmB,GAAG,WAAW,CAAC,mBAEe,CAAC;AA4DtD,kDAAmB;AA3DrB,MAAM,sBAAsB,GAAG,WAAW,CAAC,sBAE/B,CAAC;AAgEX,wDAAsB;AA9DxB,MAAM,YAAY,GAAG,WAAW,CAAC,YAEsB,CAAC;AAsDtD,oCAAY;AArDd,MAAM,eAAe,GAAG,WAAW,CAAC,eAExB,CAAC;AA0DX,0CAAe;AAxDjB,MAAM,YAAY,GAAG,WAAW,CAAC,YAEsB,CAAC;AAgDtD,oCAAY;AA/Cd,MAAM,eAAe,GAAG,WAAW,CAAC,eAExB,CAAC;AAoDX,0CAAe;AAlDjB,MAAM,cAAc,GAAG,WAAW,CAAC,cAEL,CAAC;AA0C7B,wCAAc;AAzChB,MAAM,iBAAiB,GAAG,WAAW,CAAC,iBAII,CAAC;AA4CzC,8CAAiB;AA1CnB,MAAM,mBAAmB,GAAG,WAAW,CAAC,mBAEe,CAAC;AA6CtD,kDAAmB;AA5CrB,MAAM,sBAAsB,GAAG,WAAW,CAAC,sBAE/B,CAAC;AAsCX,wDAAsB;AApCxB,MAAM,qBAAqB,GAAG,WAAW,CAAC,qBAEa,CAAC;AAuCtD,sDAAqB;AAtCvB,MAAM,wBAAwB,GAAG,WAAW,CAAC,wBAEjC,CAAC;AAgCX,4DAAwB;AA9B1B,MAAM,mBAAmB,GAAG,WAAW,CAAC,mBAEe,CAAC;AAiCtD,kDAAmB;AAhCrB,MAAM,sBAAsB,GAAG,WAAW,CAAC,sBAE/B,CAAC;AA0BX,wDAAsB;AAxBxB,MAAM,gBAAgB,GAAG,WAAW,CAAC,gBAEkB,CAAC;AA2BtD,4CAAgB;AA1BlB,MAAM,mBAAmB,GAAG,WAAW,CAAC,mBAE5B,CAAC;AAoBX,kDAAmB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/scopeAnalysis.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/scopeAnalysis.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..750950f58196861c707af3445d132f75a6cdd8d1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/scopeAnalysis.d.ts
@@ -0,0 +1,18 @@
+import { TSESTree } from '../../ts-estree';
+import * as TSESLint from '../../ts-eslint';
+/**
+ * Get the variable of a given name.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/scope-utils.html#findvariable}
+ */
+declare const findVariable: (initialScope: TSESLint.Scope.Scope, name: string) => TSESLint.Scope.Variable | null;
+/**
+ * Get the innermost scope which contains a given node.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/scope-utils.html#getinnermostscope}
+ * @returns The innermost scope which contains the given node.
+ * If such scope doesn't exist then it returns the 1st argument `initialScope`.
+ */
+declare const getInnermostScope: (initialScope: TSESLint.Scope.Scope, node: TSESTree.Node) => TSESLint.Scope.Scope;
+export { findVariable, getInnermostScope };
+//# sourceMappingURL=scopeAnalysis.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/scopeAnalysis.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/scopeAnalysis.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..19abf1c402d4c3be74108c53e16cd99a2a44f127
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/scopeAnalysis.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"scopeAnalysis.d.ts","sourceRoot":"","sources":["../../../src/ast-utils/eslint-utils/scopeAnalysis.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAE5C;;;;GAIG;AACH,QAAA,MAAM,YAAY,iBACF,SAAS,KAAK,CAAC,KAAK,QAC5B,MAAM,KACT,SAAS,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;AAEpC;;;;;;GAMG;AACH,QAAA,MAAM,iBAAiB,iBACP,SAAS,KAAK,CAAC,KAAK,QAC5B,SAAS,IAAI,KAChB,SAAS,KAAK,CAAC,KAAK,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/scopeAnalysis.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/scopeAnalysis.js
new file mode 100644
index 0000000000000000000000000000000000000000..18c8c6b30ae9cc10327c6960fa95852b6d3c7168
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/scopeAnalysis.js
@@ -0,0 +1,40 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getInnermostScope = exports.findVariable = void 0;
+const eslintUtils = __importStar(require("eslint-utils"));
+/**
+ * Get the variable of a given name.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/scope-utils.html#findvariable}
+ */
+const findVariable = eslintUtils.findVariable;
+exports.findVariable = findVariable;
+/**
+ * Get the innermost scope which contains a given node.
+ *
+ * @see {@link https://eslint-utils.mysticatea.dev/api/scope-utils.html#getinnermostscope}
+ * @returns The innermost scope which contains the given node.
+ * If such scope doesn't exist then it returns the 1st argument `initialScope`.
+ */
+const getInnermostScope = eslintUtils.getInnermostScope;
+exports.getInnermostScope = getInnermostScope;
+//# sourceMappingURL=scopeAnalysis.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/scopeAnalysis.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/scopeAnalysis.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..1f966eb475ef6c20b4e924e4ec21c8fb23a05fc9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/eslint-utils/scopeAnalysis.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"scopeAnalysis.js","sourceRoot":"","sources":["../../../src/ast-utils/eslint-utils/scopeAnalysis.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA4C;AAI5C;;;;GAIG;AACH,MAAM,YAAY,GAAG,WAAW,CAAC,YAGE,CAAC;AAc3B,oCAAY;AAZrB;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAG,WAAW,CAAC,iBAGb,CAAC;AAEH,8CAAiB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/index.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bd7408efe4286ff906ac201f538678c7002da949
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/index.d.ts
@@ -0,0 +1,4 @@
+export * from './misc';
+export * from './predicates';
+export * from './eslint-utils';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/index.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..246226046cc33f03c79082de9a74317f8718e2a1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ast-utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/index.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f3ae5e2b0534f2b387175541b38c54f21b3ebe5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/index.js
@@ -0,0 +1,16 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("./misc"), exports);
+__exportStar(require("./predicates"), exports);
+__exportStar(require("./eslint-utils"), exports);
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/index.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..df9a52caf089348d35e1739a8fdee4b72885fb39
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ast-utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAuB;AACvB,+CAA6B;AAC7B,iDAA+B"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/misc.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/misc.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..498e01da9ef2bb7d8d174412e8ca5879f315d70d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/misc.d.ts
@@ -0,0 +1,8 @@
+import { TSESTree } from '../ts-estree';
+declare const LINEBREAK_MATCHER: RegExp;
+/**
+ * Determines whether two adjacent tokens are on the same line
+ */
+declare function isTokenOnSameLine(left: TSESTree.Token | TSESTree.Comment, right: TSESTree.Token | TSESTree.Comment): boolean;
+export { isTokenOnSameLine, LINEBREAK_MATCHER };
+//# sourceMappingURL=misc.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/misc.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/misc.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..635a9160efe9a234ddd20d7c98411f8ad69b4ef2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/misc.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../src/ast-utils/misc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,QAAA,MAAM,iBAAiB,QAA4B,CAAC;AAEpD;;GAEG;AACH,iBAAS,iBAAiB,CACxB,IAAI,EAAE,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,EACvC,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,GACvC,OAAO,CAET;AAED,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/misc.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/misc.js
new file mode 100644
index 0000000000000000000000000000000000000000..ea03c98e9cd4a71c9570b2dee585e7a3719694f7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/misc.js
@@ -0,0 +1,13 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.LINEBREAK_MATCHER = exports.isTokenOnSameLine = void 0;
+const LINEBREAK_MATCHER = /\r\n|[\r\n\u2028\u2029]/;
+exports.LINEBREAK_MATCHER = LINEBREAK_MATCHER;
+/**
+ * Determines whether two adjacent tokens are on the same line
+ */
+function isTokenOnSameLine(left, right) {
+    return left.loc.end.line === right.loc.start.line;
+}
+exports.isTokenOnSameLine = isTokenOnSameLine;
+//# sourceMappingURL=misc.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/misc.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/misc.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b1f3f39309f4cb3af7b7d1be23306dfa3d3838dc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/misc.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/ast-utils/misc.ts"],"names":[],"mappings":";;;AAEA,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;AAYxB,8CAAiB;AAV7C;;GAEG;AACH,SAAS,iBAAiB,CACxB,IAAuC,EACvC,KAAwC;IAExC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACpD,CAAC;AAEQ,8CAAiB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/predicates.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/predicates.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..954ca9052971e27685c3fabd54fa89538e6af28a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/predicates.d.ts
@@ -0,0 +1,58 @@
+import { TSESTree } from '../ts-estree';
+declare function isOptionalChainPunctuator(token: TSESTree.Token | TSESTree.Comment): token is TSESTree.PunctuatorToken & {
+    value: '?.';
+};
+declare function isNotOptionalChainPunctuator(token: TSESTree.Token | TSESTree.Comment): boolean;
+declare function isNonNullAssertionPunctuator(token: TSESTree.Token | TSESTree.Comment): token is TSESTree.PunctuatorToken & {
+    value: '!';
+};
+declare function isNotNonNullAssertionPunctuator(token: TSESTree.Token | TSESTree.Comment): boolean;
+/**
+ * Returns true if and only if the node represents: foo?.() or foo.bar?.()
+ */
+declare function isOptionalCallExpression(node: TSESTree.Node): node is TSESTree.CallExpression & {
+    optional: true;
+};
+/**
+ * Returns true if and only if the node represents logical OR
+ */
+declare function isLogicalOrOperator(node: TSESTree.Node): node is TSESTree.LogicalExpression & {
+    operator: '||';
+};
+/**
+ * Checks if a node is a type assertion:
+ * ```
+ * x as foo
+ * <foo>x
+ * ```
+ */
+declare function isTypeAssertion(node: TSESTree.Node | undefined | null): node is TSESTree.TSAsExpression | TSESTree.TSTypeAssertion;
+declare function isVariableDeclarator(node: TSESTree.Node | undefined): node is TSESTree.VariableDeclarator;
+declare function isFunction(node: TSESTree.Node | undefined): node is TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration | TSESTree.FunctionExpression;
+declare function isFunctionType(node: TSESTree.Node | undefined): node is TSESTree.TSCallSignatureDeclaration | TSESTree.TSConstructorType | TSESTree.TSConstructSignatureDeclaration | TSESTree.TSEmptyBodyFunctionExpression | TSESTree.TSFunctionType | TSESTree.TSMethodSignature;
+declare function isFunctionOrFunctionType(node: TSESTree.Node | undefined): node is TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.TSCallSignatureDeclaration | TSESTree.TSConstructorType | TSESTree.TSConstructSignatureDeclaration | TSESTree.TSEmptyBodyFunctionExpression | TSESTree.TSFunctionType | TSESTree.TSMethodSignature;
+declare function isTSFunctionType(node: TSESTree.Node | undefined): node is TSESTree.TSFunctionType;
+declare function isTSConstructorType(node: TSESTree.Node | undefined): node is TSESTree.TSConstructorType;
+declare function isClassOrTypeElement(node: TSESTree.Node | undefined): node is TSESTree.ClassElement | TSESTree.TypeElement;
+/**
+ * Checks if a node is a constructor method.
+ */
+declare function isConstructor(node: TSESTree.Node | undefined): node is TSESTree.MethodDefinition;
+/**
+ * Checks if a node is a setter method.
+ */
+declare function isSetter(node: TSESTree.Node | undefined): node is TSESTree.MethodDefinition | TSESTree.Property;
+declare function isIdentifier(node: TSESTree.Node | undefined): node is TSESTree.Identifier;
+/**
+ * Checks if a node represents an `await …` expression.
+ */
+declare function isAwaitExpression(node: TSESTree.Node | undefined | null): node is TSESTree.AwaitExpression;
+/**
+ * Checks if a possible token is the `await` keyword.
+ */
+declare function isAwaitKeyword(node: TSESTree.Token | TSESTree.Comment | undefined | null): node is TSESTree.KeywordToken & {
+    value: 'await';
+};
+declare function isLoop(node: TSESTree.Node | undefined | null): node is TSESTree.DoWhileStatement | TSESTree.ForStatement | TSESTree.ForInStatement | TSESTree.ForOfStatement | TSESTree.WhileStatement;
+export { isAwaitExpression, isAwaitKeyword, isConstructor, isClassOrTypeElement, isFunction, isFunctionOrFunctionType, isFunctionType, isIdentifier, isLoop, isLogicalOrOperator, isNonNullAssertionPunctuator, isNotNonNullAssertionPunctuator, isNotOptionalChainPunctuator, isOptionalChainPunctuator, isOptionalCallExpression, isSetter, isTSConstructorType, isTSFunctionType, isTypeAssertion, isVariableDeclarator, };
+//# sourceMappingURL=predicates.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/predicates.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/predicates.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..bdf2a320560463afa86486b90726bef28d6b3a06
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/predicates.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"predicates.d.ts","sourceRoot":"","sources":["../../src/ast-utils/predicates.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/predicates.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/predicates.js
new file mode 100644
index 0000000000000000000000000000000000000000..46d3cb9c854919a55240b42b355f1fd7afe4f3ae
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/predicates.js
@@ -0,0 +1,163 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isVariableDeclarator = exports.isTypeAssertion = exports.isTSFunctionType = exports.isTSConstructorType = exports.isSetter = exports.isOptionalCallExpression = exports.isOptionalChainPunctuator = exports.isNotOptionalChainPunctuator = exports.isNotNonNullAssertionPunctuator = exports.isNonNullAssertionPunctuator = exports.isLogicalOrOperator = exports.isLoop = exports.isIdentifier = exports.isFunctionType = exports.isFunctionOrFunctionType = exports.isFunction = exports.isClassOrTypeElement = exports.isConstructor = exports.isAwaitKeyword = exports.isAwaitExpression = void 0;
+const ts_estree_1 = require("../ts-estree");
+function isOptionalChainPunctuator(token) {
+    return token.type === ts_estree_1.AST_TOKEN_TYPES.Punctuator && token.value === '?.';
+}
+exports.isOptionalChainPunctuator = isOptionalChainPunctuator;
+function isNotOptionalChainPunctuator(token) {
+    return !isOptionalChainPunctuator(token);
+}
+exports.isNotOptionalChainPunctuator = isNotOptionalChainPunctuator;
+function isNonNullAssertionPunctuator(token) {
+    return token.type === ts_estree_1.AST_TOKEN_TYPES.Punctuator && token.value === '!';
+}
+exports.isNonNullAssertionPunctuator = isNonNullAssertionPunctuator;
+function isNotNonNullAssertionPunctuator(token) {
+    return !isNonNullAssertionPunctuator(token);
+}
+exports.isNotNonNullAssertionPunctuator = isNotNonNullAssertionPunctuator;
+/**
+ * Returns true if and only if the node represents: foo?.() or foo.bar?.()
+ */
+function isOptionalCallExpression(node) {
+    return (node.type === ts_estree_1.AST_NODE_TYPES.CallExpression &&
+        // this flag means the call expression itself is option
+        // i.e. it is foo.bar?.() and not foo?.bar()
+        node.optional);
+}
+exports.isOptionalCallExpression = isOptionalCallExpression;
+/**
+ * Returns true if and only if the node represents logical OR
+ */
+function isLogicalOrOperator(node) {
+    return (node.type === ts_estree_1.AST_NODE_TYPES.LogicalExpression && node.operator === '||');
+}
+exports.isLogicalOrOperator = isLogicalOrOperator;
+/**
+ * Checks if a node is a type assertion:
+ * ```
+ * x as foo
+ * <foo>x
+ * ```
+ */
+function isTypeAssertion(node) {
+    if (!node) {
+        return false;
+    }
+    return (node.type === ts_estree_1.AST_NODE_TYPES.TSAsExpression ||
+        node.type === ts_estree_1.AST_NODE_TYPES.TSTypeAssertion);
+}
+exports.isTypeAssertion = isTypeAssertion;
+function isVariableDeclarator(node) {
+    return (node === null || node === void 0 ? void 0 : node.type) === ts_estree_1.AST_NODE_TYPES.VariableDeclarator;
+}
+exports.isVariableDeclarator = isVariableDeclarator;
+function isFunction(node) {
+    if (!node) {
+        return false;
+    }
+    return [
+        ts_estree_1.AST_NODE_TYPES.ArrowFunctionExpression,
+        ts_estree_1.AST_NODE_TYPES.FunctionDeclaration,
+        ts_estree_1.AST_NODE_TYPES.FunctionExpression,
+    ].includes(node.type);
+}
+exports.isFunction = isFunction;
+function isFunctionType(node) {
+    if (!node) {
+        return false;
+    }
+    return [
+        ts_estree_1.AST_NODE_TYPES.TSCallSignatureDeclaration,
+        ts_estree_1.AST_NODE_TYPES.TSConstructorType,
+        ts_estree_1.AST_NODE_TYPES.TSConstructSignatureDeclaration,
+        ts_estree_1.AST_NODE_TYPES.TSEmptyBodyFunctionExpression,
+        ts_estree_1.AST_NODE_TYPES.TSFunctionType,
+        ts_estree_1.AST_NODE_TYPES.TSMethodSignature,
+    ].includes(node.type);
+}
+exports.isFunctionType = isFunctionType;
+function isFunctionOrFunctionType(node) {
+    return isFunction(node) || isFunctionType(node);
+}
+exports.isFunctionOrFunctionType = isFunctionOrFunctionType;
+function isTSFunctionType(node) {
+    return (node === null || node === void 0 ? void 0 : node.type) === ts_estree_1.AST_NODE_TYPES.TSFunctionType;
+}
+exports.isTSFunctionType = isTSFunctionType;
+function isTSConstructorType(node) {
+    return (node === null || node === void 0 ? void 0 : node.type) === ts_estree_1.AST_NODE_TYPES.TSConstructorType;
+}
+exports.isTSConstructorType = isTSConstructorType;
+function isClassOrTypeElement(node) {
+    if (!node) {
+        return false;
+    }
+    return [
+        // ClassElement
+        ts_estree_1.AST_NODE_TYPES.ClassProperty,
+        ts_estree_1.AST_NODE_TYPES.FunctionExpression,
+        ts_estree_1.AST_NODE_TYPES.MethodDefinition,
+        ts_estree_1.AST_NODE_TYPES.TSAbstractClassProperty,
+        ts_estree_1.AST_NODE_TYPES.TSAbstractMethodDefinition,
+        ts_estree_1.AST_NODE_TYPES.TSEmptyBodyFunctionExpression,
+        ts_estree_1.AST_NODE_TYPES.TSIndexSignature,
+        // TypeElement
+        ts_estree_1.AST_NODE_TYPES.TSCallSignatureDeclaration,
+        ts_estree_1.AST_NODE_TYPES.TSConstructSignatureDeclaration,
+        // AST_NODE_TYPES.TSIndexSignature,
+        ts_estree_1.AST_NODE_TYPES.TSMethodSignature,
+        ts_estree_1.AST_NODE_TYPES.TSPropertySignature,
+    ].includes(node.type);
+}
+exports.isClassOrTypeElement = isClassOrTypeElement;
+/**
+ * Checks if a node is a constructor method.
+ */
+function isConstructor(node) {
+    return ((node === null || node === void 0 ? void 0 : node.type) === ts_estree_1.AST_NODE_TYPES.MethodDefinition &&
+        node.kind === 'constructor');
+}
+exports.isConstructor = isConstructor;
+/**
+ * Checks if a node is a setter method.
+ */
+function isSetter(node) {
+    return (!!node &&
+        (node.type === ts_estree_1.AST_NODE_TYPES.MethodDefinition ||
+            node.type === ts_estree_1.AST_NODE_TYPES.Property) &&
+        node.kind === 'set');
+}
+exports.isSetter = isSetter;
+function isIdentifier(node) {
+    return (node === null || node === void 0 ? void 0 : node.type) === ts_estree_1.AST_NODE_TYPES.Identifier;
+}
+exports.isIdentifier = isIdentifier;
+/**
+ * Checks if a node represents an `await …` expression.
+ */
+function isAwaitExpression(node) {
+    return (node === null || node === void 0 ? void 0 : node.type) === ts_estree_1.AST_NODE_TYPES.AwaitExpression;
+}
+exports.isAwaitExpression = isAwaitExpression;
+/**
+ * Checks if a possible token is the `await` keyword.
+ */
+function isAwaitKeyword(node) {
+    return (node === null || node === void 0 ? void 0 : node.type) === ts_estree_1.AST_TOKEN_TYPES.Identifier && node.value === 'await';
+}
+exports.isAwaitKeyword = isAwaitKeyword;
+function isLoop(node) {
+    if (!node) {
+        return false;
+    }
+    return (node.type === ts_estree_1.AST_NODE_TYPES.DoWhileStatement ||
+        node.type === ts_estree_1.AST_NODE_TYPES.ForStatement ||
+        node.type === ts_estree_1.AST_NODE_TYPES.ForInStatement ||
+        node.type === ts_estree_1.AST_NODE_TYPES.ForOfStatement ||
+        node.type === ts_estree_1.AST_NODE_TYPES.WhileStatement);
+}
+exports.isLoop = isLoop;
+//# sourceMappingURL=predicates.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/predicates.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/predicates.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..32287493f915c7b02a9f1bbc2ad990f4e64a59e5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ast-utils/predicates.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"predicates.js","sourceRoot":"","sources":["../../src/ast-utils/predicates.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/InferTypesFromRule.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/InferTypesFromRule.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9cda791499c5d7423ebf477011e59a4d3dce1758
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/InferTypesFromRule.d.ts
@@ -0,0 +1,11 @@
+import { RuleCreateFunction, RuleModule } from '../ts-eslint';
+/**
+ * Uses type inference to fetch the TOptions type from the given RuleModule
+ */
+declare type InferOptionsTypeFromRule<T> = T extends RuleModule<infer _TMessageIds, infer TOptions> ? TOptions : T extends RuleCreateFunction<infer _TMessageIds, infer TOptions> ? TOptions : unknown;
+/**
+ * Uses type inference to fetch the TMessageIds type from the given RuleModule
+ */
+declare type InferMessageIdsTypeFromRule<T> = T extends RuleModule<infer TMessageIds, infer _TOptions> ? TMessageIds : T extends RuleCreateFunction<infer TMessageIds, infer _TOptions> ? TMessageIds : unknown;
+export { InferOptionsTypeFromRule, InferMessageIdsTypeFromRule };
+//# sourceMappingURL=InferTypesFromRule.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/InferTypesFromRule.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/InferTypesFromRule.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..0f29a0acd764950e3f001dd1a4f1e40b40f62764
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/InferTypesFromRule.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"InferTypesFromRule.d.ts","sourceRoot":"","sources":["../../src/eslint-utils/InferTypesFromRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE9D;;GAEG;AACH,aAAK,wBAAwB,CAAC,CAAC,IAAI,CAAC,SAAS,UAAU,CACrD,MAAM,YAAY,EAClB,MAAM,QAAQ,CACf,GACG,QAAQ,GACR,CAAC,SAAS,kBAAkB,CAAC,MAAM,YAAY,EAAE,MAAM,QAAQ,CAAC,GAChE,QAAQ,GACR,OAAO,CAAC;AAEZ;;GAEG;AACH,aAAK,2BAA2B,CAAC,CAAC,IAAI,CAAC,SAAS,UAAU,CACxD,MAAM,WAAW,EACjB,MAAM,SAAS,CAChB,GACG,WAAW,GACX,CAAC,SAAS,kBAAkB,CAAC,MAAM,WAAW,EAAE,MAAM,SAAS,CAAC,GAChE,WAAW,GACX,OAAO,CAAC;AAEZ,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/InferTypesFromRule.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/InferTypesFromRule.js
new file mode 100644
index 0000000000000000000000000000000000000000..9305805b4fd2110054900b27eb00c4199cb6c8e7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/InferTypesFromRule.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=InferTypesFromRule.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/InferTypesFromRule.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/InferTypesFromRule.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..99fe846c4397dbb48d2ef3d09a7f8b6550df3514
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/InferTypesFromRule.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"InferTypesFromRule.js","sourceRoot":"","sources":["../../src/eslint-utils/InferTypesFromRule.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleCreator.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleCreator.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..565a6a9d765001b4f02f09df69961513aa7d0b5a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleCreator.d.ts
@@ -0,0 +1,13 @@
+import { RuleMetaData, RuleMetaDataDocs, RuleListener, RuleContext, RuleModule } from '../ts-eslint/Rule';
+declare type CreateRuleMetaDocs = Omit<RuleMetaDataDocs, 'url'>;
+declare type CreateRuleMeta<TMessageIds extends string> = {
+    docs: CreateRuleMetaDocs;
+} & Omit<RuleMetaData<TMessageIds>, 'docs'>;
+declare function RuleCreator(urlCreator: (ruleName: string) => string): <TOptions extends readonly unknown[], TMessageIds extends string, TRuleListener extends RuleListener = RuleListener>({ name, meta, defaultOptions, create, }: Readonly<{
+    name: string;
+    meta: CreateRuleMeta<TMessageIds>;
+    defaultOptions: Readonly<TOptions>;
+    create: (context: Readonly<RuleContext<TMessageIds, TOptions>>, optionsWithDefault: Readonly<TOptions>) => TRuleListener;
+}>) => RuleModule<TMessageIds, TOptions, TRuleListener>;
+export { RuleCreator };
+//# sourceMappingURL=RuleCreator.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleCreator.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleCreator.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..2d86f2a588d64d6708ebc0872435bc9c3483e265
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleCreator.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"RuleCreator.d.ts","sourceRoot":"","sources":["../../src/eslint-utils/RuleCreator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,UAAU,EACX,MAAM,mBAAmB,CAAC;AAI3B,aAAK,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;AACxD,aAAK,cAAc,CAAC,WAAW,SAAS,MAAM,IAAI;IAChD,IAAI,EAAE,kBAAkB,CAAC;CAC1B,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;AAE5C,iBAAS,WAAW,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM;UAanD,MAAM;;;;wDA2Bf;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleCreator.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleCreator.js
new file mode 100644
index 0000000000000000000000000000000000000000..cba8ed64ef07f4fd5af96f9d4462b698b58c41f6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleCreator.js
@@ -0,0 +1,19 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.RuleCreator = void 0;
+const applyDefault_1 = require("./applyDefault");
+function RuleCreator(urlCreator) {
+    // This function will get much easier to call when this is merged https://github.com/Microsoft/TypeScript/pull/26349
+    // TODO - when the above PR lands; add type checking for the context.report `data` property
+    return function createRule({ name, meta, defaultOptions, create, }) {
+        return {
+            meta: Object.assign(Object.assign({}, meta), { docs: Object.assign(Object.assign({}, meta.docs), { url: urlCreator(name) }) }),
+            create(context) {
+                const optionsWithDefault = applyDefault_1.applyDefault(defaultOptions, context.options);
+                return create(context, optionsWithDefault);
+            },
+        };
+    };
+}
+exports.RuleCreator = RuleCreator;
+//# sourceMappingURL=RuleCreator.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleCreator.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleCreator.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..cea4eb08c3b8edf7ca1ae3ebc687a7b6c1e5d1d8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleCreator.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"RuleCreator.js","sourceRoot":"","sources":["../../src/eslint-utils/RuleCreator.ts"],"names":[],"mappings":";;;AAOA,iDAA8C;AAQ9C,SAAS,WAAW,CAAC,UAAwC;IAC3D,oHAAoH;IACpH,2FAA2F;IAC3F,OAAO,SAAS,UAAU,CAIxB,EACA,IAAI,EACJ,IAAI,EACJ,cAAc,EACd,MAAM,GASN;QACA,OAAO;YACL,IAAI,kCACC,IAAI,KACP,IAAI,kCACC,IAAI,CAAC,IAAI,KACZ,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,MAExB;YACD,MAAM,CACJ,OAAqD;gBAErD,MAAM,kBAAkB,GAAG,2BAAY,CACrC,cAAc,EACd,OAAO,CAAC,OAAO,CAChB,CAAC;gBACF,OAAO,MAAM,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YAC7C,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAEQ,kCAAW"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleTester.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleTester.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..82d3f731b3532fe4118e535fd1d7874dd3968f86
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleTester.d.ts
@@ -0,0 +1,18 @@
+import * as TSESLint from '../ts-eslint';
+declare const parser = "@typescript-eslint/parser";
+declare type RuleTesterConfig = Omit<TSESLint.RuleTesterConfig, 'parser'> & {
+    parser: typeof parser;
+};
+declare class RuleTester extends TSESLint.RuleTester {
+    #private;
+    constructor(options: RuleTesterConfig);
+    private getFilename;
+    run<TMessageIds extends string, TOptions extends Readonly<unknown[]>>(name: string, rule: TSESLint.RuleModule<TMessageIds, TOptions>, testsReadonly: TSESLint.RunTests<TMessageIds, TOptions>): void;
+}
+/**
+ * Simple no-op tag to mark code samples as "should not format with prettier"
+ *   for the internal/plugin-test-formatting lint rule
+ */
+declare function noFormat(strings: TemplateStringsArray, ...keys: string[]): string;
+export { noFormat, RuleTester };
+//# sourceMappingURL=RuleTester.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleTester.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleTester.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..26af05f3e7b3dd129b52b6863945b676617a731e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleTester.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"RuleTester.d.ts","sourceRoot":"","sources":["../../src/eslint-utils/RuleTester.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,cAAc,CAAC;AAEzC,QAAA,MAAM,MAAM,8BAA8B,CAAC;AAE3C,aAAK,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG;IAClE,MAAM,EAAE,OAAO,MAAM,CAAC;CACvB,CAAC;AAEF,cAAM,UAAW,SAAQ,QAAQ,CAAC,UAAU;;gBAM9B,OAAO,EAAE,gBAAgB;IAyBrC,OAAO,CAAC,WAAW;IAuBnB,GAAG,CAAC,WAAW,SAAS,MAAM,EAAE,QAAQ,SAAS,QAAQ,CAAC,OAAO,EAAE,CAAC,EAClE,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,EAChD,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,GACtD,IAAI;CA4CR;AAED;;;GAGG;AACH,iBAAS,QAAQ,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAM1E;AAED,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleTester.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleTester.js
new file mode 100644
index 0000000000000000000000000000000000000000..348238a1dcc328c728346265ebccfe9cc4f57785
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleTester.js
@@ -0,0 +1,128 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to set private field on non-instance");
+    }
+    privateMap.set(receiver, value);
+    return value;
+};
+var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to get private field on non-instance");
+    }
+    return privateMap.get(receiver);
+};
+var _options;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.RuleTester = exports.noFormat = void 0;
+const path = __importStar(require("path"));
+const TSESLint = __importStar(require("../ts-eslint"));
+const parser = '@typescript-eslint/parser';
+class RuleTester extends TSESLint.RuleTester {
+    // as of eslint 6 you have to provide an absolute path to the parser
+    // but that's not as clean to type, this saves us trying to manually enforce
+    // that contributors require.resolve everything
+    constructor(options) {
+        var _a, _b;
+        super(Object.assign(Object.assign({}, options), { parserOptions: Object.assign(Object.assign({}, options.parserOptions), { warnOnUnsupportedTypeScriptVersion: (_b = (_a = options.parserOptions) === null || _a === void 0 ? void 0 : _a.warnOnUnsupportedTypeScriptVersion) !== null && _b !== void 0 ? _b : false }), parser: require.resolve(options.parser) }));
+        _options.set(this, void 0);
+        __classPrivateFieldSet(this, _options, options);
+        // make sure that the parser doesn't hold onto file handles between tests
+        // on linux (i.e. our CI env), there can be very a limited number of watch handles available
+        afterAll(() => {
+            try {
+                // instead of creating a hard dependency, just use a soft require
+                // a bit weird, but if they're using this tooling, it'll be installed
+                require(parser).clearCaches();
+            }
+            catch (_a) {
+                // ignored
+            }
+        });
+    }
+    getFilename(options) {
+        var _a;
+        if (options) {
+            const filename = `file.ts${((_a = options.ecmaFeatures) === null || _a === void 0 ? void 0 : _a.jsx) ? 'x' : ''}`;
+            if (options.project) {
+                return path.join(options.tsconfigRootDir != null
+                    ? options.tsconfigRootDir
+                    : process.cwd(), filename);
+            }
+            return filename;
+        }
+        else if (__classPrivateFieldGet(this, _options).parserOptions) {
+            return this.getFilename(__classPrivateFieldGet(this, _options).parserOptions);
+        }
+        return 'file.ts';
+    }
+    // as of eslint 6 you have to provide an absolute path to the parser
+    // If you don't do that at the test level, the test will fail somewhat cryptically...
+    // This is a lot more explicit
+    run(name, rule, testsReadonly) {
+        const errorMessage = `Do not set the parser at the test level unless you want to use a parser other than ${parser}`;
+        const tests = Object.assign({}, testsReadonly);
+        // standardize the valid tests as objects
+        tests.valid = tests.valid.map(test => {
+            if (typeof test === 'string') {
+                return {
+                    code: test,
+                };
+            }
+            return test;
+        });
+        tests.valid = tests.valid.map(test => {
+            if (typeof test !== 'string') {
+                if (test.parser === parser) {
+                    throw new Error(errorMessage);
+                }
+                if (!test.filename) {
+                    return Object.assign(Object.assign({}, test), { filename: this.getFilename(test.parserOptions) });
+                }
+            }
+            return test;
+        });
+        tests.invalid = tests.invalid.map(test => {
+            if (test.parser === parser) {
+                throw new Error(errorMessage);
+            }
+            if (!test.filename) {
+                return Object.assign(Object.assign({}, test), { filename: this.getFilename(test.parserOptions) });
+            }
+            return test;
+        });
+        super.run(name, rule, tests);
+    }
+}
+exports.RuleTester = RuleTester;
+_options = new WeakMap();
+/**
+ * Simple no-op tag to mark code samples as "should not format with prettier"
+ *   for the internal/plugin-test-formatting lint rule
+ */
+function noFormat(strings, ...keys) {
+    const lastIndex = strings.length - 1;
+    return (strings.slice(0, lastIndex).reduce((p, s, i) => p + s + keys[i], '') +
+        strings[lastIndex]);
+}
+exports.noFormat = noFormat;
+//# sourceMappingURL=RuleTester.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleTester.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleTester.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..bff9ff19981b01a8287a92b0b212009fb56601d3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/RuleTester.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"RuleTester.js","sourceRoot":"","sources":["../../src/eslint-utils/RuleTester.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/applyDefault.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/applyDefault.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b92df58f5000f3926e02f5062b1533f9f33add2e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/applyDefault.d.ts
@@ -0,0 +1,10 @@
+/**
+ * Pure function - doesn't mutate either parameter!
+ * Uses the default options and overrides with the options provided by the user
+ * @param defaultOptions the defaults
+ * @param userOptions the user opts
+ * @returns the options with defaults
+ */
+declare function applyDefault<TUser extends readonly unknown[], TDefault extends TUser>(defaultOptions: TDefault, userOptions: TUser | null): TDefault;
+export { applyDefault };
+//# sourceMappingURL=applyDefault.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/applyDefault.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/applyDefault.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..50c710ed4dc157f83dcf310127c35b9bb7835aef
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/applyDefault.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"applyDefault.d.ts","sourceRoot":"","sources":["../../src/eslint-utils/applyDefault.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,iBAAS,YAAY,CAAC,KAAK,SAAS,SAAS,OAAO,EAAE,EAAE,QAAQ,SAAS,KAAK,EAC5E,cAAc,EAAE,QAAQ,EACxB,WAAW,EAAE,KAAK,GAAG,IAAI,GACxB,QAAQ,CAuBV;AAMD,OAAO,EAAE,YAAY,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/applyDefault.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/applyDefault.js
new file mode 100644
index 0000000000000000000000000000000000000000..6ae1a7954e5649fc955b8a430da25268a74fe683
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/applyDefault.js
@@ -0,0 +1,32 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.applyDefault = void 0;
+const deepMerge_1 = require("./deepMerge");
+/**
+ * Pure function - doesn't mutate either parameter!
+ * Uses the default options and overrides with the options provided by the user
+ * @param defaultOptions the defaults
+ * @param userOptions the user opts
+ * @returns the options with defaults
+ */
+function applyDefault(defaultOptions, userOptions) {
+    // clone defaults
+    const options = JSON.parse(JSON.stringify(defaultOptions));
+    if (userOptions === null || userOptions === undefined) {
+        return options;
+    }
+    options.forEach((opt, i) => {
+        if (userOptions[i] !== undefined) {
+            const userOpt = userOptions[i];
+            if (deepMerge_1.isObjectNotArray(userOpt) && deepMerge_1.isObjectNotArray(opt)) {
+                options[i] = deepMerge_1.deepMerge(opt, userOpt);
+            }
+            else {
+                options[i] = userOpt;
+            }
+        }
+    });
+    return options;
+}
+exports.applyDefault = applyDefault;
+//# sourceMappingURL=applyDefault.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/applyDefault.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/applyDefault.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..797a3b5095279d203f7f7f14f48816b4f7a75a1b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/applyDefault.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"applyDefault.js","sourceRoot":"","sources":["../../src/eslint-utils/applyDefault.ts"],"names":[],"mappings":";;;AAAA,2CAA0D;AAE1D;;;;;;GAMG;AACH,SAAS,YAAY,CACnB,cAAwB,EACxB,WAAyB;IAEzB,iBAAiB;IACjB,MAAM,OAAO,GAAwB,IAAI,CAAC,KAAK,CAC7C,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAC/B,CAAC;IAEF,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS,EAAE;QACrD,OAAO,OAAO,CAAC;KAChB;IAED,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACzB,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YAChC,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAE/B,IAAI,4BAAgB,CAAC,OAAO,CAAC,IAAI,4BAAgB,CAAC,GAAG,CAAC,EAAE;gBACtD,OAAO,CAAC,CAAC,CAAC,GAAG,qBAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;aACtC;iBAAM;gBACL,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;aACtB;SACF;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAMQ,oCAAY"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/batchedSingleLineTests.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/batchedSingleLineTests.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..341180255881e1ac2a18217b32db9a5c21bdef6f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/batchedSingleLineTests.d.ts
@@ -0,0 +1,24 @@
+import { ValidTestCase, InvalidTestCase } from '../ts-eslint';
+/**
+ * Converts a batch of single line tests into a number of separate test cases.
+ * This makes it easier to write tests which use the same options.
+ *
+ * Why wouldn't you just leave them as one test?
+ * Because it makes the test error messages harder to decipher.
+ * This way each line will fail separately, instead of them all failing together.
+ */
+declare function batchedSingleLineTests<TOptions extends Readonly<unknown[]>>(test: ValidTestCase<TOptions>): ValidTestCase<TOptions>[];
+/**
+ * Converts a batch of single line tests into a number of separate test cases.
+ * This makes it easier to write tests which use the same options.
+ *
+ * Why wouldn't you just leave them as one test?
+ * Because it makes the test error messages harder to decipher.
+ * This way each line will fail separately, instead of them all failing together.
+ *
+ * Make sure you have your line numbers correct for error reporting, as it will match
+ * the line numbers up with the split tests!
+ */
+declare function batchedSingleLineTests<TMessageIds extends string, TOptions extends Readonly<unknown[]>>(test: InvalidTestCase<TMessageIds, TOptions>): InvalidTestCase<TMessageIds, TOptions>[];
+export { batchedSingleLineTests };
+//# sourceMappingURL=batchedSingleLineTests.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/batchedSingleLineTests.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/batchedSingleLineTests.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..55841a1eb0c678fcf35669b53e90444156994e79
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/batchedSingleLineTests.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"batchedSingleLineTests.d.ts","sourceRoot":"","sources":["../../src/eslint-utils/batchedSingleLineTests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE9D;;;;;;;GAOG;AACH,iBAAS,sBAAsB,CAAC,QAAQ,SAAS,QAAQ,CAAC,OAAO,EAAE,CAAC,EAClE,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,GAC5B,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC7B;;;;;;;;;;GAUG;AACH,iBAAS,sBAAsB,CAC7B,WAAW,SAAS,MAAM,EAC1B,QAAQ,SAAS,QAAQ,CAAC,OAAO,EAAE,CAAC,EAEpC,IAAI,EAAE,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,GAC3C,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC;AAwC5C,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/batchedSingleLineTests.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/batchedSingleLineTests.js
new file mode 100644
index 0000000000000000000000000000000000000000..7ff93904e7214cd85bac43121b5ec0c29c6bbc81
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/batchedSingleLineTests.js
@@ -0,0 +1,26 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.batchedSingleLineTests = void 0;
+function batchedSingleLineTests(options) {
+    // eslint counts lines from 1
+    const lineOffset = options.code.startsWith('\n') ? 2 : 1;
+    const output = 'output' in options && options.output
+        ? options.output.trim().split('\n')
+        : null;
+    return options.code
+        .trim()
+        .split('\n')
+        .map((code, i) => {
+        const lineNum = i + lineOffset;
+        const errors = 'errors' in options
+            ? options.errors.filter(e => e.line === lineNum)
+            : [];
+        const returnVal = Object.assign(Object.assign({}, options), { code, errors: errors.map(e => (Object.assign(Object.assign({}, e), { line: 1 }))) });
+        if (output === null || output === void 0 ? void 0 : output[i]) {
+            return Object.assign(Object.assign({}, returnVal), { output: output[i] });
+        }
+        return returnVal;
+    });
+}
+exports.batchedSingleLineTests = batchedSingleLineTests;
+//# sourceMappingURL=batchedSingleLineTests.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/batchedSingleLineTests.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/batchedSingleLineTests.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..31f68d68800198cac35be7cc88373fe4764a4040
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/batchedSingleLineTests.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"batchedSingleLineTests.js","sourceRoot":"","sources":["../../src/eslint-utils/batchedSingleLineTests.ts"],"names":[],"mappings":";;;AA8BA,SAAS,sBAAsB,CAI7B,OAAyE;IAEzE,6BAA6B;IAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,MAAM,GACV,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM;QACnC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC;IACX,OAAO,OAAO,CAAC,IAAI;SAChB,IAAI,EAAE;SACN,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACf,MAAM,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC;QAC/B,MAAM,MAAM,GACV,QAAQ,IAAI,OAAO;YACjB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;YAChD,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,SAAS,mCACV,OAAO,KACV,IAAI,EACJ,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,iCACnB,CAAC,KACJ,IAAI,EAAE,CAAC,IACP,CAAC,GACJ,CAAC;QACF,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,GAAG;YACf,uCACK,SAAS,KACZ,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IACjB;SACH;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACP,CAAC;AAEQ,wDAAsB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/deepMerge.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/deepMerge.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9650020aa318b19827036eaba2a2a14739e751f7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/deepMerge.d.ts
@@ -0,0 +1,17 @@
+declare type ObjectLike<T = unknown> = Record<string, T>;
+/**
+ * Check if the variable contains an object strictly rejecting arrays
+ * @param obj an object
+ * @returns `true` if obj is an object
+ */
+declare function isObjectNotArray<T extends ObjectLike>(obj: unknown | unknown[]): obj is T;
+/**
+ * Pure function - doesn't mutate either parameter!
+ * Merges two objects together deeply, overwriting the properties in first with the properties in second
+ * @param first The first object
+ * @param second The second object
+ * @returns a new object
+ */
+export declare function deepMerge(first?: ObjectLike, second?: ObjectLike): Record<string, unknown>;
+export { isObjectNotArray };
+//# sourceMappingURL=deepMerge.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/deepMerge.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/deepMerge.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..769f39c19289e011ec6d211c37dd658a92db9806
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/deepMerge.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"deepMerge.d.ts","sourceRoot":"","sources":["../../src/eslint-utils/deepMerge.ts"],"names":[],"mappings":"AAAA,aAAK,UAAU,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAEjD;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,CAAC,SAAS,UAAU,EAC5C,GAAG,EAAE,OAAO,GAAG,OAAO,EAAE,GACvB,GAAG,IAAI,CAAC,CAEV;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,KAAK,GAAE,UAAe,EACtB,MAAM,GAAE,UAAe,GACtB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0BzB;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/deepMerge.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/deepMerge.js
new file mode 100644
index 0000000000000000000000000000000000000000..34fdffc5f453a803b836e2e5ce38bc9e026905f2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/deepMerge.js
@@ -0,0 +1,48 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isObjectNotArray = exports.deepMerge = void 0;
+/**
+ * Check if the variable contains an object strictly rejecting arrays
+ * @param obj an object
+ * @returns `true` if obj is an object
+ */
+function isObjectNotArray(obj) {
+    return typeof obj === 'object' && !Array.isArray(obj);
+}
+exports.isObjectNotArray = isObjectNotArray;
+/**
+ * Pure function - doesn't mutate either parameter!
+ * Merges two objects together deeply, overwriting the properties in first with the properties in second
+ * @param first The first object
+ * @param second The second object
+ * @returns a new object
+ */
+function deepMerge(first = {}, second = {}) {
+    // get the unique set of keys across both objects
+    const keys = new Set(Object.keys(first).concat(Object.keys(second)));
+    return Array.from(keys).reduce((acc, key) => {
+        const firstHasKey = key in first;
+        const secondHasKey = key in second;
+        const firstValue = first[key];
+        const secondValue = second[key];
+        if (firstHasKey && secondHasKey) {
+            if (isObjectNotArray(firstValue) && isObjectNotArray(secondValue)) {
+                // object type
+                acc[key] = deepMerge(firstValue, secondValue);
+            }
+            else {
+                // value type
+                acc[key] = secondValue;
+            }
+        }
+        else if (firstHasKey) {
+            acc[key] = firstValue;
+        }
+        else {
+            acc[key] = secondValue;
+        }
+        return acc;
+    }, {});
+}
+exports.deepMerge = deepMerge;
+//# sourceMappingURL=deepMerge.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/deepMerge.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/deepMerge.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..7ee4604b8705bd199d2cc3d4c569874100a64e9f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/deepMerge.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"deepMerge.js","sourceRoot":"","sources":["../../src/eslint-utils/deepMerge.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACH,SAAS,gBAAgB,CACvB,GAAwB;IAExB,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxD,CAAC;AAwCQ,4CAAgB;AAtCzB;;;;;;GAMG;AACH,SAAgB,SAAS,CACvB,QAAoB,EAAE,EACtB,SAAqB,EAAE;IAEvB,iDAAiD;IACjD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAErE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAa,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACtD,MAAM,WAAW,GAAG,GAAG,IAAI,KAAK,CAAC;QACjC,MAAM,YAAY,GAAG,GAAG,IAAI,MAAM,CAAC;QACnC,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAEhC,IAAI,WAAW,IAAI,YAAY,EAAE;YAC/B,IAAI,gBAAgB,CAAC,UAAU,CAAC,IAAI,gBAAgB,CAAC,WAAW,CAAC,EAAE;gBACjE,cAAc;gBACd,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;aAC/C;iBAAM;gBACL,aAAa;gBACb,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;aACxB;SACF;aAAM,IAAI,WAAW,EAAE;YACtB,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;SACvB;aAAM;YACL,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;SACxB;QAED,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AA7BD,8BA6BC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/getParserServices.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/getParserServices.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..98626f43e56746db4b3a495ee8d1bcd62cd41024
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/getParserServices.d.ts
@@ -0,0 +1,8 @@
+import * as TSESLint from '../ts-eslint';
+import { ParserServices } from '../ts-estree';
+/**
+ * Try to retrieve typescript parser service from context
+ */
+declare function getParserServices<TMessageIds extends string, TOptions extends readonly unknown[]>(context: Readonly<TSESLint.RuleContext<TMessageIds, TOptions>>, allowWithoutFullTypeInformation?: boolean): ParserServices;
+export { getParserServices };
+//# sourceMappingURL=getParserServices.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/getParserServices.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/getParserServices.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..52fea2c4ecf0bea4e4cb1d48890e77da7eef1b19
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/getParserServices.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"getParserServices.d.ts","sourceRoot":"","sources":["../../src/eslint-utils/getParserServices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAK9C;;GAEG;AACH,iBAAS,iBAAiB,CACxB,WAAW,SAAS,MAAM,EAC1B,QAAQ,SAAS,SAAS,OAAO,EAAE,EAEnC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,EAC9D,+BAA+B,UAAQ,GACtC,cAAc,CAuBhB;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/getParserServices.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/getParserServices.js
new file mode 100644
index 0000000000000000000000000000000000000000..09302fd8168058aaae892eb9b0a57cbfce5d2c80
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/getParserServices.js
@@ -0,0 +1,28 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getParserServices = void 0;
+const ERROR_MESSAGE = 'You have used a rule which requires parserServices to be generated. You must therefore provide a value for the "parserOptions.project" property for @typescript-eslint/parser.';
+/**
+ * Try to retrieve typescript parser service from context
+ */
+function getParserServices(context, allowWithoutFullTypeInformation = false) {
+    var _a;
+    // backwards compatibility check
+    // old versions of the parser would not return any parserServices unless parserOptions.project was set
+    if (!context.parserServices ||
+        !context.parserServices.program ||
+        !context.parserServices.esTreeNodeToTSNodeMap ||
+        !context.parserServices.tsNodeToESTreeNodeMap) {
+        throw new Error(ERROR_MESSAGE);
+    }
+    const hasFullTypeInformation = (_a = context.parserServices.hasFullTypeInformation) !== null && _a !== void 0 ? _a : 
+    /* backwards compatible */ true;
+    // if a rule requires full type information, then hard fail if it doesn't exist
+    // this forces the user to supply parserOptions.project
+    if (!hasFullTypeInformation && !allowWithoutFullTypeInformation) {
+        throw new Error(ERROR_MESSAGE);
+    }
+    return context.parserServices;
+}
+exports.getParserServices = getParserServices;
+//# sourceMappingURL=getParserServices.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/getParserServices.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/getParserServices.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..4d4012577e4f60ffdf0d8e44da78c0137c160243
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/getParserServices.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"getParserServices.js","sourceRoot":"","sources":["../../src/eslint-utils/getParserServices.ts"],"names":[],"mappings":";;;AAGA,MAAM,aAAa,GACjB,gLAAgL,CAAC;AAEnL;;GAEG;AACH,SAAS,iBAAiB,CAIxB,OAA8D,EAC9D,+BAA+B,GAAG,KAAK;;IAEvC,gCAAgC;IAChC,sGAAsG;IACtG,IACE,CAAC,OAAO,CAAC,cAAc;QACvB,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO;QAC/B,CAAC,OAAO,CAAC,cAAc,CAAC,qBAAqB;QAC7C,CAAC,OAAO,CAAC,cAAc,CAAC,qBAAqB,EAC7C;QACA,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;KAChC;IAED,MAAM,sBAAsB,SAC1B,OAAO,CAAC,cAAc,CAAC,sBAAsB;IAC7C,0BAA0B,CAAC,IAAI,CAAC;IAElC,+EAA+E;IAC/E,uDAAuD;IACvD,IAAI,CAAC,sBAAsB,IAAI,CAAC,+BAA+B,EAAE;QAC/D,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;KAChC;IAED,OAAO,OAAO,CAAC,cAAc,CAAC;AAChC,CAAC;AAEQ,8CAAiB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/index.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8cdfcb01e4b0fa8a296aacd49643e669e52a51b4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/index.d.ts
@@ -0,0 +1,8 @@
+export * from './applyDefault';
+export * from './batchedSingleLineTests';
+export * from './getParserServices';
+export * from './InferTypesFromRule';
+export * from './RuleCreator';
+export * from './RuleTester';
+export * from './deepMerge';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/index.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..7aca90d9942e4b4fd68e44147916da31048e83ad
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eslint-utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/index.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..dde280d2d52b01c9881490380e1b4c5064c288dd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/index.js
@@ -0,0 +1,20 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("./applyDefault"), exports);
+__exportStar(require("./batchedSingleLineTests"), exports);
+__exportStar(require("./getParserServices"), exports);
+__exportStar(require("./InferTypesFromRule"), exports);
+__exportStar(require("./RuleCreator"), exports);
+__exportStar(require("./RuleTester"), exports);
+__exportStar(require("./deepMerge"), exports);
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/index.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..f24be47678c0dc316d6183613bd0718f027b62ff
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/eslint-utils/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eslint-utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAA+B;AAC/B,2DAAyC;AACzC,sDAAoC;AACpC,uDAAqC;AACrC,gDAA8B;AAC9B,+CAA6B;AAC7B,8CAA4B"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/index.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b8a60a9b4467536c933902099e7ea8b53c8babc9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/index.d.ts
@@ -0,0 +1,8 @@
+import * as ASTUtils from './ast-utils';
+import * as ESLintUtils from './eslint-utils';
+import * as JSONSchema from './json-schema';
+import * as TSESLint from './ts-eslint';
+import * as TSESLintScope from './ts-eslint-scope';
+export { ASTUtils, ESLintUtils, JSONSchema, TSESLint, TSESLintScope };
+export * from './ts-estree';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/index.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..822db0741602c1f2a0120da0a12d86925f850529
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,aAAa,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;AACtE,cAAc,aAAa,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/index.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..ef12e06df9ba3929ee8bb73b9d421d807eefad8d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/index.js
@@ -0,0 +1,37 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TSESLintScope = exports.TSESLint = exports.JSONSchema = exports.ESLintUtils = exports.ASTUtils = void 0;
+const ASTUtils = __importStar(require("./ast-utils"));
+exports.ASTUtils = ASTUtils;
+const ESLintUtils = __importStar(require("./eslint-utils"));
+exports.ESLintUtils = ESLintUtils;
+const JSONSchema = __importStar(require("./json-schema"));
+exports.JSONSchema = JSONSchema;
+const TSESLint = __importStar(require("./ts-eslint"));
+exports.TSESLint = TSESLint;
+const TSESLintScope = __importStar(require("./ts-eslint-scope"));
+exports.TSESLintScope = TSESLintScope;
+__exportStar(require("./ts-estree"), exports);
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/index.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b500da1a69065320069f4a6fe881b3c6d171ea0d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAAwC;AAM/B,4BAAQ;AALjB,4DAA8C;AAK3B,kCAAW;AAJ9B,0DAA4C;AAIZ,gCAAU;AAH1C,sDAAwC;AAGI,4BAAQ;AAFpD,iEAAmD;AAEG,sCAAa;AACnE,8CAA4B"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/json-schema.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/json-schema.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bd6f29cd3e2c8c319f72fc36102516d472b71e0a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/json-schema.d.ts
@@ -0,0 +1,2 @@
+export { JSONSchema4, JSONSchema4Type, JSONSchema4TypeName, JSONSchema4Version, JSONSchema6, JSONSchema6Definition, JSONSchema6Type, JSONSchema6TypeName, JSONSchema6Version, JSONSchema7, JSONSchema7Array, JSONSchema7Definition, JSONSchema7Type, JSONSchema7TypeName, JSONSchema7Version, ValidationError, ValidationResult, } from 'json-schema';
+//# sourceMappingURL=json-schema.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/json-schema.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/json-schema.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..845788b30d9a433032e99cf22edaf6decafaf6c8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/json-schema.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../src/json-schema.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,aAAa,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/json-schema.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/json-schema.js
new file mode 100644
index 0000000000000000000000000000000000000000..289fb57ebae17fc530f139d48165262ffa5512a2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/json-schema.js
@@ -0,0 +1,6 @@
+"use strict";
+// Note - @types/json-schema@7.0.4 added some function declarations to the type package
+// If we do export *, then it will also export these function declarations.
+// This will cause typescript to not scrub the require from the build, breaking anyone who doesn't have it as a dependency
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=json-schema.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/json-schema.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/json-schema.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..51d0b026e57aed62337815d3d4416a24b8bf9868
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/json-schema.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../src/json-schema.ts"],"names":[],"mappings":";AAAA,uFAAuF;AACvF,2EAA2E;AAC3E,0HAA0H"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Definition.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Definition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bcaf94a2efd8b4f34e9f79ce30529d9fb60d6130
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Definition.d.ts
@@ -0,0 +1,19 @@
+import { TSESTree } from '../ts-estree';
+interface Definition {
+    type: string;
+    name: TSESTree.BindingName;
+    node: TSESTree.Node;
+    parent?: TSESTree.Node | null;
+    index?: number | null;
+    kind?: string | null;
+    rest?: boolean;
+}
+interface DefinitionConstructor {
+    new (type: string, name: TSESTree.BindingName | TSESTree.PropertyName, node: TSESTree.Node, parent?: TSESTree.Node | null, index?: number | null, kind?: string | null): Definition;
+}
+declare const Definition: DefinitionConstructor;
+interface ParameterDefinition extends Definition {
+}
+declare const ParameterDefinition: DefinitionConstructor & (new (name: TSESTree.Node, node: TSESTree.Node, index?: number | null | undefined, rest?: boolean | undefined) => ParameterDefinition);
+export { Definition, ParameterDefinition };
+//# sourceMappingURL=Definition.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Definition.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Definition.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..ab9c63877a701b6c9d552033b22c675eaaaed089
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Definition.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Definition.d.ts","sourceRoot":"","sources":["../../src/ts-eslint-scope/Definition.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC;IAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AACD,UAAU,qBAAqB;IAC7B,KACE,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,YAAY,EAClD,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,EAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GACnB,UAAU,CAAC;CACf;AACD,QAAA,MAAM,UAAU,uBAA4C,CAAC;AAG7D,UAAU,mBAAoB,SAAQ,UAAU;CAAG;AACnD,QAAA,MAAM,mBAAmB,sCAEf,SAAS,IAAI,QACb,SAAS,IAAI,oEAGlB,mBAAmB,CACvB,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Definition.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Definition.js
new file mode 100644
index 0000000000000000000000000000000000000000..dd3de1f5e2fe966466c5970105436a7b28fb9064
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Definition.js
@@ -0,0 +1,9 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ParameterDefinition = exports.Definition = void 0;
+const definition_1 = require("eslint-scope/lib/definition");
+const Definition = definition_1.Definition;
+exports.Definition = Definition;
+const ParameterDefinition = definition_1.ParameterDefinition;
+exports.ParameterDefinition = ParameterDefinition;
+//# sourceMappingURL=Definition.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Definition.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Definition.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..fa19c8c1422f8b2e2d5657bc6a4818e713f7d18c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Definition.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Definition.js","sourceRoot":"","sources":["../../src/ts-eslint-scope/Definition.ts"],"names":[],"mappings":";;;AAAA,4DAGqC;AAsBrC,MAAM,UAAU,GAAG,uBAAyC,CAAC;AAapD,gCAAU;AATnB,MAAM,mBAAmB,GAAG,gCAO3B,CAAC;AAEmB,kDAAmB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Options.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Options.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..48ce3c57b7b3ab94c5a151e1cae7067ac80bb92b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Options.d.ts
@@ -0,0 +1,15 @@
+import { TSESTree } from '../ts-estree';
+declare type PatternVisitorCallback = (pattern: TSESTree.Identifier, info: {
+    rest: boolean;
+    topLevel: boolean;
+    assignments: TSESTree.AssignmentPattern[];
+}) => void;
+interface PatternVisitorOptions {
+    processRightHandNodes?: boolean;
+}
+interface Visitor {
+    visitChildren<T extends TSESTree.BaseNode | undefined | null>(node?: T): void;
+    visit<T extends TSESTree.BaseNode | undefined | null>(node?: T): void;
+}
+export { PatternVisitorCallback, PatternVisitorOptions, Visitor };
+//# sourceMappingURL=Options.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Options.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Options.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..fae66aaa032fbc67623a0ff43c2581c7e3281320
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Options.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Options.d.ts","sourceRoot":"","sources":["../../src/ts-eslint-scope/Options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,aAAK,sBAAsB,GAAG,CAC5B,OAAO,EAAE,QAAQ,CAAC,UAAU,EAC5B,IAAI,EAAE;IACJ,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,QAAQ,CAAC,iBAAiB,EAAE,CAAC;CAC3C,KACE,IAAI,CAAC;AAEV,UAAU,qBAAqB;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,UAAU,OAAO;IACf,aAAa,CAAC,CAAC,SAAS,QAAQ,CAAC,QAAQ,GAAG,SAAS,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IAC9E,KAAK,CAAC,CAAC,SAAS,QAAQ,CAAC,QAAQ,GAAG,SAAS,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;CACvE;AAED,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,OAAO,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Options.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Options.js
new file mode 100644
index 0000000000000000000000000000000000000000..08cea894091b342137a0cbba3685aa7dfebd98c1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Options.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Options.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Options.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Options.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..8d8fb9ec19acd49a162da2e17e197c0078a010a2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Options.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Options.js","sourceRoot":"","sources":["../../src/ts-eslint-scope/Options.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/PatternVisitor.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/PatternVisitor.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e21224bc9227710d03e491bf10717984807c943f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/PatternVisitor.d.ts
@@ -0,0 +1,25 @@
+import { TSESTree } from '../ts-estree';
+import { ScopeManager } from './ScopeManager';
+import { PatternVisitorCallback, PatternVisitorOptions, Visitor } from './Options';
+interface PatternVisitor extends Visitor {
+    options: PatternVisitorOptions;
+    scopeManager: ScopeManager;
+    parent?: TSESTree.Node;
+    rightHandNodes: TSESTree.Node[];
+    Identifier(pattern: TSESTree.Node): void;
+    Property(property: TSESTree.Node): void;
+    ArrayPattern(pattern: TSESTree.Node): void;
+    AssignmentPattern(pattern: TSESTree.Node): void;
+    RestElement(pattern: TSESTree.Node): void;
+    MemberExpression(node: TSESTree.Node): void;
+    SpreadElement(node: TSESTree.Node): void;
+    ArrayExpression(node: TSESTree.Node): void;
+    AssignmentExpression(node: TSESTree.Node): void;
+    CallExpression(node: TSESTree.Node): void;
+}
+declare const PatternVisitor: {
+    new (options: PatternVisitorOptions, rootPattern: TSESTree.BaseNode, callback: PatternVisitorCallback): PatternVisitor;
+    isPattern(node: TSESTree.Node): boolean;
+};
+export { PatternVisitor };
+//# sourceMappingURL=PatternVisitor.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/PatternVisitor.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/PatternVisitor.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..eec5b0b10046993704aaabd606f358e7bc17c558
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/PatternVisitor.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"PatternVisitor.d.ts","sourceRoot":"","sources":["../../src/ts-eslint-scope/PatternVisitor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,OAAO,EACR,MAAM,WAAW,CAAC;AAEnB,UAAU,cAAe,SAAQ,OAAO;IACtC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC;IACvB,cAAc,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEhC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IACxC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IAC3C,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IAChD,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IAC1C,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IAC5C,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IACzC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IAC3C,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IAChD,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;CAC3C;AACD,QAAA,MAAM,cAAc;kBAEP,qBAAqB,eACjB,SAAS,QAAQ,YACpB,sBAAsB,GAC/B,cAAc;oBAGD,SAAS,IAAI,GAAG,OAAO;CACxC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/PatternVisitor.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/PatternVisitor.js
new file mode 100644
index 0000000000000000000000000000000000000000..43aa849aa75c891509de1fdfdb421d5cca7c8ecd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/PatternVisitor.js
@@ -0,0 +1,10 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.PatternVisitor = void 0;
+const pattern_visitor_1 = __importDefault(require("eslint-scope/lib/pattern-visitor"));
+const PatternVisitor = pattern_visitor_1.default;
+exports.PatternVisitor = PatternVisitor;
+//# sourceMappingURL=PatternVisitor.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/PatternVisitor.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/PatternVisitor.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e08efc85734151db04663c466fad7c575adcf015
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/PatternVisitor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"PatternVisitor.js","sourceRoot":"","sources":["../../src/ts-eslint-scope/PatternVisitor.ts"],"names":[],"mappings":";;;;;;AAAA,uFAAoE;AA0BpE,MAAM,cAAc,GAAG,yBAStB,CAAC;AAEO,wCAAc"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Reference.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Reference.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1fa796e62a2e5b4e0270a857b66830b8add6c0bc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Reference.d.ts
@@ -0,0 +1,28 @@
+import { TSESTree } from '../ts-estree';
+import { Scope } from './Scope';
+import { Variable } from './Variable';
+export declare type ReferenceFlag = 0x1 | 0x2 | 0x3;
+interface Reference {
+    identifier: TSESTree.Identifier;
+    from: Scope;
+    resolved: Variable | null;
+    writeExpr: TSESTree.Node | null;
+    init: boolean;
+    partial: boolean;
+    __maybeImplicitGlobal: boolean;
+    tainted?: boolean;
+    typeMode?: boolean;
+    isWrite(): boolean;
+    isRead(): boolean;
+    isWriteOnly(): boolean;
+    isReadOnly(): boolean;
+    isReadWrite(): boolean;
+}
+declare const Reference: {
+    new (identifier: TSESTree.Identifier, scope: Scope, flag?: 3 | 2 | 1 | undefined, writeExpr?: TSESTree.ArrayExpression | TSESTree.ArrayPattern | TSESTree.ArrowFunctionExpression | TSESTree.AssignmentExpression | TSESTree.AssignmentPattern | TSESTree.AwaitExpression | TSESTree.BigIntLiteral | TSESTree.BinaryExpression | TSESTree.BlockStatement | TSESTree.BreakStatement | TSESTree.CallExpression | TSESTree.CatchClause | TSESTree.ChainExpression | TSESTree.ClassBody | TSESTree.ClassDeclaration | TSESTree.ClassExpression | TSESTree.ClassPropertyComputedName | TSESTree.ClassPropertyNonComputedName | TSESTree.ConditionalExpression | TSESTree.ContinueStatement | TSESTree.DebuggerStatement | TSESTree.Decorator | TSESTree.DoWhileStatement | TSESTree.EmptyStatement | TSESTree.ExportAllDeclaration | TSESTree.ExportDefaultDeclaration | TSESTree.ExportNamedDeclaration | TSESTree.ExportSpecifier | TSESTree.ExpressionStatement | TSESTree.ForInStatement | TSESTree.ForOfStatement | TSESTree.ForStatement | TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.Identifier | TSESTree.IfStatement | TSESTree.ImportDeclaration | TSESTree.ImportDefaultSpecifier | TSESTree.ImportExpression | TSESTree.ImportNamespaceSpecifier | TSESTree.ImportSpecifier | TSESTree.JSXAttribute | TSESTree.JSXClosingElement | TSESTree.JSXClosingFragment | TSESTree.JSXElement | TSESTree.JSXEmptyExpression | TSESTree.JSXExpressionContainer | TSESTree.JSXFragment | TSESTree.JSXIdentifier | TSESTree.JSXMemberExpression | TSESTree.JSXOpeningElement | TSESTree.JSXOpeningFragment | TSESTree.JSXSpreadAttribute | TSESTree.JSXSpreadChild | TSESTree.JSXText | TSESTree.LabeledStatement | TSESTree.BooleanLiteral | TSESTree.NumberLiteral | TSESTree.NullLiteral | TSESTree.RegExpLiteral | TSESTree.StringLiteral | TSESTree.LogicalExpression | TSESTree.MemberExpressionComputedName | TSESTree.MemberExpressionNonComputedName | TSESTree.MetaProperty | TSESTree.MethodDefinitionComputedName | TSESTree.MethodDefinitionNonComputedName | TSESTree.NewExpression | TSESTree.ObjectExpression | TSESTree.ObjectPattern | TSESTree.Program | TSESTree.PropertyComputedName | TSESTree.PropertyNonComputedName | TSESTree.RestElement | TSESTree.ReturnStatement | TSESTree.SequenceExpression | TSESTree.SpreadElement | TSESTree.Super | TSESTree.SwitchCase | TSESTree.SwitchStatement | TSESTree.TaggedTemplateExpression | TSESTree.TemplateElement | TSESTree.TemplateLiteral | TSESTree.ThisExpression | TSESTree.ThrowStatement | TSESTree.TryStatement | TSESTree.TSAbstractClassPropertyComputedName | TSESTree.TSAbstractClassPropertyNonComputedName | TSESTree.TSAbstractKeyword | TSESTree.TSAbstractMethodDefinitionComputedName | TSESTree.TSAbstractMethodDefinitionNonComputedName | TSESTree.TSAnyKeyword | TSESTree.TSArrayType | TSESTree.TSAsExpression | TSESTree.TSAsyncKeyword | TSESTree.TSBigIntKeyword | TSESTree.TSBooleanKeyword | TSESTree.TSCallSignatureDeclaration | TSESTree.TSClassImplements | TSESTree.TSConditionalType | TSESTree.TSConstructorType | TSESTree.TSConstructSignatureDeclaration | TSESTree.TSDeclareFunction | TSESTree.TSDeclareKeyword | TSESTree.TSEmptyBodyFunctionExpression | TSESTree.TSEnumDeclaration | TSESTree.TSEnumMemberComputedName | TSESTree.TSEnumMemberNonComputedName | TSESTree.TSExportAssignment | TSESTree.TSExportKeyword | TSESTree.TSExternalModuleReference | TSESTree.TSFunctionType | TSESTree.TSImportEqualsDeclaration | TSESTree.TSImportType | TSESTree.TSIndexedAccessType | TSESTree.TSIndexSignature | TSESTree.TSInferType | TSESTree.TSInterfaceBody | TSESTree.TSInterfaceDeclaration | TSESTree.TSInterfaceHeritage | TSESTree.TSIntersectionType | TSESTree.TSLiteralType | TSESTree.TSMappedType | TSESTree.TSMethodSignatureComputedName | TSESTree.TSMethodSignatureNonComputedName | TSESTree.TSModuleBlock | TSESTree.TSModuleDeclaration | TSESTree.TSNamedTupleMember | TSESTree.TSNamespaceExportDeclaration | TSESTree.TSNeverKeyword | TSESTree.TSNonNullExpression | TSESTree.TSNullKeyword | TSESTree.TSNumberKeyword | TSESTree.TSObjectKeyword | TSESTree.TSOptionalType | TSESTree.TSParameterProperty | TSESTree.TSParenthesizedType | TSESTree.TSPrivateKeyword | TSESTree.TSPropertySignatureComputedName | TSESTree.TSPropertySignatureNonComputedName | TSESTree.TSProtectedKeyword | TSESTree.TSPublicKeyword | TSESTree.TSQualifiedName | TSESTree.TSReadonlyKeyword | TSESTree.TSRestType | TSESTree.TSStaticKeyword | TSESTree.TSStringKeyword | TSESTree.TSSymbolKeyword | TSESTree.TSTemplateLiteralType | TSESTree.TSThisType | TSESTree.TSTupleType | TSESTree.TSTypeAliasDeclaration | TSESTree.TSTypeAnnotation | TSESTree.TSTypeAssertion | TSESTree.TSTypeLiteral | TSESTree.TSTypeOperator | TSESTree.TSTypeParameter | TSESTree.TSTypeParameterDeclaration | TSESTree.TSTypeParameterInstantiation | TSESTree.TSTypePredicate | TSESTree.TSTypeQuery | TSESTree.TSTypeReference | TSESTree.TSUndefinedKeyword | TSESTree.TSUnionType | TSESTree.TSUnknownKeyword | TSESTree.TSVoidKeyword | TSESTree.UnaryExpression | TSESTree.UpdateExpression | TSESTree.VariableDeclaration | TSESTree.VariableDeclarator | TSESTree.WhileStatement | TSESTree.WithStatement | TSESTree.YieldExpression | null | undefined, maybeImplicitGlobal?: boolean | undefined, partial?: boolean | undefined, init?: boolean | undefined): Reference;
+    READ: 0x1;
+    WRITE: 0x2;
+    RW: 0x3;
+};
+export { Reference };
+//# sourceMappingURL=Reference.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Reference.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Reference.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..18822e6f368ab911e67603659db31e962b940016
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Reference.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Reference.d.ts","sourceRoot":"","sources":["../../src/ts-eslint-scope/Reference.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,oBAAY,aAAa,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE5C,UAAU,SAAS;IACjB,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAChC,IAAI,EAAE,KAAK,CAAC;IACZ,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IAEd,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,OAAO,IAAI,OAAO,CAAC;IACnB,MAAM,IAAI,OAAO,CAAC;IAClB,WAAW,IAAI,OAAO,CAAC;IACvB,UAAU,IAAI,OAAO,CAAC;IACtB,WAAW,IAAI,OAAO,CAAC;CACxB;AACD,QAAA,MAAM,SAAS;qBAEC,SAAS,UAAU,SACxB,KAAK,4nKAMX,SAAS;UAEN,GAAG;WACF,GAAG;QACN,GAAG;CACR,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Reference.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Reference.js
new file mode 100644
index 0000000000000000000000000000000000000000..71a4559afcbd7c3741e595b763f174a37b2ecf0d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Reference.js
@@ -0,0 +1,10 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Reference = void 0;
+const reference_1 = __importDefault(require("eslint-scope/lib/reference"));
+const Reference = reference_1.default;
+exports.Reference = Reference;
+//# sourceMappingURL=Reference.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Reference.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Reference.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..8b1c95b4aa617b244348e07ca81ffb36b2b8153e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Reference.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Reference.js","sourceRoot":"","sources":["../../src/ts-eslint-scope/Reference.ts"],"names":[],"mappings":";;;;;;AAAA,2EAAyD;AAyBzD,MAAM,SAAS,GAAG,mBAcjB,CAAC;AAEO,8BAAS"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Referencer.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Referencer.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..beeb2888dcb1d9264bd110b3e17689e0aada1386
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Referencer.d.ts
@@ -0,0 +1,55 @@
+import { TSESTree } from '../ts-estree';
+import { PatternVisitorCallback, PatternVisitorOptions, Visitor } from './Options';
+import { Scope } from './Scope';
+import { ScopeManager } from './ScopeManager';
+interface Referencer<SM extends ScopeManager> extends Visitor {
+    isInnerMethodDefinition: boolean;
+    options: any;
+    scopeManager: SM;
+    parent?: TSESTree.Node;
+    currentScope(): Scope;
+    close(node: TSESTree.Node): void;
+    pushInnerMethodDefinition(isInnerMethodDefinition: boolean): boolean;
+    popInnerMethodDefinition(isInnerMethodDefinition: boolean): void;
+    referencingDefaultValue(pattern: any, assignments: any, maybeImplicitGlobal: any, init: boolean): void;
+    visitPattern(node: TSESTree.Node, options: PatternVisitorOptions, callback: PatternVisitorCallback): void;
+    visitFunction(node: TSESTree.Node): void;
+    visitClass(node: TSESTree.Node): void;
+    visitProperty(node: TSESTree.Node): void;
+    visitForIn(node: TSESTree.Node): void;
+    visitVariableDeclaration(variableTargetScope: any, type: any, node: TSESTree.Node, index: any): void;
+    AssignmentExpression(node: TSESTree.Node): void;
+    CatchClause(node: TSESTree.Node): void;
+    Program(node: TSESTree.Program): void;
+    Identifier(node: TSESTree.Identifier): void;
+    UpdateExpression(node: TSESTree.Node): void;
+    MemberExpression(node: TSESTree.Node): void;
+    Property(node: TSESTree.Node): void;
+    MethodDefinition(node: TSESTree.Node): void;
+    BreakStatement(): void;
+    ContinueStatement(): void;
+    LabeledStatement(node: TSESTree.Node): void;
+    ForStatement(node: TSESTree.Node): void;
+    ClassExpression(node: TSESTree.Node): void;
+    ClassDeclaration(node: TSESTree.Node): void;
+    CallExpression(node: TSESTree.Node): void;
+    BlockStatement(node: TSESTree.Node): void;
+    ThisExpression(): void;
+    WithStatement(node: TSESTree.Node): void;
+    VariableDeclaration(node: TSESTree.Node): void;
+    SwitchStatement(node: TSESTree.Node): void;
+    FunctionDeclaration(node: TSESTree.Node): void;
+    FunctionExpression(node: TSESTree.Node): void;
+    ForOfStatement(node: TSESTree.Node): void;
+    ForInStatement(node: TSESTree.Node): void;
+    ArrowFunctionExpression(node: TSESTree.Node): void;
+    ImportDeclaration(node: TSESTree.Node): void;
+    visitExportDeclaration(node: TSESTree.Node): void;
+    ExportDeclaration(node: TSESTree.Node): void;
+    ExportNamedDeclaration(node: TSESTree.Node): void;
+    ExportSpecifier(node: TSESTree.Node): void;
+    MetaProperty(): void;
+}
+declare const Referencer: new <SM extends ScopeManager>(options: any, scopeManager: SM) => Referencer<SM>;
+export { Referencer };
+//# sourceMappingURL=Referencer.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Referencer.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Referencer.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..37a11bf7ec6d2a48ccadbed614aa1dd17ae7446b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Referencer.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Referencer.d.ts","sourceRoot":"","sources":["../../src/ts-eslint-scope/Referencer.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Referencer.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Referencer.js
new file mode 100644
index 0000000000000000000000000000000000000000..4aafa5aa5da8b2f9de007cc8b5ac82946b35ed20
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Referencer.js
@@ -0,0 +1,11 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Referencer = void 0;
+/* eslint-disable @typescript-eslint/no-explicit-any */
+const referencer_1 = __importDefault(require("eslint-scope/lib/referencer"));
+const Referencer = referencer_1.default;
+exports.Referencer = Referencer;
+//# sourceMappingURL=Referencer.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Referencer.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Referencer.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..2d80e28d5a318afbd3a1400ea6116c0643030483
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Referencer.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Referencer.js","sourceRoot":"","sources":["../../src/ts-eslint-scope/Referencer.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAuD;AACvD,6EAA2D;AA2E3D,MAAM,UAAU,GAAG,oBAElB,CAAC;AAEO,gCAAU"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Scope.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Scope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ae6bd11445d6766e018da4d0a364ccbe6da2b523
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Scope.d.ts
@@ -0,0 +1,103 @@
+import { TSESTree } from '../ts-estree';
+import { Definition } from './Definition';
+import { Reference, ReferenceFlag } from './Reference';
+import { ScopeManager } from './ScopeManager';
+import { Variable } from './Variable';
+declare type ScopeType = 'block' | 'catch' | 'class' | 'for' | 'function' | 'function-expression-name' | 'global' | 'module' | 'switch' | 'with' | 'TDZ' | 'enum' | 'empty-function';
+interface Scope {
+    type: ScopeType;
+    isStrict: boolean;
+    upper: Scope | null;
+    childScopes: Scope[];
+    variableScope: Scope;
+    block: TSESTree.Node;
+    variables: Variable[];
+    set: Map<string, Variable>;
+    references: Reference[];
+    through: Reference[];
+    thisFound?: boolean;
+    taints: Map<string, boolean>;
+    functionExpressionScope: boolean;
+    __left: Reference[];
+    __shouldStaticallyClose(scopeManager: ScopeManager): boolean;
+    __shouldStaticallyCloseForGlobal(ref: any): boolean;
+    __staticCloseRef(ref: any): void;
+    __dynamicCloseRef(ref: any): void;
+    __globalCloseRef(ref: any): void;
+    __close(scopeManager: ScopeManager): Scope;
+    __isValidResolution(ref: any, variable: any): variable is Variable;
+    __resolve(ref: Reference): boolean;
+    __delegateToUpperScope(ref: any): void;
+    __addDeclaredVariablesOfNode(variable: any, node: TSESTree.Node): void;
+    __defineGeneric(name: string, set: Map<string, Variable>, variables: Variable[], node: TSESTree.Identifier, def: Definition): void;
+    __define(node: TSESTree.Node, def: Definition): void;
+    __referencing(node: TSESTree.Node, assign?: ReferenceFlag, writeExpr?: TSESTree.Node, maybeImplicitGlobal?: any, partial?: any, init?: any): void;
+    __detectEval(): void;
+    __detectThis(): void;
+    __isClosed(): boolean;
+    /**
+     * returns resolved {Reference}
+     * @method Scope#resolve
+     * @param {Espree.Identifier} ident - identifier to be resolved.
+     * @returns {Reference} reference
+     */
+    resolve(ident: TSESTree.Node): Reference;
+    /**
+     * returns this scope is static
+     * @method Scope#isStatic
+     * @returns {boolean} static
+     */
+    isStatic(): boolean;
+    /**
+     * returns this scope has materialized arguments
+     * @method Scope#isArgumentsMaterialized
+     * @returns {boolean} arguments materialized
+     */
+    isArgumentsMaterialized(): boolean;
+    /**
+     * returns this scope has materialized `this` reference
+     * @method Scope#isThisMaterialized
+     * @returns {boolean} this materialized
+     */
+    isThisMaterialized(): boolean;
+    isUsedName(name: any): boolean;
+}
+interface ScopeConstructor {
+    new (scopeManager: ScopeManager, type: ScopeType, upperScope: Scope | null, block: TSESTree.Node | null, isMethodDefinition: boolean): Scope;
+}
+declare const Scope: ScopeConstructor;
+interface ScopeChildConstructorWithUpperScope<T> {
+    new (scopeManager: ScopeManager, upperScope: Scope, block: TSESTree.Node | null): T;
+}
+interface GlobalScope extends Scope {
+}
+declare const GlobalScope: ScopeConstructor & (new (scopeManager: ScopeManager, block: TSESTree.Node | null) => GlobalScope);
+interface ModuleScope extends Scope {
+}
+declare const ModuleScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<ModuleScope>;
+interface FunctionExpressionNameScope extends Scope {
+}
+declare const FunctionExpressionNameScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<FunctionExpressionNameScope>;
+interface CatchScope extends Scope {
+}
+declare const CatchScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<CatchScope>;
+interface WithScope extends Scope {
+}
+declare const WithScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<WithScope>;
+interface BlockScope extends Scope {
+}
+declare const BlockScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<BlockScope>;
+interface SwitchScope extends Scope {
+}
+declare const SwitchScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<SwitchScope>;
+interface FunctionScope extends Scope {
+}
+declare const FunctionScope: ScopeConstructor & (new (scopeManager: ScopeManager, upperScope: Scope, block: TSESTree.Node | null, isMethodDefinition: boolean) => FunctionScope);
+interface ForScope extends Scope {
+}
+declare const ForScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<ForScope>;
+interface ClassScope extends Scope {
+}
+declare const ClassScope: ScopeConstructor & ScopeChildConstructorWithUpperScope<ClassScope>;
+export { ScopeType, Scope, GlobalScope, ModuleScope, FunctionExpressionNameScope, CatchScope, WithScope, BlockScope, SwitchScope, FunctionScope, ForScope, ClassScope, };
+//# sourceMappingURL=Scope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Scope.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Scope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..8b6f342ec77da9d4596cb680436fb25adf71b69c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Scope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Scope.d.ts","sourceRoot":"","sources":["../../src/ts-eslint-scope/Scope.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Scope.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Scope.js
new file mode 100644
index 0000000000000000000000000000000000000000..f4f604fcb5ea215f68a83b7a6e672a91a9d34f4a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Scope.js
@@ -0,0 +1,28 @@
+"use strict";
+/* eslint-disable @typescript-eslint/no-empty-interface, @typescript-eslint/no-explicit-any */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ClassScope = exports.ForScope = exports.FunctionScope = exports.SwitchScope = exports.BlockScope = exports.WithScope = exports.CatchScope = exports.FunctionExpressionNameScope = exports.ModuleScope = exports.GlobalScope = exports.Scope = void 0;
+const scope_1 = require("eslint-scope/lib/scope");
+const Scope = scope_1.Scope;
+exports.Scope = Scope;
+const GlobalScope = scope_1.GlobalScope;
+exports.GlobalScope = GlobalScope;
+const ModuleScope = scope_1.ModuleScope;
+exports.ModuleScope = ModuleScope;
+const FunctionExpressionNameScope = scope_1.FunctionExpressionNameScope;
+exports.FunctionExpressionNameScope = FunctionExpressionNameScope;
+const CatchScope = scope_1.CatchScope;
+exports.CatchScope = CatchScope;
+const WithScope = scope_1.WithScope;
+exports.WithScope = WithScope;
+const BlockScope = scope_1.BlockScope;
+exports.BlockScope = BlockScope;
+const SwitchScope = scope_1.SwitchScope;
+exports.SwitchScope = SwitchScope;
+const FunctionScope = scope_1.FunctionScope;
+exports.FunctionScope = FunctionScope;
+const ForScope = scope_1.ForScope;
+exports.ForScope = ForScope;
+const ClassScope = scope_1.ClassScope;
+exports.ClassScope = ClassScope;
+//# sourceMappingURL=Scope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Scope.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Scope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b0d79696efdb6f628d06293a2d0d8dea16d4aabd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Scope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Scope.js","sourceRoot":"","sources":["../../src/ts-eslint-scope/Scope.ts"],"names":[],"mappings":";AAAA,8FAA8F;;;AAE9F,kDAYgC;AA8GhC,MAAM,KAAK,GAAG,aAA+B,CAAC;AA2D5C,sBAAK;AAhDP,MAAM,WAAW,GAAG,mBAEnB,CAAC;AA+CA,kCAAW;AA5Cb,MAAM,WAAW,GAAG,mBAC8B,CAAC;AA4CjD,kCAAW;AAzCb,MAAM,2BAA2B,GAAG,mCAC8B,CAAC;AAyCjE,kEAA2B;AAtC7B,MAAM,UAAU,GAAG,kBAC8B,CAAC;AAsChD,gCAAU;AAnCZ,MAAM,SAAS,GAAG,iBAC8B,CAAC;AAmC/C,8BAAS;AAhCX,MAAM,UAAU,GAAG,kBAC8B,CAAC;AAgChD,gCAAU;AA7BZ,MAAM,WAAW,GAAG,mBAC8B,CAAC;AA6BjD,kCAAW;AA1Bb,MAAM,aAAa,GAAG,qBAOrB,CAAC;AAoBA,sCAAa;AAjBf,MAAM,QAAQ,GAAG,gBAC8B,CAAC;AAiB9C,4BAAQ;AAdV,MAAM,UAAU,GAAG,kBAC8B,CAAC;AAchD,gCAAU"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/ScopeManager.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/ScopeManager.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9b7e929a287100c5497909969cd135025e2a5264
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/ScopeManager.d.ts
@@ -0,0 +1,50 @@
+import { TSESTree } from '../ts-estree';
+import { EcmaVersion } from '../ts-eslint';
+import { Scope } from './Scope';
+import { Variable } from './Variable';
+interface ScopeManagerOptions {
+    directive?: boolean;
+    optimistic?: boolean;
+    ignoreEval?: boolean;
+    nodejsScope?: boolean;
+    sourceType?: 'module' | 'script';
+    impliedStrict?: boolean;
+    ecmaVersion?: EcmaVersion;
+}
+interface ScopeManager {
+    __options: ScopeManagerOptions;
+    __currentScope: Scope;
+    __nodeToScope: WeakMap<TSESTree.Node, Scope[]>;
+    __declaredVariables: WeakMap<TSESTree.Node, Variable[]>;
+    scopes: Scope[];
+    globalScope: Scope;
+    __useDirective(): boolean;
+    __isOptimistic(): boolean;
+    __ignoreEval(): boolean;
+    __isNodejsScope(): boolean;
+    isModule(): boolean;
+    isImpliedStrict(): boolean;
+    isStrictModeSupported(): boolean;
+    __get(node: TSESTree.Node): Scope | undefined;
+    getDeclaredVariables(node: TSESTree.Node): Variable[];
+    acquire(node: TSESTree.Node, inner?: boolean): Scope | null;
+    acquireAll(node: TSESTree.Node): Scope | null;
+    release(node: TSESTree.Node, inner?: boolean): Scope | null;
+    attach(): void;
+    detach(): void;
+    __nestScope<T extends Scope>(scope: T): T;
+    __nestGlobalScope(node: TSESTree.Node): Scope;
+    __nestBlockScope(node: TSESTree.Node): Scope;
+    __nestFunctionScope(node: TSESTree.Node, isMethodDefinition: boolean): Scope;
+    __nestForScope(node: TSESTree.Node): Scope;
+    __nestCatchScope(node: TSESTree.Node): Scope;
+    __nestWithScope(node: TSESTree.Node): Scope;
+    __nestClassScope(node: TSESTree.Node): Scope;
+    __nestSwitchScope(node: TSESTree.Node): Scope;
+    __nestModuleScope(node: TSESTree.Node): Scope;
+    __nestFunctionExpressionNameScope(node: TSESTree.Node): Scope;
+    __isES6(): boolean;
+}
+declare const ScopeManager: new (options: ScopeManagerOptions) => ScopeManager;
+export { ScopeManager, ScopeManagerOptions };
+//# sourceMappingURL=ScopeManager.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/ScopeManager.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/ScopeManager.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..7c9ba533ef24fec44281480003377de564ca257f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/ScopeManager.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ScopeManager.d.ts","sourceRoot":"","sources":["../../src/ts-eslint-scope/ScopeManager.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/ScopeManager.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/ScopeManager.js
new file mode 100644
index 0000000000000000000000000000000000000000..c886eb72ff49644b43a6ee836495ae0e29bfe10b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/ScopeManager.js
@@ -0,0 +1,10 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ScopeManager = void 0;
+const scope_manager_1 = __importDefault(require("eslint-scope/lib/scope-manager"));
+const ScopeManager = scope_manager_1.default;
+exports.ScopeManager = ScopeManager;
+//# sourceMappingURL=ScopeManager.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/ScopeManager.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/ScopeManager.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..35d90d13cb0ee44ad88cac63759b8398d35b0f97
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/ScopeManager.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ScopeManager.js","sourceRoot":"","sources":["../../src/ts-eslint-scope/ScopeManager.ts"],"names":[],"mappings":";;;;;;AAAA,mFAAgE;AAwDhE,MAAM,YAAY,GAAG,uBAEpB,CAAC;AAEO,oCAAY"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Variable.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Variable.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a5d6ddff6cc50a9f3757857f0f346c9d262ad104
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Variable.d.ts
@@ -0,0 +1,17 @@
+import { TSESTree } from '../ts-estree';
+import { Reference } from './Reference';
+import { Definition } from './Definition';
+import { Scope } from './Scope';
+interface Variable {
+    name: string;
+    identifiers: TSESTree.Identifier[];
+    references: Reference[];
+    defs: Definition[];
+    eslintUsed?: boolean;
+    stack?: unknown;
+    tainted?: boolean;
+    scope?: Scope;
+}
+declare const Variable: new () => Variable;
+export { Variable };
+//# sourceMappingURL=Variable.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Variable.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Variable.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..604e18552881a4df86af27a84009d42332fe4894
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Variable.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Variable.d.ts","sourceRoot":"","sources":["../../src/ts-eslint-scope/Variable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;IACnC,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,QAAA,MAAM,QAAQ,YACJ,QACT,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Variable.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Variable.js
new file mode 100644
index 0000000000000000000000000000000000000000..c0fdac2b3f1e8b4e375560c227a1af6cc8d33b17
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Variable.js
@@ -0,0 +1,10 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Variable = void 0;
+const variable_1 = __importDefault(require("eslint-scope/lib/variable"));
+const Variable = variable_1.default;
+exports.Variable = Variable;
+//# sourceMappingURL=Variable.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Variable.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Variable.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..d6545bb0b839994d5a9fda062187b0974296b9f8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/Variable.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Variable.js","sourceRoot":"","sources":["../../src/ts-eslint-scope/Variable.ts"],"names":[],"mappings":";;;;;;AAAA,yEAAuD;AAiBvD,MAAM,QAAQ,GAAG,kBAEhB,CAAC;AAEO,4BAAQ"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/analyze.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/analyze.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dbcb76bb2885ad57aec78eba0b3eaedcf236e491
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/analyze.d.ts
@@ -0,0 +1,16 @@
+import { EcmaVersion } from '../ts-eslint';
+import { TSESTree } from '../ts-estree';
+import { ScopeManager } from './ScopeManager';
+interface AnalysisOptions {
+    optimistic?: boolean;
+    directive?: boolean;
+    ignoreEval?: boolean;
+    nodejsScope?: boolean;
+    impliedStrict?: boolean;
+    fallback?: string | ((node: TSESTree.Node) => string[]);
+    sourceType?: 'script' | 'module';
+    ecmaVersion?: EcmaVersion;
+}
+declare const analyze: (ast: TSESTree.Node, options?: AnalysisOptions | undefined) => ScopeManager;
+export { analyze, AnalysisOptions };
+//# sourceMappingURL=analyze.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/analyze.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/analyze.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..9a3654b6fe769627667e5ee16a9853bcc14bf5d6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/analyze.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/ts-eslint-scope/analyze.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,UAAU,eAAe;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC;IACxD,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACjC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AACD,QAAA,MAAM,OAAO,QACN,SAAS,IAAI,4CAEf,YAAY,CAAC;AAElB,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/analyze.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/analyze.js
new file mode 100644
index 0000000000000000000000000000000000000000..7fddff179a6b5bed6a658302b42abe28e3b266a5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/analyze.js
@@ -0,0 +1,7 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.analyze = void 0;
+const eslint_scope_1 = require("eslint-scope");
+const analyze = eslint_scope_1.analyze;
+exports.analyze = analyze;
+//# sourceMappingURL=analyze.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/analyze.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/analyze.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..f015cc4ef09284bbb3e97ddc41c73321ea0b0d81
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/analyze.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/ts-eslint-scope/analyze.ts"],"names":[],"mappings":";;;AAAA,+CAAwD;AAexD,MAAM,OAAO,GAAG,sBAGC,CAAC;AAET,0BAAO"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/index.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c795b88d29eddfe5eb8f98f820016b22926512dc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/index.d.ts
@@ -0,0 +1,11 @@
+export * from './analyze';
+export * from './Definition';
+export * from './Options';
+export * from './PatternVisitor';
+export * from './Reference';
+export * from './Referencer';
+export * from './Scope';
+export * from './ScopeManager';
+export * from './Variable';
+export declare const version: string;
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/index.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..26afd66cfe6cc6b8a8000cee73c3611734e6c173
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ts-eslint-scope/index.ts"],"names":[],"mappings":"AAEA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,eAAO,MAAM,OAAO,EAAE,MAAsB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/index.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..34d3243cf14142ab0f7bbf46db46b4896eb8ef77
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/index.js
@@ -0,0 +1,25 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.version = void 0;
+const eslint_scope_1 = require("eslint-scope");
+__exportStar(require("./analyze"), exports);
+__exportStar(require("./Definition"), exports);
+__exportStar(require("./Options"), exports);
+__exportStar(require("./PatternVisitor"), exports);
+__exportStar(require("./Reference"), exports);
+__exportStar(require("./Referencer"), exports);
+__exportStar(require("./Scope"), exports);
+__exportStar(require("./ScopeManager"), exports);
+__exportStar(require("./Variable"), exports);
+exports.version = eslint_scope_1.version;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/index.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..8872a9fbd1b06f21a8edb9f052bacba080dfbe78
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint-scope/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ts-eslint-scope/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,+CAAwD;AAExD,4CAA0B;AAC1B,+CAA6B;AAC7B,4CAA0B;AAC1B,mDAAiC;AACjC,8CAA4B;AAC5B,+CAA6B;AAC7B,0CAAwB;AACxB,iDAA+B;AAC/B,6CAA2B;AACd,QAAA,OAAO,GAAW,sBAAa,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/AST.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/AST.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..88d63790172f56ff485738da1599ee66635b29b5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/AST.d.ts
@@ -0,0 +1,9 @@
+import { TSESTree, AST_TOKEN_TYPES } from '../ts-estree';
+declare namespace AST {
+    type TokenType = AST_TOKEN_TYPES;
+    type Token = TSESTree.Token;
+    type SourceLocation = TSESTree.SourceLocation;
+    type Range = TSESTree.Range;
+}
+export { AST };
+//# sourceMappingURL=AST.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/AST.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/AST.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..8dca544ba2f3b9d62b8749228e6771a9ae20fe2d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/AST.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"AST.d.ts","sourceRoot":"","sources":["../../src/ts-eslint/AST.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEzD,kBAAU,GAAG,CAAC;IACZ,KAAY,SAAS,GAAG,eAAe,CAAC;IAExC,KAAY,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAEnC,KAAY,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;IAErD,KAAY,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;CACpC;AAED,OAAO,EAAE,GAAG,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/AST.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/AST.js
new file mode 100644
index 0000000000000000000000000000000000000000..323ed556304b3ab8904e95983711446b9fccb46c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/AST.js
@@ -0,0 +1,4 @@
+"use strict";
+/* eslint-disable @typescript-eslint/no-namespace */
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=AST.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/AST.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/AST.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..2aa7f04b435187948606560adf3a824daa14c49e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/AST.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"AST.js","sourceRoot":"","sources":["../../src/ts-eslint/AST.ts"],"names":[],"mappings":";AAAA,oDAAoD"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/CLIEngine.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/CLIEngine.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f996162e0f232e50695f2c32988f2eedf3d84b2f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/CLIEngine.d.ts
@@ -0,0 +1,143 @@
+import { Linter } from './Linter';
+import { RuleListener, RuleMetaData, RuleModule } from './Rule';
+declare class CLIEngineBase {
+    /**
+     * Creates a new instance of the core CLI engine.
+     * @param providedOptions The options for this instance.
+     */
+    constructor(options: CLIEngine.Options);
+    /**
+     * Add a plugin by passing its configuration
+     * @param name Name of the plugin.
+     * @param pluginObject Plugin configuration object.
+     */
+    addPlugin(name: string, pluginObject: Linter.Plugin): void;
+    /**
+     * Executes the current configuration on an array of file and directory names.
+     * @param patterns An array of file and directory names.
+     * @returns The results for all files that were linted.
+     */
+    executeOnFiles(patterns: string[]): CLIEngine.LintReport;
+    /**
+     * Executes the current configuration on text.
+     * @param text A string of JavaScript code to lint.
+     * @param filename An optional string representing the texts filename.
+     * @param warnIgnored Always warn when a file is ignored
+     * @returns The results for the linting.
+     */
+    executeOnText(text: string, filename?: string, warnIgnored?: boolean): CLIEngine.LintReport;
+    /**
+     * Returns a configuration object for the given file based on the CLI options.
+     * This is the same logic used by the ESLint CLI executable to determine configuration for each file it processes.
+     * @param filePath The path of the file to retrieve a config object for.
+     * @returns A configuration object for the file.
+     */
+    getConfigForFile(filePath: string): Linter.Config;
+    /**
+     * Returns the formatter representing the given format.
+     * @param format The name of the format to load or the path to a custom formatter.
+     * @returns The formatter function.
+     */
+    getFormatter(format?: string): CLIEngine.Formatter;
+    /**
+     * Checks if a given path is ignored by ESLint.
+     * @param filePath The path of the file to check.
+     * @returns Whether or not the given path is ignored.
+     */
+    isPathIgnored(filePath: string): boolean;
+    /**
+     * Resolves the patterns passed into `executeOnFiles()` into glob-based patterns for easier handling.
+     * @param patterns The file patterns passed on the command line.
+     * @returns The equivalent glob patterns.
+     */
+    resolveFileGlobPatterns(patterns: string[]): string[];
+    getRules<TMessageIds extends string = string, TOptions extends readonly unknown[] = unknown[], TRuleListener extends RuleListener = RuleListener>(): Map<string, RuleModule<TMessageIds, TOptions, TRuleListener>>;
+    /**
+     * Returns results that only contains errors.
+     * @param results The results to filter.
+     * @returns The filtered results.
+     */
+    static getErrorResults(results: CLIEngine.LintResult[]): CLIEngine.LintResult[];
+    /**
+     * Returns the formatter representing the given format or null if the `format` is not a string.
+     * @param format The name of the format to load or the path to a custom formatter.
+     * @returns The formatter function.
+     */
+    static getFormatter(format?: string): CLIEngine.Formatter;
+    /**
+     * Outputs fixes from the given results to files.
+     * @param report The report object created by CLIEngine.
+     */
+    static outputFixes(report: CLIEngine.LintReport): void;
+    static version: string;
+}
+declare namespace CLIEngine {
+    interface Options {
+        allowInlineConfig?: boolean;
+        baseConfig?: false | {
+            [name: string]: unknown;
+        };
+        cache?: boolean;
+        cacheFile?: string;
+        cacheLocation?: string;
+        configFile?: string;
+        cwd?: string;
+        envs?: string[];
+        errorOnUnmatchedPattern?: boolean;
+        extensions?: string[];
+        fix?: boolean;
+        globals?: string[];
+        ignore?: boolean;
+        ignorePath?: string;
+        ignorePattern?: string | string[];
+        useEslintrc?: boolean;
+        parser?: string;
+        parserOptions?: Linter.ParserOptions;
+        plugins?: string[];
+        resolvePluginsRelativeTo?: string;
+        rules?: {
+            [name: string]: Linter.RuleLevel | Linter.RuleLevelAndOptions;
+        };
+        rulePaths?: string[];
+        reportUnusedDisableDirectives?: boolean;
+    }
+    interface LintResult {
+        filePath: string;
+        messages: Linter.LintMessage[];
+        errorCount: number;
+        warningCount: number;
+        fixableErrorCount: number;
+        fixableWarningCount: number;
+        output?: string;
+        source?: string;
+    }
+    interface LintReport {
+        results: LintResult[];
+        errorCount: number;
+        warningCount: number;
+        fixableErrorCount: number;
+        fixableWarningCount: number;
+        usedDeprecatedRules: DeprecatedRuleUse[];
+    }
+    interface DeprecatedRuleUse {
+        ruleId: string;
+        replacedBy: string[];
+    }
+    interface LintResultData<TMessageIds extends string> {
+        rulesMeta: {
+            [ruleId: string]: RuleMetaData<TMessageIds>;
+        };
+    }
+    type Formatter = <TMessageIds extends string>(results: LintResult[], data?: LintResultData<TMessageIds>) => string;
+}
+declare const CLIEngine_base: typeof CLIEngineBase;
+/**
+ * The underlying utility that runs the ESLint command line interface. This object will read the filesystem for
+ * configuration and file information but will not output any results. Instead, it allows you direct access to the
+ * important information so you can deal with the output yourself.
+ * @deprecated use the ESLint class instead
+ */
+declare class CLIEngine extends CLIEngine_base {
+}
+export { CLIEngine };
+//# sourceMappingURL=CLIEngine.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/CLIEngine.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/CLIEngine.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..6d8d24e0046471f33990e4ca9965e751d81b06f3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/CLIEngine.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"CLIEngine.d.ts","sourceRoot":"","sources":["../../src/ts-eslint/CLIEngine.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/CLIEngine.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/CLIEngine.js
new file mode 100644
index 0000000000000000000000000000000000000000..8ccf2b7e7523c76615e7aed6b2191ba9677f6871
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/CLIEngine.js
@@ -0,0 +1,15 @@
+"use strict";
+/* eslint-disable @typescript-eslint/no-namespace */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CLIEngine = void 0;
+const eslint_1 = require("eslint");
+/**
+ * The underlying utility that runs the ESLint command line interface. This object will read the filesystem for
+ * configuration and file information but will not output any results. Instead, it allows you direct access to the
+ * important information so you can deal with the output yourself.
+ * @deprecated use the ESLint class instead
+ */
+class CLIEngine extends eslint_1.CLIEngine {
+}
+exports.CLIEngine = CLIEngine;
+//# sourceMappingURL=CLIEngine.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/CLIEngine.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/CLIEngine.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..4ac14814a575b93f7a91aac226a4c92b88846265
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/CLIEngine.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"CLIEngine.js","sourceRoot":"","sources":["../../src/ts-eslint/CLIEngine.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;AAEpD,mCAAsD;AAyKtD;;;;;GAKG;AACH,MAAM,SAAU,SAAS,kBAAwC;CAAG;AAE3D,8BAAS"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ESLint.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ESLint.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..99133e7a2b28b08320ad42bfce83a91e4d69311c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ESLint.d.ts
@@ -0,0 +1,338 @@
+import { Linter } from './Linter';
+declare class ESLintBase {
+    /**
+     * Creates a new instance of the main ESLint API.
+     * @param options The options for this instance.
+     */
+    constructor(options?: ESLint.ESLintOptions);
+    /**
+     * This method calculates the configuration for a given file, which can be useful for debugging purposes.
+     * - It resolves and merges extends and overrides settings into the top level configuration.
+     * - It resolves the parser setting to absolute paths.
+     * - It normalizes the plugins setting to align short names. (e.g., eslint-plugin-foo → foo)
+     * - It adds the processor setting if a legacy file extension processor is matched.
+     * - It doesn't interpret the env setting to the globals and parserOptions settings, so the result object contains
+     *   the env setting as is.
+     * @param filePath The path to the file whose configuration you would like to calculate. Directory paths are forbidden
+     *                 because ESLint cannot handle the overrides setting.
+     * @returns The promise that will be fulfilled with a configuration object.
+     */
+    calculateConfigForFile(filePath: string): Promise<Linter.Config>;
+    /**
+     * This method checks if a given file is ignored by your configuration.
+     * @param filePath The path to the file you want to check.
+     * @returns The promise that will be fulfilled with whether the file is ignored or not. If the file is ignored, then
+     *          it will return true.
+     */
+    isPathIgnored(filePath: string): Promise<boolean>;
+    /**
+     * This method lints the files that match the glob patterns and then returns the results.
+     * @param patterns The lint target files. This can contain any of file paths, directory paths, and glob patterns.
+     * @returns The promise that will be fulfilled with an array of LintResult objects.
+     */
+    lintFiles(patterns: string | string[]): Promise<ESLint.LintResult[]>;
+    /**
+     * This method lints the given source code text and then returns the results.
+     *
+     * By default, this method uses the configuration that applies to files in the current working directory (the cwd
+     * constructor option). If you want to use a different configuration, pass options.filePath, and ESLint will load the
+     * same configuration that eslint.lintFiles() would use for a file at options.filePath.
+     *
+     * If the options.filePath value is configured to be ignored, this method returns an empty array. If the
+     * options.warnIgnored option is set along with the options.filePath option, this method returns a LintResult object.
+     * In that case, the result may contain a warning that indicates the file was ignored.
+     * @param code The source code text to check.
+     * @param options The options.
+     * @returns The promise that will be fulfilled with an array of LintResult objects. This is an array (despite there
+     *          being only one lint result) in order to keep the interfaces between this and the eslint.lintFiles()
+     *          method similar.
+     */
+    lintText(code: string, options?: ESLint.LintTextOptions): Promise<ESLint.LintResult[]>;
+    /**
+     * This method loads a formatter. Formatters convert lint results to a human- or machine-readable string.
+     * @param name TThe path to the file you want to check.
+     * The following values are allowed:
+     * - undefined. In this case, loads the "stylish" built-in formatter.
+     * - A name of built-in formatters.
+     * - A name of third-party formatters. For examples:
+     * -- `foo` will load eslint-formatter-foo.
+     * -- `@foo` will load `@foo/eslint-formatter`.
+     * -- `@foo/bar` will load `@foo/eslint-formatter-bar`.
+     * - A path to the file that defines a formatter. The path must contain one or more path separators (/) in order to distinguish if it's a path or not. For example, start with ./.
+     * @returns The promise that will be fulfilled with a Formatter object.
+     */
+    loadFormatter(name?: string): Promise<ESLint.Formatter>;
+    /**
+     * This method copies the given results and removes warnings. The returned value contains only errors.
+     * @param results The LintResult objects to filter.
+     * @returns The filtered LintResult objects.
+     */
+    static getErrorResults(results: ESLint.LintResult): ESLint.LintResult;
+    /**
+     * This method writes code modified by ESLint's autofix feature into its respective file. If any of the modified
+     * files don't exist, this method does nothing.
+     * @param results The LintResult objects to write.
+     * @returns The promise that will be fulfilled after all files are written.
+     */
+    static outputFixes(results: ESLint.LintResult): Promise<void>;
+    /**
+     * The version text.
+     */
+    static readonly version: string;
+}
+declare namespace ESLint {
+    interface ESLintOptions {
+        /**
+         * If false is present, ESLint suppresses directive comments in source code.
+         * If this option is false, it overrides the noInlineConfig setting in your configurations.
+         */
+        allowInlineConfig?: boolean;
+        /**
+         * Configuration object, extended by all configurations used with this instance.
+         * You can use this option to define the default settings that will be used if your configuration files don't
+         * configure it.
+         */
+        baseConfig?: Linter.Config | null;
+        /**
+         * If true is present, the eslint.lintFiles() method caches lint results and uses it if each target file is not
+         * changed. Please mind that ESLint doesn't clear the cache when you upgrade ESLint plugins. In that case, you have
+         * to remove the cache file manually. The eslint.lintText() method doesn't use caches even if you pass the
+         * options.filePath to the method.
+         */
+        cache?: boolean;
+        /**
+         * The eslint.lintFiles() method writes caches into this file.
+         */
+        cacheLocation?: string;
+        /**
+         * The working directory. This must be an absolute path.
+         */
+        cwd?: string;
+        /**
+         * Unless set to false, the eslint.lintFiles() method will throw an error when no target files are found.
+         */
+        errorOnUnmatchedPattern?: boolean;
+        /**
+         * If you pass directory paths to the eslint.lintFiles() method, ESLint checks the files in those directories that
+         * have the given extensions. For example, when passing the src/ directory and extensions is [".js", ".ts"], ESLint
+         * will lint *.js and *.ts files in src/. If extensions is null, ESLint checks *.js files and files that match
+         * overrides[].files patterns in your configuration.
+         * Note: This option only applies when you pass directory paths to the eslint.lintFiles() method.
+         * If you pass glob patterns, ESLint will lint all files matching the glob pattern regardless of extension.
+         */
+        extensions?: string[] | null;
+        /**
+         * If true is present, the eslint.lintFiles() and eslint.lintText() methods work in autofix mode.
+         * If a predicate function is present, the methods pass each lint message to the function, then use only the
+         * lint messages for which the function returned true.
+         */
+        fix?: boolean | ((message: LintMessage) => boolean);
+        /**
+         * The types of the rules that the eslint.lintFiles() and eslint.lintText() methods use for autofix.
+         */
+        fixTypes?: string[];
+        /**
+         * If false is present, the eslint.lintFiles() method doesn't interpret glob patterns.
+         */
+        globInputPaths?: boolean;
+        /**
+         * If false is present, the eslint.lintFiles() method doesn't respect `.eslintignore` files or ignorePatterns in
+         * your configuration.
+         */
+        ignore?: boolean;
+        /**
+         * The path to a file ESLint uses instead of `$CWD/.eslintignore`.
+         * If a path is present and the file doesn't exist, this constructor will throw an error.
+         */
+        ignorePath?: string;
+        /**
+         * Configuration object, overrides all configurations used with this instance.
+         * You can use this option to define the settings that will be used even if your configuration files configure it.
+         */
+        overrideConfig?: Linter.ConfigOverride | null;
+        /**
+         * The path to a configuration file, overrides all configurations used with this instance.
+         * The options.overrideConfig option is applied after this option is applied.
+         */
+        overrideConfigFile?: string | null;
+        /**
+         * The plugin implementations that ESLint uses for the plugins setting of your configuration.
+         * This is a map-like object. Those keys are plugin IDs and each value is implementation.
+         */
+        plugins?: Record<string, Linter.Plugin> | null;
+        /**
+         * The severity to report unused eslint-disable directives.
+         * If this option is a severity, it overrides the reportUnusedDisableDirectives setting in your configurations.
+         */
+        reportUnusedDisableDirectives?: Linter.SeverityString | null;
+        /**
+         * The path to a directory where plugins should be resolved from.
+         * If null is present, ESLint loads plugins from the location of the configuration file that contains the plugin
+         * setting.
+         * If a path is present, ESLint loads all plugins from there.
+         */
+        resolvePluginsRelativeTo?: string | null;
+        /**
+         * An array of paths to directories to load custom rules from.
+         */
+        rulePaths?: string[];
+        /**
+         * If false is present, ESLint doesn't load configuration files (.eslintrc.* files).
+         * Only the configuration of the constructor options is valid.
+         */
+        useEslintrc?: boolean;
+    }
+    interface DeprecatedRuleInfo {
+        /**
+         *  The rule ID.
+         */
+        ruleId: string;
+        /**
+         *  The rule IDs that replace this deprecated rule.
+         */
+        replacedBy: string[];
+    }
+    /**
+     * The LintResult value is the information of the linting result of each file.
+     */
+    interface LintResult {
+        /**
+         * The number of errors. This includes fixable errors.
+         */
+        errorCount: number;
+        /**
+         * The absolute path to the file of this result. This is the string "<text>" if the file path is unknown (when you
+         * didn't pass the options.filePath option to the eslint.lintText() method).
+         */
+        filePath: string;
+        /**
+         * The number of errors that can be fixed automatically by the fix constructor option.
+         */
+        fixableErrorCount: number;
+        /**
+         * The number of warnings that can be fixed automatically by the fix constructor option.
+         */
+        fixableWarningCount: number;
+        /**
+         * The array of LintMessage objects.
+         */
+        messages: Linter.LintMessage[];
+        /**
+         * The source code of the file that was linted, with as many fixes applied as possible.
+         */
+        output?: string;
+        /**
+         * The original source code text. This property is undefined if any messages didn't exist or the output
+         * property exists.
+         */
+        source?: string;
+        /**
+         * The information about the deprecated rules that were used to check this file.
+         */
+        usedDeprecatedRules: DeprecatedRuleInfo[];
+        /**
+         * The number of warnings. This includes fixable warnings.
+         */
+        warningCount: number;
+    }
+    interface LintTextOptions {
+        /**
+         * The path to the file of the source code text. If omitted, the result.filePath becomes the string "<text>".
+         */
+        filePath?: string;
+        /**
+         * If true is present and the options.filePath is a file ESLint should ignore, this method returns a lint result
+         * contains a warning message.
+         */
+        warnIgnored?: boolean;
+    }
+    /**
+     * The LintMessage value is the information of each linting error.
+     */
+    interface LintMessage {
+        /**
+         * The 1-based column number of the begin point of this message.
+         */
+        column: number;
+        /**
+         * The 1-based column number of the end point of this message. This property is undefined if this message
+         * is not a range.
+         */
+        endColumn: number | undefined;
+        /**
+         * The 1-based line number of the end point of this message. This property is undefined if this
+         * message is not a range.
+         */
+        endLine: number | undefined;
+        /**
+         * The EditInfo object of autofix. This property is undefined if this message is not fixable.
+         */
+        fix: EditInfo | undefined;
+        /**
+         * The 1-based line number of the begin point of this message.
+         */
+        line: number;
+        /**
+         * The error message
+         */
+        message: string;
+        /**
+         * The rule name that generates this lint message. If this message is generated by the ESLint core rather than
+         * rules, this is null.
+         */
+        ruleId: string | null;
+        /**
+         * The severity of this message. 1 means warning and 2 means error.
+         */
+        severity: 1 | 2;
+        /**
+         * The list of suggestions. Each suggestion is the pair of a description and an EditInfo object to fix code. API
+         * users such as editor integrations can choose one of them to fix the problem of this message. This property is
+         * undefined if this message doesn't have any suggestions.
+         */
+        suggestions: {
+            desc: string;
+            fix: EditInfo;
+        }[] | undefined;
+    }
+    /**
+     * The EditInfo value is information to edit text.
+     *
+     * This edit information means replacing the range of the range property by the text property value. It's like
+     * sourceCodeText.slice(0, edit.range[0]) + edit.text + sourceCodeText.slice(edit.range[1]). Therefore, it's an add
+     * if the range[0] and range[1] property values are the same value, and it's removal if the text property value is
+     * empty string.
+     */
+    interface EditInfo {
+        /**
+         * The pair of 0-based indices in source code text to remove.
+         */
+        range: [number, number];
+        /**
+         * The text to add.
+         */
+        text: string;
+    }
+    /**
+     * The Formatter value is the object to convert the LintResult objects to text.
+     */
+    interface Formatter {
+        /**
+         * The method to convert the LintResult objects to text
+         */
+        format(results: LintResult[]): string;
+    }
+}
+declare const _ESLint: typeof ESLintBase;
+/**
+ * The ESLint class is the primary class to use in Node.js applications.
+ * This class depends on the Node.js fs module and the file system, so you cannot use it in browsers.
+ *
+ * If you want to lint code on browsers, use the Linter class instead.
+ *
+ * @since 7.0.0
+ */
+declare class ESLint extends _ESLint {
+}
+export { ESLint };
+//# sourceMappingURL=ESLint.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ESLint.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ESLint.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..8a60f43e8288f8a50c3e80d3c4427ca0692c148f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ESLint.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ESLint.d.ts","sourceRoot":"","sources":["../../src/ts-eslint/ESLint.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ESLint.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ESLint.js
new file mode 100644
index 0000000000000000000000000000000000000000..5b50996923f50e37d014d736851065d4b8b41b5f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ESLint.js
@@ -0,0 +1,23 @@
+"use strict";
+/* eslint-disable @typescript-eslint/no-namespace */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ESLint = void 0;
+const eslint_1 = require("eslint");
+// We want to export this class always so it's easy for end users to consume.
+// However on ESLint v6, this class will not exist, so we provide a fallback to make it clear
+// The only users of this should be users scripting ESLint locally, so _they_ should have the correct version installed.
+const _ESLint = (eslint_1.ESLint !== null && eslint_1.ESLint !== void 0 ? eslint_1.ESLint : function () {
+    throw new Error('Attempted to construct an ESLint instance on less than ESLint v7.0.0');
+});
+/**
+ * The ESLint class is the primary class to use in Node.js applications.
+ * This class depends on the Node.js fs module and the file system, so you cannot use it in browsers.
+ *
+ * If you want to lint code on browsers, use the Linter class instead.
+ *
+ * @since 7.0.0
+ */
+class ESLint extends _ESLint {
+}
+exports.ESLint = ESLint;
+//# sourceMappingURL=ESLint.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ESLint.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ESLint.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..50e070389bfc3a37185f1f591b8bde690f3136cf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ESLint.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ESLint.js","sourceRoot":"","sources":["../../src/ts-eslint/ESLint.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;AAEpD,mCAAgD;AAqVhD,6EAA6E;AAC7E,6FAA6F;AAC7F,wHAAwH;AACxH,MAAM,OAAO,GAAG,CAAC,eAAY,aAAZ,eAAY,cAAZ,eAAY,GAC3B;IACE,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;AACJ,CAAC,CAAsB,CAAC;AAE1B;;;;;;;GAOG;AACH,MAAM,MAAO,SAAQ,OAAO;CAAG;AAEtB,wBAAM"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Linter.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Linter.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..248e8fb2f3fda2e065181820f0364109fc5067e9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Linter.d.ts
@@ -0,0 +1,324 @@
+import { TSESTree, ParserServices } from '../ts-estree';
+import { ParserOptions as TSParserOptions } from './ParserOptions';
+import { RuleCreateFunction, RuleFix, RuleModule } from './Rule';
+import { Scope } from './Scope';
+import { SourceCode } from './SourceCode';
+declare class LinterBase {
+    /**
+     * Initialize the Linter.
+     * @param config the config object
+     */
+    constructor(config?: Linter.LinterOptions);
+    /**
+     * Define a new parser module
+     * @param parserId Name of the parser
+     * @param parserModule The parser object
+     */
+    defineParser(parserId: string, parserModule: Linter.ParserModule): void;
+    /**
+     * Defines a new linting rule.
+     * @param ruleId A unique rule identifier
+     * @param ruleModule Function from context to object mapping AST node types to event handlers
+     */
+    defineRule<TMessageIds extends string, TOptions extends readonly unknown[]>(ruleId: string, ruleModule: RuleModule<TMessageIds, TOptions> | RuleCreateFunction): void;
+    /**
+     * Defines many new linting rules.
+     * @param rulesToDefine map from unique rule identifier to rule
+     */
+    defineRules<TMessageIds extends string, TOptions extends readonly unknown[]>(rulesToDefine: Record<string, RuleModule<TMessageIds, TOptions> | RuleCreateFunction>): void;
+    /**
+     * Gets an object with all loaded rules.
+     * @returns All loaded rules
+     */
+    getRules(): Map<string, RuleModule<string, unknown[]>>;
+    /**
+     * Gets the `SourceCode` object representing the parsed source.
+     * @returns The `SourceCode` object.
+     */
+    getSourceCode(): SourceCode;
+    /**
+     * Verifies the text against the rules specified by the second argument.
+     * @param textOrSourceCode The text to parse or a SourceCode object.
+     * @param config An ESLintConfig instance to configure everything.
+     * @param filenameOrOptions The optional filename of the file being checked.
+     *        If this is not set, the filename will default to '<input>' in the rule context.
+     *        If this is an object, then it has "filename", "allowInlineConfig", and some properties.
+     * @returns The results as an array of messages or an empty array if no messages.
+     */
+    verify(textOrSourceCode: SourceCode | string, config: Linter.Config, filenameOrOptions?: string | Linter.VerifyOptions): Linter.LintMessage[];
+    /**
+     * Performs multiple autofix passes over the text until as many fixes as possible have been applied.
+     * @param text The source text to apply fixes to.
+     * @param config The ESLint config object to use.
+     * @param options The ESLint options object to use.
+     * @returns The result of the fix operation as returned from the SourceCodeFixer.
+     */
+    verifyAndFix(code: string, config: Linter.Config, options: Linter.FixOptions): Linter.FixReport;
+    /**
+     * The version from package.json.
+     */
+    readonly version: string;
+    /**
+     * The version from package.json.
+     */
+    static readonly version: string;
+}
+declare namespace Linter {
+    export interface LinterOptions {
+        /**
+         * path to a directory that should be considered as the current working directory.
+         */
+        cwd?: string;
+    }
+    export type Severity = 0 | 1 | 2;
+    export type SeverityString = 'off' | 'warn' | 'error';
+    export type RuleLevel = Severity | SeverityString;
+    export type RuleLevelAndOptions = [RuleLevel, ...unknown[]];
+    export type RuleEntry = RuleLevel | RuleLevelAndOptions;
+    export type RulesRecord = Partial<Record<string, RuleEntry>>;
+    interface BaseConfig {
+        $schema?: string;
+        /**
+         * The environment settings.
+         */
+        env?: {
+            [name: string]: boolean;
+        };
+        /**
+         * The path to other config files or the package name of shareable configs.
+         */
+        extends?: string | string[];
+        /**
+         * The global variable settings.
+         */
+        globals?: {
+            [name: string]: boolean;
+        };
+        /**
+         * The flag that disables directive comments.
+         */
+        noInlineConfig?: boolean;
+        /**
+         * The override settings per kind of files.
+         */
+        overrides?: ConfigOverride[];
+        /**
+         * The path to a parser or the package name of a parser.
+         */
+        parser?: string;
+        /**
+         * The parser options.
+         */
+        parserOptions?: ParserOptions;
+        /**
+         * The plugin specifiers.
+         */
+        plugins?: string[];
+        /**
+         * The processor specifier.
+         */
+        processor?: string;
+        /**
+         * The flag to report unused `eslint-disable` comments.
+         */
+        reportUnusedDisableDirectives?: boolean;
+        /**
+         * The rule settings.
+         */
+        rules?: RulesRecord;
+        /**
+         * The shared settings.
+         */
+        settings?: {
+            [name: string]: unknown;
+        };
+    }
+    export interface ConfigOverride extends BaseConfig {
+        excludedFiles?: string | string[];
+        files: string | string[];
+    }
+    export interface Config extends BaseConfig {
+        /**
+         * The glob patterns that ignore to lint.
+         */
+        ignorePatterns?: string | string[];
+        /**
+         * The root flag.
+         */
+        root?: boolean;
+    }
+    export type ParserOptions = TSParserOptions;
+    export interface VerifyOptions {
+        /**
+         * Allow/disallow inline comments' ability to change config once it is set. Defaults to true if not supplied.
+         * Useful if you want to validate JS without comments overriding rules.
+         */
+        allowInlineConfig?: boolean;
+        /**
+         * if `true` then the linter doesn't make `fix` properties into the lint result.
+         */
+        disableFixes?: boolean;
+        /**
+         * the filename of the source code.
+         */
+        filename?: string;
+        /**
+         * the predicate function that selects adopt code blocks.
+         */
+        filterCodeBlock?: (filename: string, text: string) => boolean;
+        /**
+         * postprocessor for report messages.
+         * If provided, this should accept an array of the message lists
+         * for each code block returned from the preprocessor, apply a mapping to
+         * the messages as appropriate, and return a one-dimensional array of
+         * messages.
+         */
+        postprocess?: Processor['postprocess'];
+        /**
+         * preprocessor for source text.
+         * If provided, this should accept a string of source text, and return an array of code blocks to lint.
+         */
+        preprocess?: Processor['preprocess'];
+        /**
+         * Adds reported errors for unused `eslint-disable` directives.
+         */
+        reportUnusedDisableDirectives?: boolean | SeverityString;
+    }
+    export interface FixOptions extends VerifyOptions {
+        /**
+         * Determines whether fixes should be applied.
+         */
+        fix?: boolean;
+    }
+    export interface LintSuggestion {
+        desc: string;
+        fix: RuleFix;
+        messageId?: string;
+    }
+    export interface LintMessage {
+        /**
+         * The 1-based column number.
+         */
+        column: number;
+        /**
+         * The 1-based column number of the end location.
+         */
+        endColumn?: number;
+        /**
+         * The 1-based line number of the end location.
+         */
+        endLine?: number;
+        /**
+         * If `true` then this is a fatal error.
+         */
+        fatal?: true;
+        /**
+         * Information for autofix.
+         */
+        fix?: RuleFix;
+        /**
+         * The 1-based line number.
+         */
+        line: number;
+        /**
+         * The error message.
+         */
+        message: string;
+        messageId?: string;
+        nodeType: string;
+        /**
+         * The ID of the rule which makes this message.
+         */
+        ruleId: string | null;
+        /**
+         * The severity of this message.
+         */
+        severity: Severity;
+        source: string | null;
+        /**
+         * Information for suggestions
+         */
+        suggestions?: LintSuggestion[];
+    }
+    export interface FixReport {
+        /**
+         * True, if the code was fixed
+         */
+        fixed: boolean;
+        /**
+         * Fixed code text (might be the same as input if no fixes were applied).
+         */
+        output: string;
+        /**
+         * Collection of all messages for the given code
+         */
+        messages: LintMessage[];
+    }
+    export type ParserModule = {
+        parse(text: string, options?: ParserOptions): TSESTree.Program;
+    } | {
+        parseForESLint(text: string, options?: ParserOptions): ESLintParseResult;
+    };
+    export interface ESLintParseResult {
+        ast: TSESTree.Program;
+        parserServices?: ParserServices;
+        scopeManager?: Scope.ScopeManager;
+        visitorKeys?: SourceCode.VisitorKeys;
+    }
+    export interface Processor {
+        /**
+         * The function to extract code blocks.
+         */
+        preprocess?: (text: string, filename: string) => Array<string | {
+            text: string;
+            filename: string;
+        }>;
+        /**
+         * The function to merge messages.
+         */
+        postprocess?: (messagesList: Linter.LintMessage[][], filename: string) => Linter.LintMessage[];
+        /**
+         * If `true` then it means the processor supports autofix.
+         */
+        supportsAutofix?: boolean;
+    }
+    export interface Environment {
+        /**
+         * The definition of global variables.
+         */
+        globals?: Record<string, Linter.Config>;
+        /**
+         * The parser options that will be enabled under this environment.
+         */
+        parserOptions?: ParserOptions;
+    }
+    export interface Plugin {
+        /**
+         * The definition of plugin configs.
+         */
+        configs?: Record<string, Linter.Config>;
+        /**
+         * The definition of plugin environments.
+         */
+        environments?: Record<string, Environment>;
+        /**
+         * The definition of plugin processors.
+         */
+        processors?: Record<string, Processor>;
+        /**
+         * The definition of plugin rules.
+         */
+        rules?: Record<string, RuleCreateFunction | RuleModule<string, unknown[]>>;
+    }
+    export {};
+}
+declare const Linter_base: typeof LinterBase;
+/**
+ * The Linter object does the actual evaluation of the JavaScript code. It doesn't do any filesystem operations, it
+ * simply parses and reports on the code. In particular, the Linter object does not process configuration objects
+ * or files.
+ */
+declare class Linter extends Linter_base {
+}
+export { Linter };
+//# sourceMappingURL=Linter.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Linter.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Linter.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..5c2bc13e0cd0b269b567db1f10977b2a1852ac13
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Linter.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Linter.d.ts","sourceRoot":"","sources":["../../src/ts-eslint/Linter.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Linter.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Linter.js
new file mode 100644
index 0000000000000000000000000000000000000000..4fd16f1bf432128c50fade995d5b783637b5d1f2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Linter.js
@@ -0,0 +1,14 @@
+"use strict";
+/* eslint-disable @typescript-eslint/no-namespace */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Linter = void 0;
+const eslint_1 = require("eslint");
+/**
+ * The Linter object does the actual evaluation of the JavaScript code. It doesn't do any filesystem operations, it
+ * simply parses and reports on the code. In particular, the Linter object does not process configuration objects
+ * or files.
+ */
+class Linter extends eslint_1.Linter {
+}
+exports.Linter = Linter;
+//# sourceMappingURL=Linter.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Linter.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Linter.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..8c8e207d187506f85b1bab6cb3aaa7f812f9b963
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Linter.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Linter.js","sourceRoot":"","sources":["../../src/ts-eslint/Linter.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;AAEpD,mCAAgD;AA8WhD;;;;GAIG;AACH,MAAM,MAAO,SAAS,eAAkC;CAAG;AAElD,wBAAM"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ParserOptions.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ParserOptions.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d864322bdef2956d41b12fc027a282efeabe5dc7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ParserOptions.d.ts
@@ -0,0 +1,2 @@
+export { DebugLevel, EcmaVersion, ParserOptions, SourceType, } from '@typescript-eslint/types';
+//# sourceMappingURL=ParserOptions.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ParserOptions.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ParserOptions.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..33c6d0e000050dbc2c6097cf781fe1be3f6a0c7b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ParserOptions.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ParserOptions.d.ts","sourceRoot":"","sources":["../../src/ts-eslint/ParserOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,aAAa,EACb,UAAU,GACX,MAAM,0BAA0B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ParserOptions.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ParserOptions.js
new file mode 100644
index 0000000000000000000000000000000000000000..40b03dd57296fb46af17c5fea8c45a91e156448d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ParserOptions.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=ParserOptions.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ParserOptions.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ParserOptions.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..7bd7a94c5a8f5498ad82d02c7483f6acbc28429c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/ParserOptions.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ParserOptions.js","sourceRoot":"","sources":["../../src/ts-eslint/ParserOptions.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Rule.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Rule.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..75c9b602daf371a2e5732b63a3b31ebd4ccbe1d1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Rule.d.ts
@@ -0,0 +1,369 @@
+import { JSONSchema4 } from '../json-schema';
+import { ParserServices, TSESTree } from '../ts-estree';
+import { AST } from './AST';
+import { Linter } from './Linter';
+import { Scope } from './Scope';
+import { SourceCode } from './SourceCode';
+interface RuleMetaDataDocs {
+    /**
+     * The general category the rule falls within
+     */
+    category: 'Best Practices' | 'Stylistic Issues' | 'Variables' | 'Possible Errors';
+    /**
+     * Concise description of the rule
+     */
+    description: string;
+    /**
+     * The recommendation level for the rule.
+     * Used by the build tools to generate the recommended config.
+     * Set to false to not include it as a recommendation
+     */
+    recommended: 'error' | 'warn' | false;
+    /**
+     * The URL of the rule's docs
+     */
+    url: string;
+    /**
+     * Specifies whether the rule can return suggestions.
+     */
+    suggestion?: boolean;
+    /**
+     * Does the rule require us to create a full TypeScript Program in order for it
+     * to type-check code. This is only used for documentation purposes.
+     */
+    requiresTypeChecking?: boolean;
+    /**
+     * Does the rule extend (or is it based off of) an ESLint code rule?
+     * Alternately accepts the name of the base rule, in case the rule has been renamed.
+     * This is only used for documentation purposes.
+     */
+    extendsBaseRule?: boolean | string;
+}
+interface RuleMetaData<TMessageIds extends string> {
+    /**
+     * True if the rule is deprecated, false otherwise
+     */
+    deprecated?: boolean;
+    /**
+     * Documentation for the rule, unnecessary for custom rules/plugins
+     */
+    docs?: RuleMetaDataDocs;
+    /**
+     * The fixer category. Omit if there is no fixer
+     */
+    fixable?: 'code' | 'whitespace';
+    /**
+     * A map of messages which the rule can report.
+     * The key is the messageId, and the string is the parameterised error string.
+     * See: https://eslint.org/docs/developer-guide/working-with-rules#messageids
+     */
+    messages: Record<TMessageIds, string>;
+    /**
+     * The type of rule.
+     * - `"problem"` means the rule is identifying code that either will cause an error or may cause a confusing behavior. Developers should consider this a high priority to resolve.
+     * - `"suggestion"` means the rule is identifying something that could be done in a better way but no errors will occur if the code isn’t changed.
+     * - `"layout"` means the rule cares primarily about whitespace, semicolons, commas, and parentheses, all the parts of the program that determine how the code looks rather than how it executes. These rules work on parts of the code that aren’t specified in the AST.
+     */
+    type: 'suggestion' | 'problem' | 'layout';
+    /**
+     * The name of the rule this rule was replaced by, if it was deprecated.
+     */
+    replacedBy?: string[];
+    /**
+     * The options schema. Supply an empty array if there are no options.
+     */
+    schema: JSONSchema4 | JSONSchema4[];
+}
+interface RuleFix {
+    range: AST.Range;
+    text: string;
+}
+interface RuleFixer {
+    insertTextAfter(nodeOrToken: TSESTree.Node | TSESTree.Token, text: string): RuleFix;
+    insertTextAfterRange(range: AST.Range, text: string): RuleFix;
+    insertTextBefore(nodeOrToken: TSESTree.Node | TSESTree.Token, text: string): RuleFix;
+    insertTextBeforeRange(range: AST.Range, text: string): RuleFix;
+    remove(nodeOrToken: TSESTree.Node | TSESTree.Token): RuleFix;
+    removeRange(range: AST.Range): RuleFix;
+    replaceText(nodeOrToken: TSESTree.Node | TSESTree.Token, text: string): RuleFix;
+    replaceTextRange(range: AST.Range, text: string): RuleFix;
+}
+declare type ReportFixFunction = (fixer: RuleFixer) => null | RuleFix | RuleFix[] | IterableIterator<RuleFix>;
+declare type ReportSuggestionArray<TMessageIds extends string> = ReportDescriptorBase<TMessageIds>[];
+interface ReportDescriptorBase<TMessageIds extends string> {
+    /**
+     * The parameters for the message string associated with `messageId`.
+     */
+    readonly data?: Readonly<Record<string, unknown>>;
+    /**
+     * The fixer function.
+     */
+    readonly fix?: ReportFixFunction | null;
+    /**
+     * The messageId which is being reported.
+     */
+    readonly messageId: TMessageIds;
+}
+interface ReportDescriptorWithSuggestion<TMessageIds extends string> extends ReportDescriptorBase<TMessageIds> {
+    /**
+     * 6.7's Suggestions API
+     */
+    readonly suggest?: Readonly<ReportSuggestionArray<TMessageIds>> | null;
+}
+interface ReportDescriptorNodeOptionalLoc {
+    /**
+     * The Node or AST Token which the report is being attached to
+     */
+    readonly node: TSESTree.Node | TSESTree.Comment | TSESTree.Token;
+    /**
+     * An override of the location of the report
+     */
+    readonly loc?: Readonly<TSESTree.SourceLocation> | Readonly<TSESTree.LineAndColumnData>;
+}
+interface ReportDescriptorLocOnly {
+    /**
+     * An override of the location of the report
+     */
+    loc: Readonly<TSESTree.SourceLocation> | Readonly<TSESTree.LineAndColumnData>;
+}
+declare type ReportDescriptor<TMessageIds extends string> = ReportDescriptorWithSuggestion<TMessageIds> & (ReportDescriptorNodeOptionalLoc | ReportDescriptorLocOnly);
+interface RuleContext<TMessageIds extends string, TOptions extends readonly unknown[]> {
+    /**
+     * The rule ID.
+     */
+    id: string;
+    /**
+     * An array of the configured options for this rule.
+     * This array does not include the rule severity.
+     */
+    options: TOptions;
+    /**
+     * The name of the parser from configuration.
+     */
+    parserPath: string;
+    /**
+     * The parser options configured for this run
+     */
+    parserOptions: Linter.ParserOptions;
+    /**
+     * An object containing parser-provided services for rules
+     */
+    parserServices?: ParserServices;
+    /**
+     * The shared settings from configuration.
+     * We do not have any shared settings in this plugin.
+     */
+    settings: Record<string, unknown>;
+    /**
+     * Returns an array of the ancestors of the currently-traversed node, starting at
+     * the root of the AST and continuing through the direct parent of the current node.
+     * This array does not include the currently-traversed node itself.
+     */
+    getAncestors(): TSESTree.Node[];
+    /**
+     * Returns a list of variables declared by the given node.
+     * This information can be used to track references to variables.
+     */
+    getDeclaredVariables(node: TSESTree.Node): Scope.Variable[];
+    /**
+     * Returns the filename associated with the source.
+     */
+    getFilename(): string;
+    /**
+     * Returns the scope of the currently-traversed node.
+     * This information can be used track references to variables.
+     */
+    getScope(): Scope.Scope;
+    /**
+     * Returns a SourceCode object that you can use to work with the source that
+     * was passed to ESLint.
+     */
+    getSourceCode(): Readonly<SourceCode>;
+    /**
+     * Marks a variable with the given name in the current scope as used.
+     * This affects the no-unused-vars rule.
+     */
+    markVariableAsUsed(name: string): boolean;
+    /**
+     * Reports a problem in the code.
+     */
+    report(descriptor: ReportDescriptor<TMessageIds>): void;
+}
+declare type RuleFunction<T extends TSESTree.BaseNode = never> = (node: T) => void;
+interface RuleListener {
+    [nodeSelector: string]: RuleFunction | undefined;
+    ArrayExpression?: RuleFunction<TSESTree.ArrayExpression>;
+    ArrayPattern?: RuleFunction<TSESTree.ArrayPattern>;
+    ArrowFunctionExpression?: RuleFunction<TSESTree.ArrowFunctionExpression>;
+    AssignmentPattern?: RuleFunction<TSESTree.AssignmentPattern>;
+    AssignmentExpression?: RuleFunction<TSESTree.AssignmentExpression>;
+    AwaitExpression?: RuleFunction<TSESTree.AwaitExpression>;
+    BigIntLiteral?: RuleFunction<TSESTree.BigIntLiteral>;
+    BinaryExpression?: RuleFunction<TSESTree.BinaryExpression>;
+    BlockStatement?: RuleFunction<TSESTree.BlockStatement>;
+    BreakStatement?: RuleFunction<TSESTree.BreakStatement>;
+    CallExpression?: RuleFunction<TSESTree.CallExpression>;
+    CatchClause?: RuleFunction<TSESTree.CatchClause>;
+    ChainExpression?: RuleFunction<TSESTree.ChainExpression>;
+    ClassBody?: RuleFunction<TSESTree.ClassBody>;
+    ClassDeclaration?: RuleFunction<TSESTree.ClassDeclaration>;
+    ClassExpression?: RuleFunction<TSESTree.ClassExpression>;
+    ClassProperty?: RuleFunction<TSESTree.ClassProperty>;
+    Comment?: RuleFunction<TSESTree.Comment>;
+    ConditionalExpression?: RuleFunction<TSESTree.ConditionalExpression>;
+    ContinueStatement?: RuleFunction<TSESTree.ContinueStatement>;
+    DebuggerStatement?: RuleFunction<TSESTree.DebuggerStatement>;
+    Decorator?: RuleFunction<TSESTree.Decorator>;
+    DoWhileStatement?: RuleFunction<TSESTree.DoWhileStatement>;
+    EmptyStatement?: RuleFunction<TSESTree.EmptyStatement>;
+    ExportAllDeclaration?: RuleFunction<TSESTree.ExportAllDeclaration>;
+    ExportDefaultDeclaration?: RuleFunction<TSESTree.ExportDefaultDeclaration>;
+    ExportNamedDeclaration?: RuleFunction<TSESTree.ExportNamedDeclaration>;
+    ExportSpecifier?: RuleFunction<TSESTree.ExportSpecifier>;
+    ExpressionStatement?: RuleFunction<TSESTree.ExpressionStatement>;
+    ForInStatement?: RuleFunction<TSESTree.ForInStatement>;
+    ForOfStatement?: RuleFunction<TSESTree.ForOfStatement>;
+    ForStatement?: RuleFunction<TSESTree.ForStatement>;
+    FunctionDeclaration?: RuleFunction<TSESTree.FunctionDeclaration>;
+    FunctionExpression?: RuleFunction<TSESTree.FunctionExpression>;
+    Identifier?: RuleFunction<TSESTree.Identifier>;
+    IfStatement?: RuleFunction<TSESTree.IfStatement>;
+    ImportDeclaration?: RuleFunction<TSESTree.ImportDeclaration>;
+    ImportDefaultSpecifier?: RuleFunction<TSESTree.ImportDefaultSpecifier>;
+    ImportExpression?: RuleFunction<TSESTree.ImportExpression>;
+    ImportNamespaceSpecifier?: RuleFunction<TSESTree.ImportNamespaceSpecifier>;
+    ImportSpecifier?: RuleFunction<TSESTree.ImportSpecifier>;
+    JSXAttribute?: RuleFunction<TSESTree.JSXAttribute>;
+    JSXClosingElement?: RuleFunction<TSESTree.JSXClosingElement>;
+    JSXClosingFragment?: RuleFunction<TSESTree.JSXClosingFragment>;
+    JSXElement?: RuleFunction<TSESTree.JSXElement>;
+    JSXEmptyExpression?: RuleFunction<TSESTree.JSXEmptyExpression>;
+    JSXExpressionContainer?: RuleFunction<TSESTree.JSXExpressionContainer>;
+    JSXFragment?: RuleFunction<TSESTree.JSXFragment>;
+    JSXIdentifier?: RuleFunction<TSESTree.JSXIdentifier>;
+    JSXMemberExpression?: RuleFunction<TSESTree.JSXMemberExpression>;
+    JSXOpeningElement?: RuleFunction<TSESTree.JSXOpeningElement>;
+    JSXOpeningFragment?: RuleFunction<TSESTree.JSXOpeningFragment>;
+    JSXSpreadAttribute?: RuleFunction<TSESTree.JSXSpreadAttribute>;
+    JSXSpreadChild?: RuleFunction<TSESTree.JSXSpreadChild>;
+    JSXText?: RuleFunction<TSESTree.JSXText>;
+    LabeledStatement?: RuleFunction<TSESTree.LabeledStatement>;
+    Literal?: RuleFunction<TSESTree.Literal>;
+    LogicalExpression?: RuleFunction<TSESTree.LogicalExpression>;
+    MemberExpression?: RuleFunction<TSESTree.MemberExpression>;
+    MetaProperty?: RuleFunction<TSESTree.MetaProperty>;
+    MethodDefinition?: RuleFunction<TSESTree.MethodDefinition>;
+    NewExpression?: RuleFunction<TSESTree.NewExpression>;
+    ObjectExpression?: RuleFunction<TSESTree.ObjectExpression>;
+    ObjectPattern?: RuleFunction<TSESTree.ObjectPattern>;
+    Program?: RuleFunction<TSESTree.Program>;
+    Property?: RuleFunction<TSESTree.Property>;
+    RestElement?: RuleFunction<TSESTree.RestElement>;
+    ReturnStatement?: RuleFunction<TSESTree.ReturnStatement>;
+    SequenceExpression?: RuleFunction<TSESTree.SequenceExpression>;
+    SpreadElement?: RuleFunction<TSESTree.SpreadElement>;
+    Super?: RuleFunction<TSESTree.Super>;
+    SwitchCase?: RuleFunction<TSESTree.SwitchCase>;
+    SwitchStatement?: RuleFunction<TSESTree.SwitchStatement>;
+    TaggedTemplateExpression?: RuleFunction<TSESTree.TaggedTemplateExpression>;
+    TemplateElement?: RuleFunction<TSESTree.TemplateElement>;
+    TemplateLiteral?: RuleFunction<TSESTree.TemplateLiteral>;
+    ThisExpression?: RuleFunction<TSESTree.ThisExpression>;
+    ThrowStatement?: RuleFunction<TSESTree.ThrowStatement>;
+    Token?: RuleFunction<TSESTree.Token>;
+    TryStatement?: RuleFunction<TSESTree.TryStatement>;
+    TSAbstractClassProperty?: RuleFunction<TSESTree.TSAbstractClassProperty>;
+    TSAbstractKeyword?: RuleFunction<TSESTree.TSAbstractKeyword>;
+    TSAbstractMethodDefinition?: RuleFunction<TSESTree.TSAbstractMethodDefinition>;
+    TSAnyKeyword?: RuleFunction<TSESTree.TSAnyKeyword>;
+    TSArrayType?: RuleFunction<TSESTree.TSArrayType>;
+    TSAsExpression?: RuleFunction<TSESTree.TSAsExpression>;
+    TSAsyncKeyword?: RuleFunction<TSESTree.TSAsyncKeyword>;
+    TSBigIntKeyword?: RuleFunction<TSESTree.TSBigIntKeyword>;
+    TSBooleanKeyword?: RuleFunction<TSESTree.TSBooleanKeyword>;
+    TSCallSignatureDeclaration?: RuleFunction<TSESTree.TSCallSignatureDeclaration>;
+    TSClassImplements?: RuleFunction<TSESTree.TSClassImplements>;
+    TSConditionalType?: RuleFunction<TSESTree.TSConditionalType>;
+    TSConstructorType?: RuleFunction<TSESTree.TSConstructorType>;
+    TSConstructSignatureDeclaration?: RuleFunction<TSESTree.TSConstructSignatureDeclaration>;
+    TSDeclareKeyword?: RuleFunction<TSESTree.TSDeclareKeyword>;
+    TSDeclareFunction?: RuleFunction<TSESTree.TSDeclareFunction>;
+    TSEmptyBodyFunctionExpression?: RuleFunction<TSESTree.TSEmptyBodyFunctionExpression>;
+    TSEnumDeclaration?: RuleFunction<TSESTree.TSEnumDeclaration>;
+    TSEnumMember?: RuleFunction<TSESTree.TSEnumMember>;
+    TSExportAssignment?: RuleFunction<TSESTree.TSExportAssignment>;
+    TSExportKeyword?: RuleFunction<TSESTree.TSExportKeyword>;
+    TSExternalModuleReference?: RuleFunction<TSESTree.TSExternalModuleReference>;
+    TSFunctionType?: RuleFunction<TSESTree.TSFunctionType>;
+    TSImportEqualsDeclaration?: RuleFunction<TSESTree.TSImportEqualsDeclaration>;
+    TSImportType?: RuleFunction<TSESTree.TSImportType>;
+    TSIndexedAccessType?: RuleFunction<TSESTree.TSIndexedAccessType>;
+    TSIndexSignature?: RuleFunction<TSESTree.TSIndexSignature>;
+    TSInferType?: RuleFunction<TSESTree.TSInferType>;
+    TSInterfaceBody?: RuleFunction<TSESTree.TSInterfaceBody>;
+    TSInterfaceDeclaration?: RuleFunction<TSESTree.TSInterfaceDeclaration>;
+    TSInterfaceHeritage?: RuleFunction<TSESTree.TSInterfaceHeritage>;
+    TSIntersectionType?: RuleFunction<TSESTree.TSIntersectionType>;
+    TSLiteralType?: RuleFunction<TSESTree.TSLiteralType>;
+    TSMappedType?: RuleFunction<TSESTree.TSMappedType>;
+    TSMethodSignature?: RuleFunction<TSESTree.TSMethodSignature>;
+    TSModuleBlock?: RuleFunction<TSESTree.TSModuleBlock>;
+    TSModuleDeclaration?: RuleFunction<TSESTree.TSModuleDeclaration>;
+    TSNamespaceExportDeclaration?: RuleFunction<TSESTree.TSNamespaceExportDeclaration>;
+    TSNeverKeyword?: RuleFunction<TSESTree.TSNeverKeyword>;
+    TSNonNullExpression?: RuleFunction<TSESTree.TSNonNullExpression>;
+    TSNullKeyword?: RuleFunction<TSESTree.TSNullKeyword>;
+    TSNumberKeyword?: RuleFunction<TSESTree.TSNumberKeyword>;
+    TSObjectKeyword?: RuleFunction<TSESTree.TSObjectKeyword>;
+    TSOptionalType?: RuleFunction<TSESTree.TSOptionalType>;
+    TSParameterProperty?: RuleFunction<TSESTree.TSParameterProperty>;
+    TSParenthesizedType?: RuleFunction<TSESTree.TSParenthesizedType>;
+    TSPrivateKeyword?: RuleFunction<TSESTree.TSPrivateKeyword>;
+    TSPropertySignature?: RuleFunction<TSESTree.TSPropertySignature>;
+    TSProtectedKeyword?: RuleFunction<TSESTree.TSProtectedKeyword>;
+    TSPublicKeyword?: RuleFunction<TSESTree.TSPublicKeyword>;
+    TSQualifiedName?: RuleFunction<TSESTree.TSQualifiedName>;
+    TSReadonlyKeyword?: RuleFunction<TSESTree.TSReadonlyKeyword>;
+    TSRestType?: RuleFunction<TSESTree.TSRestType>;
+    TSStaticKeyword?: RuleFunction<TSESTree.TSStaticKeyword>;
+    TSStringKeyword?: RuleFunction<TSESTree.TSStringKeyword>;
+    TSSymbolKeyword?: RuleFunction<TSESTree.TSSymbolKeyword>;
+    TSThisType?: RuleFunction<TSESTree.TSThisType>;
+    TSTupleType?: RuleFunction<TSESTree.TSTupleType>;
+    TSTypeAliasDeclaration?: RuleFunction<TSESTree.TSTypeAliasDeclaration>;
+    TSTypeAnnotation?: RuleFunction<TSESTree.TSTypeAnnotation>;
+    TSTypeAssertion?: RuleFunction<TSESTree.TSTypeAssertion>;
+    TSTypeLiteral?: RuleFunction<TSESTree.TSTypeLiteral>;
+    TSTypeOperator?: RuleFunction<TSESTree.TSTypeOperator>;
+    TSTypeParameter?: RuleFunction<TSESTree.TSTypeParameter>;
+    TSTypeParameterDeclaration?: RuleFunction<TSESTree.TSTypeParameterDeclaration>;
+    TSTypeParameterInstantiation?: RuleFunction<TSESTree.TSTypeParameterInstantiation>;
+    TSTypePredicate?: RuleFunction<TSESTree.TSTypePredicate>;
+    TSTypeQuery?: RuleFunction<TSESTree.TSTypeQuery>;
+    TSTypeReference?: RuleFunction<TSESTree.TSTypeReference>;
+    TSUndefinedKeyword?: RuleFunction<TSESTree.TSUndefinedKeyword>;
+    TSUnionType?: RuleFunction<TSESTree.TSUnionType>;
+    TSUnknownKeyword?: RuleFunction<TSESTree.TSUnknownKeyword>;
+    TSVoidKeyword?: RuleFunction<TSESTree.TSVoidKeyword>;
+    UnaryExpression?: RuleFunction<TSESTree.UnaryExpression>;
+    UpdateExpression?: RuleFunction<TSESTree.UpdateExpression>;
+    VariableDeclaration?: RuleFunction<TSESTree.VariableDeclaration>;
+    VariableDeclarator?: RuleFunction<TSESTree.VariableDeclarator>;
+    WhileStatement?: RuleFunction<TSESTree.WhileStatement>;
+    WithStatement?: RuleFunction<TSESTree.WithStatement>;
+    YieldExpression?: RuleFunction<TSESTree.YieldExpression>;
+}
+interface RuleModule<TMessageIds extends string, TOptions extends readonly unknown[], TRuleListener extends RuleListener = RuleListener> {
+    /**
+     * Metadata about the rule
+     */
+    meta: RuleMetaData<TMessageIds>;
+    /**
+     * Function which returns an object with methods that ESLint calls to “visit”
+     * nodes while traversing the abstract syntax tree.
+     */
+    create(context: Readonly<RuleContext<TMessageIds, TOptions>>): TRuleListener;
+}
+declare type RuleCreateFunction<TMessageIds extends string = never, TOptions extends readonly unknown[] = unknown[], TRuleListener extends RuleListener = RuleListener> = (context: Readonly<RuleContext<TMessageIds, TOptions>>) => TRuleListener;
+export { ReportDescriptor, ReportFixFunction, ReportSuggestionArray, RuleContext, RuleCreateFunction, RuleFix, RuleFixer, RuleFunction, RuleListener, RuleMetaData, RuleMetaDataDocs, RuleModule, };
+//# sourceMappingURL=Rule.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Rule.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Rule.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..6636ca0f1deb4e7620573f8c02adb3c05dc0ba83
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Rule.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Rule.d.ts","sourceRoot":"","sources":["../../src/ts-eslint/Rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,UAAU,gBAAgB;IACxB;;OAEG;IACH,QAAQ,EACJ,gBAAgB,GAChB,kBAAkB,GAClB,WAAW,GACX,iBAAiB,CAAC;IACtB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,WAAW,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IACtC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACpC;AACD,UAAU,YAAY,CAAC,WAAW,SAAS,MAAM;IAC/C;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAChC;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACtC;;;;;OAKG;IACH,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1C;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;OAEG;IACH,MAAM,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;CACrC;AAED,UAAU,OAAO;IACf,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,SAAS;IACjB,eAAe,CACb,WAAW,EAAE,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,EAC3C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAEX,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAE9D,gBAAgB,CACd,WAAW,EAAE,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,EAC3C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAEX,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAE/D,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC;IAE7D,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC;IAEvC,WAAW,CACT,WAAW,EAAE,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,EAC3C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAEX,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3D;AAED,aAAK,iBAAiB,GAAG,CACvB,KAAK,EAAE,SAAS,KACb,IAAI,GAAG,OAAO,GAAG,OAAO,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC5D,aAAK,qBAAqB,CAAC,WAAW,SAAS,MAAM,IAAI,oBAAoB,CAC3E,WAAW,CACZ,EAAE,CAAC;AAEJ,UAAU,oBAAoB,CAAC,WAAW,SAAS,MAAM;IACvD;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD;;OAEG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;CAIjC;AACD,UAAU,8BAA8B,CAAC,WAAW,SAAS,MAAM,CACjE,SAAQ,oBAAoB,CAAC,WAAW,CAAC;IACzC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC;CACxE;AAED,UAAU,+BAA+B;IACvC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC;IACjE;;OAEG;IACH,QAAQ,CAAC,GAAG,CAAC,EACT,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,GACjC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;CAC1C;AACD,UAAU,uBAAuB;IAC/B;;OAEG;IACH,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;CAC/E;AACD,aAAK,gBAAgB,CACnB,WAAW,SAAS,MAAM,IACxB,8BAA8B,CAAC,WAAW,CAAC,GAC7C,CAAC,+BAA+B,GAAG,uBAAuB,CAAC,CAAC;AAE9D,UAAU,WAAW,CACnB,WAAW,SAAS,MAAM,EAC1B,QAAQ,SAAS,SAAS,OAAO,EAAE;IAEnC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;;OAGG;IACH,OAAO,EAAE,QAAQ,CAAC;IAClB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC;IACpC;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElC;;;;OAIG;IACH,YAAY,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEhC;;;OAGG;IACH,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAE5D;;OAEG;IACH,WAAW,IAAI,MAAM,CAAC;IAEtB;;;OAGG;IACH,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC;IAExB;;;OAGG;IACH,aAAa,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEtC;;;OAGG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAE1C;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CACzD;AAID,aAAK,YAAY,CAAC,CAAC,SAAS,QAAQ,CAAC,QAAQ,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAE3E,UAAU,YAAY;IACpB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IACjD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,uBAAuB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IACzE,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,oBAAoB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACnE,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,SAAS,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7C,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,OAAO,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzC,qBAAqB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACrE,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,SAAS,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7C,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,oBAAoB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACnE,wBAAwB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IAC3E,sBAAsB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACvE,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC/C,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,sBAAsB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACvE,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,wBAAwB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IAC3E,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC/C,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,sBAAsB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACvE,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,OAAO,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,OAAO,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzC,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,OAAO,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,KAAK,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC/C,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,wBAAwB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IAC3E,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,KAAK,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,uBAAuB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IACzE,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,0BAA0B,CAAC,EAAE,YAAY,CACvC,QAAQ,CAAC,0BAA0B,CACpC,CAAC;IACF,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,0BAA0B,CAAC,EAAE,YAAY,CACvC,QAAQ,CAAC,0BAA0B,CACpC,CAAC;IACF,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,+BAA+B,CAAC,EAAE,YAAY,CAC5C,QAAQ,CAAC,+BAA+B,CACzC,CAAC;IACF,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,6BAA6B,CAAC,EAAE,YAAY,CAC1C,QAAQ,CAAC,6BAA6B,CACvC,CAAC;IACF,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,yBAAyB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IAC7E,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,yBAAyB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IAC7E,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,sBAAsB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACvE,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,4BAA4B,CAAC,EAAE,YAAY,CACzC,QAAQ,CAAC,4BAA4B,CACtC,CAAC;IACF,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,UAAU,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC/C,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,UAAU,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC/C,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,sBAAsB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACvE,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,0BAA0B,CAAC,EAAE,YAAY,CACvC,QAAQ,CAAC,0BAA0B,CACpC,CAAC;IACF,4BAA4B,CAAC,EAAE,YAAY,CACzC,QAAQ,CAAC,4BAA4B,CACtC,CAAC;IACF,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;CAC1D;AAED,UAAU,UAAU,CAClB,WAAW,SAAS,MAAM,EAC1B,QAAQ,SAAS,SAAS,OAAO,EAAE,EAEnC,aAAa,SAAS,YAAY,GAAG,YAAY;IAEjD;;OAEG;IACH,IAAI,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAEhC;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,GAAG,aAAa,CAAC;CAC9E;AAED,aAAK,kBAAkB,CACrB,WAAW,SAAS,MAAM,GAAG,KAAK,EAClC,QAAQ,SAAS,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,EAE/C,aAAa,SAAS,YAAY,GAAG,YAAY,IAC/C,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,KAAK,aAAa,CAAC;AAE7E,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,UAAU,GACX,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Rule.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Rule.js
new file mode 100644
index 0000000000000000000000000000000000000000..8113a7ebda1e253fb8700303c264fd7e49c4a5db
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Rule.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Rule.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Rule.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Rule.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..88c1f037839f97da06b04c8b899d89bd5af29291
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Rule.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Rule.js","sourceRoot":"","sources":["../../src/ts-eslint/Rule.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/RuleTester.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/RuleTester.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5544bcdb64b521580e7fa7da8624e8f1b2253e48
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/RuleTester.d.ts
@@ -0,0 +1,143 @@
+import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '../ts-estree';
+import { ParserOptions } from './ParserOptions';
+import { RuleCreateFunction, RuleModule } from './Rule';
+interface ValidTestCase<TOptions extends Readonly<unknown[]>> {
+    /**
+     * Code for the test case.
+     */
+    readonly code: string;
+    /**
+     * Environments for the test case.
+     */
+    readonly env?: Readonly<Record<string, boolean>>;
+    /**
+     * The fake filename for the test case. Useful for rules that make assertion about filenames.
+     */
+    readonly filename?: string;
+    /**
+     * The additional global variables.
+     */
+    readonly globals?: Record<string, 'readonly' | 'writable' | 'off' | true>;
+    /**
+     * Options for the test case.
+     */
+    readonly options?: Readonly<TOptions>;
+    /**
+     * The absolute path for the parser.
+     */
+    readonly parser?: string;
+    /**
+     * Options for the parser.
+     */
+    readonly parserOptions?: Readonly<ParserOptions>;
+    /**
+     * Settings for the test case.
+     */
+    readonly settings?: Readonly<Record<string, unknown>>;
+}
+interface SuggestionOutput<TMessageIds extends string> {
+    /**
+     * Reported message ID.
+     */
+    readonly messageId: TMessageIds;
+    /**
+     * The data used to fill the message template.
+     */
+    readonly data?: Readonly<Record<string, unknown>>;
+    /**
+     * NOTE: Suggestions will be applied as a stand-alone change, without triggering multi-pass fixes.
+     * Each individual error has its own suggestion, so you have to show the correct, _isolated_ output for each suggestion.
+     */
+    readonly output: string;
+}
+interface InvalidTestCase<TMessageIds extends string, TOptions extends Readonly<unknown[]>> extends ValidTestCase<TOptions> {
+    /**
+     * Expected errors.
+     */
+    readonly errors: readonly TestCaseError<TMessageIds>[];
+    /**
+     * The expected code after autofixes are applied. If set to `null`, the test runner will assert that no autofix is suggested.
+     */
+    readonly output?: string | null;
+}
+interface TestCaseError<TMessageIds extends string> {
+    /**
+     * The 1-based column number of the reported start location.
+     */
+    readonly column?: number;
+    /**
+     * The data used to fill the message template.
+     */
+    readonly data?: Readonly<Record<string, unknown>>;
+    /**
+     * The 1-based column number of the reported end location.
+     */
+    readonly endColumn?: number;
+    /**
+     * The 1-based line number of the reported end location.
+     */
+    readonly endLine?: number;
+    /**
+     * The 1-based line number of the reported start location.
+     */
+    readonly line?: number;
+    /**
+     * Reported message ID.
+     */
+    readonly messageId: TMessageIds;
+    /**
+     * Reported suggestions.
+     */
+    readonly suggestions?: SuggestionOutput<TMessageIds>[] | null;
+    /**
+     * The type of the reported AST node.
+     */
+    readonly type?: AST_NODE_TYPES | AST_TOKEN_TYPES;
+}
+interface RunTests<TMessageIds extends string, TOptions extends Readonly<unknown[]>> {
+    readonly valid: readonly (ValidTestCase<TOptions> | string)[];
+    readonly invalid: readonly InvalidTestCase<TMessageIds, TOptions>[];
+}
+interface RuleTesterConfig {
+    readonly parser: string;
+    readonly parserOptions?: Readonly<ParserOptions>;
+}
+declare class RuleTesterBase {
+    /**
+     * Creates a new instance of RuleTester.
+     * @param testerConfig extra configuration for the tester
+     */
+    constructor(testerConfig?: RuleTesterConfig);
+    /**
+     * Adds a new rule test to execute.
+     * @param ruleName The name of the rule to run.
+     * @param rule The rule to test.
+     * @param test The collection of tests to run.
+     */
+    run<TMessageIds extends string, TOptions extends Readonly<unknown[]>>(ruleName: string, rule: RuleModule<TMessageIds, TOptions>, tests: RunTests<TMessageIds, TOptions>): void;
+    /**
+     * If you supply a value to this property, the rule tester will call this instead of using the version defined on
+     * the global namespace.
+     * @param text a string describing the rule
+     * @param callback the test callback
+     */
+    static describe?: (text: string, callback: () => void) => void;
+    /**
+     * If you supply a value to this property, the rule tester will call this instead of using the version defined on
+     * the global namespace.
+     * @param text a string describing the test case
+     * @param callback the test callback
+     */
+    static it?: (text: string, callback: () => void) => void;
+    /**
+     * Define a rule for one particular run of tests.
+     * @param name The name of the rule to define.
+     * @param rule The rule definition.
+     */
+    defineRule<TMessageIds extends string, TOptions extends Readonly<unknown[]>>(name: string, rule: RuleModule<TMessageIds, TOptions> | RuleCreateFunction<TMessageIds, TOptions>): void;
+}
+declare const RuleTester_base: typeof RuleTesterBase;
+declare class RuleTester extends RuleTester_base {
+}
+export { InvalidTestCase, SuggestionOutput, RuleTester, RuleTesterConfig, RunTests, TestCaseError, ValidTestCase, };
+//# sourceMappingURL=RuleTester.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/RuleTester.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/RuleTester.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..c6df5dbf05c4fef1a5da6f1db6a6bb399ceafcb7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/RuleTester.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"RuleTester.d.ts","sourceRoot":"","sources":["../../src/ts-eslint/RuleTester.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/RuleTester.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/RuleTester.js
new file mode 100644
index 0000000000000000000000000000000000000000..f31d0a677feb2a90743c200f763015c82afad820
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/RuleTester.js
@@ -0,0 +1,8 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.RuleTester = void 0;
+const eslint_1 = require("eslint");
+class RuleTester extends eslint_1.RuleTester {
+}
+exports.RuleTester = RuleTester;
+//# sourceMappingURL=RuleTester.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/RuleTester.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/RuleTester.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..0eefb5bd81e8960c3ae97bf8b2a43bbd3c78533b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/RuleTester.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"RuleTester.js","sourceRoot":"","sources":["../../src/ts-eslint/RuleTester.ts"],"names":[],"mappings":";;;AAAA,mCAAwD;AA6KxD,MAAM,UAAW,SAAS,mBAA0C;CAAG;AAKrE,gCAAU"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Scope.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Scope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..37af41667906ca3e6a0a2dd6c6a315f1d7a71309
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Scope.d.ts
@@ -0,0 +1,44 @@
+import * as scopeManager from '@typescript-eslint/scope-manager';
+declare namespace Scope {
+    type ScopeManager = scopeManager.ScopeManager;
+    type Reference = scopeManager.Reference;
+    type Variable = scopeManager.Variable | scopeManager.ESLintScopeVariable;
+    type Scope = scopeManager.Scope;
+    const ScopeType: typeof scopeManager.ScopeType;
+    type DefinitionType = scopeManager.Definition;
+    type Definition = scopeManager.Definition;
+    const DefinitionType: typeof scopeManager.DefinitionType;
+    namespace Definitions {
+        type CatchClauseDefinition = scopeManager.CatchClauseDefinition;
+        type ClassNameDefinition = scopeManager.ClassNameDefinition;
+        type FunctionNameDefinition = scopeManager.FunctionNameDefinition;
+        type ImplicitGlobalVariableDefinition = scopeManager.ImplicitGlobalVariableDefinition;
+        type ImportBindingDefinition = scopeManager.ImportBindingDefinition;
+        type ParameterDefinition = scopeManager.ParameterDefinition;
+        type TSEnumMemberDefinition = scopeManager.TSEnumMemberDefinition;
+        type TSEnumNameDefinition = scopeManager.TSEnumNameDefinition;
+        type TSModuleNameDefinition = scopeManager.TSModuleNameDefinition;
+        type TypeDefinition = scopeManager.TypeDefinition;
+        type VariableDefinition = scopeManager.VariableDefinition;
+    }
+    namespace Scopes {
+        type BlockScope = scopeManager.BlockScope;
+        type CatchScope = scopeManager.CatchScope;
+        type ClassScope = scopeManager.ClassScope;
+        type ConditionalTypeScope = scopeManager.ConditionalTypeScope;
+        type ForScope = scopeManager.ForScope;
+        type FunctionExpressionNameScope = scopeManager.FunctionExpressionNameScope;
+        type FunctionScope = scopeManager.FunctionScope;
+        type FunctionTypeScope = scopeManager.FunctionTypeScope;
+        type GlobalScope = scopeManager.GlobalScope;
+        type MappedTypeScope = scopeManager.MappedTypeScope;
+        type ModuleScope = scopeManager.ModuleScope;
+        type SwitchScope = scopeManager.SwitchScope;
+        type TSEnumScope = scopeManager.TSEnumScope;
+        type TSModuleScope = scopeManager.TSModuleScope;
+        type TypeScope = scopeManager.TypeScope;
+        type WithScope = scopeManager.WithScope;
+    }
+}
+export { Scope };
+//# sourceMappingURL=Scope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Scope.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Scope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..ac3b0011fb0e406ea86e2d345a106063f05532e3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Scope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Scope.d.ts","sourceRoot":"","sources":["../../src/ts-eslint/Scope.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,YAAY,MAAM,kCAAkC,CAAC;AAEjE,kBAAU,KAAK,CAAC;IACd,KAAY,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC;IACrD,KAAY,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;IAC/C,KAAY,QAAQ,GAChB,YAAY,CAAC,QAAQ,GACrB,YAAY,CAAC,mBAAmB,CAAC;IACrC,KAAY,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IAChC,MAAM,SAAS,+BAAyB,CAAC;IAEhD,KAAY,cAAc,GAAG,YAAY,CAAC,UAAU,CAAC;IACrD,KAAY,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;IAC1C,MAAM,cAAc,oCAA8B,CAAC;IAE1D,UAAiB,WAAW,CAAC;QAC3B,KAAY,qBAAqB,GAAG,YAAY,CAAC,qBAAqB,CAAC;QACvE,KAAY,mBAAmB,GAAG,YAAY,CAAC,mBAAmB,CAAC;QACnE,KAAY,sBAAsB,GAAG,YAAY,CAAC,sBAAsB,CAAC;QACzE,KAAY,gCAAgC,GAAG,YAAY,CAAC,gCAAgC,CAAC;QAC7F,KAAY,uBAAuB,GAAG,YAAY,CAAC,uBAAuB,CAAC;QAC3E,KAAY,mBAAmB,GAAG,YAAY,CAAC,mBAAmB,CAAC;QACnE,KAAY,sBAAsB,GAAG,YAAY,CAAC,sBAAsB,CAAC;QACzE,KAAY,oBAAoB,GAAG,YAAY,CAAC,oBAAoB,CAAC;QACrE,KAAY,sBAAsB,GAAG,YAAY,CAAC,sBAAsB,CAAC;QACzE,KAAY,cAAc,GAAG,YAAY,CAAC,cAAc,CAAC;QACzD,KAAY,kBAAkB,GAAG,YAAY,CAAC,kBAAkB,CAAC;KAClE;IACD,UAAiB,MAAM,CAAC;QACtB,KAAY,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;QACjD,KAAY,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;QACjD,KAAY,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;QACjD,KAAY,oBAAoB,GAAG,YAAY,CAAC,oBAAoB,CAAC;QACrE,KAAY,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;QAC7C,KAAY,2BAA2B,GAAG,YAAY,CAAC,2BAA2B,CAAC;QACnF,KAAY,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC;QACvD,KAAY,iBAAiB,GAAG,YAAY,CAAC,iBAAiB,CAAC;QAC/D,KAAY,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;QACnD,KAAY,eAAe,GAAG,YAAY,CAAC,eAAe,CAAC;QAC3D,KAAY,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;QACnD,KAAY,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;QACnD,KAAY,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;QACnD,KAAY,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC;QACvD,KAAY,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;QAC/C,KAAY,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;KAChD;CACF;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Scope.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Scope.js
new file mode 100644
index 0000000000000000000000000000000000000000..f2d43b6f2e3ee00004b6de1d68e2da627380c173
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Scope.js
@@ -0,0 +1,31 @@
+"use strict";
+/* eslint-disable @typescript-eslint/no-namespace */
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Scope = void 0;
+const scopeManager = __importStar(require("@typescript-eslint/scope-manager"));
+var Scope;
+(function (Scope) {
+    Scope.ScopeType = scopeManager.ScopeType;
+    Scope.DefinitionType = scopeManager.DefinitionType;
+})(Scope || (Scope = {}));
+exports.Scope = Scope;
+//# sourceMappingURL=Scope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Scope.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Scope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..1264fa830d14c80f3194f4ded1d48c36d7061279
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/Scope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Scope.js","sourceRoot":"","sources":["../../src/ts-eslint/Scope.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;;;;;;;;;;;;;;;;;;;;AAEpD,+EAAiE;AAEjE,IAAU,KAAK,CA4Cd;AA5CD,WAAU,KAAK;IAOA,eAAS,GAAG,YAAY,CAAC,SAAS,CAAC;IAInC,oBAAc,GAAG,YAAY,CAAC,cAAc,CAAC;AAiC5D,CAAC,EA5CS,KAAK,KAAL,KAAK,QA4Cd;AAEQ,sBAAK"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/SourceCode.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/SourceCode.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5d5b19365c7cf6c6cfd8898c217c17b8c0351247
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/SourceCode.d.ts
@@ -0,0 +1,350 @@
+import { ParserServices, TSESTree } from '../ts-estree';
+import { Scope } from './Scope';
+declare class TokenStore {
+    /**
+     * Checks whether any comments exist or not between the given 2 nodes.
+     * @param left The node to check.
+     * @param right The node to check.
+     * @returns `true` if one or more comments exist.
+     */
+    commentsExistBetween(left: TSESTree.Node | TSESTree.Token, right: TSESTree.Node | TSESTree.Token): boolean;
+    /**
+     * Gets all comment tokens directly after the given node or token.
+     * @param nodeOrToken The AST node or token to check for adjacent comment tokens.
+     * @returns An array of comments in occurrence order.
+     */
+    getCommentsAfter(nodeOrToken: TSESTree.Node | TSESTree.Token): TSESTree.Comment[];
+    /**
+     * Gets all comment tokens directly before the given node or token.
+     * @param nodeOrToken The AST node or token to check for adjacent comment tokens.
+     * @returns An array of comments in occurrence order.
+     */
+    getCommentsBefore(nodeOrToken: TSESTree.Node | TSESTree.Token): TSESTree.Comment[];
+    /**
+     * Gets all comment tokens inside the given node.
+     * @param node The AST node to get the comments for.
+     * @returns An array of comments in occurrence order.
+     */
+    getCommentsInside(node: TSESTree.Node): TSESTree.Comment[];
+    /**
+     * Gets the first token of the given node.
+     * @param node The AST node.
+     * @param option The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.
+     * @returns An object representing the token.
+     */
+    getFirstToken<T extends SourceCode.CursorWithSkipOptions>(node: TSESTree.Node, options?: T): SourceCode.ReturnTypeFromOptions<T> | null;
+    /**
+     * Gets the first token between two non-overlapping nodes.
+     * @param left Node before the desired token range.
+     * @param right Node after the desired token range.
+     * @param option The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.
+     * @returns An object representing the token.
+     */
+    getFirstTokenBetween<T extends SourceCode.CursorWithSkipOptions>(left: TSESTree.Node | TSESTree.Token | TSESTree.Comment, right: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T> | null;
+    /**
+     * Gets the first `count` tokens of the given node.
+     * @param node The AST node.
+     * @param options The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.
+     * @returns Tokens.
+     */
+    getFirstTokens<T extends SourceCode.CursorWithCountOptions>(node: TSESTree.Node, options?: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets the first `count` tokens between two non-overlapping nodes.
+     * @param left Node before the desired token range.
+     * @param right Node after the desired token range.
+     * @param options The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.
+     * @returns Tokens between left and right.
+     */
+    getFirstTokensBetween<T extends SourceCode.CursorWithCountOptions>(left: TSESTree.Node | TSESTree.Token | TSESTree.Comment, right: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets the last token of the given node.
+     * @param node The AST node.
+     * @param option The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.
+     * @returns An object representing the token.
+     */
+    getLastToken<T extends SourceCode.CursorWithSkipOptions>(node: TSESTree.Node, options?: T): SourceCode.ReturnTypeFromOptions<T> | null;
+    /**
+     * Gets the last token between two non-overlapping nodes.
+     * @param left Node before the desired token range.
+     * @param right Node after the desired token range.
+     * @param option The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.
+     * @returns An object representing the token.
+     */
+    getLastTokenBetween<T extends SourceCode.CursorWithSkipOptions>(left: TSESTree.Node | TSESTree.Token | TSESTree.Comment, right: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T> | null;
+    /**
+     * Gets the last `count` tokens of the given node.
+     * @param node The AST node.
+     * @param options The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.
+     * @returns Tokens.
+     */
+    getLastTokens<T extends SourceCode.CursorWithCountOptions>(node: TSESTree.Node, options?: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets the last `count` tokens between two non-overlapping nodes.
+     * @param left Node before the desired token range.
+     * @param right Node after the desired token range.
+     * @param options The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.
+     * @returns Tokens between left and right.
+     */
+    getLastTokensBetween<T extends SourceCode.CursorWithCountOptions>(left: TSESTree.Node | TSESTree.Token | TSESTree.Comment, right: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets the token that follows a given node or token.
+     * @param node The AST node or token.
+     * @param option The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.
+     * @returns An object representing the token.
+     */
+    getTokenAfter<T extends SourceCode.CursorWithSkipOptions>(node: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T> | null;
+    /**
+     * Gets the token that precedes a given node or token.
+     * @param node The AST node or token.
+     * @param options The option object
+     * @returns An object representing the token.
+     */
+    getTokenBefore<T extends SourceCode.CursorWithSkipOptions>(node: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T> | null;
+    /**
+     * Gets the token starting at the specified index.
+     * @param offset Index of the start of the token's range.
+     * @param option The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.
+     * @returns The token starting at index, or null if no such token.
+     */
+    getTokenByRangeStart<T extends {
+        includeComments?: boolean;
+    }>(offset: number, options?: T): SourceCode.ReturnTypeFromOptions<T> | null;
+    /**
+     * Gets all tokens that are related to the given node.
+     * @param node The AST node.
+     * @param beforeCount The number of tokens before the node to retrieve.
+     * @param afterCount The number of tokens after the node to retrieve.
+     * @returns Array of objects representing tokens.
+     */
+    getTokens(node: TSESTree.Node, beforeCount?: number, afterCount?: number): TSESTree.Token[];
+    /**
+     * Gets all tokens that are related to the given node.
+     * @param node The AST node.
+     * @param options The option object. If this is a function then it's `options.filter`.
+     * @returns Array of objects representing tokens.
+     */
+    getTokens<T extends SourceCode.CursorWithCountOptions>(node: TSESTree.Node, options: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets the `count` tokens that follows a given node or token.
+     * @param node The AST node.
+     * @param options The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.
+     * @returns Tokens.
+     */
+    getTokensAfter<T extends SourceCode.CursorWithCountOptions>(node: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets the `count` tokens that precedes a given node or token.
+     * @param node The AST node.
+     * @param options The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.
+     * @returns Tokens.
+     */
+    getTokensBefore<T extends SourceCode.CursorWithCountOptions>(node: TSESTree.Node | TSESTree.Token | TSESTree.Comment, options?: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets all of the tokens between two non-overlapping nodes.
+     * @param left Node before the desired token range.
+     * @param right Node after the desired token range.
+     * @param options The option object. If this is a function then it's `options.filter`.
+     * @returns Tokens between left and right.
+     */
+    getTokensBetween<T extends SourceCode.CursorWithCountOptions>(left: TSESTree.Node | TSESTree.Token | TSESTree.Comment, right: TSESTree.Node | TSESTree.Token | TSESTree.Comment, padding?: T): SourceCode.ReturnTypeFromOptions<T>[];
+    /**
+     * Gets all of the tokens between two non-overlapping nodes.
+     * @param left Node before the desired token range.
+     * @param right Node after the desired token range.
+     * @param padding Number of extra tokens on either side of center.
+     * @returns Tokens between left and right.
+     */
+    getTokensBetween<T extends SourceCode.CursorWithCountOptions>(left: TSESTree.Node | TSESTree.Token | TSESTree.Comment, right: TSESTree.Node | TSESTree.Token | TSESTree.Comment, padding?: number): SourceCode.ReturnTypeFromOptions<T>[];
+}
+declare class SourceCodeBase extends TokenStore {
+    /**
+     * Represents parsed source code.
+     * @param text The source code text.
+     * @param ast The Program node of the AST representing the code. This AST should be created from the text that BOM was stripped.
+     */
+    constructor(text: string, ast: SourceCode.Program);
+    /**
+     * Represents parsed source code.
+     * @param config The config object.
+     */
+    constructor(config: SourceCode.SourceCodeConfig);
+    /**
+     * The parsed AST for the source code.
+     */
+    ast: SourceCode.Program;
+    /**
+     * Retrieves an array containing all comments in the source code.
+     * @returns An array of comment nodes.
+     */
+    getAllComments(): TSESTree.Comment[];
+    /**
+     * Gets all comments for the given node.
+     * @param node The AST node to get the comments for.
+     * @returns An object containing a leading and trailing array of comments indexed by their position.
+     */
+    getComments(node: TSESTree.Node): {
+        leading: TSESTree.Comment[];
+        trailing: TSESTree.Comment[];
+    };
+    /**
+     * Converts a (line, column) pair into a range index.
+     * @param loc A line/column location
+     * @returns The range index of the location in the file.
+     */
+    getIndexFromLoc(location: TSESTree.LineAndColumnData): number;
+    /**
+     * Gets the entire source text split into an array of lines.
+     * @returns The source text as an array of lines.
+     */
+    getLines(): string[];
+    /**
+     * Converts a source text index into a (line, column) pair.
+     * @param index The index of a character in a file
+     * @returns A {line, column} location object with a 0-indexed column
+     */
+    getLocFromIndex(index: number): TSESTree.LineAndColumnData;
+    /**
+     * Gets the deepest node containing a range index.
+     * @param index Range index of the desired node.
+     * @returns The node if found or `null` if not found.
+     */
+    getNodeByRangeIndex(index: number): TSESTree.Node | null;
+    /**
+     * Gets the source code for the given node.
+     * @param node The AST node to get the text for.
+     * @param beforeCount The number of characters before the node to retrieve.
+     * @param afterCount The number of characters after the node to retrieve.
+     * @returns The text representing the AST node.
+     */
+    getText(node?: TSESTree.Node, beforeCount?: number, afterCount?: number): string;
+    /**
+     * The flag to indicate that the source code has Unicode BOM.
+     */
+    hasBOM: boolean;
+    /**
+     * Determines if two nodes or tokens have at least one whitespace character
+     * between them. Order does not matter. Returns false if the given nodes or
+     * tokens overlap.
+     * This was added in v6.7.0.
+     * @since 6.7.0
+     * @param first The first node or token to check between.
+     * @param second The second node or token to check between.
+     * @returns True if there is a whitespace character between any of the tokens found between the two given nodes or tokens.
+     */
+    isSpaceBetween?(first: TSESTree.Token | TSESTree.Comment | TSESTree.Node, second: TSESTree.Token | TSESTree.Comment | TSESTree.Node): boolean;
+    /**
+     * Determines if two nodes or tokens have at least one whitespace character
+     * between them. Order does not matter. Returns false if the given nodes or
+     * tokens overlap.
+     * For backward compatibility, this method returns true if there are
+     * `JSXText` tokens that contain whitespace between the two.
+     * @param first The first node or token to check between.
+     * @param second The second node or token to check between.
+     * @returns {boolean} True if there is a whitespace character between
+     * any of the tokens found between the two given nodes or tokens.
+     * @deprecated in favor of isSpaceBetween
+     */
+    isSpaceBetweenTokens(first: TSESTree.Token, second: TSESTree.Token): boolean;
+    /**
+     * The source code split into lines according to ECMA-262 specification.
+     * This is done to avoid each rule needing to do so separately.
+     */
+    lines: string[];
+    /**
+     * The indexes in `text` that each line starts
+     */
+    lineStartIndices: number[];
+    /**
+     * The parser services of this source code.
+     */
+    parserServices: ParserServices;
+    /**
+     * The scope of this source code.
+     */
+    scopeManager: Scope.ScopeManager | null;
+    /**
+     * The original text source code. BOM was stripped from this text.
+     */
+    text: string;
+    /**
+     * All of the tokens and comments in the AST.
+     */
+    tokensAndComments: (TSESTree.Comment | TSESTree.Token)[];
+    /**
+     * The visitor keys to traverse AST.
+     */
+    visitorKeys: SourceCode.VisitorKeys;
+    /**
+     * Split the source code into multiple lines based on the line delimiters.
+     * @param text Source code as a string.
+     * @returns Array of source code lines.
+     */
+    static splitLines(text: string): string[];
+}
+declare namespace SourceCode {
+    interface Program extends TSESTree.Program {
+        comments: TSESTree.Comment[];
+        tokens: TSESTree.Token[];
+    }
+    interface SourceCodeConfig {
+        /**
+         * The Program node of the AST representing the code. This AST should be created from the text that BOM was stripped.
+         */
+        ast: Program;
+        /**
+         * The parser services.
+         */
+        parserServices: ParserServices | null;
+        /**
+         * The scope of this source code.
+         */
+        scopeManager: Scope.ScopeManager | null;
+        /**
+         * The source code text.
+         */
+        text: string;
+        /**
+         * The visitor keys to traverse AST.
+         */
+        visitorKeys: VisitorKeys | null;
+    }
+    interface VisitorKeys {
+        [nodeType: string]: string[];
+    }
+    type FilterPredicate = (tokenOrComment: TSESTree.Token | TSESTree.Comment) => boolean;
+    type ReturnTypeFromOptions<T> = T extends {
+        includeComments: true;
+    } ? TSESTree.Token : Exclude<TSESTree.Token, TSESTree.Comment>;
+    type CursorWithSkipOptions = number | FilterPredicate | {
+        /**
+         * The predicate function to choose tokens.
+         */
+        filter?: FilterPredicate;
+        /**
+         * The flag to iterate comments as well.
+         */
+        includeComments?: boolean;
+        /**
+         * The count of tokens the cursor skips.
+         */
+        skip?: number;
+    };
+    type CursorWithCountOptions = number | FilterPredicate | {
+        /**
+         * The predicate function to choose tokens.
+         */
+        filter?: FilterPredicate;
+        /**
+         * The flag to iterate comments as well.
+         */
+        includeComments?: boolean;
+        /**
+         * The maximum count of tokens the cursor iterates.
+         */
+        count?: number;
+    };
+}
+declare const SourceCode_base: typeof SourceCodeBase;
+declare class SourceCode extends SourceCode_base {
+}
+export { SourceCode };
+//# sourceMappingURL=SourceCode.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/SourceCode.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/SourceCode.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..18f49a7f8252d5a0cd9c1a74b9c5699828c7d0bd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/SourceCode.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"SourceCode.d.ts","sourceRoot":"","sources":["../../src/ts-eslint/SourceCode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/SourceCode.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/SourceCode.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e029b1587cccca2746b6e431883ff8bc06b2980
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/SourceCode.js
@@ -0,0 +1,9 @@
+"use strict";
+/* eslint-disable @typescript-eslint/no-namespace */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.SourceCode = void 0;
+const eslint_1 = require("eslint");
+class SourceCode extends eslint_1.SourceCode {
+}
+exports.SourceCode = SourceCode;
+//# sourceMappingURL=SourceCode.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/SourceCode.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/SourceCode.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..60f58ea365043a0955f50f035997143ad6ef2b56
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/SourceCode.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"SourceCode.js","sourceRoot":"","sources":["../../src/ts-eslint/SourceCode.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;AAEpD,mCAAwD;AAubxD,MAAM,UAAW,SAAS,mBAA0C;CAAG;AAE9D,gCAAU"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/index.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..05d889d9d2659327d871fd7e71d670b8fb3831c6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/index.d.ts
@@ -0,0 +1,10 @@
+export * from './AST';
+export * from './CLIEngine';
+export * from './ESLint';
+export * from './Linter';
+export * from './ParserOptions';
+export * from './Rule';
+export * from './RuleTester';
+export * from './Scope';
+export * from './SourceCode';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/index.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..6b3df411ac153a7ee3ad99f30a7350a9201f242f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ts-eslint/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/index.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..41259584ecb2f69914047a9e20086df24ef0b4cf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/index.js
@@ -0,0 +1,22 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("./AST"), exports);
+__exportStar(require("./CLIEngine"), exports);
+__exportStar(require("./ESLint"), exports);
+__exportStar(require("./Linter"), exports);
+__exportStar(require("./ParserOptions"), exports);
+__exportStar(require("./Rule"), exports);
+__exportStar(require("./RuleTester"), exports);
+__exportStar(require("./Scope"), exports);
+__exportStar(require("./SourceCode"), exports);
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/index.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..7ffb8987e3efcf24d4dbafbe195e0c0211899b35
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-eslint/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ts-eslint/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAAsB;AACtB,8CAA4B;AAC5B,2CAAyB;AACzB,2CAAyB;AACzB,kDAAgC;AAChC,yCAAuB;AACvB,+CAA6B;AAC7B,0CAAwB;AACxB,+CAA6B"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-estree.d.ts b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-estree.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e72291e1fa925aa267042b6d536665ad1d18ead2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-estree.d.ts
@@ -0,0 +1,3 @@
+export { AST_NODE_TYPES, AST_TOKEN_TYPES, TSESTree, } from '@typescript-eslint/types';
+export { ParserServices } from '@typescript-eslint/typescript-estree/dist/parser-options';
+//# sourceMappingURL=ts-estree.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-estree.d.ts.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-estree.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..7e7b3d9f9c308b2aebc9ea0bda42de878dd843f9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-estree.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ts-estree.d.ts","sourceRoot":"","sources":["../src/ts-estree.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,cAAc,EACd,eAAe,EACf,QAAQ,GACT,MAAM,0BAA0B,CAAC;AAKlC,OAAO,EAAE,cAAc,EAAE,MAAM,0DAA0D,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-estree.js b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-estree.js
new file mode 100644
index 0000000000000000000000000000000000000000..4a32e9c8a4bc720f552adfe90602781ff46283f9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-estree.js
@@ -0,0 +1,10 @@
+"use strict";
+// for convenience's sake - export the types directly from here so consumers
+// don't need to reference/install both packages in their code
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TSESTree = exports.AST_TOKEN_TYPES = exports.AST_NODE_TYPES = void 0;
+var types_1 = require("@typescript-eslint/types");
+Object.defineProperty(exports, "AST_NODE_TYPES", { enumerable: true, get: function () { return types_1.AST_NODE_TYPES; } });
+Object.defineProperty(exports, "AST_TOKEN_TYPES", { enumerable: true, get: function () { return types_1.AST_TOKEN_TYPES; } });
+Object.defineProperty(exports, "TSESTree", { enumerable: true, get: function () { return types_1.TSESTree; } });
+//# sourceMappingURL=ts-estree.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-estree.js.map b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-estree.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..4806a28406eb1b03859f0ca98a1288bc9bb8e051
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/dist/ts-estree.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ts-estree.js","sourceRoot":"","sources":["../src/ts-estree.ts"],"names":[],"mappings":";AAAA,4EAA4E;AAC5E,8DAA8D;;;AAE9D,kDAIkC;AAHhC,uGAAA,cAAc,OAAA;AACd,wGAAA,eAAe,OAAA;AACf,iGAAA,QAAQ,OAAA"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/experimental-utils/package.json b/server/node_modules/@typescript-eslint/experimental-utils/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..df7b75dc13827ec8f95be1176b2f8f612e39ff36
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/experimental-utils/package.json
@@ -0,0 +1,94 @@
+{
+  "_from": "@typescript-eslint/experimental-utils@4.11.0",
+  "_id": "@typescript-eslint/experimental-utils@4.11.0",
+  "_inBundle": false,
+  "_integrity": "sha512-1VC6mSbYwl1FguKt8OgPs8xxaJgtqFpjY/UzUYDBKq4pfQ5lBvN2WVeqYkzf7evW42axUHYl2jm9tNyFsb8oLg==",
+  "_location": "/@typescript-eslint/experimental-utils",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "@typescript-eslint/experimental-utils@4.11.0",
+    "name": "@typescript-eslint/experimental-utils",
+    "escapedName": "@typescript-eslint%2fexperimental-utils",
+    "scope": "@typescript-eslint",
+    "rawSpec": "4.11.0",
+    "saveSpec": null,
+    "fetchSpec": "4.11.0"
+  },
+  "_requiredBy": [
+    "/@typescript-eslint/eslint-plugin"
+  ],
+  "_resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.11.0.tgz",
+  "_shasum": "d1a47cc6cfe1c080ce4ead79267574b9881a1565",
+  "_spec": "@typescript-eslint/experimental-utils@4.11.0",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\@typescript-eslint\\eslint-plugin",
+  "bugs": {
+    "url": "https://github.com/typescript-eslint/typescript-eslint/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@types/json-schema": "^7.0.3",
+    "@typescript-eslint/scope-manager": "4.11.0",
+    "@typescript-eslint/types": "4.11.0",
+    "@typescript-eslint/typescript-estree": "4.11.0",
+    "eslint-scope": "^5.0.0",
+    "eslint-utils": "^2.0.0"
+  },
+  "deprecated": false,
+  "description": "(Experimental) Utilities for working with TypeScript + ESLint together",
+  "devDependencies": {
+    "typescript": "*"
+  },
+  "engines": {
+    "node": "^10.12.0 || >=12.0.0"
+  },
+  "files": [
+    "dist",
+    "_ts3.4",
+    "package.json",
+    "README.md",
+    "LICENSE"
+  ],
+  "funding": {
+    "type": "opencollective",
+    "url": "https://opencollective.com/typescript-eslint"
+  },
+  "gitHead": "e8f73e168a89ff9a84038e760a667b646ede5956",
+  "homepage": "https://github.com/typescript-eslint/typescript-eslint#readme",
+  "keywords": [
+    "eslint",
+    "typescript",
+    "estree"
+  ],
+  "license": "MIT",
+  "main": "dist/index.js",
+  "name": "@typescript-eslint/experimental-utils",
+  "peerDependencies": {
+    "eslint": "*"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/typescript-eslint/typescript-eslint.git",
+    "directory": "packages/experimental-utils"
+  },
+  "scripts": {
+    "build": "tsc -b tsconfig.build.json",
+    "clean": "tsc -b tsconfig.build.json --clean",
+    "format": "prettier --write \"./**/*.{ts,js,json,md}\" --ignore-path ../../.prettierignore",
+    "lint": "eslint . --ext .js,.ts --ignore-path='../../.eslintignore'",
+    "postbuild": "downlevel-dts dist _ts3.4/dist",
+    "postclean": "rimraf dist && rimraf _ts3.4",
+    "test": "jest --coverage",
+    "typecheck": "tsc -p tsconfig.json --noEmit"
+  },
+  "types": "dist/index.d.ts",
+  "typesVersions": {
+    "<3.8": {
+      "*": [
+        "_ts3.4/*"
+      ]
+    }
+  },
+  "version": "4.11.0"
+}
diff --git a/server/node_modules/@typescript-eslint/parser/CHANGELOG.md b/server/node_modules/@typescript-eslint/parser/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..59f40dbfbf59027b93d5583ff4442ca8fc5c8991
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/parser/CHANGELOG.md
@@ -0,0 +1,912 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [4.11.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.10.0...v4.11.0) (2020-12-21)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [4.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.9.1...v4.10.0) (2020-12-14)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+## [4.9.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.9.0...v4.9.1) (2020-12-07)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [4.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.2...v4.9.0) (2020-11-30)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+## [4.8.2](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.1...v4.8.2) (2020-11-23)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+## [4.8.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.0...v4.8.1) (2020-11-17)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [4.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.7.0...v4.8.0) (2020-11-16)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [4.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.6.1...v4.7.0) (2020-11-09)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+## [4.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.6.0...v4.6.1) (2020-11-02)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [4.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.5.0...v4.6.0) (2020-10-26)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [4.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.4.1...v4.5.0) (2020-10-19)
+
+
+### Bug Fixes
+
+* **parser:** minor fix regexp, map-filter to reduce ([#2684](https://github.com/typescript-eslint/typescript-eslint/issues/2684)) ([f1329f6](https://github.com/typescript-eslint/typescript-eslint/commit/f1329f6c4e3d1de21b1dc59c30ce16503c346eee))
+
+
+### Features
+
+* **typescript-estree:** add flag EXPERIMENTAL_useSourceOfProjectReferenceRedirect ([#2669](https://github.com/typescript-eslint/typescript-eslint/issues/2669)) ([90a5878](https://github.com/typescript-eslint/typescript-eslint/commit/90a587845088da1b205e4d7d77dbc3f9447b1c5a))
+
+
+
+
+
+## [4.4.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.4.0...v4.4.1) (2020-10-12)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [4.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.3.0...v4.4.0) (2020-10-05)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [4.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.2.0...v4.3.0) (2020-09-28)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [4.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.1.1...v4.2.0) (2020-09-21)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+## [4.1.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.1.0...v4.1.1) (2020-09-14)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [4.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.0.1...v4.1.0) (2020-09-07)
+
+
+### Features
+
+* **scope-manager:** add support for JSX scope analysis ([#2498](https://github.com/typescript-eslint/typescript-eslint/issues/2498)) ([f887ab5](https://github.com/typescript-eslint/typescript-eslint/commit/f887ab51f58c1b3571f9a14832864bc0ca59623f)), closes [#2455](https://github.com/typescript-eslint/typescript-eslint/issues/2455) [#2477](https://github.com/typescript-eslint/typescript-eslint/issues/2477)
+
+
+
+
+
+## [4.0.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.0.0...v4.0.1) (2020-08-31)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [4.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.10.1...v4.0.0) (2020-08-31)
+
+## [Please see the release notes for v4.0.0](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v4.0.0)
+
+### Features
+
+* consume new scope analysis package ([#2039](https://github.com/typescript-eslint/typescript-eslint/issues/2039)) ([3be125d](https://github.com/typescript-eslint/typescript-eslint/commit/3be125d9bdbee1984ac6037874edf619213bd3d0))
+* support ESTree optional chaining representation ([#2308](https://github.com/typescript-eslint/typescript-eslint/issues/2308)) ([e9d2ab6](https://github.com/typescript-eslint/typescript-eslint/commit/e9d2ab638b6767700b52797e74b814ea059beaae))
+* **typescript-estree:** switch to globby ([#2418](https://github.com/typescript-eslint/typescript-eslint/issues/2418)) ([3a7ec9b](https://github.com/typescript-eslint/typescript-eslint/commit/3a7ec9bcf1873a99c6da2f19ade8ab4763b4793c)), closes [#2398](https://github.com/typescript-eslint/typescript-eslint/issues/2398)
+
+
+### BREAKING CHANGES
+
+* **typescript-estree:** - removes the ability to supply a `RegExp` to `projectFolderIgnoreList`, and changes the meaning of the string value from a regex to a glob.
+
+
+
+
+
+## [3.10.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.10.0...v3.10.1) (2020-08-25)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [3.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.9.1...v3.10.0) (2020-08-24)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+## [3.9.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.9.0...v3.9.1) (2020-08-17)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [3.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.8.0...v3.9.0) (2020-08-10)
+
+
+### Features
+
+* **typescript-estree:** support TSv4 labelled tuple members ([#2378](https://github.com/typescript-eslint/typescript-eslint/issues/2378)) ([00d84ff](https://github.com/typescript-eslint/typescript-eslint/commit/00d84ffbcbe9d0ec98bdb2f2ce59959a27ce4dbe))
+
+
+
+
+
+# [3.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.7.1...v3.8.0) (2020-08-03)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+## [3.7.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.7.0...v3.7.1) (2020-07-27)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [3.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.6.1...v3.7.0) (2020-07-20)
+
+
+### Features
+
+* **typescript-estree:** support short-circuiting assignment operators ([#2307](https://github.com/typescript-eslint/typescript-eslint/issues/2307)) ([2c90d9f](https://github.com/typescript-eslint/typescript-eslint/commit/2c90d9fa3aa5ebd7db697dddb7762bca2dd0e06b))
+* **typescript-estree:** support type annotations on catch clauses ([#2306](https://github.com/typescript-eslint/typescript-eslint/issues/2306)) ([b5afe9c](https://github.com/typescript-eslint/typescript-eslint/commit/b5afe9c560b9f38c8dffc312a600db30944129c8))
+
+
+
+
+
+## [3.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.6.0...v3.6.1) (2020-07-13)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [3.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.5.0...v3.6.0) (2020-07-06)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [3.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.4.0...v3.5.0) (2020-06-29)
+
+
+### Features
+
+* split types into their own package ([#2229](https://github.com/typescript-eslint/typescript-eslint/issues/2229)) ([5f45918](https://github.com/typescript-eslint/typescript-eslint/commit/5f4591886f3438329fbf2229b03ac66174334a24))
+
+
+
+
+
+# [3.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.3.0...v3.4.0) (2020-06-22)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [3.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.2.0...v3.3.0) (2020-06-15)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [3.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.1.0...v3.2.0) (2020-06-08)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [prefer-optional-chain] handling first member expression ([#2156](https://github.com/typescript-eslint/typescript-eslint/issues/2156)) ([de18660](https://github.com/typescript-eslint/typescript-eslint/commit/de18660a8cf8f7033798646d8c5b0938d1accb12))
+
+
+
+
+
+# [3.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.0.2...v3.1.0) (2020-06-01)
+
+
+### Bug Fixes
+
+* **experimental-utils:** downlevel type declarations for versions older than 3.8 ([#2133](https://github.com/typescript-eslint/typescript-eslint/issues/2133)) ([7925823](https://github.com/typescript-eslint/typescript-eslint/commit/792582326a8065270b69a0ffcaad5a7b4b103ff3))
+
+
+
+
+
+## [3.0.2](https://github.com/typescript-eslint/typescript-eslint/compare/v3.0.1...v3.0.2) (2020-05-27)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+## [3.0.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.0.0...v3.0.1) (2020-05-25)
+
+
+### Bug Fixes
+
+* **typescript-estree:** handle `BigInt` with `_` numeric separator ([#2067](https://github.com/typescript-eslint/typescript-eslint/issues/2067)) ([66f1627](https://github.com/typescript-eslint/typescript-eslint/commit/66f1627b11a566d5b925a577e800f99d5c808be2))
+
+
+
+
+
+# [3.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.34.0...v3.0.0) (2020-05-21)
+
+## [Please see the release notes for v3.0.0](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v3.0.0)
+
+### Bug Fixes
+
+* **typescript-estree:** use `TSEmptyBodyFunctionExpression` for body-less nodes ([#1289](https://github.com/typescript-eslint/typescript-eslint/issues/1289)) ([82e7163](https://github.com/typescript-eslint/typescript-eslint/commit/82e7163214b56ccde93ba97807b161669a50a60b))
+
+
+### Features
+
+* add index files to parser and typescript-estree ([3dfc46d](https://github.com/typescript-eslint/typescript-eslint/commit/3dfc46dccbbd28eed2d74c7b6cacddf1a0848598))
+* **experimental-utils:** upgrade eslint types for v7 ([#2023](https://github.com/typescript-eslint/typescript-eslint/issues/2023)) ([06869c9](https://github.com/typescript-eslint/typescript-eslint/commit/06869c9656fa37936126666845aee40aad546ebd))
+* upgrade to ESLint v7 ([#2022](https://github.com/typescript-eslint/typescript-eslint/issues/2022)) ([208de71](https://github.com/typescript-eslint/typescript-eslint/commit/208de71059746bf38e94bd460346ffb2698a3e12))
+* **typescript-estree:** align nodes with estree 2020 ([#1389](https://github.com/typescript-eslint/typescript-eslint/issues/1389)) ([aff5b62](https://github.com/typescript-eslint/typescript-eslint/commit/aff5b62044f9b93f2087a1d261e9be3f8d6fd54d))
+* **typescript-estree:** align optional fields ([#1429](https://github.com/typescript-eslint/typescript-eslint/issues/1429)) ([0e0010f](https://github.com/typescript-eslint/typescript-eslint/commit/0e0010f82952f9beeeb84136eea00cc5eecc9db6))
+* drop support for node v8 ([#1997](https://github.com/typescript-eslint/typescript-eslint/issues/1997)) ([b6c3b7b](https://github.com/typescript-eslint/typescript-eslint/commit/b6c3b7b84b8d199fa75a46432febd4a364a63217))
+* **eslint-plugin:** [ban-types] rework default options ([#848](https://github.com/typescript-eslint/typescript-eslint/issues/848)) ([8e31d5d](https://github.com/typescript-eslint/typescript-eslint/commit/8e31d5dbe9fe5227fdbefcecfd50ce5dd51360c3))
+* **typescript-estree:** handle 3.9's non-null assertion changes ([#2036](https://github.com/typescript-eslint/typescript-eslint/issues/2036)) ([06bec63](https://github.com/typescript-eslint/typescript-eslint/commit/06bec63c56536db070608ab136d2ad57083f0c6a))
+
+
+
+
+
+# [2.34.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.33.0...v2.34.0) (2020-05-18)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.33.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.32.0...v2.33.0) (2020-05-12)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.32.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.31.0...v2.32.0) (2020-05-11)
+
+
+### Features
+
+* bump dependencies and align AST ([#2007](https://github.com/typescript-eslint/typescript-eslint/issues/2007)) ([18668b7](https://github.com/typescript-eslint/typescript-eslint/commit/18668b78fd7d1e5281af7fc26c76e0ca53297f69))
+
+
+
+
+
+# [2.31.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.30.0...v2.31.0) (2020-05-04)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.29.0...v2.30.0) (2020-04-27)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.28.0...v2.29.0) (2020-04-20)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.28.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.27.0...v2.28.0) (2020-04-13)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.27.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.26.0...v2.27.0) (2020-04-06)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.26.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.25.0...v2.26.0) (2020-03-30)
+
+
+### Features
+
+* **typescript-estree:** add option to ignore certain folders from glob resolution ([#1802](https://github.com/typescript-eslint/typescript-eslint/issues/1802)) ([1e29e69](https://github.com/typescript-eslint/typescript-eslint/commit/1e29e69b289d61107a7de67592beae331ba50222))
+
+
+
+
+
+# [2.25.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.24.0...v2.25.0) (2020-03-23)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.24.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.23.0...v2.24.0) (2020-03-16)
+
+
+### Features
+
+* **typescript-estree:** support 3.8 `export * as ns` ([#1698](https://github.com/typescript-eslint/typescript-eslint/issues/1698)) ([133f622](https://github.com/typescript-eslint/typescript-eslint/commit/133f622f38a286eac45288a9789d2ee529d5e582))
+
+
+
+
+
+# [2.23.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.22.0...v2.23.0) (2020-03-09)
+
+
+### Features
+
+* **typescript-estree:** support 3.8 import/export type ([#1697](https://github.com/typescript-eslint/typescript-eslint/issues/1697)) ([625d603](https://github.com/typescript-eslint/typescript-eslint/commit/625d603f94bf0521f834313bf31c734ce4948b7a))
+
+
+
+
+
+# [2.22.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.21.0...v2.22.0) (2020-03-02)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.21.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.20.0...v2.21.0) (2020-02-24)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.20.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.19.2...v2.20.0) (2020-02-17)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+## [2.19.2](https://github.com/typescript-eslint/typescript-eslint/compare/v2.19.1...v2.19.2) (2020-02-10)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+## [2.19.1](https://github.com/typescript-eslint/typescript-eslint/compare/v2.19.0...v2.19.1) (2020-02-10)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.19.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.18.0...v2.19.0) (2020-02-03)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.18.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.17.0...v2.18.0) (2020-01-27)
+
+
+### Bug Fixes
+
+* **typescript-estree:** fix identifier tokens typed as `Keyword` ([#1487](https://github.com/typescript-eslint/typescript-eslint/issues/1487)) ([77a1caa](https://github.com/typescript-eslint/typescript-eslint/commit/77a1caa562638645b4717449800e410107d512c8))
+
+
+### Features
+
+* **eslint-plugin:** add new rule prefer-as-const ([#1431](https://github.com/typescript-eslint/typescript-eslint/issues/1431)) ([420db96](https://github.com/typescript-eslint/typescript-eslint/commit/420db96921435e8bf7fb484ae74552a912a6adde))
+* **parser:** clean up scope-analysis types ([#1481](https://github.com/typescript-eslint/typescript-eslint/issues/1481)) ([4a727fa](https://github.com/typescript-eslint/typescript-eslint/commit/4a727fa083d749dba9eaf39322856f5f69c28cd8))
+
+
+
+
+
+# [2.17.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.16.0...v2.17.0) (2020-01-20)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.16.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.15.0...v2.16.0) (2020-01-13)
+
+
+### Bug Fixes
+
+* **typescript-estree:** resolve path relative to tsconfigRootDir ([#1439](https://github.com/typescript-eslint/typescript-eslint/issues/1439)) ([c709056](https://github.com/typescript-eslint/typescript-eslint/commit/c709056))
+
+
+
+
+
+# [2.15.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.14.0...v2.15.0) (2020-01-06)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.14.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.13.0...v2.14.0) (2019-12-30)
+
+
+### Bug Fixes
+
+* **typescript-estree:** visit typeParameters in OptionalCallExpr ([#1377](https://github.com/typescript-eslint/typescript-eslint/issues/1377)) ([cba6a2a](https://github.com/typescript-eslint/typescript-eslint/commit/cba6a2a))
+
+
+
+
+
+# [2.13.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.12.0...v2.13.0) (2019-12-23)
+
+
+### Features
+
+* **typescript-estree:** computed members discriminated unions ([#1349](https://github.com/typescript-eslint/typescript-eslint/issues/1349)) ([013df9a](https://github.com/typescript-eslint/typescript-eslint/commit/013df9a))
+
+
+
+
+
+# [2.12.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.11.0...v2.12.0) (2019-12-16)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.11.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.10.0...v2.11.0) (2019-12-09)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.9.0...v2.10.0) (2019-12-02)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.8.0...v2.9.0) (2019-11-25)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.7.0...v2.8.0) (2019-11-18)
+
+
+### Bug Fixes
+
+* **typescript-estree:** options range loc being always true ([#704](https://github.com/typescript-eslint/typescript-eslint/issues/704)) ([db1aa18](https://github.com/typescript-eslint/typescript-eslint/commit/db1aa18))
+
+
+
+
+
+# [2.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.6.1...v2.7.0) (2019-11-11)
+
+
+### Features
+
+* **parser:** handle optional chaining in scope analysis ([#1169](https://github.com/typescript-eslint/typescript-eslint/issues/1169)) ([026ceb9](https://github.com/typescript-eslint/typescript-eslint/commit/026ceb9))
+
+
+
+
+
+## [2.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v2.6.0...v2.6.1) (2019-11-04)
+
+
+### Bug Fixes
+
+* **typescript-estree:** fix filename handling for vue JSX + markdown ([#1127](https://github.com/typescript-eslint/typescript-eslint/issues/1127)) ([366518f](https://github.com/typescript-eslint/typescript-eslint/commit/366518f))
+
+
+
+
+
+# [2.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.5.0...v2.6.0) (2019-10-28)
+
+
+### Bug Fixes
+
+* **typescript-estree:** correct parenthesized optional chain AST ([#1141](https://github.com/typescript-eslint/typescript-eslint/issues/1141)) ([5ae286e](https://github.com/typescript-eslint/typescript-eslint/commit/5ae286e))
+
+
+### Features
+
+* **typescript-estree:** add support for declare class properties ([#1136](https://github.com/typescript-eslint/typescript-eslint/issues/1136)) ([1508670](https://github.com/typescript-eslint/typescript-eslint/commit/1508670))
+
+
+
+
+
+# [2.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.4.0...v2.5.0) (2019-10-21)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.3...v2.4.0) (2019-10-14)
+
+
+### Bug Fixes
+
+* support long running "watch" lint sessions ([#973](https://github.com/typescript-eslint/typescript-eslint/issues/973)) ([854620e](https://github.com/typescript-eslint/typescript-eslint/commit/854620e))
+
+
+### Features
+
+* **typescript-estree:** support for parsing 3.7 features ([#1045](https://github.com/typescript-eslint/typescript-eslint/issues/1045)) ([623febf](https://github.com/typescript-eslint/typescript-eslint/commit/623febf))
+
+
+
+
+
+## [2.3.3](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.2...v2.3.3) (2019-10-07)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+## [2.3.2](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.1...v2.3.2) (2019-09-30)
+
+
+### Bug Fixes
+
+* **typescript-estree:** handle optional computed prop w/o type ([#1026](https://github.com/typescript-eslint/typescript-eslint/issues/1026)) ([95c13fe](https://github.com/typescript-eslint/typescript-eslint/commit/95c13fe))
+
+
+
+
+
+## [2.3.1](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.0...v2.3.1) (2019-09-23)
+
+
+### Bug Fixes
+
+* **typescript-estree:** parsing error for await in non-async func ([#988](https://github.com/typescript-eslint/typescript-eslint/issues/988)) ([19abbe0](https://github.com/typescript-eslint/typescript-eslint/commit/19abbe0))
+
+
+
+
+
+# [2.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.2.0...v2.3.0) (2019-09-16)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.1.0...v2.2.0) (2019-09-09)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [2.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.0.0...v2.1.0) (2019-09-02)
+
+
+### Bug Fixes
+
+* **typescript-estree:** improve missing project file error msg ([#866](https://github.com/typescript-eslint/typescript-eslint/issues/866)) ([8f3b0a8](https://github.com/typescript-eslint/typescript-eslint/commit/8f3b0a8)), closes [#853](https://github.com/typescript-eslint/typescript-eslint/issues/853)
+
+
+### Features
+
+* **typescript-estree:** Accept a glob pattern for `options.project` ([#806](https://github.com/typescript-eslint/typescript-eslint/issues/806)) ([9e5f21e](https://github.com/typescript-eslint/typescript-eslint/commit/9e5f21e))
+
+
+
+
+
+# [2.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.13.0...v2.0.0) (2019-08-13)
+
+
+* feat(eslint-plugin)!: change recommended config (#729) ([428567d](https://github.com/typescript-eslint/typescript-eslint/commit/428567d)), closes [#729](https://github.com/typescript-eslint/typescript-eslint/issues/729)
+* feat(typescript-estree)!: throw error on file not in project when `project` set (#760) ([3777b77](https://github.com/typescript-eslint/typescript-eslint/commit/3777b77)), closes [#760](https://github.com/typescript-eslint/typescript-eslint/issues/760)
+
+
+### Bug Fixes
+
+* **typescript-estree:** fix `is` token typed as `Keyword ([#750](https://github.com/typescript-eslint/typescript-eslint/issues/750)) ([35dec52](https://github.com/typescript-eslint/typescript-eslint/commit/35dec52))
+* **typescript-estree:** jsx comment parsing ([#703](https://github.com/typescript-eslint/typescript-eslint/issues/703)) ([0cfc48e](https://github.com/typescript-eslint/typescript-eslint/commit/0cfc48e))
+
+
+### Features
+
+* explicitly support eslint v6 ([#645](https://github.com/typescript-eslint/typescript-eslint/issues/645)) ([34a7cf6](https://github.com/typescript-eslint/typescript-eslint/commit/34a7cf6))
+
+
+### BREAKING CHANGES
+
+* recommended config changes are considered breaking
+* by default we will now throw when a file is not in the `project` provided
+* Node 6 is no longer supported
+
+
+
+
+
+# [1.13.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.12.0...v1.13.0) (2019-07-21)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
+# [1.12.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.11.0...v1.12.0) (2019-07-12)
+
+
+### Bug Fixes
+
+* **typescript-estree:** fix `async` identifier token typed as `Keyword` ([#681](https://github.com/typescript-eslint/typescript-eslint/issues/681)) ([6de19d3](https://github.com/typescript-eslint/typescript-eslint/commit/6de19d3))
+
+
+
+
+
+# [1.11.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.10.2...v1.11.0) (2019-06-23)
+
+
+### Bug Fixes
+
+* **parser:** add simpleTraverse, replaces private ESLint util ([#628](https://github.com/typescript-eslint/typescript-eslint/issues/628)) ([aa206c4](https://github.com/typescript-eslint/typescript-eslint/commit/aa206c4))
+* **typescript-estree:** fix more cases with double slash in JSX text ([#607](https://github.com/typescript-eslint/typescript-eslint/issues/607)) ([34cfa53](https://github.com/typescript-eslint/typescript-eslint/commit/34cfa53))
+
+
+
+
+
+## [1.10.2](https://github.com/typescript-eslint/typescript-eslint/compare/v1.10.1...v1.10.2) (2019-06-10)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+## [1.10.1](https://github.com/typescript-eslint/typescript-eslint/compare/v1.10.0...v1.10.1) (2019-06-09)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+# [1.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.9.0...v1.10.0) (2019-06-09)
+
+### Bug Fixes
+
+- **typescript-estree:** stop ignoring comments in JSX with generic ([#596](https://github.com/typescript-eslint/typescript-eslint/issues/596)) ([31d5bd4](https://github.com/typescript-eslint/typescript-eslint/commit/31d5bd4))
+
+### Features
+
+- make utils/TSESLint export typed classes instead of just types ([#526](https://github.com/typescript-eslint/typescript-eslint/issues/526)) ([370ac72](https://github.com/typescript-eslint/typescript-eslint/commit/370ac72))
+
+# [1.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.8.0...v1.9.0) (2019-05-12)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+# [1.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.7.0...v1.8.0) (2019-05-10)
+
+### Bug Fixes
+
+- upgrade lockfile versions ([#487](https://github.com/typescript-eslint/typescript-eslint/issues/487)) ([f029dba](https://github.com/typescript-eslint/typescript-eslint/commit/f029dba))
+- **eslint-plugin:** Support more nodes [no-extra-parens](<[#465](https://github.com/typescript-eslint/typescript-eslint/issues/465)>) ([2d15644](https://github.com/typescript-eslint/typescript-eslint/commit/2d15644))
+
+### Features
+
+- Move shared types into their own package ([#425](https://github.com/typescript-eslint/typescript-eslint/issues/425)) ([a7a03ce](https://github.com/typescript-eslint/typescript-eslint/commit/a7a03ce))
+
+# [1.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.6.0...v1.7.0) (2019-04-20)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+# [1.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.5.0...v1.6.0) (2019-04-03)
+
+### Bug Fixes
+
+- **parser:** Make eslint traverse enum id ([#383](https://github.com/typescript-eslint/typescript-eslint/issues/383)) ([492b737](https://github.com/typescript-eslint/typescript-eslint/commit/492b737))
+
+### Features
+
+- change TypeScript version range to >=3.2.1 <3.5.0 ([#399](https://github.com/typescript-eslint/typescript-eslint/issues/399)) ([a4f95d3](https://github.com/typescript-eslint/typescript-eslint/commit/a4f95d3))
+
+# [1.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.4.2...v1.5.0) (2019-03-20)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+## [1.4.2](https://github.com/typescript-eslint/typescript-eslint/compare/v1.4.1...v1.4.2) (2019-02-25)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+## [1.4.1](https://github.com/typescript-eslint/typescript-eslint/compare/v1.4.0...v1.4.1) (2019-02-23)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+# [1.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.3.0...v1.4.0) (2019-02-19)
+
+### Bug Fixes
+
+- **parser:** fix crash when visiting decorators in parameters ([#237](https://github.com/typescript-eslint/typescript-eslint/issues/237)) ([225fc26](https://github.com/typescript-eslint/typescript-eslint/commit/225fc26))
+- **parser:** fix visiting props of TSDeclareFunction ([#244](https://github.com/typescript-eslint/typescript-eslint/issues/244)) ([b40def8](https://github.com/typescript-eslint/typescript-eslint/commit/b40def8))
+
+### Features
+
+- **eslint-plugin:** Migrate plugin to ts ([#120](https://github.com/typescript-eslint/typescript-eslint/issues/120)) ([61c60dc](https://github.com/typescript-eslint/typescript-eslint/commit/61c60dc))
+- **ts-estree:** fix parsing nested sequence expressions ([#286](https://github.com/typescript-eslint/typescript-eslint/issues/286)) ([ecc9631](https://github.com/typescript-eslint/typescript-eslint/commit/ecc9631))
+
+# [1.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.2.0...v1.3.0) (2019-02-07)
+
+### Bug Fixes
+
+- **ts-estree:** align typeArguments and typeParameters across nodes ([#223](https://github.com/typescript-eslint/typescript-eslint/issues/223)) ([3306198](https://github.com/typescript-eslint/typescript-eslint/commit/3306198))
+- **ts-estree:** convert decorators on var and fn decs ([#211](https://github.com/typescript-eslint/typescript-eslint/issues/211)) ([0a1777f](https://github.com/typescript-eslint/typescript-eslint/commit/0a1777f))
+- **ts-estree:** fix issues with typeParams in FunctionExpression ([#208](https://github.com/typescript-eslint/typescript-eslint/issues/208)) ([d4dfa3b](https://github.com/typescript-eslint/typescript-eslint/commit/d4dfa3b))
+
+### Features
+
+- change TypeScript version range to >=3.2.1 <3.4.0 ([#184](https://github.com/typescript-eslint/typescript-eslint/issues/184)) ([f513a14](https://github.com/typescript-eslint/typescript-eslint/commit/f513a14))
+- **ts-estree:** enable errors 1098 and 1099 ([#219](https://github.com/typescript-eslint/typescript-eslint/issues/219)) ([fc50167](https://github.com/typescript-eslint/typescript-eslint/commit/fc50167))
+
+# [1.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.1.1...v1.2.0) (2019-02-01)
+
+### Bug Fixes
+
+- **parser:** fix regression with no-unused-vars for jsx attributes ([#161](https://github.com/typescript-eslint/typescript-eslint/issues/161)) ([6147de1](https://github.com/typescript-eslint/typescript-eslint/commit/6147de1))
+
+## [1.1.1](https://github.com/typescript-eslint/typescript-eslint/compare/v1.1.0...v1.1.1) (2019-01-29)
+
+### Bug Fixes
+
+- **eslint-plugin:** make parser services error clearer ([#132](https://github.com/typescript-eslint/typescript-eslint/issues/132)) ([aa9d1e1](https://github.com/typescript-eslint/typescript-eslint/commit/aa9d1e1))
+- **parser:** add visiting of type parameters in JSXOpeningElement ([#150](https://github.com/typescript-eslint/typescript-eslint/issues/150)) ([5e16003](https://github.com/typescript-eslint/typescript-eslint/commit/5e16003))
+- **ts-estree:** expand optional property to include question token ([#138](https://github.com/typescript-eslint/typescript-eslint/issues/138)) ([9068b62](https://github.com/typescript-eslint/typescript-eslint/commit/9068b62))
+
+# [1.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.0.0...v1.1.0) (2019-01-23)
+
+### Bug Fixes
+
+- **typescript-estree:** correct range of parameters with comments ([#128](https://github.com/typescript-eslint/typescript-eslint/issues/128)) ([91eedf2](https://github.com/typescript-eslint/typescript-eslint/commit/91eedf2))
+- **typescript-estree:** fix range of assignment in parameter ([#115](https://github.com/typescript-eslint/typescript-eslint/issues/115)) ([4e781f1](https://github.com/typescript-eslint/typescript-eslint/commit/4e781f1))
+
+# [1.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v0.2.1...v1.0.0) (2019-01-20)
+
+### Features
+
+- **parser:** support ecmaFeatures.jsx flag and tests ([#85](https://github.com/typescript-eslint/typescript-eslint/issues/85)) ([b321736](https://github.com/typescript-eslint/typescript-eslint/commit/b321736))
+
+## [0.2.1](https://github.com/typescript-eslint/typescript-eslint/compare/v0.2.0...v0.2.1) (2019-01-20)
+
+**Note:** Version bump only for package @typescript-eslint/parser
diff --git a/server/node_modules/@typescript-eslint/parser/LICENSE b/server/node_modules/@typescript-eslint/parser/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..a2d896685ac98ab62889b058c26833f0ab11e27d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/parser/LICENSE
@@ -0,0 +1,22 @@
+TypeScript ESLint Parser
+Copyright JS Foundation and other contributors, https://js.foundation
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/server/node_modules/@typescript-eslint/parser/README.md b/server/node_modules/@typescript-eslint/parser/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f6417fd588965a0ab0ed6043c6c24f34481a5b7d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/parser/README.md
@@ -0,0 +1,228 @@
+<h1 align="center">TypeScript ESLint Parser</h1>
+
+<p align="center">An ESLint parser which leverages <a href="https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/typescript-estree">TypeScript ESTree</a> to allow for ESLint to lint TypeScript source code.</p>
+
+<p align="center">
+    <img src="https://github.com/typescript-eslint/typescript-eslint/workflows/CI/badge.svg" alt="CI" />
+    <a href="https://www.npmjs.com/package/@typescript-eslint/parser"><img src="https://img.shields.io/npm/v/@typescript-eslint/parser.svg?style=flat-square" alt="NPM Version" /></a>
+    <a href="https://www.npmjs.com/package/@typescript-eslint/parser"><img src="https://img.shields.io/npm/dm/@typescript-eslint/parser.svg?style=flat-square" alt="NPM Downloads" /></a>
+</p>
+
+## Getting Started
+
+**[You can find our Getting Started docs here](../../docs/getting-started/linting/README.md)**
+
+These docs walk you through setting up ESLint, this parser, and our plugin. If you know what you're doing and just want to quick start, read on...
+
+## Quick-start
+
+### Installation
+
+```bash
+$ yarn add -D typescript @typescript-eslint/parser
+$ npm i --save-dev typescript @typescript-eslint/parser
+```
+
+### Usage
+
+In your ESLint configuration file, set the `parser` property:
+
+```json
+{
+  "parser": "@typescript-eslint/parser"
+}
+```
+
+There is sometimes an incorrect assumption that the parser itself is what does everything necessary to facilitate the use of ESLint with TypeScript. In actuality, it is the combination of the parser _and_ one or more plugins which allow you to maximize your usage of ESLint with TypeScript.
+
+For example, once this parser successfully produces an AST for the TypeScript source code, it might well contain some information which simply does not exist in a standard JavaScript context, such as the data for a TypeScript-specific construct, like an `interface`.
+
+The core rules built into ESLint, such as `indent` have no knowledge of such constructs, so it is impossible to expect them to work out of the box with them.
+
+Instead, you also need to make use of one more plugins which will add or extend rules with TypeScript-specific features.
+
+By far the most common case will be installing the [`@typescript-eslint/eslint-plugin`](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin) plugin, but there are also other relevant options available such a [`@typescript-eslint/eslint-plugin-tslint`](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin-tslint).
+
+## Configuration
+
+The following additional configuration options are available by specifying them in [`parserOptions`](https://eslint.org/docs/user-guide/configuring#specifying-parser-options) in your ESLint configuration file.
+
+```ts
+interface ParserOptions {
+  ecmaFeatures?: {
+    jsx?: boolean;
+    globalReturn?: boolean;
+  };
+  ecmaVersion?: number;
+
+  jsxPragma?: string;
+  jsxFragmentName?: string | null;
+  lib?: string[];
+
+  project?: string | string[];
+  projectFolderIgnoreList?: string[];
+  tsconfigRootDir?: string;
+  extraFileExtensions?: string[];
+  warnOnUnsupportedTypeScriptVersion?: boolean;
+}
+```
+
+### `parserOptions.ecmaFeatures.jsx`
+
+Default `false`.
+
+Enable parsing JSX when `true`. More details can be found [here](https://www.typescriptlang.org/docs/handbook/jsx.html).
+
+**NOTE:** this setting does not affect known file types (`.js`, `.jsx`, `.ts`, `.tsx`, `.json`) because the TypeScript compiler has its own internal handling for known file extensions. The exact behavior is as follows:
+
+- if `parserOptions.project` is _not_ provided:
+  - `.js`, `.jsx`, `.tsx` files are parsed as if this is true.
+  - `.ts` files are parsed as if this is false.
+  - unknown extensions (`.md`, `.vue`) will respect this setting.
+- if `parserOptions.project` is provided (i.e. you are using rules with type information):
+  - `.js`, `.jsx`, `.tsx` files are parsed as if this is true.
+  - `.ts` files are parsed as if this is false.
+  - "unknown" extensions (`.md`, `.vue`) **are parsed as if this is false**.
+
+### `parserOptions.ecmaFeatures.globalReturn`
+
+Default `false`.
+
+This options allows you to tell the parser if you want to allow global `return` statements in your codebase.
+
+### `parserOptions.ecmaVersion`
+
+Default `2018`.
+
+Accepts any valid ECMAScript version number:
+
+- A version: es3, es5, es6, es7, es8, es9, es10, es11, ..., or
+- A year: es2015, es2016, es2017, es2018, es2019, es2020, ...
+
+Specifies the version of ECMAScript syntax you want to use. This is used by the parser to determine how to perform scope analysis, and it affects the default
+
+### `parserOptions.jsxPragma`
+
+Default `'React'`
+
+The identifier that's used for JSX Elements creation (after transpilation).
+If you're using a library other than React (like `preact`), then you should change this value.
+
+This should not be a member expression - just the root identifier (i.e. use `"React"` instead of `"React.createElement"`).
+
+If you provide `parserOptions.project`, you do not need to set this, as it will automatically detected from the compiler.
+
+### `parserOptions.jsxFragmentName`
+
+Default `null`
+
+The identifier that's used for JSX fragment elements (after transpilation).
+If `null`, assumes transpilation will always use a member of the configured `jsxPragma`.
+This should not be a member expression - just the root identifier (i.e. use `"h"` instead of `"h.Fragment"`).
+
+If you provide `parserOptions.project`, you do not need to set this, as it will automatically detected from the compiler.
+
+### `parserOptions.lib`
+
+Default `['es2018']`
+
+For valid options, see the [TypeScript compiler options](https://www.typescriptlang.org/tsconfig#lib).
+
+Specifies the TypeScript `lib`s that are available. This is used by the scope analyser to ensure there are global variables declared for the types exposed by TypeScript.
+
+If you provide `parserOptions.project`, you do not need to set this, as it will automatically detected from the compiler.
+
+### `parserOptions.project`
+
+Default `undefined`.
+
+This option allows you to provide a path to your project's `tsconfig.json`. **This setting is required if you want to use rules which require type information**. Relative paths are interpreted relative to the current working directory if `tsconfigRootDir` is not set. If you intend on running ESLint from directories other than the project root, you should consider using `tsconfigRootDir`.
+
+- Accepted values:
+
+  ```js
+  // path
+  project: './tsconfig.json';
+
+  // glob pattern
+  project: './packages/**/tsconfig.json';
+
+  // array of paths and/or glob patterns
+  project: ['./packages/**/tsconfig.json', './separate-package/tsconfig.json'];
+  ```
+
+- If you use project references, TypeScript will not automatically use project references to resolve files. This means that you will have to add each referenced tsconfig to the `project` field either separately, or via a glob.
+
+- TypeScript will ignore files with duplicate filenames in the same folder (for example, `src/file.ts` and `src/file.js`). TypeScript purposely ignore all but one of the files, only keeping the one file with the highest priority extension (the extension priority order (from highest to lowest) is `.ts`, `.tsx`, `.d.ts`, `.js`, `.jsx`). For more info see #955.
+
+- Note that if this setting is specified and `createDefaultProgram` is not, you must only lint files that are included in the projects as defined by the provided `tsconfig.json` files. If your existing configuration does not include all of the files you would like to lint, you can create a separate `tsconfig.eslint.json` as follows:
+
+  ```jsonc
+  {
+    // extend your base config so you don't have to redefine your compilerOptions
+    "extends": "./tsconfig.json",
+    "include": [
+      "src/**/*.ts",
+      "test/**/*.ts",
+      "typings/**/*.ts",
+      // etc
+
+      // if you have a mixed JS/TS codebase, don't forget to include your JS files
+      "src/**/*.js"
+    ]
+  }
+  ```
+
+### `parserOptions.tsconfigRootDir`
+
+Default `undefined`.
+
+This option allows you to provide the root directory for relative tsconfig paths specified in the `project` option above.
+
+### `parserOptions.projectFolderIgnoreList`
+
+Default `["**/node_modules/**"]`.
+
+This option allows you to ignore folders from being included in your provided list of `project`s.
+This is useful if you have configured glob patterns, but want to make sure you ignore certain folders.
+
+It accepts an array of globs to exclude from the `project` globs.
+
+For example, by default it will ensure that a glob like `./**/tsconfig.json` will not match any `tsconfig`s within your `node_modules` folder (some npm packages do not exclude their source files from their published packages).
+
+### `parserOptions.extraFileExtensions`
+
+Default `undefined`.
+
+This option allows you to provide one or more additional file extensions which should be considered in the TypeScript Program compilation.
+The default extensions are `.ts`, `.tsx`, `.js`, and `.jsx`. Add extensions starting with `.`, followed by the file extension. E.g. for a `.vue` file use `"extraFileExtensions: [".vue"]`.
+
+### `parserOptions.warnOnUnsupportedTypeScriptVersion`
+
+Default `true`.
+
+This option allows you to toggle the warning that the parser will give you if you use a version of TypeScript which is not explicitly supported
+
+### `parserOptions.createDefaultProgram`
+
+Default `false`.
+
+This option allows you to request that when the `project` setting is specified, files will be allowed when not included in the projects defined by the provided `tsconfig.json` files. **Using this option will incur significant performance costs. This option is primarily included for backwards-compatibility.** See the **`project`** section above for more information.
+
+## Supported TypeScript Version
+
+Please see [`typescript-eslint`](https://github.com/typescript-eslint/typescript-eslint) for the supported TypeScript version.
+
+**Please ensure that you are using a supported version before submitting any issues/bug reports.**
+
+## Reporting Issues
+
+Please use the `@typescript-eslint/parser` issue template when creating your issue and fill out the information requested as best you can. This will really help us when looking into your issue.
+
+## License
+
+TypeScript ESLint Parser is licensed under a permissive BSD 2-clause license.
+
+## Contributing
+
+[See the contributing guide here](../../CONTRIBUTING.md)
diff --git a/server/node_modules/@typescript-eslint/parser/dist/index.d.ts b/server/node_modules/@typescript-eslint/parser/dist/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c842471f87d3fb0e41fd648d9245bf6212852172
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/parser/dist/index.d.ts
@@ -0,0 +1,4 @@
+export { parse, parseForESLint, ParserOptions } from './parser';
+export { ParserServices, clearCaches, } from '@typescript-eslint/typescript-estree';
+export declare const version: string;
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/parser/dist/index.d.ts.map b/server/node_modules/@typescript-eslint/parser/dist/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..71b127764e94503107c949c02334b0f64f36f047
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/parser/dist/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EACL,cAAc,EACd,WAAW,GACZ,MAAM,sCAAsC,CAAC;AAG9C,eAAO,MAAM,OAAO,EAAE,MAA2C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/parser/dist/index.js b/server/node_modules/@typescript-eslint/parser/dist/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..b9e888ae1caf89bf032b6e436feff0d5bcb4ba9f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/parser/dist/index.js
@@ -0,0 +1,11 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.version = exports.clearCaches = exports.parseForESLint = exports.parse = void 0;
+var parser_1 = require("./parser");
+Object.defineProperty(exports, "parse", { enumerable: true, get: function () { return parser_1.parse; } });
+Object.defineProperty(exports, "parseForESLint", { enumerable: true, get: function () { return parser_1.parseForESLint; } });
+var typescript_estree_1 = require("@typescript-eslint/typescript-estree");
+Object.defineProperty(exports, "clearCaches", { enumerable: true, get: function () { return typescript_estree_1.clearCaches; } });
+// note - cannot migrate this to an import statement because it will make TSC copy the package.json to the dist folder
+exports.version = require('../package.json').version;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/parser/dist/index.js.map b/server/node_modules/@typescript-eslint/parser/dist/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..d7a55550e6ff063804468dba3e9da8fcf298b60d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/parser/dist/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAgE;AAAvD,+FAAA,KAAK,OAAA;AAAE,wGAAA,cAAc,OAAA;AAC9B,0EAG8C;AAD5C,gHAAA,WAAW,OAAA;AAGb,sHAAsH;AACzG,QAAA,OAAO,GAAW,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/parser/dist/parser.d.ts b/server/node_modules/@typescript-eslint/parser/dist/parser.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0d501b8210e6bf50af7be7d82afad7064f36363c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/parser/dist/parser.d.ts
@@ -0,0 +1,17 @@
+import { ParserOptions, TSESTree } from '@typescript-eslint/types';
+import { ParserServices, visitorKeys } from '@typescript-eslint/typescript-estree';
+import { ScopeManager } from '@typescript-eslint/scope-manager';
+interface ParseForESLintResult {
+    ast: TSESTree.Program & {
+        range?: [number, number];
+        tokens?: TSESTree.Token[];
+        comments?: TSESTree.Comment[];
+    };
+    services: ParserServices;
+    visitorKeys: typeof visitorKeys;
+    scopeManager: ScopeManager;
+}
+declare function parse(code: string, options?: ParserOptions): ParseForESLintResult['ast'];
+declare function parseForESLint(code: string, options?: ParserOptions | null): ParseForESLintResult;
+export { parse, parseForESLint, ParserOptions };
+//# sourceMappingURL=parser.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/parser/dist/parser.d.ts.map b/server/node_modules/@typescript-eslint/parser/dist/parser.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..f5169d904f60d6d78d7699f7ea20254050e20f33
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/parser/dist/parser.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAO,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAEL,cAAc,EAEd,WAAW,EACZ,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAGL,YAAY,EACb,MAAM,kCAAkC,CAAC;AAM1C,UAAU,oBAAoB;IAC5B,GAAG,EAAE,QAAQ,CAAC,OAAO,GAAG;QACtB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzB,MAAM,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;KAC/B,CAAC;IACF,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,OAAO,WAAW,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;CAC5B;AA+CD,iBAAS,KAAK,CACZ,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,aAAa,GACtB,oBAAoB,CAAC,KAAK,CAAC,CAE7B;AAED,iBAAS,cAAc,CACrB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,GAC7B,oBAAoB,CAwFtB;AAED,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/parser/dist/parser.js b/server/node_modules/@typescript-eslint/parser/dist/parser.js
new file mode 100644
index 0000000000000000000000000000000000000000..fb624c4a1b37a4a3a74d3c92bec6b4ef47cbe9d3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/parser/dist/parser.js
@@ -0,0 +1,129 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parseForESLint = exports.parse = void 0;
+const typescript_estree_1 = require("@typescript-eslint/typescript-estree");
+const scope_manager_1 = require("@typescript-eslint/scope-manager");
+const debug_1 = __importDefault(require("debug"));
+const typescript_1 = require("typescript");
+const log = debug_1.default('typescript-eslint:parser:parser');
+function validateBoolean(value, fallback = false) {
+    if (typeof value !== 'boolean') {
+        return fallback;
+    }
+    return value;
+}
+const LIB_FILENAME_REGEX = /lib\.(.+)\.d\.ts$/;
+function getLib(compilerOptions) {
+    var _a;
+    if (compilerOptions.lib) {
+        return compilerOptions.lib.reduce((acc, lib) => {
+            const match = LIB_FILENAME_REGEX.exec(lib.toLowerCase());
+            if (match) {
+                acc.push(match[1]);
+            }
+            return acc;
+        }, []);
+    }
+    const target = (_a = compilerOptions.target) !== null && _a !== void 0 ? _a : typescript_1.ScriptTarget.ES5;
+    // https://github.com/Microsoft/TypeScript/blob/59ad375234dc2efe38d8ee0ba58414474c1d5169/src/compiler/utilitiesPublic.ts#L13-L32
+    switch (target) {
+        case typescript_1.ScriptTarget.ESNext:
+            return ['esnext.full'];
+        case typescript_1.ScriptTarget.ES2020:
+            return ['es2020.full'];
+        case typescript_1.ScriptTarget.ES2019:
+            return ['es2019.full'];
+        case typescript_1.ScriptTarget.ES2018:
+            return ['es2018.full'];
+        case typescript_1.ScriptTarget.ES2017:
+            return ['es2017.full'];
+        case typescript_1.ScriptTarget.ES2016:
+            return ['es2016.full'];
+        case typescript_1.ScriptTarget.ES2015:
+            return ['es6'];
+        default:
+            return ['lib'];
+    }
+}
+function parse(code, options) {
+    return parseForESLint(code, options).ast;
+}
+exports.parse = parse;
+function parseForESLint(code, options) {
+    if (!options || typeof options !== 'object') {
+        options = {};
+    }
+    else {
+        options = Object.assign({}, options);
+    }
+    // https://eslint.org/docs/user-guide/configuring#specifying-parser-options
+    // if sourceType is not provided by default eslint expect that it will be set to "script"
+    if (options.sourceType !== 'module' && options.sourceType !== 'script') {
+        options.sourceType = 'script';
+    }
+    if (typeof options.ecmaFeatures !== 'object') {
+        options.ecmaFeatures = {};
+    }
+    const parserOptions = {};
+    Object.assign(parserOptions, options, {
+        useJSXTextNode: validateBoolean(options.useJSXTextNode, true),
+        jsx: validateBoolean(options.ecmaFeatures.jsx),
+    });
+    const analyzeOptions = {
+        ecmaVersion: options.ecmaVersion,
+        globalReturn: options.ecmaFeatures.globalReturn,
+        jsxPragma: options.jsxPragma,
+        jsxFragmentName: options.jsxFragmentName,
+        lib: options.lib,
+        sourceType: options.sourceType,
+    };
+    if (typeof options.filePath === 'string') {
+        const tsx = options.filePath.endsWith('.tsx');
+        if (tsx || options.filePath.endsWith('.ts')) {
+            parserOptions.jsx = tsx;
+        }
+    }
+    /**
+     * Allow the user to suppress the warning from typescript-estree if they are using an unsupported
+     * version of TypeScript
+     */
+    const warnOnUnsupportedTypeScriptVersion = validateBoolean(options.warnOnUnsupportedTypeScriptVersion, true);
+    if (!warnOnUnsupportedTypeScriptVersion) {
+        parserOptions.loggerFn = false;
+    }
+    const { ast, services } = typescript_estree_1.parseAndGenerateServices(code, parserOptions);
+    ast.sourceType = options.sourceType;
+    if (services.hasFullTypeInformation) {
+        // automatically apply the options configured for the program
+        const compilerOptions = services.program.getCompilerOptions();
+        if (analyzeOptions.lib == null) {
+            analyzeOptions.lib = getLib(compilerOptions);
+            log('Resolved libs from program: %o', analyzeOptions.lib);
+        }
+        if (parserOptions.jsx === true) {
+            if (analyzeOptions.jsxPragma === undefined &&
+                compilerOptions.jsxFactory != null) {
+                // in case the user has specified something like "preact.h"
+                const factory = compilerOptions.jsxFactory.split('.')[0].trim();
+                analyzeOptions.jsxPragma = factory;
+                log('Resolved jsxPragma from program: %s', analyzeOptions.jsxPragma);
+            }
+            if (analyzeOptions.jsxFragmentName === undefined &&
+                compilerOptions.jsxFragmentFactory != null) {
+                // in case the user has specified something like "preact.Fragment"
+                const fragFactory = compilerOptions.jsxFragmentFactory
+                    .split('.')[0]
+                    .trim();
+                analyzeOptions.jsxFragmentName = fragFactory;
+                log('Resolved jsxFragmentName from program: %s', analyzeOptions.jsxFragmentName);
+            }
+        }
+    }
+    const scopeManager = scope_manager_1.analyze(ast, analyzeOptions);
+    return { ast, services, scopeManager, visitorKeys: typescript_estree_1.visitorKeys };
+}
+exports.parseForESLint = parseForESLint;
+//# sourceMappingURL=parser.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/parser/dist/parser.js.map b/server/node_modules/@typescript-eslint/parser/dist/parser.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..cf7c75c4f68a456f5ee8765eff7e53011c1c8614
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/parser/dist/parser.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/parser/package.json b/server/node_modules/@typescript-eslint/parser/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..cf7d960358608e8bbc2e338fdad94836c331592e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/parser/package.json
@@ -0,0 +1,104 @@
+{
+  "_from": "@typescript-eslint/parser@latest",
+  "_id": "@typescript-eslint/parser@4.11.0",
+  "_inBundle": false,
+  "_integrity": "sha512-NBTtKCC7ZtuxEV5CrHUO4Pg2s784pvavc3cnz6V+oJvVbK4tH9135f/RBP6eUA2KHiFKAollSrgSctQGmHbqJQ==",
+  "_location": "/@typescript-eslint/parser",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "tag",
+    "registry": true,
+    "raw": "@typescript-eslint/parser@latest",
+    "name": "@typescript-eslint/parser",
+    "escapedName": "@typescript-eslint%2fparser",
+    "scope": "@typescript-eslint",
+    "rawSpec": "latest",
+    "saveSpec": null,
+    "fetchSpec": "latest"
+  },
+  "_requiredBy": [
+    "#DEV:/",
+    "#USER"
+  ],
+  "_resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.11.0.tgz",
+  "_shasum": "1dd3d7e42708c10ce9f3aa64c63c0ab99868b4e2",
+  "_spec": "@typescript-eslint/parser@latest",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server",
+  "bugs": {
+    "url": "https://github.com/typescript-eslint/typescript-eslint/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@typescript-eslint/scope-manager": "4.11.0",
+    "@typescript-eslint/types": "4.11.0",
+    "@typescript-eslint/typescript-estree": "4.11.0",
+    "debug": "^4.1.1"
+  },
+  "deprecated": false,
+  "description": "An ESLint custom parser which leverages TypeScript ESTree",
+  "devDependencies": {
+    "@types/glob": "*",
+    "@typescript-eslint/experimental-utils": "4.11.0",
+    "@typescript-eslint/shared-fixtures": "4.11.0",
+    "glob": "*",
+    "typescript": "*"
+  },
+  "engines": {
+    "node": "^10.12.0 || >=12.0.0"
+  },
+  "files": [
+    "dist",
+    "README.md",
+    "LICENSE"
+  ],
+  "funding": {
+    "type": "opencollective",
+    "url": "https://opencollective.com/typescript-eslint"
+  },
+  "gitHead": "e8f73e168a89ff9a84038e760a667b646ede5956",
+  "homepage": "https://github.com/typescript-eslint/typescript-eslint#readme",
+  "keywords": [
+    "ast",
+    "ecmascript",
+    "javascript",
+    "typescript",
+    "parser",
+    "syntax",
+    "eslint"
+  ],
+  "license": "BSD-2-Clause",
+  "main": "dist/index.js",
+  "name": "@typescript-eslint/parser",
+  "peerDependencies": {
+    "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
+  },
+  "peerDependenciesMeta": {
+    "typescript": {
+      "optional": true
+    }
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/typescript-eslint/typescript-eslint.git",
+    "directory": "packages/parser"
+  },
+  "scripts": {
+    "build": "tsc -b tsconfig.build.json",
+    "clean": "tsc -b tsconfig.build.json --clean",
+    "format": "prettier --write \"./**/*.{ts,js,json,md}\" --ignore-path ../../.prettierignore",
+    "lint": "eslint . --ext .js,.ts --ignore-path='../../.eslintignore'",
+    "postbuild": "downlevel-dts dist _ts3.4/dist",
+    "postclean": "rimraf dist",
+    "test": "jest --coverage",
+    "typecheck": "tsc -p tsconfig.json --noEmit"
+  },
+  "types": "dist/index.d.ts",
+  "typesVersions": {
+    "<3.8": {
+      "*": [
+        "_ts3.4/*"
+      ]
+    }
+  },
+  "version": "4.11.0"
+}
diff --git a/server/node_modules/@typescript-eslint/scope-manager/CHANGELOG.md b/server/node_modules/@typescript-eslint/scope-manager/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..221a04d93b2c05ea8d7bca17834563a42c87d299
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/CHANGELOG.md
@@ -0,0 +1,283 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [4.11.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.10.0...v4.11.0) (2020-12-21)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+# [4.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.9.1...v4.10.0) (2020-12-14)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+## [4.9.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.9.0...v4.9.1) (2020-12-07)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+# [4.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.2...v4.9.0) (2020-11-30)
+
+
+### Bug Fixes
+
+* **scope-manager:** fix assertion assignments not being marked as write references ([#2809](https://github.com/typescript-eslint/typescript-eslint/issues/2809)) ([fa68492](https://github.com/typescript-eslint/typescript-eslint/commit/fa6849245ca55ca407dc031afbad456f2925a8e9)), closes [#2804](https://github.com/typescript-eslint/typescript-eslint/issues/2804)
+
+
+### Features
+
+* **eslint-plugin:** [no-unused-vars] fork the base rule ([#2768](https://github.com/typescript-eslint/typescript-eslint/issues/2768)) ([a8227a6](https://github.com/typescript-eslint/typescript-eslint/commit/a8227a6185dd24de4bfc7d766931643871155021)), closes [#2782](https://github.com/typescript-eslint/typescript-eslint/issues/2782) [#2714](https://github.com/typescript-eslint/typescript-eslint/issues/2714) [#2648](https://github.com/typescript-eslint/typescript-eslint/issues/2648)
+
+
+
+
+
+## [4.8.2](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.1...v4.8.2) (2020-11-23)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+## [4.8.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.0...v4.8.1) (2020-11-17)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+# [4.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.7.0...v4.8.0) (2020-11-16)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+# [4.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.6.1...v4.7.0) (2020-11-09)
+
+
+### Features
+
+* support TS4.1 features ([#2748](https://github.com/typescript-eslint/typescript-eslint/issues/2748)) ([2be354b](https://github.com/typescript-eslint/typescript-eslint/commit/2be354bb15f9013a2da1b13a0c0836e9ef057e16)), closes [#2583](https://github.com/typescript-eslint/typescript-eslint/issues/2583)
+
+
+
+
+
+## [4.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.6.0...v4.6.1) (2020-11-02)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+# [4.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.5.0...v4.6.0) (2020-10-26)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+# [4.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.4.1...v4.5.0) (2020-10-19)
+
+
+### Features
+
+* **typescript-estree:** add flag EXPERIMENTAL_useSourceOfProjectReferenceRedirect ([#2669](https://github.com/typescript-eslint/typescript-eslint/issues/2669)) ([90a5878](https://github.com/typescript-eslint/typescript-eslint/commit/90a587845088da1b205e4d7d77dbc3f9447b1c5a))
+
+
+
+
+
+## [4.4.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.4.0...v4.4.1) (2020-10-12)
+
+
+### Bug Fixes
+
+* **scope-manager:** don't create a variable for global augmentation ([#2639](https://github.com/typescript-eslint/typescript-eslint/issues/2639)) ([6bc9325](https://github.com/typescript-eslint/typescript-eslint/commit/6bc93257ec876214743a165093b6666d713379f6))
+
+
+
+
+
+# [4.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.3.0...v4.4.0) (2020-10-05)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+# [4.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.2.0...v4.3.0) (2020-09-28)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+# [4.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.1.1...v4.2.0) (2020-09-21)
+
+
+### Bug Fixes
+
+* **scope-manager:** correct analysis of inferred types in conditional types ([#2537](https://github.com/typescript-eslint/typescript-eslint/issues/2537)) ([4f660fd](https://github.com/typescript-eslint/typescript-eslint/commit/4f660fd31acbb88b30719f925dcb2b3022cc2bab))
+
+
+
+
+
+## [4.1.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.1.0...v4.1.1) (2020-09-14)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+# [4.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.0.1...v4.1.0) (2020-09-07)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-unused-vars] correct detection of unused vars in a declared module with `export =` ([#2505](https://github.com/typescript-eslint/typescript-eslint/issues/2505)) ([3d07a99](https://github.com/typescript-eslint/typescript-eslint/commit/3d07a99faa0a5fc1b44acdb43ddbfc90a5105833))
+* **scope-manager:** add `const` as a global type variable ([#2499](https://github.com/typescript-eslint/typescript-eslint/issues/2499)) ([eb3f6e3](https://github.com/typescript-eslint/typescript-eslint/commit/eb3f6e39391d62ac424baa305a15e61806b2fd65))
+* **scope-manager:** correctly handle inferred types in nested type scopes ([#2497](https://github.com/typescript-eslint/typescript-eslint/issues/2497)) ([95f6bf4](https://github.com/typescript-eslint/typescript-eslint/commit/95f6bf4818cdec48a0583bf82f928c598af22736))
+* **scope-manager:** don't create references for intrinsic JSX elements ([#2504](https://github.com/typescript-eslint/typescript-eslint/issues/2504)) ([cdb9807](https://github.com/typescript-eslint/typescript-eslint/commit/cdb9807a5a368a136856cd03048b68e0f2dfb405))
+* **scope-manager:** fallback to lib 'esnext' or 'es5' when ecma version is unsupported ([#2474](https://github.com/typescript-eslint/typescript-eslint/issues/2474)) ([20a7dcc](https://github.com/typescript-eslint/typescript-eslint/commit/20a7dcc808a39cd447d6e52fc5a1e1373d7122e9))
+* **scope-manager:** support rest function type parameters ([#2491](https://github.com/typescript-eslint/typescript-eslint/issues/2491)) ([9d8b4c4](https://github.com/typescript-eslint/typescript-eslint/commit/9d8b4c479c98623e4198aa07639321929a8a876f)), closes [#2449](https://github.com/typescript-eslint/typescript-eslint/issues/2449)
+* **scope-manager:** support tagged template string generic type parameters ([#2492](https://github.com/typescript-eslint/typescript-eslint/issues/2492)) ([a2686c0](https://github.com/typescript-eslint/typescript-eslint/commit/a2686c04293ab9070c1500a0dab7e205bd1fa9d2))
+* **scope-manager:** support type predicates ([#2493](https://github.com/typescript-eslint/typescript-eslint/issues/2493)) ([a40f54c](https://github.com/typescript-eslint/typescript-eslint/commit/a40f54c39d59096a0d12a492807dcd52fbcdc384)), closes [#2462](https://github.com/typescript-eslint/typescript-eslint/issues/2462)
+* **scope-manager:** treat type imports as both values and types ([#2494](https://github.com/typescript-eslint/typescript-eslint/issues/2494)) ([916e95a](https://github.com/typescript-eslint/typescript-eslint/commit/916e95a505689746dda38a67148c95cc7d207d9f)), closes [#2453](https://github.com/typescript-eslint/typescript-eslint/issues/2453)
+
+
+### Features
+
+* **scope-manager:** add support for JSX scope analysis ([#2498](https://github.com/typescript-eslint/typescript-eslint/issues/2498)) ([f887ab5](https://github.com/typescript-eslint/typescript-eslint/commit/f887ab51f58c1b3571f9a14832864bc0ca59623f)), closes [#2455](https://github.com/typescript-eslint/typescript-eslint/issues/2455) [#2477](https://github.com/typescript-eslint/typescript-eslint/issues/2477)
+
+
+
+
+
+## [4.0.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.0.0...v4.0.1) (2020-08-31)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+# [4.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.10.1...v4.0.0) (2020-08-31)
+
+## [Please see the release notes for v4.0.0](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v4.0.0)
+
+### Bug Fixes
+
+* **scope-manager:** correct analysis of abstract class properties ([#2420](https://github.com/typescript-eslint/typescript-eslint/issues/2420)) ([cd84549](https://github.com/typescript-eslint/typescript-eslint/commit/cd84549beba3cf471d75cfd9ba26f80366842ed5))
+
+
+### Features
+
+* support ESTree optional chaining representation ([#2308](https://github.com/typescript-eslint/typescript-eslint/issues/2308)) ([e9d2ab6](https://github.com/typescript-eslint/typescript-eslint/commit/e9d2ab638b6767700b52797e74b814ea059beaae))
+
+
+
+
+
+## [3.10.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.10.0...v3.10.1) (2020-08-25)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+# [3.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.9.1...v3.10.0) (2020-08-24)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+## [3.9.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.9.0...v3.9.1) (2020-08-17)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+# [3.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.8.0...v3.9.0) (2020-08-10)
+
+
+### Features
+
+* **typescript-estree:** support TSv4 labelled tuple members ([#2378](https://github.com/typescript-eslint/typescript-eslint/issues/2378)) ([00d84ff](https://github.com/typescript-eslint/typescript-eslint/commit/00d84ffbcbe9d0ec98bdb2f2ce59959a27ce4dbe))
+
+
+
+
+
+# [3.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.7.1...v3.8.0) (2020-08-03)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+## [3.7.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.7.0...v3.7.1) (2020-07-27)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+# [3.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.6.1...v3.7.0) (2020-07-20)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+## [3.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.6.0...v3.6.1) (2020-07-13)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+# [3.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.5.0...v3.6.0) (2020-07-06)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
+# [3.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.4.0...v3.5.0) (2020-06-29)
+
+
+### Features
+
+* add package scope-manager ([#1939](https://github.com/typescript-eslint/typescript-eslint/issues/1939)) ([682eb7e](https://github.com/typescript-eslint/typescript-eslint/commit/682eb7e009c3f22a542882dfd3602196a60d2a1e))
diff --git a/server/node_modules/@typescript-eslint/scope-manager/LICENSE b/server/node_modules/@typescript-eslint/scope-manager/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..7e7370143b26b5e2a826528507c7cc8df2d2eacf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 TypeScript ESLint and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/server/node_modules/@typescript-eslint/scope-manager/README.md b/server/node_modules/@typescript-eslint/scope-manager/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..24ccd839dff0bb0fe1ec176d9c697c4d0ff9dc86
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/README.md
@@ -0,0 +1,113 @@
+<h1 align="center">TypeScript Scope Manager</h1>
+
+<p align="center">
+    <img src="https://github.com/typescript-eslint/typescript-eslint/workflows/CI/badge.svg" alt="CI" />
+    <a href="https://www.npmjs.com/package/@typescript-eslint/scope-manager"><img src="https://img.shields.io/npm/v/@typescript-eslint/scope-manager.svg?style=flat-square" alt="NPM Version" /></a>
+    <a href="https://www.npmjs.com/package/@typescript-eslint/scope-manager"><img src="https://img.shields.io/npm/dm/@typescript-eslint/scope-manager.svg?style=flat-square" alt="NPM Downloads" /></a>
+</p>
+
+This is a fork of [`eslint-scope`](https://github.com/eslint/eslint-scope), enhanced to support TypeScript functionality.
+[You can view the original licence for the code here](https://github.com/eslint/eslint-scope/blob/dbddf14d5771b21b5da704213e4508c660ca1c64/LICENSE).
+
+This package is consumed automatically by [`@typescript-eslint/parser`](../parser).
+You probably don't want to use it directly.
+
+## Getting Started
+
+**[You can find our Getting Started docs here](../../docs/getting-started/linting/README.md)**
+
+## Installation
+
+```bash
+$ yarn add -D typescript @typescript-eslint/scope-manager
+$ npm i --save-dev typescript @typescript-eslint/scope-manager
+```
+
+## API
+
+### `analyze(tree, options)`
+
+Analyses a given AST and returns the resulting `ScopeManager`.
+
+```ts
+interface AnalyzeOptions {
+  /**
+   * Known visitor keys.
+   */
+  childVisitorKeys?: Record<string, string[]> | null;
+
+  /**
+   * Which ECMAScript version is considered.
+   * Defaults to `2018`.
+   */
+  ecmaVersion?: EcmaVersion;
+
+  /**
+   * Whether the whole script is executed under node.js environment.
+   * When enabled, the scope manager adds a function scope immediately following the global scope.
+   * Defaults to `false`.
+   */
+  globalReturn?: boolean;
+
+  /**
+   * Implied strict mode (if ecmaVersion >= 5).
+   * Defaults to `false`.
+   */
+  impliedStrict?: boolean;
+
+  /**
+   * The identifier that's used for JSX Element creation (after transpilation).
+   * This should not be a member expression - just the root identifier (i.e. use "React" instead of "React.createElement").
+   * Defaults to `"React"`.
+   */
+  jsxPragma?: string;
+
+  /**
+   * The identifier that's used for JSX fragment elements (after transpilation).
+   * If `null`, assumes transpilation will always use a member on `jsxFactory` (i.e. React.Fragment).
+   * This should not be a member expression - just the root identifier (i.e. use "h" instead of "h.Fragment").
+   * Defaults to `null`.
+   */
+  jsxFragmentName?: string | null;
+
+  /**
+   * The lib used by the project.
+   * This automatically defines a type variable for any types provided by the configured TS libs.
+   * For more information, see https://www.typescriptlang.org/tsconfig#lib
+   *
+   * Defaults to the lib for the provided `ecmaVersion`.
+   */
+  lib?: Lib[];
+
+  /**
+   * The source type of the script.
+   */
+  sourceType?: 'script' | 'module';
+}
+```
+
+Example usage:
+
+```ts
+import { analyze } from '@typescript-eslint/scope-manager';
+import { parse } from '@typescript-eslint/typescript-estree';
+
+const code = `const hello: string = 'world';`;
+const ast = parse(code, {
+  // note that scope-manager requires ranges on the AST
+  range: true,
+});
+const scope = analyze(ast, {
+  ecmaVersion: 2020,
+  sourceType: 'module',
+});
+```
+
+## References
+
+- https://eslint.org/docs/developer-guide/scope-manager-interface
+- https://github.com/eslint/eslint-scope
+
+## Contributing
+
+[See the contributing guide here](../../CONTRIBUTING.md)
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/ID.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/ID.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..679109f24dc080ec24f7484b6c03d82b6d689950
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/ID.d.ts
@@ -0,0 +1,4 @@
+declare function createIdGenerator(): () => number;
+declare function resetIds(): void;
+export { createIdGenerator, resetIds };
+//# sourceMappingURL=ID.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/ID.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/ID.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..2c9c0fd0d896af4b223a97700bd507788c86097c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/ID.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ID.d.ts","sourceRoot":"","sources":["../src/ID.ts"],"names":[],"mappings":"AAGA,iBAAS,iBAAiB,IAAI,MAAM,MAAM,CAUzC;AAED,iBAAS,QAAQ,IAAI,IAAI,CAExB;AAED,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/ID.js b/server/node_modules/@typescript-eslint/scope-manager/dist/ID.js
new file mode 100644
index 0000000000000000000000000000000000000000..a5404c07b2d01bb4b0c9852a885bfa07f615190f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/ID.js
@@ -0,0 +1,22 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.resetIds = exports.createIdGenerator = void 0;
+const ID_CACHE = new Map();
+let NEXT_KEY = 0;
+function createIdGenerator() {
+    const key = (NEXT_KEY += 1);
+    ID_CACHE.set(key, 0);
+    return () => {
+        var _a;
+        const current = (_a = ID_CACHE.get(key)) !== null && _a !== void 0 ? _a : 0;
+        const next = current + 1;
+        ID_CACHE.set(key, next);
+        return next;
+    };
+}
+exports.createIdGenerator = createIdGenerator;
+function resetIds() {
+    ID_CACHE.clear();
+}
+exports.resetIds = resetIds;
+//# sourceMappingURL=ID.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/ID.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/ID.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..ec2b09d0109f13289b17863297e1ac883ab81847
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/ID.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ID.js","sourceRoot":"","sources":["../src/ID.ts"],"names":[],"mappings":";;;AAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;AAC3C,IAAI,QAAQ,GAAG,CAAC,CAAC;AAEjB,SAAS,iBAAiB;IACxB,MAAM,GAAG,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAErB,OAAO,GAAW,EAAE;;QAClB,MAAM,OAAO,SAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAMQ,8CAAiB;AAJ1B,SAAS,QAAQ;IACf,QAAQ,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC;AAE2B,4BAAQ"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0412263a3e0c892fe363d9d9e2fe45b7ea3751fb
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.d.ts
@@ -0,0 +1,68 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { BlockScope, CatchScope, ClassScope, ConditionalTypeScope, ForScope, FunctionExpressionNameScope, FunctionScope, FunctionTypeScope, GlobalScope, MappedTypeScope, ModuleScope, Scope, SwitchScope, TSEnumScope, TSModuleScope, TypeScope, WithScope } from './scope';
+import { Variable } from './variable';
+interface ScopeManagerOptions {
+    globalReturn?: boolean;
+    sourceType?: 'module' | 'script';
+    impliedStrict?: boolean;
+    ecmaVersion?: number;
+}
+declare class ScopeManager {
+    #private;
+    currentScope: Scope | null;
+    readonly declaredVariables: WeakMap<TSESTree.Node, Variable[]>;
+    /**
+     * The root scope
+     * @public
+     */
+    globalScope: GlobalScope | null;
+    readonly nodeToScope: WeakMap<TSESTree.Node, Scope[]>;
+    /**
+     * All scopes
+     * @public
+     */
+    readonly scopes: Scope[];
+    get variables(): Variable[];
+    constructor(options: ScopeManagerOptions);
+    isGlobalReturn(): boolean;
+    isModule(): boolean;
+    isImpliedStrict(): boolean;
+    isStrictModeSupported(): boolean;
+    isES6(): boolean;
+    /**
+     * Get the variables that a given AST node defines. The gotten variables' `def[].node`/`def[].parent` property is the node.
+     * If the node does not define any variable, this returns an empty array.
+     * @param node An AST node to get their variables.
+     * @public
+     */
+    getDeclaredVariables(node: TSESTree.Node): Variable[];
+    /**
+     * Get the scope of a given AST node. The gotten scope's `block` property is the node.
+     * This method never returns `function-expression-name` scope. If the node does not have their scope, this returns `null`.
+     *
+     * @param node An AST node to get their scope.
+     * @param inner If the node has multiple scopes, this returns the outermost scope normally.
+     *                If `inner` is `true` then this returns the innermost scope.
+     * @public
+     */
+    acquire(node: TSESTree.Node, inner?: boolean): Scope | null;
+    protected nestScope<T extends Scope>(scope: T): T;
+    nestBlockScope(node: BlockScope['block']): BlockScope;
+    nestCatchScope(node: CatchScope['block']): CatchScope;
+    nestClassScope(node: ClassScope['block']): ClassScope;
+    nestConditionalTypeScope(node: ConditionalTypeScope['block']): ConditionalTypeScope;
+    nestForScope(node: ForScope['block']): ForScope;
+    nestFunctionExpressionNameScope(node: FunctionExpressionNameScope['block']): FunctionExpressionNameScope;
+    nestFunctionScope(node: FunctionScope['block'], isMethodDefinition: boolean): FunctionScope;
+    nestFunctionTypeScope(node: FunctionTypeScope['block']): FunctionTypeScope;
+    nestGlobalScope(node: GlobalScope['block']): GlobalScope;
+    nestMappedTypeScope(node: MappedTypeScope['block']): MappedTypeScope;
+    nestModuleScope(node: ModuleScope['block']): ModuleScope;
+    nestSwitchScope(node: SwitchScope['block']): SwitchScope;
+    nestTSEnumScope(node: TSEnumScope['block']): TSEnumScope;
+    nestTSModuleScope(node: TSModuleScope['block']): TSModuleScope;
+    nestTypeScope(node: TypeScope['block']): TypeScope;
+    nestWithScope(node: WithScope['block']): WithScope;
+}
+export { ScopeManager };
+//# sourceMappingURL=ScopeManager.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..9f80fe3d0565551e76ed07e8364b1b4ddae5503b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ScopeManager.d.ts","sourceRoot":"","sources":["../src/ScopeManager.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.js b/server/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.js
new file mode 100644
index 0000000000000000000000000000000000000000..96567915d23da780acfda909767369881d162724
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.js
@@ -0,0 +1,181 @@
+"use strict";
+var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to set private field on non-instance");
+    }
+    privateMap.set(receiver, value);
+    return value;
+};
+var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to get private field on non-instance");
+    }
+    return privateMap.get(receiver);
+};
+var _options;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ScopeManager = void 0;
+const assert_1 = require("./assert");
+const scope_1 = require("./scope");
+class ScopeManager {
+    constructor(options) {
+        _options.set(this, void 0);
+        this.scopes = [];
+        this.globalScope = null;
+        this.nodeToScope = new WeakMap();
+        this.currentScope = null;
+        __classPrivateFieldSet(this, _options, options);
+        this.declaredVariables = new WeakMap();
+    }
+    get variables() {
+        const variables = new Set();
+        function recurse(scope) {
+            scope.variables.forEach(v => variables.add(v));
+            scope.childScopes.forEach(recurse);
+        }
+        this.scopes.forEach(recurse);
+        return Array.from(variables).sort((a, b) => a.$id - b.$id);
+    }
+    isGlobalReturn() {
+        return __classPrivateFieldGet(this, _options).globalReturn === true;
+    }
+    isModule() {
+        return __classPrivateFieldGet(this, _options).sourceType === 'module';
+    }
+    isImpliedStrict() {
+        return __classPrivateFieldGet(this, _options).impliedStrict === true;
+    }
+    isStrictModeSupported() {
+        return __classPrivateFieldGet(this, _options).ecmaVersion != null && __classPrivateFieldGet(this, _options).ecmaVersion >= 5;
+    }
+    isES6() {
+        return __classPrivateFieldGet(this, _options).ecmaVersion != null && __classPrivateFieldGet(this, _options).ecmaVersion >= 6;
+    }
+    /**
+     * Get the variables that a given AST node defines. The gotten variables' `def[].node`/`def[].parent` property is the node.
+     * If the node does not define any variable, this returns an empty array.
+     * @param node An AST node to get their variables.
+     * @public
+     */
+    getDeclaredVariables(node) {
+        var _a;
+        return (_a = this.declaredVariables.get(node)) !== null && _a !== void 0 ? _a : [];
+    }
+    /**
+     * Get the scope of a given AST node. The gotten scope's `block` property is the node.
+     * This method never returns `function-expression-name` scope. If the node does not have their scope, this returns `null`.
+     *
+     * @param node An AST node to get their scope.
+     * @param inner If the node has multiple scopes, this returns the outermost scope normally.
+     *                If `inner` is `true` then this returns the innermost scope.
+     * @public
+     */
+    acquire(node, inner = false) {
+        function predicate(testScope) {
+            if (testScope.type === 'function' && testScope.functionExpressionScope) {
+                return false;
+            }
+            return true;
+        }
+        const scopes = this.nodeToScope.get(node);
+        if (!scopes || scopes.length === 0) {
+            return null;
+        }
+        // Heuristic selection from all scopes.
+        // If you would like to get all scopes, please use ScopeManager#acquireAll.
+        if (scopes.length === 1) {
+            return scopes[0];
+        }
+        if (inner) {
+            for (let i = scopes.length - 1; i >= 0; --i) {
+                const scope = scopes[i];
+                if (predicate(scope)) {
+                    return scope;
+                }
+            }
+        }
+        else {
+            for (let i = 0; i < scopes.length; ++i) {
+                const scope = scopes[i];
+                if (predicate(scope)) {
+                    return scope;
+                }
+            }
+        }
+        return null;
+    }
+    nestScope(scope) {
+        if (scope instanceof scope_1.GlobalScope) {
+            assert_1.assert(this.currentScope === null);
+            this.globalScope = scope;
+        }
+        this.currentScope = scope;
+        return scope;
+    }
+    nestBlockScope(node) {
+        assert_1.assert(this.currentScope);
+        return this.nestScope(new scope_1.BlockScope(this, this.currentScope, node));
+    }
+    nestCatchScope(node) {
+        assert_1.assert(this.currentScope);
+        return this.nestScope(new scope_1.CatchScope(this, this.currentScope, node));
+    }
+    nestClassScope(node) {
+        assert_1.assert(this.currentScope);
+        return this.nestScope(new scope_1.ClassScope(this, this.currentScope, node));
+    }
+    nestConditionalTypeScope(node) {
+        assert_1.assert(this.currentScope);
+        return this.nestScope(new scope_1.ConditionalTypeScope(this, this.currentScope, node));
+    }
+    nestForScope(node) {
+        assert_1.assert(this.currentScope);
+        return this.nestScope(new scope_1.ForScope(this, this.currentScope, node));
+    }
+    nestFunctionExpressionNameScope(node) {
+        assert_1.assert(this.currentScope);
+        return this.nestScope(new scope_1.FunctionExpressionNameScope(this, this.currentScope, node));
+    }
+    nestFunctionScope(node, isMethodDefinition) {
+        assert_1.assert(this.currentScope);
+        return this.nestScope(new scope_1.FunctionScope(this, this.currentScope, node, isMethodDefinition));
+    }
+    nestFunctionTypeScope(node) {
+        assert_1.assert(this.currentScope);
+        return this.nestScope(new scope_1.FunctionTypeScope(this, this.currentScope, node));
+    }
+    nestGlobalScope(node) {
+        return this.nestScope(new scope_1.GlobalScope(this, node));
+    }
+    nestMappedTypeScope(node) {
+        assert_1.assert(this.currentScope);
+        return this.nestScope(new scope_1.MappedTypeScope(this, this.currentScope, node));
+    }
+    nestModuleScope(node) {
+        assert_1.assert(this.currentScope);
+        return this.nestScope(new scope_1.ModuleScope(this, this.currentScope, node));
+    }
+    nestSwitchScope(node) {
+        assert_1.assert(this.currentScope);
+        return this.nestScope(new scope_1.SwitchScope(this, this.currentScope, node));
+    }
+    nestTSEnumScope(node) {
+        assert_1.assert(this.currentScope);
+        return this.nestScope(new scope_1.TSEnumScope(this, this.currentScope, node));
+    }
+    nestTSModuleScope(node) {
+        assert_1.assert(this.currentScope);
+        return this.nestScope(new scope_1.TSModuleScope(this, this.currentScope, node));
+    }
+    nestTypeScope(node) {
+        assert_1.assert(this.currentScope);
+        return this.nestScope(new scope_1.TypeScope(this, this.currentScope, node));
+    }
+    nestWithScope(node) {
+        assert_1.assert(this.currentScope);
+        return this.nestScope(new scope_1.WithScope(this, this.currentScope, node));
+    }
+}
+exports.ScopeManager = ScopeManager;
+_options = new WeakMap();
+//# sourceMappingURL=ScopeManager.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..2eda4ba8eaf8d6f5c075749c1ec4dc98dc29f215
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ScopeManager.js","sourceRoot":"","sources":["../src/ScopeManager.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/analyze.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/analyze.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..77c03f2a2e7e7df621d5eb9f93a88df851e17ca9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/analyze.d.ts
@@ -0,0 +1,56 @@
+import { TSESTree, EcmaVersion, Lib } from '@typescript-eslint/types';
+import { ReferencerOptions } from './referencer';
+import { ScopeManager } from './ScopeManager';
+interface AnalyzeOptions {
+    /**
+     * Known visitor keys.
+     */
+    childVisitorKeys?: ReferencerOptions['childVisitorKeys'];
+    /**
+     * Which ECMAScript version is considered.
+     * Defaults to `2018`.
+     */
+    ecmaVersion?: EcmaVersion;
+    /**
+     * Whether the whole script is executed under node.js environment.
+     * When enabled, the scope manager adds a function scope immediately following the global scope.
+     * Defaults to `false`.
+     */
+    globalReturn?: boolean;
+    /**
+     * Implied strict mode (if ecmaVersion >= 5).
+     * Defaults to `false`.
+     */
+    impliedStrict?: boolean;
+    /**
+     * The identifier that's used for JSX Element creation (after transpilation).
+     * This should not be a member expression - just the root identifier (i.e. use "React" instead of "React.createElement").
+     * Defaults to `"React"`.
+     */
+    jsxPragma?: string;
+    /**
+     * The identifier that's used for JSX fragment elements (after transpilation).
+     * If `null`, assumes transpilation will always use a member on `jsxFactory` (i.e. React.Fragment).
+     * This should not be a member expression - just the root identifier (i.e. use "h" instead of "h.Fragment").
+     * Defaults to `null`.
+     */
+    jsxFragmentName?: string | null;
+    /**
+     * The lib used by the project.
+     * This automatically defines a type variable for any types provided by the configured TS libs.
+     * Defaults to the lib for the provided `ecmaVersion`.
+     *
+     * https://www.typescriptlang.org/tsconfig#lib
+     */
+    lib?: Lib[];
+    /**
+     * The source type of the script.
+     */
+    sourceType?: 'script' | 'module';
+}
+/**
+ * Takes an AST and returns the analyzed scopes.
+ */
+declare function analyze(tree: TSESTree.Node, providedOptions?: AnalyzeOptions): ScopeManager;
+export { analyze, AnalyzeOptions };
+//# sourceMappingURL=analyze.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/analyze.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/analyze.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..ce287b9be375245f093e0024b947fa428c464373
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/analyze.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../src/analyze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAc,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAO9C,UAAU,cAAc;IACtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAEzD;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;IAEZ;;OAEG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAClC;AAwBD;;GAEG;AACH,iBAAS,OAAO,CACd,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,eAAe,CAAC,EAAE,cAAc,GAC/B,YAAY,CA0Bd;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/analyze.js b/server/node_modules/@typescript-eslint/scope-manager/dist/analyze.js
new file mode 100644
index 0000000000000000000000000000000000000000..611b2125f9523a6e55a31d0afb6ac5fe721a7c6f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/analyze.js
@@ -0,0 +1,50 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.analyze = void 0;
+const visitor_keys_1 = require("@typescript-eslint/visitor-keys");
+const referencer_1 = require("./referencer");
+const ScopeManager_1 = require("./ScopeManager");
+const lib_1 = require("./lib");
+const DEFAULT_OPTIONS = {
+    childVisitorKeys: visitor_keys_1.visitorKeys,
+    ecmaVersion: 2018,
+    globalReturn: false,
+    impliedStrict: false,
+    jsxPragma: 'React',
+    jsxFragmentName: null,
+    lib: ['es2018'],
+    sourceType: 'script',
+};
+function mapEcmaVersion(version) {
+    if (version == null || version === 3 || version === 5) {
+        return 'es5';
+    }
+    const year = version > 2000 ? version : 2015 + (version - 6);
+    const lib = `es${year}`;
+    return lib in lib_1.lib ? lib : year > 2020 ? 'esnext' : 'es5';
+}
+/**
+ * Takes an AST and returns the analyzed scopes.
+ */
+function analyze(tree, providedOptions) {
+    var _a, _b, _c, _d, _e, _f, _g, _h;
+    const ecmaVersion = (_a = providedOptions === null || providedOptions === void 0 ? void 0 : providedOptions.ecmaVersion) !== null && _a !== void 0 ? _a : DEFAULT_OPTIONS.ecmaVersion;
+    const options = {
+        childVisitorKeys: (_b = providedOptions === null || providedOptions === void 0 ? void 0 : providedOptions.childVisitorKeys) !== null && _b !== void 0 ? _b : DEFAULT_OPTIONS.childVisitorKeys,
+        ecmaVersion,
+        globalReturn: (_c = providedOptions === null || providedOptions === void 0 ? void 0 : providedOptions.globalReturn) !== null && _c !== void 0 ? _c : DEFAULT_OPTIONS.globalReturn,
+        impliedStrict: (_d = providedOptions === null || providedOptions === void 0 ? void 0 : providedOptions.impliedStrict) !== null && _d !== void 0 ? _d : DEFAULT_OPTIONS.impliedStrict,
+        jsxPragma: (_e = providedOptions === null || providedOptions === void 0 ? void 0 : providedOptions.jsxPragma) !== null && _e !== void 0 ? _e : DEFAULT_OPTIONS.jsxPragma,
+        jsxFragmentName: (_f = providedOptions === null || providedOptions === void 0 ? void 0 : providedOptions.jsxFragmentName) !== null && _f !== void 0 ? _f : DEFAULT_OPTIONS.jsxFragmentName,
+        sourceType: (_g = providedOptions === null || providedOptions === void 0 ? void 0 : providedOptions.sourceType) !== null && _g !== void 0 ? _g : DEFAULT_OPTIONS.sourceType,
+        lib: (_h = providedOptions === null || providedOptions === void 0 ? void 0 : providedOptions.lib) !== null && _h !== void 0 ? _h : [mapEcmaVersion(ecmaVersion)],
+    };
+    // ensure the option is lower cased
+    options.lib = options.lib.map(l => l.toLowerCase());
+    const scopeManager = new ScopeManager_1.ScopeManager(options);
+    const referencer = new referencer_1.Referencer(options, scopeManager);
+    referencer.visit(tree);
+    return scopeManager;
+}
+exports.analyze = analyze;
+//# sourceMappingURL=analyze.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/analyze.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/analyze.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..dd445117ba4ae288a52dcd548c835106cfaba6fe
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/analyze.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../src/analyze.ts"],"names":[],"mappings":";;;AACA,kEAA8D;AAC9D,6CAA6D;AAC7D,iDAA8C;AAC9C,+BAA2C;AA6D3C,MAAM,eAAe,GAA6B;IAChD,gBAAgB,EAAE,0BAAW;IAC7B,WAAW,EAAE,IAAI;IACjB,YAAY,EAAE,KAAK;IACnB,aAAa,EAAE,KAAK;IACpB,SAAS,EAAE,OAAO;IAClB,eAAe,EAAE,IAAI;IACrB,GAAG,EAAE,CAAC,QAAQ,CAAC;IACf,UAAU,EAAE,QAAQ;CACrB,CAAC;AAEF,SAAS,cAAc,CAAC,OAAgC;IACtD,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE;QACrD,OAAO,KAAK,CAAC;KACd;IAED,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE,CAAC;IAExB,OAAO,GAAG,IAAI,SAAW,CAAC,CAAC,CAAE,GAAW,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,SAAS,OAAO,CACd,IAAmB,EACnB,eAAgC;;IAEhC,MAAM,WAAW,SACf,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,WAAW,mCAAI,eAAe,CAAC,WAAW,CAAC;IAC9D,MAAM,OAAO,GAA6B;QACxC,gBAAgB,QACd,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,gBAAgB,mCAAI,eAAe,CAAC,gBAAgB;QACvE,WAAW;QACX,YAAY,QAAE,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,YAAY,mCAAI,eAAe,CAAC,YAAY;QAC3E,aAAa,QACX,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,aAAa,mCAAI,eAAe,CAAC,aAAa;QACjE,SAAS,QAAE,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,SAAS,mCAAI,eAAe,CAAC,SAAS;QAClE,eAAe,QACb,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,eAAe,mCAAI,eAAe,CAAC,eAAe;QACrE,UAAU,QAAE,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,UAAU,mCAAI,eAAe,CAAC,UAAU;QACrE,GAAG,QAAE,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,GAAG,mCAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;KAC3D,CAAC;IAEF,mCAAmC;IACnC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAS,CAAC,CAAC;IAE3D,MAAM,YAAY,GAAG,IAAI,2BAAY,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,IAAI,uBAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAEzD,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEvB,OAAO,YAAY,CAAC;AACtB,CAAC;AAEQ,0BAAO"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/assert.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/assert.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bd40c9e22bc382ded933e832f7651a2649a06262
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/assert.d.ts
@@ -0,0 +1,3 @@
+declare function assert(value: unknown, message?: string): asserts value;
+export { assert };
+//# sourceMappingURL=assert.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/assert.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/assert.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..72f278dd6d369738a4eb5e93472c7cc51a700fbc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/assert.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../src/assert.ts"],"names":[],"mappings":"AACA,iBAAS,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAI/D;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/assert.js b/server/node_modules/@typescript-eslint/scope-manager/dist/assert.js
new file mode 100644
index 0000000000000000000000000000000000000000..8c805233f725177c5b675d915964b861444a61b9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/assert.js
@@ -0,0 +1,11 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.assert = void 0;
+// the base assert module doesn't use ts assertion syntax
+function assert(value, message) {
+    if (value == null) {
+        throw new Error(message);
+    }
+}
+exports.assert = assert;
+//# sourceMappingURL=assert.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/assert.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/assert.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..60cbdc2778d0ecb0c0cf930187bc91b2456a8428
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/assert.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"assert.js","sourceRoot":"","sources":["../src/assert.ts"],"names":[],"mappings":";;;AAAA,yDAAyD;AACzD,SAAS,MAAM,CAAC,KAAc,EAAE,OAAgB;IAC9C,IAAI,KAAK,IAAI,IAAI,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;KAC1B;AACH,CAAC;AAEQ,wBAAM"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..515ed1e7ba7263776fd88aeb0645a5a6a398ad11
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { DefinitionType } from './DefinitionType';
+import { DefinitionBase } from './DefinitionBase';
+declare class CatchClauseDefinition extends DefinitionBase<DefinitionType.CatchClause, TSESTree.CatchClause, null, TSESTree.BindingName> {
+    constructor(name: TSESTree.BindingName, node: CatchClauseDefinition['node']);
+    readonly isTypeDefinition = false;
+    readonly isVariableDefinition = true;
+}
+export { CatchClauseDefinition };
+//# sourceMappingURL=CatchClauseDefinition.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..7902e5ba75937b3bad3d377d17818e209657b42a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"CatchClauseDefinition.d.ts","sourceRoot":"","sources":["../../src/definition/CatchClauseDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAM,qBAAsB,SAAQ,cAAc,CAChD,cAAc,CAAC,WAAW,EAC1B,QAAQ,CAAC,WAAW,EACpB,IAAI,EACJ,QAAQ,CAAC,WAAW,CACrB;gBACa,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE,IAAI,EAAE,qBAAqB,CAAC,MAAM,CAAC;IAI3E,SAAgB,gBAAgB,SAAS;IACzC,SAAgB,oBAAoB,QAAQ;CAC7C;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.js b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.js
new file mode 100644
index 0000000000000000000000000000000000000000..78526ff58782c0defaeb8f5d6771d57856ba4e2d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CatchClauseDefinition = void 0;
+const DefinitionType_1 = require("./DefinitionType");
+const DefinitionBase_1 = require("./DefinitionBase");
+class CatchClauseDefinition extends DefinitionBase_1.DefinitionBase {
+    constructor(name, node) {
+        super(DefinitionType_1.DefinitionType.CatchClause, name, node, null);
+        this.isTypeDefinition = false;
+        this.isVariableDefinition = true;
+    }
+}
+exports.CatchClauseDefinition = CatchClauseDefinition;
+//# sourceMappingURL=CatchClauseDefinition.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..13ef7a5819c9e423a274c74a74a73118a3f140e3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"CatchClauseDefinition.js","sourceRoot":"","sources":["../../src/definition/CatchClauseDefinition.ts"],"names":[],"mappings":";;;AACA,qDAAkD;AAClD,qDAAkD;AAElD,MAAM,qBAAsB,SAAQ,+BAKnC;IACC,YAAY,IAA0B,EAAE,IAAmC;QACzE,KAAK,CAAC,+BAAc,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAGtC,qBAAgB,GAAG,KAAK,CAAC;QACzB,yBAAoB,GAAG,IAAI,CAAC;IAH5C,CAAC;CAIF;AAEQ,sDAAqB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..52efe4ca4913bfc81c10330a10f90eab44c0b7f8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { DefinitionType } from './DefinitionType';
+import { DefinitionBase } from './DefinitionBase';
+declare class ClassNameDefinition extends DefinitionBase<DefinitionType.ClassName, TSESTree.ClassDeclaration | TSESTree.ClassExpression, null, TSESTree.Identifier> {
+    constructor(name: TSESTree.Identifier, node: ClassNameDefinition['node']);
+    readonly isTypeDefinition = true;
+    readonly isVariableDefinition = true;
+}
+export { ClassNameDefinition };
+//# sourceMappingURL=ClassNameDefinition.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..35a251f11af0ef44f12b034fc23113abe36539f8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ClassNameDefinition.d.ts","sourceRoot":"","sources":["../../src/definition/ClassNameDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAM,mBAAoB,SAAQ,cAAc,CAC9C,cAAc,CAAC,SAAS,EACxB,QAAQ,CAAC,gBAAgB,GAAG,QAAQ,CAAC,eAAe,EACpD,IAAI,EACJ,QAAQ,CAAC,UAAU,CACpB;gBACa,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC;IAIxE,SAAgB,gBAAgB,QAAQ;IACxC,SAAgB,oBAAoB,QAAQ;CAC7C;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.js b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.js
new file mode 100644
index 0000000000000000000000000000000000000000..a24d9c9a540900c6a33d832ab583f3810edffab7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ClassNameDefinition = void 0;
+const DefinitionType_1 = require("./DefinitionType");
+const DefinitionBase_1 = require("./DefinitionBase");
+class ClassNameDefinition extends DefinitionBase_1.DefinitionBase {
+    constructor(name, node) {
+        super(DefinitionType_1.DefinitionType.ClassName, name, node, null);
+        this.isTypeDefinition = true;
+        this.isVariableDefinition = true;
+    }
+}
+exports.ClassNameDefinition = ClassNameDefinition;
+//# sourceMappingURL=ClassNameDefinition.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..4555e1f26c484526af133bee155c6c469433f9b7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ClassNameDefinition.js","sourceRoot":"","sources":["../../src/definition/ClassNameDefinition.ts"],"names":[],"mappings":";;;AACA,qDAAkD;AAClD,qDAAkD;AAElD,MAAM,mBAAoB,SAAQ,+BAKjC;IACC,YAAY,IAAyB,EAAE,IAAiC;QACtE,KAAK,CAAC,+BAAc,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAGpC,qBAAgB,GAAG,IAAI,CAAC;QACxB,yBAAoB,GAAG,IAAI,CAAC;IAH5C,CAAC;CAIF;AAEQ,kDAAmB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f95c199701a53ba22968b8b804b0d388b5dc1a40
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.d.ts
@@ -0,0 +1,14 @@
+import { CatchClauseDefinition } from './CatchClauseDefinition';
+import { ClassNameDefinition } from './ClassNameDefinition';
+import { FunctionNameDefinition } from './FunctionNameDefinition';
+import { ImplicitGlobalVariableDefinition } from './ImplicitGlobalVariableDefinition';
+import { ImportBindingDefinition } from './ImportBindingDefinition';
+import { ParameterDefinition } from './ParameterDefinition';
+import { TSEnumMemberDefinition } from './TSEnumMemberDefinition';
+import { TSEnumNameDefinition } from './TSEnumNameDefinition';
+import { TSModuleNameDefinition } from './TSModuleNameDefinition';
+import { TypeDefinition } from './TypeDefinition';
+import { VariableDefinition } from './VariableDefinition';
+declare type Definition = CatchClauseDefinition | ClassNameDefinition | FunctionNameDefinition | ImplicitGlobalVariableDefinition | ImportBindingDefinition | ParameterDefinition | TSEnumMemberDefinition | TSEnumNameDefinition | TSModuleNameDefinition | TypeDefinition | VariableDefinition;
+export { Definition };
+//# sourceMappingURL=Definition.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..5d7bab9b5960985dc77c51dd1d0b21ce9aaa5340
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Definition.d.ts","sourceRoot":"","sources":["../../src/definition/Definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAC;AACtF,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,aAAK,UAAU,GACX,qBAAqB,GACrB,mBAAmB,GACnB,sBAAsB,GACtB,gCAAgC,GAChC,uBAAuB,GACvB,mBAAmB,GACnB,sBAAsB,GACtB,oBAAoB,GACpB,sBAAsB,GACtB,cAAc,GACd,kBAAkB,CAAC;AAEvB,OAAO,EAAE,UAAU,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.js b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.js
new file mode 100644
index 0000000000000000000000000000000000000000..0d4aab95f1c8db4098564292b1a5356f5148de01
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Definition.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..be4a7fb357dd2cee94f38c410e06ee45c974f50e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Definition.js","sourceRoot":"","sources":["../../src/definition/Definition.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..380859a3ff33d0a861175885180525a8ecdd6a88
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.d.ts
@@ -0,0 +1,39 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { DefinitionType } from './DefinitionType';
+declare abstract class DefinitionBase<TType extends DefinitionType, TNode extends TSESTree.Node, TParent extends TSESTree.Node | null, TName extends TSESTree.Node = TSESTree.BindingName> {
+    /**
+     * A unique ID for this instance - primarily used to help debugging and testing
+     */
+    readonly $id: number;
+    /**
+     * The type of the definition
+     * @public
+     */
+    readonly type: TType;
+    /**
+     * The `Identifier` node of this definition
+     * @public
+     */
+    readonly name: TName;
+    /**
+     * The enclosing node of the name.
+     * @public
+     */
+    readonly node: TNode;
+    /**
+     * the enclosing statement node of the identifier.
+     * @public
+     */
+    readonly parent: TParent;
+    constructor(type: TType, name: TName, node: TNode, parent: TParent);
+    /**
+     * `true` if the variable is valid in a type context, false otherwise
+     */
+    abstract readonly isTypeDefinition: boolean;
+    /**
+     * `true` if the variable is valid in a value context, false otherwise
+     */
+    abstract readonly isVariableDefinition: boolean;
+}
+export { DefinitionBase };
+//# sourceMappingURL=DefinitionBase.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..377949af9d3e8b66a98f26020aa68a09bd77744b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"DefinitionBase.d.ts","sourceRoot":"","sources":["../../src/definition/DefinitionBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKlD,uBAAe,cAAc,CAC3B,KAAK,SAAS,cAAc,EAC5B,KAAK,SAAS,QAAQ,CAAC,IAAI,EAC3B,OAAO,SAAS,QAAQ,CAAC,IAAI,GAAG,IAAI,EACpC,KAAK,SAAS,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,WAAW;IAElD;;OAEG;IACH,SAAgB,GAAG,EAAE,MAAM,CAAe;IAE1C;;;OAGG;IACH,SAAgB,IAAI,EAAE,KAAK,CAAC;IAE5B;;;OAGG;IACH,SAAgB,IAAI,EAAE,KAAK,CAAC;IAE5B;;;OAGG;IACH,SAAgB,IAAI,EAAE,KAAK,CAAC;IAE5B;;;OAGG;IACH,SAAgB,MAAM,EAAE,OAAO,CAAC;gBAEpB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO;IAOlE;;OAEG;IACH,kBAAyB,gBAAgB,EAAE,OAAO,CAAC;IAEnD;;OAEG;IACH,kBAAyB,oBAAoB,EAAE,OAAO,CAAC;CACxD;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.js b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.js
new file mode 100644
index 0000000000000000000000000000000000000000..6e7a9f5dcc41d71e111f8c6ccc4a5d42bcd43c13
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.js
@@ -0,0 +1,19 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.DefinitionBase = void 0;
+const ID_1 = require("../ID");
+const generator = ID_1.createIdGenerator();
+class DefinitionBase {
+    constructor(type, name, node, parent) {
+        /**
+         * A unique ID for this instance - primarily used to help debugging and testing
+         */
+        this.$id = generator();
+        this.type = type;
+        this.name = name;
+        this.node = node;
+        this.parent = parent;
+    }
+}
+exports.DefinitionBase = DefinitionBase;
+//# sourceMappingURL=DefinitionBase.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..2a1e89ed0de53cf09558f0aa9998e1843ccd1781
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"DefinitionBase.js","sourceRoot":"","sources":["../../src/definition/DefinitionBase.ts"],"names":[],"mappings":";;;AAEA,8BAA0C;AAE1C,MAAM,SAAS,GAAG,sBAAiB,EAAE,CAAC;AAEtC,MAAe,cAAc;IAmC3B,YAAY,IAAW,EAAE,IAAW,EAAE,IAAW,EAAE,MAAe;QA7BlE;;WAEG;QACa,QAAG,GAAW,SAAS,EAAE,CAAC;QA2BxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CAWF;AAEQ,wCAAc"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d86220d8c93c63f1d894c36cfa259207b621f94e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.d.ts
@@ -0,0 +1,15 @@
+declare enum DefinitionType {
+    CatchClause = "CatchClause",
+    ClassName = "ClassName",
+    FunctionName = "FunctionName",
+    ImplicitGlobalVariable = "ImplicitGlobalVariable",
+    ImportBinding = "ImportBinding",
+    Parameter = "Parameter",
+    TSEnumName = "TSEnumName",
+    TSEnumMember = "TSEnumMemberName",
+    TSModuleName = "TSModuleName",
+    Type = "Type",
+    Variable = "Variable"
+}
+export { DefinitionType };
+//# sourceMappingURL=DefinitionType.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..907e6b3fcd141c76168949b10f067db2eb7bb114
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"DefinitionType.d.ts","sourceRoot":"","sources":["../../src/definition/DefinitionType.ts"],"names":[],"mappings":"AAAA,aAAK,cAAc;IAEjB,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,YAAY,iBAAiB;IAC7B,sBAAsB,2BAA2B;IACjD,aAAa,kBAAkB;IAC/B,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,YAAY,qBAAqB;IACjC,YAAY,iBAAiB;IAC7B,IAAI,SAAS;IACb,QAAQ,aAAa;CACtB;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.js b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.js
new file mode 100644
index 0000000000000000000000000000000000000000..3263034197a7ec38111ad7e826b3535251e1f102
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.js
@@ -0,0 +1,20 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.DefinitionType = void 0;
+var DefinitionType;
+(function (DefinitionType) {
+    // eslint-disable-next-line @typescript-eslint/internal/prefer-ast-types-enum
+    DefinitionType["CatchClause"] = "CatchClause";
+    DefinitionType["ClassName"] = "ClassName";
+    DefinitionType["FunctionName"] = "FunctionName";
+    DefinitionType["ImplicitGlobalVariable"] = "ImplicitGlobalVariable";
+    DefinitionType["ImportBinding"] = "ImportBinding";
+    DefinitionType["Parameter"] = "Parameter";
+    DefinitionType["TSEnumName"] = "TSEnumName";
+    DefinitionType["TSEnumMember"] = "TSEnumMemberName";
+    DefinitionType["TSModuleName"] = "TSModuleName";
+    DefinitionType["Type"] = "Type";
+    DefinitionType["Variable"] = "Variable";
+})(DefinitionType || (DefinitionType = {}));
+exports.DefinitionType = DefinitionType;
+//# sourceMappingURL=DefinitionType.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..53434c1a310949b7a87ae05772b6457bfd29a16d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"DefinitionType.js","sourceRoot":"","sources":["../../src/definition/DefinitionType.ts"],"names":[],"mappings":";;;AAAA,IAAK,cAaJ;AAbD,WAAK,cAAc;IACjB,6EAA6E;IAC7E,6CAA2B,CAAA;IAC3B,yCAAuB,CAAA;IACvB,+CAA6B,CAAA;IAC7B,mEAAiD,CAAA;IACjD,iDAA+B,CAAA;IAC/B,yCAAuB,CAAA;IACvB,2CAAyB,CAAA;IACzB,mDAAiC,CAAA;IACjC,+CAA6B,CAAA;IAC7B,+BAAa,CAAA;IACb,uCAAqB,CAAA;AACvB,CAAC,EAbI,cAAc,KAAd,cAAc,QAalB;AAEQ,wCAAc"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..03b42a58578a0d07e32e1db6810a0ef7fd95ffe4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { DefinitionType } from './DefinitionType';
+import { DefinitionBase } from './DefinitionBase';
+declare class FunctionNameDefinition extends DefinitionBase<DefinitionType.FunctionName, TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.TSDeclareFunction | TSESTree.TSEmptyBodyFunctionExpression, null, TSESTree.Identifier> {
+    constructor(name: TSESTree.Identifier, node: FunctionNameDefinition['node']);
+    readonly isTypeDefinition = false;
+    readonly isVariableDefinition = true;
+}
+export { FunctionNameDefinition };
+//# sourceMappingURL=FunctionNameDefinition.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..667b9f274940ddf0f85d38aa5c257540e4cb36fc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"FunctionNameDefinition.d.ts","sourceRoot":"","sources":["../../src/definition/FunctionNameDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAM,sBAAuB,SAAQ,cAAc,CACjD,cAAc,CAAC,YAAY,EACzB,QAAQ,CAAC,mBAAmB,GAC5B,QAAQ,CAAC,kBAAkB,GAC3B,QAAQ,CAAC,iBAAiB,GAC1B,QAAQ,CAAC,6BAA6B,EACxC,IAAI,EACJ,QAAQ,CAAC,UAAU,CACpB;gBACa,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,sBAAsB,CAAC,MAAM,CAAC;IAI3E,SAAgB,gBAAgB,SAAS;IACzC,SAAgB,oBAAoB,QAAQ;CAC7C;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.js b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.js
new file mode 100644
index 0000000000000000000000000000000000000000..80692e0bae92c88545961451ecead6c63cf637fd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.FunctionNameDefinition = void 0;
+const DefinitionType_1 = require("./DefinitionType");
+const DefinitionBase_1 = require("./DefinitionBase");
+class FunctionNameDefinition extends DefinitionBase_1.DefinitionBase {
+    constructor(name, node) {
+        super(DefinitionType_1.DefinitionType.FunctionName, name, node, null);
+        this.isTypeDefinition = false;
+        this.isVariableDefinition = true;
+    }
+}
+exports.FunctionNameDefinition = FunctionNameDefinition;
+//# sourceMappingURL=FunctionNameDefinition.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..376c6506881dae1eb0b0509ad5b98f24b04c3791
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"FunctionNameDefinition.js","sourceRoot":"","sources":["../../src/definition/FunctionNameDefinition.ts"],"names":[],"mappings":";;;AACA,qDAAkD;AAClD,qDAAkD;AAElD,MAAM,sBAAuB,SAAQ,+BAQpC;IACC,YAAY,IAAyB,EAAE,IAAoC;QACzE,KAAK,CAAC,+BAAc,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAGvC,qBAAgB,GAAG,KAAK,CAAC;QACzB,yBAAoB,GAAG,IAAI,CAAC;IAH5C,CAAC;CAIF;AAEQ,wDAAsB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6b9268fc7ac506f743ff8076358ddc63e1884241
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { DefinitionType } from './DefinitionType';
+import { DefinitionBase } from './DefinitionBase';
+declare class ImplicitGlobalVariableDefinition extends DefinitionBase<DefinitionType.ImplicitGlobalVariable, TSESTree.Node, null, TSESTree.BindingName> {
+    constructor(name: TSESTree.BindingName, node: ImplicitGlobalVariableDefinition['node']);
+    readonly isTypeDefinition = false;
+    readonly isVariableDefinition = true;
+}
+export { ImplicitGlobalVariableDefinition };
+//# sourceMappingURL=ImplicitGlobalVariableDefinition.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..098d9a960ce01c8490bca18c1cf6fcf68920a830
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ImplicitGlobalVariableDefinition.d.ts","sourceRoot":"","sources":["../../src/definition/ImplicitGlobalVariableDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAM,gCAAiC,SAAQ,cAAc,CAC3D,cAAc,CAAC,sBAAsB,EACrC,QAAQ,CAAC,IAAI,EACb,IAAI,EACJ,QAAQ,CAAC,WAAW,CACrB;gBAEG,IAAI,EAAE,QAAQ,CAAC,WAAW,EAC1B,IAAI,EAAE,gCAAgC,CAAC,MAAM,CAAC;IAKhD,SAAgB,gBAAgB,SAAS;IACzC,SAAgB,oBAAoB,QAAQ;CAC7C;AAED,OAAO,EAAE,gCAAgC,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.js b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.js
new file mode 100644
index 0000000000000000000000000000000000000000..bded7a8126a828360e9ce923dcafb34b0356a590
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ImplicitGlobalVariableDefinition = void 0;
+const DefinitionType_1 = require("./DefinitionType");
+const DefinitionBase_1 = require("./DefinitionBase");
+class ImplicitGlobalVariableDefinition extends DefinitionBase_1.DefinitionBase {
+    constructor(name, node) {
+        super(DefinitionType_1.DefinitionType.ImplicitGlobalVariable, name, node, null);
+        this.isTypeDefinition = false;
+        this.isVariableDefinition = true;
+    }
+}
+exports.ImplicitGlobalVariableDefinition = ImplicitGlobalVariableDefinition;
+//# sourceMappingURL=ImplicitGlobalVariableDefinition.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..5e6cd782cb3cc5593860d13de81e2bc1d21a313a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ImplicitGlobalVariableDefinition.js","sourceRoot":"","sources":["../../src/definition/ImplicitGlobalVariableDefinition.ts"],"names":[],"mappings":";;;AACA,qDAAkD;AAClD,qDAAkD;AAElD,MAAM,gCAAiC,SAAQ,+BAK9C;IACC,YACE,IAA0B,EAC1B,IAA8C;QAE9C,KAAK,CAAC,+BAAc,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAGjD,qBAAgB,GAAG,KAAK,CAAC;QACzB,yBAAoB,GAAG,IAAI,CAAC;IAH5C,CAAC;CAIF;AAEQ,4EAAgC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..40397a725d8c31d8da52bb1619a5e1d9e87cd80d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.d.ts
@@ -0,0 +1,11 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { DefinitionType } from './DefinitionType';
+import { DefinitionBase } from './DefinitionBase';
+declare class ImportBindingDefinition extends DefinitionBase<DefinitionType.ImportBinding, TSESTree.ImportSpecifier | TSESTree.ImportDefaultSpecifier | TSESTree.ImportNamespaceSpecifier | TSESTree.TSImportEqualsDeclaration, TSESTree.ImportDeclaration | TSESTree.TSImportEqualsDeclaration, TSESTree.Identifier> {
+    constructor(name: TSESTree.Identifier, node: TSESTree.TSImportEqualsDeclaration, decl: TSESTree.TSImportEqualsDeclaration);
+    constructor(name: TSESTree.Identifier, node: Exclude<ImportBindingDefinition['node'], TSESTree.TSImportEqualsDeclaration>, decl: TSESTree.ImportDeclaration);
+    readonly isTypeDefinition = true;
+    readonly isVariableDefinition = true;
+}
+export { ImportBindingDefinition };
+//# sourceMappingURL=ImportBindingDefinition.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..f3f5d146f6ed1c1992da7db7126446eb01803ac7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ImportBindingDefinition.d.ts","sourceRoot":"","sources":["../../src/definition/ImportBindingDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAM,uBAAwB,SAAQ,cAAc,CAClD,cAAc,CAAC,aAAa,EAC1B,QAAQ,CAAC,eAAe,GACxB,QAAQ,CAAC,sBAAsB,GAC/B,QAAQ,CAAC,wBAAwB,GACjC,QAAQ,CAAC,yBAAyB,EACpC,QAAQ,CAAC,iBAAiB,GAAG,QAAQ,CAAC,yBAAyB,EAC/D,QAAQ,CAAC,UAAU,CACpB;gBAEG,IAAI,EAAE,QAAQ,CAAC,UAAU,EACzB,IAAI,EAAE,QAAQ,CAAC,yBAAyB,EACxC,IAAI,EAAE,QAAQ,CAAC,yBAAyB;gBAGxC,IAAI,EAAE,QAAQ,CAAC,UAAU,EACzB,IAAI,EAAE,OAAO,CACX,uBAAuB,CAAC,MAAM,CAAC,EAC/B,QAAQ,CAAC,yBAAyB,CACnC,EACD,IAAI,EAAE,QAAQ,CAAC,iBAAiB;IAUlC,SAAgB,gBAAgB,QAAQ;IACxC,SAAgB,oBAAoB,QAAQ;CAC7C;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.js b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.js
new file mode 100644
index 0000000000000000000000000000000000000000..f843dde9b8c9f4c1ff420cd87cf592bf3e43cc0d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ImportBindingDefinition = void 0;
+const DefinitionType_1 = require("./DefinitionType");
+const DefinitionBase_1 = require("./DefinitionBase");
+class ImportBindingDefinition extends DefinitionBase_1.DefinitionBase {
+    constructor(name, node, decl) {
+        super(DefinitionType_1.DefinitionType.ImportBinding, name, node, decl);
+        this.isTypeDefinition = true;
+        this.isVariableDefinition = true;
+    }
+}
+exports.ImportBindingDefinition = ImportBindingDefinition;
+//# sourceMappingURL=ImportBindingDefinition.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..73bbd11551eedebc751cd6f4032e8e17b58042ed
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ImportBindingDefinition.js","sourceRoot":"","sources":["../../src/definition/ImportBindingDefinition.ts"],"names":[],"mappings":";;;AACA,qDAAkD;AAClD,qDAAkD;AAElD,MAAM,uBAAwB,SAAQ,+BAQrC;IAcC,YACE,IAAyB,EACzB,IAAqC,EACrC,IAAqE;QAErE,KAAK,CAAC,+BAAc,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAGxC,qBAAgB,GAAG,IAAI,CAAC;QACxB,yBAAoB,GAAG,IAAI,CAAC;IAH5C,CAAC;CAIF;AAEQ,0DAAuB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d65f585ee4c08419d894eaac35114fae52b5b0a8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.d.ts
@@ -0,0 +1,14 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { DefinitionType } from './DefinitionType';
+import { DefinitionBase } from './DefinitionBase';
+declare class ParameterDefinition extends DefinitionBase<DefinitionType.Parameter, TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.TSCallSignatureDeclaration | TSESTree.TSConstructorType | TSESTree.TSConstructSignatureDeclaration | TSESTree.TSDeclareFunction | TSESTree.TSEmptyBodyFunctionExpression | TSESTree.TSFunctionType | TSESTree.TSMethodSignature, null, TSESTree.BindingName> {
+    /**
+     * Whether the parameter definition is a part of a rest parameter.
+     */
+    readonly rest: boolean;
+    constructor(name: TSESTree.BindingName, node: ParameterDefinition['node'], rest: boolean);
+    readonly isTypeDefinition = false;
+    readonly isVariableDefinition = true;
+}
+export { ParameterDefinition };
+//# sourceMappingURL=ParameterDefinition.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e959c165c1fea4ea207d4a4faefd62d65de744be
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ParameterDefinition.d.ts","sourceRoot":"","sources":["../../src/definition/ParameterDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAM,mBAAoB,SAAQ,cAAc,CAC9C,cAAc,CAAC,SAAS,EACtB,QAAQ,CAAC,uBAAuB,GAChC,QAAQ,CAAC,mBAAmB,GAC5B,QAAQ,CAAC,kBAAkB,GAC3B,QAAQ,CAAC,0BAA0B,GACnC,QAAQ,CAAC,iBAAiB,GAC1B,QAAQ,CAAC,+BAA+B,GACxC,QAAQ,CAAC,iBAAiB,GAC1B,QAAQ,CAAC,6BAA6B,GACtC,QAAQ,CAAC,cAAc,GACvB,QAAQ,CAAC,iBAAiB,EAC5B,IAAI,EACJ,QAAQ,CAAC,WAAW,CACrB;IACC;;OAEG;IACH,SAAgB,IAAI,EAAE,OAAO,CAAC;gBAE5B,IAAI,EAAE,QAAQ,CAAC,WAAW,EAC1B,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,EACjC,IAAI,EAAE,OAAO;IAMf,SAAgB,gBAAgB,SAAS;IACzC,SAAgB,oBAAoB,QAAQ;CAC7C;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.js b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.js
new file mode 100644
index 0000000000000000000000000000000000000000..4e2a1b92d7db38dc2e835c1b3b5321be07a023ac
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.js
@@ -0,0 +1,15 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ParameterDefinition = void 0;
+const DefinitionType_1 = require("./DefinitionType");
+const DefinitionBase_1 = require("./DefinitionBase");
+class ParameterDefinition extends DefinitionBase_1.DefinitionBase {
+    constructor(name, node, rest) {
+        super(DefinitionType_1.DefinitionType.Parameter, name, node, null);
+        this.isTypeDefinition = false;
+        this.isVariableDefinition = true;
+        this.rest = rest;
+    }
+}
+exports.ParameterDefinition = ParameterDefinition;
+//# sourceMappingURL=ParameterDefinition.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..0c322f10d53c7cddeca2aa74ae24ef0f674685a7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ParameterDefinition.js","sourceRoot":"","sources":["../../src/definition/ParameterDefinition.ts"],"names":[],"mappings":";;;AACA,qDAAkD;AAClD,qDAAkD;AAElD,MAAM,mBAAoB,SAAQ,+BAcjC;IAKC,YACE,IAA0B,EAC1B,IAAiC,EACjC,IAAa;QAEb,KAAK,CAAC,+BAAc,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAIpC,qBAAgB,GAAG,KAAK,CAAC;QACzB,yBAAoB,GAAG,IAAI,CAAC;QAJ1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CAIF;AAEQ,kDAAmB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3e7a4f3ed67dfaef87f7ff0f94c79b12b6b82652
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { DefinitionType } from './DefinitionType';
+import { DefinitionBase } from './DefinitionBase';
+declare class TSEnumMemberDefinition extends DefinitionBase<DefinitionType.TSEnumMember, TSESTree.TSEnumMember, null, TSESTree.Identifier | TSESTree.StringLiteral> {
+    constructor(name: TSESTree.Identifier | TSESTree.StringLiteral, node: TSEnumMemberDefinition['node']);
+    readonly isTypeDefinition = true;
+    readonly isVariableDefinition = true;
+}
+export { TSEnumMemberDefinition };
+//# sourceMappingURL=TSEnumMemberDefinition.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..f1495a9a6535fc0a6f5bcc3668771e4a177c532c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"TSEnumMemberDefinition.d.ts","sourceRoot":"","sources":["../../src/definition/TSEnumMemberDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAM,sBAAuB,SAAQ,cAAc,CACjD,cAAc,CAAC,YAAY,EAC3B,QAAQ,CAAC,YAAY,EACrB,IAAI,EACJ,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAC7C;gBAEG,IAAI,EAAE,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,EAClD,IAAI,EAAE,sBAAsB,CAAC,MAAM,CAAC;IAKtC,SAAgB,gBAAgB,QAAQ;IACxC,SAAgB,oBAAoB,QAAQ;CAC7C;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.js b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.js
new file mode 100644
index 0000000000000000000000000000000000000000..8cc51f778d8ae85adaf6e86c113532d5b19b39c7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TSEnumMemberDefinition = void 0;
+const DefinitionType_1 = require("./DefinitionType");
+const DefinitionBase_1 = require("./DefinitionBase");
+class TSEnumMemberDefinition extends DefinitionBase_1.DefinitionBase {
+    constructor(name, node) {
+        super(DefinitionType_1.DefinitionType.TSEnumMember, name, node, null);
+        this.isTypeDefinition = true;
+        this.isVariableDefinition = true;
+    }
+}
+exports.TSEnumMemberDefinition = TSEnumMemberDefinition;
+//# sourceMappingURL=TSEnumMemberDefinition.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c0112a6daf836734c95e5ce8aad643bd00af4fce
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"TSEnumMemberDefinition.js","sourceRoot":"","sources":["../../src/definition/TSEnumMemberDefinition.ts"],"names":[],"mappings":";;;AACA,qDAAkD;AAClD,qDAAkD;AAElD,MAAM,sBAAuB,SAAQ,+BAKpC;IACC,YACE,IAAkD,EAClD,IAAoC;QAEpC,KAAK,CAAC,+BAAc,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAGvC,qBAAgB,GAAG,IAAI,CAAC;QACxB,yBAAoB,GAAG,IAAI,CAAC;IAH5C,CAAC;CAIF;AAEQ,wDAAsB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..45cb424d9640988d79bd14ddf3e57eaff04cd676
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { DefinitionType } from './DefinitionType';
+import { DefinitionBase } from './DefinitionBase';
+declare class TSEnumNameDefinition extends DefinitionBase<DefinitionType.TSEnumName, TSESTree.TSEnumDeclaration, null, TSESTree.Identifier> {
+    constructor(name: TSESTree.Identifier, node: TSEnumNameDefinition['node']);
+    readonly isTypeDefinition = true;
+    readonly isVariableDefinition = true;
+}
+export { TSEnumNameDefinition };
+//# sourceMappingURL=TSEnumNameDefinition.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..6e0bc36e8f717b147b0f70c1334a6c60dc65b3ef
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"TSEnumNameDefinition.d.ts","sourceRoot":"","sources":["../../src/definition/TSEnumNameDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAM,oBAAqB,SAAQ,cAAc,CAC/C,cAAc,CAAC,UAAU,EACzB,QAAQ,CAAC,iBAAiB,EAC1B,IAAI,EACJ,QAAQ,CAAC,UAAU,CACpB;gBACa,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC;IAIzE,SAAgB,gBAAgB,QAAQ;IACxC,SAAgB,oBAAoB,QAAQ;CAC7C;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.js b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.js
new file mode 100644
index 0000000000000000000000000000000000000000..aa7875010dbae375c03c6df355f473157c7b6e5b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TSEnumNameDefinition = void 0;
+const DefinitionType_1 = require("./DefinitionType");
+const DefinitionBase_1 = require("./DefinitionBase");
+class TSEnumNameDefinition extends DefinitionBase_1.DefinitionBase {
+    constructor(name, node) {
+        super(DefinitionType_1.DefinitionType.TSEnumName, name, node, null);
+        this.isTypeDefinition = true;
+        this.isVariableDefinition = true;
+    }
+}
+exports.TSEnumNameDefinition = TSEnumNameDefinition;
+//# sourceMappingURL=TSEnumNameDefinition.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b850d4a80fd7962adaf257c86fc8d5ffa01633a8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"TSEnumNameDefinition.js","sourceRoot":"","sources":["../../src/definition/TSEnumNameDefinition.ts"],"names":[],"mappings":";;;AACA,qDAAkD;AAClD,qDAAkD;AAElD,MAAM,oBAAqB,SAAQ,+BAKlC;IACC,YAAY,IAAyB,EAAE,IAAkC;QACvE,KAAK,CAAC,+BAAc,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAGrC,qBAAgB,GAAG,IAAI,CAAC;QACxB,yBAAoB,GAAG,IAAI,CAAC;IAH5C,CAAC;CAIF;AAEQ,oDAAoB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..390a0aacc6f79454a98aace95e08c31dc48f9894
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { DefinitionType } from './DefinitionType';
+import { DefinitionBase } from './DefinitionBase';
+declare class TSModuleNameDefinition extends DefinitionBase<DefinitionType.TSModuleName, TSESTree.TSModuleDeclaration, null, TSESTree.Identifier> {
+    constructor(name: TSESTree.Identifier, node: TSModuleNameDefinition['node']);
+    readonly isTypeDefinition = true;
+    readonly isVariableDefinition = true;
+}
+export { TSModuleNameDefinition };
+//# sourceMappingURL=TSModuleNameDefinition.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..297b4f3f1d1ae3d1dda769c38c9d00e66dda8b0c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"TSModuleNameDefinition.d.ts","sourceRoot":"","sources":["../../src/definition/TSModuleNameDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAM,sBAAuB,SAAQ,cAAc,CACjD,cAAc,CAAC,YAAY,EAC3B,QAAQ,CAAC,mBAAmB,EAC5B,IAAI,EACJ,QAAQ,CAAC,UAAU,CACpB;gBACa,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,sBAAsB,CAAC,MAAM,CAAC;IAI3E,SAAgB,gBAAgB,QAAQ;IACxC,SAAgB,oBAAoB,QAAQ;CAC7C;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.js b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.js
new file mode 100644
index 0000000000000000000000000000000000000000..606eac427e9bdf2c6feb276e562c5ec53427e90d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TSModuleNameDefinition = void 0;
+const DefinitionType_1 = require("./DefinitionType");
+const DefinitionBase_1 = require("./DefinitionBase");
+class TSModuleNameDefinition extends DefinitionBase_1.DefinitionBase {
+    constructor(name, node) {
+        super(DefinitionType_1.DefinitionType.TSModuleName, name, node, null);
+        this.isTypeDefinition = true;
+        this.isVariableDefinition = true;
+    }
+}
+exports.TSModuleNameDefinition = TSModuleNameDefinition;
+//# sourceMappingURL=TSModuleNameDefinition.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..96ecc483e05710597c8dab3aa3726c91a2d4176c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"TSModuleNameDefinition.js","sourceRoot":"","sources":["../../src/definition/TSModuleNameDefinition.ts"],"names":[],"mappings":";;;AACA,qDAAkD;AAClD,qDAAkD;AAElD,MAAM,sBAAuB,SAAQ,+BAKpC;IACC,YAAY,IAAyB,EAAE,IAAoC;QACzE,KAAK,CAAC,+BAAc,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAGvC,qBAAgB,GAAG,IAAI,CAAC;QACxB,yBAAoB,GAAG,IAAI,CAAC;IAH5C,CAAC;CAIF;AAEQ,wDAAsB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..91a9d11771453c9356453a11f63f76b80a40bd3e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { DefinitionType } from './DefinitionType';
+import { DefinitionBase } from './DefinitionBase';
+declare class TypeDefinition extends DefinitionBase<DefinitionType.Type, TSESTree.TSInterfaceDeclaration | TSESTree.TSTypeAliasDeclaration | TSESTree.TSTypeParameter, null, TSESTree.Identifier> {
+    constructor(name: TSESTree.Identifier, node: TypeDefinition['node']);
+    readonly isTypeDefinition = true;
+    readonly isVariableDefinition = false;
+}
+export { TypeDefinition };
+//# sourceMappingURL=TypeDefinition.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..32e798a919f5e0b70c2f6fabbd64fa8c424241f9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"TypeDefinition.d.ts","sourceRoot":"","sources":["../../src/definition/TypeDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAM,cAAe,SAAQ,cAAc,CACzC,cAAc,CAAC,IAAI,EACjB,QAAQ,CAAC,sBAAsB,GAC/B,QAAQ,CAAC,sBAAsB,GAC/B,QAAQ,CAAC,eAAe,EAC1B,IAAI,EACJ,QAAQ,CAAC,UAAU,CACpB;gBACa,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC;IAInE,SAAgB,gBAAgB,QAAQ;IACxC,SAAgB,oBAAoB,SAAS;CAC9C;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.js b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.js
new file mode 100644
index 0000000000000000000000000000000000000000..8839eaf23ba9ac8eb1ef37d2fa0f0caca3b3c4bb
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TypeDefinition = void 0;
+const DefinitionType_1 = require("./DefinitionType");
+const DefinitionBase_1 = require("./DefinitionBase");
+class TypeDefinition extends DefinitionBase_1.DefinitionBase {
+    constructor(name, node) {
+        super(DefinitionType_1.DefinitionType.Type, name, node, null);
+        this.isTypeDefinition = true;
+        this.isVariableDefinition = false;
+    }
+}
+exports.TypeDefinition = TypeDefinition;
+//# sourceMappingURL=TypeDefinition.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..fa53691cc5847b931e82d92a52ebc62c4e1b3685
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"TypeDefinition.js","sourceRoot":"","sources":["../../src/definition/TypeDefinition.ts"],"names":[],"mappings":";;;AACA,qDAAkD;AAClD,qDAAkD;AAElD,MAAM,cAAe,SAAQ,+BAO5B;IACC,YAAY,IAAyB,EAAE,IAA4B;QACjE,KAAK,CAAC,+BAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAG/B,qBAAgB,GAAG,IAAI,CAAC;QACxB,yBAAoB,GAAG,KAAK,CAAC;IAH7C,CAAC;CAIF;AAEQ,wCAAc"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f00d3dfc4fbb57315b1258f27b5f226e866ad74f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { DefinitionType } from './DefinitionType';
+import { DefinitionBase } from './DefinitionBase';
+declare class VariableDefinition extends DefinitionBase<DefinitionType.Variable, TSESTree.VariableDeclarator, TSESTree.VariableDeclaration, TSESTree.Identifier> {
+    constructor(name: TSESTree.Identifier, node: VariableDefinition['node'], decl: TSESTree.VariableDeclaration);
+    readonly isTypeDefinition = false;
+    readonly isVariableDefinition = true;
+}
+export { VariableDefinition };
+//# sourceMappingURL=VariableDefinition.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..83577f726a91733a3f9d4381cdc47bee8c7b0306
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"VariableDefinition.d.ts","sourceRoot":"","sources":["../../src/definition/VariableDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAM,kBAAmB,SAAQ,cAAc,CAC7C,cAAc,CAAC,QAAQ,EACvB,QAAQ,CAAC,kBAAkB,EAC3B,QAAQ,CAAC,mBAAmB,EAC5B,QAAQ,CAAC,UAAU,CACpB;gBAEG,IAAI,EAAE,QAAQ,CAAC,UAAU,EACzB,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,mBAAmB;IAKpC,SAAgB,gBAAgB,SAAS;IACzC,SAAgB,oBAAoB,QAAQ;CAC7C;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.js b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.js
new file mode 100644
index 0000000000000000000000000000000000000000..d377a693707c2ef62510317923fa563a01790ad4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.VariableDefinition = void 0;
+const DefinitionType_1 = require("./DefinitionType");
+const DefinitionBase_1 = require("./DefinitionBase");
+class VariableDefinition extends DefinitionBase_1.DefinitionBase {
+    constructor(name, node, decl) {
+        super(DefinitionType_1.DefinitionType.Variable, name, node, decl);
+        this.isTypeDefinition = false;
+        this.isVariableDefinition = true;
+    }
+}
+exports.VariableDefinition = VariableDefinition;
+//# sourceMappingURL=VariableDefinition.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..fda5fae3da733628b18ef31d4ce1a1ef89bfc9e7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"VariableDefinition.js","sourceRoot":"","sources":["../../src/definition/VariableDefinition.ts"],"names":[],"mappings":";;;AACA,qDAAkD;AAClD,qDAAkD;AAElD,MAAM,kBAAmB,SAAQ,+BAKhC;IACC,YACE,IAAyB,EACzB,IAAgC,EAChC,IAAkC;QAElC,KAAK,CAAC,+BAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAGnC,qBAAgB,GAAG,KAAK,CAAC;QACzB,yBAAoB,GAAG,IAAI,CAAC;IAH5C,CAAC;CAIF;AAEQ,gDAAkB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2be95a127fb486e6989a480c00b820fb30c2967c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts
@@ -0,0 +1,14 @@
+export * from './CatchClauseDefinition';
+export * from './ClassNameDefinition';
+export * from './Definition';
+export * from './DefinitionType';
+export * from './FunctionNameDefinition';
+export * from './ImplicitGlobalVariableDefinition';
+export * from './ImportBindingDefinition';
+export * from './ParameterDefinition';
+export * from './TSEnumMemberDefinition';
+export * from './TSEnumNameDefinition';
+export * from './TSModuleNameDefinition';
+export * from './TypeDefinition';
+export * from './VariableDefinition';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..dfd43be8ca474a47cbd3ca7102ceb5371e6bf2e0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/definition/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..b683a079ab02d7209677df5181fafe5fc5145f6f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js
@@ -0,0 +1,26 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("./CatchClauseDefinition"), exports);
+__exportStar(require("./ClassNameDefinition"), exports);
+__exportStar(require("./Definition"), exports);
+__exportStar(require("./DefinitionType"), exports);
+__exportStar(require("./FunctionNameDefinition"), exports);
+__exportStar(require("./ImplicitGlobalVariableDefinition"), exports);
+__exportStar(require("./ImportBindingDefinition"), exports);
+__exportStar(require("./ParameterDefinition"), exports);
+__exportStar(require("./TSEnumMemberDefinition"), exports);
+__exportStar(require("./TSEnumNameDefinition"), exports);
+__exportStar(require("./TSModuleNameDefinition"), exports);
+__exportStar(require("./TypeDefinition"), exports);
+__exportStar(require("./VariableDefinition"), exports);
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..715c54f5489af22818391e6fa37f3452503c8b07
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/definition/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0DAAwC;AACxC,wDAAsC;AACtC,+CAA6B;AAC7B,mDAAiC;AACjC,2DAAyC;AACzC,qEAAmD;AACnD,4DAA0C;AAC1C,wDAAsC;AACtC,2DAAyC;AACzC,yDAAuC;AACvC,2DAAyC;AACzC,mDAAiC;AACjC,uDAAqC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/index.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..23ee2461ad12917015defd87e217e385db5e162b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/index.d.ts
@@ -0,0 +1,9 @@
+export { analyze, AnalyzeOptions } from './analyze';
+export * from './definition';
+export { Reference } from './referencer/Reference';
+export { Visitor } from './referencer/Visitor';
+export { PatternVisitor, PatternVisitorCallback, PatternVisitorOptions, } from './referencer/PatternVisitor';
+export * from './scope';
+export { ScopeManager } from './ScopeManager';
+export * from './variable';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/index.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..17ddbf5754806bd988392f221c233876906c3fcf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,cAAc,YAAY,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/index.js b/server/node_modules/@typescript-eslint/scope-manager/dist/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..49ae66477a29bf107f7552b2ca37ffa7eab80375
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/index.js
@@ -0,0 +1,27 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ScopeManager = exports.PatternVisitor = exports.Visitor = exports.Reference = exports.analyze = void 0;
+var analyze_1 = require("./analyze");
+Object.defineProperty(exports, "analyze", { enumerable: true, get: function () { return analyze_1.analyze; } });
+__exportStar(require("./definition"), exports);
+var Reference_1 = require("./referencer/Reference");
+Object.defineProperty(exports, "Reference", { enumerable: true, get: function () { return Reference_1.Reference; } });
+var Visitor_1 = require("./referencer/Visitor");
+Object.defineProperty(exports, "Visitor", { enumerable: true, get: function () { return Visitor_1.Visitor; } });
+var PatternVisitor_1 = require("./referencer/PatternVisitor");
+Object.defineProperty(exports, "PatternVisitor", { enumerable: true, get: function () { return PatternVisitor_1.PatternVisitor; } });
+__exportStar(require("./scope"), exports);
+var ScopeManager_1 = require("./ScopeManager");
+Object.defineProperty(exports, "ScopeManager", { enumerable: true, get: function () { return ScopeManager_1.ScopeManager; } });
+__exportStar(require("./variable"), exports);
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/index.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..55869e4d67a73cff071592eff08fa96f1a34e563
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qCAAoD;AAA3C,kGAAA,OAAO,OAAA;AAChB,+CAA6B;AAC7B,oDAAmD;AAA1C,sGAAA,SAAS,OAAA;AAClB,gDAA+C;AAAtC,kGAAA,OAAO,OAAA;AAChB,8DAIqC;AAHnC,gHAAA,cAAc,OAAA;AAIhB,0CAAwB;AACxB,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,6CAA2B"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bb38760e07bb5e54c9d8f08f22d2bab53146d7e4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const dom: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=dom.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..c3f66fcb054bce36eea2699d9e38611b6a5a23b9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/lib/dom.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,GAAG,4CA6sP+B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fc03570db4b90859ffc3e52fd14e5b0c79d4b27c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const dom_iterable: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=dom.iterable.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..7a2c53712efdd629964d47c57d7e22becd42c492
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"dom.iterable.d.ts","sourceRoot":"","sources":["../../src/lib/dom.iterable.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,YAAY,4CA+TsB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.js
new file mode 100644
index 0000000000000000000000000000000000000000..f5837640e104c7ab0095e28ffc8556acacb0a903
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.js
@@ -0,0 +1,327 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.dom_iterable = void 0;
+exports.dom_iterable = {
+    AudioParam: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AudioParam',
+    },
+    AudioParamMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AudioParamMap',
+    },
+    BaseAudioContext: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BaseAudioContext',
+    },
+    CSSRuleList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CSSRuleList',
+    },
+    CSSStyleDeclaration: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CSSStyleDeclaration',
+    },
+    Cache: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Cache',
+    },
+    CanvasPathDrawingStyles: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasPathDrawingStyles',
+    },
+    ClientRectList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ClientRectList',
+    },
+    DOMRectList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMRectList',
+    },
+    DOMStringList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMStringList',
+    },
+    DOMTokenList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMTokenList',
+    },
+    DataTransferItemList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DataTransferItemList',
+    },
+    FileList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FileList',
+    },
+    FormData: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FormData',
+    },
+    HTMLAllCollection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLAllCollection',
+    },
+    HTMLCollectionBase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLCollectionBase',
+    },
+    HTMLCollectionOf: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLCollectionOf',
+    },
+    HTMLFormElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLFormElement',
+    },
+    HTMLSelectElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLSelectElement',
+    },
+    Headers: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Headers',
+    },
+    IDBDatabase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBDatabase',
+    },
+    IDBObjectStore: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBObjectStore',
+    },
+    MediaKeyStatusMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaKeyStatusMap',
+    },
+    MediaList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaList',
+    },
+    MimeTypeArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MimeTypeArray',
+    },
+    NamedNodeMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NamedNodeMap',
+    },
+    Navigator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Navigator',
+    },
+    NodeList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NodeList',
+    },
+    NodeListOf: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NodeListOf',
+    },
+    Plugin: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Plugin',
+    },
+    PluginArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PluginArray',
+    },
+    RTCRtpTransceiver: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpTransceiver',
+    },
+    RTCStatsReport: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCStatsReport',
+    },
+    SVGLengthList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SVGLengthList',
+    },
+    SVGNumberList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SVGNumberList',
+    },
+    SVGPointList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SVGPointList',
+    },
+    SVGStringList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SVGStringList',
+    },
+    SourceBufferList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SourceBufferList',
+    },
+    SpeechGrammarList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SpeechGrammarList',
+    },
+    SpeechRecognitionResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SpeechRecognitionResult',
+    },
+    SpeechRecognitionResultList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SpeechRecognitionResultList',
+    },
+    StyleSheetList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'StyleSheetList',
+    },
+    TextTrackCueList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextTrackCueList',
+    },
+    TextTrackList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextTrackList',
+    },
+    TouchList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TouchList',
+    },
+    URLSearchParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'URLSearchParams',
+    },
+    VRDisplay: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'VRDisplay',
+    },
+    WEBGL_draw_buffers: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_draw_buffers',
+    },
+    WebAuthentication: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebAuthentication',
+    },
+    WebGL2RenderingContextBase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGL2RenderingContextBase',
+    },
+    WebGL2RenderingContextOverloads: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGL2RenderingContextOverloads',
+    },
+    WebGLRenderingContextBase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLRenderingContextBase',
+    },
+    WebGLRenderingContextOverloads: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLRenderingContextOverloads',
+    },
+};
+//# sourceMappingURL=dom.iterable.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..80c3260fd6f68349de639bbb4aa967ac44ea85a2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dom.iterable.js","sourceRoot":"","sources":["../../src/lib/dom.iterable.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,YAAY,GAAG;IAC1B,UAAU,EAAE;QACV,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,YAAY;KACnB;IACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB;IACD,gBAAgB,EAAE;QAChB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,kBAAkB;KACzB;IACD,WAAW,EAAE;QACX,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,aAAa;KACpB;IACD,mBAAmB,EAAE;QACnB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,qBAAqB;KAC5B;IACD,KAAK,EAAE;QACL,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,OAAO;KACd;IACD,uBAAuB,EAAE;QACvB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,yBAAyB;KAChC;IACD,cAAc,EAAE;QACd,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,gBAAgB;KACvB;IACD,WAAW,EAAE;QACX,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,aAAa;KACpB;IACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB;IACD,YAAY,EAAE;QACZ,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,cAAc;KACrB;IACD,oBAAoB,EAAE;QACpB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,sBAAsB;KAC7B;IACD,QAAQ,EAAE;QACR,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,UAAU;KACjB;IACD,QAAQ,EAAE;QACR,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,UAAU;KACjB;IACD,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B;IACD,kBAAkB,EAAE;QAClB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,oBAAoB;KAC3B;IACD,gBAAgB,EAAE;QAChB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,kBAAkB;KACzB;IACD,eAAe,EAAE;QACf,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,iBAAiB;KACxB;IACD,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B;IACD,OAAO,EAAE;QACP,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,SAAS;KAChB;IACD,WAAW,EAAE;QACX,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,aAAa;KACpB;IACD,cAAc,EAAE;QACd,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,gBAAgB;KACvB;IACD,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B;IACD,SAAS,EAAE;QACT,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,WAAW;KAClB;IACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB;IACD,YAAY,EAAE;QACZ,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,cAAc;KACrB;IACD,SAAS,EAAE;QACT,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,WAAW;KAClB;IACD,QAAQ,EAAE;QACR,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,UAAU;KACjB;IACD,UAAU,EAAE;QACV,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,YAAY;KACnB;IACD,MAAM,EAAE;QACN,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,QAAQ;KACf;IACD,WAAW,EAAE;QACX,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,aAAa;KACpB;IACD,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B;IACD,cAAc,EAAE;QACd,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,gBAAgB;KACvB;IACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB;IACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB;IACD,YAAY,EAAE;QACZ,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,cAAc;KACrB;IACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB;IACD,gBAAgB,EAAE;QAChB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,kBAAkB;KACzB;IACD,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B;IACD,uBAAuB,EAAE;QACvB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,yBAAyB;KAChC;IACD,2BAA2B,EAAE;QAC3B,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,6BAA6B;KACpC;IACD,cAAc,EAAE;QACd,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,gBAAgB;KACvB;IACD,gBAAgB,EAAE;QAChB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,kBAAkB;KACzB;IACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB;IACD,SAAS,EAAE;QACT,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,WAAW;KAClB;IACD,eAAe,EAAE;QACf,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,iBAAiB;KACxB;IACD,SAAS,EAAE;QACT,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,WAAW;KAClB;IACD,kBAAkB,EAAE;QAClB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,oBAAoB;KAC3B;IACD,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B;IACD,0BAA0B,EAAE;QAC1B,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,4BAA4B;KACnC;IACD,+BAA+B,EAAE;QAC/B,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,iCAAiC;KACxC;IACD,yBAAyB,EAAE;QACzB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,2BAA2B;KAClC;IACD,8BAA8B,EAAE;QAC9B,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,gCAAgC;KACvC;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.js
new file mode 100644
index 0000000000000000000000000000000000000000..01233ec6ce89be6da81dbe190263ac3af0ea45e1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.js
@@ -0,0 +1,7893 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.dom = void 0;
+exports.dom = {
+    Account: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Account',
+    },
+    AddEventListenerOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AddEventListenerOptions',
+    },
+    AesCbcParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesCbcParams',
+    },
+    AesCtrParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesCtrParams',
+    },
+    AesDerivedKeyParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesDerivedKeyParams',
+    },
+    AesGcmParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesGcmParams',
+    },
+    AesKeyAlgorithm: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesKeyAlgorithm',
+    },
+    AesKeyGenParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesKeyGenParams',
+    },
+    Algorithm: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Algorithm',
+    },
+    AnalyserOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AnalyserOptions',
+    },
+    AnimationEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AnimationEventInit',
+    },
+    AnimationPlaybackEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AnimationPlaybackEventInit',
+    },
+    AssertionOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AssertionOptions',
+    },
+    AssignedNodesOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AssignedNodesOptions',
+    },
+    AudioBufferOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AudioBufferOptions',
+    },
+    AudioBufferSourceOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AudioBufferSourceOptions',
+    },
+    AudioContextInfo: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AudioContextInfo',
+    },
+    AudioContextOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AudioContextOptions',
+    },
+    AudioNodeOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AudioNodeOptions',
+    },
+    AudioParamDescriptor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AudioParamDescriptor',
+    },
+    AudioProcessingEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AudioProcessingEventInit',
+    },
+    AudioTimestamp: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AudioTimestamp',
+    },
+    AudioWorkletNodeOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AudioWorkletNodeOptions',
+    },
+    AuthenticationExtensionsClientInputs: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AuthenticationExtensionsClientInputs',
+    },
+    AuthenticationExtensionsClientOutputs: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AuthenticationExtensionsClientOutputs',
+    },
+    AuthenticatorSelectionCriteria: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AuthenticatorSelectionCriteria',
+    },
+    BiquadFilterOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BiquadFilterOptions',
+    },
+    BlobPropertyBag: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BlobPropertyBag',
+    },
+    ByteLengthChunk: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ByteLengthChunk',
+    },
+    CacheQueryOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CacheQueryOptions',
+    },
+    CanvasRenderingContext2DSettings: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasRenderingContext2DSettings',
+    },
+    ChannelMergerOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ChannelMergerOptions',
+    },
+    ChannelSplitterOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ChannelSplitterOptions',
+    },
+    ClientData: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ClientData',
+    },
+    ClientQueryOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ClientQueryOptions',
+    },
+    ClipboardEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ClipboardEventInit',
+    },
+    CloseEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CloseEventInit',
+    },
+    CompositionEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CompositionEventInit',
+    },
+    ComputedEffectTiming: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ComputedEffectTiming',
+    },
+    ComputedKeyframe: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ComputedKeyframe',
+    },
+    ConfirmSiteSpecificExceptionsInformation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConfirmSiteSpecificExceptionsInformation',
+    },
+    ConstantSourceOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConstantSourceOptions',
+    },
+    ConstrainBooleanParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConstrainBooleanParameters',
+    },
+    ConstrainDOMStringParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConstrainDOMStringParameters',
+    },
+    ConstrainDoubleRange: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConstrainDoubleRange',
+    },
+    ConstrainULongRange: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConstrainULongRange',
+    },
+    ConstrainVideoFacingModeParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConstrainVideoFacingModeParameters',
+    },
+    ConvolverOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConvolverOptions',
+    },
+    CredentialCreationOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CredentialCreationOptions',
+    },
+    CredentialPropertiesOutput: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CredentialPropertiesOutput',
+    },
+    CredentialRequestOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CredentialRequestOptions',
+    },
+    CustomEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CustomEventInit',
+    },
+    DOMMatrix2DInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMMatrix2DInit',
+    },
+    DOMMatrixInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMMatrixInit',
+    },
+    DOMPointInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMPointInit',
+    },
+    DOMQuadInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMQuadInit',
+    },
+    DOMRectInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMRectInit',
+    },
+    DelayOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DelayOptions',
+    },
+    DeviceLightEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DeviceLightEventInit',
+    },
+    DeviceMotionEventAccelerationInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DeviceMotionEventAccelerationInit',
+    },
+    DeviceMotionEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DeviceMotionEventInit',
+    },
+    DeviceMotionEventRotationRateInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DeviceMotionEventRotationRateInit',
+    },
+    DeviceOrientationEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DeviceOrientationEventInit',
+    },
+    DevicePermissionDescriptor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DevicePermissionDescriptor',
+    },
+    DocumentTimelineOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DocumentTimelineOptions',
+    },
+    DoubleRange: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DoubleRange',
+    },
+    DragEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DragEventInit',
+    },
+    DynamicsCompressorOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DynamicsCompressorOptions',
+    },
+    EcKeyAlgorithm: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EcKeyAlgorithm',
+    },
+    EcKeyGenParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EcKeyGenParams',
+    },
+    EcKeyImportParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EcKeyImportParams',
+    },
+    EcdhKeyDeriveParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EcdhKeyDeriveParams',
+    },
+    EcdsaParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EcdsaParams',
+    },
+    EffectTiming: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EffectTiming',
+    },
+    ElementCreationOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ElementCreationOptions',
+    },
+    ElementDefinitionOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ElementDefinitionOptions',
+    },
+    ErrorEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ErrorEventInit',
+    },
+    EventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventInit',
+    },
+    EventListenerOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventListenerOptions',
+    },
+    EventModifierInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventModifierInit',
+    },
+    EventSourceInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventSourceInit',
+    },
+    ExceptionInformation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ExceptionInformation',
+    },
+    FilePropertyBag: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FilePropertyBag',
+    },
+    FocusEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FocusEventInit',
+    },
+    FocusNavigationEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FocusNavigationEventInit',
+    },
+    FocusNavigationOrigin: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FocusNavigationOrigin',
+    },
+    FocusOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FocusOptions',
+    },
+    FullscreenOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FullscreenOptions',
+    },
+    GainOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GainOptions',
+    },
+    GamepadEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GamepadEventInit',
+    },
+    GetNotificationOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GetNotificationOptions',
+    },
+    GetRootNodeOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GetRootNodeOptions',
+    },
+    HashChangeEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HashChangeEventInit',
+    },
+    HkdfParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HkdfParams',
+    },
+    HmacImportParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HmacImportParams',
+    },
+    HmacKeyAlgorithm: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HmacKeyAlgorithm',
+    },
+    HmacKeyGenParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HmacKeyGenParams',
+    },
+    IDBIndexParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBIndexParameters',
+    },
+    IDBObjectStoreParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBObjectStoreParameters',
+    },
+    IDBVersionChangeEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBVersionChangeEventInit',
+    },
+    IIRFilterOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IIRFilterOptions',
+    },
+    ImageBitmapOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ImageBitmapOptions',
+    },
+    ImageBitmapRenderingContextSettings: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ImageBitmapRenderingContextSettings',
+    },
+    ImageEncodeOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ImageEncodeOptions',
+    },
+    InputEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'InputEventInit',
+    },
+    IntersectionObserverEntryInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IntersectionObserverEntryInit',
+    },
+    IntersectionObserverInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IntersectionObserverInit',
+    },
+    JsonWebKey: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'JsonWebKey',
+    },
+    KeyAlgorithm: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'KeyAlgorithm',
+    },
+    KeyboardEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'KeyboardEventInit',
+    },
+    Keyframe: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Keyframe',
+    },
+    KeyframeAnimationOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'KeyframeAnimationOptions',
+    },
+    KeyframeEffectOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'KeyframeEffectOptions',
+    },
+    MediaElementAudioSourceOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaElementAudioSourceOptions',
+    },
+    MediaEncryptedEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaEncryptedEventInit',
+    },
+    MediaKeyMessageEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaKeyMessageEventInit',
+    },
+    MediaKeySystemConfiguration: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaKeySystemConfiguration',
+    },
+    MediaKeySystemMediaCapability: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaKeySystemMediaCapability',
+    },
+    MediaQueryListEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaQueryListEventInit',
+    },
+    MediaStreamAudioSourceOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaStreamAudioSourceOptions',
+    },
+    MediaStreamConstraints: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaStreamConstraints',
+    },
+    MediaStreamErrorEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaStreamErrorEventInit',
+    },
+    MediaStreamEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaStreamEventInit',
+    },
+    MediaStreamTrackAudioSourceOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaStreamTrackAudioSourceOptions',
+    },
+    MediaStreamTrackEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaStreamTrackEventInit',
+    },
+    MediaTrackCapabilities: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaTrackCapabilities',
+    },
+    MediaTrackConstraintSet: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaTrackConstraintSet',
+    },
+    MediaTrackConstraints: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaTrackConstraints',
+    },
+    MediaTrackSettings: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaTrackSettings',
+    },
+    MediaTrackSupportedConstraints: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaTrackSupportedConstraints',
+    },
+    MessageEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MessageEventInit',
+    },
+    MidiPermissionDescriptor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MidiPermissionDescriptor',
+    },
+    MouseEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MouseEventInit',
+    },
+    MultiCacheQueryOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MultiCacheQueryOptions',
+    },
+    MutationObserverInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MutationObserverInit',
+    },
+    NavigationPreloadState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigationPreloadState',
+    },
+    NotificationAction: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NotificationAction',
+    },
+    NotificationOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NotificationOptions',
+    },
+    OfflineAudioCompletionEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OfflineAudioCompletionEventInit',
+    },
+    OfflineAudioContextOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OfflineAudioContextOptions',
+    },
+    OptionalEffectTiming: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OptionalEffectTiming',
+    },
+    OscillatorOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OscillatorOptions',
+    },
+    PageTransitionEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PageTransitionEventInit',
+    },
+    PannerOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PannerOptions',
+    },
+    PaymentCurrencyAmount: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PaymentCurrencyAmount',
+    },
+    PaymentDetailsBase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PaymentDetailsBase',
+    },
+    PaymentDetailsInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PaymentDetailsInit',
+    },
+    PaymentDetailsModifier: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PaymentDetailsModifier',
+    },
+    PaymentDetailsUpdate: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PaymentDetailsUpdate',
+    },
+    PaymentItem: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PaymentItem',
+    },
+    PaymentMethodData: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PaymentMethodData',
+    },
+    PaymentOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PaymentOptions',
+    },
+    PaymentRequestUpdateEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PaymentRequestUpdateEventInit',
+    },
+    PaymentShippingOption: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PaymentShippingOption',
+    },
+    Pbkdf2Params: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Pbkdf2Params',
+    },
+    PerformanceObserverInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PerformanceObserverInit',
+    },
+    PeriodicWaveConstraints: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PeriodicWaveConstraints',
+    },
+    PeriodicWaveOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PeriodicWaveOptions',
+    },
+    PermissionDescriptor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PermissionDescriptor',
+    },
+    PipeOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PipeOptions',
+    },
+    PointerEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PointerEventInit',
+    },
+    PopStateEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PopStateEventInit',
+    },
+    PositionOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PositionOptions',
+    },
+    PostMessageOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PostMessageOptions',
+    },
+    ProgressEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ProgressEventInit',
+    },
+    PromiseRejectionEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PromiseRejectionEventInit',
+    },
+    PropertyIndexedKeyframes: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PropertyIndexedKeyframes',
+    },
+    PublicKeyCredentialCreationOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PublicKeyCredentialCreationOptions',
+    },
+    PublicKeyCredentialDescriptor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PublicKeyCredentialDescriptor',
+    },
+    PublicKeyCredentialEntity: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PublicKeyCredentialEntity',
+    },
+    PublicKeyCredentialParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PublicKeyCredentialParameters',
+    },
+    PublicKeyCredentialRequestOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PublicKeyCredentialRequestOptions',
+    },
+    PublicKeyCredentialRpEntity: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PublicKeyCredentialRpEntity',
+    },
+    PublicKeyCredentialUserEntity: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PublicKeyCredentialUserEntity',
+    },
+    PushPermissionDescriptor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PushPermissionDescriptor',
+    },
+    PushSubscriptionJSON: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PushSubscriptionJSON',
+    },
+    PushSubscriptionOptionsInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PushSubscriptionOptionsInit',
+    },
+    QueuingStrategy: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'QueuingStrategy',
+    },
+    RTCAnswerOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCAnswerOptions',
+    },
+    RTCCertificateExpiration: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCCertificateExpiration',
+    },
+    RTCConfiguration: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCConfiguration',
+    },
+    RTCDTMFToneChangeEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCDTMFToneChangeEventInit',
+    },
+    RTCDataChannelEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCDataChannelEventInit',
+    },
+    RTCDataChannelInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCDataChannelInit',
+    },
+    RTCDtlsFingerprint: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCDtlsFingerprint',
+    },
+    RTCDtlsParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCDtlsParameters',
+    },
+    RTCErrorEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCErrorEventInit',
+    },
+    RTCErrorInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCErrorInit',
+    },
+    RTCIceCandidateAttributes: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceCandidateAttributes',
+    },
+    RTCIceCandidateComplete: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceCandidateComplete',
+    },
+    RTCIceCandidateDictionary: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceCandidateDictionary',
+    },
+    RTCIceCandidateInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceCandidateInit',
+    },
+    RTCIceCandidatePair: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceCandidatePair',
+    },
+    RTCIceCandidatePairStats: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceCandidatePairStats',
+    },
+    RTCIceGatherOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceGatherOptions',
+    },
+    RTCIceParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceParameters',
+    },
+    RTCIceServer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceServer',
+    },
+    RTCIdentityProviderOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIdentityProviderOptions',
+    },
+    RTCInboundRTPStreamStats: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCInboundRTPStreamStats',
+    },
+    RTCMediaStreamTrackStats: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCMediaStreamTrackStats',
+    },
+    RTCOAuthCredential: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCOAuthCredential',
+    },
+    RTCOfferAnswerOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCOfferAnswerOptions',
+    },
+    RTCOfferOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCOfferOptions',
+    },
+    RTCOutboundRTPStreamStats: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCOutboundRTPStreamStats',
+    },
+    RTCPeerConnectionIceErrorEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCPeerConnectionIceErrorEventInit',
+    },
+    RTCPeerConnectionIceEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCPeerConnectionIceEventInit',
+    },
+    RTCRTPStreamStats: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRTPStreamStats',
+    },
+    RTCRtcpFeedback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtcpFeedback',
+    },
+    RTCRtcpParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtcpParameters',
+    },
+    RTCRtpCapabilities: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpCapabilities',
+    },
+    RTCRtpCodecCapability: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpCodecCapability',
+    },
+    RTCRtpCodecParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpCodecParameters',
+    },
+    RTCRtpCodingParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpCodingParameters',
+    },
+    RTCRtpContributingSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpContributingSource',
+    },
+    RTCRtpDecodingParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpDecodingParameters',
+    },
+    RTCRtpEncodingParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpEncodingParameters',
+    },
+    RTCRtpFecParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpFecParameters',
+    },
+    RTCRtpHeaderExtension: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpHeaderExtension',
+    },
+    RTCRtpHeaderExtensionCapability: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpHeaderExtensionCapability',
+    },
+    RTCRtpHeaderExtensionParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpHeaderExtensionParameters',
+    },
+    RTCRtpParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpParameters',
+    },
+    RTCRtpReceiveParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpReceiveParameters',
+    },
+    RTCRtpRtxParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpRtxParameters',
+    },
+    RTCRtpSendParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpSendParameters',
+    },
+    RTCRtpSynchronizationSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpSynchronizationSource',
+    },
+    RTCRtpTransceiverInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpTransceiverInit',
+    },
+    RTCRtpUnhandled: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpUnhandled',
+    },
+    RTCSessionDescriptionInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCSessionDescriptionInit',
+    },
+    RTCSrtpKeyParam: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCSrtpKeyParam',
+    },
+    RTCSrtpSdesParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCSrtpSdesParameters',
+    },
+    RTCSsrcRange: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCSsrcRange',
+    },
+    RTCStats: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCStats',
+    },
+    RTCStatsEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCStatsEventInit',
+    },
+    RTCStatsReport: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCStatsReport',
+    },
+    RTCTrackEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCTrackEventInit',
+    },
+    RTCTransportStats: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCTransportStats',
+    },
+    ReadableStreamReadDoneResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadableStreamReadDoneResult',
+    },
+    ReadableStreamReadValueResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadableStreamReadValueResult',
+    },
+    RegistrationOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RegistrationOptions',
+    },
+    RequestInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RequestInit',
+    },
+    ResponseInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ResponseInit',
+    },
+    RsaHashedImportParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RsaHashedImportParams',
+    },
+    RsaHashedKeyAlgorithm: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RsaHashedKeyAlgorithm',
+    },
+    RsaHashedKeyGenParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RsaHashedKeyGenParams',
+    },
+    RsaKeyAlgorithm: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RsaKeyAlgorithm',
+    },
+    RsaKeyGenParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RsaKeyGenParams',
+    },
+    RsaOaepParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RsaOaepParams',
+    },
+    RsaOtherPrimesInfo: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RsaOtherPrimesInfo',
+    },
+    RsaPssParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RsaPssParams',
+    },
+    SVGBoundingBoxOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SVGBoundingBoxOptions',
+    },
+    ScopedCredentialDescriptor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ScopedCredentialDescriptor',
+    },
+    ScopedCredentialOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ScopedCredentialOptions',
+    },
+    ScopedCredentialParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ScopedCredentialParameters',
+    },
+    ScrollIntoViewOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ScrollIntoViewOptions',
+    },
+    ScrollOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ScrollOptions',
+    },
+    ScrollToOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ScrollToOptions',
+    },
+    SecurityPolicyViolationEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SecurityPolicyViolationEventInit',
+    },
+    ServiceWorkerMessageEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ServiceWorkerMessageEventInit',
+    },
+    ShadowRootInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ShadowRootInit',
+    },
+    ShareData: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ShareData',
+    },
+    SpeechSynthesisErrorEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SpeechSynthesisErrorEventInit',
+    },
+    SpeechSynthesisEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SpeechSynthesisEventInit',
+    },
+    StaticRangeInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'StaticRangeInit',
+    },
+    StereoPannerOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'StereoPannerOptions',
+    },
+    StorageEstimate: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'StorageEstimate',
+    },
+    StorageEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'StorageEventInit',
+    },
+    StoreExceptionsInformation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'StoreExceptionsInformation',
+    },
+    StoreSiteSpecificExceptionsInformation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'StoreSiteSpecificExceptionsInformation',
+    },
+    TextDecodeOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextDecodeOptions',
+    },
+    TextDecoderOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextDecoderOptions',
+    },
+    TextEncoderEncodeIntoResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextEncoderEncodeIntoResult',
+    },
+    TouchEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TouchEventInit',
+    },
+    TouchInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TouchInit',
+    },
+    TrackEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TrackEventInit',
+    },
+    Transformer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Transformer',
+    },
+    TransitionEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TransitionEventInit',
+    },
+    UIEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'UIEventInit',
+    },
+    ULongRange: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ULongRange',
+    },
+    UnderlyingByteSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'UnderlyingByteSource',
+    },
+    UnderlyingSink: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'UnderlyingSink',
+    },
+    UnderlyingSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'UnderlyingSource',
+    },
+    VRDisplayEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'VRDisplayEventInit',
+    },
+    VRLayer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'VRLayer',
+    },
+    VRStageParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'VRStageParameters',
+    },
+    WaveShaperOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WaveShaperOptions',
+    },
+    WebAuthnExtensions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebAuthnExtensions',
+    },
+    WebGLContextAttributes: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLContextAttributes',
+    },
+    WebGLContextEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLContextEventInit',
+    },
+    WheelEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WheelEventInit',
+    },
+    WorkerOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WorkerOptions',
+    },
+    WorkletOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WorkletOptions',
+    },
+    EventListener: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventListener',
+    },
+    XPathNSResolver: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'XPathNSResolver',
+    },
+    ANGLE_instanced_arrays: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ANGLE_instanced_arrays',
+    },
+    AbortController: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AbortController',
+    },
+    AbortSignalEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AbortSignalEventMap',
+    },
+    AbortSignal: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AbortSignal',
+    },
+    AbstractRange: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AbstractRange',
+    },
+    AbstractWorkerEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AbstractWorkerEventMap',
+    },
+    AbstractWorker: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AbstractWorker',
+    },
+    AesCfbParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesCfbParams',
+    },
+    AesCmacParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesCmacParams',
+    },
+    AnalyserNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AnalyserNode',
+    },
+    Animatable: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Animatable',
+    },
+    AnimationEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AnimationEventMap',
+    },
+    Animation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Animation',
+    },
+    AnimationEffect: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AnimationEffect',
+    },
+    AnimationEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AnimationEvent',
+    },
+    AnimationFrameProvider: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AnimationFrameProvider',
+    },
+    AnimationPlaybackEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AnimationPlaybackEvent',
+    },
+    AnimationTimeline: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AnimationTimeline',
+    },
+    ApplicationCacheEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ApplicationCacheEventMap',
+    },
+    ApplicationCache: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ApplicationCache',
+    },
+    Attr: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Attr',
+    },
+    AudioBuffer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AudioBuffer',
+    },
+    AudioBufferSourceNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AudioBufferSourceNode',
+    },
+    AudioContext: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AudioContext',
+    },
+    AudioDestinationNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AudioDestinationNode',
+    },
+    AudioListener: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AudioListener',
+    },
+    AudioNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AudioNode',
+    },
+    AudioParam: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AudioParam',
+    },
+    AudioParamMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AudioParamMap',
+    },
+    AudioProcessingEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AudioProcessingEvent',
+    },
+    AudioScheduledSourceNodeEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AudioScheduledSourceNodeEventMap',
+    },
+    AudioScheduledSourceNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AudioScheduledSourceNode',
+    },
+    AudioWorklet: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AudioWorklet',
+    },
+    AudioWorkletNodeEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AudioWorkletNodeEventMap',
+    },
+    AudioWorkletNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AudioWorkletNode',
+    },
+    AuthenticatorAssertionResponse: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AuthenticatorAssertionResponse',
+    },
+    AuthenticatorAttestationResponse: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AuthenticatorAttestationResponse',
+    },
+    AuthenticatorResponse: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AuthenticatorResponse',
+    },
+    BarProp: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'BarProp',
+    },
+    BaseAudioContextEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BaseAudioContextEventMap',
+    },
+    BaseAudioContext: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'BaseAudioContext',
+    },
+    BeforeUnloadEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'BeforeUnloadEvent',
+    },
+    BhxBrowser: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'BhxBrowser',
+    },
+    BiquadFilterNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'BiquadFilterNode',
+    },
+    Blob: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Blob',
+    },
+    Body: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Body',
+    },
+    BroadcastChannelEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BroadcastChannelEventMap',
+    },
+    BroadcastChannel: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'BroadcastChannel',
+    },
+    ByteLengthQueuingStrategy: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ByteLengthQueuingStrategy',
+    },
+    CDATASection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CDATASection',
+    },
+    CSSConditionRule: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSSConditionRule',
+    },
+    CSSFontFaceRule: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSSFontFaceRule',
+    },
+    CSSGroupingRule: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSSGroupingRule',
+    },
+    CSSImportRule: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSSImportRule',
+    },
+    CSSKeyframeRule: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSSKeyframeRule',
+    },
+    CSSKeyframesRule: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSSKeyframesRule',
+    },
+    CSSMediaRule: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSSMediaRule',
+    },
+    CSSNamespaceRule: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSSNamespaceRule',
+    },
+    CSSPageRule: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSSPageRule',
+    },
+    CSSRule: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSSRule',
+    },
+    CSSRuleList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSSRuleList',
+    },
+    CSSStyleDeclaration: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSSStyleDeclaration',
+    },
+    CSSStyleRule: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSSStyleRule',
+    },
+    CSSStyleSheet: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSSStyleSheet',
+    },
+    CSSSupportsRule: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSSSupportsRule',
+    },
+    Cache: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Cache',
+    },
+    CacheStorage: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CacheStorage',
+    },
+    CanvasCompositing: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasCompositing',
+    },
+    CanvasDrawImage: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasDrawImage',
+    },
+    CanvasDrawPath: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasDrawPath',
+    },
+    CanvasFillStrokeStyles: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasFillStrokeStyles',
+    },
+    CanvasFilters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasFilters',
+    },
+    CanvasGradient: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CanvasGradient',
+    },
+    CanvasImageData: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasImageData',
+    },
+    CanvasImageSmoothing: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasImageSmoothing',
+    },
+    CanvasPath: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasPath',
+    },
+    CanvasPathDrawingStyles: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasPathDrawingStyles',
+    },
+    CanvasPattern: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CanvasPattern',
+    },
+    CanvasRect: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasRect',
+    },
+    CanvasRenderingContext2D: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CanvasRenderingContext2D',
+    },
+    CanvasShadowStyles: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasShadowStyles',
+    },
+    CanvasState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasState',
+    },
+    CanvasText: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasText',
+    },
+    CanvasTextDrawingStyles: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasTextDrawingStyles',
+    },
+    CanvasTransform: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasTransform',
+    },
+    CanvasUserInterface: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasUserInterface',
+    },
+    CaretPosition: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CaretPosition',
+    },
+    ChannelMergerNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ChannelMergerNode',
+    },
+    ChannelSplitterNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ChannelSplitterNode',
+    },
+    CharacterData: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CharacterData',
+    },
+    ChildNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ChildNode',
+    },
+    ClientRect: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ClientRect',
+    },
+    ClientRectList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ClientRectList',
+    },
+    Clipboard: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Clipboard',
+    },
+    ClipboardEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ClipboardEvent',
+    },
+    CloseEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CloseEvent',
+    },
+    Comment: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Comment',
+    },
+    CompositionEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CompositionEvent',
+    },
+    ConcatParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConcatParams',
+    },
+    ConstantSourceNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ConstantSourceNode',
+    },
+    ConvolverNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ConvolverNode',
+    },
+    CountQueuingStrategy: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CountQueuingStrategy',
+    },
+    Credential: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Credential',
+    },
+    CredentialsContainer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CredentialsContainer',
+    },
+    Crypto: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Crypto',
+    },
+    CryptoKey: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CryptoKey',
+    },
+    CryptoKeyPair: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CryptoKeyPair',
+    },
+    CustomElementRegistry: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CustomElementRegistry',
+    },
+    CustomEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CustomEvent',
+    },
+    DOMError: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMError',
+    },
+    DOMException: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMException',
+    },
+    DOMImplementation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMImplementation',
+    },
+    DOML2DeprecatedColorProperty: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOML2DeprecatedColorProperty',
+    },
+    DOMMatrix: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMMatrix',
+    },
+    SVGMatrix: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGMatrix',
+    },
+    WebKitCSSMatrix: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebKitCSSMatrix',
+    },
+    DOMMatrixReadOnly: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMMatrixReadOnly',
+    },
+    DOMParser: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMParser',
+    },
+    DOMPoint: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMPoint',
+    },
+    SVGPoint: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPoint',
+    },
+    DOMPointReadOnly: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMPointReadOnly',
+    },
+    DOMQuad: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMQuad',
+    },
+    DOMRect: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMRect',
+    },
+    SVGRect: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGRect',
+    },
+    DOMRectList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMRectList',
+    },
+    DOMRectReadOnly: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMRectReadOnly',
+    },
+    DOMSettableTokenList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMSettableTokenList',
+    },
+    DOMStringList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMStringList',
+    },
+    DOMStringMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMStringMap',
+    },
+    DOMTokenList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMTokenList',
+    },
+    DataCue: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DataCue',
+    },
+    DataTransfer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DataTransfer',
+    },
+    DataTransferItem: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DataTransferItem',
+    },
+    DataTransferItemList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DataTransferItemList',
+    },
+    DeferredPermissionRequest: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DeferredPermissionRequest',
+    },
+    DelayNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DelayNode',
+    },
+    DeviceAcceleration: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DeviceAcceleration',
+    },
+    DeviceLightEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DeviceLightEvent',
+    },
+    DeviceMotionEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DeviceMotionEvent',
+    },
+    DeviceMotionEventAcceleration: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DeviceMotionEventAcceleration',
+    },
+    DeviceMotionEventRotationRate: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DeviceMotionEventRotationRate',
+    },
+    DeviceOrientationEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DeviceOrientationEvent',
+    },
+    DeviceRotationRate: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DeviceRotationRate',
+    },
+    DhImportKeyParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DhImportKeyParams',
+    },
+    DhKeyAlgorithm: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DhKeyAlgorithm',
+    },
+    DhKeyDeriveParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DhKeyDeriveParams',
+    },
+    DhKeyGenParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DhKeyGenParams',
+    },
+    DocumentEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DocumentEventMap',
+    },
+    Document: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Document',
+    },
+    DocumentAndElementEventHandlersEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DocumentAndElementEventHandlersEventMap',
+    },
+    DocumentAndElementEventHandlers: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DocumentAndElementEventHandlers',
+    },
+    DocumentEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DocumentEvent',
+    },
+    DocumentFragment: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DocumentFragment',
+    },
+    DocumentOrShadowRoot: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DocumentOrShadowRoot',
+    },
+    DocumentTimeline: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DocumentTimeline',
+    },
+    DocumentType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DocumentType',
+    },
+    DragEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DragEvent',
+    },
+    DynamicsCompressorNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DynamicsCompressorNode',
+    },
+    EXT_blend_minmax: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EXT_blend_minmax',
+    },
+    EXT_frag_depth: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EXT_frag_depth',
+    },
+    EXT_sRGB: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EXT_sRGB',
+    },
+    EXT_shader_texture_lod: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EXT_shader_texture_lod',
+    },
+    EXT_texture_filter_anisotropic: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EXT_texture_filter_anisotropic',
+    },
+    ElementEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ElementEventMap',
+    },
+    Element: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Element',
+    },
+    ElementCSSInlineStyle: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ElementCSSInlineStyle',
+    },
+    ElementContentEditable: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ElementContentEditable',
+    },
+    ErrorEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ErrorEvent',
+    },
+    Event: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Event',
+    },
+    EventListenerObject: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventListenerObject',
+    },
+    EventSourceEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventSourceEventMap',
+    },
+    EventSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'EventSource',
+    },
+    EventTarget: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'EventTarget',
+    },
+    ExtensionScriptApis: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ExtensionScriptApis',
+    },
+    External: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'External',
+    },
+    File: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'File',
+    },
+    FileList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'FileList',
+    },
+    FileReaderEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FileReaderEventMap',
+    },
+    FileReader: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'FileReader',
+    },
+    FocusEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'FocusEvent',
+    },
+    FocusNavigationEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'FocusNavigationEvent',
+    },
+    FormData: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'FormData',
+    },
+    GainNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'GainNode',
+    },
+    Gamepad: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Gamepad',
+    },
+    GamepadButton: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'GamepadButton',
+    },
+    GamepadEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'GamepadEvent',
+    },
+    GamepadHapticActuator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'GamepadHapticActuator',
+    },
+    GamepadPose: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'GamepadPose',
+    },
+    GenericTransformStream: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GenericTransformStream',
+    },
+    Geolocation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Geolocation',
+    },
+    GeolocationCoordinates: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'GeolocationCoordinates',
+    },
+    GeolocationPosition: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'GeolocationPosition',
+    },
+    GeolocationPositionError: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'GeolocationPositionError',
+    },
+    GlobalEventHandlersEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GlobalEventHandlersEventMap',
+    },
+    GlobalEventHandlers: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GlobalEventHandlers',
+    },
+    HTMLAllCollection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLAllCollection',
+    },
+    HTMLAnchorElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLAnchorElement',
+    },
+    HTMLAppletElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLAppletElement',
+    },
+    HTMLAreaElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLAreaElement',
+    },
+    HTMLAudioElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLAudioElement',
+    },
+    HTMLBRElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLBRElement',
+    },
+    HTMLBaseElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLBaseElement',
+    },
+    HTMLBaseFontElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLBaseFontElement',
+    },
+    HTMLBodyElementEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLBodyElementEventMap',
+    },
+    HTMLBodyElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLBodyElement',
+    },
+    HTMLButtonElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLButtonElement',
+    },
+    HTMLCanvasElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLCanvasElement',
+    },
+    HTMLCollectionBase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLCollectionBase',
+    },
+    HTMLCollection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLCollection',
+    },
+    HTMLCollectionOf: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLCollectionOf',
+    },
+    HTMLDListElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLDListElement',
+    },
+    HTMLDataElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLDataElement',
+    },
+    HTMLDataListElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLDataListElement',
+    },
+    HTMLDetailsElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLDetailsElement',
+    },
+    HTMLDialogElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLDialogElement',
+    },
+    HTMLDirectoryElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLDirectoryElement',
+    },
+    HTMLDivElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLDivElement',
+    },
+    HTMLDocument: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLDocument',
+    },
+    HTMLElementEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLElementEventMap',
+    },
+    HTMLElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLElement',
+    },
+    HTMLEmbedElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLEmbedElement',
+    },
+    HTMLFieldSetElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLFieldSetElement',
+    },
+    HTMLFontElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLFontElement',
+    },
+    HTMLFormControlsCollection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLFormControlsCollection',
+    },
+    HTMLFormElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLFormElement',
+    },
+    HTMLFrameElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLFrameElement',
+    },
+    HTMLFrameSetElementEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLFrameSetElementEventMap',
+    },
+    HTMLFrameSetElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLFrameSetElement',
+    },
+    HTMLHRElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLHRElement',
+    },
+    HTMLHeadElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLHeadElement',
+    },
+    HTMLHeadingElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLHeadingElement',
+    },
+    HTMLHtmlElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLHtmlElement',
+    },
+    HTMLHyperlinkElementUtils: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLHyperlinkElementUtils',
+    },
+    HTMLIFrameElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLIFrameElement',
+    },
+    HTMLImageElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLImageElement',
+    },
+    HTMLInputElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLInputElement',
+    },
+    HTMLLIElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLLIElement',
+    },
+    HTMLLabelElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLLabelElement',
+    },
+    HTMLLegendElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLLegendElement',
+    },
+    HTMLLinkElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLLinkElement',
+    },
+    HTMLMapElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLMapElement',
+    },
+    HTMLMarqueeElementEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLMarqueeElementEventMap',
+    },
+    HTMLMarqueeElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLMarqueeElement',
+    },
+    HTMLMediaElementEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLMediaElementEventMap',
+    },
+    HTMLMediaElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLMediaElement',
+    },
+    HTMLMenuElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLMenuElement',
+    },
+    HTMLMetaElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLMetaElement',
+    },
+    HTMLMeterElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLMeterElement',
+    },
+    HTMLModElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLModElement',
+    },
+    HTMLOListElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLOListElement',
+    },
+    HTMLObjectElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLObjectElement',
+    },
+    HTMLOptGroupElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLOptGroupElement',
+    },
+    HTMLOptionElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLOptionElement',
+    },
+    HTMLOptionsCollection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLOptionsCollection',
+    },
+    HTMLOrSVGElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLOrSVGElement',
+    },
+    HTMLOutputElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLOutputElement',
+    },
+    HTMLParagraphElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLParagraphElement',
+    },
+    HTMLParamElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLParamElement',
+    },
+    HTMLPictureElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLPictureElement',
+    },
+    HTMLPreElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLPreElement',
+    },
+    HTMLProgressElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLProgressElement',
+    },
+    HTMLQuoteElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLQuoteElement',
+    },
+    HTMLScriptElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLScriptElement',
+    },
+    HTMLSelectElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLSelectElement',
+    },
+    HTMLSlotElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLSlotElement',
+    },
+    HTMLSourceElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLSourceElement',
+    },
+    HTMLSpanElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLSpanElement',
+    },
+    HTMLStyleElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLStyleElement',
+    },
+    HTMLTableCaptionElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLTableCaptionElement',
+    },
+    HTMLTableCellElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLTableCellElement',
+    },
+    HTMLTableColElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLTableColElement',
+    },
+    HTMLTableDataCellElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLTableDataCellElement',
+    },
+    HTMLTableElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLTableElement',
+    },
+    HTMLTableHeaderCellElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLTableHeaderCellElement',
+    },
+    HTMLTableRowElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLTableRowElement',
+    },
+    HTMLTableSectionElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLTableSectionElement',
+    },
+    HTMLTemplateElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLTemplateElement',
+    },
+    HTMLTextAreaElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLTextAreaElement',
+    },
+    HTMLTimeElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLTimeElement',
+    },
+    HTMLTitleElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLTitleElement',
+    },
+    HTMLTrackElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLTrackElement',
+    },
+    HTMLUListElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLUListElement',
+    },
+    HTMLUnknownElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLUnknownElement',
+    },
+    HTMLVideoElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HTMLVideoElement',
+    },
+    HashChangeEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'HashChangeEvent',
+    },
+    Headers: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Headers',
+    },
+    History: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'History',
+    },
+    IDBArrayKey: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBArrayKey',
+    },
+    IDBCursor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBCursor',
+    },
+    IDBCursorWithValue: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBCursorWithValue',
+    },
+    IDBDatabaseEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBDatabaseEventMap',
+    },
+    IDBDatabase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBDatabase',
+    },
+    IDBFactory: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBFactory',
+    },
+    IDBIndex: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBIndex',
+    },
+    IDBKeyRange: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBKeyRange',
+    },
+    IDBObjectStore: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBObjectStore',
+    },
+    IDBOpenDBRequestEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBOpenDBRequestEventMap',
+    },
+    IDBOpenDBRequest: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBOpenDBRequest',
+    },
+    IDBRequestEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBRequestEventMap',
+    },
+    IDBRequest: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBRequest',
+    },
+    IDBTransactionEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBTransactionEventMap',
+    },
+    IDBTransaction: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBTransaction',
+    },
+    IDBVersionChangeEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBVersionChangeEvent',
+    },
+    IIRFilterNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IIRFilterNode',
+    },
+    ImageBitmap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ImageBitmap',
+    },
+    ImageBitmapRenderingContext: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ImageBitmapRenderingContext',
+    },
+    ImageData: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ImageData',
+    },
+    InnerHTML: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'InnerHTML',
+    },
+    InputDeviceInfo: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'InputDeviceInfo',
+    },
+    InputEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'InputEvent',
+    },
+    IntersectionObserver: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IntersectionObserver',
+    },
+    IntersectionObserverEntry: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IntersectionObserverEntry',
+    },
+    KeyboardEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'KeyboardEvent',
+    },
+    KeyframeEffect: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'KeyframeEffect',
+    },
+    LinkStyle: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'LinkStyle',
+    },
+    ListeningStateChangedEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ListeningStateChangedEvent',
+    },
+    Location: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Location',
+    },
+    MSAssertion: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSAssertion',
+    },
+    MSBlobBuilder: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSBlobBuilder',
+    },
+    MSFIDOCredentialAssertion: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSFIDOCredentialAssertion',
+    },
+    MSFIDOSignature: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSFIDOSignature',
+    },
+    MSFIDOSignatureAssertion: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSFIDOSignatureAssertion',
+    },
+    MSFileSaver: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MSFileSaver',
+    },
+    MSGesture: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSGesture',
+    },
+    MSGestureEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSGestureEvent',
+    },
+    MSGraphicsTrust: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSGraphicsTrust',
+    },
+    MSInputMethodContextEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MSInputMethodContextEventMap',
+    },
+    MSInputMethodContext: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSInputMethodContext',
+    },
+    MSMediaKeyError: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSMediaKeyError',
+    },
+    MSMediaKeyMessageEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSMediaKeyMessageEvent',
+    },
+    MSMediaKeyNeededEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSMediaKeyNeededEvent',
+    },
+    MSMediaKeySession: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSMediaKeySession',
+    },
+    MSMediaKeys: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSMediaKeys',
+    },
+    MSNavigatorDoNotTrack: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MSNavigatorDoNotTrack',
+    },
+    MSPointerEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSPointerEvent',
+    },
+    MSStream: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MSStream',
+    },
+    MediaDeviceInfo: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaDeviceInfo',
+    },
+    MediaDevicesEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaDevicesEventMap',
+    },
+    MediaDevices: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaDevices',
+    },
+    MediaElementAudioSourceNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaElementAudioSourceNode',
+    },
+    MediaEncryptedEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaEncryptedEvent',
+    },
+    MediaError: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaError',
+    },
+    MediaKeyMessageEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaKeyMessageEvent',
+    },
+    MediaKeySessionEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaKeySessionEventMap',
+    },
+    MediaKeySession: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaKeySession',
+    },
+    MediaKeyStatusMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaKeyStatusMap',
+    },
+    MediaKeySystemAccess: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaKeySystemAccess',
+    },
+    MediaKeys: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaKeys',
+    },
+    MediaList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaList',
+    },
+    MediaQueryListEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaQueryListEventMap',
+    },
+    MediaQueryList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaQueryList',
+    },
+    MediaQueryListEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaQueryListEvent',
+    },
+    MediaSourceEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaSourceEventMap',
+    },
+    MediaSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaSource',
+    },
+    MediaStreamEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaStreamEventMap',
+    },
+    MediaStream: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaStream',
+    },
+    MediaStreamAudioDestinationNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaStreamAudioDestinationNode',
+    },
+    MediaStreamAudioSourceNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaStreamAudioSourceNode',
+    },
+    MediaStreamError: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaStreamError',
+    },
+    MediaStreamErrorEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaStreamErrorEvent',
+    },
+    MediaStreamEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaStreamEvent',
+    },
+    MediaStreamTrackEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaStreamTrackEventMap',
+    },
+    MediaStreamTrack: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaStreamTrack',
+    },
+    MediaStreamTrackAudioSourceNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaStreamTrackAudioSourceNode',
+    },
+    MediaStreamTrackEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MediaStreamTrackEvent',
+    },
+    MessageChannel: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MessageChannel',
+    },
+    MessageEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MessageEvent',
+    },
+    MessagePortEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MessagePortEventMap',
+    },
+    MessagePort: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MessagePort',
+    },
+    MimeType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MimeType',
+    },
+    MimeTypeArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MimeTypeArray',
+    },
+    MouseEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MouseEvent',
+    },
+    MutationEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MutationEvent',
+    },
+    MutationObserver: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MutationObserver',
+    },
+    MutationRecord: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MutationRecord',
+    },
+    NamedNodeMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'NamedNodeMap',
+    },
+    NavigationPreloadManager: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'NavigationPreloadManager',
+    },
+    Navigator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Navigator',
+    },
+    NavigatorAutomationInformation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorAutomationInformation',
+    },
+    NavigatorBeacon: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorBeacon',
+    },
+    NavigatorConcurrentHardware: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorConcurrentHardware',
+    },
+    NavigatorContentUtils: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorContentUtils',
+    },
+    NavigatorCookies: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorCookies',
+    },
+    NavigatorID: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorID',
+    },
+    NavigatorLanguage: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorLanguage',
+    },
+    NavigatorOnLine: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorOnLine',
+    },
+    NavigatorPlugins: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorPlugins',
+    },
+    NavigatorStorage: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorStorage',
+    },
+    Node: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Node',
+    },
+    NodeFilter: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'NodeFilter',
+    },
+    NodeIterator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'NodeIterator',
+    },
+    NodeList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'NodeList',
+    },
+    NodeListOf: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NodeListOf',
+    },
+    NonDocumentTypeChildNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NonDocumentTypeChildNode',
+    },
+    NonElementParentNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NonElementParentNode',
+    },
+    NotificationEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NotificationEventMap',
+    },
+    Notification: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Notification',
+    },
+    OES_element_index_uint: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OES_element_index_uint',
+    },
+    OES_standard_derivatives: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OES_standard_derivatives',
+    },
+    OES_texture_float: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OES_texture_float',
+    },
+    OES_texture_float_linear: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OES_texture_float_linear',
+    },
+    OES_texture_half_float: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OES_texture_half_float',
+    },
+    OES_texture_half_float_linear: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OES_texture_half_float_linear',
+    },
+    OES_vertex_array_object: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OES_vertex_array_object',
+    },
+    OfflineAudioCompletionEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'OfflineAudioCompletionEvent',
+    },
+    OfflineAudioContextEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OfflineAudioContextEventMap',
+    },
+    OfflineAudioContext: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'OfflineAudioContext',
+    },
+    OffscreenCanvas: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'OffscreenCanvas',
+    },
+    OffscreenCanvasRenderingContext2D: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'OffscreenCanvasRenderingContext2D',
+    },
+    OscillatorNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'OscillatorNode',
+    },
+    OverconstrainedError: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'OverconstrainedError',
+    },
+    OverflowEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'OverflowEvent',
+    },
+    PageTransitionEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PageTransitionEvent',
+    },
+    PannerNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PannerNode',
+    },
+    ParentNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ParentNode',
+    },
+    Path2D: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Path2D',
+    },
+    PaymentAddress: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PaymentAddress',
+    },
+    PaymentRequestEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PaymentRequestEventMap',
+    },
+    PaymentRequest: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PaymentRequest',
+    },
+    PaymentRequestUpdateEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PaymentRequestUpdateEvent',
+    },
+    PaymentResponse: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PaymentResponse',
+    },
+    PerfWidgetExternal: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerfWidgetExternal',
+    },
+    PerformanceEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PerformanceEventMap',
+    },
+    Performance: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Performance',
+    },
+    PerformanceEntry: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerformanceEntry',
+    },
+    PerformanceMark: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerformanceMark',
+    },
+    PerformanceMeasure: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerformanceMeasure',
+    },
+    PerformanceNavigation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerformanceNavigation',
+    },
+    PerformanceNavigationTiming: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerformanceNavigationTiming',
+    },
+    PerformanceObserver: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerformanceObserver',
+    },
+    PerformanceObserverEntryList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerformanceObserverEntryList',
+    },
+    PerformanceResourceTiming: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerformanceResourceTiming',
+    },
+    PerformanceTiming: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerformanceTiming',
+    },
+    PeriodicWave: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PeriodicWave',
+    },
+    PermissionRequest: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PermissionRequest',
+    },
+    PermissionRequestedEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PermissionRequestedEvent',
+    },
+    PermissionStatusEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PermissionStatusEventMap',
+    },
+    PermissionStatus: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PermissionStatus',
+    },
+    Permissions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Permissions',
+    },
+    Plugin: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Plugin',
+    },
+    PluginArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PluginArray',
+    },
+    PointerEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PointerEvent',
+    },
+    PopStateEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PopStateEvent',
+    },
+    ProcessingInstruction: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ProcessingInstruction',
+    },
+    ProgressEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ProgressEvent',
+    },
+    PromiseRejectionEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PromiseRejectionEvent',
+    },
+    PublicKeyCredential: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PublicKeyCredential',
+    },
+    PushManager: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PushManager',
+    },
+    PushSubscription: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PushSubscription',
+    },
+    PushSubscriptionOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PushSubscriptionOptions',
+    },
+    RTCCertificate: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCCertificate',
+    },
+    RTCDTMFSenderEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCDTMFSenderEventMap',
+    },
+    RTCDTMFSender: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCDTMFSender',
+    },
+    RTCDTMFToneChangeEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCDTMFToneChangeEvent',
+    },
+    RTCDataChannelEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCDataChannelEventMap',
+    },
+    RTCDataChannel: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCDataChannel',
+    },
+    RTCDataChannelEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCDataChannelEvent',
+    },
+    RTCDtlsTransportEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCDtlsTransportEventMap',
+    },
+    RTCDtlsTransport: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCDtlsTransport',
+    },
+    RTCDtlsTransportStateChangedEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCDtlsTransportStateChangedEvent',
+    },
+    RTCDtmfSenderEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCDtmfSenderEventMap',
+    },
+    RTCDtmfSender: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCDtmfSender',
+    },
+    RTCError: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCError',
+    },
+    RTCErrorEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCErrorEvent',
+    },
+    RTCIceCandidate: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCIceCandidate',
+    },
+    RTCIceCandidatePairChangedEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCIceCandidatePairChangedEvent',
+    },
+    RTCIceGathererEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceGathererEventMap',
+    },
+    RTCIceGatherer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCIceGatherer',
+    },
+    RTCIceGathererEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCIceGathererEvent',
+    },
+    RTCIceTransportEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceTransportEventMap',
+    },
+    RTCIceTransport: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCIceTransport',
+    },
+    RTCIceTransportStateChangedEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCIceTransportStateChangedEvent',
+    },
+    RTCIdentityAssertion: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCIdentityAssertion',
+    },
+    RTCPeerConnectionEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCPeerConnectionEventMap',
+    },
+    RTCPeerConnection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCPeerConnection',
+    },
+    RTCPeerConnectionIceErrorEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCPeerConnectionIceErrorEvent',
+    },
+    RTCPeerConnectionIceEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCPeerConnectionIceEvent',
+    },
+    RTCRtpReceiver: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCRtpReceiver',
+    },
+    RTCRtpSender: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCRtpSender',
+    },
+    RTCRtpTransceiver: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCRtpTransceiver',
+    },
+    RTCSctpTransportEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCSctpTransportEventMap',
+    },
+    RTCSctpTransport: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCSctpTransport',
+    },
+    RTCSessionDescription: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCSessionDescription',
+    },
+    RTCSrtpSdesTransportEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCSrtpSdesTransportEventMap',
+    },
+    RTCSrtpSdesTransport: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCSrtpSdesTransport',
+    },
+    RTCSsrcConflictEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCSsrcConflictEvent',
+    },
+    RTCStatsEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCStatsEvent',
+    },
+    RTCStatsProvider: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCStatsProvider',
+    },
+    RTCTrackEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RTCTrackEvent',
+    },
+    RadioNodeList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RadioNodeList',
+    },
+    RandomSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RandomSource',
+    },
+    Range: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Range',
+    },
+    ReadableByteStreamController: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ReadableByteStreamController',
+    },
+    ReadableStream: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ReadableStream',
+    },
+    ReadableStreamBYOBReader: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ReadableStreamBYOBReader',
+    },
+    ReadableStreamBYOBRequest: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ReadableStreamBYOBRequest',
+    },
+    ReadableStreamDefaultController: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ReadableStreamDefaultController',
+    },
+    ReadableStreamDefaultReader: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ReadableStreamDefaultReader',
+    },
+    ReadableStreamReader: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ReadableStreamReader',
+    },
+    Request: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Request',
+    },
+    Response: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Response',
+    },
+    SVGAElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAElement',
+    },
+    SVGAngle: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAngle',
+    },
+    SVGAnimateElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimateElement',
+    },
+    SVGAnimateMotionElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimateMotionElement',
+    },
+    SVGAnimateTransformElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimateTransformElement',
+    },
+    SVGAnimatedAngle: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimatedAngle',
+    },
+    SVGAnimatedBoolean: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimatedBoolean',
+    },
+    SVGAnimatedEnumeration: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimatedEnumeration',
+    },
+    SVGAnimatedInteger: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimatedInteger',
+    },
+    SVGAnimatedLength: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimatedLength',
+    },
+    SVGAnimatedLengthList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimatedLengthList',
+    },
+    SVGAnimatedNumber: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimatedNumber',
+    },
+    SVGAnimatedNumberList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimatedNumberList',
+    },
+    SVGAnimatedPoints: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SVGAnimatedPoints',
+    },
+    SVGAnimatedPreserveAspectRatio: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimatedPreserveAspectRatio',
+    },
+    SVGAnimatedRect: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimatedRect',
+    },
+    SVGAnimatedString: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimatedString',
+    },
+    SVGAnimatedTransformList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimatedTransformList',
+    },
+    SVGAnimationElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGAnimationElement',
+    },
+    SVGCircleElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGCircleElement',
+    },
+    SVGClipPathElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGClipPathElement',
+    },
+    SVGComponentTransferFunctionElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGComponentTransferFunctionElement',
+    },
+    SVGCursorElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGCursorElement',
+    },
+    SVGDefsElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGDefsElement',
+    },
+    SVGDescElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGDescElement',
+    },
+    SVGElementEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SVGElementEventMap',
+    },
+    SVGElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGElement',
+    },
+    SVGElementInstance: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGElementInstance',
+    },
+    SVGElementInstanceList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGElementInstanceList',
+    },
+    SVGEllipseElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGEllipseElement',
+    },
+    SVGFEBlendElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEBlendElement',
+    },
+    SVGFEColorMatrixElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEColorMatrixElement',
+    },
+    SVGFEComponentTransferElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEComponentTransferElement',
+    },
+    SVGFECompositeElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFECompositeElement',
+    },
+    SVGFEConvolveMatrixElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEConvolveMatrixElement',
+    },
+    SVGFEDiffuseLightingElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEDiffuseLightingElement',
+    },
+    SVGFEDisplacementMapElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEDisplacementMapElement',
+    },
+    SVGFEDistantLightElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEDistantLightElement',
+    },
+    SVGFEDropShadowElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEDropShadowElement',
+    },
+    SVGFEFloodElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEFloodElement',
+    },
+    SVGFEFuncAElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEFuncAElement',
+    },
+    SVGFEFuncBElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEFuncBElement',
+    },
+    SVGFEFuncGElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEFuncGElement',
+    },
+    SVGFEFuncRElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEFuncRElement',
+    },
+    SVGFEGaussianBlurElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEGaussianBlurElement',
+    },
+    SVGFEImageElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEImageElement',
+    },
+    SVGFEMergeElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEMergeElement',
+    },
+    SVGFEMergeNodeElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEMergeNodeElement',
+    },
+    SVGFEMorphologyElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEMorphologyElement',
+    },
+    SVGFEOffsetElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEOffsetElement',
+    },
+    SVGFEPointLightElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFEPointLightElement',
+    },
+    SVGFESpecularLightingElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFESpecularLightingElement',
+    },
+    SVGFESpotLightElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFESpotLightElement',
+    },
+    SVGFETileElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFETileElement',
+    },
+    SVGFETurbulenceElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFETurbulenceElement',
+    },
+    SVGFilterElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGFilterElement',
+    },
+    SVGFilterPrimitiveStandardAttributes: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SVGFilterPrimitiveStandardAttributes',
+    },
+    SVGFitToViewBox: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SVGFitToViewBox',
+    },
+    SVGForeignObjectElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGForeignObjectElement',
+    },
+    SVGGElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGGElement',
+    },
+    SVGGeometryElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGGeometryElement',
+    },
+    SVGGradientElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGGradientElement',
+    },
+    SVGGraphicsElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGGraphicsElement',
+    },
+    SVGImageElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGImageElement',
+    },
+    SVGLength: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGLength',
+    },
+    SVGLengthList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGLengthList',
+    },
+    SVGLineElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGLineElement',
+    },
+    SVGLinearGradientElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGLinearGradientElement',
+    },
+    SVGMarkerElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGMarkerElement',
+    },
+    SVGMaskElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGMaskElement',
+    },
+    SVGMetadataElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGMetadataElement',
+    },
+    SVGNumber: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGNumber',
+    },
+    SVGNumberList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGNumberList',
+    },
+    SVGPathElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathElement',
+    },
+    SVGPathSeg: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSeg',
+    },
+    SVGPathSegArcAbs: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegArcAbs',
+    },
+    SVGPathSegArcRel: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegArcRel',
+    },
+    SVGPathSegClosePath: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegClosePath',
+    },
+    SVGPathSegCurvetoCubicAbs: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegCurvetoCubicAbs',
+    },
+    SVGPathSegCurvetoCubicRel: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegCurvetoCubicRel',
+    },
+    SVGPathSegCurvetoCubicSmoothAbs: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegCurvetoCubicSmoothAbs',
+    },
+    SVGPathSegCurvetoCubicSmoothRel: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegCurvetoCubicSmoothRel',
+    },
+    SVGPathSegCurvetoQuadraticAbs: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegCurvetoQuadraticAbs',
+    },
+    SVGPathSegCurvetoQuadraticRel: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegCurvetoQuadraticRel',
+    },
+    SVGPathSegCurvetoQuadraticSmoothAbs: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegCurvetoQuadraticSmoothAbs',
+    },
+    SVGPathSegCurvetoQuadraticSmoothRel: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegCurvetoQuadraticSmoothRel',
+    },
+    SVGPathSegLinetoAbs: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegLinetoAbs',
+    },
+    SVGPathSegLinetoHorizontalAbs: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegLinetoHorizontalAbs',
+    },
+    SVGPathSegLinetoHorizontalRel: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegLinetoHorizontalRel',
+    },
+    SVGPathSegLinetoRel: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegLinetoRel',
+    },
+    SVGPathSegLinetoVerticalAbs: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegLinetoVerticalAbs',
+    },
+    SVGPathSegLinetoVerticalRel: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegLinetoVerticalRel',
+    },
+    SVGPathSegList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegList',
+    },
+    SVGPathSegMovetoAbs: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegMovetoAbs',
+    },
+    SVGPathSegMovetoRel: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPathSegMovetoRel',
+    },
+    SVGPatternElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPatternElement',
+    },
+    SVGPointList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPointList',
+    },
+    SVGPolygonElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPolygonElement',
+    },
+    SVGPolylineElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPolylineElement',
+    },
+    SVGPreserveAspectRatio: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGPreserveAspectRatio',
+    },
+    SVGRadialGradientElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGRadialGradientElement',
+    },
+    SVGRectElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGRectElement',
+    },
+    SVGSVGElementEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SVGSVGElementEventMap',
+    },
+    SVGSVGElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGSVGElement',
+    },
+    SVGScriptElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGScriptElement',
+    },
+    SVGStopElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGStopElement',
+    },
+    SVGStringList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGStringList',
+    },
+    SVGStyleElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGStyleElement',
+    },
+    SVGSwitchElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGSwitchElement',
+    },
+    SVGSymbolElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGSymbolElement',
+    },
+    SVGTSpanElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGTSpanElement',
+    },
+    SVGTests: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SVGTests',
+    },
+    SVGTextContentElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGTextContentElement',
+    },
+    SVGTextElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGTextElement',
+    },
+    SVGTextPathElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGTextPathElement',
+    },
+    SVGTextPositioningElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGTextPositioningElement',
+    },
+    SVGTitleElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGTitleElement',
+    },
+    SVGTransform: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGTransform',
+    },
+    SVGTransformList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGTransformList',
+    },
+    SVGURIReference: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SVGURIReference',
+    },
+    SVGUnitTypes: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGUnitTypes',
+    },
+    SVGUseElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGUseElement',
+    },
+    SVGViewElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGViewElement',
+    },
+    SVGZoomAndPan: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGZoomAndPan',
+    },
+    SVGZoomEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SVGZoomEvent',
+    },
+    ScopedCredential: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ScopedCredential',
+    },
+    ScopedCredentialInfo: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ScopedCredentialInfo',
+    },
+    Screen: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Screen',
+    },
+    ScreenOrientationEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ScreenOrientationEventMap',
+    },
+    ScreenOrientation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ScreenOrientation',
+    },
+    ScriptProcessorNodeEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ScriptProcessorNodeEventMap',
+    },
+    ScriptProcessorNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ScriptProcessorNode',
+    },
+    SecurityPolicyViolationEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SecurityPolicyViolationEvent',
+    },
+    Selection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Selection',
+    },
+    ServiceUIFrameContext: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ServiceUIFrameContext',
+    },
+    ServiceWorkerEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ServiceWorkerEventMap',
+    },
+    ServiceWorker: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ServiceWorker',
+    },
+    ServiceWorkerContainerEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ServiceWorkerContainerEventMap',
+    },
+    ServiceWorkerContainer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ServiceWorkerContainer',
+    },
+    ServiceWorkerMessageEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ServiceWorkerMessageEvent',
+    },
+    ServiceWorkerRegistrationEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ServiceWorkerRegistrationEventMap',
+    },
+    ServiceWorkerRegistration: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ServiceWorkerRegistration',
+    },
+    ShadowRoot: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ShadowRoot',
+    },
+    SharedWorker: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SharedWorker',
+    },
+    Slottable: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Slottable',
+    },
+    SourceBufferEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SourceBufferEventMap',
+    },
+    SourceBuffer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SourceBuffer',
+    },
+    SourceBufferListEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SourceBufferListEventMap',
+    },
+    SourceBufferList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SourceBufferList',
+    },
+    SpeechGrammar: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SpeechGrammar',
+    },
+    SpeechGrammarList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SpeechGrammarList',
+    },
+    SpeechRecognitionEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SpeechRecognitionEventMap',
+    },
+    SpeechRecognition: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SpeechRecognition',
+    },
+    SpeechRecognitionAlternative: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SpeechRecognitionAlternative',
+    },
+    SpeechRecognitionEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SpeechRecognitionEvent',
+    },
+    SpeechRecognitionResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SpeechRecognitionResult',
+    },
+    SpeechRecognitionResultList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SpeechRecognitionResultList',
+    },
+    SpeechSynthesisEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SpeechSynthesisEventMap',
+    },
+    SpeechSynthesis: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SpeechSynthesis',
+    },
+    SpeechSynthesisErrorEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SpeechSynthesisErrorEvent',
+    },
+    SpeechSynthesisEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SpeechSynthesisEvent',
+    },
+    SpeechSynthesisUtteranceEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SpeechSynthesisUtteranceEventMap',
+    },
+    SpeechSynthesisUtterance: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SpeechSynthesisUtterance',
+    },
+    SpeechSynthesisVoice: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SpeechSynthesisVoice',
+    },
+    StaticRange: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'StaticRange',
+    },
+    StereoPannerNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'StereoPannerNode',
+    },
+    Storage: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Storage',
+    },
+    StorageEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'StorageEvent',
+    },
+    StorageManager: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'StorageManager',
+    },
+    StyleMedia: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'StyleMedia',
+    },
+    StyleSheet: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'StyleSheet',
+    },
+    StyleSheetList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'StyleSheetList',
+    },
+    SubtleCrypto: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SubtleCrypto',
+    },
+    SyncManager: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SyncManager',
+    },
+    Text: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Text',
+    },
+    TextDecoder: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TextDecoder',
+    },
+    TextDecoderCommon: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextDecoderCommon',
+    },
+    TextDecoderStream: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TextDecoderStream',
+    },
+    TextEncoder: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TextEncoder',
+    },
+    TextEncoderCommon: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextEncoderCommon',
+    },
+    TextEncoderStream: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TextEncoderStream',
+    },
+    TextEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TextEvent',
+    },
+    TextMetrics: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TextMetrics',
+    },
+    TextTrackEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextTrackEventMap',
+    },
+    TextTrack: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TextTrack',
+    },
+    TextTrackCueEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextTrackCueEventMap',
+    },
+    TextTrackCue: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TextTrackCue',
+    },
+    TextTrackCueList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TextTrackCueList',
+    },
+    TextTrackListEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextTrackListEventMap',
+    },
+    TextTrackList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TextTrackList',
+    },
+    TimeRanges: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TimeRanges',
+    },
+    Touch: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Touch',
+    },
+    TouchEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TouchEvent',
+    },
+    TouchList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TouchList',
+    },
+    TrackEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TrackEvent',
+    },
+    TransformStream: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TransformStream',
+    },
+    TransformStreamDefaultController: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TransformStreamDefaultController',
+    },
+    TransitionEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TransitionEvent',
+    },
+    TreeWalker: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TreeWalker',
+    },
+    UIEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'UIEvent',
+    },
+    URL: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'URL',
+    },
+    webkitURL: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'webkitURL',
+    },
+    URLSearchParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'URLSearchParams',
+    },
+    VRDisplay: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'VRDisplay',
+    },
+    VRDisplayCapabilities: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'VRDisplayCapabilities',
+    },
+    VRDisplayEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'VRDisplayEvent',
+    },
+    VREyeParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'VREyeParameters',
+    },
+    VRFieldOfView: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'VRFieldOfView',
+    },
+    VRFrameData: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'VRFrameData',
+    },
+    VRPose: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'VRPose',
+    },
+    VTTCue: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'VTTCue',
+    },
+    VTTRegion: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'VTTRegion',
+    },
+    ValidityState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ValidityState',
+    },
+    VideoPlaybackQuality: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'VideoPlaybackQuality',
+    },
+    VisualViewportEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'VisualViewportEventMap',
+    },
+    VisualViewport: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'VisualViewport',
+    },
+    WEBGL_color_buffer_float: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_color_buffer_float',
+    },
+    WEBGL_compressed_texture_astc: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_compressed_texture_astc',
+    },
+    WEBGL_compressed_texture_s3tc: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_compressed_texture_s3tc',
+    },
+    WEBGL_compressed_texture_s3tc_srgb: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_compressed_texture_s3tc_srgb',
+    },
+    WEBGL_debug_renderer_info: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_debug_renderer_info',
+    },
+    WEBGL_debug_shaders: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_debug_shaders',
+    },
+    WEBGL_depth_texture: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_depth_texture',
+    },
+    WEBGL_draw_buffers: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_draw_buffers',
+    },
+    WEBGL_lose_context: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_lose_context',
+    },
+    WaveShaperNode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WaveShaperNode',
+    },
+    WebAuthentication: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebAuthentication',
+    },
+    WebAuthnAssertion: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebAuthnAssertion',
+    },
+    WebGL2RenderingContext: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGL2RenderingContext',
+    },
+    WebGL2RenderingContextBase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGL2RenderingContextBase',
+    },
+    WebGL2RenderingContextOverloads: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGL2RenderingContextOverloads',
+    },
+    WebGLActiveInfo: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLActiveInfo',
+    },
+    WebGLBuffer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLBuffer',
+    },
+    WebGLContextEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLContextEvent',
+    },
+    WebGLFramebuffer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLFramebuffer',
+    },
+    WebGLObject: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLObject',
+    },
+    WebGLProgram: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLProgram',
+    },
+    WebGLQuery: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLQuery',
+    },
+    WebGLRenderbuffer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLRenderbuffer',
+    },
+    WebGLRenderingContext: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLRenderingContext',
+    },
+    WebGLRenderingContextBase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLRenderingContextBase',
+    },
+    WebGLRenderingContextOverloads: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLRenderingContextOverloads',
+    },
+    WebGLSampler: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLSampler',
+    },
+    WebGLShader: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLShader',
+    },
+    WebGLShaderPrecisionFormat: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLShaderPrecisionFormat',
+    },
+    WebGLSync: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLSync',
+    },
+    WebGLTexture: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLTexture',
+    },
+    WebGLTransformFeedback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLTransformFeedback',
+    },
+    WebGLUniformLocation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLUniformLocation',
+    },
+    WebGLVertexArrayObject: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLVertexArrayObject',
+    },
+    WebGLVertexArrayObjectOES: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLVertexArrayObjectOES',
+    },
+    WebKitPoint: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebKitPoint',
+    },
+    WebSocketEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebSocketEventMap',
+    },
+    WebSocket: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebSocket',
+    },
+    WheelEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WheelEvent',
+    },
+    WindowEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WindowEventMap',
+    },
+    Window: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Window',
+    },
+    WindowEventHandlersEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WindowEventHandlersEventMap',
+    },
+    WindowEventHandlers: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WindowEventHandlers',
+    },
+    WindowLocalStorage: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WindowLocalStorage',
+    },
+    WindowOrWorkerGlobalScope: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WindowOrWorkerGlobalScope',
+    },
+    WindowSessionStorage: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WindowSessionStorage',
+    },
+    WorkerEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WorkerEventMap',
+    },
+    Worker: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Worker',
+    },
+    Worklet: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Worklet',
+    },
+    WritableStream: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WritableStream',
+    },
+    WritableStreamDefaultController: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WritableStreamDefaultController',
+    },
+    WritableStreamDefaultWriter: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WritableStreamDefaultWriter',
+    },
+    XMLDocument: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'XMLDocument',
+    },
+    XMLHttpRequestEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'XMLHttpRequestEventMap',
+    },
+    XMLHttpRequest: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'XMLHttpRequest',
+    },
+    XMLHttpRequestEventTargetEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'XMLHttpRequestEventTargetEventMap',
+    },
+    XMLHttpRequestEventTarget: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'XMLHttpRequestEventTarget',
+    },
+    XMLHttpRequestUpload: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'XMLHttpRequestUpload',
+    },
+    XMLSerializer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'XMLSerializer',
+    },
+    XPathEvaluator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'XPathEvaluator',
+    },
+    XPathEvaluatorBase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'XPathEvaluatorBase',
+    },
+    XPathExpression: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'XPathExpression',
+    },
+    XPathResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'XPathResult',
+    },
+    XSLTProcessor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'XSLTProcessor',
+    },
+    webkitRTCPeerConnection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'webkitRTCPeerConnection',
+    },
+    EventListenerOrEventListenerObject: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventListenerOrEventListenerObject',
+    },
+    Console: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Console',
+    },
+    CSS: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CSS',
+    },
+    WebAssembly: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebAssembly',
+    },
+    BlobCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BlobCallback',
+    },
+    CustomElementConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CustomElementConstructor',
+    },
+    DecodeErrorCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DecodeErrorCallback',
+    },
+    DecodeSuccessCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DecodeSuccessCallback',
+    },
+    EventHandlerNonNull: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventHandlerNonNull',
+    },
+    ForEachCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ForEachCallback',
+    },
+    FrameRequestCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FrameRequestCallback',
+    },
+    FunctionStringCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FunctionStringCallback',
+    },
+    IntersectionObserverCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IntersectionObserverCallback',
+    },
+    MSLaunchUriCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MSLaunchUriCallback',
+    },
+    MutationCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MutationCallback',
+    },
+    NavigatorUserMediaErrorCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorUserMediaErrorCallback',
+    },
+    NavigatorUserMediaSuccessCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorUserMediaSuccessCallback',
+    },
+    NotificationPermissionCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NotificationPermissionCallback',
+    },
+    OnBeforeUnloadEventHandlerNonNull: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OnBeforeUnloadEventHandlerNonNull',
+    },
+    OnErrorEventHandlerNonNull: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OnErrorEventHandlerNonNull',
+    },
+    PerformanceObserverCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PerformanceObserverCallback',
+    },
+    PositionCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PositionCallback',
+    },
+    PositionErrorCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PositionErrorCallback',
+    },
+    QueuingStrategySizeCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'QueuingStrategySizeCallback',
+    },
+    RTCPeerConnectionErrorCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCPeerConnectionErrorCallback',
+    },
+    RTCSessionDescriptionCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCSessionDescriptionCallback',
+    },
+    RTCStatsCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCStatsCallback',
+    },
+    ReadableByteStreamControllerCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadableByteStreamControllerCallback',
+    },
+    ReadableStreamDefaultControllerCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadableStreamDefaultControllerCallback',
+    },
+    ReadableStreamErrorCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadableStreamErrorCallback',
+    },
+    TransformStreamDefaultControllerCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TransformStreamDefaultControllerCallback',
+    },
+    TransformStreamDefaultControllerTransformCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TransformStreamDefaultControllerTransformCallback',
+    },
+    VoidFunction: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'VoidFunction',
+    },
+    WritableStreamDefaultControllerCloseCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WritableStreamDefaultControllerCloseCallback',
+    },
+    WritableStreamDefaultControllerStartCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WritableStreamDefaultControllerStartCallback',
+    },
+    WritableStreamDefaultControllerWriteCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WritableStreamDefaultControllerWriteCallback',
+    },
+    WritableStreamErrorCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WritableStreamErrorCallback',
+    },
+    HTMLElementTagNameMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLElementTagNameMap',
+    },
+    HTMLElementDeprecatedTagNameMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLElementDeprecatedTagNameMap',
+    },
+    SVGElementTagNameMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SVGElementTagNameMap',
+    },
+    ElementTagNameMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ElementTagNameMap',
+    },
+    HeadersInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HeadersInit',
+    },
+    BodyInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BodyInit',
+    },
+    RequestInfo: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RequestInfo',
+    },
+    BlobPart: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BlobPart',
+    },
+    DOMHighResTimeStamp: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMHighResTimeStamp',
+    },
+    RenderingContext: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RenderingContext',
+    },
+    HTMLOrSVGImageElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLOrSVGImageElement',
+    },
+    CanvasImageSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasImageSource',
+    },
+    OffscreenRenderingContext: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OffscreenRenderingContext',
+    },
+    MessageEventSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MessageEventSource',
+    },
+    HTMLOrSVGScriptElement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HTMLOrSVGScriptElement',
+    },
+    ImageBitmapSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ImageBitmapSource',
+    },
+    MediaProvider: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaProvider',
+    },
+    OnErrorEventHandler: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OnErrorEventHandler',
+    },
+    OnBeforeUnloadEventHandler: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OnBeforeUnloadEventHandler',
+    },
+    TimerHandler: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TimerHandler',
+    },
+    ConstrainULong: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConstrainULong',
+    },
+    ConstrainDouble: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConstrainDouble',
+    },
+    ConstrainBoolean: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConstrainBoolean',
+    },
+    ConstrainDOMString: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConstrainDOMString',
+    },
+    PerformanceEntryList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PerformanceEntryList',
+    },
+    ReadableStreamReadResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadableStreamReadResult',
+    },
+    VibratePattern: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'VibratePattern',
+    },
+    COSEAlgorithmIdentifier: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'COSEAlgorithmIdentifier',
+    },
+    UvmEntry: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'UvmEntry',
+    },
+    UvmEntries: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'UvmEntries',
+    },
+    AlgorithmIdentifier: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AlgorithmIdentifier',
+    },
+    HashAlgorithmIdentifier: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HashAlgorithmIdentifier',
+    },
+    BigInteger: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BigInteger',
+    },
+    NamedCurve: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NamedCurve',
+    },
+    GLenum: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLenum',
+    },
+    GLboolean: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLboolean',
+    },
+    GLbitfield: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLbitfield',
+    },
+    GLint: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLint',
+    },
+    GLsizei: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLsizei',
+    },
+    GLintptr: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLintptr',
+    },
+    GLsizeiptr: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLsizeiptr',
+    },
+    GLuint: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLuint',
+    },
+    GLfloat: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLfloat',
+    },
+    GLclampf: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLclampf',
+    },
+    TexImageSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TexImageSource',
+    },
+    Float32List: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Float32List',
+    },
+    Int32List: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int32List',
+    },
+    GLint64: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLint64',
+    },
+    GLuint64: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLuint64',
+    },
+    Uint32List: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint32List',
+    },
+    BufferSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BufferSource',
+    },
+    DOMTimeStamp: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMTimeStamp',
+    },
+    LineAndPositionSetting: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'LineAndPositionSetting',
+    },
+    FormDataEntryValue: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FormDataEntryValue',
+    },
+    InsertPosition: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'InsertPosition',
+    },
+    IDBValidKey: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBValidKey',
+    },
+    MutationRecordType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MutationRecordType',
+    },
+    IDBKeyPath: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBKeyPath',
+    },
+    Transferable: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Transferable',
+    },
+    RTCIceGatherCandidate: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceGatherCandidate',
+    },
+    RTCTransport: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCTransport',
+    },
+    MouseWheelEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MouseWheelEvent',
+    },
+    WindowProxy: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WindowProxy',
+    },
+    AlignSetting: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AlignSetting',
+    },
+    AnimationPlayState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AnimationPlayState',
+    },
+    AppendMode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AppendMode',
+    },
+    AttestationConveyancePreference: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AttestationConveyancePreference',
+    },
+    AudioContextLatencyCategory: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AudioContextLatencyCategory',
+    },
+    AudioContextState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AudioContextState',
+    },
+    AuthenticatorAttachment: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AuthenticatorAttachment',
+    },
+    AuthenticatorTransport: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AuthenticatorTransport',
+    },
+    AutoKeyword: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AutoKeyword',
+    },
+    AutomationRate: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AutomationRate',
+    },
+    BinaryType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BinaryType',
+    },
+    BiquadFilterType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BiquadFilterType',
+    },
+    CanPlayTypeResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanPlayTypeResult',
+    },
+    CanvasDirection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasDirection',
+    },
+    CanvasFillRule: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasFillRule',
+    },
+    CanvasLineCap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasLineCap',
+    },
+    CanvasLineJoin: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasLineJoin',
+    },
+    CanvasTextAlign: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasTextAlign',
+    },
+    CanvasTextBaseline: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasTextBaseline',
+    },
+    ChannelCountMode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ChannelCountMode',
+    },
+    ChannelInterpretation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ChannelInterpretation',
+    },
+    ClientTypes: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ClientTypes',
+    },
+    ColorSpaceConversion: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ColorSpaceConversion',
+    },
+    CompositeOperation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CompositeOperation',
+    },
+    CompositeOperationOrAuto: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CompositeOperationOrAuto',
+    },
+    CredentialMediationRequirement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CredentialMediationRequirement',
+    },
+    DOMParserSupportedType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMParserSupportedType',
+    },
+    DirectionSetting: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DirectionSetting',
+    },
+    DisplayCaptureSurfaceType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DisplayCaptureSurfaceType',
+    },
+    DistanceModelType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DistanceModelType',
+    },
+    DocumentReadyState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DocumentReadyState',
+    },
+    EndOfStreamError: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EndOfStreamError',
+    },
+    EndingType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EndingType',
+    },
+    FillMode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FillMode',
+    },
+    FullscreenNavigationUI: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FullscreenNavigationUI',
+    },
+    GamepadHand: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GamepadHand',
+    },
+    GamepadHapticActuatorType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GamepadHapticActuatorType',
+    },
+    GamepadMappingType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GamepadMappingType',
+    },
+    IDBCursorDirection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBCursorDirection',
+    },
+    IDBRequestReadyState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBRequestReadyState',
+    },
+    IDBTransactionMode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBTransactionMode',
+    },
+    ImageOrientation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ImageOrientation',
+    },
+    ImageSmoothingQuality: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ImageSmoothingQuality',
+    },
+    IterationCompositeOperation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IterationCompositeOperation',
+    },
+    KeyFormat: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'KeyFormat',
+    },
+    KeyType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'KeyType',
+    },
+    KeyUsage: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'KeyUsage',
+    },
+    LineAlignSetting: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'LineAlignSetting',
+    },
+    ListeningState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ListeningState',
+    },
+    MSCredentialType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MSCredentialType',
+    },
+    MSTransportType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MSTransportType',
+    },
+    MSWebViewPermissionState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MSWebViewPermissionState',
+    },
+    MSWebViewPermissionType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MSWebViewPermissionType',
+    },
+    MediaDeviceKind: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaDeviceKind',
+    },
+    MediaKeyMessageType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaKeyMessageType',
+    },
+    MediaKeySessionType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaKeySessionType',
+    },
+    MediaKeyStatus: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaKeyStatus',
+    },
+    MediaKeysRequirement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaKeysRequirement',
+    },
+    MediaStreamTrackState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MediaStreamTrackState',
+    },
+    NavigationReason: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigationReason',
+    },
+    NavigationType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigationType',
+    },
+    NotificationDirection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NotificationDirection',
+    },
+    NotificationPermission: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NotificationPermission',
+    },
+    OffscreenRenderingContextId: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OffscreenRenderingContextId',
+    },
+    OrientationLockType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OrientationLockType',
+    },
+    OrientationType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OrientationType',
+    },
+    OscillatorType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OscillatorType',
+    },
+    OverSampleType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OverSampleType',
+    },
+    PanningModelType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PanningModelType',
+    },
+    PaymentComplete: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PaymentComplete',
+    },
+    PaymentShippingType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PaymentShippingType',
+    },
+    PermissionName: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PermissionName',
+    },
+    PermissionState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PermissionState',
+    },
+    PlaybackDirection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PlaybackDirection',
+    },
+    PositionAlignSetting: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PositionAlignSetting',
+    },
+    PremultiplyAlpha: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PremultiplyAlpha',
+    },
+    PublicKeyCredentialType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PublicKeyCredentialType',
+    },
+    PushEncryptionKeyName: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PushEncryptionKeyName',
+    },
+    PushPermissionState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PushPermissionState',
+    },
+    RTCBundlePolicy: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCBundlePolicy',
+    },
+    RTCDataChannelState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCDataChannelState',
+    },
+    RTCDegradationPreference: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCDegradationPreference',
+    },
+    RTCDtlsRole: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCDtlsRole',
+    },
+    RTCDtlsTransportState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCDtlsTransportState',
+    },
+    RTCDtxStatus: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCDtxStatus',
+    },
+    RTCErrorDetailType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCErrorDetailType',
+    },
+    RTCIceCandidateType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceCandidateType',
+    },
+    RTCIceComponent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceComponent',
+    },
+    RTCIceConnectionState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceConnectionState',
+    },
+    RTCIceCredentialType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceCredentialType',
+    },
+    RTCIceGatherPolicy: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceGatherPolicy',
+    },
+    RTCIceGathererState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceGathererState',
+    },
+    RTCIceGatheringState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceGatheringState',
+    },
+    RTCIceProtocol: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceProtocol',
+    },
+    RTCIceRole: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceRole',
+    },
+    RTCIceTcpCandidateType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceTcpCandidateType',
+    },
+    RTCIceTransportPolicy: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceTransportPolicy',
+    },
+    RTCIceTransportState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCIceTransportState',
+    },
+    RTCPeerConnectionState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCPeerConnectionState',
+    },
+    RTCPriorityType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCPriorityType',
+    },
+    RTCRtcpMuxPolicy: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtcpMuxPolicy',
+    },
+    RTCRtpTransceiverDirection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCRtpTransceiverDirection',
+    },
+    RTCSctpTransportState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCSctpTransportState',
+    },
+    RTCSdpType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCSdpType',
+    },
+    RTCSignalingState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCSignalingState',
+    },
+    RTCStatsIceCandidatePairState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCStatsIceCandidatePairState',
+    },
+    RTCStatsIceCandidateType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCStatsIceCandidateType',
+    },
+    RTCStatsType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RTCStatsType',
+    },
+    ReadyState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadyState',
+    },
+    ReferrerPolicy: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReferrerPolicy',
+    },
+    RequestCache: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RequestCache',
+    },
+    RequestCredentials: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RequestCredentials',
+    },
+    RequestDestination: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RequestDestination',
+    },
+    RequestMode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RequestMode',
+    },
+    RequestRedirect: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RequestRedirect',
+    },
+    ResidentKeyRequirement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ResidentKeyRequirement',
+    },
+    ResizeQuality: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ResizeQuality',
+    },
+    ResponseType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ResponseType',
+    },
+    ScopedCredentialType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ScopedCredentialType',
+    },
+    ScrollBehavior: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ScrollBehavior',
+    },
+    ScrollLogicalPosition: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ScrollLogicalPosition',
+    },
+    ScrollRestoration: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ScrollRestoration',
+    },
+    ScrollSetting: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ScrollSetting',
+    },
+    SelectionMode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SelectionMode',
+    },
+    ServiceWorkerState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ServiceWorkerState',
+    },
+    ServiceWorkerUpdateViaCache: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ServiceWorkerUpdateViaCache',
+    },
+    ShadowRootMode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ShadowRootMode',
+    },
+    SpeechSynthesisErrorCode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SpeechSynthesisErrorCode',
+    },
+    TextTrackKind: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextTrackKind',
+    },
+    TextTrackMode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextTrackMode',
+    },
+    TouchType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TouchType',
+    },
+    Transport: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Transport',
+    },
+    UserVerificationRequirement: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'UserVerificationRequirement',
+    },
+    VRDisplayEventReason: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'VRDisplayEventReason',
+    },
+    VideoFacingModeEnum: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'VideoFacingModeEnum',
+    },
+    VisibilityState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'VisibilityState',
+    },
+    WebGLPowerPreference: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLPowerPreference',
+    },
+    WorkerType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WorkerType',
+    },
+    XMLHttpRequestResponseType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'XMLHttpRequestResponseType',
+    },
+};
+//# sourceMappingURL=dom.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..06a213fa87ef7e3b16eccd8a734fba373bd46b53
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/lib/dom.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7d16c6c91f4de8aebd72c2c3279367d8f4d0d73e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2015_collection: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2015.collection.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..88c3754f4d7525beb8133e3b7caae22153510d3e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.collection.d.ts","sourceRoot":"","sources":["../../src/lib/es2015.collection.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,iBAAiB,4CA6DiB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf4b8951ecd2c865bdad829316c14eb5f1596621
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.js
@@ -0,0 +1,69 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2015_collection = void 0;
+exports.es2015_collection = {
+    Map: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Map',
+    },
+    MapConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MapConstructor',
+    },
+    ReadonlyMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadonlyMap',
+    },
+    WeakMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WeakMap',
+    },
+    WeakMapConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WeakMapConstructor',
+    },
+    Set: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Set',
+    },
+    SetConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SetConstructor',
+    },
+    ReadonlySet: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadonlySet',
+    },
+    WeakSet: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WeakSet',
+    },
+    WeakSetConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WeakSetConstructor',
+    },
+};
+//# sourceMappingURL=es2015.collection.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..388b6d0e6261f52bf827c4754d017fa760eccb28
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.collection.js","sourceRoot":"","sources":["../../src/lib/es2015.collection.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,iBAAiB,GAAG;IAC/B,GAAG,EAAE;QACH,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,KAAK;KACZ;IACD,cAAc,EAAE;QACd,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,gBAAgB;KACvB;IACD,WAAW,EAAE;QACX,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,aAAa;KACpB;IACD,OAAO,EAAE;QACP,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,SAAS;KAChB;IACD,kBAAkB,EAAE;QAClB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,oBAAoB;KAC3B;IACD,GAAG,EAAE;QACH,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,KAAK;KACZ;IACD,cAAc,EAAE;QACd,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,gBAAgB;KACvB;IACD,WAAW,EAAE;QACX,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,aAAa;KACpB;IACD,OAAO,EAAE;QACP,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,SAAS;KAChB;IACD,kBAAkB,EAAE;QAClB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,oBAAoB;KAC3B;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f07145e05229ed88076b78bb54cea333ccfa525a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2015_core: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2015.core.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..5d53767e588d23a57938ad3aba0795001321acc1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.core.d.ts","sourceRoot":"","sources":["../../src/lib/es2015.core.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,WAAW,4CAyEuB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.js
new file mode 100644
index 0000000000000000000000000000000000000000..ce70b37c2edbbb00a72f36b9c726204acca0a90d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.js
@@ -0,0 +1,81 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2015_core = void 0;
+exports.es2015_core = {
+    Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Array',
+    },
+    ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ArrayConstructor',
+    },
+    DateConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DateConstructor',
+    },
+    Function: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Function',
+    },
+    Math: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Math',
+    },
+    NumberConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NumberConstructor',
+    },
+    ObjectConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ObjectConstructor',
+    },
+    ReadonlyArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadonlyArray',
+    },
+    RegExp: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RegExp',
+    },
+    RegExpConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RegExpConstructor',
+    },
+    String: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'String',
+    },
+    StringConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'StringConstructor',
+    },
+};
+//# sourceMappingURL=es2015.core.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..76a05087f6c9174478067ddd3f22cdd7ebce049a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.core.js","sourceRoot":"","sources":["../../src/lib/es2015.core.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,WAAW,GAAG;IACzB,KAAK,EAAE;QACL,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,OAAO;KACd;IACD,gBAAgB,EAAE;QAChB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,kBAAkB;KACzB;IACD,eAAe,EAAE;QACf,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,iBAAiB;KACxB;IACD,QAAQ,EAAE;QACR,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,UAAU;KACjB;IACD,IAAI,EAAE;QACJ,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,MAAM;KACb;IACD,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B;IACD,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B;IACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB;IACD,MAAM,EAAE;QACN,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,QAAQ;KACf;IACD,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B;IACD,MAAM,EAAE;QACN,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,QAAQ;KACf;IACD,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d296ffed60a7caf5135f442de1503dc7ad29bfb1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2015: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2015.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..5eebd55d6cf1c0c37556ddf18b409ae464a3214d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.d.ts","sourceRoot":"","sources":["../../src/lib/es2015.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAYzD,eAAO,MAAM,MAAM,4CAW4B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..90080d8c077ca8c3b77e37261e4df30430bbb7f4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2015_generator: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2015.generator.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..fdb6493302f7832e70f09c057ea136cfef40e5ab
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.generator.d.ts","sourceRoot":"","sources":["../../src/lib/es2015.generator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAGzD,eAAO,MAAM,gBAAgB,4CAoBkB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.js
new file mode 100644
index 0000000000000000000000000000000000000000..5600c3347c9596ae519a40147b664d634ddb84a7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.js
@@ -0,0 +1,24 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2015_generator = void 0;
+const es2015_iterable_1 = require("./es2015.iterable");
+exports.es2015_generator = Object.assign(Object.assign({}, es2015_iterable_1.es2015_iterable), { Generator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Generator',
+    }, GeneratorFunction: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GeneratorFunction',
+    }, GeneratorFunctionConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GeneratorFunctionConstructor',
+    } });
+//# sourceMappingURL=es2015.generator.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..80048e13ba8f1a094408fcf5e6de7fe6f41e7ba6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.generator.js","sourceRoot":"","sources":["../../src/lib/es2015.generator.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,uDAAoD;AAEvC,QAAA,gBAAgB,GAAG,gCAC3B,iCAAe,KAClB,SAAS,EAAE;QACT,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,WAAW;KAClB,EACD,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B,EACD,4BAA4B,EAAE;QAC5B,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,8BAA8B;KACrC,GAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c2ff28a5039665a1a536e5f9b2d0053b812c66c7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2015_iterable: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2015.iterable.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..ac52b34bf2f1dafaec89f1a496ac86724d69118f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.iterable.d.ts","sourceRoot":"","sources":["../../src/lib/es2015.iterable.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAGzD,eAAO,MAAM,eAAe,4CA8PmB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.js
new file mode 100644
index 0000000000000000000000000000000000000000..2435b500b3036ef3871ed90d01163fab9506c60d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.js
@@ -0,0 +1,219 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2015_iterable = void 0;
+const es2015_symbol_1 = require("./es2015.symbol");
+exports.es2015_iterable = Object.assign(Object.assign({}, es2015_symbol_1.es2015_symbol), { SymbolConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SymbolConstructor',
+    }, IteratorYieldResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IteratorYieldResult',
+    }, IteratorReturnResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IteratorReturnResult',
+    }, IteratorResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IteratorResult',
+    }, Iterator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Iterator',
+    }, Iterable: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Iterable',
+    }, IterableIterator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IterableIterator',
+    }, Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Array',
+    }, ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ArrayConstructor',
+    }, ReadonlyArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadonlyArray',
+    }, IArguments: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IArguments',
+    }, Map: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Map',
+    }, ReadonlyMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadonlyMap',
+    }, MapConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MapConstructor',
+    }, WeakMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WeakMap',
+    }, WeakMapConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WeakMapConstructor',
+    }, Set: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Set',
+    }, ReadonlySet: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadonlySet',
+    }, SetConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SetConstructor',
+    }, WeakSet: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WeakSet',
+    }, WeakSetConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WeakSetConstructor',
+    }, Promise: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Promise',
+    }, PromiseConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PromiseConstructor',
+    }, String: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'String',
+    }, Int8Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int8Array',
+    }, Int8ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int8ArrayConstructor',
+    }, Uint8Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint8Array',
+    }, Uint8ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint8ArrayConstructor',
+    }, Uint8ClampedArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint8ClampedArray',
+    }, Uint8ClampedArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint8ClampedArrayConstructor',
+    }, Int16Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int16Array',
+    }, Int16ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int16ArrayConstructor',
+    }, Uint16Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint16Array',
+    }, Uint16ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint16ArrayConstructor',
+    }, Int32Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int32Array',
+    }, Int32ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int32ArrayConstructor',
+    }, Uint32Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint32Array',
+    }, Uint32ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint32ArrayConstructor',
+    }, Float32Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Float32Array',
+    }, Float32ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Float32ArrayConstructor',
+    }, Float64Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Float64Array',
+    }, Float64ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Float64ArrayConstructor',
+    } });
+//# sourceMappingURL=es2015.iterable.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..31b5d171f67a69217e6247343c6596c1f9e58c82
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.iterable.js","sourceRoot":"","sources":["../../src/lib/es2015.iterable.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.js
new file mode 100644
index 0000000000000000000000000000000000000000..de74ee26d6d55d82c9c2e0eb15c25d84d2ca4ad8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.js
@@ -0,0 +1,18 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2015 = void 0;
+const es5_1 = require("./es5");
+const es2015_core_1 = require("./es2015.core");
+const es2015_collection_1 = require("./es2015.collection");
+const es2015_iterable_1 = require("./es2015.iterable");
+const es2015_generator_1 = require("./es2015.generator");
+const es2015_promise_1 = require("./es2015.promise");
+const es2015_proxy_1 = require("./es2015.proxy");
+const es2015_reflect_1 = require("./es2015.reflect");
+const es2015_symbol_1 = require("./es2015.symbol");
+const es2015_symbol_wellknown_1 = require("./es2015.symbol.wellknown");
+exports.es2015 = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, es5_1.es5), es2015_core_1.es2015_core), es2015_collection_1.es2015_collection), es2015_iterable_1.es2015_iterable), es2015_generator_1.es2015_generator), es2015_promise_1.es2015_promise), es2015_proxy_1.es2015_proxy), es2015_reflect_1.es2015_reflect), es2015_symbol_1.es2015_symbol), es2015_symbol_wellknown_1.es2015_symbol_wellknown);
+//# sourceMappingURL=es2015.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..968635e83e804c69e09f90c885328526b9e1c5a4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.js","sourceRoot":"","sources":["../../src/lib/es2015.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,+BAA4B;AAC5B,+CAA4C;AAC5C,2DAAwD;AACxD,uDAAoD;AACpD,yDAAsD;AACtD,qDAAkD;AAClD,iDAA8C;AAC9C,qDAAkD;AAClD,mDAAgD;AAChD,uEAAoE;AAEvD,QAAA,MAAM,GAAG,gJACjB,SAAG,GACH,yBAAW,GACX,qCAAiB,GACjB,iCAAe,GACf,mCAAgB,GAChB,+BAAc,GACd,2BAAY,GACZ,+BAAc,GACd,6BAAa,GACb,iDAAuB,CACmB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f52ceb382b88d0afdcadc8e119084255114ccd7a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2015_promise: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2015.promise.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..ed845312a1139f99d7734ce0ed3fc24f7713a992
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.promise.d.ts","sourceRoot":"","sources":["../../src/lib/es2015.promise.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,cAAc,4CAOoB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.js
new file mode 100644
index 0000000000000000000000000000000000000000..ed607da82865c894a1da95e8fb1cebbc6ac54b6c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2015_promise = void 0;
+exports.es2015_promise = {
+    PromiseConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PromiseConstructor',
+    },
+};
+//# sourceMappingURL=es2015.promise.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..d5f255ee27e98d20e2500edbee4c24b6ec73f850
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.promise.js","sourceRoot":"","sources":["../../src/lib/es2015.promise.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,cAAc,GAAG;IAC5B,kBAAkB,EAAE;QAClB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,oBAAoB;KAC3B;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..503eab04d6cba257e8858524656df61e040ea1df
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2015_proxy: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2015.proxy.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..c93307e882182fe33637675eefa45fce032eecb7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.proxy.d.ts","sourceRoot":"","sources":["../../src/lib/es2015.proxy.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,YAAY,4CAasB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.js
new file mode 100644
index 0000000000000000000000000000000000000000..f74d7315b438cddd18c4cbe67fbb91003f2cace1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.js
@@ -0,0 +1,21 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2015_proxy = void 0;
+exports.es2015_proxy = {
+    ProxyHandler: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ProxyHandler',
+    },
+    ProxyConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ProxyConstructor',
+    },
+};
+//# sourceMappingURL=es2015.proxy.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..4b8876aba9d2de31da6a9785009b258ed7b5a048
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.proxy.js","sourceRoot":"","sources":["../../src/lib/es2015.proxy.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,YAAY,GAAG;IAC1B,YAAY,EAAE;QACZ,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,cAAc;KACrB;IACD,gBAAgB,EAAE;QAChB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,kBAAkB;KACzB;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3f3b7018aef93ad063c3cfcb4f04d090d963c097
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2015_reflect: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2015.reflect.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..730708a28eee0cd07602f92adf5e901abba9efcd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.reflect.d.ts","sourceRoot":"","sources":["../../src/lib/es2015.reflect.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,cAAc,4CAOoB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.js
new file mode 100644
index 0000000000000000000000000000000000000000..d149f07c54c789cc2588c24802998e6a23b429a9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2015_reflect = void 0;
+exports.es2015_reflect = {
+    Reflect: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Reflect',
+    },
+};
+//# sourceMappingURL=es2015.reflect.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..770a7708b009ab8050e1d8c0fd9f11f11c4d3b6d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.reflect.js","sourceRoot":"","sources":["../../src/lib/es2015.reflect.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,cAAc,GAAG;IAC5B,OAAO,EAAE;QACP,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,SAAS;KAChB;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fa301234530cba9acc9fe4e65e46a06682a12aba
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2015_symbol: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2015.symbol.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e64431f0c07f52d1c8f3af02cb2bc0ad914a1bac
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.symbol.d.ts","sourceRoot":"","sources":["../../src/lib/es2015.symbol.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,aAAa,4CAOqB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.js
new file mode 100644
index 0000000000000000000000000000000000000000..e7a3fd43e6509f48e5ec823c8577584e8103c0ee
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2015_symbol = void 0;
+exports.es2015_symbol = {
+    SymbolConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SymbolConstructor',
+    },
+};
+//# sourceMappingURL=es2015.symbol.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..97e8384d4d09ae02366c5ad2bf5ae70cda5994e9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.symbol.js","sourceRoot":"","sources":["../../src/lib/es2015.symbol.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,aAAa,GAAG;IAC3B,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..852896d5fe38d45d0afcc3315a4b64baa1770e10
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2015_symbol_wellknown: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2015.symbol.wellknown.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..4aa79bab3197dafbcba055e90f542d0dcf1e644f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.symbol.wellknown.d.ts","sourceRoot":"","sources":["../../src/lib/es2015.symbol.wellknown.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAGzD,eAAO,MAAM,uBAAuB,4CAkMW,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c12d5f362ab13fccaff6aa6ca8a5d641ade87c9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.js
@@ -0,0 +1,169 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2015_symbol_wellknown = void 0;
+const es2015_symbol_1 = require("./es2015.symbol");
+exports.es2015_symbol_wellknown = Object.assign(Object.assign({}, es2015_symbol_1.es2015_symbol), { SymbolConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SymbolConstructor',
+    }, Symbol: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Symbol',
+    }, Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Array',
+    }, Date: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Date',
+    }, Map: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Map',
+    }, WeakMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WeakMap',
+    }, Set: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Set',
+    }, WeakSet: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WeakSet',
+    }, JSON: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'JSON',
+    }, Function: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Function',
+    }, GeneratorFunction: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GeneratorFunction',
+    }, Math: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Math',
+    }, Promise: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Promise',
+    }, PromiseConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PromiseConstructor',
+    }, RegExp: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RegExp',
+    }, RegExpConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RegExpConstructor',
+    }, String: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'String',
+    }, ArrayBuffer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ArrayBuffer',
+    }, DataView: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DataView',
+    }, Int8Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int8Array',
+    }, Uint8Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint8Array',
+    }, Uint8ClampedArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint8ClampedArray',
+    }, Int16Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int16Array',
+    }, Uint16Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint16Array',
+    }, Int32Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int32Array',
+    }, Uint32Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint32Array',
+    }, Float32Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Float32Array',
+    }, Float64Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Float64Array',
+    }, ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ArrayConstructor',
+    }, MapConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MapConstructor',
+    }, SetConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SetConstructor',
+    }, ArrayBufferConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ArrayBufferConstructor',
+    } });
+//# sourceMappingURL=es2015.symbol.wellknown.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..55f628c725fe8932b10a3af905cd1c276f154c92
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2015.symbol.wellknown.js","sourceRoot":"","sources":["../../src/lib/es2015.symbol.wellknown.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c0ffb1b9e8bc427ffd3189b026399e1d028f5491
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2016_array_include: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2016.array.include.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..fc357c38cf63c74583ddbdc3ee548282ce83dbe2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2016.array.include.d.ts","sourceRoot":"","sources":["../../src/lib/es2016.array.include.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,oBAAoB,4CAmEc,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.js
new file mode 100644
index 0000000000000000000000000000000000000000..6b67414b5ec98e3efd42caed19d183f5b1739d45
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.js
@@ -0,0 +1,75 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2016_array_include = void 0;
+exports.es2016_array_include = {
+    Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Array',
+    },
+    ReadonlyArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadonlyArray',
+    },
+    Int8Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int8Array',
+    },
+    Uint8Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint8Array',
+    },
+    Uint8ClampedArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint8ClampedArray',
+    },
+    Int16Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int16Array',
+    },
+    Uint16Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint16Array',
+    },
+    Int32Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int32Array',
+    },
+    Uint32Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint32Array',
+    },
+    Float32Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Float32Array',
+    },
+    Float64Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Float64Array',
+    },
+};
+//# sourceMappingURL=es2016.array.include.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..458d3ec5c1ef2a117040e48526e230a402b04002
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2016.array.include.js","sourceRoot":"","sources":["../../src/lib/es2016.array.include.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,oBAAoB,GAAG;IAClC,KAAK,EAAE;QACL,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,OAAO;KACd;IACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB;IACD,SAAS,EAAE;QACT,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,WAAW;KAClB;IACD,UAAU,EAAE;QACV,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,YAAY;KACnB;IACD,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B;IACD,UAAU,EAAE;QACV,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,YAAY;KACnB;IACD,WAAW,EAAE;QACX,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,aAAa;KACpB;IACD,UAAU,EAAE;QACV,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,YAAY;KACnB;IACD,WAAW,EAAE;QACX,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,aAAa;KACpB;IACD,YAAY,EAAE;QACZ,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,cAAc;KACrB;IACD,YAAY,EAAE;QACZ,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,cAAc;KACrB;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7d33b4225aaaec938b056eb7598dda987d9fc77e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2016: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2016.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..57e9e9abea823368ccacb918fafc50df3ab023a0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2016.d.ts","sourceRoot":"","sources":["../../src/lib/es2016.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAIzD,eAAO,MAAM,MAAM,4CAG4B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6d10510ad8fb382ae16c147690e2328e573cce82
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2016_full: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2016.full.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e2b011c78989539f657ba01495832bcc58b9356d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2016.full.d.ts","sourceRoot":"","sources":["../../src/lib/es2016.full.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAOzD,eAAO,MAAM,WAAW,4CAMuB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.js
new file mode 100644
index 0000000000000000000000000000000000000000..6fa1b85c989beb531d9cb9fa3807f6a023bce217
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.js
@@ -0,0 +1,13 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2016_full = void 0;
+const es2016_1 = require("./es2016");
+const dom_1 = require("./dom");
+const webworker_importscripts_1 = require("./webworker.importscripts");
+const scripthost_1 = require("./scripthost");
+const dom_iterable_1 = require("./dom.iterable");
+exports.es2016_full = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, es2016_1.es2016), dom_1.dom), webworker_importscripts_1.webworker_importscripts), scripthost_1.scripthost), dom_iterable_1.dom_iterable);
+//# sourceMappingURL=es2016.full.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..32bff41572d5bccf1d3ad78bb4706024e4f8140a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2016.full.js","sourceRoot":"","sources":["../../src/lib/es2016.full.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,qCAAkC;AAClC,+BAA4B;AAC5B,uEAAoE;AACpE,6CAA0C;AAC1C,iDAA8C;AAEjC,QAAA,WAAW,GAAG,0EACtB,eAAM,GACN,SAAG,GACH,iDAAuB,GACvB,uBAAU,GACV,2BAAY,CAC8B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.js
new file mode 100644
index 0000000000000000000000000000000000000000..e60a35a77d1b2958dbd86320fbb5e887fe335bf9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.js
@@ -0,0 +1,10 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2016 = void 0;
+const es2015_1 = require("./es2015");
+const es2016_array_include_1 = require("./es2016.array.include");
+exports.es2016 = Object.assign(Object.assign({}, es2015_1.es2015), es2016_array_include_1.es2016_array_include);
+//# sourceMappingURL=es2016.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..d7dce20413077ee5c98ade97aaf78e266a6e5cb5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2016.js","sourceRoot":"","sources":["../../src/lib/es2016.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,qCAAkC;AAClC,iEAA8D;AAEjD,QAAA,MAAM,GAAG,gCACjB,eAAM,GACN,2CAAoB,CACsB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fa8737b9d5076f3dd9e34252d4a536a94bc2f942
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2017: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2017.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..a9c615fe319ae9e601ed32325be54111ac8da4a9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2017.d.ts","sourceRoot":"","sources":["../../src/lib/es2017.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAQzD,eAAO,MAAM,MAAM,4CAO4B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d461e8989623167c0c3e50fef539e62c9ef7d8f2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2017_full: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2017.full.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..40214b79e717eae777f2b88ec4b4811cbd9f94e2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2017.full.d.ts","sourceRoot":"","sources":["../../src/lib/es2017.full.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAOzD,eAAO,MAAM,WAAW,4CAMuB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.js
new file mode 100644
index 0000000000000000000000000000000000000000..9cefd9659b48b9eb992ad27e822708a5a572b405
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.js
@@ -0,0 +1,13 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2017_full = void 0;
+const es2017_1 = require("./es2017");
+const dom_1 = require("./dom");
+const webworker_importscripts_1 = require("./webworker.importscripts");
+const scripthost_1 = require("./scripthost");
+const dom_iterable_1 = require("./dom.iterable");
+exports.es2017_full = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, es2017_1.es2017), dom_1.dom), webworker_importscripts_1.webworker_importscripts), scripthost_1.scripthost), dom_iterable_1.dom_iterable);
+//# sourceMappingURL=es2017.full.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..430ad0d3cb4aa45f354fd2c49a3b5de90d123630
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2017.full.js","sourceRoot":"","sources":["../../src/lib/es2017.full.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,qCAAkC;AAClC,+BAA4B;AAC5B,uEAAoE;AACpE,6CAA0C;AAC1C,iDAA8C;AAEjC,QAAA,WAAW,GAAG,0EACtB,eAAM,GACN,SAAG,GACH,iDAAuB,GACvB,uBAAU,GACV,2BAAY,CAC8B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..14e4a85372578e96e5a38d89b45c202f3e7fdda6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2017_intl: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2017.intl.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..acd44df10227327816b4b38273ac84d0eb607970
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2017.intl.d.ts","sourceRoot":"","sources":["../../src/lib/es2017.intl.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,WAAW,4CAOuB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.js
new file mode 100644
index 0000000000000000000000000000000000000000..27f2dfa0d099b099dcbede92ca1844dd284b5e6b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2017_intl = void 0;
+exports.es2017_intl = {
+    Intl: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Intl',
+    },
+};
+//# sourceMappingURL=es2017.intl.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..8c277bb1acb1bb00fc62eea7bd33b2295215689f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2017.intl.js","sourceRoot":"","sources":["../../src/lib/es2017.intl.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,WAAW,GAAG;IACzB,IAAI,EAAE;QACJ,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,MAAM;KACb;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.js
new file mode 100644
index 0000000000000000000000000000000000000000..3c39cb39310109e228dc31fb4226dd3a8045979b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.js
@@ -0,0 +1,14 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2017 = void 0;
+const es2016_1 = require("./es2016");
+const es2017_object_1 = require("./es2017.object");
+const es2017_sharedmemory_1 = require("./es2017.sharedmemory");
+const es2017_string_1 = require("./es2017.string");
+const es2017_intl_1 = require("./es2017.intl");
+const es2017_typedarrays_1 = require("./es2017.typedarrays");
+exports.es2017 = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, es2016_1.es2016), es2017_object_1.es2017_object), es2017_sharedmemory_1.es2017_sharedmemory), es2017_string_1.es2017_string), es2017_intl_1.es2017_intl), es2017_typedarrays_1.es2017_typedarrays);
+//# sourceMappingURL=es2017.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..1b6769cd67ff9509fd9eee7ea919bc9af4999d78
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2017.js","sourceRoot":"","sources":["../../src/lib/es2017.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,qCAAkC;AAClC,mDAAgD;AAChD,+DAA4D;AAC5D,mDAAgD;AAChD,+CAA4C;AAC5C,6DAA0D;AAE7C,QAAA,MAAM,GAAG,wFACjB,eAAM,GACN,6BAAa,GACb,yCAAmB,GACnB,6BAAa,GACb,yBAAW,GACX,uCAAkB,CACwB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ce6b723554d3290a6e37aa032dbe69e024b1f46d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2017_object: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2017.object.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..a0b40ce60dc7c68fd827527749ec9e2fdfcaf3fe
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2017.object.d.ts","sourceRoot":"","sources":["../../src/lib/es2017.object.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,aAAa,4CAOqB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8fd03ac7405bd51f852be70f95134ada5700aa5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2017_object = void 0;
+exports.es2017_object = {
+    ObjectConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ObjectConstructor',
+    },
+};
+//# sourceMappingURL=es2017.object.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..a248d3cd7997750ff9b562146c76230c7e677ea4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2017.object.js","sourceRoot":"","sources":["../../src/lib/es2017.object.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,aAAa,GAAG;IAC3B,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b5ea8e421af26a7838309f9b6ee9c5ea0f256742
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2017_sharedmemory: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2017.sharedmemory.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..920157f9b2ad8f98b199ea091da48a9c3e4d7c8d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2017.sharedmemory.d.ts","sourceRoot":"","sources":["../../src/lib/es2017.sharedmemory.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAIzD,eAAO,MAAM,mBAAmB,4CA2Be,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f2f1b276dd5293a67a76e7622e66e5516a3d4b3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.js
@@ -0,0 +1,30 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2017_sharedmemory = void 0;
+const es2015_symbol_1 = require("./es2015.symbol");
+const es2015_symbol_wellknown_1 = require("./es2015.symbol.wellknown");
+exports.es2017_sharedmemory = Object.assign(Object.assign(Object.assign({}, es2015_symbol_1.es2015_symbol), es2015_symbol_wellknown_1.es2015_symbol_wellknown), { SharedArrayBuffer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SharedArrayBuffer',
+    }, SharedArrayBufferConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SharedArrayBufferConstructor',
+    }, ArrayBufferTypes: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ArrayBufferTypes',
+    }, Atomics: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Atomics',
+    } });
+//# sourceMappingURL=es2017.sharedmemory.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..58d86ca06271f7301d89f831f80ada8f96faa868
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2017.sharedmemory.js","sourceRoot":"","sources":["../../src/lib/es2017.sharedmemory.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,mDAAgD;AAChD,uEAAoE;AAEvD,QAAA,mBAAmB,GAAG,8CAC9B,6BAAa,GACb,iDAAuB,KAC1B,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,mBAAmB;KAC1B,EACD,4BAA4B,EAAE;QAC5B,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,8BAA8B;KACrC,EACD,gBAAgB,EAAE;QAChB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,kBAAkB;KACzB,EACD,OAAO,EAAE;QACP,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,SAAS;KAChB,GAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d666da6b7157ab929187e2cf6311e740d8a8fe2a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2017_string: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2017.string.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..c141c9b618f8891c6f3b4b025d016448e17f02c1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2017.string.d.ts","sourceRoot":"","sources":["../../src/lib/es2017.string.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,aAAa,4CAOqB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.js
new file mode 100644
index 0000000000000000000000000000000000000000..51d9181ac2f5c34882899618619358801a15bef6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2017_string = void 0;
+exports.es2017_string = {
+    String: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'String',
+    },
+};
+//# sourceMappingURL=es2017.string.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..f536a801fc79ef18e47e5ed1500b3d2a49dcee75
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2017.string.js","sourceRoot":"","sources":["../../src/lib/es2017.string.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,aAAa,GAAG;IAC3B,MAAM,EAAE;QACN,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,QAAQ;KACf;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c62bf4da34b9583ee3377798aae045b2545da2f6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2017_typedarrays: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2017.typedarrays.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..a5fdfc3566203623b576d025ddab936504cb58cf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2017.typedarrays.d.ts","sourceRoot":"","sources":["../../src/lib/es2017.typedarrays.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,kBAAkB,4CAuDgB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.js
new file mode 100644
index 0000000000000000000000000000000000000000..ef4cee5a52c00de3fbd6a5d664063a19f835cded
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.js
@@ -0,0 +1,63 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2017_typedarrays = void 0;
+exports.es2017_typedarrays = {
+    Int8ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int8ArrayConstructor',
+    },
+    Uint8ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint8ArrayConstructor',
+    },
+    Uint8ClampedArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint8ClampedArrayConstructor',
+    },
+    Int16ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int16ArrayConstructor',
+    },
+    Uint16ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint16ArrayConstructor',
+    },
+    Int32ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int32ArrayConstructor',
+    },
+    Uint32ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint32ArrayConstructor',
+    },
+    Float32ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Float32ArrayConstructor',
+    },
+    Float64ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Float64ArrayConstructor',
+    },
+};
+//# sourceMappingURL=es2017.typedarrays.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..448b55284a59f352a82af41c85752fe3f39c1ed9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2017.typedarrays.js","sourceRoot":"","sources":["../../src/lib/es2017.typedarrays.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,kBAAkB,GAAG;IAChC,oBAAoB,EAAE;QACpB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,sBAAsB;KAC7B;IACD,qBAAqB,EAAE;QACrB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,uBAAuB;KAC9B;IACD,4BAA4B,EAAE;QAC5B,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,8BAA8B;KACrC;IACD,qBAAqB,EAAE;QACrB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,uBAAuB;KAC9B;IACD,sBAAsB,EAAE;QACtB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,wBAAwB;KAC/B;IACD,qBAAqB,EAAE;QACrB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,uBAAuB;KAC9B;IACD,sBAAsB,EAAE;QACtB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,wBAAwB;KAC/B;IACD,uBAAuB,EAAE;QACvB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,yBAAyB;KAChC;IACD,uBAAuB,EAAE;QACvB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,yBAAyB;KAChC;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a62d132f6016198c1f325d53c92b7c3e6c2d5591
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2018_asyncgenerator: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2018.asyncgenerator.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..66d72e455823d6693ae33f99db9766b26a844db5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2018.asyncgenerator.d.ts","sourceRoot":"","sources":["../../src/lib/es2018.asyncgenerator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAGzD,eAAO,MAAM,qBAAqB,4CAoBa,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.js
new file mode 100644
index 0000000000000000000000000000000000000000..8d58ab5e982acd8e87aac962b8342cfbbf3ed0f4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.js
@@ -0,0 +1,24 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2018_asyncgenerator = void 0;
+const es2018_asynciterable_1 = require("./es2018.asynciterable");
+exports.es2018_asyncgenerator = Object.assign(Object.assign({}, es2018_asynciterable_1.es2018_asynciterable), { AsyncGenerator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AsyncGenerator',
+    }, AsyncGeneratorFunction: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AsyncGeneratorFunction',
+    }, AsyncGeneratorFunctionConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AsyncGeneratorFunctionConstructor',
+    } });
+//# sourceMappingURL=es2018.asyncgenerator.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..992b7c929eb8b378e44e61197eedad8eef1e3f7a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2018.asyncgenerator.js","sourceRoot":"","sources":["../../src/lib/es2018.asyncgenerator.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,iEAA8D;AAEjD,QAAA,qBAAqB,GAAG,gCAChC,2CAAoB,KACvB,cAAc,EAAE;QACd,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,gBAAgB;KACvB,EACD,sBAAsB,EAAE;QACtB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,wBAAwB;KAC/B,EACD,iCAAiC,EAAE;QACjC,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mCAAmC;KAC1C,GAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fe7dd494f9b9cd78c5839166a12546559bd07ca0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2018_asynciterable: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2018.asynciterable.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..b8d5be53f0d1307c065b45d532f4c70a0e7fdfa5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2018.asynciterable.d.ts","sourceRoot":"","sources":["../../src/lib/es2018.asynciterable.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAIzD,eAAO,MAAM,oBAAoB,4CA2Bc,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.js
new file mode 100644
index 0000000000000000000000000000000000000000..fafa6bb7c7083ce517f4cc2ad986147673aec769
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.js
@@ -0,0 +1,30 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2018_asynciterable = void 0;
+const es2015_symbol_1 = require("./es2015.symbol");
+const es2015_iterable_1 = require("./es2015.iterable");
+exports.es2018_asynciterable = Object.assign(Object.assign(Object.assign({}, es2015_symbol_1.es2015_symbol), es2015_iterable_1.es2015_iterable), { SymbolConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SymbolConstructor',
+    }, AsyncIterator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AsyncIterator',
+    }, AsyncIterable: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AsyncIterable',
+    }, AsyncIterableIterator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AsyncIterableIterator',
+    } });
+//# sourceMappingURL=es2018.asynciterable.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..361aa69dd179649de8f2e7d9989dfcc73fbcec76
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2018.asynciterable.js","sourceRoot":"","sources":["../../src/lib/es2018.asynciterable.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,mDAAgD;AAChD,uDAAoD;AAEvC,QAAA,oBAAoB,GAAG,8CAC/B,6BAAa,GACb,iCAAe,KAClB,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B,EACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB,EACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB,EACD,qBAAqB,EAAE;QACrB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,uBAAuB;KAC9B,GAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bee2f0a8874c246f659cd7f611224ff67ea160d8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2018: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2018.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e8155f85fe2759c045b3dbbfd395da1411160e7b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2018.d.ts","sourceRoot":"","sources":["../../src/lib/es2018.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAQzD,eAAO,MAAM,MAAM,4CAO4B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..11cc00c776caf3dcb719af03164d9d2b691e52d8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2018_full: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2018.full.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..db6b3f0b8bef208abab295c2afb584cb8c5ba023
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2018.full.d.ts","sourceRoot":"","sources":["../../src/lib/es2018.full.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAOzD,eAAO,MAAM,WAAW,4CAMuB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.js
new file mode 100644
index 0000000000000000000000000000000000000000..039b35bc627d92eabb9f4ae8221eafdc072da6aa
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.js
@@ -0,0 +1,13 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2018_full = void 0;
+const es2018_1 = require("./es2018");
+const dom_1 = require("./dom");
+const webworker_importscripts_1 = require("./webworker.importscripts");
+const scripthost_1 = require("./scripthost");
+const dom_iterable_1 = require("./dom.iterable");
+exports.es2018_full = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, es2018_1.es2018), dom_1.dom), webworker_importscripts_1.webworker_importscripts), scripthost_1.scripthost), dom_iterable_1.dom_iterable);
+//# sourceMappingURL=es2018.full.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..56b1f4e2ff9020775749112f74312873d6997813
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2018.full.js","sourceRoot":"","sources":["../../src/lib/es2018.full.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,qCAAkC;AAClC,+BAA4B;AAC5B,uEAAoE;AACpE,6CAA0C;AAC1C,iDAA8C;AAEjC,QAAA,WAAW,GAAG,0EACtB,eAAM,GACN,SAAG,GACH,iDAAuB,GACvB,uBAAU,GACV,2BAAY,CAC8B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d262e6ef240eb4f6984c50c9d56015e4e4c918c1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2018_intl: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2018.intl.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..19b35f0a4c5dfeacfa545eb8dc1e0e0318275700
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2018.intl.d.ts","sourceRoot":"","sources":["../../src/lib/es2018.intl.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,WAAW,4CAOuB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.js
new file mode 100644
index 0000000000000000000000000000000000000000..769ed3583faecfe19e7036d474f87c405a84a1b4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2018_intl = void 0;
+exports.es2018_intl = {
+    Intl: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Intl',
+    },
+};
+//# sourceMappingURL=es2018.intl.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..baec0edec0d1c4a415b177c866db97fad5ab0080
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2018.intl.js","sourceRoot":"","sources":["../../src/lib/es2018.intl.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,WAAW,GAAG;IACzB,IAAI,EAAE;QACJ,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,MAAM;KACb;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.js
new file mode 100644
index 0000000000000000000000000000000000000000..8c7883927051198cc9274cf7e5f89481f10821cd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.js
@@ -0,0 +1,14 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2018 = void 0;
+const es2017_1 = require("./es2017");
+const es2018_asynciterable_1 = require("./es2018.asynciterable");
+const es2018_asyncgenerator_1 = require("./es2018.asyncgenerator");
+const es2018_promise_1 = require("./es2018.promise");
+const es2018_regexp_1 = require("./es2018.regexp");
+const es2018_intl_1 = require("./es2018.intl");
+exports.es2018 = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, es2017_1.es2017), es2018_asynciterable_1.es2018_asynciterable), es2018_asyncgenerator_1.es2018_asyncgenerator), es2018_promise_1.es2018_promise), es2018_regexp_1.es2018_regexp), es2018_intl_1.es2018_intl);
+//# sourceMappingURL=es2018.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..247602fc27837d39d419716f7aa51935d0eeda9b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2018.js","sourceRoot":"","sources":["../../src/lib/es2018.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,qCAAkC;AAClC,iEAA8D;AAC9D,mEAAgE;AAChE,qDAAkD;AAClD,mDAAgD;AAChD,+CAA4C;AAE/B,QAAA,MAAM,GAAG,wFACjB,eAAM,GACN,2CAAoB,GACpB,6CAAqB,GACrB,+BAAc,GACd,6BAAa,GACb,yBAAW,CAC+B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b145cd236d75b0bb2e155b38bcb9674abe0a5d59
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2018_promise: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2018.promise.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..4f244488efe3dd66cc86c660373f76bf90cf58eb
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2018.promise.d.ts","sourceRoot":"","sources":["../../src/lib/es2018.promise.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,cAAc,4CAOoB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.js
new file mode 100644
index 0000000000000000000000000000000000000000..27e5ef1214bfd4c86c52e44de106fad64b64f5ba
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2018_promise = void 0;
+exports.es2018_promise = {
+    Promise: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Promise',
+    },
+};
+//# sourceMappingURL=es2018.promise.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..62968a0d43efc613858e87032a863a5251688ec3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2018.promise.js","sourceRoot":"","sources":["../../src/lib/es2018.promise.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,cAAc,GAAG;IAC5B,OAAO,EAAE;QACP,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,SAAS;KAChB;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..afcc4fbd39fb080f55de87947ec2d7fb761d4cd0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2018_regexp: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2018.regexp.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..371fba888a666700070914ef1e754bf340deef95
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2018.regexp.d.ts","sourceRoot":"","sources":["../../src/lib/es2018.regexp.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,aAAa,4CAmBqB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.js
new file mode 100644
index 0000000000000000000000000000000000000000..fc21009eb8213811f755f0216ea4e9d57ec03042
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.js
@@ -0,0 +1,27 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2018_regexp = void 0;
+exports.es2018_regexp = {
+    RegExpMatchArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RegExpMatchArray',
+    },
+    RegExpExecArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RegExpExecArray',
+    },
+    RegExp: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RegExp',
+    },
+};
+//# sourceMappingURL=es2018.regexp.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c5251059793c29ddda3212f81acc0a890a552def
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2018.regexp.js","sourceRoot":"","sources":["../../src/lib/es2018.regexp.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,aAAa,GAAG;IAC3B,gBAAgB,EAAE;QAChB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,kBAAkB;KACzB;IACD,eAAe,EAAE;QACf,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,iBAAiB;KACxB;IACD,MAAM,EAAE;QACN,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,QAAQ;KACf;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7de499ab389d4711019bd224ca761ac4b0e37127
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2019_array: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2019.array.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..85a5b81e40b79d56ec6fda458697af5572f00ac4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2019.array.d.ts","sourceRoot":"","sources":["../../src/lib/es2019.array.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,YAAY,4CAmBsB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.js
new file mode 100644
index 0000000000000000000000000000000000000000..8561f40696bead9eb4bbc0855282a31b9c4a5a72
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.js
@@ -0,0 +1,27 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2019_array = void 0;
+exports.es2019_array = {
+    FlatArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FlatArray',
+    },
+    ReadonlyArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadonlyArray',
+    },
+    Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Array',
+    },
+};
+//# sourceMappingURL=es2019.array.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..fde39349b97895518b7f3e037541da94a572fab0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2019.array.js","sourceRoot":"","sources":["../../src/lib/es2019.array.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,YAAY,GAAG;IAC1B,SAAS,EAAE;QACT,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,WAAW;KAClB;IACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB;IACD,KAAK,EAAE;QACL,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,OAAO;KACd;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..63a0c2394f9994e75edfb36bab7b91f5d94285cc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2019: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2019.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..d330a016d35b81a167358ba8297fc293babb9176
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2019.d.ts","sourceRoot":"","sources":["../../src/lib/es2019.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAOzD,eAAO,MAAM,MAAM,4CAM4B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fbd163b9b2eaca950b8db450fd314601856f1e01
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2019_full: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2019.full.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..7a75588f43c2aa02f3e74096fa8033a23f74c8db
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2019.full.d.ts","sourceRoot":"","sources":["../../src/lib/es2019.full.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAOzD,eAAO,MAAM,WAAW,4CAMuB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.js
new file mode 100644
index 0000000000000000000000000000000000000000..87e87c75f1132b2718d9e0ce5624c7fa8d083205
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.js
@@ -0,0 +1,13 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2019_full = void 0;
+const es2019_1 = require("./es2019");
+const dom_1 = require("./dom");
+const webworker_importscripts_1 = require("./webworker.importscripts");
+const scripthost_1 = require("./scripthost");
+const dom_iterable_1 = require("./dom.iterable");
+exports.es2019_full = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, es2019_1.es2019), dom_1.dom), webworker_importscripts_1.webworker_importscripts), scripthost_1.scripthost), dom_iterable_1.dom_iterable);
+//# sourceMappingURL=es2019.full.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..9043ff2470aa06c5a293f7acdde93a7278b0e479
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2019.full.js","sourceRoot":"","sources":["../../src/lib/es2019.full.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,qCAAkC;AAClC,+BAA4B;AAC5B,uEAAoE;AACpE,6CAA0C;AAC1C,iDAA8C;AAEjC,QAAA,WAAW,GAAG,0EACtB,eAAM,GACN,SAAG,GACH,iDAAuB,GACvB,uBAAU,GACV,2BAAY,CAC8B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.js
new file mode 100644
index 0000000000000000000000000000000000000000..b59dffbe92c1a0fc9a579b92d2917755f0da176a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.js
@@ -0,0 +1,13 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2019 = void 0;
+const es2018_1 = require("./es2018");
+const es2019_array_1 = require("./es2019.array");
+const es2019_object_1 = require("./es2019.object");
+const es2019_string_1 = require("./es2019.string");
+const es2019_symbol_1 = require("./es2019.symbol");
+exports.es2019 = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, es2018_1.es2018), es2019_array_1.es2019_array), es2019_object_1.es2019_object), es2019_string_1.es2019_string), es2019_symbol_1.es2019_symbol);
+//# sourceMappingURL=es2019.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..d1e0f25ea6effa56ebd65f48224b92a01bd71e91
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2019.js","sourceRoot":"","sources":["../../src/lib/es2019.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,qCAAkC;AAClC,iDAA8C;AAC9C,mDAAgD;AAChD,mDAAgD;AAChD,mDAAgD;AAEnC,QAAA,MAAM,GAAG,0EACjB,eAAM,GACN,2BAAY,GACZ,6BAAa,GACb,6BAAa,GACb,6BAAa,CAC6B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8e34cf5e73d48b64b7dccbd57ed0f834f3bb1a5b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2019_object: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2019.object.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..6cc0c03ebeb736e05c05305e5180e2af78895066
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2019.object.d.ts","sourceRoot":"","sources":["../../src/lib/es2019.object.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAGzD,eAAO,MAAM,aAAa,4CAQqB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.js
new file mode 100644
index 0000000000000000000000000000000000000000..b3c66920050d8342f19afe11d6c89c03e0f16b47
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.js
@@ -0,0 +1,14 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2019_object = void 0;
+const es2015_iterable_1 = require("./es2015.iterable");
+exports.es2019_object = Object.assign(Object.assign({}, es2015_iterable_1.es2015_iterable), { ObjectConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ObjectConstructor',
+    } });
+//# sourceMappingURL=es2019.object.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..d926a916ae3b0cc7bbcb199e3a27455015762906
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2019.object.js","sourceRoot":"","sources":["../../src/lib/es2019.object.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,uDAAoD;AAEvC,QAAA,aAAa,GAAG,gCACxB,iCAAe,KAClB,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B,GAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ff338dd56a3442bc0cb02240f380a00ca69e8d62
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2019_string: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2019.string.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..a2bf20136677f24462d3eefc7813c5a54a413974
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2019.string.d.ts","sourceRoot":"","sources":["../../src/lib/es2019.string.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,aAAa,4CAOqB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.js
new file mode 100644
index 0000000000000000000000000000000000000000..23884fae46120bdd42944cc783387da62ced8e24
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2019_string = void 0;
+exports.es2019_string = {
+    String: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'String',
+    },
+};
+//# sourceMappingURL=es2019.string.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..aba9cf9a7be0c26f22af8e72c36203d222e855c0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2019.string.js","sourceRoot":"","sources":["../../src/lib/es2019.string.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,aAAa,GAAG;IAC3B,MAAM,EAAE;QACN,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,QAAQ;KACf;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0a5f503afd082efa4e44e235ea1b4bf4570d41db
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2019_symbol: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2019.symbol.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..172b59f237276abfa5138bf0b9eff7a74717555c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2019.symbol.d.ts","sourceRoot":"","sources":["../../src/lib/es2019.symbol.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,aAAa,4CAOqB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.js
new file mode 100644
index 0000000000000000000000000000000000000000..c71974ba0d553f636fc990895ed6a9037bc0c101
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2019_symbol = void 0;
+exports.es2019_symbol = {
+    Symbol: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Symbol',
+    },
+};
+//# sourceMappingURL=es2019.symbol.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..9d29d8fa9f90236c4936581d49aa0f0c118d5c7a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2019.symbol.js","sourceRoot":"","sources":["../../src/lib/es2019.symbol.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,aAAa,GAAG;IAC3B,MAAM,EAAE;QACN,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,QAAQ;KACf;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4e2e1220ba2fa46488a4302e2f47e42ea6564b79
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2020_bigint: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2020.bigint.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..70995c8db7c75a9b8891ac136455aad4f7f43ecf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.bigint.d.ts","sourceRoot":"","sources":["../../src/lib/es2020.bigint.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,aAAa,4CAuDqB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.js
new file mode 100644
index 0000000000000000000000000000000000000000..625895c33640b3e235672676757c4e5e11abcce9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.js
@@ -0,0 +1,63 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2020_bigint = void 0;
+exports.es2020_bigint = {
+    BigIntToLocaleStringOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BigIntToLocaleStringOptions',
+    },
+    BigInt: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'BigInt',
+    },
+    BigIntConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BigIntConstructor',
+    },
+    BigInt64Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'BigInt64Array',
+    },
+    BigInt64ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BigInt64ArrayConstructor',
+    },
+    BigUint64Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'BigUint64Array',
+    },
+    BigUint64ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BigUint64ArrayConstructor',
+    },
+    DataView: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DataView',
+    },
+    Intl: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Intl',
+    },
+};
+//# sourceMappingURL=es2020.bigint.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..885f48d00b797f86296abc594518db3a73230e17
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.bigint.js","sourceRoot":"","sources":["../../src/lib/es2020.bigint.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,aAAa,GAAG;IAC3B,2BAA2B,EAAE;QAC3B,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,6BAA6B;KACpC;IACD,MAAM,EAAE;QACN,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,QAAQ;KACf;IACD,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B;IACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,eAAe;KACtB;IACD,wBAAwB,EAAE;QACxB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,0BAA0B;KACjC;IACD,cAAc,EAAE;QACd,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,gBAAgB;KACvB;IACD,yBAAyB,EAAE;QACzB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,2BAA2B;KAClC;IACD,QAAQ,EAAE;QACR,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,UAAU;KACjB;IACD,IAAI,EAAE;QACJ,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,MAAM;KACb;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6515a7aa2401cfc7eabd976738aeea7b6831fc14
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2020: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2020.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..63382ba85f61503af6d5206474d5bdecd45fda1b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.d.ts","sourceRoot":"","sources":["../../src/lib/es2020.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AASzD,eAAO,MAAM,MAAM,4CAQ4B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9574367112f98fd82b17d742af0b91eeb3304af0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2020_full: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2020.full.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..8bd0e9c3ac160d460de2122bcf58a633d602beed
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.full.d.ts","sourceRoot":"","sources":["../../src/lib/es2020.full.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAOzD,eAAO,MAAM,WAAW,4CAMuB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.js
new file mode 100644
index 0000000000000000000000000000000000000000..f0dc0bbf7326d60f18a85df156c30cb0b7c4b741
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.js
@@ -0,0 +1,13 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2020_full = void 0;
+const es2020_1 = require("./es2020");
+const dom_1 = require("./dom");
+const webworker_importscripts_1 = require("./webworker.importscripts");
+const scripthost_1 = require("./scripthost");
+const dom_iterable_1 = require("./dom.iterable");
+exports.es2020_full = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, es2020_1.es2020), dom_1.dom), webworker_importscripts_1.webworker_importscripts), scripthost_1.scripthost), dom_iterable_1.dom_iterable);
+//# sourceMappingURL=es2020.full.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e955800f7efe0a06eb400d5fdf88703046cba287
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.full.js","sourceRoot":"","sources":["../../src/lib/es2020.full.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,qCAAkC;AAClC,+BAA4B;AAC5B,uEAAoE;AACpE,6CAA0C;AAC1C,iDAA8C;AAEjC,QAAA,WAAW,GAAG,0EACtB,eAAM,GACN,SAAG,GACH,iDAAuB,GACvB,uBAAU,GACV,2BAAY,CAC8B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f2bbf09a809d110e0d47fb2998ce56712ef1cf90
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2020_intl: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2020.intl.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..fd5aeef6b717cfb0724948f3aefd4bd76d024e63
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.intl.d.ts","sourceRoot":"","sources":["../../src/lib/es2020.intl.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,WAAW,4CAOuB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.js
new file mode 100644
index 0000000000000000000000000000000000000000..fa32f47750f8624972096f3683b9343106036f9e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2020_intl = void 0;
+exports.es2020_intl = {
+    Intl: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Intl',
+    },
+};
+//# sourceMappingURL=es2020.intl.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c0ceb5ea04daba4ef02fe58413b6747b2d0ce07b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.intl.js","sourceRoot":"","sources":["../../src/lib/es2020.intl.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,WAAW,GAAG;IACzB,IAAI,EAAE;QACJ,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,MAAM;KACb;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.js
new file mode 100644
index 0000000000000000000000000000000000000000..c7a3a85a8f24fa1b3cbdbc207feaf83b4c1803a7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2020 = void 0;
+const es2019_1 = require("./es2019");
+const es2020_bigint_1 = require("./es2020.bigint");
+const es2020_promise_1 = require("./es2020.promise");
+const es2020_sharedmemory_1 = require("./es2020.sharedmemory");
+const es2020_string_1 = require("./es2020.string");
+const es2020_symbol_wellknown_1 = require("./es2020.symbol.wellknown");
+const es2020_intl_1 = require("./es2020.intl");
+exports.es2020 = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, es2019_1.es2019), es2020_bigint_1.es2020_bigint), es2020_promise_1.es2020_promise), es2020_sharedmemory_1.es2020_sharedmemory), es2020_string_1.es2020_string), es2020_symbol_wellknown_1.es2020_symbol_wellknown), es2020_intl_1.es2020_intl);
+//# sourceMappingURL=es2020.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..900d640ddaf4215c489f7da19a6f08623c6331ef
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.js","sourceRoot":"","sources":["../../src/lib/es2020.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,qCAAkC;AAClC,mDAAgD;AAChD,qDAAkD;AAClD,+DAA4D;AAC5D,mDAAgD;AAChD,uEAAoE;AACpE,+CAA4C;AAE/B,QAAA,MAAM,GAAG,sGACjB,eAAM,GACN,6BAAa,GACb,+BAAc,GACd,yCAAmB,GACnB,6BAAa,GACb,iDAAuB,GACvB,yBAAW,CAC+B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bac68d1fc33ce28351e4d6d4b562671d768ffb67
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2020_promise: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2020.promise.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..33b4c473c9d5312ba38552e1b3032d724670684b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.promise.d.ts","sourceRoot":"","sources":["../../src/lib/es2020.promise.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,cAAc,4CAyBoB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.js
new file mode 100644
index 0000000000000000000000000000000000000000..6650bedf895da518d23e693a608e35fca848bd09
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.js
@@ -0,0 +1,33 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2020_promise = void 0;
+exports.es2020_promise = {
+    PromiseFulfilledResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PromiseFulfilledResult',
+    },
+    PromiseRejectedResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PromiseRejectedResult',
+    },
+    PromiseSettledResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PromiseSettledResult',
+    },
+    PromiseConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PromiseConstructor',
+    },
+};
+//# sourceMappingURL=es2020.promise.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..1dbd10fa610ba0f595afb4655cdf4237030ef396
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.promise.js","sourceRoot":"","sources":["../../src/lib/es2020.promise.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,cAAc,GAAG;IAC5B,sBAAsB,EAAE;QACtB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,wBAAwB;KAC/B;IACD,qBAAqB,EAAE;QACrB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,uBAAuB;KAC9B;IACD,oBAAoB,EAAE;QACpB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,sBAAsB;KAC7B;IACD,kBAAkB,EAAE;QAClB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,oBAAoB;KAC3B;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cd2818319b6ec0e1c796aa886af44e0a8a22be67
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2020_sharedmemory: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2020.sharedmemory.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..79cca7af6d2c12c929858b22f18f78b2dcf0df88
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.sharedmemory.d.ts","sourceRoot":"","sources":["../../src/lib/es2020.sharedmemory.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,mBAAmB,4CAOe,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e4ce7457fc6ea739a74c89bae42c862ba9c007c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2020_sharedmemory = void 0;
+exports.es2020_sharedmemory = {
+    Atomics: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Atomics',
+    },
+};
+//# sourceMappingURL=es2020.sharedmemory.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..1ea63f3ea53f7a7dce3ce8b574d2e110ae5f5eec
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.sharedmemory.js","sourceRoot":"","sources":["../../src/lib/es2020.sharedmemory.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,mBAAmB,GAAG;IACjC,OAAO,EAAE;QACP,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,SAAS;KAChB;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..17dd64b9abac511f68662ab90b54099a8754603d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2020_string: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2020.string.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..b2d3f9cad9eb76d258af372766aa36ca9a8c5201
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.string.d.ts","sourceRoot":"","sources":["../../src/lib/es2020.string.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAGzD,eAAO,MAAM,aAAa,4CAQqB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb7451e9c6f6a52d950fd52601bce374993eabcf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.js
@@ -0,0 +1,14 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2020_string = void 0;
+const es2015_iterable_1 = require("./es2015.iterable");
+exports.es2020_string = Object.assign(Object.assign({}, es2015_iterable_1.es2015_iterable), { String: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'String',
+    } });
+//# sourceMappingURL=es2020.string.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b13bab139d173679ffb84940b8f5bc5a26b858aa
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.string.js","sourceRoot":"","sources":["../../src/lib/es2020.string.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,uDAAoD;AAEvC,QAAA,aAAa,GAAG,gCACxB,iCAAe,KAClB,MAAM,EAAE;QACN,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,QAAQ;KACf,GAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..62f06ebaab07bbc0f80ce08acd7161c657d18f9b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es2020_symbol_wellknown: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es2020.symbol.wellknown.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e4de6204ffe1e977628917c8ad6b1152145c9d4c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.symbol.wellknown.d.ts","sourceRoot":"","sources":["../../src/lib/es2020.symbol.wellknown.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAIzD,eAAO,MAAM,uBAAuB,4CAeW,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.js
new file mode 100644
index 0000000000000000000000000000000000000000..0dd89aa2f091d58bbaa612b5db33bc4ba5e16853
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.js
@@ -0,0 +1,20 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es2020_symbol_wellknown = void 0;
+const es2015_iterable_1 = require("./es2015.iterable");
+const es2015_symbol_1 = require("./es2015.symbol");
+exports.es2020_symbol_wellknown = Object.assign(Object.assign(Object.assign({}, es2015_iterable_1.es2015_iterable), es2015_symbol_1.es2015_symbol), { SymbolConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SymbolConstructor',
+    }, RegExp: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RegExp',
+    } });
+//# sourceMappingURL=es2020.symbol.wellknown.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..1e220dfca26302c5b951ee00b01dc44e60826f9e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es2020.symbol.wellknown.js","sourceRoot":"","sources":["../../src/lib/es2020.symbol.wellknown.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,uDAAoD;AACpD,mDAAgD;AAEnC,QAAA,uBAAuB,GAAG,8CAClC,iCAAe,GACf,6BAAa,KAChB,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B,EACD,MAAM,EAAE;QACN,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,QAAQ;KACf,GAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..65478e0e9e849f55bb88fa45b7bdb95068b91ea0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es5: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es5.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..c336b00edd75295319624a44c31eab4d343916cf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es5.d.ts","sourceRoot":"","sources":["../../src/lib/es5.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,GAAG,4CAylB+B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.js
new file mode 100644
index 0000000000000000000000000000000000000000..30253c11016bbadc968b6efa7b1212eee97515a4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.js
@@ -0,0 +1,609 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es5 = void 0;
+exports.es5 = {
+    Symbol: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Symbol',
+    },
+    PropertyKey: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PropertyKey',
+    },
+    PropertyDescriptor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PropertyDescriptor',
+    },
+    PropertyDescriptorMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PropertyDescriptorMap',
+    },
+    Object: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Object',
+    },
+    ObjectConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ObjectConstructor',
+    },
+    Function: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Function',
+    },
+    FunctionConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FunctionConstructor',
+    },
+    ThisParameterType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ThisParameterType',
+    },
+    OmitThisParameter: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OmitThisParameter',
+    },
+    CallableFunction: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CallableFunction',
+    },
+    NewableFunction: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NewableFunction',
+    },
+    IArguments: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IArguments',
+    },
+    String: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'String',
+    },
+    StringConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'StringConstructor',
+    },
+    Boolean: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Boolean',
+    },
+    BooleanConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BooleanConstructor',
+    },
+    Number: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Number',
+    },
+    NumberConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NumberConstructor',
+    },
+    TemplateStringsArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TemplateStringsArray',
+    },
+    ImportMeta: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ImportMeta',
+    },
+    Math: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Math',
+    },
+    Date: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Date',
+    },
+    DateConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DateConstructor',
+    },
+    RegExpMatchArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RegExpMatchArray',
+    },
+    RegExpExecArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RegExpExecArray',
+    },
+    RegExp: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RegExp',
+    },
+    RegExpConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RegExpConstructor',
+    },
+    Error: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Error',
+    },
+    ErrorConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ErrorConstructor',
+    },
+    EvalError: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'EvalError',
+    },
+    EvalErrorConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EvalErrorConstructor',
+    },
+    RangeError: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'RangeError',
+    },
+    RangeErrorConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RangeErrorConstructor',
+    },
+    ReferenceError: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ReferenceError',
+    },
+    ReferenceErrorConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReferenceErrorConstructor',
+    },
+    SyntaxError: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SyntaxError',
+    },
+    SyntaxErrorConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SyntaxErrorConstructor',
+    },
+    TypeError: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TypeError',
+    },
+    TypeErrorConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TypeErrorConstructor',
+    },
+    URIError: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'URIError',
+    },
+    URIErrorConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'URIErrorConstructor',
+    },
+    JSON: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'JSON',
+    },
+    ReadonlyArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadonlyArray',
+    },
+    ConcatArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConcatArray',
+    },
+    Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Array',
+    },
+    ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ArrayConstructor',
+    },
+    TypedPropertyDescriptor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TypedPropertyDescriptor',
+    },
+    ClassDecorator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ClassDecorator',
+    },
+    PropertyDecorator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PropertyDecorator',
+    },
+    MethodDecorator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MethodDecorator',
+    },
+    ParameterDecorator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ParameterDecorator',
+    },
+    PromiseConstructorLike: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PromiseConstructorLike',
+    },
+    PromiseLike: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PromiseLike',
+    },
+    Promise: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Promise',
+    },
+    ArrayLike: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ArrayLike',
+    },
+    Partial: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Partial',
+    },
+    Required: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Required',
+    },
+    Readonly: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Readonly',
+    },
+    Pick: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Pick',
+    },
+    Record: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Record',
+    },
+    Exclude: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Exclude',
+    },
+    Extract: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Extract',
+    },
+    Omit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Omit',
+    },
+    NonNullable: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NonNullable',
+    },
+    Parameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Parameters',
+    },
+    ConstructorParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConstructorParameters',
+    },
+    ReturnType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReturnType',
+    },
+    InstanceType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'InstanceType',
+    },
+    Uppercase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uppercase',
+    },
+    Lowercase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Lowercase',
+    },
+    Capitalize: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Capitalize',
+    },
+    Uncapitalize: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uncapitalize',
+    },
+    ThisType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ThisType',
+    },
+    ArrayBuffer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ArrayBuffer',
+    },
+    ArrayBufferTypes: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ArrayBufferTypes',
+    },
+    ArrayBufferLike: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ArrayBufferLike',
+    },
+    ArrayBufferConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ArrayBufferConstructor',
+    },
+    ArrayBufferView: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ArrayBufferView',
+    },
+    DataView: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DataView',
+    },
+    DataViewConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DataViewConstructor',
+    },
+    Int8Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Int8Array',
+    },
+    Int8ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int8ArrayConstructor',
+    },
+    Uint8Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Uint8Array',
+    },
+    Uint8ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint8ArrayConstructor',
+    },
+    Uint8ClampedArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Uint8ClampedArray',
+    },
+    Uint8ClampedArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint8ClampedArrayConstructor',
+    },
+    Int16Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Int16Array',
+    },
+    Int16ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int16ArrayConstructor',
+    },
+    Uint16Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Uint16Array',
+    },
+    Uint16ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint16ArrayConstructor',
+    },
+    Int32Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Int32Array',
+    },
+    Int32ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int32ArrayConstructor',
+    },
+    Uint32Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Uint32Array',
+    },
+    Uint32ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint32ArrayConstructor',
+    },
+    Float32Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Float32Array',
+    },
+    Float32ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Float32ArrayConstructor',
+    },
+    Float64Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Float64Array',
+    },
+    Float64ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Float64ArrayConstructor',
+    },
+    Intl: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Intl',
+    },
+};
+//# sourceMappingURL=es5.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..306366c5ec6b52e32a87f91132ffd8cb68347101
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es5.js","sourceRoot":"","sources":["../../src/lib/es5.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..448148ed33b7793a9fce4e8e058e67affffb0a8e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es6: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es6.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..b8b38ac16f397002313840ca35896691c4ccee43
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es6.d.ts","sourceRoot":"","sources":["../../src/lib/es6.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAYzD,eAAO,MAAM,GAAG,4CAW+B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.js
new file mode 100644
index 0000000000000000000000000000000000000000..3fdf1b46276612a8c0bd2d69c4454d6d81a00c98
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.js
@@ -0,0 +1,18 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es6 = void 0;
+const es5_1 = require("./es5");
+const es2015_core_1 = require("./es2015.core");
+const es2015_collection_1 = require("./es2015.collection");
+const es2015_iterable_1 = require("./es2015.iterable");
+const es2015_generator_1 = require("./es2015.generator");
+const es2015_promise_1 = require("./es2015.promise");
+const es2015_proxy_1 = require("./es2015.proxy");
+const es2015_reflect_1 = require("./es2015.reflect");
+const es2015_symbol_1 = require("./es2015.symbol");
+const es2015_symbol_wellknown_1 = require("./es2015.symbol.wellknown");
+exports.es6 = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, es5_1.es5), es2015_core_1.es2015_core), es2015_collection_1.es2015_collection), es2015_iterable_1.es2015_iterable), es2015_generator_1.es2015_generator), es2015_promise_1.es2015_promise), es2015_proxy_1.es2015_proxy), es2015_reflect_1.es2015_reflect), es2015_symbol_1.es2015_symbol), es2015_symbol_wellknown_1.es2015_symbol_wellknown);
+//# sourceMappingURL=es6.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..f03b45e304c6a2c388980cce6e19df8b326f90a0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es6.js","sourceRoot":"","sources":["../../src/lib/es6.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,+BAA4B;AAC5B,+CAA4C;AAC5C,2DAAwD;AACxD,uDAAoD;AACpD,yDAAsD;AACtD,qDAAkD;AAClD,iDAA8C;AAC9C,qDAAkD;AAClD,mDAAgD;AAChD,uEAAoE;AAEvD,QAAA,GAAG,GAAG,gJACd,SAAG,GACH,yBAAW,GACX,qCAAiB,GACjB,iCAAe,GACf,mCAAgB,GAChB,+BAAc,GACd,2BAAY,GACZ,+BAAc,GACd,6BAAa,GACb,iDAAuB,CACmB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bb2bebda5bb0f3f411d362904c564e91c8dfcd70
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const es7: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=es7.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..f0edb6e2b95283e31c850cddeca90ffed8ceff02
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"es7.d.ts","sourceRoot":"","sources":["../../src/lib/es7.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAIzD,eAAO,MAAM,GAAG,4CAG+B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.js
new file mode 100644
index 0000000000000000000000000000000000000000..029cb52a157f491d8b3fb53a50193d401eb8aec5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.js
@@ -0,0 +1,10 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.es7 = void 0;
+const es2015_1 = require("./es2015");
+const es2016_array_include_1 = require("./es2016.array.include");
+exports.es7 = Object.assign(Object.assign({}, es2015_1.es2015), es2016_array_include_1.es2016_array_include);
+//# sourceMappingURL=es7.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..9fe94f9d62b4a79d01552f9abb7db79d27948067
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"es7.js","sourceRoot":"","sources":["../../src/lib/es7.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,qCAAkC;AAClC,iEAA8D;AAEjD,QAAA,GAAG,GAAG,gCACd,eAAM,GACN,2CAAoB,CACsB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..276c04f7a5eb4135775fb3f41d4d612f4df64041
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const esnext_array: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=esnext.array.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..d3f7ae6f8ebb26129720930553681b2d63cc1588
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.array.d.ts","sourceRoot":"","sources":["../../src/lib/esnext.array.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,YAAY,4CAmBsB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.js
new file mode 100644
index 0000000000000000000000000000000000000000..716509406e2d6f1ec88a05283f1080dc681ddf59
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.js
@@ -0,0 +1,27 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.esnext_array = void 0;
+exports.esnext_array = {
+    FlatArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FlatArray',
+    },
+    ReadonlyArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadonlyArray',
+    },
+    Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Array',
+    },
+};
+//# sourceMappingURL=esnext.array.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..72c450ae4ca234ff488bf6fcafc2b8f4dd8936ab
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.array.js","sourceRoot":"","sources":["../../src/lib/esnext.array.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,YAAY,GAAG;IAC1B,SAAS,EAAE;QACT,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,WAAW;KAClB;IACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB;IACD,KAAK,EAAE;QACL,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,OAAO;KACd;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c1765d02f3e10f508080dc4f460ec2a75e172d31
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const esnext_asynciterable: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=esnext.asynciterable.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..4bc2c4a61c9dfa7f819567e241f40199a8d0924d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.asynciterable.d.ts","sourceRoot":"","sources":["../../src/lib/esnext.asynciterable.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAIzD,eAAO,MAAM,oBAAoB,4CA2Bc,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.js
new file mode 100644
index 0000000000000000000000000000000000000000..00ac9b168afcb1780ef30c326643bcdfd7b9a7c4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.js
@@ -0,0 +1,30 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.esnext_asynciterable = void 0;
+const es2015_symbol_1 = require("./es2015.symbol");
+const es2015_iterable_1 = require("./es2015.iterable");
+exports.esnext_asynciterable = Object.assign(Object.assign(Object.assign({}, es2015_symbol_1.es2015_symbol), es2015_iterable_1.es2015_iterable), { SymbolConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SymbolConstructor',
+    }, AsyncIterator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AsyncIterator',
+    }, AsyncIterable: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AsyncIterable',
+    }, AsyncIterableIterator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AsyncIterableIterator',
+    } });
+//# sourceMappingURL=esnext.asynciterable.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..bc3312d273099df438e8204a827360daf8ece9e4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.asynciterable.js","sourceRoot":"","sources":["../../src/lib/esnext.asynciterable.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,mDAAgD;AAChD,uDAAoD;AAEvC,QAAA,oBAAoB,GAAG,8CAC/B,6BAAa,GACb,iCAAe,KAClB,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B,EACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB,EACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB,EACD,qBAAqB,EAAE;QACrB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,uBAAuB;KAC9B,GAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..411e2a444c580acaf5a8bd193f5ab964f944b35d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const esnext_bigint: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=esnext.bigint.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..69b5ddde2cfab4487080c6d1ba8e0835f7259398
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.bigint.d.ts","sourceRoot":"","sources":["../../src/lib/esnext.bigint.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,aAAa,4CAuDqB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.js
new file mode 100644
index 0000000000000000000000000000000000000000..ea080ba2df4772e7bf2198b26b76b3bc39979b03
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.js
@@ -0,0 +1,63 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.esnext_bigint = void 0;
+exports.esnext_bigint = {
+    BigIntToLocaleStringOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BigIntToLocaleStringOptions',
+    },
+    BigInt: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'BigInt',
+    },
+    BigIntConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BigIntConstructor',
+    },
+    BigInt64Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'BigInt64Array',
+    },
+    BigInt64ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BigInt64ArrayConstructor',
+    },
+    BigUint64Array: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'BigUint64Array',
+    },
+    BigUint64ArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BigUint64ArrayConstructor',
+    },
+    DataView: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DataView',
+    },
+    Intl: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Intl',
+    },
+};
+//# sourceMappingURL=esnext.bigint.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..44d4092fbe1a61a698c26f4d8d969ce5f3a9bf64
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.bigint.js","sourceRoot":"","sources":["../../src/lib/esnext.bigint.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,aAAa,GAAG;IAC3B,2BAA2B,EAAE;QAC3B,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,6BAA6B;KACpC;IACD,MAAM,EAAE;QACN,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,QAAQ;KACf;IACD,iBAAiB,EAAE;QACjB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,mBAAmB;KAC1B;IACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,eAAe;KACtB;IACD,wBAAwB,EAAE;QACxB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,0BAA0B;KACjC;IACD,cAAc,EAAE;QACd,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,gBAAgB;KACvB;IACD,yBAAyB,EAAE;QACzB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,2BAA2B;KAClC;IACD,QAAQ,EAAE;QACR,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,UAAU;KACjB;IACD,IAAI,EAAE;QACJ,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,MAAM;KACb;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b082597e00b42a6a8069a2673481e4276c060199
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const esnext: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=esnext.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..b62c3830ad0245794bb0d65b3a087573fd757691
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.d.ts","sourceRoot":"","sources":["../../src/lib/esnext.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAOzD,eAAO,MAAM,MAAM,4CAM4B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2518eb1dbaff91025395034f8ca9a315a2e25a3e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const esnext_full: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=esnext.full.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..7fd743b13dee2d885f32f18007e61e0e86e407e7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.full.d.ts","sourceRoot":"","sources":["../../src/lib/esnext.full.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAOzD,eAAO,MAAM,WAAW,4CAMuB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f2ac415ff1bc7398b9506970ef38e5c038c61f2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.js
@@ -0,0 +1,13 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.esnext_full = void 0;
+const esnext_1 = require("./esnext");
+const dom_1 = require("./dom");
+const webworker_importscripts_1 = require("./webworker.importscripts");
+const scripthost_1 = require("./scripthost");
+const dom_iterable_1 = require("./dom.iterable");
+exports.esnext_full = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, esnext_1.esnext), dom_1.dom), webworker_importscripts_1.webworker_importscripts), scripthost_1.scripthost), dom_iterable_1.dom_iterable);
+//# sourceMappingURL=esnext.full.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..f2f15ff9b807989ba5c463d365eeab0ccaf5977f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.full.js","sourceRoot":"","sources":["../../src/lib/esnext.full.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,qCAAkC;AAClC,+BAA4B;AAC5B,uEAAoE;AACpE,6CAA0C;AAC1C,iDAA8C;AAEjC,QAAA,WAAW,GAAG,0EACtB,eAAM,GACN,SAAG,GACH,iDAAuB,GACvB,uBAAU,GACV,2BAAY,CAC8B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7edf1b124f9e52747392c2befeada3bea767c739
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const esnext_intl: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=esnext.intl.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..f955c84253d13bf9eef3c15a302bc4337574ff8b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.intl.d.ts","sourceRoot":"","sources":["../../src/lib/esnext.intl.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,WAAW,4CAOuB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.js
new file mode 100644
index 0000000000000000000000000000000000000000..7e87a0e7a53ad98c8ab2967350863a732b5c964f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.esnext_intl = void 0;
+exports.esnext_intl = {
+    Intl: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Intl',
+    },
+};
+//# sourceMappingURL=esnext.intl.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c1d75c5f8977eb0ac952d9c940fe794c8fa8ec5c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.intl.js","sourceRoot":"","sources":["../../src/lib/esnext.intl.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,WAAW,GAAG;IACzB,IAAI,EAAE;QACJ,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,MAAM;KACb;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.js
new file mode 100644
index 0000000000000000000000000000000000000000..97a2a480f8ca77a7947b52b9f20d3076b1389e2d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.js
@@ -0,0 +1,13 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.esnext = void 0;
+const es2020_1 = require("./es2020");
+const esnext_intl_1 = require("./esnext.intl");
+const esnext_string_1 = require("./esnext.string");
+const esnext_promise_1 = require("./esnext.promise");
+const esnext_weakref_1 = require("./esnext.weakref");
+exports.esnext = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, es2020_1.es2020), esnext_intl_1.esnext_intl), esnext_string_1.esnext_string), esnext_promise_1.esnext_promise), esnext_weakref_1.esnext_weakref);
+//# sourceMappingURL=esnext.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..4f5e21526490092e077cb3e7dd4d91bc22944745
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.js","sourceRoot":"","sources":["../../src/lib/esnext.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,qCAAkC;AAClC,+CAA4C;AAC5C,mDAAgD;AAChD,qDAAkD;AAClD,qDAAkD;AAErC,QAAA,MAAM,GAAG,0EACjB,eAAM,GACN,yBAAW,GACX,6BAAa,GACb,+BAAc,GACd,+BAAc,CAC4B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cea7a9acf735d29469a43108285315fb405b11b4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const esnext_promise: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=esnext.promise.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..5421852e404db621679314570f6e2605304dc5d2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.promise.d.ts","sourceRoot":"","sources":["../../src/lib/esnext.promise.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,cAAc,4CAmBoB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e297b69b8da1b7813bb76aa32343c1c8f850c7b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.js
@@ -0,0 +1,27 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.esnext_promise = void 0;
+exports.esnext_promise = {
+    AggregateError: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AggregateError',
+    },
+    AggregateErrorConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AggregateErrorConstructor',
+    },
+    PromiseConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PromiseConstructor',
+    },
+};
+//# sourceMappingURL=esnext.promise.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..aca57a1cbea57d521f05874d88178a4217a8d66c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.promise.js","sourceRoot":"","sources":["../../src/lib/esnext.promise.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,cAAc,GAAG;IAC5B,cAAc,EAAE;QACd,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,gBAAgB;KACvB;IACD,yBAAyB,EAAE;QACzB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,2BAA2B;KAClC;IACD,kBAAkB,EAAE;QAClB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,oBAAoB;KAC3B;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f16c10ecec513f6df1b463031ef3697340c86f44
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const esnext_string: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=esnext.string.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..32451ca31335fbfd54bb4fd6a5ab5799bf003685
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.string.d.ts","sourceRoot":"","sources":["../../src/lib/esnext.string.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,aAAa,4CAOqB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.js
new file mode 100644
index 0000000000000000000000000000000000000000..5cec00be615e29c45e8aa0e53e60c065c50b08d8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.esnext_string = void 0;
+exports.esnext_string = {
+    String: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'String',
+    },
+};
+//# sourceMappingURL=esnext.string.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..714de47ee0490eabef88abf999e96f29fa4f0677
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.string.js","sourceRoot":"","sources":["../../src/lib/esnext.string.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,aAAa,GAAG;IAC3B,MAAM,EAAE;QACN,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,QAAQ;KACf;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ecc40efc4e2cbb756c2ece580e47c1f897996948
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const esnext_symbol: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=esnext.symbol.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..ac7c90a567a827486afda611a76db7ba3867f62f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.symbol.d.ts","sourceRoot":"","sources":["../../src/lib/esnext.symbol.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,aAAa,4CAOqB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.js
new file mode 100644
index 0000000000000000000000000000000000000000..72e7bc2276f967214642dd0c29774697b74a8b17
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.js
@@ -0,0 +1,15 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.esnext_symbol = void 0;
+exports.esnext_symbol = {
+    Symbol: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Symbol',
+    },
+};
+//# sourceMappingURL=esnext.symbol.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..605f87c5cfae96efae3f0dd94b19a8f6957a7c94
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.symbol.js","sourceRoot":"","sources":["../../src/lib/esnext.symbol.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,aAAa,GAAG;IAC3B,MAAM,EAAE;QACN,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,QAAQ;KACf;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d111a0bbfc10fa36dd01b07b89fde8aac8faa4db
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const esnext_weakref: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=esnext.weakref.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..21637f941ff2d77a283d0bb838cd52852d9d302f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.weakref.d.ts","sourceRoot":"","sources":["../../src/lib/esnext.weakref.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,cAAc,4CAyBoB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.js
new file mode 100644
index 0000000000000000000000000000000000000000..ff63913509b5edea6b1cc96cb8b2387f1a7b27fa
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.js
@@ -0,0 +1,33 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.esnext_weakref = void 0;
+exports.esnext_weakref = {
+    WeakRef: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WeakRef',
+    },
+    WeakRefConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WeakRefConstructor',
+    },
+    FinalizationRegistry: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'FinalizationRegistry',
+    },
+    FinalizationRegistryConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FinalizationRegistryConstructor',
+    },
+};
+//# sourceMappingURL=esnext.weakref.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..286e93fefa911c28521d9a8e8d6d40164097e4f4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"esnext.weakref.js","sourceRoot":"","sources":["../../src/lib/esnext.weakref.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,cAAc,GAAG;IAC5B,OAAO,EAAE;QACP,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,SAAS;KAChB;IACD,kBAAkB,EAAE;QAClB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,oBAAoB;KAC3B;IACD,oBAAoB,EAAE;QACpB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,sBAAsB;KAC7B;IACD,+BAA+B,EAAE;QAC/B,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,iCAAiC;KACxC;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/index.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..eccb0465ce08ab1b4d281107b933074d4e7f26d8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/index.d.ts
@@ -0,0 +1,65 @@
+declare const lib: {
+    readonly es5: Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly es6: Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly es2015: Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly es7: Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly es2016: Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly es2017: Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly es2018: Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly es2019: Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly es2020: Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly esnext: Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly dom: Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'dom.iterable': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly webworker: Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'webworker.importscripts': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'webworker.iterable': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly scripthost: Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2015.core': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2015.collection': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2015.generator': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2015.iterable': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2015.promise': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2015.proxy': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2015.reflect': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2015.symbol': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2015.symbol.wellknown': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2016.array.include': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2017.object': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2017.sharedmemory': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2017.string': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2017.intl': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2017.typedarrays': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2018.asyncgenerator': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2018.asynciterable': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2018.intl': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2018.promise': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2018.regexp': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2019.array': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2019.object': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2019.string': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2019.symbol': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2020.bigint': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2020.promise': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2020.sharedmemory': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2020.string': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2020.symbol.wellknown': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2020.intl': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'esnext.array': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'esnext.symbol': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'esnext.asynciterable': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'esnext.intl': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'esnext.bigint': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'esnext.string': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'esnext.promise': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'esnext.weakref': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2016.full': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2017.full': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2018.full': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2019.full': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'es2020.full': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly 'esnext.full': Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+    readonly lib: Record<string, import("../variable/ImplicitLibVariable").ImplicitLibVariableOptions>;
+};
+export { lib };
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/index.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..5418201ced8b846ba188d881775c28f0960d930b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAkEA,QAAA,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8DC,CAAC;AAEX,OAAO,EAAE,GAAG,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/index.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..50553a9deebdc1d2c4a35ff308e8c0adccb8f2ea
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/index.js
@@ -0,0 +1,132 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.lib = void 0;
+const es5_1 = require("./es5");
+const es6_1 = require("./es6");
+const es2015_1 = require("./es2015");
+const es7_1 = require("./es7");
+const es2016_1 = require("./es2016");
+const es2017_1 = require("./es2017");
+const es2018_1 = require("./es2018");
+const es2019_1 = require("./es2019");
+const es2020_1 = require("./es2020");
+const esnext_1 = require("./esnext");
+const dom_1 = require("./dom");
+const dom_iterable_1 = require("./dom.iterable");
+const webworker_1 = require("./webworker");
+const webworker_importscripts_1 = require("./webworker.importscripts");
+const webworker_iterable_1 = require("./webworker.iterable");
+const scripthost_1 = require("./scripthost");
+const es2015_core_1 = require("./es2015.core");
+const es2015_collection_1 = require("./es2015.collection");
+const es2015_generator_1 = require("./es2015.generator");
+const es2015_iterable_1 = require("./es2015.iterable");
+const es2015_promise_1 = require("./es2015.promise");
+const es2015_proxy_1 = require("./es2015.proxy");
+const es2015_reflect_1 = require("./es2015.reflect");
+const es2015_symbol_1 = require("./es2015.symbol");
+const es2015_symbol_wellknown_1 = require("./es2015.symbol.wellknown");
+const es2016_array_include_1 = require("./es2016.array.include");
+const es2017_object_1 = require("./es2017.object");
+const es2017_sharedmemory_1 = require("./es2017.sharedmemory");
+const es2017_string_1 = require("./es2017.string");
+const es2017_intl_1 = require("./es2017.intl");
+const es2017_typedarrays_1 = require("./es2017.typedarrays");
+const es2018_asyncgenerator_1 = require("./es2018.asyncgenerator");
+const es2018_asynciterable_1 = require("./es2018.asynciterable");
+const es2018_intl_1 = require("./es2018.intl");
+const es2018_promise_1 = require("./es2018.promise");
+const es2018_regexp_1 = require("./es2018.regexp");
+const es2019_array_1 = require("./es2019.array");
+const es2019_object_1 = require("./es2019.object");
+const es2019_string_1 = require("./es2019.string");
+const es2019_symbol_1 = require("./es2019.symbol");
+const es2020_bigint_1 = require("./es2020.bigint");
+const es2020_promise_1 = require("./es2020.promise");
+const es2020_sharedmemory_1 = require("./es2020.sharedmemory");
+const es2020_string_1 = require("./es2020.string");
+const es2020_symbol_wellknown_1 = require("./es2020.symbol.wellknown");
+const es2020_intl_1 = require("./es2020.intl");
+const esnext_array_1 = require("./esnext.array");
+const esnext_symbol_1 = require("./esnext.symbol");
+const esnext_asynciterable_1 = require("./esnext.asynciterable");
+const esnext_intl_1 = require("./esnext.intl");
+const esnext_bigint_1 = require("./esnext.bigint");
+const esnext_string_1 = require("./esnext.string");
+const esnext_promise_1 = require("./esnext.promise");
+const esnext_weakref_1 = require("./esnext.weakref");
+const es2016_full_1 = require("./es2016.full");
+const es2017_full_1 = require("./es2017.full");
+const es2018_full_1 = require("./es2018.full");
+const es2019_full_1 = require("./es2019.full");
+const es2020_full_1 = require("./es2020.full");
+const esnext_full_1 = require("./esnext.full");
+const lib_1 = require("./lib");
+const lib = {
+    es5: es5_1.es5,
+    es6: es6_1.es6,
+    es2015: es2015_1.es2015,
+    es7: es7_1.es7,
+    es2016: es2016_1.es2016,
+    es2017: es2017_1.es2017,
+    es2018: es2018_1.es2018,
+    es2019: es2019_1.es2019,
+    es2020: es2020_1.es2020,
+    esnext: esnext_1.esnext,
+    dom: dom_1.dom,
+    'dom.iterable': dom_iterable_1.dom_iterable,
+    webworker: webworker_1.webworker,
+    'webworker.importscripts': webworker_importscripts_1.webworker_importscripts,
+    'webworker.iterable': webworker_iterable_1.webworker_iterable,
+    scripthost: scripthost_1.scripthost,
+    'es2015.core': es2015_core_1.es2015_core,
+    'es2015.collection': es2015_collection_1.es2015_collection,
+    'es2015.generator': es2015_generator_1.es2015_generator,
+    'es2015.iterable': es2015_iterable_1.es2015_iterable,
+    'es2015.promise': es2015_promise_1.es2015_promise,
+    'es2015.proxy': es2015_proxy_1.es2015_proxy,
+    'es2015.reflect': es2015_reflect_1.es2015_reflect,
+    'es2015.symbol': es2015_symbol_1.es2015_symbol,
+    'es2015.symbol.wellknown': es2015_symbol_wellknown_1.es2015_symbol_wellknown,
+    'es2016.array.include': es2016_array_include_1.es2016_array_include,
+    'es2017.object': es2017_object_1.es2017_object,
+    'es2017.sharedmemory': es2017_sharedmemory_1.es2017_sharedmemory,
+    'es2017.string': es2017_string_1.es2017_string,
+    'es2017.intl': es2017_intl_1.es2017_intl,
+    'es2017.typedarrays': es2017_typedarrays_1.es2017_typedarrays,
+    'es2018.asyncgenerator': es2018_asyncgenerator_1.es2018_asyncgenerator,
+    'es2018.asynciterable': es2018_asynciterable_1.es2018_asynciterable,
+    'es2018.intl': es2018_intl_1.es2018_intl,
+    'es2018.promise': es2018_promise_1.es2018_promise,
+    'es2018.regexp': es2018_regexp_1.es2018_regexp,
+    'es2019.array': es2019_array_1.es2019_array,
+    'es2019.object': es2019_object_1.es2019_object,
+    'es2019.string': es2019_string_1.es2019_string,
+    'es2019.symbol': es2019_symbol_1.es2019_symbol,
+    'es2020.bigint': es2020_bigint_1.es2020_bigint,
+    'es2020.promise': es2020_promise_1.es2020_promise,
+    'es2020.sharedmemory': es2020_sharedmemory_1.es2020_sharedmemory,
+    'es2020.string': es2020_string_1.es2020_string,
+    'es2020.symbol.wellknown': es2020_symbol_wellknown_1.es2020_symbol_wellknown,
+    'es2020.intl': es2020_intl_1.es2020_intl,
+    'esnext.array': esnext_array_1.esnext_array,
+    'esnext.symbol': esnext_symbol_1.esnext_symbol,
+    'esnext.asynciterable': esnext_asynciterable_1.esnext_asynciterable,
+    'esnext.intl': esnext_intl_1.esnext_intl,
+    'esnext.bigint': esnext_bigint_1.esnext_bigint,
+    'esnext.string': esnext_string_1.esnext_string,
+    'esnext.promise': esnext_promise_1.esnext_promise,
+    'esnext.weakref': esnext_weakref_1.esnext_weakref,
+    'es2016.full': es2016_full_1.es2016_full,
+    'es2017.full': es2017_full_1.es2017_full,
+    'es2018.full': es2018_full_1.es2018_full,
+    'es2019.full': es2019_full_1.es2019_full,
+    'es2020.full': es2020_full_1.es2020_full,
+    'esnext.full': esnext_full_1.esnext_full,
+    lib: lib_1.lib,
+};
+exports.lib = lib;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/index.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..97e21166755e0963251c77ed3da3fb227c6ca940
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a59826ca7305629c04deea2d87f274c8b85b06d7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const lib: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=lib.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..223c3077c22485c64600b37d4c2a946bbd9553eb
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../src/lib/lib.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAMzD,eAAO,MAAM,GAAG,4CAK+B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.js
new file mode 100644
index 0000000000000000000000000000000000000000..e68c7ae71abd0f9d62501177e45865cdcf2555a1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.js
@@ -0,0 +1,12 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.lib = void 0;
+const es5_1 = require("./es5");
+const dom_1 = require("./dom");
+const webworker_importscripts_1 = require("./webworker.importscripts");
+const scripthost_1 = require("./scripthost");
+exports.lib = Object.assign(Object.assign(Object.assign(Object.assign({}, es5_1.es5), dom_1.dom), webworker_importscripts_1.webworker_importscripts), scripthost_1.scripthost);
+//# sourceMappingURL=lib.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..75d60bd8d1bb9268194ca2ccb38eed3a75f07815
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib/lib.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAGhD,+BAA4B;AAC5B,+BAA4B;AAC5B,uEAAoE;AACpE,6CAA0C;AAE7B,QAAA,GAAG,GAAG,4DACd,SAAG,GACH,SAAG,GACH,iDAAuB,GACvB,uBAAU,CACgC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..21802c256bf07e1fd15ce3ea2214fe7b22b9d025
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const scripthost: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=scripthost.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..5ea9f54c2f9d597cb68bff2a23e88e46e8a8e325
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"scripthost.d.ts","sourceRoot":"","sources":["../../src/lib/scripthost.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,UAAU,4CA+EwB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.js
new file mode 100644
index 0000000000000000000000000000000000000000..34407089c2f8fe01f18e92f04288de19d994b5da
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.js
@@ -0,0 +1,87 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.scripthost = void 0;
+exports.scripthost = {
+    ActiveXObject: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ActiveXObject',
+    },
+    ITextWriter: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ITextWriter',
+    },
+    TextStreamBase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextStreamBase',
+    },
+    TextStreamWriter: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextStreamWriter',
+    },
+    TextStreamReader: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextStreamReader',
+    },
+    SafeArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SafeArray',
+    },
+    Enumerator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Enumerator',
+    },
+    EnumeratorConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EnumeratorConstructor',
+    },
+    VBArray: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'VBArray',
+    },
+    VBArrayConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'VBArrayConstructor',
+    },
+    VarDate: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'VarDate',
+    },
+    DateConstructor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DateConstructor',
+    },
+    Date: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Date',
+    },
+};
+//# sourceMappingURL=scripthost.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..8684ff1aee63563c7e0596e90309a5b74da57ae3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"scripthost.js","sourceRoot":"","sources":["../../src/lib/scripthost.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,UAAU,GAAG;IACxB,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,eAAe;KACtB;IACD,WAAW,EAAE;QACX,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,aAAa;KACpB;IACD,cAAc,EAAE;QACd,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,gBAAgB;KACvB;IACD,gBAAgB,EAAE;QAChB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,kBAAkB;KACzB;IACD,gBAAgB,EAAE;QAChB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,kBAAkB;KACzB;IACD,SAAS,EAAE;QACT,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,WAAW;KAClB;IACD,UAAU,EAAE;QACV,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,YAAY;KACnB;IACD,qBAAqB,EAAE;QACrB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,uBAAuB;KAC9B;IACD,OAAO,EAAE;QACP,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,SAAS;KAChB;IACD,kBAAkB,EAAE;QAClB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,oBAAoB;KAC3B;IACD,OAAO,EAAE;QACP,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,SAAS;KAChB;IACD,eAAe,EAAE;QACf,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,iBAAiB;KACxB;IACD,IAAI,EAAE;QACJ,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,MAAM;KACb;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..11d4c29686c509c303318a445bc4ace8e5c45690
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const webworker: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=webworker.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..6e64e1ba88c62009f57c8bbb9d2bcc9ec835fbd0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"webworker.d.ts","sourceRoot":"","sources":["../../src/lib/webworker.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,SAAS,4CAm6EyB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5bf227c593ba50e3db0bf729705b487aead8c4ce
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const webworker_importscripts: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=webworker.importscripts.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..98ed3cbc12f4e50cf4ee6d183cd596e93a884ce9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"webworker.importscripts.d.ts","sourceRoot":"","sources":["../../src/lib/webworker.importscripts.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,uBAAuB,4CAGnC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.js
new file mode 100644
index 0000000000000000000000000000000000000000..1692132fd3741e414c6f215bac2fb163dd17c410
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.js
@@ -0,0 +1,8 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.webworker_importscripts = void 0;
+exports.webworker_importscripts = {};
+//# sourceMappingURL=webworker.importscripts.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c91e303be26fe2632a3d334bcf5c5186eeaaeabc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"webworker.importscripts.js","sourceRoot":"","sources":["../../src/lib/webworker.importscripts.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,uBAAuB,GAAG,EAGtC,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f7f040198981ef7ca15984424dd2fac32d3bee7f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.d.ts
@@ -0,0 +1,3 @@
+import { ImplicitLibVariableOptions } from '../variable';
+export declare const webworker_iterable: Record<string, ImplicitLibVariableOptions>;
+//# sourceMappingURL=webworker.iterable.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..8297179c197079d39774334943279b9a2bde4131
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"webworker.iterable.d.ts","sourceRoot":"","sources":["../../src/lib/webworker.iterable.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,kBAAkB,4CAqFgB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.js
new file mode 100644
index 0000000000000000000000000000000000000000..b8e7a2b0221916125f788c3d156ca551be2d1ec2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.js
@@ -0,0 +1,93 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.webworker_iterable = void 0;
+exports.webworker_iterable = {
+    Cache: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Cache',
+    },
+    CanvasPathDrawingStyles: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasPathDrawingStyles',
+    },
+    DOMStringList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMStringList',
+    },
+    FileList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FileList',
+    },
+    FormData: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FormData',
+    },
+    Headers: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Headers',
+    },
+    IDBDatabase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBDatabase',
+    },
+    IDBObjectStore: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBObjectStore',
+    },
+    URLSearchParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'URLSearchParams',
+    },
+    WEBGL_draw_buffers: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_draw_buffers',
+    },
+    WebGL2RenderingContextBase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGL2RenderingContextBase',
+    },
+    WebGL2RenderingContextOverloads: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGL2RenderingContextOverloads',
+    },
+    WebGLRenderingContextBase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLRenderingContextBase',
+    },
+    WebGLRenderingContextOverloads: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLRenderingContextOverloads',
+    },
+};
+//# sourceMappingURL=webworker.iterable.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..24e40a9cee1250c3eaea19fbd3913464ae40e76b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"webworker.iterable.js","sourceRoot":"","sources":["../../src/lib/webworker.iterable.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD;;;AAInC,QAAA,kBAAkB,GAAG;IAChC,KAAK,EAAE;QACL,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,OAAO;KACd;IACD,uBAAuB,EAAE;QACvB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,yBAAyB;KAChC;IACD,aAAa,EAAE;QACb,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,eAAe;KACtB;IACD,QAAQ,EAAE;QACR,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,UAAU;KACjB;IACD,QAAQ,EAAE;QACR,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,UAAU;KACjB;IACD,OAAO,EAAE;QACP,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,SAAS;KAChB;IACD,WAAW,EAAE;QACX,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,aAAa;KACpB;IACD,cAAc,EAAE;QACd,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,gBAAgB;KACvB;IACD,eAAe,EAAE;QACf,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,iBAAiB;KACxB;IACD,kBAAkB,EAAE;QAClB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,oBAAoB;KAC3B;IACD,0BAA0B,EAAE;QAC1B,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,4BAA4B;KACnC;IACD,+BAA+B,EAAE;QAC/B,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,iCAAiC;KACxC;IACD,yBAAyB,EAAE;QACzB,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,2BAA2B;KAClC;IACD,8BAA8B,EAAE;QAC9B,2BAA2B,EAAE,UAAU;QACvC,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,IAAI,EAAE,gCAAgC;KACvC;CAC4C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.js b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.js
new file mode 100644
index 0000000000000000000000000000000000000000..281958079d34ff6c1321fee3dd8c184a0d92761d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.js
@@ -0,0 +1,2475 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.webworker = void 0;
+exports.webworker = {
+    AddEventListenerOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AddEventListenerOptions',
+    },
+    AesCbcParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesCbcParams',
+    },
+    AesCtrParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesCtrParams',
+    },
+    AesDerivedKeyParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesDerivedKeyParams',
+    },
+    AesGcmParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesGcmParams',
+    },
+    AesKeyAlgorithm: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesKeyAlgorithm',
+    },
+    AesKeyGenParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesKeyGenParams',
+    },
+    Algorithm: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Algorithm',
+    },
+    BlobPropertyBag: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BlobPropertyBag',
+    },
+    CacheQueryOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CacheQueryOptions',
+    },
+    CanvasRenderingContext2DSettings: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasRenderingContext2DSettings',
+    },
+    ClientQueryOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ClientQueryOptions',
+    },
+    CloseEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CloseEventInit',
+    },
+    CryptoKeyPair: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CryptoKeyPair',
+    },
+    CustomEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CustomEventInit',
+    },
+    DOMMatrix2DInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMMatrix2DInit',
+    },
+    DOMMatrixInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMMatrixInit',
+    },
+    DOMPointInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMPointInit',
+    },
+    DOMQuadInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMQuadInit',
+    },
+    DOMRectInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMRectInit',
+    },
+    DevicePermissionDescriptor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DevicePermissionDescriptor',
+    },
+    EcKeyGenParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EcKeyGenParams',
+    },
+    EcKeyImportParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EcKeyImportParams',
+    },
+    EcdhKeyDeriveParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EcdhKeyDeriveParams',
+    },
+    EcdsaParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EcdsaParams',
+    },
+    ErrorEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ErrorEventInit',
+    },
+    EventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventInit',
+    },
+    EventListenerOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventListenerOptions',
+    },
+    EventSourceInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventSourceInit',
+    },
+    ExtendableEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ExtendableEventInit',
+    },
+    ExtendableMessageEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ExtendableMessageEventInit',
+    },
+    FetchEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FetchEventInit',
+    },
+    FilePropertyBag: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FilePropertyBag',
+    },
+    GetNotificationOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GetNotificationOptions',
+    },
+    HkdfParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HkdfParams',
+    },
+    HmacImportParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HmacImportParams',
+    },
+    HmacKeyGenParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HmacKeyGenParams',
+    },
+    IDBIndexParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBIndexParameters',
+    },
+    IDBObjectStoreParameters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBObjectStoreParameters',
+    },
+    IDBVersionChangeEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBVersionChangeEventInit',
+    },
+    ImageBitmapOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ImageBitmapOptions',
+    },
+    ImageBitmapRenderingContextSettings: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ImageBitmapRenderingContextSettings',
+    },
+    ImageEncodeOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ImageEncodeOptions',
+    },
+    JsonWebKey: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'JsonWebKey',
+    },
+    KeyAlgorithm: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'KeyAlgorithm',
+    },
+    MessageEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MessageEventInit',
+    },
+    MidiPermissionDescriptor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MidiPermissionDescriptor',
+    },
+    MultiCacheQueryOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MultiCacheQueryOptions',
+    },
+    NavigationPreloadState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigationPreloadState',
+    },
+    NotificationAction: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NotificationAction',
+    },
+    NotificationEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NotificationEventInit',
+    },
+    NotificationOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NotificationOptions',
+    },
+    Pbkdf2Params: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Pbkdf2Params',
+    },
+    PerformanceObserverInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PerformanceObserverInit',
+    },
+    PermissionDescriptor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PermissionDescriptor',
+    },
+    PipeOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PipeOptions',
+    },
+    PostMessageOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PostMessageOptions',
+    },
+    ProgressEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ProgressEventInit',
+    },
+    PromiseRejectionEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PromiseRejectionEventInit',
+    },
+    PushEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PushEventInit',
+    },
+    PushPermissionDescriptor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PushPermissionDescriptor',
+    },
+    PushSubscriptionChangeEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PushSubscriptionChangeEventInit',
+    },
+    PushSubscriptionJSON: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PushSubscriptionJSON',
+    },
+    PushSubscriptionOptionsInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PushSubscriptionOptionsInit',
+    },
+    QueuingStrategy: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'QueuingStrategy',
+    },
+    ReadableStreamReadDoneResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadableStreamReadDoneResult',
+    },
+    ReadableStreamReadValueResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadableStreamReadValueResult',
+    },
+    RegistrationOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RegistrationOptions',
+    },
+    RequestInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RequestInit',
+    },
+    ResponseInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ResponseInit',
+    },
+    RsaHashedImportParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RsaHashedImportParams',
+    },
+    RsaHashedKeyGenParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RsaHashedKeyGenParams',
+    },
+    RsaKeyGenParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RsaKeyGenParams',
+    },
+    RsaOaepParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RsaOaepParams',
+    },
+    RsaOtherPrimesInfo: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RsaOtherPrimesInfo',
+    },
+    RsaPssParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RsaPssParams',
+    },
+    StorageEstimate: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'StorageEstimate',
+    },
+    SyncEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SyncEventInit',
+    },
+    TextDecodeOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextDecodeOptions',
+    },
+    TextDecoderOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextDecoderOptions',
+    },
+    TextEncoderEncodeIntoResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextEncoderEncodeIntoResult',
+    },
+    Transformer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Transformer',
+    },
+    UnderlyingByteSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'UnderlyingByteSource',
+    },
+    UnderlyingSink: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'UnderlyingSink',
+    },
+    UnderlyingSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'UnderlyingSource',
+    },
+    WebGLContextAttributes: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLContextAttributes',
+    },
+    WebGLContextEventInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLContextEventInit',
+    },
+    WorkerOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WorkerOptions',
+    },
+    EventListener: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventListener',
+    },
+    ANGLE_instanced_arrays: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ANGLE_instanced_arrays',
+    },
+    AbortController: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AbortController',
+    },
+    AbortSignalEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AbortSignalEventMap',
+    },
+    AbortSignal: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'AbortSignal',
+    },
+    AbstractWorkerEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AbstractWorkerEventMap',
+    },
+    AbstractWorker: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AbstractWorker',
+    },
+    AesCfbParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesCfbParams',
+    },
+    AesCmacParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AesCmacParams',
+    },
+    AnimationFrameProvider: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AnimationFrameProvider',
+    },
+    Blob: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Blob',
+    },
+    Body: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Body',
+    },
+    BroadcastChannelEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BroadcastChannelEventMap',
+    },
+    BroadcastChannel: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'BroadcastChannel',
+    },
+    ByteLengthQueuingStrategy: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ByteLengthQueuingStrategy',
+    },
+    Cache: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Cache',
+    },
+    CacheStorage: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CacheStorage',
+    },
+    CanvasCompositing: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasCompositing',
+    },
+    CanvasDrawImage: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasDrawImage',
+    },
+    CanvasDrawPath: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasDrawPath',
+    },
+    CanvasFillStrokeStyles: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasFillStrokeStyles',
+    },
+    CanvasFilters: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasFilters',
+    },
+    CanvasGradient: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CanvasGradient',
+    },
+    CanvasImageData: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasImageData',
+    },
+    CanvasImageSmoothing: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasImageSmoothing',
+    },
+    CanvasPath: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasPath',
+    },
+    CanvasPathDrawingStyles: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasPathDrawingStyles',
+    },
+    CanvasPattern: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CanvasPattern',
+    },
+    CanvasRect: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasRect',
+    },
+    CanvasShadowStyles: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasShadowStyles',
+    },
+    CanvasState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasState',
+    },
+    CanvasText: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasText',
+    },
+    CanvasTextDrawingStyles: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasTextDrawingStyles',
+    },
+    CanvasTransform: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasTransform',
+    },
+    Client: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Client',
+    },
+    Clients: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Clients',
+    },
+    CloseEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CloseEvent',
+    },
+    ConcatParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ConcatParams',
+    },
+    CountQueuingStrategy: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CountQueuingStrategy',
+    },
+    Crypto: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Crypto',
+    },
+    CryptoKey: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CryptoKey',
+    },
+    CustomEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'CustomEvent',
+    },
+    DOMException: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMException',
+    },
+    DOMMatrix: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMMatrix',
+    },
+    DOMMatrixReadOnly: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMMatrixReadOnly',
+    },
+    DOMPoint: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMPoint',
+    },
+    DOMPointReadOnly: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMPointReadOnly',
+    },
+    DOMQuad: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMQuad',
+    },
+    DOMRect: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMRect',
+    },
+    DOMRectReadOnly: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMRectReadOnly',
+    },
+    DOMStringList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DOMStringList',
+    },
+    DedicatedWorkerGlobalScopeEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DedicatedWorkerGlobalScopeEventMap',
+    },
+    DedicatedWorkerGlobalScope: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'DedicatedWorkerGlobalScope',
+    },
+    DhImportKeyParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DhImportKeyParams',
+    },
+    DhKeyAlgorithm: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DhKeyAlgorithm',
+    },
+    DhKeyDeriveParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DhKeyDeriveParams',
+    },
+    DhKeyGenParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DhKeyGenParams',
+    },
+    EXT_blend_minmax: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EXT_blend_minmax',
+    },
+    EXT_frag_depth: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EXT_frag_depth',
+    },
+    EXT_sRGB: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EXT_sRGB',
+    },
+    EXT_shader_texture_lod: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EXT_shader_texture_lod',
+    },
+    EXT_texture_filter_anisotropic: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EXT_texture_filter_anisotropic',
+    },
+    ErrorEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ErrorEvent',
+    },
+    Event: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Event',
+    },
+    EventListenerObject: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventListenerObject',
+    },
+    EventSourceEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventSourceEventMap',
+    },
+    EventSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'EventSource',
+    },
+    EventTarget: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'EventTarget',
+    },
+    ExtendableEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ExtendableEvent',
+    },
+    ExtendableMessageEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ExtendableMessageEvent',
+    },
+    FetchEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'FetchEvent',
+    },
+    File: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'File',
+    },
+    FileList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'FileList',
+    },
+    FileReaderEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FileReaderEventMap',
+    },
+    FileReader: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'FileReader',
+    },
+    FileReaderSync: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'FileReaderSync',
+    },
+    FormData: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'FormData',
+    },
+    GenericTransformStream: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GenericTransformStream',
+    },
+    Headers: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Headers',
+    },
+    IDBArrayKey: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBArrayKey',
+    },
+    IDBCursor: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBCursor',
+    },
+    IDBCursorWithValue: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBCursorWithValue',
+    },
+    IDBDatabaseEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBDatabaseEventMap',
+    },
+    IDBDatabase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBDatabase',
+    },
+    IDBFactory: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBFactory',
+    },
+    IDBIndex: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBIndex',
+    },
+    IDBKeyRange: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBKeyRange',
+    },
+    IDBObjectStore: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBObjectStore',
+    },
+    IDBOpenDBRequestEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBOpenDBRequestEventMap',
+    },
+    IDBOpenDBRequest: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBOpenDBRequest',
+    },
+    IDBRequestEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBRequestEventMap',
+    },
+    IDBRequest: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBRequest',
+    },
+    IDBTransactionEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBTransactionEventMap',
+    },
+    IDBTransaction: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBTransaction',
+    },
+    IDBVersionChangeEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'IDBVersionChangeEvent',
+    },
+    ImageBitmap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ImageBitmap',
+    },
+    ImageBitmapRenderingContext: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ImageBitmapRenderingContext',
+    },
+    ImageData: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ImageData',
+    },
+    MessageChannel: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MessageChannel',
+    },
+    MessageEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MessageEvent',
+    },
+    MessagePortEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MessagePortEventMap',
+    },
+    MessagePort: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'MessagePort',
+    },
+    NavigationPreloadManager: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'NavigationPreloadManager',
+    },
+    NavigatorConcurrentHardware: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorConcurrentHardware',
+    },
+    NavigatorID: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorID',
+    },
+    NavigatorLanguage: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorLanguage',
+    },
+    NavigatorOnLine: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorOnLine',
+    },
+    NavigatorStorage: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NavigatorStorage',
+    },
+    NotificationEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NotificationEventMap',
+    },
+    Notification: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Notification',
+    },
+    NotificationEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'NotificationEvent',
+    },
+    OES_element_index_uint: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OES_element_index_uint',
+    },
+    OES_standard_derivatives: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OES_standard_derivatives',
+    },
+    OES_texture_float: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OES_texture_float',
+    },
+    OES_texture_float_linear: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OES_texture_float_linear',
+    },
+    OES_texture_half_float: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OES_texture_half_float',
+    },
+    OES_texture_half_float_linear: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OES_texture_half_float_linear',
+    },
+    OES_vertex_array_object: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OES_vertex_array_object',
+    },
+    OffscreenCanvas: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'OffscreenCanvas',
+    },
+    OffscreenCanvasRenderingContext2D: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'OffscreenCanvasRenderingContext2D',
+    },
+    Path2D: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Path2D',
+    },
+    PerformanceEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PerformanceEventMap',
+    },
+    Performance: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Performance',
+    },
+    PerformanceEntry: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerformanceEntry',
+    },
+    PerformanceMark: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerformanceMark',
+    },
+    PerformanceMeasure: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerformanceMeasure',
+    },
+    PerformanceObserver: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerformanceObserver',
+    },
+    PerformanceObserverEntryList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerformanceObserverEntryList',
+    },
+    PerformanceResourceTiming: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PerformanceResourceTiming',
+    },
+    PermissionStatusEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PermissionStatusEventMap',
+    },
+    PermissionStatus: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PermissionStatus',
+    },
+    Permissions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Permissions',
+    },
+    ProgressEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ProgressEvent',
+    },
+    PromiseRejectionEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PromiseRejectionEvent',
+    },
+    PushEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PushEvent',
+    },
+    PushManager: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PushManager',
+    },
+    PushMessageData: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PushMessageData',
+    },
+    PushSubscription: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PushSubscription',
+    },
+    PushSubscriptionChangeEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PushSubscriptionChangeEvent',
+    },
+    PushSubscriptionOptions: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'PushSubscriptionOptions',
+    },
+    ReadableByteStreamController: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ReadableByteStreamController',
+    },
+    ReadableStream: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ReadableStream',
+    },
+    ReadableStreamBYOBReader: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ReadableStreamBYOBReader',
+    },
+    ReadableStreamBYOBRequest: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ReadableStreamBYOBRequest',
+    },
+    ReadableStreamDefaultController: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ReadableStreamDefaultController',
+    },
+    ReadableStreamDefaultReader: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ReadableStreamDefaultReader',
+    },
+    ReadableStreamReader: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ReadableStreamReader',
+    },
+    Request: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Request',
+    },
+    Response: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Response',
+    },
+    ServiceWorkerEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ServiceWorkerEventMap',
+    },
+    ServiceWorker: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ServiceWorker',
+    },
+    ServiceWorkerContainerEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ServiceWorkerContainerEventMap',
+    },
+    ServiceWorkerContainer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ServiceWorkerContainer',
+    },
+    ServiceWorkerGlobalScopeEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ServiceWorkerGlobalScopeEventMap',
+    },
+    ServiceWorkerGlobalScope: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ServiceWorkerGlobalScope',
+    },
+    ServiceWorkerRegistrationEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ServiceWorkerRegistrationEventMap',
+    },
+    ServiceWorkerRegistration: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'ServiceWorkerRegistration',
+    },
+    SharedWorker: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SharedWorker',
+    },
+    SharedWorkerGlobalScopeEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'SharedWorkerGlobalScopeEventMap',
+    },
+    SharedWorkerGlobalScope: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SharedWorkerGlobalScope',
+    },
+    StorageManager: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'StorageManager',
+    },
+    SubtleCrypto: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SubtleCrypto',
+    },
+    SyncEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SyncEvent',
+    },
+    SyncManager: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'SyncManager',
+    },
+    TextDecoder: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TextDecoder',
+    },
+    TextDecoderCommon: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextDecoderCommon',
+    },
+    TextDecoderStream: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TextDecoderStream',
+    },
+    TextEncoder: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TextEncoder',
+    },
+    TextEncoderCommon: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TextEncoderCommon',
+    },
+    TextEncoderStream: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TextEncoderStream',
+    },
+    TextMetrics: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TextMetrics',
+    },
+    TransformStream: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TransformStream',
+    },
+    TransformStreamDefaultController: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'TransformStreamDefaultController',
+    },
+    URL: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'URL',
+    },
+    URLSearchParams: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'URLSearchParams',
+    },
+    WEBGL_color_buffer_float: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_color_buffer_float',
+    },
+    WEBGL_compressed_texture_astc: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_compressed_texture_astc',
+    },
+    WEBGL_compressed_texture_s3tc: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_compressed_texture_s3tc',
+    },
+    WEBGL_compressed_texture_s3tc_srgb: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_compressed_texture_s3tc_srgb',
+    },
+    WEBGL_debug_renderer_info: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_debug_renderer_info',
+    },
+    WEBGL_debug_shaders: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_debug_shaders',
+    },
+    WEBGL_depth_texture: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_depth_texture',
+    },
+    WEBGL_draw_buffers: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_draw_buffers',
+    },
+    WEBGL_lose_context: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WEBGL_lose_context',
+    },
+    WebGL2RenderingContext: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGL2RenderingContext',
+    },
+    WebGL2RenderingContextBase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGL2RenderingContextBase',
+    },
+    WebGL2RenderingContextOverloads: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGL2RenderingContextOverloads',
+    },
+    WebGLActiveInfo: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLActiveInfo',
+    },
+    WebGLBuffer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLBuffer',
+    },
+    WebGLContextEvent: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLContextEvent',
+    },
+    WebGLFramebuffer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLFramebuffer',
+    },
+    WebGLObject: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLObject',
+    },
+    WebGLProgram: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLProgram',
+    },
+    WebGLQuery: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLQuery',
+    },
+    WebGLRenderbuffer: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLRenderbuffer',
+    },
+    WebGLRenderingContext: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLRenderingContext',
+    },
+    WebGLRenderingContextBase: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLRenderingContextBase',
+    },
+    WebGLRenderingContextOverloads: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLRenderingContextOverloads',
+    },
+    WebGLSampler: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLSampler',
+    },
+    WebGLShader: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLShader',
+    },
+    WebGLShaderPrecisionFormat: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLShaderPrecisionFormat',
+    },
+    WebGLSync: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLSync',
+    },
+    WebGLTexture: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLTexture',
+    },
+    WebGLTransformFeedback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLTransformFeedback',
+    },
+    WebGLUniformLocation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLUniformLocation',
+    },
+    WebGLVertexArrayObject: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebGLVertexArrayObject',
+    },
+    WebGLVertexArrayObjectOES: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLVertexArrayObjectOES',
+    },
+    WebSocketEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebSocketEventMap',
+    },
+    WebSocket: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebSocket',
+    },
+    WindowClient: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WindowClient',
+    },
+    WindowOrWorkerGlobalScope: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WindowOrWorkerGlobalScope',
+    },
+    WorkerEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WorkerEventMap',
+    },
+    Worker: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'Worker',
+    },
+    WorkerGlobalScopeEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WorkerGlobalScopeEventMap',
+    },
+    WorkerGlobalScope: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WorkerGlobalScope',
+    },
+    WorkerLocation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WorkerLocation',
+    },
+    WorkerNavigator: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WorkerNavigator',
+    },
+    WritableStream: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WritableStream',
+    },
+    WritableStreamDefaultController: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WritableStreamDefaultController',
+    },
+    WritableStreamDefaultWriter: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WritableStreamDefaultWriter',
+    },
+    XMLHttpRequestEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'XMLHttpRequestEventMap',
+    },
+    XMLHttpRequest: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'XMLHttpRequest',
+    },
+    XMLHttpRequestEventTargetEventMap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'XMLHttpRequestEventTargetEventMap',
+    },
+    XMLHttpRequestEventTarget: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'XMLHttpRequestEventTarget',
+    },
+    XMLHttpRequestUpload: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'XMLHttpRequestUpload',
+    },
+    EventListenerOrEventListenerObject: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EventListenerOrEventListenerObject',
+    },
+    Console: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Console',
+    },
+    WebAssembly: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: true,
+        name: 'WebAssembly',
+    },
+    FrameRequestCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FrameRequestCallback',
+    },
+    OnErrorEventHandlerNonNull: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OnErrorEventHandlerNonNull',
+    },
+    PerformanceObserverCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PerformanceObserverCallback',
+    },
+    QueuingStrategySizeCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'QueuingStrategySizeCallback',
+    },
+    ReadableByteStreamControllerCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadableByteStreamControllerCallback',
+    },
+    ReadableStreamDefaultControllerCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadableStreamDefaultControllerCallback',
+    },
+    ReadableStreamErrorCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadableStreamErrorCallback',
+    },
+    TransformStreamDefaultControllerCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TransformStreamDefaultControllerCallback',
+    },
+    TransformStreamDefaultControllerTransformCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TransformStreamDefaultControllerTransformCallback',
+    },
+    VoidFunction: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'VoidFunction',
+    },
+    WritableStreamDefaultControllerCloseCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WritableStreamDefaultControllerCloseCallback',
+    },
+    WritableStreamDefaultControllerStartCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WritableStreamDefaultControllerStartCallback',
+    },
+    WritableStreamDefaultControllerWriteCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WritableStreamDefaultControllerWriteCallback',
+    },
+    WritableStreamErrorCallback: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WritableStreamErrorCallback',
+    },
+    HeadersInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HeadersInit',
+    },
+    BodyInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BodyInit',
+    },
+    RequestInfo: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RequestInfo',
+    },
+    BlobPart: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BlobPart',
+    },
+    DOMHighResTimeStamp: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMHighResTimeStamp',
+    },
+    CanvasImageSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasImageSource',
+    },
+    OffscreenRenderingContext: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OffscreenRenderingContext',
+    },
+    MessageEventSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'MessageEventSource',
+    },
+    ImageBitmapSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ImageBitmapSource',
+    },
+    OnErrorEventHandler: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OnErrorEventHandler',
+    },
+    TimerHandler: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TimerHandler',
+    },
+    PerformanceEntryList: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PerformanceEntryList',
+    },
+    PushMessageDataInit: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PushMessageDataInit',
+    },
+    ReadableStreamReadResult: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReadableStreamReadResult',
+    },
+    VibratePattern: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'VibratePattern',
+    },
+    AlgorithmIdentifier: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'AlgorithmIdentifier',
+    },
+    HashAlgorithmIdentifier: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'HashAlgorithmIdentifier',
+    },
+    BigInteger: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BigInteger',
+    },
+    NamedCurve: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NamedCurve',
+    },
+    GLenum: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLenum',
+    },
+    GLboolean: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLboolean',
+    },
+    GLbitfield: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLbitfield',
+    },
+    GLint: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLint',
+    },
+    GLsizei: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLsizei',
+    },
+    GLintptr: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLintptr',
+    },
+    GLsizeiptr: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLsizeiptr',
+    },
+    GLuint: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLuint',
+    },
+    GLfloat: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLfloat',
+    },
+    GLclampf: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLclampf',
+    },
+    TexImageSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'TexImageSource',
+    },
+    Float32List: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Float32List',
+    },
+    Int32List: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Int32List',
+    },
+    GLint64: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLint64',
+    },
+    GLuint64: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'GLuint64',
+    },
+    Uint32List: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Uint32List',
+    },
+    BufferSource: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BufferSource',
+    },
+    DOMTimeStamp: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'DOMTimeStamp',
+    },
+    FormDataEntryValue: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FormDataEntryValue',
+    },
+    IDBValidKey: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBValidKey',
+    },
+    Transferable: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'Transferable',
+    },
+    BinaryType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'BinaryType',
+    },
+    CanvasDirection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasDirection',
+    },
+    CanvasFillRule: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasFillRule',
+    },
+    CanvasLineCap: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasLineCap',
+    },
+    CanvasLineJoin: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasLineJoin',
+    },
+    CanvasTextAlign: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasTextAlign',
+    },
+    CanvasTextBaseline: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'CanvasTextBaseline',
+    },
+    ClientTypes: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ClientTypes',
+    },
+    ColorSpaceConversion: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ColorSpaceConversion',
+    },
+    EndingType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'EndingType',
+    },
+    FrameType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'FrameType',
+    },
+    IDBCursorDirection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBCursorDirection',
+    },
+    IDBRequestReadyState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBRequestReadyState',
+    },
+    IDBTransactionMode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'IDBTransactionMode',
+    },
+    ImageOrientation: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ImageOrientation',
+    },
+    ImageSmoothingQuality: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ImageSmoothingQuality',
+    },
+    KeyFormat: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'KeyFormat',
+    },
+    KeyType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'KeyType',
+    },
+    KeyUsage: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'KeyUsage',
+    },
+    NotificationDirection: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NotificationDirection',
+    },
+    NotificationPermission: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'NotificationPermission',
+    },
+    OffscreenRenderingContextId: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'OffscreenRenderingContextId',
+    },
+    PermissionName: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PermissionName',
+    },
+    PermissionState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PermissionState',
+    },
+    PremultiplyAlpha: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PremultiplyAlpha',
+    },
+    PushEncryptionKeyName: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PushEncryptionKeyName',
+    },
+    PushPermissionState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'PushPermissionState',
+    },
+    ReferrerPolicy: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ReferrerPolicy',
+    },
+    RequestCache: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RequestCache',
+    },
+    RequestCredentials: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RequestCredentials',
+    },
+    RequestDestination: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RequestDestination',
+    },
+    RequestMode: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RequestMode',
+    },
+    RequestRedirect: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'RequestRedirect',
+    },
+    ResizeQuality: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ResizeQuality',
+    },
+    ResponseType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ResponseType',
+    },
+    ServiceWorkerState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ServiceWorkerState',
+    },
+    ServiceWorkerUpdateViaCache: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'ServiceWorkerUpdateViaCache',
+    },
+    VisibilityState: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'VisibilityState',
+    },
+    WebGLPowerPreference: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WebGLPowerPreference',
+    },
+    WorkerType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'WorkerType',
+    },
+    XMLHttpRequestResponseType: {
+        eslintImplicitGlobalSetting: 'readonly',
+        isTypeVariable: true,
+        isValueVariable: false,
+        name: 'XMLHttpRequestResponseType',
+    },
+};
+//# sourceMappingURL=webworker.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..1568abe6126beb29a9be7de752ef075440966790
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"webworker.js","sourceRoot":"","sources":["../../src/lib/webworker.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..32e105dff5dff5dcd0a07e968e35fdf851566c93
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.d.ts
@@ -0,0 +1,15 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Referencer } from './Referencer';
+import { Visitor } from './Visitor';
+declare type ExportNode = TSESTree.ExportAllDeclaration | TSESTree.ExportDefaultDeclaration | TSESTree.ExportNamedDeclaration;
+declare class ExportVisitor extends Visitor {
+    #private;
+    constructor(node: ExportNode, referencer: Referencer);
+    static visit(referencer: Referencer, node: ExportNode): void;
+    protected Identifier(node: TSESTree.Identifier): void;
+    protected ExportDefaultDeclaration(node: TSESTree.ExportDefaultDeclaration): void;
+    protected ExportNamedDeclaration(node: TSESTree.ExportNamedDeclaration): void;
+    protected ExportSpecifier(node: TSESTree.ExportSpecifier): void;
+}
+export { ExportVisitor };
+//# sourceMappingURL=ExportVisitor.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..8d04119ee38bd6905cafeeed62e41a2a47629ddd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ExportVisitor.d.ts","sourceRoot":"","sources":["../../src/referencer/ExportVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,aAAK,UAAU,GACX,QAAQ,CAAC,oBAAoB,GAC7B,QAAQ,CAAC,wBAAwB,GACjC,QAAQ,CAAC,sBAAsB,CAAC;AAEpC,cAAM,aAAc,SAAQ,OAAO;;gBAIrB,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAMpD,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAK5D,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,GAAG,IAAI;IASrD,SAAS,CAAC,wBAAwB,CAChC,IAAI,EAAE,QAAQ,CAAC,wBAAwB,GACtC,IAAI;IAaP,SAAS,CAAC,sBAAsB,CAC9B,IAAI,EAAE,QAAQ,CAAC,sBAAsB,GACpC,IAAI;IAgBP,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,GAAG,IAAI;CAGhE;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.js b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.js
new file mode 100644
index 0000000000000000000000000000000000000000..67c77246e48227d0c774faefe49184ca11ec739c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.js
@@ -0,0 +1,75 @@
+"use strict";
+var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to set private field on non-instance");
+    }
+    privateMap.set(receiver, value);
+    return value;
+};
+var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to get private field on non-instance");
+    }
+    return privateMap.get(receiver);
+};
+var _referencer, _exportNode;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ExportVisitor = void 0;
+const types_1 = require("@typescript-eslint/types");
+const Visitor_1 = require("./Visitor");
+class ExportVisitor extends Visitor_1.Visitor {
+    constructor(node, referencer) {
+        super(referencer);
+        _referencer.set(this, void 0);
+        _exportNode.set(this, void 0);
+        __classPrivateFieldSet(this, _exportNode, node);
+        __classPrivateFieldSet(this, _referencer, referencer);
+    }
+    static visit(referencer, node) {
+        const exportReferencer = new ExportVisitor(node, referencer);
+        exportReferencer.visit(node);
+    }
+    Identifier(node) {
+        if (__classPrivateFieldGet(this, _exportNode).exportKind === 'type') {
+            // type exports can only reference types
+            __classPrivateFieldGet(this, _referencer).currentScope().referenceType(node);
+        }
+        else {
+            __classPrivateFieldGet(this, _referencer).currentScope().referenceDualValueType(node);
+        }
+    }
+    ExportDefaultDeclaration(node) {
+        if (node.declaration.type === types_1.AST_NODE_TYPES.Identifier) {
+            // export default A;
+            // this could be a type or a variable
+            this.visit(node.declaration);
+        }
+        else {
+            // export const a = 1;
+            // export something();
+            // etc
+            // these not included in the scope of this visitor as they are all guaranteed to be values or declare variables
+        }
+    }
+    ExportNamedDeclaration(node) {
+        if (node.source) {
+            // export ... from 'foo';
+            // these are external identifiers so there shouldn't be references or defs
+            return;
+        }
+        if (!node.declaration) {
+            // export { x };
+            this.visitChildren(node);
+        }
+        else {
+            // export const x = 1;
+            // this is not included in the scope of this visitor as it creates a variable
+        }
+    }
+    ExportSpecifier(node) {
+        this.visit(node.local);
+    }
+}
+exports.ExportVisitor = ExportVisitor;
+_referencer = new WeakMap(), _exportNode = new WeakMap();
+//# sourceMappingURL=ExportVisitor.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..607277429fae99b54e03f0ac630420be1920aa5d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ExportVisitor.js","sourceRoot":"","sources":["../../src/referencer/ExportVisitor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAoE;AAEpE,uCAAoC;AAOpC,MAAM,aAAc,SAAQ,iBAAO;IAIjC,YAAY,IAAgB,EAAE,UAAsB;QAClD,KAAK,CAAC,UAAU,CAAC,CAAC;QAJpB,8BAAiC;QACjC,8BAAiC;QAI/B,uBAAA,IAAI,eAAe,IAAI,EAAC;QACxB,uBAAA,IAAI,eAAe,UAAU,EAAC;IAChC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,UAAsB,EAAE,IAAgB;QACnD,MAAM,gBAAgB,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC7D,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAES,UAAU,CAAC,IAAyB;QAC5C,IAAI,0CAAiB,UAAU,KAAK,MAAM,EAAE;YAC1C,wCAAwC;YACxC,0CAAiB,YAAY,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SACrD;aAAM;YACL,0CAAiB,YAAY,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;SAC9D;IACH,CAAC;IAES,wBAAwB,CAChC,IAAuC;QAEvC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU,EAAE;YACvD,oBAAoB;YACpB,qCAAqC;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC9B;aAAM;YACL,sBAAsB;YACtB,sBAAsB;YACtB,MAAM;YACN,+GAA+G;SAChH;IACH,CAAC;IAES,sBAAsB,CAC9B,IAAqC;QAErC,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,yBAAyB;YACzB,0EAA0E;YAC1E,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,gBAAgB;YAChB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SAC1B;aAAM;YACL,sBAAsB;YACtB,6EAA6E;SAC9E;IACH,CAAC;IAES,eAAe,CAAC,IAA8B;QACtD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;CACF;AAEQ,sCAAa"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dbad766859c1a686a06b9eaea681629805cbea35
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.d.ts
@@ -0,0 +1,14 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Referencer } from './Referencer';
+import { Visitor } from './Visitor';
+declare class ImportVisitor extends Visitor {
+    #private;
+    constructor(declaration: TSESTree.ImportDeclaration, referencer: Referencer);
+    static visit(referencer: Referencer, declaration: TSESTree.ImportDeclaration): void;
+    protected visitImport(id: TSESTree.Identifier, specifier: TSESTree.ImportDefaultSpecifier | TSESTree.ImportNamespaceSpecifier | TSESTree.ImportSpecifier): void;
+    protected ImportNamespaceSpecifier(node: TSESTree.ImportNamespaceSpecifier): void;
+    protected ImportDefaultSpecifier(node: TSESTree.ImportDefaultSpecifier): void;
+    protected ImportSpecifier(node: TSESTree.ImportSpecifier): void;
+}
+export { ImportVisitor };
+//# sourceMappingURL=ImportVisitor.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..87f59ff578c455ae2c87adde84d892dad92adf63
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ImportVisitor.d.ts","sourceRoot":"","sources":["../../src/referencer/ImportVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,cAAM,aAAc,SAAQ,OAAO;;gBAIrB,WAAW,EAAE,QAAQ,CAAC,iBAAiB,EAAE,UAAU,EAAE,UAAU;IAM3E,MAAM,CAAC,KAAK,CACV,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,QAAQ,CAAC,iBAAiB,GACtC,IAAI;IAKP,SAAS,CAAC,WAAW,CACnB,EAAE,EAAE,QAAQ,CAAC,UAAU,EACvB,SAAS,EACL,QAAQ,CAAC,sBAAsB,GAC/B,QAAQ,CAAC,wBAAwB,GACjC,QAAQ,CAAC,eAAe,GAC3B,IAAI;IASP,SAAS,CAAC,wBAAwB,CAChC,IAAI,EAAE,QAAQ,CAAC,wBAAwB,GACtC,IAAI;IAKP,SAAS,CAAC,sBAAsB,CAC9B,IAAI,EAAE,QAAQ,CAAC,sBAAsB,GACpC,IAAI;IAKP,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,GAAG,IAAI;CAIhE;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.js b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.js
new file mode 100644
index 0000000000000000000000000000000000000000..dcc08d6b9b4507dceeacb4915e1f908345980205
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.js
@@ -0,0 +1,51 @@
+"use strict";
+var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to set private field on non-instance");
+    }
+    privateMap.set(receiver, value);
+    return value;
+};
+var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to get private field on non-instance");
+    }
+    return privateMap.get(receiver);
+};
+var _declaration, _referencer;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ImportVisitor = void 0;
+const definition_1 = require("../definition");
+const Visitor_1 = require("./Visitor");
+class ImportVisitor extends Visitor_1.Visitor {
+    constructor(declaration, referencer) {
+        super(referencer);
+        _declaration.set(this, void 0);
+        _referencer.set(this, void 0);
+        __classPrivateFieldSet(this, _declaration, declaration);
+        __classPrivateFieldSet(this, _referencer, referencer);
+    }
+    static visit(referencer, declaration) {
+        const importReferencer = new ImportVisitor(declaration, referencer);
+        importReferencer.visit(declaration);
+    }
+    visitImport(id, specifier) {
+        __classPrivateFieldGet(this, _referencer).currentScope()
+            .defineIdentifier(id, new definition_1.ImportBindingDefinition(id, specifier, __classPrivateFieldGet(this, _declaration)));
+    }
+    ImportNamespaceSpecifier(node) {
+        const local = node.local;
+        this.visitImport(local, node);
+    }
+    ImportDefaultSpecifier(node) {
+        const local = node.local;
+        this.visitImport(local, node);
+    }
+    ImportSpecifier(node) {
+        const local = node.local;
+        this.visitImport(local, node);
+    }
+}
+exports.ImportVisitor = ImportVisitor;
+_declaration = new WeakMap(), _referencer = new WeakMap();
+//# sourceMappingURL=ImportVisitor.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..220a7c856b7d5c7a3cd297f76184b96ee2d79a10
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ImportVisitor.js","sourceRoot":"","sources":["../../src/referencer/ImportVisitor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,8CAAwD;AAExD,uCAAoC;AAEpC,MAAM,aAAc,SAAQ,iBAAO;IAIjC,YAAY,WAAuC,EAAE,UAAsB;QACzE,KAAK,CAAC,UAAU,CAAC,CAAC;QAJpB,+BAAkD;QAClD,8BAAiC;QAI/B,uBAAA,IAAI,gBAAgB,WAAW,EAAC;QAChC,uBAAA,IAAI,eAAe,UAAU,EAAC;IAChC,CAAC;IAED,MAAM,CAAC,KAAK,CACV,UAAsB,EACtB,WAAuC;QAEvC,MAAM,gBAAgB,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACpE,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAES,WAAW,CACnB,EAAuB,EACvB,SAG4B;QAE5B,0CACG,YAAY,EAAE;aACd,gBAAgB,CACf,EAAE,EACF,IAAI,oCAAuB,CAAC,EAAE,EAAE,SAAS,6CAAoB,CAC9D,CAAC;IACN,CAAC;IAES,wBAAwB,CAChC,IAAuC;QAEvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAES,sBAAsB,CAC9B,IAAqC;QAErC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAES,eAAe,CAAC,IAA8B;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;CACF;AAEQ,sCAAa"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1ab9b43099a44f22910c1ec74bc45cb2e6019777
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.d.ts
@@ -0,0 +1,28 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { VisitorBase, VisitorOptions } from './Visitor';
+declare type PatternVisitorCallback = (pattern: TSESTree.Identifier, info: {
+    assignments: (TSESTree.AssignmentPattern | TSESTree.AssignmentExpression)[];
+    rest: boolean;
+    topLevel: boolean;
+}) => void;
+declare type PatternVisitorOptions = VisitorOptions;
+declare class PatternVisitor extends VisitorBase {
+    #private;
+    static isPattern(node: TSESTree.Node): node is TSESTree.Identifier | TSESTree.ObjectPattern | TSESTree.ArrayPattern | TSESTree.SpreadElement | TSESTree.RestElement | TSESTree.AssignmentPattern;
+    readonly rightHandNodes: TSESTree.Node[];
+    constructor(options: PatternVisitorOptions, rootPattern: TSESTree.Node, callback: PatternVisitorCallback);
+    protected ArrayExpression(node: TSESTree.ArrayExpression): void;
+    protected ArrayPattern(pattern: TSESTree.ArrayPattern): void;
+    protected AssignmentExpression(node: TSESTree.AssignmentExpression): void;
+    protected AssignmentPattern(pattern: TSESTree.AssignmentPattern): void;
+    protected CallExpression(node: TSESTree.CallExpression): void;
+    protected Decorator(): void;
+    protected Identifier(pattern: TSESTree.Identifier): void;
+    protected MemberExpression(node: TSESTree.MemberExpression): void;
+    protected Property(property: TSESTree.Property): void;
+    protected RestElement(pattern: TSESTree.RestElement): void;
+    protected SpreadElement(node: TSESTree.SpreadElement): void;
+    protected TSTypeAnnotation(): void;
+}
+export { PatternVisitor, PatternVisitorCallback, PatternVisitorOptions };
+//# sourceMappingURL=PatternVisitor.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..2a559f944b9ef136ba9d4bbbf7551995411953f9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"PatternVisitor.d.ts","sourceRoot":"","sources":["../../src/referencer/PatternVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAExD,aAAK,sBAAsB,GAAG,CAC5B,OAAO,EAAE,QAAQ,CAAC,UAAU,EAC5B,IAAI,EAAE;IACJ,WAAW,EAAE,CAAC,QAAQ,CAAC,iBAAiB,GAAG,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;IAC5E,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB,KACE,IAAI,CAAC;AAEV,aAAK,qBAAqB,GAAG,cAAc,CAAC;AAC5C,cAAM,cAAe,SAAQ,WAAW;;WACxB,SAAS,CACrB,IAAI,EAAE,QAAQ,CAAC,IAAI,GAClB,IAAI,IACH,QAAQ,CAAC,UAAU,GACnB,QAAQ,CAAC,aAAa,GACtB,QAAQ,CAAC,YAAY,GACrB,QAAQ,CAAC,aAAa,GACtB,QAAQ,CAAC,WAAW,GACpB,QAAQ,CAAC,iBAAiB;IAmB9B,SAAgB,cAAc,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAM;gBAInD,OAAO,EAAE,qBAAqB,EAC9B,WAAW,EAAE,QAAQ,CAAC,IAAI,EAC1B,QAAQ,EAAE,sBAAsB;IAOlC,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,GAAG,IAAI;IAI/D,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,GAAG,IAAI;IAM5D,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,oBAAoB,GAAG,IAAI;IAOzE,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,iBAAiB,GAAG,IAAI;IAOtE,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,GAAG,IAAI;IAQ7D,SAAS,CAAC,SAAS,IAAI,IAAI;IAI3B,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,GAAG,IAAI;IAcxD,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,GAAG,IAAI;IAUjE,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAYrD,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,GAAG,IAAI;IAM1D,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,GAAG,IAAI;IAI3D,SAAS,CAAC,gBAAgB,IAAI,IAAI;CAGnC;AAED,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.js b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.js
new file mode 100644
index 0000000000000000000000000000000000000000..6e96a7bcd57d840ddac3c7d5a9b66e466782b555
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.js
@@ -0,0 +1,113 @@
+"use strict";
+var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to set private field on non-instance");
+    }
+    privateMap.set(receiver, value);
+    return value;
+};
+var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to get private field on non-instance");
+    }
+    return privateMap.get(receiver);
+};
+var _rootPattern, _callback, _assignments, _restElements;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.PatternVisitor = void 0;
+const types_1 = require("@typescript-eslint/types");
+const Visitor_1 = require("./Visitor");
+class PatternVisitor extends Visitor_1.VisitorBase {
+    constructor(options, rootPattern, callback) {
+        super(options);
+        _rootPattern.set(this, void 0);
+        _callback.set(this, void 0);
+        _assignments.set(this, []);
+        this.rightHandNodes = [];
+        _restElements.set(this, []);
+        __classPrivateFieldSet(this, _rootPattern, rootPattern);
+        __classPrivateFieldSet(this, _callback, callback);
+    }
+    static isPattern(node) {
+        const nodeType = node.type;
+        return (nodeType === types_1.AST_NODE_TYPES.Identifier ||
+            nodeType === types_1.AST_NODE_TYPES.ObjectPattern ||
+            nodeType === types_1.AST_NODE_TYPES.ArrayPattern ||
+            nodeType === types_1.AST_NODE_TYPES.SpreadElement ||
+            nodeType === types_1.AST_NODE_TYPES.RestElement ||
+            nodeType === types_1.AST_NODE_TYPES.AssignmentPattern);
+    }
+    ArrayExpression(node) {
+        node.elements.forEach(this.visit, this);
+    }
+    ArrayPattern(pattern) {
+        for (const element of pattern.elements) {
+            this.visit(element);
+        }
+    }
+    AssignmentExpression(node) {
+        __classPrivateFieldGet(this, _assignments).push(node);
+        this.visit(node.left);
+        this.rightHandNodes.push(node.right);
+        __classPrivateFieldGet(this, _assignments).pop();
+    }
+    AssignmentPattern(pattern) {
+        __classPrivateFieldGet(this, _assignments).push(pattern);
+        this.visit(pattern.left);
+        this.rightHandNodes.push(pattern.right);
+        __classPrivateFieldGet(this, _assignments).pop();
+    }
+    CallExpression(node) {
+        // arguments are right hand nodes.
+        node.arguments.forEach(a => {
+            this.rightHandNodes.push(a);
+        });
+        this.visit(node.callee);
+    }
+    Decorator() {
+        // don't visit any decorators when exploring a pattern
+    }
+    Identifier(pattern) {
+        var _a;
+        const lastRestElement = (_a = __classPrivateFieldGet(this, _restElements)[__classPrivateFieldGet(this, _restElements).length - 1]) !== null && _a !== void 0 ? _a : null;
+        __classPrivateFieldGet(this, _callback).call(this, pattern, {
+            topLevel: pattern === __classPrivateFieldGet(this, _rootPattern),
+            rest: lastRestElement !== null &&
+                lastRestElement !== undefined &&
+                lastRestElement.argument === pattern,
+            assignments: __classPrivateFieldGet(this, _assignments),
+        });
+    }
+    MemberExpression(node) {
+        // Computed property's key is a right hand node.
+        if (node.computed) {
+            this.rightHandNodes.push(node.property);
+        }
+        // the object is only read, write to its property.
+        this.rightHandNodes.push(node.object);
+    }
+    Property(property) {
+        // Computed property's key is a right hand node.
+        if (property.computed) {
+            this.rightHandNodes.push(property.key);
+        }
+        // If it's shorthand, its key is same as its value.
+        // If it's shorthand and has its default value, its key is same as its value.left (the value is AssignmentPattern).
+        // If it's not shorthand, the name of new variable is its value's.
+        this.visit(property.value);
+    }
+    RestElement(pattern) {
+        __classPrivateFieldGet(this, _restElements).push(pattern);
+        this.visit(pattern.argument);
+        __classPrivateFieldGet(this, _restElements).pop();
+    }
+    SpreadElement(node) {
+        this.visit(node.argument);
+    }
+    TSTypeAnnotation() {
+        // we don't want to visit types
+    }
+}
+exports.PatternVisitor = PatternVisitor;
+_rootPattern = new WeakMap(), _callback = new WeakMap(), _assignments = new WeakMap(), _restElements = new WeakMap();
+//# sourceMappingURL=PatternVisitor.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e4c57bdf9c7ee24657f297c76c1c40564c0590b6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"PatternVisitor.js","sourceRoot":"","sources":["../../src/referencer/PatternVisitor.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..306cd842080bdd4721ea9ed7ee7089e1ff8c5dc3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.d.ts
@@ -0,0 +1,89 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from '../scope';
+import { Variable } from '../variable';
+declare enum ReferenceFlag {
+    Read = 1,
+    Write = 2,
+    ReadWrite = 3
+}
+interface ReferenceImplicitGlobal {
+    node: TSESTree.Node;
+    pattern: TSESTree.BindingName;
+    ref?: Reference;
+}
+declare enum ReferenceTypeFlag {
+    Value = 1,
+    Type = 2
+}
+/**
+ * A Reference represents a single occurrence of an identifier in code.
+ */
+declare class Reference {
+    #private;
+    /**
+     * A unique ID for this instance - primarily used to help debugging and testing
+     */
+    readonly $id: number;
+    /**
+     * Reference to the enclosing Scope.
+     * @public
+     */
+    readonly from: Scope;
+    /**
+     * Identifier syntax node.
+     * @public
+     */
+    readonly identifier: TSESTree.Identifier | TSESTree.JSXIdentifier;
+    /**
+     * `true` if this writing reference is a variable initializer or a default value.
+     * @public
+     */
+    readonly init?: boolean;
+    /**
+     * The {@link Variable} object that this reference refers to. If such variable was not defined, this is `null`.
+     * @public
+     */
+    resolved: Variable | null;
+    /**
+     * If reference is writeable, this is the node being written to it.
+     * @public
+     */
+    readonly writeExpr?: TSESTree.Node | null;
+    readonly maybeImplicitGlobal?: ReferenceImplicitGlobal | null;
+    /**
+     * True if this reference can reference types
+     */
+    get isTypeReference(): boolean;
+    /**
+     * True if this reference can reference values
+     */
+    get isValueReference(): boolean;
+    constructor(identifier: TSESTree.Identifier | TSESTree.JSXIdentifier, scope: Scope, flag: ReferenceFlag, writeExpr?: TSESTree.Node | null, maybeImplicitGlobal?: ReferenceImplicitGlobal | null, init?: boolean, referenceType?: ReferenceTypeFlag);
+    /**
+     * Whether the reference is writeable.
+     * @public
+     */
+    isWrite(): boolean;
+    /**
+     * Whether the reference is readable.
+     * @public
+     */
+    isRead(): boolean;
+    /**
+     * Whether the reference is read-only.
+     * @public
+     */
+    isReadOnly(): boolean;
+    /**
+     * Whether the reference is write-only.
+     * @public
+     */
+    isWriteOnly(): boolean;
+    /**
+     * Whether the reference is read-write.
+     * @public
+     */
+    isReadWrite(): boolean;
+}
+export { Reference, ReferenceFlag, ReferenceTypeFlag, ReferenceImplicitGlobal };
+//# sourceMappingURL=Reference.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..b5dc6c6d3a92b4decd2c038ad223ecf21e1f1112
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Reference.d.ts","sourceRoot":"","sources":["../../src/referencer/Reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,aAAK,aAAa;IAChB,IAAI,IAAM;IACV,KAAK,IAAM;IACX,SAAS,IAAM;CAChB;AAED,UAAU,uBAAuB;IAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC;IAC9B,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAID,aAAK,iBAAiB;IACpB,KAAK,IAAM;IACX,IAAI,IAAM;CACX;AAED;;GAEG;AACH,cAAM,SAAS;;IACb;;OAEG;IACH,SAAgB,GAAG,EAAE,MAAM,CAAe;IAK1C;;;OAGG;IACH,SAAgB,IAAI,EAAE,KAAK,CAAC;IAC5B;;;OAGG;IACH,SAAgB,UAAU,EAAE,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC;IACzE;;;OAGG;IACH,SAAgB,IAAI,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACI,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACjC;;;OAGG;IACH,SAAgB,SAAS,CAAC,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IAEjD,SAAgB,mBAAmB,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAOrE;;OAEG;IACH,IAAW,eAAe,IAAI,OAAO,CAEpC;IAED;;OAEG;IACH,IAAW,gBAAgB,IAAI,OAAO,CAErC;gBAGC,UAAU,EAAE,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,EACxD,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,aAAa,EACnB,SAAS,CAAC,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,EAChC,mBAAmB,CAAC,EAAE,uBAAuB,GAAG,IAAI,EACpD,IAAI,CAAC,EAAE,OAAO,EACd,aAAa,oBAA0B;IAgBzC;;;OAGG;IACI,OAAO,IAAI,OAAO;IAIzB;;;OAGG;IACI,MAAM,IAAI,OAAO;IAIxB;;;OAGG;IACI,UAAU,IAAI,OAAO;IAI5B;;;OAGG;IACI,WAAW,IAAI,OAAO;IAI7B;;;OAGG;IACI,WAAW,IAAI,OAAO;CAG9B;AAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.js b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.js
new file mode 100644
index 0000000000000000000000000000000000000000..31bd82893e1f14b0ae4e11b97234560e3d77d5c9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.js
@@ -0,0 +1,111 @@
+"use strict";
+var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to set private field on non-instance");
+    }
+    privateMap.set(receiver, value);
+    return value;
+};
+var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to get private field on non-instance");
+    }
+    return privateMap.get(receiver);
+};
+var _flag, _referenceType;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ReferenceTypeFlag = exports.ReferenceFlag = exports.Reference = void 0;
+const ID_1 = require("../ID");
+var ReferenceFlag;
+(function (ReferenceFlag) {
+    ReferenceFlag[ReferenceFlag["Read"] = 1] = "Read";
+    ReferenceFlag[ReferenceFlag["Write"] = 2] = "Write";
+    ReferenceFlag[ReferenceFlag["ReadWrite"] = 3] = "ReadWrite";
+})(ReferenceFlag || (ReferenceFlag = {}));
+exports.ReferenceFlag = ReferenceFlag;
+const generator = ID_1.createIdGenerator();
+var ReferenceTypeFlag;
+(function (ReferenceTypeFlag) {
+    ReferenceTypeFlag[ReferenceTypeFlag["Value"] = 1] = "Value";
+    ReferenceTypeFlag[ReferenceTypeFlag["Type"] = 2] = "Type";
+})(ReferenceTypeFlag || (ReferenceTypeFlag = {}));
+exports.ReferenceTypeFlag = ReferenceTypeFlag;
+/**
+ * A Reference represents a single occurrence of an identifier in code.
+ */
+class Reference {
+    constructor(identifier, scope, flag, writeExpr, maybeImplicitGlobal, init, referenceType = ReferenceTypeFlag.Value) {
+        /**
+         * A unique ID for this instance - primarily used to help debugging and testing
+         */
+        this.$id = generator();
+        /**
+         * The read-write mode of the reference.
+         */
+        _flag.set(this, void 0);
+        /**
+         * In some cases, a reference may be a type, value or both a type and value reference.
+         */
+        _referenceType.set(this, void 0);
+        this.identifier = identifier;
+        this.from = scope;
+        this.resolved = null;
+        __classPrivateFieldSet(this, _flag, flag);
+        if (this.isWrite()) {
+            this.writeExpr = writeExpr;
+            this.init = init;
+        }
+        this.maybeImplicitGlobal = maybeImplicitGlobal;
+        __classPrivateFieldSet(this, _referenceType, referenceType);
+    }
+    /**
+     * True if this reference can reference types
+     */
+    get isTypeReference() {
+        return (__classPrivateFieldGet(this, _referenceType) & ReferenceTypeFlag.Type) !== 0;
+    }
+    /**
+     * True if this reference can reference values
+     */
+    get isValueReference() {
+        return (__classPrivateFieldGet(this, _referenceType) & ReferenceTypeFlag.Value) !== 0;
+    }
+    /**
+     * Whether the reference is writeable.
+     * @public
+     */
+    isWrite() {
+        return !!(__classPrivateFieldGet(this, _flag) & ReferenceFlag.Write);
+    }
+    /**
+     * Whether the reference is readable.
+     * @public
+     */
+    isRead() {
+        return !!(__classPrivateFieldGet(this, _flag) & ReferenceFlag.Read);
+    }
+    /**
+     * Whether the reference is read-only.
+     * @public
+     */
+    isReadOnly() {
+        return __classPrivateFieldGet(this, _flag) === ReferenceFlag.Read;
+    }
+    /**
+     * Whether the reference is write-only.
+     * @public
+     */
+    isWriteOnly() {
+        return __classPrivateFieldGet(this, _flag) === ReferenceFlag.Write;
+    }
+    /**
+     * Whether the reference is read-write.
+     * @public
+     */
+    isReadWrite() {
+        return __classPrivateFieldGet(this, _flag) === ReferenceFlag.ReadWrite;
+    }
+}
+exports.Reference = Reference;
+_flag = new WeakMap(), _referenceType = new WeakMap();
+//# sourceMappingURL=Reference.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..15921825197f067a7444e5dfb0a3ef0ef7f70a8d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Reference.js","sourceRoot":"","sources":["../../src/referencer/Reference.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,8BAA0C;AAI1C,IAAK,aAIJ;AAJD,WAAK,aAAa;IAChB,iDAAU,CAAA;IACV,mDAAW,CAAA;IACX,2DAAe,CAAA;AACjB,CAAC,EAJI,aAAa,KAAb,aAAa,QAIjB;AA0ImB,sCAAa;AAlIjC,MAAM,SAAS,GAAG,sBAAiB,EAAE,CAAC;AAEtC,IAAK,iBAGJ;AAHD,WAAK,iBAAiB;IACpB,2DAAW,CAAA;IACX,yDAAU,CAAA;AACZ,CAAC,EAHI,iBAAiB,KAAjB,iBAAiB,QAGrB;AA6HkC,8CAAiB;AA3HpD;;GAEG;AACH,MAAM,SAAS;IAwDb,YACE,UAAwD,EACxD,KAAY,EACZ,IAAmB,EACnB,SAAgC,EAChC,mBAAoD,EACpD,IAAc,EACd,aAAa,GAAG,iBAAiB,CAAC,KAAK;QA9DzC;;WAEG;QACa,QAAG,GAAW,SAAS,EAAE,CAAC;QAC1C;;WAEG;QACH,wBAA8B;QA6B9B;;WAEG;QACH,iCAA2C;QAyBzC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,uBAAA,IAAI,SAAS,IAAI,EAAC;QAElB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SAClB;QAED,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,uBAAA,IAAI,kBAAkB,aAAa,EAAC;IACtC,CAAC;IAnCD;;OAEG;IACH,IAAW,eAAe;QACxB,OAAO,CAAC,+CAAsB,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,IAAW,gBAAgB;QACzB,OAAO,CAAC,+CAAsB,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC;IAyBD;;;OAGG;IACI,OAAO;QACZ,OAAO,CAAC,CAAC,CAAC,sCAAa,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACI,MAAM;QACX,OAAO,CAAC,CAAC,CAAC,sCAAa,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACI,UAAU;QACf,OAAO,wCAAe,aAAa,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACI,WAAW;QAChB,OAAO,wCAAe,aAAa,CAAC,KAAK,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACI,WAAW;QAChB,OAAO,wCAAe,aAAa,CAAC,SAAS,CAAC;IAChD,CAAC;CACF;AAEQ,8BAAS"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..86346bc3a979f7a37e00c17cd06ed1a0825a399b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.d.ts
@@ -0,0 +1,87 @@
+import { Lib, TSESTree } from '@typescript-eslint/types';
+import { ReferenceImplicitGlobal } from './Reference';
+import { ScopeManager } from '../ScopeManager';
+import { Visitor, VisitorOptions } from './Visitor';
+import { Scope } from '../scope';
+interface ReferencerOptions extends VisitorOptions {
+    jsxPragma: string;
+    jsxFragmentName: string | null;
+    lib: Lib[];
+}
+declare class Referencer extends Visitor {
+    #private;
+    readonly scopeManager: ScopeManager;
+    constructor(options: ReferencerOptions, scopeManager: ScopeManager);
+    currentScope(): Scope;
+    currentScope(throwOnNull: true): Scope | null;
+    close(node: TSESTree.Node): void;
+    protected pushInnerMethodDefinition(isInnerMethodDefinition: boolean): boolean;
+    protected popInnerMethodDefinition(isInnerMethodDefinition: boolean | undefined): void;
+    protected referencingDefaultValue(pattern: TSESTree.Identifier, assignments: (TSESTree.AssignmentExpression | TSESTree.AssignmentPattern)[], maybeImplicitGlobal: ReferenceImplicitGlobal | null, init: boolean): void;
+    private populateGlobalsFromLib;
+    /**
+     * Searches for a variable named "name" in the upper scopes and adds a pseudo-reference from itself to itself
+     */
+    private referenceInSomeUpperScope;
+    private referenceJsxPragma;
+    private referenceJsxFragment;
+    protected visitClass(node: TSESTree.ClassDeclaration | TSESTree.ClassExpression): void;
+    protected visitClassProperty(node: TSESTree.TSAbstractClassProperty | TSESTree.ClassProperty): void;
+    protected visitForIn(node: TSESTree.ForInStatement | TSESTree.ForOfStatement): void;
+    protected visitFunctionParameterTypeAnnotation(node: TSESTree.Parameter): void;
+    protected visitFunction(node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.TSDeclareFunction | TSESTree.TSEmptyBodyFunctionExpression): void;
+    protected visitProperty(node: TSESTree.ClassProperty | TSESTree.MethodDefinition | TSESTree.Property | TSESTree.TSAbstractClassProperty | TSESTree.TSAbstractMethodDefinition): void;
+    protected visitType(node: TSESTree.Node | null | undefined): void;
+    protected visitTypeAssertion(node: TSESTree.TSAsExpression | TSESTree.TSTypeAssertion): void;
+    protected ArrowFunctionExpression(node: TSESTree.ArrowFunctionExpression): void;
+    protected AssignmentExpression(node: TSESTree.AssignmentExpression): void;
+    protected BlockStatement(node: TSESTree.BlockStatement): void;
+    protected BreakStatement(): void;
+    protected CallExpression(node: TSESTree.CallExpression): void;
+    protected CatchClause(node: TSESTree.CatchClause): void;
+    protected ClassExpression(node: TSESTree.ClassExpression): void;
+    protected ClassDeclaration(node: TSESTree.ClassDeclaration): void;
+    protected ClassProperty(node: TSESTree.ClassProperty): void;
+    protected ContinueStatement(): void;
+    protected ExportAllDeclaration(): void;
+    protected ExportDefaultDeclaration(node: TSESTree.ExportDefaultDeclaration): void;
+    protected ExportNamedDeclaration(node: TSESTree.ExportNamedDeclaration): void;
+    protected ForInStatement(node: TSESTree.ForInStatement): void;
+    protected ForOfStatement(node: TSESTree.ForOfStatement): void;
+    protected ForStatement(node: TSESTree.ForStatement): void;
+    protected FunctionDeclaration(node: TSESTree.FunctionDeclaration): void;
+    protected FunctionExpression(node: TSESTree.FunctionExpression): void;
+    protected Identifier(node: TSESTree.Identifier): void;
+    protected ImportDeclaration(node: TSESTree.ImportDeclaration): void;
+    protected JSXAttribute(node: TSESTree.JSXAttribute): void;
+    protected JSXClosingElement(): void;
+    protected JSXFragment(node: TSESTree.JSXFragment): void;
+    protected JSXIdentifier(node: TSESTree.JSXIdentifier): void;
+    protected JSXMemberExpression(node: TSESTree.JSXMemberExpression): void;
+    protected JSXOpeningElement(node: TSESTree.JSXOpeningElement): void;
+    protected LabeledStatement(node: TSESTree.LabeledStatement): void;
+    protected MemberExpression(node: TSESTree.MemberExpression): void;
+    protected MetaProperty(): void;
+    protected MethodDefinition(node: TSESTree.MethodDefinition): void;
+    protected NewExpression(node: TSESTree.NewExpression): void;
+    protected Program(node: TSESTree.Program): void;
+    protected Property(node: TSESTree.Property): void;
+    protected SwitchStatement(node: TSESTree.SwitchStatement): void;
+    protected TaggedTemplateExpression(node: TSESTree.TaggedTemplateExpression): void;
+    protected TSAbstractClassProperty(node: TSESTree.TSAbstractClassProperty): void;
+    protected TSAbstractMethodDefinition(node: TSESTree.TSAbstractMethodDefinition): void;
+    protected TSAsExpression(node: TSESTree.TSAsExpression): void;
+    protected TSDeclareFunction(node: TSESTree.TSDeclareFunction): void;
+    protected TSImportEqualsDeclaration(node: TSESTree.TSImportEqualsDeclaration): void;
+    protected TSEmptyBodyFunctionExpression(node: TSESTree.TSEmptyBodyFunctionExpression): void;
+    protected TSEnumDeclaration(node: TSESTree.TSEnumDeclaration): void;
+    protected TSInterfaceDeclaration(node: TSESTree.TSInterfaceDeclaration): void;
+    protected TSModuleDeclaration(node: TSESTree.TSModuleDeclaration): void;
+    protected TSTypeAliasDeclaration(node: TSESTree.TSTypeAliasDeclaration): void;
+    protected TSTypeAssertion(node: TSESTree.TSTypeAssertion): void;
+    protected UpdateExpression(node: TSESTree.UpdateExpression): void;
+    protected VariableDeclaration(node: TSESTree.VariableDeclaration): void;
+    protected WithStatement(node: TSESTree.WithStatement): void;
+}
+export { Referencer, ReferencerOptions };
+//# sourceMappingURL=Referencer.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..9e5b3d1cb8d02db0f337b52b3f784e042e0edb18
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Referencer.d.ts","sourceRoot":"","sources":["../../src/referencer/Referencer.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.js b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.js
new file mode 100644
index 0000000000000000000000000000000000000000..bd6b796fdc701ea7e878f6aa6b8a08f0fd3f0e37
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.js
@@ -0,0 +1,580 @@
+"use strict";
+var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to set private field on non-instance");
+    }
+    privateMap.set(receiver, value);
+    return value;
+};
+var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to get private field on non-instance");
+    }
+    return privateMap.get(receiver);
+};
+var _isInnerMethodDefinition, _jsxPragma, _jsxFragmentName, _hasReferencedJsxFactory, _hasReferencedJsxFragmentFactory, _lib;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Referencer = void 0;
+const types_1 = require("@typescript-eslint/types");
+const ExportVisitor_1 = require("./ExportVisitor");
+const ImportVisitor_1 = require("./ImportVisitor");
+const PatternVisitor_1 = require("./PatternVisitor");
+const Reference_1 = require("./Reference");
+const TypeVisitor_1 = require("./TypeVisitor");
+const Visitor_1 = require("./Visitor");
+const assert_1 = require("../assert");
+const definition_1 = require("../definition");
+const lib_1 = require("../lib");
+// Referencing variables and creating bindings.
+class Referencer extends Visitor_1.Visitor {
+    constructor(options, scopeManager) {
+        super(options);
+        _isInnerMethodDefinition.set(this, void 0);
+        _jsxPragma.set(this, void 0);
+        _jsxFragmentName.set(this, void 0);
+        _hasReferencedJsxFactory.set(this, false);
+        _hasReferencedJsxFragmentFactory.set(this, false);
+        _lib.set(this, void 0);
+        this.scopeManager = scopeManager;
+        __classPrivateFieldSet(this, _jsxPragma, options.jsxPragma);
+        __classPrivateFieldSet(this, _jsxFragmentName, options.jsxFragmentName);
+        __classPrivateFieldSet(this, _lib, options.lib);
+        __classPrivateFieldSet(this, _isInnerMethodDefinition, false);
+    }
+    currentScope(dontThrowOnNull) {
+        if (!dontThrowOnNull) {
+            assert_1.assert(this.scopeManager.currentScope, 'aaa');
+        }
+        return this.scopeManager.currentScope;
+    }
+    close(node) {
+        while (this.currentScope(true) && node === this.currentScope().block) {
+            this.scopeManager.currentScope = this.currentScope().close(this.scopeManager);
+        }
+    }
+    pushInnerMethodDefinition(isInnerMethodDefinition) {
+        const previous = __classPrivateFieldGet(this, _isInnerMethodDefinition);
+        __classPrivateFieldSet(this, _isInnerMethodDefinition, isInnerMethodDefinition);
+        return previous;
+    }
+    popInnerMethodDefinition(isInnerMethodDefinition) {
+        __classPrivateFieldSet(this, _isInnerMethodDefinition, !!isInnerMethodDefinition);
+    }
+    referencingDefaultValue(pattern, assignments, maybeImplicitGlobal, init) {
+        assignments.forEach(assignment => {
+            this.currentScope().referenceValue(pattern, Reference_1.ReferenceFlag.Write, assignment.right, maybeImplicitGlobal, init);
+        });
+    }
+    populateGlobalsFromLib(globalScope) {
+        for (const lib of __classPrivateFieldGet(this, _lib)) {
+            const variables = lib_1.lib[lib];
+            /* istanbul ignore if */ if (!variables) {
+                throw new Error(`Invalid value for lib provided: ${lib}`);
+            }
+            for (const variable of Object.values(variables)) {
+                globalScope.defineImplicitVariable(variable);
+            }
+        }
+        // for const assertions (`{} as const` / `<const>{}`)
+        globalScope.defineImplicitVariable({
+            name: 'const',
+            eslintImplicitGlobalSetting: 'readonly',
+            isTypeVariable: true,
+            isValueVariable: false,
+        });
+    }
+    /**
+     * Searches for a variable named "name" in the upper scopes and adds a pseudo-reference from itself to itself
+     */
+    referenceInSomeUpperScope(name) {
+        let scope = this.scopeManager.currentScope;
+        while (scope) {
+            const variable = scope.set.get(name);
+            if (!variable) {
+                scope = scope.upper;
+                continue;
+            }
+            scope.referenceValue(variable.identifiers[0]);
+            return true;
+        }
+        return false;
+    }
+    referenceJsxPragma() {
+        if (__classPrivateFieldGet(this, _hasReferencedJsxFactory)) {
+            return;
+        }
+        __classPrivateFieldSet(this, _hasReferencedJsxFactory, this.referenceInSomeUpperScope(__classPrivateFieldGet(this, _jsxPragma)));
+    }
+    referenceJsxFragment() {
+        if (__classPrivateFieldGet(this, _jsxFragmentName) === null || __classPrivateFieldGet(this, _hasReferencedJsxFragmentFactory)) {
+            return;
+        }
+        __classPrivateFieldSet(this, _hasReferencedJsxFragmentFactory, this.referenceInSomeUpperScope(__classPrivateFieldGet(this, _jsxFragmentName)));
+    }
+    ///////////////////
+    // Visit helpers //
+    ///////////////////
+    visitClass(node) {
+        var _a, _b;
+        if (node.type === types_1.AST_NODE_TYPES.ClassDeclaration && node.id) {
+            this.currentScope().defineIdentifier(node.id, new definition_1.ClassNameDefinition(node.id, node));
+        }
+        (_a = node.decorators) === null || _a === void 0 ? void 0 : _a.forEach(d => this.visit(d));
+        this.scopeManager.nestClassScope(node);
+        if (node.id) {
+            // define the class name again inside the new scope
+            // references to the class should not resolve directly to the parent class
+            this.currentScope().defineIdentifier(node.id, new definition_1.ClassNameDefinition(node.id, node));
+        }
+        this.visit(node.superClass);
+        // visit the type param declarations
+        this.visitType(node.typeParameters);
+        // then the usages
+        this.visitType(node.superTypeParameters);
+        (_b = node.implements) === null || _b === void 0 ? void 0 : _b.forEach(imp => this.visitType(imp));
+        this.visit(node.body);
+        this.close(node);
+    }
+    visitClassProperty(node) {
+        this.visitProperty(node);
+        this.visitType(node.typeAnnotation);
+    }
+    visitForIn(node) {
+        if (node.left.type === types_1.AST_NODE_TYPES.VariableDeclaration &&
+            node.left.kind !== 'var') {
+            this.scopeManager.nestForScope(node);
+        }
+        if (node.left.type === types_1.AST_NODE_TYPES.VariableDeclaration) {
+            this.visit(node.left);
+            this.visitPattern(node.left.declarations[0].id, pattern => {
+                this.currentScope().referenceValue(pattern, Reference_1.ReferenceFlag.Write, node.right, null, true);
+            });
+        }
+        else {
+            this.visitPattern(node.left, (pattern, info) => {
+                const maybeImplicitGlobal = !this.currentScope().isStrict
+                    ? {
+                        pattern,
+                        node,
+                    }
+                    : null;
+                this.referencingDefaultValue(pattern, info.assignments, maybeImplicitGlobal, false);
+                this.currentScope().referenceValue(pattern, Reference_1.ReferenceFlag.Write, node.right, maybeImplicitGlobal, false);
+            }, { processRightHandNodes: true });
+        }
+        this.visit(node.right);
+        this.visit(node.body);
+        this.close(node);
+    }
+    visitFunctionParameterTypeAnnotation(node) {
+        if ('typeAnnotation' in node) {
+            this.visitType(node.typeAnnotation);
+        }
+        else if (node.type === types_1.AST_NODE_TYPES.AssignmentPattern) {
+            this.visitType(node.left.typeAnnotation);
+        }
+        else if (node.type === types_1.AST_NODE_TYPES.TSParameterProperty) {
+            this.visitFunctionParameterTypeAnnotation(node.parameter);
+        }
+    }
+    visitFunction(node) {
+        // FunctionDeclaration name is defined in upper scope
+        // NOTE: Not referring variableScope. It is intended.
+        // Since
+        //  in ES5, FunctionDeclaration should be in FunctionBody.
+        //  in ES6, FunctionDeclaration should be block scoped.
+        var _a;
+        if (node.type === types_1.AST_NODE_TYPES.FunctionExpression) {
+            if (node.id) {
+                // FunctionExpression with name creates its special scope;
+                // FunctionExpressionNameScope.
+                this.scopeManager.nestFunctionExpressionNameScope(node);
+            }
+        }
+        else if (node.id) {
+            // id is defined in upper scope
+            this.currentScope().defineIdentifier(node.id, new definition_1.FunctionNameDefinition(node.id, node));
+        }
+        // Consider this function is in the MethodDefinition.
+        this.scopeManager.nestFunctionScope(node, __classPrivateFieldGet(this, _isInnerMethodDefinition));
+        // Process parameter declarations.
+        for (const param of node.params) {
+            this.visitPattern(param, (pattern, info) => {
+                this.currentScope().defineIdentifier(pattern, new definition_1.ParameterDefinition(pattern, node, info.rest));
+                this.referencingDefaultValue(pattern, info.assignments, null, true);
+            }, { processRightHandNodes: true });
+            this.visitFunctionParameterTypeAnnotation(param);
+            (_a = param.decorators) === null || _a === void 0 ? void 0 : _a.forEach(d => this.visit(d));
+        }
+        this.visitType(node.returnType);
+        this.visitType(node.typeParameters);
+        // In TypeScript there are a number of function-like constructs which have no body,
+        // so check it exists before traversing
+        if (node.body) {
+            // Skip BlockStatement to prevent creating BlockStatement scope.
+            if (node.body.type === types_1.AST_NODE_TYPES.BlockStatement) {
+                this.visitChildren(node.body);
+            }
+            else {
+                this.visit(node.body);
+            }
+        }
+        this.close(node);
+    }
+    visitProperty(node) {
+        var _a;
+        let previous;
+        if (node.computed) {
+            this.visit(node.key);
+        }
+        const isMethodDefinition = node.type === types_1.AST_NODE_TYPES.MethodDefinition;
+        if (isMethodDefinition) {
+            previous = this.pushInnerMethodDefinition(true);
+        }
+        this.visit(node.value);
+        if (isMethodDefinition) {
+            this.popInnerMethodDefinition(previous);
+        }
+        if ('decorators' in node) {
+            (_a = node.decorators) === null || _a === void 0 ? void 0 : _a.forEach(d => this.visit(d));
+        }
+    }
+    visitType(node) {
+        if (!node) {
+            return;
+        }
+        TypeVisitor_1.TypeVisitor.visit(this, node);
+    }
+    visitTypeAssertion(node) {
+        this.visit(node.expression);
+        this.visitType(node.typeAnnotation);
+    }
+    /////////////////////
+    // Visit selectors //
+    /////////////////////
+    ArrowFunctionExpression(node) {
+        this.visitFunction(node);
+    }
+    AssignmentExpression(node) {
+        let left = node.left;
+        switch (left.type) {
+            case types_1.AST_NODE_TYPES.TSAsExpression:
+            case types_1.AST_NODE_TYPES.TSTypeAssertion:
+                // explicitly visit the type annotation
+                this.visit(left.typeAnnotation);
+            // intentional fallthrough
+            case types_1.AST_NODE_TYPES.TSNonNullExpression:
+                // unwrap the expression
+                left = left.expression;
+        }
+        if (PatternVisitor_1.PatternVisitor.isPattern(left)) {
+            if (node.operator === '=') {
+                this.visitPattern(left, (pattern, info) => {
+                    const maybeImplicitGlobal = !this.currentScope().isStrict
+                        ? {
+                            pattern,
+                            node,
+                        }
+                        : null;
+                    this.referencingDefaultValue(pattern, info.assignments, maybeImplicitGlobal, false);
+                    this.currentScope().referenceValue(pattern, Reference_1.ReferenceFlag.Write, node.right, maybeImplicitGlobal, false);
+                }, { processRightHandNodes: true });
+            }
+            else if (left.type === types_1.AST_NODE_TYPES.Identifier) {
+                this.currentScope().referenceValue(left, Reference_1.ReferenceFlag.ReadWrite, node.right);
+            }
+        }
+        else {
+            this.visit(left);
+        }
+        this.visit(node.right);
+    }
+    BlockStatement(node) {
+        if (this.scopeManager.isES6()) {
+            this.scopeManager.nestBlockScope(node);
+        }
+        this.visitChildren(node);
+        this.close(node);
+    }
+    BreakStatement() {
+        // don't reference the break statement's label
+    }
+    CallExpression(node) {
+        this.visitChildren(node, ['typeParameters']);
+        this.visitType(node.typeParameters);
+    }
+    CatchClause(node) {
+        this.scopeManager.nestCatchScope(node);
+        if (node.param) {
+            const param = node.param;
+            this.visitPattern(param, (pattern, info) => {
+                this.currentScope().defineIdentifier(pattern, new definition_1.CatchClauseDefinition(param, node));
+                this.referencingDefaultValue(pattern, info.assignments, null, true);
+            }, { processRightHandNodes: true });
+        }
+        this.visit(node.body);
+        this.close(node);
+    }
+    ClassExpression(node) {
+        this.visitClass(node);
+    }
+    ClassDeclaration(node) {
+        this.visitClass(node);
+    }
+    ClassProperty(node) {
+        this.visitClassProperty(node);
+    }
+    ContinueStatement() {
+        // don't reference the continue statement's label
+    }
+    ExportAllDeclaration() {
+        // this defines no local variables
+    }
+    ExportDefaultDeclaration(node) {
+        if (node.declaration.type === types_1.AST_NODE_TYPES.Identifier) {
+            ExportVisitor_1.ExportVisitor.visit(this, node);
+        }
+        else {
+            this.visit(node.declaration);
+        }
+    }
+    ExportNamedDeclaration(node) {
+        if (node.declaration) {
+            this.visit(node.declaration);
+        }
+        else {
+            ExportVisitor_1.ExportVisitor.visit(this, node);
+        }
+    }
+    ForInStatement(node) {
+        this.visitForIn(node);
+    }
+    ForOfStatement(node) {
+        this.visitForIn(node);
+    }
+    ForStatement(node) {
+        // Create ForStatement declaration.
+        // NOTE: In ES6, ForStatement dynamically generates per iteration environment. However, this is
+        // a static analyzer, we only generate one scope for ForStatement.
+        if (node.init &&
+            node.init.type === types_1.AST_NODE_TYPES.VariableDeclaration &&
+            node.init.kind !== 'var') {
+            this.scopeManager.nestForScope(node);
+        }
+        this.visitChildren(node);
+        this.close(node);
+    }
+    FunctionDeclaration(node) {
+        this.visitFunction(node);
+    }
+    FunctionExpression(node) {
+        this.visitFunction(node);
+    }
+    Identifier(node) {
+        this.currentScope().referenceValue(node);
+        this.visitType(node.typeAnnotation);
+    }
+    ImportDeclaration(node) {
+        assert_1.assert(this.scopeManager.isES6() && this.scopeManager.isModule(), 'ImportDeclaration should appear when the mode is ES6 and in the module context.');
+        ImportVisitor_1.ImportVisitor.visit(this, node);
+    }
+    JSXAttribute(node) {
+        this.visit(node.value);
+    }
+    JSXClosingElement() {
+        // should not be counted as a reference
+    }
+    JSXFragment(node) {
+        this.referenceJsxPragma();
+        this.referenceJsxFragment();
+        this.visitChildren(node);
+    }
+    JSXIdentifier(node) {
+        this.currentScope().referenceValue(node);
+    }
+    JSXMemberExpression(node) {
+        this.visit(node.object);
+        // we don't ever reference the property as it's always going to be a property on the thing
+    }
+    JSXOpeningElement(node) {
+        this.referenceJsxPragma();
+        if (node.name.type === types_1.AST_NODE_TYPES.JSXIdentifier) {
+            if (node.name.name[0].toUpperCase() === node.name.name[0]) {
+                // lower cased component names are always treated as "intrinsic" names, and are converted to a string,
+                // not a variable by JSX transforms:
+                // <div /> => React.createElement("div", null)
+                this.visit(node.name);
+            }
+        }
+        else {
+            this.visit(node.name);
+        }
+        this.visitType(node.typeParameters);
+        for (const attr of node.attributes) {
+            this.visit(attr);
+        }
+    }
+    LabeledStatement(node) {
+        this.visit(node.body);
+    }
+    MemberExpression(node) {
+        this.visit(node.object);
+        if (node.computed) {
+            this.visit(node.property);
+        }
+    }
+    MetaProperty() {
+        // meta properties all builtin globals
+    }
+    MethodDefinition(node) {
+        this.visitProperty(node);
+    }
+    NewExpression(node) {
+        this.visitChildren(node, ['typeParameters']);
+        this.visitType(node.typeParameters);
+    }
+    Program(node) {
+        const globalScope = this.scopeManager.nestGlobalScope(node);
+        this.populateGlobalsFromLib(globalScope);
+        if (this.scopeManager.isGlobalReturn()) {
+            // Force strictness of GlobalScope to false when using node.js scope.
+            this.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);
+    }
+    Property(node) {
+        this.visitProperty(node);
+    }
+    SwitchStatement(node) {
+        this.visit(node.discriminant);
+        if (this.scopeManager.isES6()) {
+            this.scopeManager.nestSwitchScope(node);
+        }
+        for (const switchCase of node.cases) {
+            this.visit(switchCase);
+        }
+        this.close(node);
+    }
+    TaggedTemplateExpression(node) {
+        this.visit(node.tag);
+        this.visit(node.quasi);
+        this.visitType(node.typeParameters);
+    }
+    TSAbstractClassProperty(node) {
+        this.visitClassProperty(node);
+    }
+    TSAbstractMethodDefinition(node) {
+        this.visitProperty(node);
+    }
+    TSAsExpression(node) {
+        this.visitTypeAssertion(node);
+    }
+    TSDeclareFunction(node) {
+        this.visitFunction(node);
+    }
+    TSImportEqualsDeclaration(node) {
+        this.currentScope().defineIdentifier(node.id, new definition_1.ImportBindingDefinition(node.id, node, node));
+        if (node.moduleReference.type === types_1.AST_NODE_TYPES.TSQualifiedName) {
+            this.visit(node.moduleReference.left);
+        }
+        else {
+            this.visit(node.moduleReference);
+        }
+    }
+    TSEmptyBodyFunctionExpression(node) {
+        this.visitFunction(node);
+    }
+    TSEnumDeclaration(node) {
+        this.currentScope().defineIdentifier(node.id, new definition_1.TSEnumNameDefinition(node.id, node));
+        // enum members can be referenced within the enum body
+        this.scopeManager.nestTSEnumScope(node);
+        // define the enum name again inside the new enum scope
+        // references to the enum should not resolve directly to the enum
+        this.currentScope().defineIdentifier(node.id, new definition_1.TSEnumNameDefinition(node.id, node));
+        for (const member of node.members) {
+            // TS resolves literal named members to be actual names
+            // enum Foo {
+            //   'a' = 1,
+            //   b = a, // this references the 'a' member
+            // }
+            if (member.id.type === types_1.AST_NODE_TYPES.Literal &&
+                typeof member.id.value === 'string') {
+                const name = member.id;
+                this.currentScope().defineLiteralIdentifier(name, new definition_1.TSEnumMemberDefinition(name, member));
+            }
+            else if (!member.computed &&
+                member.id.type === types_1.AST_NODE_TYPES.Identifier) {
+                this.currentScope().defineIdentifier(member.id, new definition_1.TSEnumMemberDefinition(member.id, member));
+            }
+            this.visit(member.initializer);
+        }
+        this.close(node);
+    }
+    TSInterfaceDeclaration(node) {
+        this.visitType(node);
+    }
+    TSModuleDeclaration(node) {
+        if (node.id.type === types_1.AST_NODE_TYPES.Identifier && !node.global) {
+            this.currentScope().defineIdentifier(node.id, new definition_1.TSModuleNameDefinition(node.id, node));
+        }
+        this.scopeManager.nestTSModuleScope(node);
+        this.visit(node.body);
+        this.close(node);
+    }
+    TSTypeAliasDeclaration(node) {
+        this.visitType(node);
+    }
+    TSTypeAssertion(node) {
+        this.visitTypeAssertion(node);
+    }
+    UpdateExpression(node) {
+        if (PatternVisitor_1.PatternVisitor.isPattern(node.argument)) {
+            this.visitPattern(node.argument, pattern => {
+                this.currentScope().referenceValue(pattern, Reference_1.ReferenceFlag.ReadWrite, null);
+            });
+        }
+        else {
+            this.visitChildren(node);
+        }
+    }
+    VariableDeclaration(node) {
+        const variableTargetScope = node.kind === 'var'
+            ? this.currentScope().variableScope
+            : this.currentScope();
+        for (const decl of node.declarations) {
+            const init = decl.init;
+            this.visitPattern(decl.id, (pattern, info) => {
+                variableTargetScope.defineIdentifier(pattern, new definition_1.VariableDefinition(pattern, decl, node));
+                this.referencingDefaultValue(pattern, info.assignments, null, true);
+                if (init) {
+                    this.currentScope().referenceValue(pattern, Reference_1.ReferenceFlag.Write, init, null, true);
+                }
+            }, { processRightHandNodes: true });
+            if (decl.init) {
+                this.visit(decl.init);
+            }
+            if ('typeAnnotation' in decl.id) {
+                this.visitType(decl.id.typeAnnotation);
+            }
+        }
+    }
+    WithStatement(node) {
+        this.visit(node.object);
+        // Then nest scope for WithStatement.
+        this.scopeManager.nestWithScope(node);
+        this.visit(node.body);
+        this.close(node);
+    }
+}
+exports.Referencer = Referencer;
+_isInnerMethodDefinition = new WeakMap(), _jsxPragma = new WeakMap(), _jsxFragmentName = new WeakMap(), _hasReferencedJsxFactory = new WeakMap(), _hasReferencedJsxFragmentFactory = new WeakMap(), _lib = new WeakMap();
+//# sourceMappingURL=Referencer.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..5afd9d19eef0ec23950e67512573dcfa4497e23a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Referencer.js","sourceRoot":"","sources":["../../src/referencer/Referencer.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fe358826db1c80c280e7fe7cd6af0a068e1aeecc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.d.ts
@@ -0,0 +1,31 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Referencer } from './Referencer';
+import { Visitor } from './Visitor';
+declare class TypeVisitor extends Visitor {
+    #private;
+    constructor(referencer: Referencer);
+    static visit(referencer: Referencer, node: TSESTree.Node): void;
+    protected visitFunctionType(node: TSESTree.TSCallSignatureDeclaration | TSESTree.TSConstructorType | TSESTree.TSConstructSignatureDeclaration | TSESTree.TSFunctionType | TSESTree.TSMethodSignature): void;
+    protected visitPropertyKey(node: TSESTree.TSMethodSignature | TSESTree.TSPropertySignature): void;
+    protected Identifier(node: TSESTree.Identifier): void;
+    protected MemberExpression(node: TSESTree.MemberExpression): void;
+    protected TSCallSignatureDeclaration(node: TSESTree.TSCallSignatureDeclaration): void;
+    protected TSConditionalType(node: TSESTree.TSConditionalType): void;
+    protected TSConstructorType(node: TSESTree.TSConstructorType): void;
+    protected TSConstructSignatureDeclaration(node: TSESTree.TSConstructSignatureDeclaration): void;
+    protected TSFunctionType(node: TSESTree.TSFunctionType): void;
+    protected TSIndexSignature(node: TSESTree.TSIndexSignature): void;
+    protected TSInferType(node: TSESTree.TSInferType): void;
+    protected TSInterfaceDeclaration(node: TSESTree.TSInterfaceDeclaration): void;
+    protected TSMappedType(node: TSESTree.TSMappedType): void;
+    protected TSMethodSignature(node: TSESTree.TSMethodSignature): void;
+    protected TSNamedTupleMember(node: TSESTree.TSNamedTupleMember): void;
+    protected TSPropertySignature(node: TSESTree.TSPropertySignature): void;
+    protected TSQualifiedName(node: TSESTree.TSQualifiedName): void;
+    protected TSTypeAliasDeclaration(node: TSESTree.TSTypeAliasDeclaration): void;
+    protected TSTypeParameter(node: TSESTree.TSTypeParameter): void;
+    protected TSTypePredicate(node: TSESTree.TSTypePredicate): void;
+    protected TSTypeQuery(node: TSESTree.TSTypeQuery): void;
+}
+export { TypeVisitor };
+//# sourceMappingURL=TypeVisitor.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..7003cbef823c2d2a88566eacd6965d637b5075f9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"TypeVisitor.d.ts","sourceRoot":"","sources":["../../src/referencer/TypeVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,cAAM,WAAY,SAAQ,OAAO;;gBAGnB,UAAU,EAAE,UAAU;IAKlC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI;IAS/D,SAAS,CAAC,iBAAiB,CACzB,IAAI,EACA,QAAQ,CAAC,0BAA0B,GACnC,QAAQ,CAAC,iBAAiB,GAC1B,QAAQ,CAAC,+BAA+B,GACxC,QAAQ,CAAC,cAAc,GACvB,QAAQ,CAAC,iBAAiB,GAC7B,IAAI;IAgCP,SAAS,CAAC,gBAAgB,CACxB,IAAI,EAAE,QAAQ,CAAC,iBAAiB,GAAG,QAAQ,CAAC,mBAAmB,GAC9D,IAAI;IAYP,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,GAAG,IAAI;IAIrD,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,GAAG,IAAI;IAKjE,SAAS,CAAC,0BAA0B,CAClC,IAAI,EAAE,QAAQ,CAAC,0BAA0B,GACxC,IAAI;IAIP,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,iBAAiB,GAAG,IAAI;IAanE,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,iBAAiB,GAAG,IAAI;IAInE,SAAS,CAAC,+BAA+B,CACvC,IAAI,EAAE,QAAQ,CAAC,+BAA+B,GAC7C,IAAI;IAIP,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,GAAG,IAAI;IAI7D,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,GAAG,IAAI;IASjE,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,GAAG,IAAI;IAsCvD,SAAS,CAAC,sBAAsB,CAC9B,IAAI,EAAE,QAAQ,CAAC,sBAAsB,GACpC,IAAI;IAoBP,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,YAAY,GAAG,IAAI;IAOzD,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,iBAAiB,GAAG,IAAI;IAKnE,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,GAAG,IAAI;IAKrE,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,mBAAmB,GAAG,IAAI;IAKvE,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,GAAG,IAAI;IAK/D,SAAS,CAAC,sBAAsB,CAC9B,IAAI,EAAE,QAAQ,CAAC,sBAAsB,GACpC,IAAI;IAkBP,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,GAAG,IAAI;IAS/D,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,GAAG,IAAI;IAQ/D,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,GAAG,IAAI;CAWxD;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.js b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.js
new file mode 100644
index 0000000000000000000000000000000000000000..10b05f6fae2377210c8863e12e8dd8c148fa562e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.js
@@ -0,0 +1,211 @@
+"use strict";
+var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to set private field on non-instance");
+    }
+    privateMap.set(receiver, value);
+    return value;
+};
+var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to get private field on non-instance");
+    }
+    return privateMap.get(receiver);
+};
+var _referencer;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TypeVisitor = void 0;
+const types_1 = require("@typescript-eslint/types");
+const Visitor_1 = require("./Visitor");
+const definition_1 = require("../definition");
+const scope_1 = require("../scope");
+class TypeVisitor extends Visitor_1.Visitor {
+    constructor(referencer) {
+        super(referencer);
+        _referencer.set(this, void 0);
+        __classPrivateFieldSet(this, _referencer, referencer);
+    }
+    static visit(referencer, node) {
+        const typeReferencer = new TypeVisitor(referencer);
+        typeReferencer.visit(node);
+    }
+    ///////////////////
+    // Visit helpers //
+    ///////////////////
+    visitFunctionType(node) {
+        // arguments and type parameters can only be referenced from within the function
+        __classPrivateFieldGet(this, _referencer).scopeManager.nestFunctionTypeScope(node);
+        this.visit(node.typeParameters);
+        for (const param of node.params) {
+            let didVisitAnnotation = false;
+            this.visitPattern(param, (pattern, info) => {
+                // a parameter name creates a value type variable which can be referenced later via typeof arg
+                __classPrivateFieldGet(this, _referencer).currentScope()
+                    .defineIdentifier(pattern, new definition_1.ParameterDefinition(pattern, node, info.rest));
+                if (pattern.typeAnnotation) {
+                    this.visit(pattern.typeAnnotation);
+                    didVisitAnnotation = true;
+                }
+            });
+            // there are a few special cases where the type annotation is owned by the parameter, not the pattern
+            if (!didVisitAnnotation && 'typeAnnotation' in param) {
+                this.visit(param.typeAnnotation);
+            }
+        }
+        this.visit(node.returnType);
+        __classPrivateFieldGet(this, _referencer).close(node);
+    }
+    visitPropertyKey(node) {
+        if (!node.computed) {
+            return;
+        }
+        // computed members are treated as value references, and TS expects they have a literal type
+        __classPrivateFieldGet(this, _referencer).visit(node.key);
+    }
+    /////////////////////
+    // Visit selectors //
+    /////////////////////
+    Identifier(node) {
+        __classPrivateFieldGet(this, _referencer).currentScope().referenceType(node);
+    }
+    MemberExpression(node) {
+        this.visit(node.object);
+        // don't visit the property
+    }
+    TSCallSignatureDeclaration(node) {
+        this.visitFunctionType(node);
+    }
+    TSConditionalType(node) {
+        // conditional types can define inferred type parameters
+        // which are only accessible from inside the conditional parameter
+        __classPrivateFieldGet(this, _referencer).scopeManager.nestConditionalTypeScope(node);
+        // type parameters inferred in the condition clause are not accessible within the false branch
+        this.visitChildren(node, ['falseType']);
+        __classPrivateFieldGet(this, _referencer).close(node);
+        this.visit(node.falseType);
+    }
+    TSConstructorType(node) {
+        this.visitFunctionType(node);
+    }
+    TSConstructSignatureDeclaration(node) {
+        this.visitFunctionType(node);
+    }
+    TSFunctionType(node) {
+        this.visitFunctionType(node);
+    }
+    TSIndexSignature(node) {
+        for (const param of node.parameters) {
+            if (param.type === types_1.AST_NODE_TYPES.Identifier) {
+                this.visit(param.typeAnnotation);
+            }
+        }
+        this.visit(node.typeAnnotation);
+    }
+    TSInferType(node) {
+        const typeParameter = node.typeParameter;
+        let scope = __classPrivateFieldGet(this, _referencer).currentScope();
+        /*
+        In cases where there is a sub-type scope created within a conditional type, then the generic should be defined in the
+        conditional type's scope, not the child type scope.
+        If we define it within the child type's scope then it won't be able to be referenced outside the child type
+        */
+        if (scope.type === scope_1.ScopeType.functionType ||
+            scope.type === scope_1.ScopeType.mappedType) {
+            // search up the scope tree to figure out if we're in a nested type scope
+            let currentScope = scope.upper;
+            while (currentScope) {
+                if (currentScope.type === scope_1.ScopeType.functionType ||
+                    currentScope.type === scope_1.ScopeType.mappedType) {
+                    // ensure valid type parents only
+                    currentScope = currentScope.upper;
+                    continue;
+                }
+                if (currentScope.type === scope_1.ScopeType.conditionalType) {
+                    scope = currentScope;
+                    break;
+                }
+                break;
+            }
+        }
+        scope.defineIdentifier(typeParameter.name, new definition_1.TypeDefinition(typeParameter.name, typeParameter));
+    }
+    TSInterfaceDeclaration(node) {
+        var _a, _b;
+        __classPrivateFieldGet(this, _referencer).currentScope()
+            .defineIdentifier(node.id, new definition_1.TypeDefinition(node.id, node));
+        if (node.typeParameters) {
+            // type parameters cannot be referenced from outside their current scope
+            __classPrivateFieldGet(this, _referencer).scopeManager.nestTypeScope(node);
+            this.visit(node.typeParameters);
+        }
+        (_a = node.extends) === null || _a === void 0 ? void 0 : _a.forEach(this.visit, this);
+        (_b = node.implements) === null || _b === void 0 ? void 0 : _b.forEach(this.visit, this);
+        this.visit(node.body);
+        if (node.typeParameters) {
+            __classPrivateFieldGet(this, _referencer).close(node);
+        }
+    }
+    TSMappedType(node) {
+        // mapped types key can only be referenced within their return value
+        __classPrivateFieldGet(this, _referencer).scopeManager.nestMappedTypeScope(node);
+        this.visitChildren(node);
+        __classPrivateFieldGet(this, _referencer).close(node);
+    }
+    TSMethodSignature(node) {
+        this.visitPropertyKey(node);
+        this.visitFunctionType(node);
+    }
+    TSNamedTupleMember(node) {
+        this.visit(node.elementType);
+        // we don't visit the label as the label only exists for the purposes of documentation
+    }
+    TSPropertySignature(node) {
+        this.visitPropertyKey(node);
+        this.visit(node.typeAnnotation);
+    }
+    TSQualifiedName(node) {
+        this.visit(node.left);
+        // we don't visit the right as it a name on the thing, not a name to reference
+    }
+    TSTypeAliasDeclaration(node) {
+        __classPrivateFieldGet(this, _referencer).currentScope()
+            .defineIdentifier(node.id, new definition_1.TypeDefinition(node.id, node));
+        if (node.typeParameters) {
+            // type parameters cannot be referenced from outside their current scope
+            __classPrivateFieldGet(this, _referencer).scopeManager.nestTypeScope(node);
+            this.visit(node.typeParameters);
+        }
+        this.visit(node.typeAnnotation);
+        if (node.typeParameters) {
+            __classPrivateFieldGet(this, _referencer).close(node);
+        }
+    }
+    TSTypeParameter(node) {
+        __classPrivateFieldGet(this, _referencer).currentScope()
+            .defineIdentifier(node.name, new definition_1.TypeDefinition(node.name, node));
+        this.visit(node.constraint);
+        this.visit(node.default);
+    }
+    TSTypePredicate(node) {
+        if (node.parameterName.type !== types_1.AST_NODE_TYPES.TSThisType) {
+            __classPrivateFieldGet(this, _referencer).currentScope().referenceValue(node.parameterName);
+        }
+        this.visit(node.typeAnnotation);
+    }
+    // a type query `typeof foo` is a special case that references a _non-type_ variable,
+    TSTypeQuery(node) {
+        if (node.exprName.type === types_1.AST_NODE_TYPES.Identifier) {
+            __classPrivateFieldGet(this, _referencer).currentScope().referenceValue(node.exprName);
+        }
+        else {
+            let expr = node.exprName.left;
+            while (expr.type !== types_1.AST_NODE_TYPES.Identifier) {
+                expr = expr.left;
+            }
+            __classPrivateFieldGet(this, _referencer).currentScope().referenceValue(expr);
+        }
+    }
+}
+exports.TypeVisitor = TypeVisitor;
+_referencer = new WeakMap();
+//# sourceMappingURL=TypeVisitor.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..19d692c2662397623c576a2a22c90ea792212ec4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"TypeVisitor.js","sourceRoot":"","sources":["../../src/referencer/TypeVisitor.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7de6a73ab2740bf8f9af3e9cbb25c27f02d0bbbc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.d.ts
@@ -0,0 +1,13 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { VisitorBase, VisitorOptions } from './VisitorBase';
+import { PatternVisitorCallback, PatternVisitorOptions } from './PatternVisitor';
+interface VisitPatternOptions extends PatternVisitorOptions {
+    processRightHandNodes?: boolean;
+}
+declare class Visitor extends VisitorBase {
+    #private;
+    constructor(optionsOrVisitor: VisitorOptions | Visitor);
+    protected visitPattern(node: TSESTree.Node, callback: PatternVisitorCallback, options?: VisitPatternOptions): void;
+}
+export { Visitor, VisitorBase, VisitorOptions };
+//# sourceMappingURL=Visitor.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..4c82fae28aaeda9f37f075214302f48cd5414d66
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Visitor.d.ts","sourceRoot":"","sources":["../../src/referencer/Visitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAEL,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,UAAU,mBAAoB,SAAQ,qBAAqB;IACzD,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AACD,cAAM,OAAQ,SAAQ,WAAW;;gBAEnB,gBAAgB,EAAE,cAAc,GAAG,OAAO;IAatD,SAAS,CAAC,YAAY,CACpB,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,QAAQ,EAAE,sBAAsB,EAChC,OAAO,GAAE,mBAAsD,GAC9D,IAAI;CAWR;AAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.js b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.js
new file mode 100644
index 0000000000000000000000000000000000000000..e3021eec178a00f65a75da52f49551459bb53a09
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.js
@@ -0,0 +1,41 @@
+"use strict";
+var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to get private field on non-instance");
+    }
+    return privateMap.get(receiver);
+};
+var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to set private field on non-instance");
+    }
+    privateMap.set(receiver, value);
+    return value;
+};
+var _options;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.VisitorBase = exports.Visitor = void 0;
+const VisitorBase_1 = require("./VisitorBase");
+Object.defineProperty(exports, "VisitorBase", { enumerable: true, get: function () { return VisitorBase_1.VisitorBase; } });
+const PatternVisitor_1 = require("./PatternVisitor");
+class Visitor extends VisitorBase_1.VisitorBase {
+    constructor(optionsOrVisitor) {
+        super(optionsOrVisitor instanceof Visitor
+            ? __classPrivateFieldGet(optionsOrVisitor, _options) : optionsOrVisitor);
+        _options.set(this, void 0);
+        __classPrivateFieldSet(this, _options, optionsOrVisitor instanceof Visitor
+            ? __classPrivateFieldGet(optionsOrVisitor, _options) : optionsOrVisitor);
+    }
+    visitPattern(node, callback, options = { processRightHandNodes: false }) {
+        // Call the callback at left hand identifier nodes, and Collect right hand nodes.
+        const visitor = new PatternVisitor_1.PatternVisitor(__classPrivateFieldGet(this, _options), node, callback);
+        visitor.visit(node);
+        // Process the right hand nodes recursively.
+        if (options.processRightHandNodes) {
+            visitor.rightHandNodes.forEach(this.visit, this);
+        }
+    }
+}
+exports.Visitor = Visitor;
+_options = new WeakMap();
+//# sourceMappingURL=Visitor.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..45ed8ca3628b8d2a42bb7f2a38cf7825c3779dea
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Visitor.js","sourceRoot":"","sources":["../../src/referencer/Visitor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,+CAA4D;AA0C1C,4FA1CT,yBAAW,OA0CS;AAzC7B,qDAI0B;AAK1B,MAAM,OAAQ,SAAQ,yBAAW;IAE/B,YAAY,gBAA0C;QACpD,KAAK,CACH,gBAAgB,YAAY,OAAO;YACjC,CAAC,oDACD,CAAC,CAAC,gBAAgB,CACrB,CAAC;QANJ,2BAAkC;QAQhC,uBAAA,IAAI,YACF,gBAAgB,YAAY,OAAO;YACjC,CAAC,oDACD,CAAC,CAAC,gBAAgB,EAAC;IACzB,CAAC;IAES,YAAY,CACpB,IAAmB,EACnB,QAAgC,EAChC,UAA+B,EAAE,qBAAqB,EAAE,KAAK,EAAE;QAE/D,iFAAiF;QACjF,MAAM,OAAO,GAAG,IAAI,+BAAc,yCAAgB,IAAI,EAAE,QAAQ,CAAC,CAAC;QAElE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEpB,4CAA4C;QAC5C,IAAI,OAAO,CAAC,qBAAqB,EAAE;YACjC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SAClD;IACH,CAAC;CACF;AAEQ,0BAAO"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a45ba81bea59b21382f993b9a22ce45d71103018
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.d.ts
@@ -0,0 +1,22 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { VisitorKeys } from '@typescript-eslint/visitor-keys';
+interface VisitorOptions {
+    childVisitorKeys?: VisitorKeys | null;
+    visitChildrenEvenIfSelectorExists?: boolean;
+}
+declare abstract class VisitorBase {
+    #private;
+    constructor(options: VisitorOptions);
+    /**
+     * Default method for visiting children.
+     * @param node the node whose children should be visited
+     * @param exclude a list of keys to not visit
+     */
+    visitChildren<T extends TSESTree.Node>(node: T | null | undefined, excludeArr?: (keyof T)[]): void;
+    /**
+     * Dispatching node.
+     */
+    visit(node: TSESTree.Node | null | undefined): void;
+}
+export { VisitorBase, VisitorOptions, VisitorKeys };
+//# sourceMappingURL=VisitorBase.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..03310d28d1195c98cbaa8a70aaa82a5676a327fa
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"VisitorBase.d.ts","sourceRoot":"","sources":["../../src/referencer/VisitorBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAe,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE3E,UAAU,cAAc;IACtB,gBAAgB,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACtC,iCAAiC,CAAC,EAAE,OAAO,CAAC;CAC7C;AAaD,uBAAe,WAAW;;gBAGZ,OAAO,EAAE,cAAc;IAMnC;;;;OAIG;IACH,aAAa,CAAC,CAAC,SAAS,QAAQ,CAAC,IAAI,EACnC,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAC1B,UAAU,GAAE,CAAC,MAAM,CAAC,CAAC,EAAO,GAC3B,IAAI;IA6BP;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;CAepD;AAED,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.js b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.js
new file mode 100644
index 0000000000000000000000000000000000000000..31d73e15350ca346bfdc4cef83afcf697cb9991e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.js
@@ -0,0 +1,84 @@
+"use strict";
+var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to set private field on non-instance");
+    }
+    privateMap.set(receiver, value);
+    return value;
+};
+var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to get private field on non-instance");
+    }
+    return privateMap.get(receiver);
+};
+var _childVisitorKeys, _visitChildrenEvenIfSelectorExists;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.VisitorBase = void 0;
+const visitor_keys_1 = require("@typescript-eslint/visitor-keys");
+function isObject(obj) {
+    return typeof obj === 'object' && obj != null;
+}
+function isNode(node) {
+    return isObject(node) && typeof node.type === 'string';
+}
+class VisitorBase {
+    constructor(options) {
+        var _a, _b;
+        _childVisitorKeys.set(this, void 0);
+        _visitChildrenEvenIfSelectorExists.set(this, void 0);
+        __classPrivateFieldSet(this, _childVisitorKeys, (_a = options.childVisitorKeys) !== null && _a !== void 0 ? _a : visitor_keys_1.visitorKeys);
+        __classPrivateFieldSet(this, _visitChildrenEvenIfSelectorExists, (_b = options.visitChildrenEvenIfSelectorExists) !== null && _b !== void 0 ? _b : false);
+    }
+    /**
+     * Default method for visiting children.
+     * @param node the node whose children should be visited
+     * @param exclude a list of keys to not visit
+     */
+    visitChildren(node, excludeArr = []) {
+        var _a;
+        if (node == null || node.type == null) {
+            return;
+        }
+        const exclude = new Set(excludeArr.concat(['parent']));
+        const children = (_a = __classPrivateFieldGet(this, _childVisitorKeys)[node.type]) !== null && _a !== void 0 ? _a : Object.keys(node);
+        for (const key of children) {
+            if (exclude.has(key)) {
+                continue;
+            }
+            const child = node[key];
+            if (!child) {
+                continue;
+            }
+            if (Array.isArray(child)) {
+                for (const subChild of child) {
+                    if (isNode(subChild)) {
+                        this.visit(subChild);
+                    }
+                }
+            }
+            else if (isNode(child)) {
+                this.visit(child);
+            }
+        }
+    }
+    /**
+     * Dispatching node.
+     */
+    visit(node) {
+        if (node == null || node.type == null) {
+            return;
+        }
+        const visitor = this[node.type];
+        if (visitor) {
+            visitor.call(this, node);
+            if (!__classPrivateFieldGet(this, _visitChildrenEvenIfSelectorExists)) {
+                return;
+            }
+        }
+        this.visitChildren(node);
+    }
+}
+exports.VisitorBase = VisitorBase;
+_childVisitorKeys = new WeakMap(), _visitChildrenEvenIfSelectorExists = new WeakMap();
+//# sourceMappingURL=VisitorBase.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..56db003ca76a8851f5a163f705c1cbef3b3415e8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"VisitorBase.js","sourceRoot":"","sources":["../../src/referencer/VisitorBase.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,kEAA2E;AAO3E,SAAS,QAAQ,CAAC,GAAY;IAC5B,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,IAAI,IAAI,CAAC;AAChD,CAAC;AACD,SAAS,MAAM,CAAC,IAAa;IAC3B,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;AACzD,CAAC;AAMD,MAAe,WAAW;IAGxB,YAAY,OAAuB;;QAFnC,oCAAwC;QACxC,qDAAqD;QAEnD,uBAAA,IAAI,2BAAqB,OAAO,CAAC,gBAAgB,mCAAI,0BAAW,EAAC;QACjE,uBAAA,IAAI,4CACF,OAAO,CAAC,iCAAiC,mCAAI,KAAK,EAAC;IACvD,CAAC;IAED;;;;OAIG;IACH,aAAa,CACX,IAA0B,EAC1B,aAA0B,EAAE;;QAE5B,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;YACrC,OAAO;SACR;QAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAgB,CAAC;QACtE,MAAM,QAAQ,SAAG,gDAAuB,IAAI,CAAC,IAAI,CAAC,mCAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxE,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;YAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACpB,SAAS;aACV;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAA0B,CAAY,CAAC;YAC1D,IAAI,CAAC,KAAK,EAAE;gBACV,SAAS;aACV;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxB,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE;oBAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE;wBACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;qBACtB;iBACF;aACF;iBAAM,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;gBACxB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACnB;SACF;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAsC;QAC1C,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;YACrC,OAAO;SACR;QAED,MAAM,OAAO,GAAI,IAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACzB,IAAI,iEAAwC,EAAE;gBAC5C,OAAO;aACR;SACF;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;CACF;AAEQ,kCAAW"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d2a8121c142e98fae89c3fae3b666dc14853c4fa
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.d.ts
@@ -0,0 +1,2 @@
+export { Referencer, ReferencerOptions } from './Referencer';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..5b48579f34f73c06c0eb7d29796ecdae9d28337d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/referencer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.js b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..16625137c12112694d080786fa4037a1ffde6a40
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.js
@@ -0,0 +1,6 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Referencer = void 0;
+var Referencer_1 = require("./Referencer");
+Object.defineProperty(exports, "Referencer", { enumerable: true, get: function () { return Referencer_1.Referencer; } });
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..aa5dc621dedb3e12d012a1f13436cc6b81064394
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/referencer/index.ts"],"names":[],"mappings":";;;AAAA,2CAA6D;AAApD,wGAAA,UAAU,OAAA"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7e274f6e330fdd26232a7cebbaf36369a3bbe4cc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from './Scope';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { ScopeManager } from '../ScopeManager';
+declare class BlockScope extends ScopeBase<ScopeType.block, TSESTree.BlockStatement, Scope> {
+    constructor(scopeManager: ScopeManager, upperScope: BlockScope['upper'], block: BlockScope['block']);
+}
+export { BlockScope };
+//# sourceMappingURL=BlockScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..b3b3cb4800c7d97fd8b75740ff454db48cc945a5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"BlockScope.d.ts","sourceRoot":"","sources":["../../src/scope/BlockScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,cAAM,UAAW,SAAQ,SAAS,CAChC,SAAS,CAAC,KAAK,EACf,QAAQ,CAAC,cAAc,EACvB,KAAK,CACN;gBAEG,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,EAC/B,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;CAI7B;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..0fc34d615f236a374c55b3e7b6c4438eaf39fe09
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.BlockScope = void 0;
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+class BlockScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, upperScope, block) {
+        super(scopeManager, ScopeType_1.ScopeType.block, upperScope, block, false);
+    }
+}
+exports.BlockScope = BlockScope;
+//# sourceMappingURL=BlockScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..67896a4f2e1487a859c40ff2314015f6ec7f19a1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"BlockScope.js","sourceRoot":"","sources":["../../src/scope/BlockScope.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AACxC,2CAAwC;AAGxC,MAAM,UAAW,SAAQ,qBAIxB;IACC,YACE,YAA0B,EAC1B,UAA+B,EAC/B,KAA0B;QAE1B,KAAK,CAAC,YAAY,EAAE,qBAAS,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;CACF;AAEQ,gCAAU"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..535df5e3fc7c44d1bd988780b309fbe57a88ae81
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from './Scope';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { ScopeManager } from '../ScopeManager';
+declare class CatchScope extends ScopeBase<ScopeType.catch, TSESTree.CatchClause, Scope> {
+    constructor(scopeManager: ScopeManager, upperScope: CatchScope['upper'], block: CatchScope['block']);
+}
+export { CatchScope };
+//# sourceMappingURL=CatchScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..bdc822950e9774e25495a3e5c5871d7a5605c454
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"CatchScope.d.ts","sourceRoot":"","sources":["../../src/scope/CatchScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,cAAM,UAAW,SAAQ,SAAS,CAChC,SAAS,CAAC,KAAK,EACf,QAAQ,CAAC,WAAW,EACpB,KAAK,CACN;gBAEG,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,EAC/B,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;CAI7B;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..dbb630f25f03d85c90ea6e93e76f6523043843f4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CatchScope = void 0;
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+class CatchScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, upperScope, block) {
+        super(scopeManager, ScopeType_1.ScopeType.catch, upperScope, block, false);
+    }
+}
+exports.CatchScope = CatchScope;
+//# sourceMappingURL=CatchScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..3984d7bb0e691adccd088a0332448cfafe7d2fb9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"CatchScope.js","sourceRoot":"","sources":["../../src/scope/CatchScope.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AACxC,2CAAwC;AAGxC,MAAM,UAAW,SAAQ,qBAIxB;IACC,YACE,YAA0B,EAC1B,UAA+B,EAC/B,KAA0B;QAE1B,KAAK,CAAC,YAAY,EAAE,qBAAS,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;CACF;AAEQ,gCAAU"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2f0da98b27ecd708d476bad47feeb154596ec72e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from './Scope';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { ScopeManager } from '../ScopeManager';
+declare class ClassScope extends ScopeBase<ScopeType.class, TSESTree.ClassDeclaration | TSESTree.ClassExpression, Scope> {
+    constructor(scopeManager: ScopeManager, upperScope: ClassScope['upper'], block: ClassScope['block']);
+}
+export { ClassScope };
+//# sourceMappingURL=ClassScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..d6c49361dd87210c1aa995f00049ed91d264d828
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ClassScope.d.ts","sourceRoot":"","sources":["../../src/scope/ClassScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,cAAM,UAAW,SAAQ,SAAS,CAChC,SAAS,CAAC,KAAK,EACf,QAAQ,CAAC,gBAAgB,GAAG,QAAQ,CAAC,eAAe,EACpD,KAAK,CACN;gBAEG,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,EAC/B,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;CAI7B;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..003e214fdf1bafb310277620b8697b20cd4a0a80
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ClassScope = void 0;
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+class ClassScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, upperScope, block) {
+        super(scopeManager, ScopeType_1.ScopeType.class, upperScope, block, false);
+    }
+}
+exports.ClassScope = ClassScope;
+//# sourceMappingURL=ClassScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..f12bf2955b97ec8420928f69eedbd662bcd39090
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ClassScope.js","sourceRoot":"","sources":["../../src/scope/ClassScope.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AACxC,2CAAwC;AAGxC,MAAM,UAAW,SAAQ,qBAIxB;IACC,YACE,YAA0B,EAC1B,UAA+B,EAC/B,KAA0B;QAE1B,KAAK,CAAC,YAAY,EAAE,qBAAS,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;CACF;AAEQ,gCAAU"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..316ac0c0329f9a6564be8a1749a450af3f273452
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from './Scope';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { ScopeManager } from '../ScopeManager';
+declare class ConditionalTypeScope extends ScopeBase<ScopeType.conditionalType, TSESTree.TSConditionalType, Scope> {
+    constructor(scopeManager: ScopeManager, upperScope: ConditionalTypeScope['upper'], block: ConditionalTypeScope['block']);
+}
+export { ConditionalTypeScope };
+//# sourceMappingURL=ConditionalTypeScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..9c23c1587d9310563dedc8ffe25a0069825f16b4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ConditionalTypeScope.d.ts","sourceRoot":"","sources":["../../src/scope/ConditionalTypeScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,cAAM,oBAAqB,SAAQ,SAAS,CAC1C,SAAS,CAAC,eAAe,EACzB,QAAQ,CAAC,iBAAiB,EAC1B,KAAK,CACN;gBAEG,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,oBAAoB,CAAC,OAAO,CAAC,EACzC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC;CAIvC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..8fbd7c50d93b9734b11031bf5e3686f2f8616c67
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ConditionalTypeScope = void 0;
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+class ConditionalTypeScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, upperScope, block) {
+        super(scopeManager, ScopeType_1.ScopeType.conditionalType, upperScope, block, false);
+    }
+}
+exports.ConditionalTypeScope = ConditionalTypeScope;
+//# sourceMappingURL=ConditionalTypeScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..dc549a72798100395f50a75aaffa7edd4f5c1d6d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ConditionalTypeScope.js","sourceRoot":"","sources":["../../src/scope/ConditionalTypeScope.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AACxC,2CAAwC;AAGxC,MAAM,oBAAqB,SAAQ,qBAIlC;IACC,YACE,YAA0B,EAC1B,UAAyC,EACzC,KAAoC;QAEpC,KAAK,CAAC,YAAY,EAAE,qBAAS,CAAC,eAAe,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;CACF;AAEQ,oDAAoB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..190679836fc577cf308bd984445eb521fc915ec4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from './Scope';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { ScopeManager } from '../ScopeManager';
+declare class ForScope extends ScopeBase<ScopeType.for, TSESTree.ForInStatement | TSESTree.ForOfStatement | TSESTree.ForStatement, Scope> {
+    constructor(scopeManager: ScopeManager, upperScope: ForScope['upper'], block: ForScope['block']);
+}
+export { ForScope };
+//# sourceMappingURL=ForScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..62990b8b5bf324ce49fc54f3c7e6a0063b0fb95f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ForScope.d.ts","sourceRoot":"","sources":["../../src/scope/ForScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,cAAM,QAAS,SAAQ,SAAS,CAC9B,SAAS,CAAC,GAAG,EACb,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,YAAY,EACzE,KAAK,CACN;gBAEG,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC7B,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC;CAI3B;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd27683ed8c56192b23ded07deb1f1528177980e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ForScope = void 0;
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+class ForScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, upperScope, block) {
+        super(scopeManager, ScopeType_1.ScopeType.for, upperScope, block, false);
+    }
+}
+exports.ForScope = ForScope;
+//# sourceMappingURL=ForScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..908369d56f4993fb4dd1ac1844f28b0618e8b2c4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ForScope.js","sourceRoot":"","sources":["../../src/scope/ForScope.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AACxC,2CAAwC;AAGxC,MAAM,QAAS,SAAQ,qBAItB;IACC,YACE,YAA0B,EAC1B,UAA6B,EAC7B,KAAwB;QAExB,KAAK,CAAC,YAAY,EAAE,qBAAS,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;CACF;AAEQ,4BAAQ"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..952d7a92de86ec9f4db40efd4dd0a39cc6e4e80f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.d.ts
@@ -0,0 +1,11 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { Scope } from './Scope';
+import { ScopeManager } from '../ScopeManager';
+declare class FunctionExpressionNameScope extends ScopeBase<ScopeType.functionExpressionName, TSESTree.FunctionExpression, Scope> {
+    readonly functionExpressionScope: true;
+    constructor(scopeManager: ScopeManager, upperScope: FunctionExpressionNameScope['upper'], block: FunctionExpressionNameScope['block']);
+}
+export { FunctionExpressionNameScope };
+//# sourceMappingURL=FunctionExpressionNameScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..929ca3242af264e9a20b08ad8eea16986614ba64
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"FunctionExpressionNameScope.d.ts","sourceRoot":"","sources":["../../src/scope/FunctionExpressionNameScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,cAAM,2BAA4B,SAAQ,SAAS,CACjD,SAAS,CAAC,sBAAsB,EAChC,QAAQ,CAAC,kBAAkB,EAC3B,KAAK,CACN;IACC,SAAgB,uBAAuB,EAAE,IAAI,CAAC;gBAE5C,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,2BAA2B,CAAC,OAAO,CAAC,EAChD,KAAK,EAAE,2BAA2B,CAAC,OAAO,CAAC;CAiB9C;AAED,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..4abe1ef333c390cafc5c7f93f60b7e04731f2b07
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.js
@@ -0,0 +1,17 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.FunctionExpressionNameScope = void 0;
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+const definition_1 = require("../definition");
+class FunctionExpressionNameScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, upperScope, block) {
+        super(scopeManager, ScopeType_1.ScopeType.functionExpressionName, upperScope, block, false);
+        if (block.id) {
+            this.defineIdentifier(block.id, new definition_1.FunctionNameDefinition(block.id, block));
+        }
+        this.functionExpressionScope = true;
+    }
+}
+exports.FunctionExpressionNameScope = FunctionExpressionNameScope;
+//# sourceMappingURL=FunctionExpressionNameScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..54910b1995293157849322bee57a16d876e6b49a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"FunctionExpressionNameScope.js","sourceRoot":"","sources":["../../src/scope/FunctionExpressionNameScope.ts"],"names":[],"mappings":";;;AACA,2CAAwC;AACxC,2CAAwC;AAExC,8CAAuD;AAGvD,MAAM,2BAA4B,SAAQ,qBAIzC;IAEC,YACE,YAA0B,EAC1B,UAAgD,EAChD,KAA2C;QAE3C,KAAK,CACH,YAAY,EACZ,qBAAS,CAAC,sBAAsB,EAChC,UAAU,EACV,KAAK,EACL,KAAK,CACN,CAAC;QACF,IAAI,KAAK,CAAC,EAAE,EAAE;YACZ,IAAI,CAAC,gBAAgB,CACnB,KAAK,CAAC,EAAE,EACR,IAAI,mCAAsB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAC5C,CAAC;SACH;QACD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;IACtC,CAAC;CACF;AAEQ,kEAA2B"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..725a59ad607a01293e99f40304858d1417228988
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.d.ts
@@ -0,0 +1,13 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from './Scope';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { Reference } from '../referencer/Reference';
+import { ScopeManager } from '../ScopeManager';
+import { Variable } from '../variable';
+declare class FunctionScope extends ScopeBase<ScopeType.function, TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.TSDeclareFunction | TSESTree.TSEmptyBodyFunctionExpression | TSESTree.Program, Scope> {
+    constructor(scopeManager: ScopeManager, upperScope: FunctionScope['upper'], block: FunctionScope['block'], isMethodDefinition: boolean);
+    protected isValidResolution(ref: Reference, variable: Variable): boolean;
+}
+export { FunctionScope };
+//# sourceMappingURL=FunctionScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..250222f5b341beb152cb98943f0b9ca963e629f5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"FunctionScope.d.ts","sourceRoot":"","sources":["../../src/scope/FunctionScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,cAAM,aAAc,SAAQ,SAAS,CACnC,SAAS,CAAC,QAAQ,EAChB,QAAQ,CAAC,uBAAuB,GAChC,QAAQ,CAAC,mBAAmB,GAC5B,QAAQ,CAAC,kBAAkB,GAC3B,QAAQ,CAAC,iBAAiB,GAC1B,QAAQ,CAAC,6BAA6B,GACtC,QAAQ,CAAC,OAAO,EAClB,KAAK,CACN;gBAEG,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,EAClC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,EAC7B,kBAAkB,EAAE,OAAO;IAuB7B,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO;CAiBzE;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..cccb1c39efe462be6bb4014fe94151efd8c1c79c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.js
@@ -0,0 +1,37 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.FunctionScope = void 0;
+const types_1 = require("@typescript-eslint/types");
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+class FunctionScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, upperScope, block, isMethodDefinition) {
+        super(scopeManager, ScopeType_1.ScopeType.function, upperScope, block, isMethodDefinition);
+        // section 9.2.13, FunctionDeclarationInstantiation.
+        // NOTE Arrow functions never have an arguments objects.
+        if (this.block.type !== types_1.AST_NODE_TYPES.ArrowFunctionExpression) {
+            this.defineVariable('arguments', this.set, this.variables, null, null);
+        }
+    }
+    // References in default parameters isn't resolved to variables which are in their function body.
+    //     const x = 1
+    //     function f(a = x) { // This `x` is resolved to the `x` in the outer scope.
+    //         const x = 2
+    //         console.log(a)
+    //     }
+    isValidResolution(ref, variable) {
+        var _a, _b;
+        // If `options.gloablReturn` is true, `this.block` becomes a Program node.
+        if (this.block.type === types_1.AST_NODE_TYPES.Program) {
+            return true;
+        }
+        const bodyStart = (_b = (_a = this.block.body) === null || _a === void 0 ? void 0 : _a.range[0]) !== null && _b !== void 0 ? _b : -1;
+        // It's invalid resolution in the following case:
+        return !((variable.scope === this &&
+            ref.identifier.range[0] < bodyStart && // the reference is in the parameter part.
+            variable.defs.every(d => d.name.range[0] >= bodyStart)) // the variable is in the body.
+        );
+    }
+}
+exports.FunctionScope = FunctionScope;
+//# sourceMappingURL=FunctionScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..097c567671c3561a509164c24482b38af24b050d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"FunctionScope.js","sourceRoot":"","sources":["../../src/scope/FunctionScope.ts"],"names":[],"mappings":";;;AAAA,oDAAoE;AAEpE,2CAAwC;AACxC,2CAAwC;AAKxC,MAAM,aAAc,SAAQ,qBAS3B;IACC,YACE,YAA0B,EAC1B,UAAkC,EAClC,KAA6B,EAC7B,kBAA2B;QAE3B,KAAK,CACH,YAAY,EACZ,qBAAS,CAAC,QAAQ,EAClB,UAAU,EACV,KAAK,EACL,kBAAkB,CACnB,CAAC;QAEF,oDAAoD;QACpD,wDAAwD;QACxD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,sBAAc,CAAC,uBAAuB,EAAE;YAC9D,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SACxE;IACH,CAAC;IAED,iGAAiG;IACjG,kBAAkB;IAClB,iFAAiF;IACjF,sBAAsB;IACtB,yBAAyB;IACzB,QAAQ;IACE,iBAAiB,CAAC,GAAc,EAAE,QAAkB;;QAC5D,0EAA0E;QAC1E,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,sBAAc,CAAC,OAAO,EAAE;YAC9C,OAAO,IAAI,CAAC;SACb;QAED,MAAM,SAAS,eAAG,IAAI,CAAC,KAAK,CAAC,IAAI,0CAAE,KAAK,CAAC,CAAC,oCAAK,CAAC,CAAC,CAAC;QAElD,iDAAiD;QACjD,OAAO,CAAC,CACN,CACE,QAAQ,CAAC,KAAK,KAAK,IAAI;YACvB,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,0CAA0C;YACjF,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CACvD,CAAC,+BAA+B;SAClC,CAAC;IACJ,CAAC;CACF;AAEQ,sCAAa"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cb80056a6df356ada1551868295c0b43f47e5633
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from './Scope';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { ScopeManager } from '../ScopeManager';
+declare class FunctionTypeScope extends ScopeBase<ScopeType.functionType, TSESTree.TSCallSignatureDeclaration | TSESTree.TSConstructorType | TSESTree.TSConstructSignatureDeclaration | TSESTree.TSFunctionType | TSESTree.TSMethodSignature, Scope> {
+    constructor(scopeManager: ScopeManager, upperScope: FunctionTypeScope['upper'], block: FunctionTypeScope['block']);
+}
+export { FunctionTypeScope };
+//# sourceMappingURL=FunctionTypeScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..8914604c8657e70df4ecbb83120404630cba3ec3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"FunctionTypeScope.d.ts","sourceRoot":"","sources":["../../src/scope/FunctionTypeScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,cAAM,iBAAkB,SAAQ,SAAS,CACvC,SAAS,CAAC,YAAY,EACpB,QAAQ,CAAC,0BAA0B,GACnC,QAAQ,CAAC,iBAAiB,GAC1B,QAAQ,CAAC,+BAA+B,GACxC,QAAQ,CAAC,cAAc,GACvB,QAAQ,CAAC,iBAAiB,EAC5B,KAAK,CACN;gBAEG,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,EACtC,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC;CAIpC;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..3d7fe797fed0a024e5e3791d51522a8cb19d9534
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.FunctionTypeScope = void 0;
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+class FunctionTypeScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, upperScope, block) {
+        super(scopeManager, ScopeType_1.ScopeType.functionType, upperScope, block, false);
+    }
+}
+exports.FunctionTypeScope = FunctionTypeScope;
+//# sourceMappingURL=FunctionTypeScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..a303d8ea780e5c9a0363f6ffb5aed4511c2c90c3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"FunctionTypeScope.js","sourceRoot":"","sources":["../../src/scope/FunctionTypeScope.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AACxC,2CAAwC;AAGxC,MAAM,iBAAkB,SAAQ,qBAQ/B;IACC,YACE,YAA0B,EAC1B,UAAsC,EACtC,KAAiC;QAEjC,KAAK,CAAC,YAAY,EAAE,qBAAS,CAAC,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC;CACF;AAEQ,8CAAiB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..018fcd4b5d801a4482d82a125aa248f188d31f15
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.d.ts
@@ -0,0 +1,18 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from './Scope';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { ScopeManager } from '../ScopeManager';
+import { ImplicitLibVariableOptions } from '../variable';
+declare class GlobalScope extends ScopeBase<ScopeType.global, TSESTree.Program, 
+/**
+ * The global scope has no parent.
+ */
+null> {
+    private readonly implicit;
+    constructor(scopeManager: ScopeManager, block: GlobalScope['block']);
+    defineImplicitVariable(options: ImplicitLibVariableOptions): void;
+    close(scopeManager: ScopeManager): Scope | null;
+}
+export { GlobalScope };
+//# sourceMappingURL=GlobalScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..be9a0123daabc70f2de9f29d2d7a795aa27ce26d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"GlobalScope.d.ts","sourceRoot":"","sources":["../../src/scope/GlobalScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAGL,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AAErB,cAAM,WAAY,SAAQ,SAAS,CACjC,SAAS,CAAC,MAAM,EAChB,QAAQ,CAAC,OAAO;AAChB;;GAEG;AACH,IAAI,CACL;IAEC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAQvB;gBAEU,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC;IAS5D,sBAAsB,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAUjE,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,KAAK,GAAG,IAAI;CAuBvD;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..d3fa4bfd2b3dde0caf77c050bd9290cf87233a6d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.js
@@ -0,0 +1,39 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.GlobalScope = void 0;
+const types_1 = require("@typescript-eslint/types");
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+const assert_1 = require("../assert");
+const ImplicitGlobalVariableDefinition_1 = require("../definition/ImplicitGlobalVariableDefinition");
+const variable_1 = require("../variable");
+class GlobalScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, block) {
+        super(scopeManager, ScopeType_1.ScopeType.global, null, block, false);
+        this.implicit = {
+            set: new Map(),
+            variables: [],
+            leftToBeResolved: [],
+        };
+    }
+    defineImplicitVariable(options) {
+        this.defineVariable(new variable_1.ImplicitLibVariable(this, options), this.set, this.variables, null, null);
+    }
+    close(scopeManager) {
+        assert_1.assert(this.leftToResolve);
+        for (const ref of this.leftToResolve) {
+            if (ref.maybeImplicitGlobal && !this.set.has(ref.identifier.name)) {
+                // create an implicit global variable from assignment expression
+                const info = ref.maybeImplicitGlobal;
+                const node = info.pattern;
+                if (node && node.type === types_1.AST_NODE_TYPES.Identifier) {
+                    this.defineVariable(node.name, this.implicit.set, this.implicit.variables, node, new ImplicitGlobalVariableDefinition_1.ImplicitGlobalVariableDefinition(info.pattern, info.node));
+                }
+            }
+        }
+        this.implicit.leftToBeResolved = this.leftToResolve;
+        return super.close(scopeManager);
+    }
+}
+exports.GlobalScope = GlobalScope;
+//# sourceMappingURL=GlobalScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..38deb003eb2d7f50873bc0edc62f9515c1b18c1d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"GlobalScope.js","sourceRoot":"","sources":["../../src/scope/GlobalScope.ts"],"names":[],"mappings":";;;AAAA,oDAAoE;AAEpE,2CAAwC;AACxC,2CAAwC;AACxC,sCAAmC;AACnC,qGAAkG;AAGlG,0CAIqB;AAErB,MAAM,WAAY,SAAQ,qBAOzB;IAYC,YAAY,YAA0B,EAAE,KAA2B;QACjE,KAAK,CAAC,YAAY,EAAE,qBAAS,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,GAAG;YACd,GAAG,EAAE,IAAI,GAAG,EAAE;YACd,SAAS,EAAE,EAAE;YACb,gBAAgB,EAAE,EAAE;SACrB,CAAC;IACJ,CAAC;IAEM,sBAAsB,CAAC,OAAmC;QAC/D,IAAI,CAAC,cAAc,CACjB,IAAI,8BAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,EACtC,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,SAAS,EACd,IAAI,EACJ,IAAI,CACL,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,YAA0B;QACrC,eAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE3B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE;YACpC,IAAI,GAAG,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBACjE,gEAAgE;gBAChE,MAAM,IAAI,GAAG,GAAG,CAAC,mBAAmB,CAAC;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC1B,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU,EAAE;oBACnD,IAAI,CAAC,cAAc,CACjB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,QAAQ,CAAC,GAAG,EACjB,IAAI,CAAC,QAAQ,CAAC,SAAS,EACvB,IAAI,EACJ,IAAI,mEAAgC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAC9D,CAAC;iBACH;aACF;SACF;QAED,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC;QACpD,OAAO,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;CACF;AAEQ,kCAAW"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..30fbc47a351b4d0dfc8df0c6887472a1640ad3e7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from './Scope';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { ScopeManager } from '../ScopeManager';
+declare class MappedTypeScope extends ScopeBase<ScopeType.mappedType, TSESTree.TSMappedType, Scope> {
+    constructor(scopeManager: ScopeManager, upperScope: MappedTypeScope['upper'], block: MappedTypeScope['block']);
+}
+export { MappedTypeScope };
+//# sourceMappingURL=MappedTypeScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..15921f2c758729240ad8580d5ef786b6a8512e46
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"MappedTypeScope.d.ts","sourceRoot":"","sources":["../../src/scope/MappedTypeScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,cAAM,eAAgB,SAAQ,SAAS,CACrC,SAAS,CAAC,UAAU,EACpB,QAAQ,CAAC,YAAY,EACrB,KAAK,CACN;gBAEG,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,EACpC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC;CAIlC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..81879c5ff394a433574a08354cbbdb3df0e5925e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.MappedTypeScope = void 0;
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+class MappedTypeScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, upperScope, block) {
+        super(scopeManager, ScopeType_1.ScopeType.mappedType, upperScope, block, false);
+    }
+}
+exports.MappedTypeScope = MappedTypeScope;
+//# sourceMappingURL=MappedTypeScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e5253b9ba259ad77b0c80e6544ce05dbb7c829e9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"MappedTypeScope.js","sourceRoot":"","sources":["../../src/scope/MappedTypeScope.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AACxC,2CAAwC;AAGxC,MAAM,eAAgB,SAAQ,qBAI7B;IACC,YACE,YAA0B,EAC1B,UAAoC,EACpC,KAA+B;QAE/B,KAAK,CAAC,YAAY,EAAE,qBAAS,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;CACF;AAEQ,0CAAe"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ab4541bdb0c20a87392fbf41caea57c6590ca288
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from './Scope';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { ScopeManager } from '../ScopeManager';
+declare class ModuleScope extends ScopeBase<ScopeType.module, TSESTree.Program, Scope> {
+    constructor(scopeManager: ScopeManager, upperScope: ModuleScope['upper'], block: ModuleScope['block']);
+}
+export { ModuleScope };
+//# sourceMappingURL=ModuleScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..6a4890dae5c65df61275cbdce69ad594193feb54
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ModuleScope.d.ts","sourceRoot":"","sources":["../../src/scope/ModuleScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,cAAM,WAAY,SAAQ,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;gBAE1E,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAChC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC;CAI9B;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..9d84e34a9128507790c56731c71dd7a053ca3418
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ModuleScope = void 0;
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+class ModuleScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, upperScope, block) {
+        super(scopeManager, ScopeType_1.ScopeType.module, upperScope, block, false);
+    }
+}
+exports.ModuleScope = ModuleScope;
+//# sourceMappingURL=ModuleScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..a2596f899502d1f379619e1fefeb064259bde39c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ModuleScope.js","sourceRoot":"","sources":["../../src/scope/ModuleScope.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AACxC,2CAAwC;AAGxC,MAAM,WAAY,SAAQ,qBAAoD;IAC5E,YACE,YAA0B,EAC1B,UAAgC,EAChC,KAA2B;QAE3B,KAAK,CAAC,YAAY,EAAE,qBAAS,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC;CACF;AAEQ,kCAAW"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..096539fa8b490c640b334d37fa90ed836298bbb9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.d.ts
@@ -0,0 +1,19 @@
+import { BlockScope } from './BlockScope';
+import { CatchScope } from './CatchScope';
+import { ClassScope } from './ClassScope';
+import { ConditionalTypeScope } from './ConditionalTypeScope';
+import { ForScope } from './ForScope';
+import { FunctionExpressionNameScope } from './FunctionExpressionNameScope';
+import { FunctionScope } from './FunctionScope';
+import { FunctionTypeScope } from './FunctionTypeScope';
+import { GlobalScope } from './GlobalScope';
+import { MappedTypeScope } from './MappedTypeScope';
+import { ModuleScope } from './ModuleScope';
+import { SwitchScope } from './SwitchScope';
+import { TSEnumScope } from './TSEnumScope';
+import { TSModuleScope } from './TSModuleScope';
+import { TypeScope } from './TypeScope';
+import { WithScope } from './WithScope';
+declare type Scope = BlockScope | CatchScope | ClassScope | ConditionalTypeScope | ForScope | FunctionExpressionNameScope | FunctionScope | FunctionTypeScope | GlobalScope | MappedTypeScope | ModuleScope | SwitchScope | TSEnumScope | TSModuleScope | TypeScope | WithScope;
+export { Scope };
+//# sourceMappingURL=Scope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..48fc461b0a5b9181f5814163ed4a143ad2c8c6e3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Scope.d.ts","sourceRoot":"","sources":["../../src/scope/Scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,aAAK,KAAK,GACN,UAAU,GACV,UAAU,GACV,UAAU,GACV,oBAAoB,GACpB,QAAQ,GACR,2BAA2B,GAC3B,aAAa,GACb,iBAAiB,GACjB,WAAW,GACX,eAAe,GACf,WAAW,GACX,WAAW,GACX,WAAW,GACX,aAAa,GACb,SAAS,GACT,SAAS,CAAC;AAEd,OAAO,EAAE,KAAK,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.js
new file mode 100644
index 0000000000000000000000000000000000000000..676430c1c218602fb97500a8134e02f523ef3fb7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=Scope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..03b04c8322c104fd233db06fa644aeafabab891d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Scope.js","sourceRoot":"","sources":["../../src/scope/Scope.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0adffd272e79760ed11efaa60d19588fa9bdb510
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.d.ts
@@ -0,0 +1,106 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { FunctionScope } from './FunctionScope';
+import { GlobalScope } from './GlobalScope';
+import { ScopeType } from './ScopeType';
+import { ScopeManager } from '../ScopeManager';
+import { Scope } from './Scope';
+import { ModuleScope } from './ModuleScope';
+import { Definition } from '../definition';
+import { Reference, ReferenceFlag, ReferenceImplicitGlobal } from '../referencer/Reference';
+import { Variable } from '../variable';
+import { TSModuleScope } from './TSModuleScope';
+declare type VariableScope = GlobalScope | FunctionScope | ModuleScope | TSModuleScope;
+declare abstract class ScopeBase<TType extends ScopeType, TBlock extends TSESTree.Node, TUpper extends Scope | null> {
+    #private;
+    /**
+     * A unique ID for this instance - primarily used to help debugging and testing
+     */
+    readonly $id: number;
+    /**
+     * The AST node which created this scope.
+     * @public
+     */
+    readonly block: TBlock;
+    /**
+     * The array of child scopes. This does not include grandchild scopes.
+     * @public
+     */
+    readonly childScopes: Scope[];
+    /**
+     * Whether this scope is created by a FunctionExpression.
+     * @public
+     */
+    readonly functionExpressionScope: boolean;
+    /**
+     * Whether 'use strict' is in effect in this scope.
+     * @public
+     */
+    isStrict: boolean;
+    /**
+     * List of {@link Reference}s that are left to be resolved (i.e. which
+     * need to be linked to the variable they refer to).
+     */
+    protected leftToResolve: Reference[] | null;
+    /**
+     * Any variable {@link Reference} found in this scope.
+     * This includes occurrences of local variables as well as variables from parent scopes (including the global scope).
+     * For local variables this also includes defining occurrences (like in a 'var' statement).
+     * In a 'function' scope this does not include the occurrences of the formal parameter in the parameter list.
+     * @public
+     */
+    readonly references: Reference[];
+    /**
+     * The map from variable names to variable objects.
+     * @public
+     */
+    readonly set: Map<string, Variable>;
+    /**
+     * The {@link Reference}s that are not resolved with this scope.
+     * @public
+     */
+    readonly through: Reference[];
+    /**
+     * The type of scope
+     * @public
+     */
+    readonly type: TType;
+    /**
+     * Reference to the parent {@link Scope}.
+     * @public
+     */
+    readonly upper: TUpper;
+    /**
+     * The scoped {@link Variable}s of this scope.
+     * In the case of a 'function' scope this includes the automatic argument `arguments` as its first element, as well
+     * as all further formal arguments.
+     * This does not include variables which are defined in child scopes.
+     * @public
+     */
+    readonly variables: Variable[];
+    /**
+     * For scopes that can contain variable declarations, this is a self-reference.
+     * For other scope types this is the *variableScope* value of the parent scope.
+     * @public
+     */
+    readonly variableScope: VariableScope;
+    constructor(scopeManager: ScopeManager, type: TType, upperScope: TUpper, block: TBlock, isMethodDefinition: boolean);
+    private isVariableScope;
+    shouldStaticallyClose(): boolean;
+    private shouldStaticallyCloseForGlobal;
+    close(scopeManager: ScopeManager): Scope | null;
+    /**
+     * To override by function scopes.
+     * References in default parameters isn't resolved to variables which are in their function body.
+     */
+    protected isValidResolution(_ref: Reference, _variable: Variable): boolean;
+    protected delegateToUpperScope(ref: Reference): void;
+    private addDeclaredVariablesOfNode;
+    protected defineVariable(nameOrVariable: string | Variable, set: Map<string, Variable>, variables: Variable[], node: TSESTree.Identifier | null, def: Definition | null): void;
+    defineIdentifier(node: TSESTree.Identifier, def: Definition): void;
+    defineLiteralIdentifier(node: TSESTree.StringLiteral, def: Definition): void;
+    referenceValue(node: TSESTree.Identifier | TSESTree.JSXIdentifier, assign?: ReferenceFlag, writeExpr?: TSESTree.Expression | null, maybeImplicitGlobal?: ReferenceImplicitGlobal | null, init?: boolean): void;
+    referenceType(node: TSESTree.Identifier): void;
+    referenceDualValueType(node: TSESTree.Identifier): void;
+}
+export { ScopeBase };
+//# sourceMappingURL=ScopeBase.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..d4c55a3c41c62c8f2d68f4f146d74d8edc8d96d0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ScopeBase.d.ts","sourceRoot":"","sources":["../../src/scope/ScopeBase.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.js
new file mode 100644
index 0000000000000000000000000000000000000000..d62fec586feedf684635c9e041f88b60e9f003df
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.js
@@ -0,0 +1,369 @@
+"use strict";
+var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to set private field on non-instance");
+    }
+    privateMap.set(receiver, value);
+    return value;
+};
+var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to get private field on non-instance");
+    }
+    return privateMap.get(receiver);
+};
+var _declaredVariables, _dynamic, _staticCloseRef, _dynamicCloseRef, _globalCloseRef;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ScopeBase = void 0;
+const types_1 = require("@typescript-eslint/types");
+const ScopeType_1 = require("./ScopeType");
+const assert_1 = require("../assert");
+const definition_1 = require("../definition");
+const ID_1 = require("../ID");
+const Reference_1 = require("../referencer/Reference");
+const variable_1 = require("../variable");
+/**
+ * Test if scope is strict
+ */
+function isStrictScope(scope, block, isMethodDefinition) {
+    var _a;
+    let body;
+    // When upper scope is exists and strict, inner scope is also strict.
+    if ((_a = scope.upper) === null || _a === void 0 ? void 0 : _a.isStrict) {
+        return true;
+    }
+    if (isMethodDefinition) {
+        return true;
+    }
+    if (scope.type === ScopeType_1.ScopeType.class ||
+        scope.type === ScopeType_1.ScopeType.conditionalType ||
+        scope.type === ScopeType_1.ScopeType.functionType ||
+        scope.type === ScopeType_1.ScopeType.mappedType ||
+        scope.type === ScopeType_1.ScopeType.module ||
+        scope.type === ScopeType_1.ScopeType.tsEnum ||
+        scope.type === ScopeType_1.ScopeType.tsModule ||
+        scope.type === ScopeType_1.ScopeType.type) {
+        return true;
+    }
+    if (scope.type === ScopeType_1.ScopeType.block || scope.type === ScopeType_1.ScopeType.switch) {
+        return false;
+    }
+    if (scope.type === ScopeType_1.ScopeType.function) {
+        const functionBody = block;
+        switch (functionBody.type) {
+            case types_1.AST_NODE_TYPES.ArrowFunctionExpression:
+                if (functionBody.body.type !== types_1.AST_NODE_TYPES.BlockStatement) {
+                    return false;
+                }
+                body = functionBody.body;
+                break;
+            case types_1.AST_NODE_TYPES.Program:
+                body = functionBody;
+                break;
+            default:
+                body = functionBody.body;
+        }
+        if (!body) {
+            return false;
+        }
+    }
+    else if (scope.type === ScopeType_1.ScopeType.global) {
+        body = block;
+    }
+    else {
+        return false;
+    }
+    // Search 'use strict' directive.
+    for (let i = 0; i < body.body.length; ++i) {
+        const stmt = body.body[i];
+        if (stmt.type !== types_1.AST_NODE_TYPES.ExpressionStatement) {
+            break;
+        }
+        const expr = stmt.expression;
+        if (expr.type !== types_1.AST_NODE_TYPES.Literal ||
+            typeof expr.value !== 'string') {
+            break;
+        }
+        if (expr.raw !== null && expr.raw !== undefined) {
+            if (expr.raw === '"use strict"' || expr.raw === "'use strict'") {
+                return true;
+            }
+        }
+        else {
+            if (expr.value === 'use strict') {
+                return true;
+            }
+        }
+    }
+    return false;
+}
+/**
+ * Register scope
+ */
+function registerScope(scopeManager, scope) {
+    scopeManager.scopes.push(scope);
+    const scopes = scopeManager.nodeToScope.get(scope.block);
+    if (scopes) {
+        scopes.push(scope);
+    }
+    else {
+        scopeManager.nodeToScope.set(scope.block, [scope]);
+    }
+}
+const generator = ID_1.createIdGenerator();
+const VARIABLE_SCOPE_TYPES = new Set([
+    ScopeType_1.ScopeType.global,
+    ScopeType_1.ScopeType.function,
+    ScopeType_1.ScopeType.module,
+    ScopeType_1.ScopeType.tsModule,
+]);
+class ScopeBase {
+    constructor(scopeManager, type, upperScope, block, isMethodDefinition) {
+        /**
+         * A unique ID for this instance - primarily used to help debugging and testing
+         */
+        this.$id = generator();
+        /**
+         * The array of child scopes. This does not include grandchild scopes.
+         * @public
+         */
+        this.childScopes = [];
+        /**
+         * A map of the variables for each node in this scope.
+         * This is map is a pointer to the one in the parent ScopeManager instance
+         */
+        _declaredVariables.set(this, void 0);
+        /**
+         * Generally, through the lexical scoping of JS you can always know which variable an identifier in the source code
+         * refers to. There are a few exceptions to this rule. With `global` and `with` scopes you can only decide at runtime
+         * which variable a reference refers to.
+         * All those scopes are considered "dynamic".
+         */
+        _dynamic.set(this, void 0);
+        /**
+         * Whether this scope is created by a FunctionExpression.
+         * @public
+         */
+        this.functionExpressionScope = false;
+        /**
+         * List of {@link Reference}s that are left to be resolved (i.e. which
+         * need to be linked to the variable they refer to).
+         */
+        this.leftToResolve = [];
+        /**
+         * Any variable {@link Reference} found in this scope.
+         * This includes occurrences of local variables as well as variables from parent scopes (including the global scope).
+         * For local variables this also includes defining occurrences (like in a 'var' statement).
+         * In a 'function' scope this does not include the occurrences of the formal parameter in the parameter list.
+         * @public
+         */
+        this.references = [];
+        /**
+         * The map from variable names to variable objects.
+         * @public
+         */
+        this.set = new Map();
+        /**
+         * The {@link Reference}s that are not resolved with this scope.
+         * @public
+         */
+        this.through = [];
+        /**
+         * The scoped {@link Variable}s of this scope.
+         * In the case of a 'function' scope this includes the automatic argument `arguments` as its first element, as well
+         * as all further formal arguments.
+         * This does not include variables which are defined in child scopes.
+         * @public
+         */
+        this.variables = [];
+        _staticCloseRef.set(this, (ref) => {
+            const resolve = () => {
+                const name = ref.identifier.name;
+                const variable = this.set.get(name);
+                if (!variable) {
+                    return false;
+                }
+                if (!this.isValidResolution(ref, variable)) {
+                    return false;
+                }
+                // make sure we don't match a type reference to a value variable
+                const isValidTypeReference = ref.isTypeReference && variable.isTypeVariable;
+                const isValidValueReference = ref.isValueReference && variable.isValueVariable;
+                if (!isValidTypeReference && !isValidValueReference) {
+                    return false;
+                }
+                variable.references.push(ref);
+                ref.resolved = variable;
+                return true;
+            };
+            if (!resolve()) {
+                this.delegateToUpperScope(ref);
+            }
+        });
+        _dynamicCloseRef.set(this, (ref) => {
+            // notify all names are through to global
+            let current = this;
+            do {
+                current.through.push(ref);
+                current = current.upper;
+            } while (current);
+        });
+        _globalCloseRef.set(this, (ref, scopeManager) => {
+            // let/const/class declarations should be resolved statically.
+            // others should be resolved dynamically.
+            if (this.shouldStaticallyCloseForGlobal(ref, scopeManager)) {
+                __classPrivateFieldGet(this, _staticCloseRef).call(this, ref);
+            }
+            else {
+                __classPrivateFieldGet(this, _dynamicCloseRef).call(this, ref);
+            }
+        });
+        const upperScopeAsScopeBase = upperScope;
+        this.type = type;
+        __classPrivateFieldSet(this, _dynamic, this.type === ScopeType_1.ScopeType.global || this.type === ScopeType_1.ScopeType.with);
+        this.block = block;
+        this.variableScope = this.isVariableScope()
+            ? this
+            : upperScopeAsScopeBase.variableScope;
+        this.upper = upperScope;
+        /**
+         * Whether 'use strict' is in effect in this scope.
+         * @member {boolean} Scope#isStrict
+         */
+        this.isStrict = isStrictScope(this, block, isMethodDefinition);
+        if (upperScopeAsScopeBase) {
+            // this is guaranteed to be correct at runtime
+            upperScopeAsScopeBase.childScopes.push(this);
+        }
+        __classPrivateFieldSet(this, _declaredVariables, scopeManager.declaredVariables);
+        registerScope(scopeManager, this);
+    }
+    isVariableScope() {
+        return VARIABLE_SCOPE_TYPES.has(this.type);
+    }
+    shouldStaticallyClose() {
+        return !__classPrivateFieldGet(this, _dynamic);
+    }
+    shouldStaticallyCloseForGlobal(ref, scopeManager) {
+        // On global scope, let/const/class declarations should be resolved statically.
+        const name = ref.identifier.name;
+        const variable = this.set.get(name);
+        if (!variable) {
+            return false;
+        }
+        // variable exists on the scope
+        // in module mode, we can statically resolve everything, regardless of its decl type
+        if (scopeManager.isModule()) {
+            return true;
+        }
+        // in script mode, only certain cases should be statically resolved
+        // Example:
+        // a `var` decl is ignored by the runtime if it clashes with a global name
+        // this means that we should not resolve the reference to the variable
+        const defs = variable.defs;
+        return (defs.length > 0 &&
+            defs.every(def => {
+                var _a;
+                if (def.type === definition_1.DefinitionType.Variable &&
+                    ((_a = def.parent) === null || _a === void 0 ? void 0 : _a.type) === types_1.AST_NODE_TYPES.VariableDeclaration &&
+                    def.parent.kind === 'var') {
+                    return false;
+                }
+                return true;
+            }));
+    }
+    close(scopeManager) {
+        let closeRef;
+        if (this.shouldStaticallyClose()) {
+            closeRef = __classPrivateFieldGet(this, _staticCloseRef);
+        }
+        else if (this.type !== 'global') {
+            closeRef = __classPrivateFieldGet(this, _dynamicCloseRef);
+        }
+        else {
+            closeRef = __classPrivateFieldGet(this, _globalCloseRef);
+        }
+        // Try Resolving all references in this scope.
+        assert_1.assert(this.leftToResolve);
+        for (let i = 0; i < this.leftToResolve.length; ++i) {
+            const ref = this.leftToResolve[i];
+            closeRef(ref, scopeManager);
+        }
+        this.leftToResolve = null;
+        return this.upper;
+    }
+    /**
+     * To override by function scopes.
+     * References in default parameters isn't resolved to variables which are in their function body.
+     */
+    isValidResolution(_ref, _variable) {
+        return true;
+    }
+    delegateToUpperScope(ref) {
+        const upper = this.upper;
+        if (upper === null || upper === void 0 ? void 0 : upper.leftToResolve) {
+            upper.leftToResolve.push(ref);
+        }
+        this.through.push(ref);
+    }
+    addDeclaredVariablesOfNode(variable, node) {
+        if (node == null) {
+            return;
+        }
+        let variables = __classPrivateFieldGet(this, _declaredVariables).get(node);
+        if (variables == null) {
+            variables = [];
+            __classPrivateFieldGet(this, _declaredVariables).set(node, variables);
+        }
+        if (!variables.includes(variable)) {
+            variables.push(variable);
+        }
+    }
+    defineVariable(nameOrVariable, set, variables, node, def) {
+        const name = typeof nameOrVariable === 'string' ? nameOrVariable : nameOrVariable.name;
+        let variable = set.get(name);
+        if (!variable) {
+            variable =
+                typeof nameOrVariable === 'string'
+                    ? new variable_1.Variable(name, this)
+                    : nameOrVariable;
+            set.set(name, variable);
+            variables.push(variable);
+        }
+        if (def) {
+            variable.defs.push(def);
+            this.addDeclaredVariablesOfNode(variable, def.node);
+            this.addDeclaredVariablesOfNode(variable, def.parent);
+        }
+        if (node) {
+            variable.identifiers.push(node);
+        }
+    }
+    defineIdentifier(node, def) {
+        this.defineVariable(node.name, this.set, this.variables, node, def);
+    }
+    defineLiteralIdentifier(node, def) {
+        this.defineVariable(node.value, this.set, this.variables, null, def);
+    }
+    referenceValue(node, assign = Reference_1.ReferenceFlag.Read, writeExpr, maybeImplicitGlobal, init = false) {
+        var _a;
+        const ref = new Reference_1.Reference(node, this, assign, writeExpr, maybeImplicitGlobal, init, Reference_1.ReferenceTypeFlag.Value);
+        this.references.push(ref);
+        (_a = this.leftToResolve) === null || _a === void 0 ? void 0 : _a.push(ref);
+    }
+    referenceType(node) {
+        var _a;
+        const ref = new Reference_1.Reference(node, this, Reference_1.ReferenceFlag.Read, null, null, false, Reference_1.ReferenceTypeFlag.Type);
+        this.references.push(ref);
+        (_a = this.leftToResolve) === null || _a === void 0 ? void 0 : _a.push(ref);
+    }
+    referenceDualValueType(node) {
+        var _a;
+        const ref = new Reference_1.Reference(node, this, Reference_1.ReferenceFlag.Read, null, null, false, Reference_1.ReferenceTypeFlag.Type | Reference_1.ReferenceTypeFlag.Value);
+        this.references.push(ref);
+        (_a = this.leftToResolve) === null || _a === void 0 ? void 0 : _a.push(ref);
+    }
+}
+exports.ScopeBase = ScopeBase;
+_declaredVariables = new WeakMap(), _dynamic = new WeakMap(), _staticCloseRef = new WeakMap(), _dynamicCloseRef = new WeakMap(), _globalCloseRef = new WeakMap();
+//# sourceMappingURL=ScopeBase.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..5adba46a8d1ff1929a8721e0ce070e886e14383d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ScopeBase.js","sourceRoot":"","sources":["../../src/scope/ScopeBase.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..25620ea9923ff2cad3ff2dc59ce4a2fca90385a5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.d.ts
@@ -0,0 +1,20 @@
+declare enum ScopeType {
+    block = "block",
+    catch = "catch",
+    class = "class",
+    conditionalType = "conditionalType",
+    for = "for",
+    function = "function",
+    functionExpressionName = "function-expression-name",
+    functionType = "functionType",
+    global = "global",
+    mappedType = "mappedType",
+    module = "module",
+    switch = "switch",
+    tsEnum = "tsEnum",
+    tsModule = "tsModule",
+    type = "type",
+    with = "with"
+}
+export { ScopeType };
+//# sourceMappingURL=ScopeType.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..9cbf79064c0a9e2a3d05016ef121c644fc053e9e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ScopeType.d.ts","sourceRoot":"","sources":["../../src/scope/ScopeType.ts"],"names":[],"mappings":"AAAA,aAAK,SAAS;IACZ,KAAK,UAAU;IACf,KAAK,UAAU;IACf,KAAK,UAAU;IACf,eAAe,oBAAoB;IACnC,GAAG,QAAQ;IACX,QAAQ,aAAa;IACrB,sBAAsB,6BAA6B;IACnD,YAAY,iBAAiB;IAC7B,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.js
new file mode 100644
index 0000000000000000000000000000000000000000..32b0d4a84fc6e537876d4acab9c1b0a3eb1c87c2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.js
@@ -0,0 +1,24 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ScopeType = void 0;
+var ScopeType;
+(function (ScopeType) {
+    ScopeType["block"] = "block";
+    ScopeType["catch"] = "catch";
+    ScopeType["class"] = "class";
+    ScopeType["conditionalType"] = "conditionalType";
+    ScopeType["for"] = "for";
+    ScopeType["function"] = "function";
+    ScopeType["functionExpressionName"] = "function-expression-name";
+    ScopeType["functionType"] = "functionType";
+    ScopeType["global"] = "global";
+    ScopeType["mappedType"] = "mappedType";
+    ScopeType["module"] = "module";
+    ScopeType["switch"] = "switch";
+    ScopeType["tsEnum"] = "tsEnum";
+    ScopeType["tsModule"] = "tsModule";
+    ScopeType["type"] = "type";
+    ScopeType["with"] = "with";
+})(ScopeType || (ScopeType = {}));
+exports.ScopeType = ScopeType;
+//# sourceMappingURL=ScopeType.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..6544bc157f267b434681024ff6574362a8610098
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ScopeType.js","sourceRoot":"","sources":["../../src/scope/ScopeType.ts"],"names":[],"mappings":";;;AAAA,IAAK,SAiBJ;AAjBD,WAAK,SAAS;IACZ,4BAAe,CAAA;IACf,4BAAe,CAAA;IACf,4BAAe,CAAA;IACf,gDAAmC,CAAA;IACnC,wBAAW,CAAA;IACX,kCAAqB,CAAA;IACrB,gEAAmD,CAAA;IACnD,0CAA6B,CAAA;IAC7B,8BAAiB,CAAA;IACjB,sCAAyB,CAAA;IACzB,8BAAiB,CAAA;IACjB,8BAAiB,CAAA;IACjB,8BAAiB,CAAA;IACjB,kCAAqB,CAAA;IACrB,0BAAa,CAAA;IACb,0BAAa,CAAA;AACf,CAAC,EAjBI,SAAS,KAAT,SAAS,QAiBb;AAEQ,8BAAS"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..32c51c7174fac33068b5b8aac3a0086b4e86d325
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from './Scope';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { ScopeManager } from '../ScopeManager';
+declare class SwitchScope extends ScopeBase<ScopeType.switch, TSESTree.SwitchStatement, Scope> {
+    constructor(scopeManager: ScopeManager, upperScope: SwitchScope['upper'], block: SwitchScope['block']);
+}
+export { SwitchScope };
+//# sourceMappingURL=SwitchScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..d992332f8eb549e53d2d296567bb43a04e058b6a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"SwitchScope.d.ts","sourceRoot":"","sources":["../../src/scope/SwitchScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,cAAM,WAAY,SAAQ,SAAS,CACjC,SAAS,CAAC,MAAM,EAChB,QAAQ,CAAC,eAAe,EACxB,KAAK,CACN;gBAEG,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAChC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC;CAI9B;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..9229e4edc5d3ec7eb6762304e3889ac605a91d9e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.SwitchScope = void 0;
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+class SwitchScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, upperScope, block) {
+        super(scopeManager, ScopeType_1.ScopeType.switch, upperScope, block, false);
+    }
+}
+exports.SwitchScope = SwitchScope;
+//# sourceMappingURL=SwitchScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..0e3d4095e6f8ab2207566ad26e693f92fbcc8f93
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"SwitchScope.js","sourceRoot":"","sources":["../../src/scope/SwitchScope.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AACxC,2CAAwC;AAGxC,MAAM,WAAY,SAAQ,qBAIzB;IACC,YACE,YAA0B,EAC1B,UAAgC,EAChC,KAA2B;QAE3B,KAAK,CAAC,YAAY,EAAE,qBAAS,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC;CACF;AAEQ,kCAAW"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..708fef31dc6761428762078f9283e0055f58daee
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from './Scope';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { ScopeManager } from '../ScopeManager';
+declare class TSEnumScope extends ScopeBase<ScopeType.tsEnum, TSESTree.TSEnumDeclaration, Scope> {
+    constructor(scopeManager: ScopeManager, upperScope: TSEnumScope['upper'], block: TSEnumScope['block']);
+}
+export { TSEnumScope };
+//# sourceMappingURL=TSEnumScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e47c446b88b977ab187b7092fb06f2bd4c6d0a5c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"TSEnumScope.d.ts","sourceRoot":"","sources":["../../src/scope/TSEnumScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,cAAM,WAAY,SAAQ,SAAS,CACjC,SAAS,CAAC,MAAM,EAChB,QAAQ,CAAC,iBAAiB,EAC1B,KAAK,CACN;gBAEG,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAChC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC;CAI9B;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f51bfb1cdaa502b16b5a82823a678c634c57403
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TSEnumScope = void 0;
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+class TSEnumScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, upperScope, block) {
+        super(scopeManager, ScopeType_1.ScopeType.tsEnum, upperScope, block, false);
+    }
+}
+exports.TSEnumScope = TSEnumScope;
+//# sourceMappingURL=TSEnumScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..57369e313a217b2210e1a7f671cb4ff6f05f99f1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"TSEnumScope.js","sourceRoot":"","sources":["../../src/scope/TSEnumScope.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AACxC,2CAAwC;AAGxC,MAAM,WAAY,SAAQ,qBAIzB;IACC,YACE,YAA0B,EAC1B,UAAgC,EAChC,KAA2B;QAE3B,KAAK,CAAC,YAAY,EAAE,qBAAS,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC;CACF;AAEQ,kCAAW"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fda2795c659373c0844d5d731202f29e57969630
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from './Scope';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { ScopeManager } from '../ScopeManager';
+declare class TSModuleScope extends ScopeBase<ScopeType.tsModule, TSESTree.TSModuleDeclaration, Scope> {
+    constructor(scopeManager: ScopeManager, upperScope: TSModuleScope['upper'], block: TSModuleScope['block']);
+}
+export { TSModuleScope };
+//# sourceMappingURL=TSModuleScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..131196af48a7ce146e8ea70339eaf511a4098132
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"TSModuleScope.d.ts","sourceRoot":"","sources":["../../src/scope/TSModuleScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,cAAM,aAAc,SAAQ,SAAS,CACnC,SAAS,CAAC,QAAQ,EAClB,QAAQ,CAAC,mBAAmB,EAC5B,KAAK,CACN;gBAEG,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,EAClC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC;CAIhC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..86279082f36a8f5e7ccf63f00056e3167bef2042
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TSModuleScope = void 0;
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+class TSModuleScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, upperScope, block) {
+        super(scopeManager, ScopeType_1.ScopeType.tsModule, upperScope, block, false);
+    }
+}
+exports.TSModuleScope = TSModuleScope;
+//# sourceMappingURL=TSModuleScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c48350e16a1067d6e1c8e024a2ffaf7a1e1a903e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"TSModuleScope.js","sourceRoot":"","sources":["../../src/scope/TSModuleScope.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AACxC,2CAAwC;AAGxC,MAAM,aAAc,SAAQ,qBAI3B;IACC,YACE,YAA0B,EAC1B,UAAkC,EAClC,KAA6B;QAE7B,KAAK,CAAC,YAAY,EAAE,qBAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;CACF;AAEQ,sCAAa"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f9313a220af6b15212e9e7077d17ce2c511f47fe
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.d.ts
@@ -0,0 +1,10 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from './Scope';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { ScopeManager } from '../ScopeManager';
+declare class TypeScope extends ScopeBase<ScopeType.type, TSESTree.TSInterfaceDeclaration | TSESTree.TSTypeAliasDeclaration, Scope> {
+    constructor(scopeManager: ScopeManager, upperScope: TypeScope['upper'], block: TypeScope['block']);
+}
+export { TypeScope };
+//# sourceMappingURL=TypeScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..cbc122914314cef3d94c6fd09c1b2984928012c7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"TypeScope.d.ts","sourceRoot":"","sources":["../../src/scope/TypeScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,cAAM,SAAU,SAAQ,SAAS,CAC/B,SAAS,CAAC,IAAI,EACd,QAAQ,CAAC,sBAAsB,GAAG,QAAQ,CAAC,sBAAsB,EACjE,KAAK,CACN;gBAEG,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,EAC9B,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC;CAI5B;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..ebbf5fe65a39b3478595854b5a56a2000ec5a172
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TypeScope = void 0;
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+class TypeScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, upperScope, block) {
+        super(scopeManager, ScopeType_1.ScopeType.type, upperScope, block, false);
+    }
+}
+exports.TypeScope = TypeScope;
+//# sourceMappingURL=TypeScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..74dc282c290e395c46cfaa244c48b7502a8926e8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"TypeScope.js","sourceRoot":"","sources":["../../src/scope/TypeScope.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AACxC,2CAAwC;AAGxC,MAAM,SAAU,SAAQ,qBAIvB;IACC,YACE,YAA0B,EAC1B,UAA8B,EAC9B,KAAyB;QAEzB,KAAK,CAAC,YAAY,EAAE,qBAAS,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;CACF;AAEQ,8BAAS"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8859b66b3c99e59da4d6d26cdbaf17854f47d06f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.d.ts
@@ -0,0 +1,11 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Scope } from './Scope';
+import { ScopeBase } from './ScopeBase';
+import { ScopeType } from './ScopeType';
+import { ScopeManager } from '../ScopeManager';
+declare class WithScope extends ScopeBase<ScopeType.with, TSESTree.WithStatement, Scope> {
+    constructor(scopeManager: ScopeManager, upperScope: WithScope['upper'], block: WithScope['block']);
+    close(scopeManager: ScopeManager): Scope | null;
+}
+export { WithScope };
+//# sourceMappingURL=WithScope.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..f885c28db913f094932bd15db984342a41f1023c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"WithScope.d.ts","sourceRoot":"","sources":["../../src/scope/WithScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,cAAM,SAAU,SAAQ,SAAS,CAC/B,SAAS,CAAC,IAAI,EACd,QAAQ,CAAC,aAAa,EACtB,KAAK,CACN;gBAEG,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,EAC9B,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC;IAI3B,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,KAAK,GAAG,IAAI;CAYhD;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.js
new file mode 100644
index 0000000000000000000000000000000000000000..896d27df414f3548cd3c977af36059f93731ce2e
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.js
@@ -0,0 +1,25 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.WithScope = void 0;
+const ScopeBase_1 = require("./ScopeBase");
+const ScopeType_1 = require("./ScopeType");
+const assert_1 = require("../assert");
+class WithScope extends ScopeBase_1.ScopeBase {
+    constructor(scopeManager, upperScope, block) {
+        super(scopeManager, ScopeType_1.ScopeType.with, upperScope, block, false);
+    }
+    close(scopeManager) {
+        if (this.shouldStaticallyClose()) {
+            return super.close(scopeManager);
+        }
+        assert_1.assert(this.leftToResolve);
+        for (let i = 0; i < this.leftToResolve.length; ++i) {
+            const ref = this.leftToResolve[i];
+            this.delegateToUpperScope(ref);
+        }
+        this.leftToResolve = null;
+        return this.upper;
+    }
+}
+exports.WithScope = WithScope;
+//# sourceMappingURL=WithScope.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..afab84e786df1edc2e5856c12cd84d21109ea62b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"WithScope.js","sourceRoot":"","sources":["../../src/scope/WithScope.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AACxC,2CAAwC;AACxC,sCAAmC;AAGnC,MAAM,SAAU,SAAQ,qBAIvB;IACC,YACE,YAA0B,EAC1B,UAA8B,EAC9B,KAAyB;QAEzB,KAAK,CAAC,YAAY,EAAE,qBAAS,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;IACD,KAAK,CAAC,YAA0B;QAC9B,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;YAChC,OAAO,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;SAClC;QACD,eAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAClD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;SAChC;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF;AAEQ,8BAAS"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3bbcd26f1e48e8013100415f401f740cc0ee39d6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts
@@ -0,0 +1,19 @@
+export * from './BlockScope';
+export * from './CatchScope';
+export * from './ClassScope';
+export * from './ConditionalTypeScope';
+export * from './ForScope';
+export * from './FunctionExpressionNameScope';
+export * from './FunctionScope';
+export * from './FunctionTypeScope';
+export * from './GlobalScope';
+export * from './MappedTypeScope';
+export * from './ModuleScope';
+export * from './Scope';
+export * from './ScopeType';
+export * from './SwitchScope';
+export * from './TSEnumScope';
+export * from './TSModuleScope';
+export * from './TypeScope';
+export * from './WithScope';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..15054aacf84a6b8936ac8b8ef997ed40ff189ed2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scope/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..62800830c5357afd704194376e1b759a14b3dc10
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js
@@ -0,0 +1,31 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("./BlockScope"), exports);
+__exportStar(require("./CatchScope"), exports);
+__exportStar(require("./ClassScope"), exports);
+__exportStar(require("./ConditionalTypeScope"), exports);
+__exportStar(require("./ForScope"), exports);
+__exportStar(require("./FunctionExpressionNameScope"), exports);
+__exportStar(require("./FunctionScope"), exports);
+__exportStar(require("./FunctionTypeScope"), exports);
+__exportStar(require("./GlobalScope"), exports);
+__exportStar(require("./MappedTypeScope"), exports);
+__exportStar(require("./ModuleScope"), exports);
+__exportStar(require("./Scope"), exports);
+__exportStar(require("./ScopeType"), exports);
+__exportStar(require("./SwitchScope"), exports);
+__exportStar(require("./TSEnumScope"), exports);
+__exportStar(require("./TSModuleScope"), exports);
+__exportStar(require("./TypeScope"), exports);
+__exportStar(require("./WithScope"), exports);
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..23098f0a633cbeab15fd62e111355ef6f055e996
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scope/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA6B;AAC7B,+CAA6B;AAC7B,+CAA6B;AAC7B,yDAAuC;AACvC,6CAA2B;AAC3B,gEAA8C;AAC9C,kDAAgC;AAChC,sDAAoC;AACpC,gDAA8B;AAC9B,oDAAkC;AAClC,gDAA8B;AAC9B,0CAAwB;AACxB,8CAA4B;AAC5B,gDAA8B;AAC9B,gDAA8B;AAC9B,kDAAgC;AAChC,8CAA4B;AAC5B,8CAA4B"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..29e3faf79d8cd38b6fbca89aaf7f81a9509e8d4b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.d.ts
@@ -0,0 +1,34 @@
+import { VariableBase } from './VariableBase';
+import { TSESTree } from '@typescript-eslint/types';
+/**
+ * ESLint defines global variables using the eslint-scope Variable class
+ * This is declared her for consumers to use
+ */
+declare class ESLintScopeVariable extends VariableBase {
+    /**
+     * Written to by ESLint.
+     * If this key exists, this variable is a global variable added by ESLint.
+     * If this is `true`, this variable can be assigned arbitrary values.
+     * If this is `false`, this variable is readonly.
+     */
+    writeable?: boolean;
+    /**
+     * Written to by ESLint.
+     * This property is undefined if there are no globals directive comments.
+     * The array of globals directive comments which defined this global variable in the source code file.
+     */
+    eslintExplicitGlobal?: boolean;
+    /**
+     * Written to by ESLint.
+     * The configured value in config files. This can be different from `variable.writeable` if there are globals directive comments.
+     */
+    eslintImplicitGlobalSetting?: 'readonly' | 'writable';
+    /**
+     * Written to by ESLint.
+     * If this key exists, it is a global variable added by ESLint.
+     * If `true`, this global variable was defined by a globals directive comment in the source code file.
+     */
+    eslintExplicitGlobalComments?: TSESTree.Comment[];
+}
+export { ESLintScopeVariable };
+//# sourceMappingURL=ESLintScopeVariable.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e13cbdc1511ca451d723dc63e4a3d4201dfaf0e5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ESLintScopeVariable.d.ts","sourceRoot":"","sources":["../../src/variable/ESLintScopeVariable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD;;;GAGG;AACH,cAAM,mBAAoB,SAAQ,YAAY;IAC5C;;;;;OAKG;IACI,SAAS,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;OAIG;IACI,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAEtC;;;OAGG;IACI,2BAA2B,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IAE7D;;;;OAIG;IACI,4BAA4B,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;CAC1D;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.js b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.js
new file mode 100644
index 0000000000000000000000000000000000000000..f0a2f609818b195dd8cad96c7c3c9eb716bb9bfd
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ESLintScopeVariable = void 0;
+const VariableBase_1 = require("./VariableBase");
+/**
+ * ESLint defines global variables using the eslint-scope Variable class
+ * This is declared her for consumers to use
+ */
+class ESLintScopeVariable extends VariableBase_1.VariableBase {
+}
+exports.ESLintScopeVariable = ESLintScopeVariable;
+//# sourceMappingURL=ESLintScopeVariable.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..9769938ee6a290de97e9796cca025100a6d75b47
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ESLintScopeVariable.js","sourceRoot":"","sources":["../../src/variable/ESLintScopeVariable.ts"],"names":[],"mappings":";;;AAAA,iDAA8C;AAG9C;;;GAGG;AACH,MAAM,mBAAoB,SAAQ,2BAAY;CA4B7C;AAEQ,kDAAmB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9622d1766a1cc004393e6c0f306559e6ade2dea7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.d.ts
@@ -0,0 +1,26 @@
+import { ESLintScopeVariable } from './ESLintScopeVariable';
+import { Variable } from './Variable';
+import { Scope } from '../scope';
+interface ImplicitLibVariableOptions {
+    readonly eslintImplicitGlobalSetting?: ESLintScopeVariable['eslintImplicitGlobalSetting'];
+    readonly isTypeVariable?: boolean;
+    readonly isValueVariable?: boolean;
+    readonly name: string;
+    readonly writeable?: boolean;
+}
+/**
+ * An variable implicitly defined by the TS Lib
+ */
+declare class ImplicitLibVariable extends ESLintScopeVariable implements Variable {
+    /**
+     * `true` if the variable is valid in a type context, false otherwise
+     */
+    readonly isTypeVariable: boolean;
+    /**
+     * `true` if the variable is valid in a value context, false otherwise
+     */
+    readonly isValueVariable: boolean;
+    constructor(scope: Scope, { isTypeVariable, isValueVariable, name, writeable, eslintImplicitGlobalSetting, }: ImplicitLibVariableOptions);
+}
+export { ImplicitLibVariable, ImplicitLibVariableOptions };
+//# sourceMappingURL=ImplicitLibVariable.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..a9bc0c59601abd209c69f01abfdce9f4c10f0c35
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ImplicitLibVariable.d.ts","sourceRoot":"","sources":["../../src/variable/ImplicitLibVariable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,UAAU,0BAA0B;IAClC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,mBAAmB,CAAC,6BAA6B,CAAC,CAAC;IAC1F,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,cAAM,mBAAoB,SAAQ,mBAAoB,YAAW,QAAQ;IACvE;;OAEG;IACH,SAAgB,cAAc,EAAE,OAAO,CAAC;IAExC;;OAEG;IACH,SAAgB,eAAe,EAAE,OAAO,CAAC;gBAGvC,KAAK,EAAE,KAAK,EACZ,EACE,cAAc,EACd,eAAe,EACf,IAAI,EACJ,SAAS,EACT,2BAA2B,GAC5B,EAAE,0BAA0B;CAShC;AAED,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.js b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.js
new file mode 100644
index 0000000000000000000000000000000000000000..2f0a9e3d01722cb054dc8ee680d97cbf32cd6771
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.js
@@ -0,0 +1,18 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ImplicitLibVariable = void 0;
+const ESLintScopeVariable_1 = require("./ESLintScopeVariable");
+/**
+ * An variable implicitly defined by the TS Lib
+ */
+class ImplicitLibVariable extends ESLintScopeVariable_1.ESLintScopeVariable {
+    constructor(scope, { isTypeVariable, isValueVariable, name, writeable, eslintImplicitGlobalSetting, }) {
+        super(name, scope);
+        this.isTypeVariable = isTypeVariable !== null && isTypeVariable !== void 0 ? isTypeVariable : false;
+        this.isValueVariable = isValueVariable !== null && isValueVariable !== void 0 ? isValueVariable : false;
+        this.writeable = writeable !== null && writeable !== void 0 ? writeable : false;
+        this.eslintImplicitGlobalSetting = eslintImplicitGlobalSetting !== null && eslintImplicitGlobalSetting !== void 0 ? eslintImplicitGlobalSetting : 'readonly';
+    }
+}
+exports.ImplicitLibVariable = ImplicitLibVariable;
+//# sourceMappingURL=ImplicitLibVariable.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..7e62cbee25926b50623c7fb0480da5fcdd2ca1b3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ImplicitLibVariable.js","sourceRoot":"","sources":["../../src/variable/ImplicitLibVariable.ts"],"names":[],"mappings":";;;AAAA,+DAA4D;AAY5D;;GAEG;AACH,MAAM,mBAAoB,SAAQ,yCAAmB;IAWnD,YACE,KAAY,EACZ,EACE,cAAc,EACd,eAAe,EACf,IAAI,EACJ,SAAS,EACT,2BAA2B,GACA;QAE7B,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,KAAK,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,KAAK,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,KAAK,CAAC;QACpC,IAAI,CAAC,2BAA2B,GAC9B,2BAA2B,aAA3B,2BAA2B,cAA3B,2BAA2B,GAAI,UAAU,CAAC;IAC9C,CAAC;CACF;AAEQ,kDAAmB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..83754b17f89033ca6193c7699072affd8996f5a4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.d.ts
@@ -0,0 +1,18 @@
+import { VariableBase } from './VariableBase';
+/**
+ * A Variable represents a locally scoped identifier. These include arguments to functions.
+ */
+declare class Variable extends VariableBase {
+    /**
+     * `true` if the variable is valid in a type context, false otherwise
+     * @public
+     */
+    get isTypeVariable(): boolean;
+    /**
+     * `true` if the variable is valid in a value context, false otherwise
+     * @public
+     */
+    get isValueVariable(): boolean;
+}
+export { Variable };
+//# sourceMappingURL=Variable.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..9b56c4f4764635bb2f915bb8a80d9beee5b4701b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Variable.d.ts","sourceRoot":"","sources":["../../src/variable/Variable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;GAEG;AACH,cAAM,QAAS,SAAQ,YAAY;IACjC;;;OAGG;IACH,IAAW,cAAc,IAAI,OAAO,CAOnC;IAED;;;OAGG;IACH,IAAW,eAAe,IAAI,OAAO,CAOpC;CACF;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.js b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.js
new file mode 100644
index 0000000000000000000000000000000000000000..8b72550eece6c25e24b53051fd94eb60c0c759b4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.js
@@ -0,0 +1,33 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Variable = void 0;
+const VariableBase_1 = require("./VariableBase");
+/**
+ * A Variable represents a locally scoped identifier. These include arguments to functions.
+ */
+class Variable extends VariableBase_1.VariableBase {
+    /**
+     * `true` if the variable is valid in a type context, false otherwise
+     * @public
+     */
+    get isTypeVariable() {
+        if (this.defs.length === 0) {
+            // we don't statically know whether this is a type or a value
+            return true;
+        }
+        return this.defs.some(def => def.isTypeDefinition);
+    }
+    /**
+     * `true` if the variable is valid in a value context, false otherwise
+     * @public
+     */
+    get isValueVariable() {
+        if (this.defs.length === 0) {
+            // we don't statically know whether this is a type or a value
+            return true;
+        }
+        return this.defs.some(def => def.isVariableDefinition);
+    }
+}
+exports.Variable = Variable;
+//# sourceMappingURL=Variable.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..43c4b8c637df1b8c98059ab69b6fecc0b70be43d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Variable.js","sourceRoot":"","sources":["../../src/variable/Variable.ts"],"names":[],"mappings":";;;AAAA,iDAA8C;AAE9C;;GAEG;AACH,MAAM,QAAS,SAAQ,2BAAY;IACjC;;;OAGG;IACH,IAAW,cAAc;QACvB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B,6DAA6D;YAC7D,OAAO,IAAI,CAAC;SACb;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,IAAW,eAAe;QACxB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B,6DAA6D;YAC7D,OAAO,IAAI,CAAC;SACb;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACzD,CAAC;CACF;AAEQ,4BAAQ"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..983dcd048e106d48a70453d97f53725c52fa6edf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.d.ts
@@ -0,0 +1,44 @@
+import { TSESTree } from '@typescript-eslint/types';
+import { Definition } from '../definition';
+import { Reference } from '../referencer/Reference';
+import { Scope } from '../scope';
+declare class VariableBase {
+    /**
+     * A unique ID for this instance - primarily used to help debugging and testing
+     */
+    readonly $id: number;
+    /**
+     * The array of the definitions of this variable.
+     * @public
+     */
+    readonly defs: Definition[];
+    /**
+     * True if the variable is considered used for the purposes of `no-unused-vars`, false otherwise.
+     * @public
+     */
+    eslintUsed: boolean;
+    /**
+     * The array of `Identifier` nodes which define this variable.
+     * If this variable is redeclared, this array includes two or more nodes.
+     * @public
+     */
+    readonly identifiers: TSESTree.Identifier[];
+    /**
+     * The variable name, as given in the source code.
+     * @public
+     */
+    readonly name: string;
+    /**
+     * List of {@link Reference} of this variable (excluding parameter entries)  in its defining scope and all nested scopes.
+     * For defining occurrences only see {@link Variable#defs}.
+     * @public
+     */
+    readonly references: Reference[];
+    /**
+     * Reference to the enclosing Scope.
+     */
+    readonly scope: Scope;
+    constructor(name: string, scope: Scope);
+}
+export { VariableBase };
+//# sourceMappingURL=VariableBase.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..23304c96494bcb4fd194c7f5a61a6c1c9e9c2e62
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"VariableBase.d.ts","sourceRoot":"","sources":["../../src/variable/VariableBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAIjC,cAAM,YAAY;IAChB;;OAEG;IACH,SAAgB,GAAG,EAAE,MAAM,CAAe;IAE1C;;;OAGG;IACH,SAAgB,IAAI,EAAE,UAAU,EAAE,CAAM;IACxC;;;OAGG;IACI,UAAU,UAAS;IAC1B;;;;OAIG;IACH,SAAgB,WAAW,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAM;IACxD;;;OAGG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,SAAgB,UAAU,EAAE,SAAS,EAAE,CAAM;IAC7C;;OAEG;IACH,SAAgB,KAAK,EAAE,KAAK,CAAC;gBAEjB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAIvC;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.js b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.js
new file mode 100644
index 0000000000000000000000000000000000000000..706ab89908fc442eb08547015b195c039e285514
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.js
@@ -0,0 +1,39 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.VariableBase = void 0;
+const ID_1 = require("../ID");
+const generator = ID_1.createIdGenerator();
+class VariableBase {
+    constructor(name, scope) {
+        /**
+         * A unique ID for this instance - primarily used to help debugging and testing
+         */
+        this.$id = generator();
+        /**
+         * The array of the definitions of this variable.
+         * @public
+         */
+        this.defs = [];
+        /**
+         * True if the variable is considered used for the purposes of `no-unused-vars`, false otherwise.
+         * @public
+         */
+        this.eslintUsed = false;
+        /**
+         * The array of `Identifier` nodes which define this variable.
+         * If this variable is redeclared, this array includes two or more nodes.
+         * @public
+         */
+        this.identifiers = [];
+        /**
+         * List of {@link Reference} of this variable (excluding parameter entries)  in its defining scope and all nested scopes.
+         * For defining occurrences only see {@link Variable#defs}.
+         * @public
+         */
+        this.references = [];
+        this.name = name;
+        this.scope = scope;
+    }
+}
+exports.VariableBase = VariableBase;
+//# sourceMappingURL=VariableBase.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..457d60d66d873507a32755ab9924c5038101fab6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"VariableBase.js","sourceRoot":"","sources":["../../src/variable/VariableBase.ts"],"names":[],"mappings":";;;AAEA,8BAA0C;AAI1C,MAAM,SAAS,GAAG,sBAAiB,EAAE,CAAC;AAEtC,MAAM,YAAY;IAsChB,YAAY,IAAY,EAAE,KAAY;QArCtC;;WAEG;QACa,QAAG,GAAW,SAAS,EAAE,CAAC;QAE1C;;;WAGG;QACa,SAAI,GAAiB,EAAE,CAAC;QACxC;;;WAGG;QACI,eAAU,GAAG,KAAK,CAAC;QAC1B;;;;WAIG;QACa,gBAAW,GAA0B,EAAE,CAAC;QAMxD;;;;WAIG;QACa,eAAU,GAAgB,EAAE,CAAC;QAO3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAEQ,oCAAY"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/index.d.ts b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e62df98339ddc8b7ef6bfb5fa8f9c6419052533c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/index.d.ts
@@ -0,0 +1,4 @@
+export { ESLintScopeVariable } from './ESLintScopeVariable';
+export { ImplicitLibVariable, ImplicitLibVariableOptions, } from './ImplicitLibVariable';
+export { Variable } from './Variable';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/index.d.ts.map b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..4fdcff24c3c4e46bc06f3f22d0fdb892dcb5a743
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/variable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/index.js b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..1e36582b7c867284a481f3297ec729286cda4311
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/index.js
@@ -0,0 +1,10 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Variable = exports.ImplicitLibVariable = exports.ESLintScopeVariable = void 0;
+var ESLintScopeVariable_1 = require("./ESLintScopeVariable");
+Object.defineProperty(exports, "ESLintScopeVariable", { enumerable: true, get: function () { return ESLintScopeVariable_1.ESLintScopeVariable; } });
+var ImplicitLibVariable_1 = require("./ImplicitLibVariable");
+Object.defineProperty(exports, "ImplicitLibVariable", { enumerable: true, get: function () { return ImplicitLibVariable_1.ImplicitLibVariable; } });
+var Variable_1 = require("./Variable");
+Object.defineProperty(exports, "Variable", { enumerable: true, get: function () { return Variable_1.Variable; } });
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/dist/variable/index.js.map b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..4798d0e2796dffb4e9346ec7a2ba7a92e44a3f0a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/dist/variable/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/variable/index.ts"],"names":[],"mappings":";;;AAAA,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAC5B,6DAG+B;AAF7B,0HAAA,mBAAmB,OAAA;AAGrB,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/scope-manager/package.json b/server/node_modules/@typescript-eslint/scope-manager/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..6c004286eb484f99b283be282109a875154d95c9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/scope-manager/package.json
@@ -0,0 +1,97 @@
+{
+  "_from": "@typescript-eslint/scope-manager@4.11.0",
+  "_id": "@typescript-eslint/scope-manager@4.11.0",
+  "_inBundle": false,
+  "_integrity": "sha512-6VSTm/4vC2dHM3ySDW9Kl48en+yLNfVV6LECU8jodBHQOhO8adAVizaZ1fV0QGZnLQjQ/y0aBj5/KXPp2hBTjA==",
+  "_location": "/@typescript-eslint/scope-manager",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "@typescript-eslint/scope-manager@4.11.0",
+    "name": "@typescript-eslint/scope-manager",
+    "escapedName": "@typescript-eslint%2fscope-manager",
+    "scope": "@typescript-eslint",
+    "rawSpec": "4.11.0",
+    "saveSpec": null,
+    "fetchSpec": "4.11.0"
+  },
+  "_requiredBy": [
+    "/@typescript-eslint/eslint-plugin",
+    "/@typescript-eslint/experimental-utils",
+    "/@typescript-eslint/parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.11.0.tgz",
+  "_shasum": "2d906537db8a3a946721699e4fc0833810490254",
+  "_spec": "@typescript-eslint/scope-manager@4.11.0",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\@typescript-eslint\\eslint-plugin",
+  "bugs": {
+    "url": "https://github.com/typescript-eslint/typescript-eslint/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@typescript-eslint/types": "4.11.0",
+    "@typescript-eslint/visitor-keys": "4.11.0"
+  },
+  "deprecated": false,
+  "description": "TypeScript scope analyser for ESLint",
+  "devDependencies": {
+    "@types/glob": "*",
+    "@typescript-eslint/typescript-estree": "4.11.0",
+    "glob": "*",
+    "jest-specific-snapshot": "*",
+    "make-dir": "*",
+    "prettier": "*",
+    "pretty-format": "^26.4.2",
+    "rimraf": "*",
+    "typescript": "*"
+  },
+  "engines": {
+    "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+  },
+  "files": [
+    "dist",
+    "package.json",
+    "README.md",
+    "LICENSE"
+  ],
+  "funding": {
+    "type": "opencollective",
+    "url": "https://opencollective.com/typescript-eslint"
+  },
+  "gitHead": "e8f73e168a89ff9a84038e760a667b646ede5956",
+  "homepage": "https://github.com/typescript-eslint/typescript-eslint#readme",
+  "keywords": [
+    "eslint",
+    "typescript",
+    "estree"
+  ],
+  "license": "MIT",
+  "main": "dist/index.js",
+  "name": "@typescript-eslint/scope-manager",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/typescript-eslint/typescript-eslint.git",
+    "directory": "packages/scope-manager"
+  },
+  "scripts": {
+    "build": "tsc -b tsconfig.build.json",
+    "clean": "tsc -b tsconfig.build.json --clean",
+    "format": "prettier --write \"./**/*.{ts,js,json,md}\" --ignore-path ../../.prettierignore",
+    "generate:lib": "../../node_modules/.bin/ts-node --files --transpile-only tools/generate-lib.ts",
+    "lint": "eslint . --ext .js,.ts --ignore-path='../../.eslintignore'",
+    "postbuild": "downlevel-dts dist _ts3.4/dist",
+    "postclean": "rimraf dist",
+    "test": "jest --coverage",
+    "typecheck": "tsc -p tsconfig.json --noEmit"
+  },
+  "types": "dist/index.d.ts",
+  "typesVersions": {
+    "<3.8": {
+      "*": [
+        "_ts3.4/*"
+      ]
+    }
+  },
+  "version": "4.11.0"
+}
diff --git a/server/node_modules/@typescript-eslint/types/CHANGELOG.md b/server/node_modules/@typescript-eslint/types/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..a090630508398664105463f62586b297e1e5cff6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/CHANGELOG.md
@@ -0,0 +1,280 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [4.11.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.10.0...v4.11.0) (2020-12-21)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+# [4.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.9.1...v4.10.0) (2020-12-14)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+## [4.9.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.9.0...v4.9.1) (2020-12-07)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+# [4.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.2...v4.9.0) (2020-11-30)
+
+
+### Features
+
+* **eslint-plugin:** [no-unused-vars] fork the base rule ([#2768](https://github.com/typescript-eslint/typescript-eslint/issues/2768)) ([a8227a6](https://github.com/typescript-eslint/typescript-eslint/commit/a8227a6185dd24de4bfc7d766931643871155021)), closes [#2782](https://github.com/typescript-eslint/typescript-eslint/issues/2782) [#2714](https://github.com/typescript-eslint/typescript-eslint/issues/2714) [#2648](https://github.com/typescript-eslint/typescript-eslint/issues/2648)
+
+
+
+
+
+## [4.8.2](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.1...v4.8.2) (2020-11-23)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+## [4.8.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.0...v4.8.1) (2020-11-17)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+# [4.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.7.0...v4.8.0) (2020-11-16)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+# [4.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.6.1...v4.7.0) (2020-11-09)
+
+
+### Features
+
+* support TS4.1 features ([#2748](https://github.com/typescript-eslint/typescript-eslint/issues/2748)) ([2be354b](https://github.com/typescript-eslint/typescript-eslint/commit/2be354bb15f9013a2da1b13a0c0836e9ef057e16)), closes [#2583](https://github.com/typescript-eslint/typescript-eslint/issues/2583)
+
+
+
+
+
+## [4.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.6.0...v4.6.1) (2020-11-02)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+# [4.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.5.0...v4.6.0) (2020-10-26)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+# [4.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.4.1...v4.5.0) (2020-10-19)
+
+
+### Features
+
+* **typescript-estree:** add flag EXPERIMENTAL_useSourceOfProjectReferenceRedirect ([#2669](https://github.com/typescript-eslint/typescript-eslint/issues/2669)) ([90a5878](https://github.com/typescript-eslint/typescript-eslint/commit/90a587845088da1b205e4d7d77dbc3f9447b1c5a))
+
+
+
+
+
+## [4.4.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.4.0...v4.4.1) (2020-10-12)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+# [4.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.3.0...v4.4.0) (2020-10-05)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+# [4.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.2.0...v4.3.0) (2020-09-28)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+# [4.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.1.1...v4.2.0) (2020-09-21)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+## [4.1.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.1.0...v4.1.1) (2020-09-14)
+
+
+### Bug Fixes
+
+* **types:** artificial fix needed to trigger release ([b577daf](https://github.com/typescript-eslint/typescript-eslint/commit/b577daf27cd87870b6e095e4e995519f96d321dd))
+
+
+
+
+
+# [4.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.0.1...v4.1.0) (2020-09-07)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-unused-vars] correct detection of unused vars in a declared module with `export =` ([#2505](https://github.com/typescript-eslint/typescript-eslint/issues/2505)) ([3d07a99](https://github.com/typescript-eslint/typescript-eslint/commit/3d07a99faa0a5fc1b44acdb43ddbfc90a5105833))
+
+
+### Features
+
+* **scope-manager:** add support for JSX scope analysis ([#2498](https://github.com/typescript-eslint/typescript-eslint/issues/2498)) ([f887ab5](https://github.com/typescript-eslint/typescript-eslint/commit/f887ab51f58c1b3571f9a14832864bc0ca59623f)), closes [#2455](https://github.com/typescript-eslint/typescript-eslint/issues/2455) [#2477](https://github.com/typescript-eslint/typescript-eslint/issues/2477)
+
+
+
+
+
+## [4.0.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.0.0...v4.0.1) (2020-08-31)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+# [4.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.10.1...v4.0.0) (2020-08-31)
+
+## [Please see the release notes for v4.0.0](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v4.0.0)
+
+### Bug Fixes
+
+* correct decorator traversal for AssignmentPattern ([#2375](https://github.com/typescript-eslint/typescript-eslint/issues/2375)) ([d738fa4](https://github.com/typescript-eslint/typescript-eslint/commit/d738fa4eff0a5c4cfc9b30b1c0502f8d1e78d7b6))
+* **typescript-estree:** correct ChainExpression interaction with parentheses and non-nulls ([#2380](https://github.com/typescript-eslint/typescript-eslint/issues/2380)) ([762bc99](https://github.com/typescript-eslint/typescript-eslint/commit/762bc99584ede4d0b8099a743991e957aec86aa8))
+
+
+### Features
+
+* consume new scope analysis package ([#2039](https://github.com/typescript-eslint/typescript-eslint/issues/2039)) ([3be125d](https://github.com/typescript-eslint/typescript-eslint/commit/3be125d9bdbee1984ac6037874edf619213bd3d0))
+* support ESTree optional chaining representation ([#2308](https://github.com/typescript-eslint/typescript-eslint/issues/2308)) ([e9d2ab6](https://github.com/typescript-eslint/typescript-eslint/commit/e9d2ab638b6767700b52797e74b814ea059beaae))
+
+
+### BREAKING CHANGES
+
+* - Removed decorators property from several Nodes that could never semantically have them (FunctionDeclaration, TSEnumDeclaration, and TSInterfaceDeclaration)
+- Removed AST_NODE_TYPES.Import. This is a minor breaking change as the node type that used this was removed ages ago.
+
+
+
+
+
+## [3.10.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.10.0...v3.10.1) (2020-08-25)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+# [3.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.9.1...v3.10.0) (2020-08-24)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+## [3.9.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.9.0...v3.9.1) (2020-08-17)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+# [3.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.8.0...v3.9.0) (2020-08-10)
+
+
+### Features
+
+* **typescript-estree:** support TSv4 labelled tuple members ([#2378](https://github.com/typescript-eslint/typescript-eslint/issues/2378)) ([00d84ff](https://github.com/typescript-eslint/typescript-eslint/commit/00d84ffbcbe9d0ec98bdb2f2ce59959a27ce4dbe))
+
+
+
+
+
+# [3.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.7.1...v3.8.0) (2020-08-03)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+## [3.7.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.7.0...v3.7.1) (2020-07-27)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+# [3.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.6.1...v3.7.0) (2020-07-20)
+
+
+### Features
+
+* **eslint-plugin:** [no-empty-function] add `decoratedFunctions` option ([#2295](https://github.com/typescript-eslint/typescript-eslint/issues/2295)) ([88f08f4](https://github.com/typescript-eslint/typescript-eslint/commit/88f08f410760f58fdc2de58ecd9dab9610821642))
+* **typescript-estree:** support short-circuiting assignment operators ([#2307](https://github.com/typescript-eslint/typescript-eslint/issues/2307)) ([2c90d9f](https://github.com/typescript-eslint/typescript-eslint/commit/2c90d9fa3aa5ebd7db697dddb7762bca2dd0e06b))
+
+
+
+
+
+## [3.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.6.0...v3.6.1) (2020-07-13)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+# [3.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.5.0...v3.6.0) (2020-07-06)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
+# [3.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.4.0...v3.5.0) (2020-06-29)
+
+
+### Features
+
+* add package scope-manager ([#1939](https://github.com/typescript-eslint/typescript-eslint/issues/1939)) ([682eb7e](https://github.com/typescript-eslint/typescript-eslint/commit/682eb7e009c3f22a542882dfd3602196a60d2a1e))
+* split types into their own package ([#2229](https://github.com/typescript-eslint/typescript-eslint/issues/2229)) ([5f45918](https://github.com/typescript-eslint/typescript-eslint/commit/5f4591886f3438329fbf2229b03ac66174334a24))
diff --git a/server/node_modules/@typescript-eslint/types/LICENSE b/server/node_modules/@typescript-eslint/types/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..7e7370143b26b5e2a826528507c7cc8df2d2eacf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 TypeScript ESLint and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/server/node_modules/@typescript-eslint/types/README.md b/server/node_modules/@typescript-eslint/types/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..5c91f1687d22fd89fe86b683e8470e4cf120479f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/README.md
@@ -0,0 +1,17 @@
+<h1 align="center">TypeScript-ESTree Types</h1>
+
+<p align="center">
+    <img src="https://github.com/typescript-eslint/typescript-eslint/workflows/CI/badge.svg" alt="CI" />
+    <a href="https://www.npmjs.com/package/@typescript-eslint/types"><img src="https://img.shields.io/npm/v/@typescript-eslint/types.svg?style=flat-square" alt="NPM Version" /></a>
+    <a href="https://www.npmjs.com/package/@typescript-eslint/types"><img src="https://img.shields.io/npm/dm/@typescript-eslint/types.svg?style=flat-square" alt="NPM Downloads" /></a>
+</p>
+
+This package exists to help us reduce cycles and provide lighter-weight packages at runtime.
+You probably don't want to use it directly.
+
+If you're building an ESLint plugin, consider using [`@typescript-eslint/experimental-utils`](../experimental-utils).
+If you're parsing TypeScript code, consider using [`@typescript-eslint/typescript-estree`](../typescript-estree).
+
+## Contributing
+
+[See the contributing guide here](../../CONTRIBUTING.md)
diff --git a/server/node_modules/@typescript-eslint/types/dist/ast-node-types.d.ts b/server/node_modules/@typescript-eslint/types/dist/ast-node-types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d05cb0099c5c0897f24c9d921ccb4ce0701b8b30
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/ast-node-types.d.ts
@@ -0,0 +1,166 @@
+declare enum AST_NODE_TYPES {
+    ArrayExpression = "ArrayExpression",
+    ArrayPattern = "ArrayPattern",
+    ArrowFunctionExpression = "ArrowFunctionExpression",
+    AssignmentExpression = "AssignmentExpression",
+    AssignmentPattern = "AssignmentPattern",
+    AwaitExpression = "AwaitExpression",
+    BinaryExpression = "BinaryExpression",
+    BlockStatement = "BlockStatement",
+    BreakStatement = "BreakStatement",
+    CallExpression = "CallExpression",
+    CatchClause = "CatchClause",
+    ChainExpression = "ChainExpression",
+    ClassBody = "ClassBody",
+    ClassDeclaration = "ClassDeclaration",
+    ClassExpression = "ClassExpression",
+    ClassProperty = "ClassProperty",
+    ConditionalExpression = "ConditionalExpression",
+    ContinueStatement = "ContinueStatement",
+    DebuggerStatement = "DebuggerStatement",
+    Decorator = "Decorator",
+    DoWhileStatement = "DoWhileStatement",
+    EmptyStatement = "EmptyStatement",
+    ExportAllDeclaration = "ExportAllDeclaration",
+    ExportDefaultDeclaration = "ExportDefaultDeclaration",
+    ExportNamedDeclaration = "ExportNamedDeclaration",
+    ExportSpecifier = "ExportSpecifier",
+    ExpressionStatement = "ExpressionStatement",
+    ForInStatement = "ForInStatement",
+    ForOfStatement = "ForOfStatement",
+    ForStatement = "ForStatement",
+    FunctionDeclaration = "FunctionDeclaration",
+    FunctionExpression = "FunctionExpression",
+    Identifier = "Identifier",
+    IfStatement = "IfStatement",
+    ImportDeclaration = "ImportDeclaration",
+    ImportDefaultSpecifier = "ImportDefaultSpecifier",
+    ImportExpression = "ImportExpression",
+    ImportNamespaceSpecifier = "ImportNamespaceSpecifier",
+    ImportSpecifier = "ImportSpecifier",
+    JSXAttribute = "JSXAttribute",
+    JSXClosingElement = "JSXClosingElement",
+    JSXClosingFragment = "JSXClosingFragment",
+    JSXElement = "JSXElement",
+    JSXEmptyExpression = "JSXEmptyExpression",
+    JSXExpressionContainer = "JSXExpressionContainer",
+    JSXFragment = "JSXFragment",
+    JSXIdentifier = "JSXIdentifier",
+    JSXMemberExpression = "JSXMemberExpression",
+    JSXOpeningElement = "JSXOpeningElement",
+    JSXOpeningFragment = "JSXOpeningFragment",
+    JSXSpreadAttribute = "JSXSpreadAttribute",
+    JSXSpreadChild = "JSXSpreadChild",
+    JSXText = "JSXText",
+    LabeledStatement = "LabeledStatement",
+    Literal = "Literal",
+    LogicalExpression = "LogicalExpression",
+    MemberExpression = "MemberExpression",
+    MetaProperty = "MetaProperty",
+    MethodDefinition = "MethodDefinition",
+    NewExpression = "NewExpression",
+    ObjectExpression = "ObjectExpression",
+    ObjectPattern = "ObjectPattern",
+    Program = "Program",
+    Property = "Property",
+    RestElement = "RestElement",
+    ReturnStatement = "ReturnStatement",
+    SequenceExpression = "SequenceExpression",
+    SpreadElement = "SpreadElement",
+    Super = "Super",
+    SwitchCase = "SwitchCase",
+    SwitchStatement = "SwitchStatement",
+    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",
+    /**
+     * TS-prefixed nodes
+     */
+    TSAbstractClassProperty = "TSAbstractClassProperty",
+    TSAbstractKeyword = "TSAbstractKeyword",
+    TSAbstractMethodDefinition = "TSAbstractMethodDefinition",
+    TSAnyKeyword = "TSAnyKeyword",
+    TSArrayType = "TSArrayType",
+    TSAsExpression = "TSAsExpression",
+    TSAsyncKeyword = "TSAsyncKeyword",
+    TSBigIntKeyword = "TSBigIntKeyword",
+    TSBooleanKeyword = "TSBooleanKeyword",
+    TSCallSignatureDeclaration = "TSCallSignatureDeclaration",
+    TSClassImplements = "TSClassImplements",
+    TSConditionalType = "TSConditionalType",
+    TSConstructorType = "TSConstructorType",
+    TSConstructSignatureDeclaration = "TSConstructSignatureDeclaration",
+    TSDeclareFunction = "TSDeclareFunction",
+    TSDeclareKeyword = "TSDeclareKeyword",
+    TSEmptyBodyFunctionExpression = "TSEmptyBodyFunctionExpression",
+    TSEnumDeclaration = "TSEnumDeclaration",
+    TSEnumMember = "TSEnumMember",
+    TSExportAssignment = "TSExportAssignment",
+    TSExportKeyword = "TSExportKeyword",
+    TSExternalModuleReference = "TSExternalModuleReference",
+    TSFunctionType = "TSFunctionType",
+    TSImportEqualsDeclaration = "TSImportEqualsDeclaration",
+    TSImportType = "TSImportType",
+    TSIndexedAccessType = "TSIndexedAccessType",
+    TSIndexSignature = "TSIndexSignature",
+    TSInferType = "TSInferType",
+    TSInterfaceBody = "TSInterfaceBody",
+    TSInterfaceDeclaration = "TSInterfaceDeclaration",
+    TSInterfaceHeritage = "TSInterfaceHeritage",
+    TSIntersectionType = "TSIntersectionType",
+    TSLiteralType = "TSLiteralType",
+    TSMappedType = "TSMappedType",
+    TSMethodSignature = "TSMethodSignature",
+    TSModuleBlock = "TSModuleBlock",
+    TSModuleDeclaration = "TSModuleDeclaration",
+    TSNamedTupleMember = "TSNamedTupleMember",
+    TSNamespaceExportDeclaration = "TSNamespaceExportDeclaration",
+    TSNeverKeyword = "TSNeverKeyword",
+    TSNonNullExpression = "TSNonNullExpression",
+    TSNullKeyword = "TSNullKeyword",
+    TSNumberKeyword = "TSNumberKeyword",
+    TSObjectKeyword = "TSObjectKeyword",
+    TSOptionalType = "TSOptionalType",
+    TSParameterProperty = "TSParameterProperty",
+    TSParenthesizedType = "TSParenthesizedType",
+    TSPrivateKeyword = "TSPrivateKeyword",
+    TSPropertySignature = "TSPropertySignature",
+    TSProtectedKeyword = "TSProtectedKeyword",
+    TSPublicKeyword = "TSPublicKeyword",
+    TSQualifiedName = "TSQualifiedName",
+    TSReadonlyKeyword = "TSReadonlyKeyword",
+    TSRestType = "TSRestType",
+    TSStaticKeyword = "TSStaticKeyword",
+    TSStringKeyword = "TSStringKeyword",
+    TSSymbolKeyword = "TSSymbolKeyword",
+    TSTemplateLiteralType = "TSTemplateLiteralType",
+    TSThisType = "TSThisType",
+    TSTupleType = "TSTupleType",
+    TSTypeAliasDeclaration = "TSTypeAliasDeclaration",
+    TSTypeAnnotation = "TSTypeAnnotation",
+    TSTypeAssertion = "TSTypeAssertion",
+    TSTypeLiteral = "TSTypeLiteral",
+    TSTypeOperator = "TSTypeOperator",
+    TSTypeParameter = "TSTypeParameter",
+    TSTypeParameterDeclaration = "TSTypeParameterDeclaration",
+    TSTypeParameterInstantiation = "TSTypeParameterInstantiation",
+    TSTypePredicate = "TSTypePredicate",
+    TSTypeQuery = "TSTypeQuery",
+    TSTypeReference = "TSTypeReference",
+    TSUndefinedKeyword = "TSUndefinedKeyword",
+    TSUnionType = "TSUnionType",
+    TSUnknownKeyword = "TSUnknownKeyword",
+    TSVoidKeyword = "TSVoidKeyword"
+}
+export { AST_NODE_TYPES };
+//# sourceMappingURL=ast-node-types.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/ast-node-types.d.ts.map b/server/node_modules/@typescript-eslint/types/dist/ast-node-types.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..49d0def0464c72f7a10109ca78e4a0b65d27b8b1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/ast-node-types.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ast-node-types.d.ts","sourceRoot":"","sources":["../src/ast-node-types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/ast-node-types.js b/server/node_modules/@typescript-eslint/types/dist/ast-node-types.js
new file mode 100644
index 0000000000000000000000000000000000000000..b1dd24061978bb1c6d5a50457cee9817e72c1e39
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/ast-node-types.js
@@ -0,0 +1,170 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.AST_NODE_TYPES = void 0;
+var AST_NODE_TYPES;
+(function (AST_NODE_TYPES) {
+    AST_NODE_TYPES["ArrayExpression"] = "ArrayExpression";
+    AST_NODE_TYPES["ArrayPattern"] = "ArrayPattern";
+    AST_NODE_TYPES["ArrowFunctionExpression"] = "ArrowFunctionExpression";
+    AST_NODE_TYPES["AssignmentExpression"] = "AssignmentExpression";
+    AST_NODE_TYPES["AssignmentPattern"] = "AssignmentPattern";
+    AST_NODE_TYPES["AwaitExpression"] = "AwaitExpression";
+    AST_NODE_TYPES["BinaryExpression"] = "BinaryExpression";
+    AST_NODE_TYPES["BlockStatement"] = "BlockStatement";
+    AST_NODE_TYPES["BreakStatement"] = "BreakStatement";
+    AST_NODE_TYPES["CallExpression"] = "CallExpression";
+    AST_NODE_TYPES["CatchClause"] = "CatchClause";
+    AST_NODE_TYPES["ChainExpression"] = "ChainExpression";
+    AST_NODE_TYPES["ClassBody"] = "ClassBody";
+    AST_NODE_TYPES["ClassDeclaration"] = "ClassDeclaration";
+    AST_NODE_TYPES["ClassExpression"] = "ClassExpression";
+    AST_NODE_TYPES["ClassProperty"] = "ClassProperty";
+    AST_NODE_TYPES["ConditionalExpression"] = "ConditionalExpression";
+    AST_NODE_TYPES["ContinueStatement"] = "ContinueStatement";
+    AST_NODE_TYPES["DebuggerStatement"] = "DebuggerStatement";
+    AST_NODE_TYPES["Decorator"] = "Decorator";
+    AST_NODE_TYPES["DoWhileStatement"] = "DoWhileStatement";
+    AST_NODE_TYPES["EmptyStatement"] = "EmptyStatement";
+    AST_NODE_TYPES["ExportAllDeclaration"] = "ExportAllDeclaration";
+    AST_NODE_TYPES["ExportDefaultDeclaration"] = "ExportDefaultDeclaration";
+    AST_NODE_TYPES["ExportNamedDeclaration"] = "ExportNamedDeclaration";
+    AST_NODE_TYPES["ExportSpecifier"] = "ExportSpecifier";
+    AST_NODE_TYPES["ExpressionStatement"] = "ExpressionStatement";
+    AST_NODE_TYPES["ForInStatement"] = "ForInStatement";
+    AST_NODE_TYPES["ForOfStatement"] = "ForOfStatement";
+    AST_NODE_TYPES["ForStatement"] = "ForStatement";
+    AST_NODE_TYPES["FunctionDeclaration"] = "FunctionDeclaration";
+    AST_NODE_TYPES["FunctionExpression"] = "FunctionExpression";
+    AST_NODE_TYPES["Identifier"] = "Identifier";
+    AST_NODE_TYPES["IfStatement"] = "IfStatement";
+    AST_NODE_TYPES["ImportDeclaration"] = "ImportDeclaration";
+    AST_NODE_TYPES["ImportDefaultSpecifier"] = "ImportDefaultSpecifier";
+    AST_NODE_TYPES["ImportExpression"] = "ImportExpression";
+    AST_NODE_TYPES["ImportNamespaceSpecifier"] = "ImportNamespaceSpecifier";
+    AST_NODE_TYPES["ImportSpecifier"] = "ImportSpecifier";
+    AST_NODE_TYPES["JSXAttribute"] = "JSXAttribute";
+    AST_NODE_TYPES["JSXClosingElement"] = "JSXClosingElement";
+    AST_NODE_TYPES["JSXClosingFragment"] = "JSXClosingFragment";
+    AST_NODE_TYPES["JSXElement"] = "JSXElement";
+    AST_NODE_TYPES["JSXEmptyExpression"] = "JSXEmptyExpression";
+    AST_NODE_TYPES["JSXExpressionContainer"] = "JSXExpressionContainer";
+    AST_NODE_TYPES["JSXFragment"] = "JSXFragment";
+    AST_NODE_TYPES["JSXIdentifier"] = "JSXIdentifier";
+    AST_NODE_TYPES["JSXMemberExpression"] = "JSXMemberExpression";
+    AST_NODE_TYPES["JSXOpeningElement"] = "JSXOpeningElement";
+    AST_NODE_TYPES["JSXOpeningFragment"] = "JSXOpeningFragment";
+    AST_NODE_TYPES["JSXSpreadAttribute"] = "JSXSpreadAttribute";
+    AST_NODE_TYPES["JSXSpreadChild"] = "JSXSpreadChild";
+    AST_NODE_TYPES["JSXText"] = "JSXText";
+    AST_NODE_TYPES["LabeledStatement"] = "LabeledStatement";
+    AST_NODE_TYPES["Literal"] = "Literal";
+    AST_NODE_TYPES["LogicalExpression"] = "LogicalExpression";
+    AST_NODE_TYPES["MemberExpression"] = "MemberExpression";
+    AST_NODE_TYPES["MetaProperty"] = "MetaProperty";
+    AST_NODE_TYPES["MethodDefinition"] = "MethodDefinition";
+    AST_NODE_TYPES["NewExpression"] = "NewExpression";
+    AST_NODE_TYPES["ObjectExpression"] = "ObjectExpression";
+    AST_NODE_TYPES["ObjectPattern"] = "ObjectPattern";
+    AST_NODE_TYPES["Program"] = "Program";
+    AST_NODE_TYPES["Property"] = "Property";
+    AST_NODE_TYPES["RestElement"] = "RestElement";
+    AST_NODE_TYPES["ReturnStatement"] = "ReturnStatement";
+    AST_NODE_TYPES["SequenceExpression"] = "SequenceExpression";
+    AST_NODE_TYPES["SpreadElement"] = "SpreadElement";
+    AST_NODE_TYPES["Super"] = "Super";
+    AST_NODE_TYPES["SwitchCase"] = "SwitchCase";
+    AST_NODE_TYPES["SwitchStatement"] = "SwitchStatement";
+    AST_NODE_TYPES["TaggedTemplateExpression"] = "TaggedTemplateExpression";
+    AST_NODE_TYPES["TemplateElement"] = "TemplateElement";
+    AST_NODE_TYPES["TemplateLiteral"] = "TemplateLiteral";
+    AST_NODE_TYPES["ThisExpression"] = "ThisExpression";
+    AST_NODE_TYPES["ThrowStatement"] = "ThrowStatement";
+    AST_NODE_TYPES["TryStatement"] = "TryStatement";
+    AST_NODE_TYPES["UnaryExpression"] = "UnaryExpression";
+    AST_NODE_TYPES["UpdateExpression"] = "UpdateExpression";
+    AST_NODE_TYPES["VariableDeclaration"] = "VariableDeclaration";
+    AST_NODE_TYPES["VariableDeclarator"] = "VariableDeclarator";
+    AST_NODE_TYPES["WhileStatement"] = "WhileStatement";
+    AST_NODE_TYPES["WithStatement"] = "WithStatement";
+    AST_NODE_TYPES["YieldExpression"] = "YieldExpression";
+    /**
+     * TS-prefixed nodes
+     */
+    AST_NODE_TYPES["TSAbstractClassProperty"] = "TSAbstractClassProperty";
+    AST_NODE_TYPES["TSAbstractKeyword"] = "TSAbstractKeyword";
+    AST_NODE_TYPES["TSAbstractMethodDefinition"] = "TSAbstractMethodDefinition";
+    AST_NODE_TYPES["TSAnyKeyword"] = "TSAnyKeyword";
+    AST_NODE_TYPES["TSArrayType"] = "TSArrayType";
+    AST_NODE_TYPES["TSAsExpression"] = "TSAsExpression";
+    AST_NODE_TYPES["TSAsyncKeyword"] = "TSAsyncKeyword";
+    AST_NODE_TYPES["TSBigIntKeyword"] = "TSBigIntKeyword";
+    AST_NODE_TYPES["TSBooleanKeyword"] = "TSBooleanKeyword";
+    AST_NODE_TYPES["TSCallSignatureDeclaration"] = "TSCallSignatureDeclaration";
+    AST_NODE_TYPES["TSClassImplements"] = "TSClassImplements";
+    AST_NODE_TYPES["TSConditionalType"] = "TSConditionalType";
+    AST_NODE_TYPES["TSConstructorType"] = "TSConstructorType";
+    AST_NODE_TYPES["TSConstructSignatureDeclaration"] = "TSConstructSignatureDeclaration";
+    AST_NODE_TYPES["TSDeclareFunction"] = "TSDeclareFunction";
+    AST_NODE_TYPES["TSDeclareKeyword"] = "TSDeclareKeyword";
+    AST_NODE_TYPES["TSEmptyBodyFunctionExpression"] = "TSEmptyBodyFunctionExpression";
+    AST_NODE_TYPES["TSEnumDeclaration"] = "TSEnumDeclaration";
+    AST_NODE_TYPES["TSEnumMember"] = "TSEnumMember";
+    AST_NODE_TYPES["TSExportAssignment"] = "TSExportAssignment";
+    AST_NODE_TYPES["TSExportKeyword"] = "TSExportKeyword";
+    AST_NODE_TYPES["TSExternalModuleReference"] = "TSExternalModuleReference";
+    AST_NODE_TYPES["TSFunctionType"] = "TSFunctionType";
+    AST_NODE_TYPES["TSImportEqualsDeclaration"] = "TSImportEqualsDeclaration";
+    AST_NODE_TYPES["TSImportType"] = "TSImportType";
+    AST_NODE_TYPES["TSIndexedAccessType"] = "TSIndexedAccessType";
+    AST_NODE_TYPES["TSIndexSignature"] = "TSIndexSignature";
+    AST_NODE_TYPES["TSInferType"] = "TSInferType";
+    AST_NODE_TYPES["TSInterfaceBody"] = "TSInterfaceBody";
+    AST_NODE_TYPES["TSInterfaceDeclaration"] = "TSInterfaceDeclaration";
+    AST_NODE_TYPES["TSInterfaceHeritage"] = "TSInterfaceHeritage";
+    AST_NODE_TYPES["TSIntersectionType"] = "TSIntersectionType";
+    AST_NODE_TYPES["TSLiteralType"] = "TSLiteralType";
+    AST_NODE_TYPES["TSMappedType"] = "TSMappedType";
+    AST_NODE_TYPES["TSMethodSignature"] = "TSMethodSignature";
+    AST_NODE_TYPES["TSModuleBlock"] = "TSModuleBlock";
+    AST_NODE_TYPES["TSModuleDeclaration"] = "TSModuleDeclaration";
+    AST_NODE_TYPES["TSNamedTupleMember"] = "TSNamedTupleMember";
+    AST_NODE_TYPES["TSNamespaceExportDeclaration"] = "TSNamespaceExportDeclaration";
+    AST_NODE_TYPES["TSNeverKeyword"] = "TSNeverKeyword";
+    AST_NODE_TYPES["TSNonNullExpression"] = "TSNonNullExpression";
+    AST_NODE_TYPES["TSNullKeyword"] = "TSNullKeyword";
+    AST_NODE_TYPES["TSNumberKeyword"] = "TSNumberKeyword";
+    AST_NODE_TYPES["TSObjectKeyword"] = "TSObjectKeyword";
+    AST_NODE_TYPES["TSOptionalType"] = "TSOptionalType";
+    AST_NODE_TYPES["TSParameterProperty"] = "TSParameterProperty";
+    AST_NODE_TYPES["TSParenthesizedType"] = "TSParenthesizedType";
+    AST_NODE_TYPES["TSPrivateKeyword"] = "TSPrivateKeyword";
+    AST_NODE_TYPES["TSPropertySignature"] = "TSPropertySignature";
+    AST_NODE_TYPES["TSProtectedKeyword"] = "TSProtectedKeyword";
+    AST_NODE_TYPES["TSPublicKeyword"] = "TSPublicKeyword";
+    AST_NODE_TYPES["TSQualifiedName"] = "TSQualifiedName";
+    AST_NODE_TYPES["TSReadonlyKeyword"] = "TSReadonlyKeyword";
+    AST_NODE_TYPES["TSRestType"] = "TSRestType";
+    AST_NODE_TYPES["TSStaticKeyword"] = "TSStaticKeyword";
+    AST_NODE_TYPES["TSStringKeyword"] = "TSStringKeyword";
+    AST_NODE_TYPES["TSSymbolKeyword"] = "TSSymbolKeyword";
+    AST_NODE_TYPES["TSTemplateLiteralType"] = "TSTemplateLiteralType";
+    AST_NODE_TYPES["TSThisType"] = "TSThisType";
+    AST_NODE_TYPES["TSTupleType"] = "TSTupleType";
+    AST_NODE_TYPES["TSTypeAliasDeclaration"] = "TSTypeAliasDeclaration";
+    AST_NODE_TYPES["TSTypeAnnotation"] = "TSTypeAnnotation";
+    AST_NODE_TYPES["TSTypeAssertion"] = "TSTypeAssertion";
+    AST_NODE_TYPES["TSTypeLiteral"] = "TSTypeLiteral";
+    AST_NODE_TYPES["TSTypeOperator"] = "TSTypeOperator";
+    AST_NODE_TYPES["TSTypeParameter"] = "TSTypeParameter";
+    AST_NODE_TYPES["TSTypeParameterDeclaration"] = "TSTypeParameterDeclaration";
+    AST_NODE_TYPES["TSTypeParameterInstantiation"] = "TSTypeParameterInstantiation";
+    AST_NODE_TYPES["TSTypePredicate"] = "TSTypePredicate";
+    AST_NODE_TYPES["TSTypeQuery"] = "TSTypeQuery";
+    AST_NODE_TYPES["TSTypeReference"] = "TSTypeReference";
+    AST_NODE_TYPES["TSUndefinedKeyword"] = "TSUndefinedKeyword";
+    AST_NODE_TYPES["TSUnionType"] = "TSUnionType";
+    AST_NODE_TYPES["TSUnknownKeyword"] = "TSUnknownKeyword";
+    AST_NODE_TYPES["TSVoidKeyword"] = "TSVoidKeyword";
+})(AST_NODE_TYPES || (AST_NODE_TYPES = {}));
+exports.AST_NODE_TYPES = AST_NODE_TYPES;
+//# sourceMappingURL=ast-node-types.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/ast-node-types.js.map b/server/node_modules/@typescript-eslint/types/dist/ast-node-types.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..feb6841203e02af99c5b7c710e9d17883e32c7a3
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/ast-node-types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ast-node-types.js","sourceRoot":"","sources":["../src/ast-node-types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/ast-token-types.d.ts b/server/node_modules/@typescript-eslint/types/dist/ast-token-types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6536628f2f31d3ec14425edcd6cbde97557e8c45
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/ast-token-types.d.ts
@@ -0,0 +1,17 @@
+declare enum AST_TOKEN_TYPES {
+    Boolean = "Boolean",
+    Identifier = "Identifier",
+    JSXIdentifier = "JSXIdentifier",
+    JSXText = "JSXText",
+    Keyword = "Keyword",
+    Null = "Null",
+    Numeric = "Numeric",
+    Punctuator = "Punctuator",
+    RegularExpression = "RegularExpression",
+    String = "String",
+    Template = "Template",
+    Block = "Block",
+    Line = "Line"
+}
+export { AST_TOKEN_TYPES };
+//# sourceMappingURL=ast-token-types.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/ast-token-types.d.ts.map b/server/node_modules/@typescript-eslint/types/dist/ast-token-types.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..46cc6f7b0733745cfa3744c894fdbc26b8880f67
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/ast-token-types.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ast-token-types.d.ts","sourceRoot":"","sources":["../src/ast-token-types.ts"],"names":[],"mappings":"AAAA,aAAK,eAAe;IAClB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,iBAAiB,sBAAsB;IACvC,MAAM,WAAW;IACjB,QAAQ,aAAa;IAGrB,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/ast-token-types.js b/server/node_modules/@typescript-eslint/types/dist/ast-token-types.js
new file mode 100644
index 0000000000000000000000000000000000000000..4a4bc4ad0b9ae48afec73d30ae78362770642ef5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/ast-token-types.js
@@ -0,0 +1,22 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.AST_TOKEN_TYPES = void 0;
+var AST_TOKEN_TYPES;
+(function (AST_TOKEN_TYPES) {
+    AST_TOKEN_TYPES["Boolean"] = "Boolean";
+    AST_TOKEN_TYPES["Identifier"] = "Identifier";
+    AST_TOKEN_TYPES["JSXIdentifier"] = "JSXIdentifier";
+    AST_TOKEN_TYPES["JSXText"] = "JSXText";
+    AST_TOKEN_TYPES["Keyword"] = "Keyword";
+    AST_TOKEN_TYPES["Null"] = "Null";
+    AST_TOKEN_TYPES["Numeric"] = "Numeric";
+    AST_TOKEN_TYPES["Punctuator"] = "Punctuator";
+    AST_TOKEN_TYPES["RegularExpression"] = "RegularExpression";
+    AST_TOKEN_TYPES["String"] = "String";
+    AST_TOKEN_TYPES["Template"] = "Template";
+    // comment types
+    AST_TOKEN_TYPES["Block"] = "Block";
+    AST_TOKEN_TYPES["Line"] = "Line";
+})(AST_TOKEN_TYPES || (AST_TOKEN_TYPES = {}));
+exports.AST_TOKEN_TYPES = AST_TOKEN_TYPES;
+//# sourceMappingURL=ast-token-types.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/ast-token-types.js.map b/server/node_modules/@typescript-eslint/types/dist/ast-token-types.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..10b2fa5f2413764f9f0af07bd0424bdd4aee1ecc
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/ast-token-types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ast-token-types.js","sourceRoot":"","sources":["../src/ast-token-types.ts"],"names":[],"mappings":";;;AAAA,IAAK,eAgBJ;AAhBD,WAAK,eAAe;IAClB,sCAAmB,CAAA;IACnB,4CAAyB,CAAA;IACzB,kDAA+B,CAAA;IAC/B,sCAAmB,CAAA;IACnB,sCAAmB,CAAA;IACnB,gCAAa,CAAA;IACb,sCAAmB,CAAA;IACnB,4CAAyB,CAAA;IACzB,0DAAuC,CAAA;IACvC,oCAAiB,CAAA;IACjB,wCAAqB,CAAA;IAErB,gBAAgB;IAChB,kCAAe,CAAA;IACf,gCAAa,CAAA;AACf,CAAC,EAhBI,eAAe,KAAf,eAAe,QAgBnB;AAEQ,0CAAe"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/index.d.ts b/server/node_modules/@typescript-eslint/types/dist/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..47723d0a3776554dfb086c38dbdf1e714e5b3b0c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/index.d.ts
@@ -0,0 +1,6 @@
+export { AST_NODE_TYPES } from './ast-node-types';
+export { AST_TOKEN_TYPES } from './ast-token-types';
+export * from './lib';
+export * from './parser-options';
+export * as TSESTree from './ts-estree';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/index.d.ts.map b/server/node_modules/@typescript-eslint/types/dist/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..158476b438ac3283631ec6793bccbea8330b299a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/index.js b/server/node_modules/@typescript-eslint/types/dist/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..4cbbf93f03c57d9e9f4b11c9cb43f522ae7793ff
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/index.js
@@ -0,0 +1,33 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TSESTree = exports.AST_TOKEN_TYPES = exports.AST_NODE_TYPES = void 0;
+var ast_node_types_1 = require("./ast-node-types");
+Object.defineProperty(exports, "AST_NODE_TYPES", { enumerable: true, get: function () { return ast_node_types_1.AST_NODE_TYPES; } });
+var ast_token_types_1 = require("./ast-token-types");
+Object.defineProperty(exports, "AST_TOKEN_TYPES", { enumerable: true, get: function () { return ast_token_types_1.AST_TOKEN_TYPES; } });
+__exportStar(require("./lib"), exports);
+__exportStar(require("./parser-options"), exports);
+exports.TSESTree = __importStar(require("./ts-estree"));
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/index.js.map b/server/node_modules/@typescript-eslint/types/dist/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..3fb730581c41acb26cd914ec5d93ad1b3c41963d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,wCAAsB;AACtB,mDAAiC;AACjC,wDAAwC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/lib.d.ts b/server/node_modules/@typescript-eslint/types/dist/lib.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..799aa0399855021ff270f8b01154a979f1b0a10b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/lib.d.ts
@@ -0,0 +1,3 @@
+declare type Lib = 'es5' | 'es6' | 'es2015' | 'es7' | 'es2016' | 'es2017' | 'es2018' | 'es2019' | 'es2020' | 'esnext' | 'dom' | 'dom.iterable' | 'webworker' | 'webworker.importscripts' | 'webworker.iterable' | 'scripthost' | 'es2015.core' | 'es2015.collection' | 'es2015.generator' | 'es2015.iterable' | 'es2015.promise' | 'es2015.proxy' | 'es2015.reflect' | 'es2015.symbol' | 'es2015.symbol.wellknown' | 'es2016.array.include' | 'es2017.object' | 'es2017.sharedmemory' | 'es2017.string' | 'es2017.intl' | 'es2017.typedarrays' | 'es2018.asyncgenerator' | 'es2018.asynciterable' | 'es2018.intl' | 'es2018.promise' | 'es2018.regexp' | 'es2019.array' | 'es2019.object' | 'es2019.string' | 'es2019.symbol' | 'es2020.bigint' | 'es2020.promise' | 'es2020.sharedmemory' | 'es2020.string' | 'es2020.symbol.wellknown' | 'es2020.intl' | 'esnext.array' | 'esnext.symbol' | 'esnext.asynciterable' | 'esnext.intl' | 'esnext.bigint' | 'esnext.string' | 'esnext.promise' | 'esnext.weakref' | 'es2016.full' | 'es2017.full' | 'es2018.full' | 'es2019.full' | 'es2020.full' | 'esnext.full' | 'lib';
+export { Lib };
+//# sourceMappingURL=lib.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/lib.d.ts.map b/server/node_modules/@typescript-eslint/types/dist/lib.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..484b1f8d737b8c4c9356f73f7e0ba65a1d409225
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/lib.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAIA,aAAK,GAAG,GACJ,KAAK,GACL,KAAK,GACL,QAAQ,GACR,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,KAAK,GACL,cAAc,GACd,WAAW,GACX,yBAAyB,GACzB,oBAAoB,GACpB,YAAY,GACZ,aAAa,GACb,mBAAmB,GACnB,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,yBAAyB,GACzB,sBAAsB,GACtB,eAAe,GACf,qBAAqB,GACrB,eAAe,GACf,aAAa,GACb,oBAAoB,GACpB,uBAAuB,GACvB,sBAAsB,GACtB,aAAa,GACb,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,eAAe,GACf,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,qBAAqB,GACrB,eAAe,GACf,yBAAyB,GACzB,aAAa,GACb,cAAc,GACd,eAAe,GACf,sBAAsB,GACtB,aAAa,GACb,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,aAAa,GACb,aAAa,GACb,aAAa,GACb,aAAa,GACb,aAAa,GACb,KAAK,CAAC;AAEV,OAAO,EAAE,GAAG,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/lib.js b/server/node_modules/@typescript-eslint/types/dist/lib.js
new file mode 100644
index 0000000000000000000000000000000000000000..fc0e815475ac65fc9bbd1acea34702ab8de7c3c5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/lib.js
@@ -0,0 +1,6 @@
+"use strict";
+// THIS CODE WAS AUTOMATICALLY GENERATED
+// DO NOT EDIT THIS CODE BY HAND
+// YOU CAN REGENERATE IT USING yarn generate:lib
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=lib.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/lib.js.map b/server/node_modules/@typescript-eslint/types/dist/lib.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..67615c340747f3733d223adfd862381a27188f75
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/lib.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gCAAgC;AAChC,gDAAgD"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/parser-options.d.ts b/server/node_modules/@typescript-eslint/types/dist/parser-options.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..507defbf04baf112e1f54436817cdcb4a8762510
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/parser-options.d.ts
@@ -0,0 +1,32 @@
+import { Lib } from './lib';
+declare type DebugLevel = boolean | ('typescript-eslint' | 'eslint' | 'typescript')[];
+declare type EcmaVersion = 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020;
+declare type SourceType = 'script' | 'module';
+interface ParserOptions {
+    ecmaFeatures?: {
+        globalReturn?: boolean;
+        jsx?: boolean;
+    };
+    ecmaVersion?: EcmaVersion;
+    jsxPragma?: string;
+    jsxFragmentName?: string | null;
+    lib?: Lib[];
+    comment?: boolean;
+    debugLevel?: DebugLevel;
+    errorOnTypeScriptSyntacticAndSemanticIssues?: boolean;
+    errorOnUnknownASTType?: boolean;
+    EXPERIMENTAL_useSourceOfProjectReferenceRedirect?: boolean;
+    extraFileExtensions?: string[];
+    filePath?: string;
+    loc?: boolean;
+    project?: string | string[];
+    projectFolderIgnoreList?: (string | RegExp)[];
+    range?: boolean;
+    sourceType?: SourceType;
+    tokens?: boolean;
+    tsconfigRootDir?: string;
+    useJSXTextNode?: boolean;
+    warnOnUnsupportedTypeScriptVersion?: boolean;
+}
+export { DebugLevel, EcmaVersion, ParserOptions, SourceType };
+//# sourceMappingURL=parser-options.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/parser-options.d.ts.map b/server/node_modules/@typescript-eslint/types/dist/parser-options.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..138f97ea7b3627b728da23724148252db56fa527
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/parser-options.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"parser-options.d.ts","sourceRoot":"","sources":["../src/parser-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,aAAK,UAAU,GAAG,OAAO,GAAG,CAAC,mBAAmB,GAAG,QAAQ,GAAG,YAAY,CAAC,EAAE,CAAC;AAE9E,aAAK,WAAW,GACZ,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,EAAE,GACF,EAAE,GACF,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;AAET,aAAK,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEtC,UAAU,aAAa;IACrB,YAAY,CAAC,EAAE;QACb,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,GAAG,CAAC,EAAE,OAAO,CAAC;KACf,CAAC;IACF,WAAW,CAAC,EAAE,WAAW,CAAC;IAG1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;IAGZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,2CAA2C,CAAC,EAAE,OAAO,CAAC;IACtD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gDAAgD,CAAC,EAAE,OAAO,CAAC;IAC3D,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,uBAAuB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kCAAkC,CAAC,EAAE,OAAO,CAAC;CAC9C;AAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/parser-options.js b/server/node_modules/@typescript-eslint/types/dist/parser-options.js
new file mode 100644
index 0000000000000000000000000000000000000000..66f40a290d71f2fc4811d2bd4e5af267c32accac
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/parser-options.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=parser-options.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/parser-options.js.map b/server/node_modules/@typescript-eslint/types/dist/parser-options.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..22b7b8ab93f6db4309d13da8b448a657c8109d41
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/parser-options.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"parser-options.js","sourceRoot":"","sources":["../src/parser-options.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts b/server/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0f006742dac9a77da4fe29d7a7b79c65deae3ab4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts
@@ -0,0 +1,1077 @@
+import { AST_NODE_TYPES } from './ast-node-types';
+import { AST_TOKEN_TYPES } from './ast-token-types';
+export interface LineAndColumnData {
+    /**
+     * Line number (1-indexed)
+     */
+    line: number;
+    /**
+     * Column number on the line (0-indexed)
+     */
+    column: number;
+}
+export interface SourceLocation {
+    /**
+     * The position of the first character of the parsed source region
+     */
+    start: LineAndColumnData;
+    /**
+     * The position of the first character after the parsed source region
+     */
+    end: LineAndColumnData;
+}
+export declare type Range = [number, number];
+export interface BaseNode {
+    /**
+     * The source location information of the node.
+     */
+    loc: SourceLocation;
+    /**
+     * An array of two numbers.
+     * Both numbers are a 0-based index which is the position in the array of source code characters.
+     * The first is the start position of the node, the second is the end position of the node.
+     */
+    range: Range;
+    /**
+     * The parent node of the current node
+     */
+    parent?: Node;
+}
+interface BaseToken extends BaseNode {
+    value: string;
+}
+export interface BooleanToken extends BaseToken {
+    type: AST_TOKEN_TYPES.Boolean;
+}
+export interface IdentifierToken extends BaseToken {
+    type: AST_TOKEN_TYPES.Identifier;
+}
+export interface JSXIdentifierToken extends BaseToken {
+    type: AST_TOKEN_TYPES.JSXIdentifier;
+}
+export interface JSXTextToken extends BaseToken {
+    type: AST_TOKEN_TYPES.JSXText;
+}
+export interface KeywordToken extends BaseToken {
+    type: AST_TOKEN_TYPES.Keyword;
+}
+export interface NullToken extends BaseToken {
+    type: AST_TOKEN_TYPES.Null;
+}
+export interface NumericToken extends BaseToken {
+    type: AST_TOKEN_TYPES.Numeric;
+}
+export interface PunctuatorToken extends BaseToken {
+    type: AST_TOKEN_TYPES.Punctuator;
+}
+export interface RegularExpressionToken extends BaseToken {
+    type: AST_TOKEN_TYPES.RegularExpression;
+    regex: {
+        pattern: string;
+        flags: string;
+    };
+}
+export interface StringToken extends BaseToken {
+    type: AST_TOKEN_TYPES.String;
+}
+export interface TemplateToken extends BaseToken {
+    type: AST_TOKEN_TYPES.Template;
+}
+export interface BlockComment extends BaseToken {
+    type: AST_TOKEN_TYPES.Block;
+}
+export interface LineComment extends BaseToken {
+    type: AST_TOKEN_TYPES.Line;
+}
+export declare type Comment = BlockComment | LineComment;
+export declare type Token = BooleanToken | Comment | IdentifierToken | JSXIdentifierToken | JSXTextToken | KeywordToken | NullToken | NumericToken | PunctuatorToken | RegularExpressionToken | StringToken | TemplateToken;
+export declare type OptionalRangeAndLoc<T> = Pick<T, Exclude<keyof T, 'range' | 'loc'>> & {
+    range?: Range;
+    loc?: SourceLocation;
+};
+export declare type Node = ArrayExpression | ArrayPattern | ArrowFunctionExpression | AssignmentExpression | AssignmentPattern | AwaitExpression | BigIntLiteral | BinaryExpression | BlockStatement | BreakStatement | CallExpression | CatchClause | ChainExpression | ClassBody | ClassDeclaration | ClassExpression | ClassProperty | ConditionalExpression | ContinueStatement | DebuggerStatement | Decorator | DoWhileStatement | EmptyStatement | ExportAllDeclaration | ExportDefaultDeclaration | ExportNamedDeclaration | ExportSpecifier | ExpressionStatement | ForInStatement | ForOfStatement | ForStatement | FunctionDeclaration | FunctionExpression | Identifier | IfStatement | ImportDeclaration | ImportDefaultSpecifier | ImportExpression | ImportNamespaceSpecifier | ImportSpecifier | JSXAttribute | JSXClosingElement | JSXClosingFragment | JSXElement | JSXEmptyExpression | JSXExpressionContainer | JSXFragment | JSXIdentifier | JSXMemberExpression | JSXOpeningElement | JSXOpeningFragment | JSXSpreadAttribute | JSXSpreadChild | JSXText | LabeledStatement | Literal | LogicalExpression | MemberExpression | MetaProperty | MethodDefinition | NewExpression | ObjectExpression | ObjectPattern | Program | Property | RestElement | ReturnStatement | SequenceExpression | SpreadElement | Super | SwitchCase | SwitchStatement | TaggedTemplateExpression | TemplateElement | TemplateLiteral | ThisExpression | ThrowStatement | TryStatement | TSAbstractClassProperty | TSAbstractKeyword | TSAbstractMethodDefinition | TSAnyKeyword | TSArrayType | TSAsExpression | TSAsyncKeyword | TSBigIntKeyword | TSBooleanKeyword | TSCallSignatureDeclaration | TSClassImplements | TSConditionalType | TSConstructorType | TSConstructSignatureDeclaration | TSDeclareFunction | TSDeclareKeyword | TSEmptyBodyFunctionExpression | TSEnumDeclaration | TSEnumMember | TSExportAssignment | TSExportKeyword | TSExternalModuleReference | TSFunctionType | TSImportEqualsDeclaration | TSImportType | TSIndexedAccessType | TSIndexSignature | TSInferType | TSInterfaceBody | TSInterfaceDeclaration | TSInterfaceHeritage | TSIntersectionType | TSLiteralType | TSMappedType | TSMethodSignature | TSModuleBlock | TSModuleDeclaration | TSNamedTupleMember | TSNamespaceExportDeclaration | TSNeverKeyword | TSNonNullExpression | TSNullKeyword | TSNumberKeyword | TSObjectKeyword | TSOptionalType | TSParameterProperty | TSParenthesizedType | TSPrivateKeyword | TSPropertySignature | TSProtectedKeyword | TSPublicKeyword | TSQualifiedName | TSReadonlyKeyword | TSRestType | TSStaticKeyword | TSStringKeyword | TSSymbolKeyword | TSTemplateLiteralType | TSThisType | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation | TSTypeAssertion | TSTypeLiteral | TSTypeOperator | TSTypeParameter | TSTypeParameterDeclaration | TSTypeParameterInstantiation | TSTypePredicate | TSTypeQuery | TSTypeReference | TSUndefinedKeyword | TSUnionType | TSUnknownKeyword | TSVoidKeyword | UnaryExpression | UpdateExpression | VariableDeclaration | VariableDeclarator | WhileStatement | WithStatement | YieldExpression;
+export declare type Accessibility = 'public' | 'protected' | 'private';
+export declare type BindingPattern = ArrayPattern | ObjectPattern;
+export declare type BindingName = BindingPattern | Identifier;
+export declare type ChainElement = CallExpression | MemberExpression | TSNonNullExpression;
+export declare type ClassElement = ClassProperty | MethodDefinition | TSAbstractClassProperty | TSAbstractMethodDefinition | TSIndexSignature;
+export declare type ClassProperty = ClassPropertyComputedName | ClassPropertyNonComputedName;
+export declare type DeclarationStatement = ClassDeclaration | ClassExpression | ExportDefaultDeclaration | ExportAllDeclaration | ExportNamedDeclaration | FunctionDeclaration | TSDeclareFunction | TSImportEqualsDeclaration | TSInterfaceDeclaration | TSModuleDeclaration | TSNamespaceExportDeclaration | TSTypeAliasDeclaration | TSEnumDeclaration;
+export declare type DestructuringPattern = Identifier | ObjectPattern | ArrayPattern | RestElement | AssignmentPattern | MemberExpression;
+export declare type EntityName = Identifier | TSQualifiedName;
+export declare type ExportDeclaration = ClassDeclaration | ClassExpression | FunctionDeclaration | TSDeclareFunction | TSEnumDeclaration | TSInterfaceDeclaration | TSModuleDeclaration | TSTypeAliasDeclaration | VariableDeclaration;
+export declare type Expression = ArrowFunctionExpression | AssignmentExpression | BinaryExpression | ChainExpression | ConditionalExpression | ImportExpression | JSXClosingElement | JSXClosingFragment | JSXExpressionContainer | JSXOpeningElement | JSXOpeningFragment | JSXSpreadChild | LogicalExpression | NewExpression | RestElement | SequenceExpression | SpreadElement | TSAsExpression | TSUnaryExpression | YieldExpression;
+export declare type ForInitialiser = Expression | VariableDeclaration;
+export declare type FunctionLike = ArrowFunctionExpression | FunctionDeclaration | FunctionExpression | TSDeclareFunction | TSEmptyBodyFunctionExpression;
+export declare type ImportClause = ImportDefaultSpecifier | ImportNamespaceSpecifier | ImportSpecifier;
+export declare type IterationStatement = DoWhileStatement | ForInStatement | ForOfStatement | ForStatement | WhileStatement;
+export declare type JSXChild = JSXElement | JSXExpression | JSXFragment | JSXText;
+export declare type JSXExpression = JSXEmptyExpression | JSXSpreadChild | JSXExpressionContainer;
+export declare type JSXTagNameExpression = JSXIdentifier | JSXMemberExpression;
+export declare type LeftHandSideExpression = CallExpression | ClassExpression | ClassDeclaration | FunctionExpression | LiteralExpression | MemberExpression | PrimaryExpression | TaggedTemplateExpression | TSNonNullExpression | TSAsExpression | ArrowFunctionExpression;
+export declare type Literal = BigIntLiteral | BooleanLiteral | NumberLiteral | NullLiteral | RegExpLiteral | StringLiteral;
+export declare type LiteralExpression = Literal | TemplateLiteral;
+export declare type MemberExpression = MemberExpressionComputedName | MemberExpressionNonComputedName;
+export declare type MethodDefinition = MethodDefinitionComputedName | MethodDefinitionNonComputedName;
+export declare type Modifier = TSAbstractKeyword | TSAsyncKeyword | TSDeclareKeyword | TSExportKeyword | TSPublicKeyword | TSPrivateKeyword | TSProtectedKeyword | TSReadonlyKeyword | TSStaticKeyword;
+export declare type ObjectLiteralElementLike = MethodDefinition | Property | SpreadElement | TSAbstractMethodDefinition;
+export declare type Parameter = ArrayPattern | AssignmentPattern | Identifier | ObjectPattern | RestElement | TSParameterProperty;
+export declare type PrimaryExpression = ArrayExpression | ArrayPattern | ClassExpression | FunctionExpression | Identifier | JSXElement | JSXFragment | JSXOpeningElement | Literal | LiteralExpression | MetaProperty | ObjectExpression | ObjectPattern | Super | TemplateLiteral | ThisExpression | TSNullKeyword;
+export declare type ProgramStatement = ClassDeclaration | ExportAllDeclaration | ExportDefaultDeclaration | ExportNamedDeclaration | ImportDeclaration | Statement | TSDeclareFunction | TSEnumDeclaration | TSExportAssignment | TSImportEqualsDeclaration | TSInterfaceDeclaration | TSNamespaceExportDeclaration | TSTypeAliasDeclaration;
+export declare type Property = PropertyComputedName | PropertyNonComputedName;
+export declare type PropertyName = PropertyNameComputed | PropertyNameNonComputed;
+export declare type PropertyNameComputed = Expression;
+export declare type PropertyNameNonComputed = Identifier | StringLiteral | NumberLiteral;
+export declare type Statement = BlockStatement | BreakStatement | ContinueStatement | DebuggerStatement | DeclarationStatement | EmptyStatement | ExpressionStatement | IfStatement | IterationStatement | ImportDeclaration | LabeledStatement | TSModuleBlock | ReturnStatement | SwitchStatement | ThrowStatement | TryStatement | VariableDeclaration | WithStatement;
+export declare type TSAbstractClassProperty = TSAbstractClassPropertyComputedName | TSAbstractClassPropertyNonComputedName;
+export declare type TSAbstractMethodDefinition = TSAbstractMethodDefinitionComputedName | TSAbstractMethodDefinitionNonComputedName;
+export declare type TSMethodSignature = TSMethodSignatureComputedName | TSMethodSignatureNonComputedName;
+export declare type TSPropertySignature = TSPropertySignatureComputedName | TSPropertySignatureNonComputedName;
+export declare type TSEnumMember = TSEnumMemberComputedName | TSEnumMemberNonComputedName;
+export declare type TSUnaryExpression = AwaitExpression | LeftHandSideExpression | TSTypeAssertion | UnaryExpression | UpdateExpression;
+export declare type TypeElement = TSCallSignatureDeclaration | TSConstructSignatureDeclaration | TSIndexSignature | TSMethodSignature | TSPropertySignature;
+export declare type TypeNode = TSAnyKeyword | TSArrayType | TSBigIntKeyword | TSBooleanKeyword | TSConditionalType | TSConstructorType | TSFunctionType | TSImportType | TSIndexedAccessType | TSInferType | TSInterfaceHeritage | TSIntersectionType | TSLiteralType | TSMappedType | TSNamedTupleMember | TSNeverKeyword | TSNullKeyword | TSNumberKeyword | TSObjectKeyword | TSOptionalType | TSParenthesizedType | TSRestType | TSStringKeyword | TSSymbolKeyword | TSTemplateLiteralType | TSThisType | TSTupleType | TSTypeLiteral | TSTypeOperator | TSTypePredicate | TSTypeQuery | TSTypeReference | TSUndefinedKeyword | TSUnionType | TSUnknownKeyword | TSVoidKeyword;
+interface BinaryExpressionBase extends BaseNode {
+    operator: string;
+    left: Expression;
+    right: Expression;
+}
+interface CallExpressionBase extends BaseNode {
+    callee: LeftHandSideExpression;
+    arguments: Expression[];
+    typeParameters?: TSTypeParameterInstantiation;
+    optional: boolean;
+}
+interface ClassDeclarationBase extends BaseNode {
+    typeParameters?: TSTypeParameterDeclaration;
+    superTypeParameters?: TSTypeParameterInstantiation;
+    id: Identifier | null;
+    body: ClassBody;
+    superClass: LeftHandSideExpression | null;
+    implements?: TSClassImplements[];
+    abstract?: boolean;
+    declare?: boolean;
+    decorators?: Decorator[];
+}
+/** this should not be directly used - instead use ClassPropertyComputedNameBase or ClassPropertyNonComputedNameBase */
+interface ClassPropertyBase extends BaseNode {
+    key: PropertyName;
+    value: Expression | null;
+    computed: boolean;
+    static: boolean;
+    declare: boolean;
+    readonly?: boolean;
+    decorators?: Decorator[];
+    accessibility?: Accessibility;
+    optional?: boolean;
+    definite?: boolean;
+    typeAnnotation?: TSTypeAnnotation;
+}
+interface ClassPropertyComputedNameBase extends ClassPropertyBase {
+    key: PropertyNameComputed;
+    computed: true;
+}
+interface ClassPropertyNonComputedNameBase extends ClassPropertyBase {
+    key: PropertyNameNonComputed;
+    computed: false;
+}
+interface FunctionDeclarationBase extends BaseNode {
+    id: Identifier | null;
+    generator: boolean;
+    expression: boolean;
+    async: boolean;
+    params: Parameter[];
+    body?: BlockStatement | null;
+    returnType?: TSTypeAnnotation;
+    typeParameters?: TSTypeParameterDeclaration;
+    declare?: boolean;
+}
+interface FunctionSignatureBase extends BaseNode {
+    params: Parameter[];
+    returnType?: TSTypeAnnotation;
+    typeParameters?: TSTypeParameterDeclaration;
+}
+interface LiteralBase extends BaseNode {
+    raw: string;
+    value: string | boolean | null | number | RegExp | bigint;
+    regex?: {
+        pattern: string;
+        flags: string;
+    };
+}
+/** this should not be directly used - instead use MemberExpressionComputedNameBase or MemberExpressionNonComputedNameBase */
+interface MemberExpressionBase extends BaseNode {
+    object: LeftHandSideExpression;
+    property: Expression | Identifier;
+    computed: boolean;
+    optional: boolean;
+}
+interface MemberExpressionComputedNameBase extends MemberExpressionBase {
+    property: Expression;
+    computed: true;
+}
+interface MemberExpressionNonComputedNameBase extends MemberExpressionBase {
+    property: Identifier;
+    computed: false;
+}
+/** this should not be directly used - instead use MethodDefinitionComputedNameBase or MethodDefinitionNonComputedNameBase */
+interface MethodDefinitionBase extends BaseNode {
+    key: PropertyName;
+    value: FunctionExpression | TSEmptyBodyFunctionExpression;
+    computed: boolean;
+    static: boolean;
+    kind: 'method' | 'get' | 'set' | 'constructor';
+    optional?: boolean;
+    decorators?: Decorator[];
+    accessibility?: Accessibility;
+    typeParameters?: TSTypeParameterDeclaration;
+}
+interface MethodDefinitionComputedNameBase extends MethodDefinitionBase {
+    key: PropertyNameComputed;
+    computed: true;
+}
+interface MethodDefinitionNonComputedNameBase extends MethodDefinitionBase {
+    key: PropertyNameNonComputed;
+    computed: false;
+}
+interface PropertyBase extends BaseNode {
+    type: AST_NODE_TYPES.Property;
+    key: PropertyName;
+    value: Expression | AssignmentPattern | BindingName | TSEmptyBodyFunctionExpression;
+    computed: boolean;
+    method: boolean;
+    shorthand: boolean;
+    optional?: boolean;
+    kind: 'init' | 'get' | 'set';
+}
+interface TSEnumMemberBase extends BaseNode {
+    type: AST_NODE_TYPES.TSEnumMember;
+    id: PropertyNameNonComputed | PropertyNameComputed;
+    initializer?: Expression;
+    computed?: boolean;
+}
+interface TSHeritageBase extends BaseNode {
+    expression: Expression;
+    typeParameters?: TSTypeParameterInstantiation;
+}
+interface TSMethodSignatureBase extends BaseNode {
+    type: AST_NODE_TYPES.TSMethodSignature;
+    key: PropertyName;
+    computed: boolean;
+    params: Parameter[];
+    optional?: boolean;
+    returnType?: TSTypeAnnotation;
+    readonly?: boolean;
+    typeParameters?: TSTypeParameterDeclaration;
+    accessibility?: Accessibility;
+    export?: boolean;
+    static?: boolean;
+}
+interface TSPropertySignatureBase extends BaseNode {
+    type: AST_NODE_TYPES.TSPropertySignature;
+    key: PropertyName;
+    optional?: boolean;
+    computed: boolean;
+    typeAnnotation?: TSTypeAnnotation;
+    initializer?: Expression;
+    readonly?: boolean;
+    static?: boolean;
+    export?: boolean;
+    accessibility?: Accessibility;
+}
+interface UnaryExpressionBase extends BaseNode {
+    operator: string;
+    prefix: boolean;
+    argument: LeftHandSideExpression | Literal | UnaryExpression;
+}
+export interface ArrayExpression extends BaseNode {
+    type: AST_NODE_TYPES.ArrayExpression;
+    elements: Expression[];
+}
+export interface ArrayPattern extends BaseNode {
+    type: AST_NODE_TYPES.ArrayPattern;
+    elements: (DestructuringPattern | null)[];
+    typeAnnotation?: TSTypeAnnotation;
+    optional?: boolean;
+    decorators?: Decorator[];
+}
+export interface ArrowFunctionExpression extends BaseNode {
+    type: AST_NODE_TYPES.ArrowFunctionExpression;
+    generator: boolean;
+    id: null;
+    params: Parameter[];
+    body: Expression | BlockStatement;
+    async: boolean;
+    expression: boolean;
+    returnType?: TSTypeAnnotation;
+    typeParameters?: TSTypeParameterDeclaration;
+}
+export interface AssignmentExpression extends BinaryExpressionBase {
+    type: AST_NODE_TYPES.AssignmentExpression;
+    operator: '-=' | '??=' | '**=' | '*=' | '/=' | '&&=' | '&=' | '%=' | '^=' | '+=' | '<<=' | '=' | '>>=' | '>>>=' | '|=' | '||=';
+}
+export interface AssignmentPattern extends BaseNode {
+    type: AST_NODE_TYPES.AssignmentPattern;
+    left: BindingName;
+    right: Expression;
+    typeAnnotation?: TSTypeAnnotation;
+    optional?: boolean;
+    decorators?: Decorator[];
+}
+export interface AwaitExpression extends BaseNode {
+    type: AST_NODE_TYPES.AwaitExpression;
+    argument: TSUnaryExpression;
+}
+export interface BigIntLiteral extends LiteralBase {
+    type: AST_NODE_TYPES.Literal;
+    value: bigint | null;
+    bigint: string;
+}
+export interface BinaryExpression extends BinaryExpressionBase {
+    type: AST_NODE_TYPES.BinaryExpression;
+}
+export interface BlockStatement extends BaseNode {
+    type: AST_NODE_TYPES.BlockStatement;
+    body: Statement[];
+}
+export interface BooleanLiteral extends LiteralBase {
+    type: AST_NODE_TYPES.Literal;
+    value: boolean;
+}
+export interface BreakStatement extends BaseNode {
+    type: AST_NODE_TYPES.BreakStatement;
+    label: Identifier | null;
+}
+export interface ChainExpression extends BaseNode {
+    type: AST_NODE_TYPES.ChainExpression;
+    expression: ChainElement;
+}
+export interface CallExpression extends CallExpressionBase {
+    type: AST_NODE_TYPES.CallExpression;
+}
+export interface CatchClause extends BaseNode {
+    type: AST_NODE_TYPES.CatchClause;
+    param: BindingName | null;
+    body: BlockStatement;
+}
+export interface ClassBody extends BaseNode {
+    type: AST_NODE_TYPES.ClassBody;
+    body: ClassElement[];
+}
+export interface ClassDeclaration extends ClassDeclarationBase {
+    type: AST_NODE_TYPES.ClassDeclaration;
+}
+export interface ClassExpression extends ClassDeclarationBase {
+    type: AST_NODE_TYPES.ClassExpression;
+}
+export interface ClassPropertyComputedName extends ClassPropertyComputedNameBase {
+    type: AST_NODE_TYPES.ClassProperty;
+}
+export interface ClassPropertyNonComputedName extends ClassPropertyNonComputedNameBase {
+    type: AST_NODE_TYPES.ClassProperty;
+}
+export interface ConditionalExpression extends BaseNode {
+    type: AST_NODE_TYPES.ConditionalExpression;
+    test: Expression;
+    consequent: Expression;
+    alternate: Expression;
+}
+export interface ContinueStatement extends BaseNode {
+    type: AST_NODE_TYPES.ContinueStatement;
+    label: Identifier | null;
+}
+export interface DebuggerStatement extends BaseNode {
+    type: AST_NODE_TYPES.DebuggerStatement;
+}
+export interface Decorator extends BaseNode {
+    type: AST_NODE_TYPES.Decorator;
+    expression: LeftHandSideExpression;
+}
+export interface DoWhileStatement extends BaseNode {
+    type: AST_NODE_TYPES.DoWhileStatement;
+    test: Expression;
+    body: Statement;
+}
+export interface EmptyStatement extends BaseNode {
+    type: AST_NODE_TYPES.EmptyStatement;
+}
+export interface ExportAllDeclaration extends BaseNode {
+    type: AST_NODE_TYPES.ExportAllDeclaration;
+    source: Expression | null;
+    exportKind: 'type' | 'value';
+    exported: Identifier | null;
+}
+export interface ExportDefaultDeclaration extends BaseNode {
+    type: AST_NODE_TYPES.ExportDefaultDeclaration;
+    declaration: ExportDeclaration | Expression;
+    exportKind: 'type' | 'value';
+}
+export interface ExportNamedDeclaration extends BaseNode {
+    type: AST_NODE_TYPES.ExportNamedDeclaration;
+    declaration: ExportDeclaration | null;
+    specifiers: ExportSpecifier[];
+    source: Expression | null;
+    exportKind: 'type' | 'value';
+}
+export interface ExportSpecifier extends BaseNode {
+    type: AST_NODE_TYPES.ExportSpecifier;
+    local: Identifier;
+    exported: Identifier;
+}
+export interface ExpressionStatement extends BaseNode {
+    type: AST_NODE_TYPES.ExpressionStatement;
+    expression: Expression;
+    directive?: string;
+}
+export interface ForInStatement extends BaseNode {
+    type: AST_NODE_TYPES.ForInStatement;
+    left: ForInitialiser;
+    right: Expression;
+    body: Statement;
+}
+export interface ForOfStatement extends BaseNode {
+    type: AST_NODE_TYPES.ForOfStatement;
+    left: ForInitialiser;
+    right: Expression;
+    body: Statement;
+    await: boolean;
+}
+export interface ForStatement extends BaseNode {
+    type: AST_NODE_TYPES.ForStatement;
+    init: Expression | ForInitialiser | null;
+    test: Expression | null;
+    update: Expression | null;
+    body: Statement;
+}
+export interface FunctionDeclaration extends FunctionDeclarationBase {
+    type: AST_NODE_TYPES.FunctionDeclaration;
+    body: BlockStatement;
+}
+export interface FunctionExpression extends FunctionDeclarationBase {
+    type: AST_NODE_TYPES.FunctionExpression;
+    body: BlockStatement;
+}
+export interface Identifier extends BaseNode {
+    type: AST_NODE_TYPES.Identifier;
+    name: string;
+    typeAnnotation?: TSTypeAnnotation;
+    optional?: boolean;
+    decorators?: Decorator[];
+}
+export interface IfStatement extends BaseNode {
+    type: AST_NODE_TYPES.IfStatement;
+    test: Expression;
+    consequent: Statement;
+    alternate: Statement | null;
+}
+export interface ImportDeclaration extends BaseNode {
+    type: AST_NODE_TYPES.ImportDeclaration;
+    source: Literal;
+    specifiers: ImportClause[];
+    importKind: 'type' | 'value';
+}
+export interface ImportDefaultSpecifier extends BaseNode {
+    type: AST_NODE_TYPES.ImportDefaultSpecifier;
+    local: Identifier;
+}
+export interface ImportExpression extends BaseNode {
+    type: AST_NODE_TYPES.ImportExpression;
+    source: Expression;
+}
+export interface ImportNamespaceSpecifier extends BaseNode {
+    type: AST_NODE_TYPES.ImportNamespaceSpecifier;
+    local: Identifier;
+}
+export interface ImportSpecifier extends BaseNode {
+    type: AST_NODE_TYPES.ImportSpecifier;
+    local: Identifier;
+    imported: Identifier;
+}
+export interface JSXAttribute extends BaseNode {
+    type: AST_NODE_TYPES.JSXAttribute;
+    name: JSXIdentifier;
+    value: Literal | JSXExpression | null;
+}
+export interface JSXClosingElement extends BaseNode {
+    type: AST_NODE_TYPES.JSXClosingElement;
+    name: JSXTagNameExpression;
+}
+export interface JSXClosingFragment extends BaseNode {
+    type: AST_NODE_TYPES.JSXClosingFragment;
+}
+export interface JSXElement extends BaseNode {
+    type: AST_NODE_TYPES.JSXElement;
+    openingElement: JSXOpeningElement;
+    closingElement: JSXClosingElement | null;
+    children: JSXChild[];
+}
+export interface JSXEmptyExpression extends BaseNode {
+    type: AST_NODE_TYPES.JSXEmptyExpression;
+}
+export interface JSXExpressionContainer extends BaseNode {
+    type: AST_NODE_TYPES.JSXExpressionContainer;
+    expression: Expression | JSXEmptyExpression;
+}
+export interface JSXFragment extends BaseNode {
+    type: AST_NODE_TYPES.JSXFragment;
+    openingFragment: JSXOpeningFragment;
+    closingFragment: JSXClosingFragment;
+    children: JSXChild[];
+}
+export interface JSXIdentifier extends BaseNode {
+    type: AST_NODE_TYPES.JSXIdentifier;
+    name: string;
+}
+export interface JSXMemberExpression extends BaseNode {
+    type: AST_NODE_TYPES.JSXMemberExpression;
+    object: JSXTagNameExpression;
+    property: JSXIdentifier;
+}
+export interface JSXOpeningElement extends BaseNode {
+    type: AST_NODE_TYPES.JSXOpeningElement;
+    typeParameters?: TSTypeParameterInstantiation;
+    selfClosing: boolean;
+    name: JSXTagNameExpression;
+    attributes: JSXAttribute[];
+}
+export interface JSXOpeningFragment extends BaseNode {
+    type: AST_NODE_TYPES.JSXOpeningFragment;
+}
+export interface JSXSpreadAttribute extends BaseNode {
+    type: AST_NODE_TYPES.JSXSpreadAttribute;
+    argument: Expression;
+}
+export interface JSXSpreadChild extends BaseNode {
+    type: AST_NODE_TYPES.JSXSpreadChild;
+    expression: Expression | JSXEmptyExpression;
+}
+export interface JSXText extends BaseNode {
+    type: AST_NODE_TYPES.JSXText;
+    value: string;
+    raw: string;
+}
+export interface LabeledStatement extends BaseNode {
+    type: AST_NODE_TYPES.LabeledStatement;
+    label: Identifier;
+    body: Statement;
+}
+export interface LogicalExpression extends BinaryExpressionBase {
+    type: AST_NODE_TYPES.LogicalExpression;
+}
+export interface MemberExpressionComputedName extends MemberExpressionComputedNameBase {
+    type: AST_NODE_TYPES.MemberExpression;
+}
+export interface MemberExpressionNonComputedName extends MemberExpressionNonComputedNameBase {
+    type: AST_NODE_TYPES.MemberExpression;
+}
+export interface MetaProperty extends BaseNode {
+    type: AST_NODE_TYPES.MetaProperty;
+    meta: Identifier;
+    property: Identifier;
+}
+export interface MethodDefinitionComputedName extends MethodDefinitionComputedNameBase {
+    type: AST_NODE_TYPES.MethodDefinition;
+}
+export interface MethodDefinitionNonComputedName extends MethodDefinitionNonComputedNameBase {
+    type: AST_NODE_TYPES.MethodDefinition;
+}
+export interface NewExpression extends BaseNode {
+    type: AST_NODE_TYPES.NewExpression;
+    callee: LeftHandSideExpression;
+    arguments: Expression[];
+    typeParameters?: TSTypeParameterInstantiation;
+}
+export interface NumberLiteral extends LiteralBase {
+    type: AST_NODE_TYPES.Literal;
+    value: number;
+}
+export interface NullLiteral extends LiteralBase {
+    type: AST_NODE_TYPES.Literal;
+    value: null;
+}
+export interface ObjectExpression extends BaseNode {
+    type: AST_NODE_TYPES.ObjectExpression;
+    properties: ObjectLiteralElementLike[];
+}
+export interface ObjectPattern extends BaseNode {
+    type: AST_NODE_TYPES.ObjectPattern;
+    properties: (Property | RestElement)[];
+    typeAnnotation?: TSTypeAnnotation;
+    optional?: boolean;
+    decorators?: Decorator[];
+}
+export interface Program extends BaseNode {
+    type: AST_NODE_TYPES.Program;
+    body: ProgramStatement[];
+    sourceType: 'module' | 'script';
+    comments?: Comment[];
+    tokens?: Token[];
+}
+export interface PropertyComputedName extends PropertyBase {
+    key: PropertyNameComputed;
+    computed: true;
+}
+export interface PropertyNonComputedName extends PropertyBase {
+    key: PropertyNameNonComputed;
+    computed: false;
+}
+export interface RegExpLiteral extends LiteralBase {
+    type: AST_NODE_TYPES.Literal;
+    value: RegExp;
+}
+export interface RestElement extends BaseNode {
+    type: AST_NODE_TYPES.RestElement;
+    argument: DestructuringPattern;
+    typeAnnotation?: TSTypeAnnotation;
+    optional?: boolean;
+    value?: AssignmentPattern;
+    decorators?: Decorator[];
+}
+export interface ReturnStatement extends BaseNode {
+    type: AST_NODE_TYPES.ReturnStatement;
+    argument: Expression | null;
+}
+export interface SequenceExpression extends BaseNode {
+    type: AST_NODE_TYPES.SequenceExpression;
+    expressions: Expression[];
+}
+export interface SpreadElement extends BaseNode {
+    type: AST_NODE_TYPES.SpreadElement;
+    argument: Expression;
+}
+export interface StringLiteral extends LiteralBase {
+    type: AST_NODE_TYPES.Literal;
+    value: string;
+}
+export interface Super extends BaseNode {
+    type: AST_NODE_TYPES.Super;
+}
+export interface SwitchCase extends BaseNode {
+    type: AST_NODE_TYPES.SwitchCase;
+    test: Expression | null;
+    consequent: Statement[];
+}
+export interface SwitchStatement extends BaseNode {
+    type: AST_NODE_TYPES.SwitchStatement;
+    discriminant: Expression;
+    cases: SwitchCase[];
+}
+export interface TaggedTemplateExpression extends BaseNode {
+    type: AST_NODE_TYPES.TaggedTemplateExpression;
+    typeParameters?: TSTypeParameterInstantiation;
+    tag: LeftHandSideExpression;
+    quasi: TemplateLiteral;
+}
+export interface TemplateElement extends BaseNode {
+    type: AST_NODE_TYPES.TemplateElement;
+    value: {
+        raw: string;
+        cooked: string;
+    };
+    tail: boolean;
+}
+export interface TemplateLiteral extends BaseNode {
+    type: AST_NODE_TYPES.TemplateLiteral;
+    quasis: TemplateElement[];
+    expressions: Expression[];
+}
+export interface ThisExpression extends BaseNode {
+    type: AST_NODE_TYPES.ThisExpression;
+}
+export interface ThrowStatement extends BaseNode {
+    type: AST_NODE_TYPES.ThrowStatement;
+    argument: Statement | TSAsExpression | null;
+}
+export interface TryStatement extends BaseNode {
+    type: AST_NODE_TYPES.TryStatement;
+    block: BlockStatement;
+    handler: CatchClause | null;
+    finalizer: BlockStatement;
+}
+export interface TSAbstractClassPropertyComputedName extends ClassPropertyComputedNameBase {
+    type: AST_NODE_TYPES.TSAbstractClassProperty;
+}
+export interface TSAbstractClassPropertyNonComputedName extends ClassPropertyNonComputedNameBase {
+    type: AST_NODE_TYPES.TSAbstractClassProperty;
+}
+export interface TSAbstractKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSAbstractKeyword;
+}
+export interface TSAbstractMethodDefinitionComputedName extends MethodDefinitionComputedNameBase {
+    type: AST_NODE_TYPES.TSAbstractMethodDefinition;
+}
+export interface TSAbstractMethodDefinitionNonComputedName extends MethodDefinitionNonComputedNameBase {
+    type: AST_NODE_TYPES.TSAbstractMethodDefinition;
+}
+export interface TSAnyKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSAnyKeyword;
+}
+export interface TSArrayType extends BaseNode {
+    type: AST_NODE_TYPES.TSArrayType;
+    elementType: TypeNode;
+}
+export interface TSAsExpression extends BaseNode {
+    type: AST_NODE_TYPES.TSAsExpression;
+    expression: Expression;
+    typeAnnotation: TypeNode;
+}
+export interface TSAsyncKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSAsyncKeyword;
+}
+export interface TSBigIntKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSBigIntKeyword;
+}
+export interface TSBooleanKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSBooleanKeyword;
+}
+export interface TSCallSignatureDeclaration extends FunctionSignatureBase {
+    type: AST_NODE_TYPES.TSCallSignatureDeclaration;
+}
+export interface TSClassImplements extends TSHeritageBase {
+    type: AST_NODE_TYPES.TSClassImplements;
+}
+export interface TSConditionalType extends BaseNode {
+    type: AST_NODE_TYPES.TSConditionalType;
+    checkType: TypeNode;
+    extendsType: TypeNode;
+    trueType: TypeNode;
+    falseType: TypeNode;
+}
+export interface TSConstructorType extends FunctionSignatureBase {
+    type: AST_NODE_TYPES.TSConstructorType;
+}
+export interface TSConstructSignatureDeclaration extends FunctionSignatureBase {
+    type: AST_NODE_TYPES.TSConstructSignatureDeclaration;
+}
+export interface TSDeclareFunction extends FunctionDeclarationBase {
+    type: AST_NODE_TYPES.TSDeclareFunction;
+}
+export interface TSDeclareKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSDeclareKeyword;
+}
+export interface TSEmptyBodyFunctionExpression extends FunctionDeclarationBase {
+    type: AST_NODE_TYPES.TSEmptyBodyFunctionExpression;
+    body: null;
+}
+export interface TSEnumDeclaration extends BaseNode {
+    type: AST_NODE_TYPES.TSEnumDeclaration;
+    id: Identifier;
+    members: TSEnumMember[];
+    const?: boolean;
+    declare?: boolean;
+    modifiers?: Modifier[];
+}
+/**
+ * this should only really happen in semantically invalid code (errors 1164 and 2452)
+ *
+ * VALID:
+ * enum Foo { ['a'] }
+ *
+ * INVALID:
+ * const x = 'a';
+ * enum Foo { [x] }
+ * enum Bar { ['a' + 'b'] }
+ */
+export interface TSEnumMemberComputedName extends TSEnumMemberBase {
+    id: PropertyNameComputed;
+    computed: true;
+}
+export interface TSEnumMemberNonComputedName extends TSEnumMemberBase {
+    id: PropertyNameNonComputed;
+    computed?: false;
+}
+export interface TSExportAssignment extends BaseNode {
+    type: AST_NODE_TYPES.TSExportAssignment;
+    expression: Expression;
+}
+export interface TSExportKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSExportKeyword;
+}
+export interface TSExternalModuleReference extends BaseNode {
+    type: AST_NODE_TYPES.TSExternalModuleReference;
+    expression: Expression;
+}
+export interface TSFunctionType extends FunctionSignatureBase {
+    type: AST_NODE_TYPES.TSFunctionType;
+}
+export interface TSImportEqualsDeclaration extends BaseNode {
+    type: AST_NODE_TYPES.TSImportEqualsDeclaration;
+    id: Identifier;
+    moduleReference: EntityName | TSExternalModuleReference;
+    isExport: boolean;
+}
+export interface TSImportType extends BaseNode {
+    type: AST_NODE_TYPES.TSImportType;
+    isTypeOf: boolean;
+    parameter: TypeNode;
+    qualifier: EntityName | null;
+    typeParameters: TSTypeParameterInstantiation | null;
+}
+export interface TSIndexedAccessType extends BaseNode {
+    type: AST_NODE_TYPES.TSIndexedAccessType;
+    objectType: TypeNode;
+    indexType: TypeNode;
+}
+export interface TSIndexSignature extends BaseNode {
+    type: AST_NODE_TYPES.TSIndexSignature;
+    parameters: Parameter[];
+    typeAnnotation?: TSTypeAnnotation;
+    readonly?: boolean;
+    accessibility?: Accessibility;
+    export?: boolean;
+    static?: boolean;
+}
+export interface TSInferType extends BaseNode {
+    type: AST_NODE_TYPES.TSInferType;
+    typeParameter: TSTypeParameter;
+}
+export interface TSInterfaceDeclaration extends BaseNode {
+    type: AST_NODE_TYPES.TSInterfaceDeclaration;
+    body: TSInterfaceBody;
+    id: Identifier;
+    typeParameters?: TSTypeParameterDeclaration;
+    extends?: TSInterfaceHeritage[];
+    implements?: TSInterfaceHeritage[];
+    abstract?: boolean;
+    declare?: boolean;
+}
+export interface TSInterfaceBody extends BaseNode {
+    type: AST_NODE_TYPES.TSInterfaceBody;
+    body: TypeElement[];
+}
+export interface TSInterfaceHeritage extends TSHeritageBase {
+    type: AST_NODE_TYPES.TSInterfaceHeritage;
+}
+export interface TSIntersectionType extends BaseNode {
+    type: AST_NODE_TYPES.TSIntersectionType;
+    types: TypeNode[];
+}
+export interface TSLiteralType extends BaseNode {
+    type: AST_NODE_TYPES.TSLiteralType;
+    literal: LiteralExpression | UnaryExpression | UpdateExpression;
+}
+export interface TSMappedType extends BaseNode {
+    type: AST_NODE_TYPES.TSMappedType;
+    typeParameter: TSTypeParameter;
+    readonly?: boolean | '-' | '+';
+    optional?: boolean | '-' | '+';
+    typeAnnotation?: TypeNode;
+    nameType: TypeNode | null;
+}
+export interface TSMethodSignatureComputedName extends TSMethodSignatureBase {
+    key: PropertyNameComputed;
+    computed: true;
+}
+export interface TSMethodSignatureNonComputedName extends TSMethodSignatureBase {
+    key: PropertyNameNonComputed;
+    computed: false;
+}
+export interface TSModuleBlock extends BaseNode {
+    type: AST_NODE_TYPES.TSModuleBlock;
+    body: ProgramStatement[];
+}
+export interface TSModuleDeclaration extends BaseNode {
+    type: AST_NODE_TYPES.TSModuleDeclaration;
+    id: Identifier | Literal;
+    body?: TSModuleBlock;
+    global?: boolean;
+    declare?: boolean;
+    modifiers?: Modifier[];
+}
+export interface TSNamedTupleMember extends BaseNode {
+    type: AST_NODE_TYPES.TSNamedTupleMember;
+    elementType: TypeNode;
+    label: Identifier;
+    optional: boolean;
+}
+export interface TSNamespaceExportDeclaration extends BaseNode {
+    type: AST_NODE_TYPES.TSNamespaceExportDeclaration;
+    id: Identifier;
+}
+export interface TSNeverKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSNeverKeyword;
+}
+export interface TSNonNullExpression extends BaseNode {
+    type: AST_NODE_TYPES.TSNonNullExpression;
+    expression: Expression;
+}
+export interface TSNullKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSNullKeyword;
+}
+export interface TSNumberKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSNumberKeyword;
+}
+export interface TSObjectKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSObjectKeyword;
+}
+export interface TSOptionalType extends BaseNode {
+    type: AST_NODE_TYPES.TSOptionalType;
+    typeAnnotation: TypeNode;
+}
+export interface TSParameterProperty extends BaseNode {
+    type: AST_NODE_TYPES.TSParameterProperty;
+    accessibility?: Accessibility;
+    readonly?: boolean;
+    static?: boolean;
+    export?: boolean;
+    parameter: AssignmentPattern | BindingName | RestElement;
+    decorators?: Decorator[];
+}
+export interface TSParenthesizedType extends BaseNode {
+    type: AST_NODE_TYPES.TSParenthesizedType;
+    typeAnnotation: TypeNode;
+}
+export interface TSPropertySignatureComputedName extends TSPropertySignatureBase {
+    key: PropertyNameComputed;
+    computed: true;
+}
+export interface TSPropertySignatureNonComputedName extends TSPropertySignatureBase {
+    key: PropertyNameNonComputed;
+    computed: false;
+}
+export interface TSPublicKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSPublicKeyword;
+}
+export interface TSPrivateKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSPrivateKeyword;
+}
+export interface TSProtectedKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSProtectedKeyword;
+}
+export interface TSQualifiedName extends BaseNode {
+    type: AST_NODE_TYPES.TSQualifiedName;
+    left: EntityName;
+    right: Identifier;
+}
+export interface TSReadonlyKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSReadonlyKeyword;
+}
+export interface TSRestType extends BaseNode {
+    type: AST_NODE_TYPES.TSRestType;
+    typeAnnotation: TypeNode;
+}
+export interface TSStaticKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSStaticKeyword;
+}
+export interface TSStringKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSStringKeyword;
+}
+export interface TSSymbolKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSSymbolKeyword;
+}
+export interface TSTemplateLiteralType extends BaseNode {
+    type: AST_NODE_TYPES.TSTemplateLiteralType;
+    quasis: TemplateElement[];
+    types: TypeNode[];
+}
+export interface TSThisType extends BaseNode {
+    type: AST_NODE_TYPES.TSThisType;
+}
+export interface TSTupleType extends BaseNode {
+    type: AST_NODE_TYPES.TSTupleType;
+    elementTypes: TypeNode[];
+}
+export interface TSTypeAliasDeclaration extends BaseNode {
+    type: AST_NODE_TYPES.TSTypeAliasDeclaration;
+    id: Identifier;
+    typeAnnotation: TypeNode;
+    declare?: boolean;
+    typeParameters?: TSTypeParameterDeclaration;
+}
+export interface TSTypeAnnotation extends BaseNode {
+    type: AST_NODE_TYPES.TSTypeAnnotation;
+    typeAnnotation: TypeNode;
+}
+export interface TSTypeAssertion extends BaseNode {
+    type: AST_NODE_TYPES.TSTypeAssertion;
+    typeAnnotation: TypeNode;
+    expression: Expression;
+}
+export interface TSTypeLiteral extends BaseNode {
+    type: AST_NODE_TYPES.TSTypeLiteral;
+    members: TypeElement[];
+}
+export interface TSTypeOperator extends BaseNode {
+    type: AST_NODE_TYPES.TSTypeOperator;
+    operator: 'keyof' | 'unique' | 'readonly';
+    typeAnnotation?: TypeNode;
+}
+export interface TSTypeParameter extends BaseNode {
+    type: AST_NODE_TYPES.TSTypeParameter;
+    name: Identifier;
+    constraint?: TypeNode;
+    default?: TypeNode;
+}
+export interface TSTypeParameterDeclaration extends BaseNode {
+    type: AST_NODE_TYPES.TSTypeParameterDeclaration;
+    params: TSTypeParameter[];
+}
+export interface TSTypeParameterInstantiation extends BaseNode {
+    type: AST_NODE_TYPES.TSTypeParameterInstantiation;
+    params: TypeNode[];
+}
+export interface TSTypePredicate extends BaseNode {
+    type: AST_NODE_TYPES.TSTypePredicate;
+    asserts: boolean;
+    parameterName: Identifier | TSThisType;
+    typeAnnotation: TSTypeAnnotation | null;
+}
+export interface TSTypeQuery extends BaseNode {
+    type: AST_NODE_TYPES.TSTypeQuery;
+    exprName: EntityName;
+}
+export interface TSTypeReference extends BaseNode {
+    type: AST_NODE_TYPES.TSTypeReference;
+    typeName: EntityName;
+    typeParameters?: TSTypeParameterInstantiation;
+}
+export interface TSUndefinedKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSUndefinedKeyword;
+}
+export interface TSUnionType extends BaseNode {
+    type: AST_NODE_TYPES.TSUnionType;
+    types: TypeNode[];
+}
+export interface TSUnknownKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSUnknownKeyword;
+}
+export interface TSVoidKeyword extends BaseNode {
+    type: AST_NODE_TYPES.TSVoidKeyword;
+}
+export interface UpdateExpression extends UnaryExpressionBase {
+    type: AST_NODE_TYPES.UpdateExpression;
+    operator: '++' | '--';
+}
+export interface UnaryExpression extends UnaryExpressionBase {
+    type: AST_NODE_TYPES.UnaryExpression;
+    operator: '+' | '-' | '!' | '~' | 'delete' | 'void' | 'typeof';
+}
+export interface VariableDeclaration extends BaseNode {
+    type: AST_NODE_TYPES.VariableDeclaration;
+    declarations: VariableDeclarator[];
+    kind: 'let' | 'const' | 'var';
+    declare?: boolean;
+}
+export interface VariableDeclarator extends BaseNode {
+    type: AST_NODE_TYPES.VariableDeclarator;
+    id: BindingName;
+    init: Expression | null;
+    definite?: boolean;
+}
+export interface WhileStatement extends BaseNode {
+    type: AST_NODE_TYPES.WhileStatement;
+    test: Expression;
+    body: Statement;
+}
+export interface WithStatement extends BaseNode {
+    type: AST_NODE_TYPES.WithStatement;
+    object: Expression;
+    body: Statement;
+}
+export interface YieldExpression extends BaseNode {
+    type: AST_NODE_TYPES.YieldExpression;
+    delegate: boolean;
+    argument?: Expression;
+}
+export {};
+//# sourceMappingURL=ts-estree.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts.map b/server/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e61d5bff5f17d6cdde7adb2dfa0ecbcc92d2e946
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ts-estree.d.ts","sourceRoot":"","sources":["../src/ts-estree.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/ts-estree.js b/server/node_modules/@typescript-eslint/types/dist/ts-estree.js
new file mode 100644
index 0000000000000000000000000000000000000000..47f7a01f14d21b1fe9361df9c038b69beebc69aa
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/ts-estree.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=ts-estree.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/dist/ts-estree.js.map b/server/node_modules/@typescript-eslint/types/dist/ts-estree.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c41387a1371437f3160808306d9c128959d072d6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/dist/ts-estree.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ts-estree.js","sourceRoot":"","sources":["../src/ts-estree.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/types/package.json b/server/node_modules/@typescript-eslint/types/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..821a9d4f6b8cc9b952a1d72d9004224dd21165ab
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/types/package.json
@@ -0,0 +1,83 @@
+{
+  "_from": "@typescript-eslint/types@4.11.0",
+  "_id": "@typescript-eslint/types@4.11.0",
+  "_inBundle": false,
+  "_integrity": "sha512-XXOdt/NPX++txOQHM1kUMgJUS43KSlXGdR/aDyEwuAEETwuPt02Nc7v+s57PzuSqMbNLclblQdv3YcWOdXhQ7g==",
+  "_location": "/@typescript-eslint/types",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "@typescript-eslint/types@4.11.0",
+    "name": "@typescript-eslint/types",
+    "escapedName": "@typescript-eslint%2ftypes",
+    "scope": "@typescript-eslint",
+    "rawSpec": "4.11.0",
+    "saveSpec": null,
+    "fetchSpec": "4.11.0"
+  },
+  "_requiredBy": [
+    "/@typescript-eslint/experimental-utils",
+    "/@typescript-eslint/parser",
+    "/@typescript-eslint/scope-manager",
+    "/@typescript-eslint/typescript-estree",
+    "/@typescript-eslint/visitor-keys"
+  ],
+  "_resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.11.0.tgz",
+  "_shasum": "86cf95e7eac4ccfd183f9fcf1480cece7caf4ca4",
+  "_spec": "@typescript-eslint/types@4.11.0",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\@typescript-eslint\\experimental-utils",
+  "bugs": {
+    "url": "https://github.com/typescript-eslint/typescript-eslint/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Types for the TypeScript-ESTree AST spec",
+  "engines": {
+    "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+  },
+  "files": [
+    "dist",
+    "package.json",
+    "README.md",
+    "LICENSE"
+  ],
+  "funding": {
+    "type": "opencollective",
+    "url": "https://opencollective.com/typescript-eslint"
+  },
+  "gitHead": "e8f73e168a89ff9a84038e760a667b646ede5956",
+  "homepage": "https://github.com/typescript-eslint/typescript-eslint#readme",
+  "keywords": [
+    "eslint",
+    "typescript",
+    "estree"
+  ],
+  "license": "MIT",
+  "main": "dist/index.js",
+  "name": "@typescript-eslint/types",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/typescript-eslint/typescript-eslint.git",
+    "directory": "packages/visitor-keys"
+  },
+  "scripts": {
+    "build": "tsc -b tsconfig.build.json",
+    "clean": "tsc -b tsconfig.build.json --clean",
+    "format": "prettier --write \"./**/*.{ts,js,json,md}\" --ignore-path ../../.prettierignore",
+    "generate:lib": "../../node_modules/.bin/ts-node --files --transpile-only ../scope-manager/tools/generate-lib.ts",
+    "lint": "eslint . --ext .js,.ts --ignore-path='../../.eslintignore'",
+    "postbuild": "downlevel-dts dist _ts3.4/dist",
+    "postclean": "rimraf dist",
+    "typecheck": "tsc -p tsconfig.json --noEmit"
+  },
+  "types": "dist/index.d.ts",
+  "typesVersions": {
+    "<3.8": {
+      "*": [
+        "_ts3.4/*"
+      ]
+    }
+  },
+  "version": "4.11.0"
+}
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/CHANGELOG.md b/server/node_modules/@typescript-eslint/typescript-estree/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..9bffc55af0d80b98c3cb40d133ce18bb3d296935
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/CHANGELOG.md
@@ -0,0 +1,1071 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [4.11.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.10.0...v4.11.0) (2020-12-21)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [4.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.9.1...v4.10.0) (2020-12-14)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+## [4.9.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.9.0...v4.9.1) (2020-12-07)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [4.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.2...v4.9.0) (2020-11-30)
+
+
+### Bug Fixes
+
+* **typescript-estree:** add default value for `parserOptions.projectFolderIgnoreList` and deduplicate resolved projects ([#2819](https://github.com/typescript-eslint/typescript-eslint/issues/2819)) ([bf904ec](https://github.com/typescript-eslint/typescript-eslint/commit/bf904ec72db57174fec531f61e9427230662553e)), closes [#2418](https://github.com/typescript-eslint/typescript-eslint/issues/2418) [#2814](https://github.com/typescript-eslint/typescript-eslint/issues/2814)
+
+
+
+
+
+## [4.8.2](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.1...v4.8.2) (2020-11-23)
+
+
+### Bug Fixes
+
+* **typescript-estree:** fix type-only regression for consumers not yet on TS 4.1 ([#2789](https://github.com/typescript-eslint/typescript-eslint/issues/2789)) ([50a46c6](https://github.com/typescript-eslint/typescript-eslint/commit/50a46c60fb81d8434aa4268a13d17d8fcf499e21))
+
+
+
+
+
+## [4.8.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.0...v4.8.1) (2020-11-17)
+
+
+### Bug Fixes
+
+* **typescript-estree:** parseWithNodeMaps returning empty maps ([#2773](https://github.com/typescript-eslint/typescript-eslint/issues/2773)) ([3e4a0ed](https://github.com/typescript-eslint/typescript-eslint/commit/3e4a0ed0d615fd22a2f28c7c8af6179673e195f8))
+
+
+
+
+
+# [4.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.7.0...v4.8.0) (2020-11-16)
+
+
+### Features
+
+* **typescript-estree:** add `parseWithNodeMaps` API ([#2760](https://github.com/typescript-eslint/typescript-eslint/issues/2760)) ([9441d50](https://github.com/typescript-eslint/typescript-eslint/commit/9441d5030211f1c32f5ae8e61d5565cab8bb6823)), closes [#1852](https://github.com/typescript-eslint/typescript-eslint/issues/1852)
+
+
+
+
+
+# [4.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.6.1...v4.7.0) (2020-11-09)
+
+
+### Features
+
+* support TS4.1 features ([#2748](https://github.com/typescript-eslint/typescript-eslint/issues/2748)) ([2be354b](https://github.com/typescript-eslint/typescript-eslint/commit/2be354bb15f9013a2da1b13a0c0836e9ef057e16)), closes [#2583](https://github.com/typescript-eslint/typescript-eslint/issues/2583)
+
+
+
+
+
+## [4.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.6.0...v4.6.1) (2020-11-02)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [4.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.5.0...v4.6.0) (2020-10-26)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [4.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.4.1...v4.5.0) (2020-10-19)
+
+
+### Features
+
+* **typescript-estree:** add flag EXPERIMENTAL_useSourceOfProjectReferenceRedirect ([#2669](https://github.com/typescript-eslint/typescript-eslint/issues/2669)) ([90a5878](https://github.com/typescript-eslint/typescript-eslint/commit/90a587845088da1b205e4d7d77dbc3f9447b1c5a))
+
+
+
+
+
+## [4.4.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.4.0...v4.4.1) (2020-10-12)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [4.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.3.0...v4.4.0) (2020-10-05)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [4.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.2.0...v4.3.0) (2020-09-28)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [4.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.1.1...v4.2.0) (2020-09-21)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+## [4.1.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.1.0...v4.1.1) (2020-09-14)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [4.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.0.1...v4.1.0) (2020-09-07)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+## [4.0.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.0.0...v4.0.1) (2020-08-31)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [4.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.10.1...v4.0.0) (2020-08-31)
+
+
+### Bug Fixes
+
+* correct decorator traversal for AssignmentPattern ([#2375](https://github.com/typescript-eslint/typescript-eslint/issues/2375)) ([d738fa4](https://github.com/typescript-eslint/typescript-eslint/commit/d738fa4eff0a5c4cfc9b30b1c0502f8d1e78d7b6))
+* **typescript-estree:** correct ChainExpression interaction with parentheses and non-nulls ([#2380](https://github.com/typescript-eslint/typescript-eslint/issues/2380)) ([762bc99](https://github.com/typescript-eslint/typescript-eslint/commit/762bc99584ede4d0b8099a743991e957aec86aa8))
+
+
+### Features
+
+* support ESTree optional chaining representation ([#2308](https://github.com/typescript-eslint/typescript-eslint/issues/2308)) ([e9d2ab6](https://github.com/typescript-eslint/typescript-eslint/commit/e9d2ab638b6767700b52797e74b814ea059beaae))
+* **typescript-estree:** switch to globby ([#2418](https://github.com/typescript-eslint/typescript-eslint/issues/2418)) ([3a7ec9b](https://github.com/typescript-eslint/typescript-eslint/commit/3a7ec9bcf1873a99c6da2f19ade8ab4763b4793c)), closes [#2398](https://github.com/typescript-eslint/typescript-eslint/issues/2398)
+
+
+### BREAKING CHANGES
+
+* **typescript-estree:** - removes the ability to supply a `RegExp` to `projectFolderIgnoreList`, and changes the meaning of the string value from a regex to a glob.
+* - Removed decorators property from several Nodes that could never semantically have them (FunctionDeclaration, TSEnumDeclaration, and TSInterfaceDeclaration)
+- Removed AST_NODE_TYPES.Import. This is a minor breaking change as the node type that used this was removed ages ago.
+
+
+
+
+
+## [3.10.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.10.0...v3.10.1) (2020-08-25)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [3.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.9.1...v3.10.0) (2020-08-24)
+
+
+### Bug Fixes
+
+* **typescript-estree:** ts.NamedTupleMember workaround for <TS4.0 ([#2405](https://github.com/typescript-eslint/typescript-eslint/issues/2405)) ([b62331a](https://github.com/typescript-eslint/typescript-eslint/commit/b62331ad02dcff3236e18f10eb92d59e7371d4c3))
+
+
+### Features
+
+* **typescript-estree:** update allowed TS version range ([#2419](https://github.com/typescript-eslint/typescript-eslint/issues/2419)) ([e6be621](https://github.com/typescript-eslint/typescript-eslint/commit/e6be62128b3a98541fe590512892c4b501914e46))
+
+
+
+
+
+## [3.9.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.9.0...v3.9.1) (2020-08-17)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [3.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.8.0...v3.9.0) (2020-08-10)
+
+
+### Features
+
+* **typescript-estree:** support TSv4 labelled tuple members ([#2378](https://github.com/typescript-eslint/typescript-eslint/issues/2378)) ([00d84ff](https://github.com/typescript-eslint/typescript-eslint/commit/00d84ffbcbe9d0ec98bdb2f2ce59959a27ce4dbe))
+
+
+
+
+
+# [3.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.7.1...v3.8.0) (2020-08-03)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+## [3.7.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.7.0...v3.7.1) (2020-07-27)
+
+
+### Bug Fixes
+
+* **typescript-estree:** correct AST regression introduced by TS4.0 upgrade ([#2316](https://github.com/typescript-eslint/typescript-eslint/issues/2316)) ([d7fefba](https://github.com/typescript-eslint/typescript-eslint/commit/d7fefba3741a526ff2b58dd713995c3ee5603962))
+
+
+
+
+
+# [3.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.6.1...v3.7.0) (2020-07-20)
+
+
+### Features
+
+* **typescript-estree:** support short-circuiting assignment operators ([#2307](https://github.com/typescript-eslint/typescript-eslint/issues/2307)) ([2c90d9f](https://github.com/typescript-eslint/typescript-eslint/commit/2c90d9fa3aa5ebd7db697dddb7762bca2dd0e06b))
+* **typescript-estree:** support type annotations on catch clauses ([#2306](https://github.com/typescript-eslint/typescript-eslint/issues/2306)) ([b5afe9c](https://github.com/typescript-eslint/typescript-eslint/commit/b5afe9c560b9f38c8dffc312a600db30944129c8))
+
+
+
+
+
+## [3.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.6.0...v3.6.1) (2020-07-13)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [3.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.5.0...v3.6.0) (2020-07-06)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [3.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.4.0...v3.5.0) (2020-06-29)
+
+
+### Bug Fixes
+
+* **typescript-estree:** forward compatibility for new compound assignment operators ([#2253](https://github.com/typescript-eslint/typescript-eslint/issues/2253)) ([ba41680](https://github.com/typescript-eslint/typescript-eslint/commit/ba41680f2a25b1aa4d05c2d4b132ac73a6faefbd))
+
+
+### Features
+
+* add package scope-manager ([#1939](https://github.com/typescript-eslint/typescript-eslint/issues/1939)) ([682eb7e](https://github.com/typescript-eslint/typescript-eslint/commit/682eb7e009c3f22a542882dfd3602196a60d2a1e))
+* split types into their own package ([#2229](https://github.com/typescript-eslint/typescript-eslint/issues/2229)) ([5f45918](https://github.com/typescript-eslint/typescript-eslint/commit/5f4591886f3438329fbf2229b03ac66174334a24))
+* split visitor keys into their own package ([#2230](https://github.com/typescript-eslint/typescript-eslint/issues/2230)) ([689dae3](https://github.com/typescript-eslint/typescript-eslint/commit/689dae37392d527c64ae83db2a4c3e6b7fecece7))
+
+
+
+
+
+# [3.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.3.0...v3.4.0) (2020-06-22)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [3.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.2.0...v3.3.0) (2020-06-15)
+
+
+### Bug Fixes
+
+* **typescript-estree:** handle TS4.0 breaking change in TupleType ([#2197](https://github.com/typescript-eslint/typescript-eslint/issues/2197)) ([5d68129](https://github.com/typescript-eslint/typescript-eslint/commit/5d6812914831a386997b453b4db1e3283e26005d))
+
+
+
+
+
+# [3.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.1.0...v3.2.0) (2020-06-08)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [prefer-optional-chain] handling first member expression ([#2156](https://github.com/typescript-eslint/typescript-eslint/issues/2156)) ([de18660](https://github.com/typescript-eslint/typescript-eslint/commit/de18660a8cf8f7033798646d8c5b0938d1accb12))
+
+
+
+
+
+# [3.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.0.2...v3.1.0) (2020-06-01)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-unused-expressions] ignore import expressions ([#2130](https://github.com/typescript-eslint/typescript-eslint/issues/2130)) ([e383691](https://github.com/typescript-eslint/typescript-eslint/commit/e3836910efdafd9edf04daed149c9e839c08047e))
+* **experimental-utils:** downlevel type declarations for versions older than 3.8 ([#2133](https://github.com/typescript-eslint/typescript-eslint/issues/2133)) ([7925823](https://github.com/typescript-eslint/typescript-eslint/commit/792582326a8065270b69a0ffcaad5a7b4b103ff3))
+
+
+
+
+
+## [3.0.2](https://github.com/typescript-eslint/typescript-eslint/compare/v3.0.1...v3.0.2) (2020-05-27)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+## [3.0.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.0.0...v3.0.1) (2020-05-25)
+
+
+### Bug Fixes
+
+* **typescript-estree:** handle `BigInt` with `_` numeric separator ([#2067](https://github.com/typescript-eslint/typescript-eslint/issues/2067)) ([66f1627](https://github.com/typescript-eslint/typescript-eslint/commit/66f1627b11a566d5b925a577e800f99d5c808be2))
+* **typescript-estree:** mark TS 3.8 and 3.9 as "supported" ([#2057](https://github.com/typescript-eslint/typescript-eslint/issues/2057)) ([5eedbff](https://github.com/typescript-eslint/typescript-eslint/commit/5eedbff01178ea33b98ab22e556df4c1a195f839)), closes [#1436](https://github.com/typescript-eslint/typescript-eslint/issues/1436) [#1436](https://github.com/typescript-eslint/typescript-eslint/issues/1436)
+
+
+
+
+
+# [3.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.34.0...v3.0.0) (2020-05-21)
+
+## [Please see the release notes for v3.0.0](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v3.0.0)
+
+### Bug Fixes
+
+* **typescript-estree:** remove now defunct `Import` node type ([f199cbd](https://github.com/typescript-eslint/typescript-eslint/commit/f199cbdbbd892b5ba03bfff66f463f3d9c92ee9b))
+* **typescript-estree:** use `TSEmptyBodyFunctionExpression` for body-less nodes ([#1289](https://github.com/typescript-eslint/typescript-eslint/issues/1289)) ([82e7163](https://github.com/typescript-eslint/typescript-eslint/commit/82e7163214b56ccde93ba97807b161669a50a60b))
+
+
+### Features
+
+* add index files to parser and typescript-estree ([3dfc46d](https://github.com/typescript-eslint/typescript-eslint/commit/3dfc46dccbbd28eed2d74c7b6cacddf1a0848598))
+* bump minimum required TS version ([#2004](https://github.com/typescript-eslint/typescript-eslint/issues/2004)) ([7ad4d7c](https://github.com/typescript-eslint/typescript-eslint/commit/7ad4d7c2db088b6f779b9d883a4acad13eee3775))
+* **eslint-plugin:** [ban-types] rework default options ([#848](https://github.com/typescript-eslint/typescript-eslint/issues/848)) ([8e31d5d](https://github.com/typescript-eslint/typescript-eslint/commit/8e31d5dbe9fe5227fdbefcecfd50ce5dd51360c3))
+* **typescript-estree:** align nodes with estree 2020 ([#1389](https://github.com/typescript-eslint/typescript-eslint/issues/1389)) ([aff5b62](https://github.com/typescript-eslint/typescript-eslint/commit/aff5b62044f9b93f2087a1d261e9be3f8d6fd54d))
+* **typescript-estree:** align optional fields ([#1429](https://github.com/typescript-eslint/typescript-eslint/issues/1429)) ([0e0010f](https://github.com/typescript-eslint/typescript-eslint/commit/0e0010f82952f9beeeb84136eea00cc5eecc9db6))
+* drop support for node v8 ([#1997](https://github.com/typescript-eslint/typescript-eslint/issues/1997)) ([b6c3b7b](https://github.com/typescript-eslint/typescript-eslint/commit/b6c3b7b84b8d199fa75a46432febd4a364a63217))
+* **typescript-estree:** always return parserServices ([#716](https://github.com/typescript-eslint/typescript-eslint/issues/716)) ([5b23443](https://github.com/typescript-eslint/typescript-eslint/commit/5b23443c48f3f62424db3e742243f3568080b946))
+* **typescript-estree:** handle 3.9's non-null assertion changes ([#2036](https://github.com/typescript-eslint/typescript-eslint/issues/2036)) ([06bec63](https://github.com/typescript-eslint/typescript-eslint/commit/06bec63c56536db070608ab136d2ad57083f0c6a))
+
+
+
+
+
+# [2.34.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.33.0...v2.34.0) (2020-05-18)
+
+
+### Bug Fixes
+
+* **typescript-estree:** fix handling of range/loc removal ([#2028](https://github.com/typescript-eslint/typescript-eslint/issues/2028)) ([ce344d9](https://github.com/typescript-eslint/typescript-eslint/commit/ce344d90e7c78b0c4b4b823494a3e78190f45c64))
+
+
+
+
+
+# [2.33.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.32.0...v2.33.0) (2020-05-12)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [2.32.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.31.0...v2.32.0) (2020-05-11)
+
+
+### Features
+
+* bump dependencies and align AST ([#2007](https://github.com/typescript-eslint/typescript-eslint/issues/2007)) ([18668b7](https://github.com/typescript-eslint/typescript-eslint/commit/18668b78fd7d1e5281af7fc26c76e0ca53297f69))
+
+
+
+
+
+# [2.31.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.30.0...v2.31.0) (2020-05-04)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [2.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.29.0...v2.30.0) (2020-04-27)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [2.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.28.0...v2.29.0) (2020-04-20)
+
+
+### Features
+
+* **eslint-plugin:** [no-floating-promise] add option to ignore IIFEs ([#1799](https://github.com/typescript-eslint/typescript-eslint/issues/1799)) ([cea51bf](https://github.com/typescript-eslint/typescript-eslint/commit/cea51bf130d6d3c2935f5e2dcc468196f2ad9d00))
+
+
+
+
+
+# [2.28.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.27.0...v2.28.0) (2020-04-13)
+
+
+### Features
+
+* **eslint-plugin:** add rule `prefer-ts-expect-error` ([#1705](https://github.com/typescript-eslint/typescript-eslint/issues/1705)) ([7021f21](https://github.com/typescript-eslint/typescript-eslint/commit/7021f2151a25db2a8edf17e06cd6f21e90761ec8))
+* **eslint-plugin:** add rule no-unsafe-assignment ([#1694](https://github.com/typescript-eslint/typescript-eslint/issues/1694)) ([a49b860](https://github.com/typescript-eslint/typescript-eslint/commit/a49b860cbbb2c7d718b99f561e2fb6eaadf16f17))
+
+
+
+
+
+# [2.27.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.26.0...v2.27.0) (2020-04-06)
+
+
+### Bug Fixes
+
+* **typescript-estree:** add support for TS3.9 extra file extensions ([#1833](https://github.com/typescript-eslint/typescript-eslint/issues/1833)) ([1f0ff41](https://github.com/typescript-eslint/typescript-eslint/commit/1f0ff41aa1bc3b7c5330b2f5fe22e24bf578a6b2))
+
+
+### Features
+
+* **eslint-plugin:** sort members alphabetically ([#263](https://github.com/typescript-eslint/typescript-eslint/issues/263)) ([485e902](https://github.com/typescript-eslint/typescript-eslint/commit/485e90213a0f8baac0587f7d56925448883fc5bd))
+
+
+
+
+
+# [2.26.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.25.0...v2.26.0) (2020-03-30)
+
+
+### Features
+
+* **typescript-estree:** add option to ignore certain folders from glob resolution ([#1802](https://github.com/typescript-eslint/typescript-eslint/issues/1802)) ([1e29e69](https://github.com/typescript-eslint/typescript-eslint/commit/1e29e69b289d61107a7de67592beae331ba50222))
+
+
+
+
+
+# [2.25.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.24.0...v2.25.0) (2020-03-23)
+
+
+### Bug Fixes
+
+* **typescript-estree:** export * regression from 133f622f ([#1751](https://github.com/typescript-eslint/typescript-eslint/issues/1751)) ([09d8afc](https://github.com/typescript-eslint/typescript-eslint/commit/09d8afca684635b5ac604bc1794240484a70ce91))
+
+
+
+
+
+# [2.24.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.23.0...v2.24.0) (2020-03-16)
+
+
+### Bug Fixes
+
+* **typescript-estree:** unnecessary program updates by removing timeout methods ([#1693](https://github.com/typescript-eslint/typescript-eslint/issues/1693)) ([2ccd66b](https://github.com/typescript-eslint/typescript-eslint/commit/2ccd66b920816d54cc1a639059f60410df665900))
+
+
+### Features
+
+* **typescript-estree:** support 3.8 `export * as ns` ([#1698](https://github.com/typescript-eslint/typescript-eslint/issues/1698)) ([133f622](https://github.com/typescript-eslint/typescript-eslint/commit/133f622f38a286eac45288a9789d2ee529d5e582))
+
+
+
+
+
+# [2.23.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.22.0...v2.23.0) (2020-03-09)
+
+
+### Features
+
+* **typescript-estree:** support 3.8 import/export type ([#1697](https://github.com/typescript-eslint/typescript-eslint/issues/1697)) ([625d603](https://github.com/typescript-eslint/typescript-eslint/commit/625d603f94bf0521f834313bf31c734ce4948b7a))
+
+
+
+
+
+# [2.22.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.21.0...v2.22.0) (2020-03-02)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [2.21.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.20.0...v2.21.0) (2020-02-24)
+
+
+### Bug Fixes
+
+* **typescript-estree:** process.stdout can be undefined ([#1619](https://github.com/typescript-eslint/typescript-eslint/issues/1619)) ([0d8e87e](https://github.com/typescript-eslint/typescript-eslint/commit/0d8e87e09704588273bc94a740279b3e8af7474f))
+
+
+
+
+
+# [2.20.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.19.2...v2.20.0) (2020-02-17)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+## [2.19.2](https://github.com/typescript-eslint/typescript-eslint/compare/v2.19.1...v2.19.2) (2020-02-10)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+## [2.19.1](https://github.com/typescript-eslint/typescript-eslint/compare/v2.19.0...v2.19.1) (2020-02-10)
+
+
+### Bug Fixes
+
+* **typescript-estree:** ts returning wrong file with project references ([#1575](https://github.com/typescript-eslint/typescript-eslint/issues/1575)) ([4c12dac](https://github.com/typescript-eslint/typescript-eslint/commit/4c12dac075f774801a145cd29c4c7eff64f98fdc))
+
+
+
+
+
+# [2.19.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.18.0...v2.19.0) (2020-02-03)
+
+
+### Bug Fixes
+
+* **typescript-estree:** fix regression introduced in [#1525](https://github.com/typescript-eslint/typescript-eslint/issues/1525) ([#1543](https://github.com/typescript-eslint/typescript-eslint/issues/1543)) ([bec4572](https://github.com/typescript-eslint/typescript-eslint/commit/bec45722dfed8aeb49189d151252b83d4a34239c))
+* **typescript-estree:** persisted parse and module none ([#1516](https://github.com/typescript-eslint/typescript-eslint/issues/1516)) ([7c70323](https://github.com/typescript-eslint/typescript-eslint/commit/7c7032322f55d9492e21d3bfa5da16da1f05cbce))
+
+
+
+
+
+# [2.18.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.17.0...v2.18.0) (2020-01-27)
+
+
+### Bug Fixes
+
+* improve token types and add missing type guards ([#1497](https://github.com/typescript-eslint/typescript-eslint/issues/1497)) ([ce41d7d](https://github.com/typescript-eslint/typescript-eslint/commit/ce41d7de33bcb7ccf96c03ac1438304c5a49ff54))
+* **typescript-estree:** error on unexpected jsdoc nodes ([#1525](https://github.com/typescript-eslint/typescript-eslint/issues/1525)) ([c8dfac3](https://github.com/typescript-eslint/typescript-eslint/commit/c8dfac3d2f066e50fa9d2b5a86beffdaafddb643))
+* **typescript-estree:** fix identifier tokens typed as `Keyword` ([#1487](https://github.com/typescript-eslint/typescript-eslint/issues/1487)) ([77a1caa](https://github.com/typescript-eslint/typescript-eslint/commit/77a1caa562638645b4717449800e410107d512c8))
+
+
+### Features
+
+* **eslint-plugin:** add new rule prefer-as-const ([#1431](https://github.com/typescript-eslint/typescript-eslint/issues/1431)) ([420db96](https://github.com/typescript-eslint/typescript-eslint/commit/420db96921435e8bf7fb484ae74552a912a6adde))
+
+
+
+
+
+# [2.17.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.16.0...v2.17.0) (2020-01-20)
+
+
+### Bug Fixes
+
+* **typescript-estree:** correct type of `ArrayPattern.elements` ([#1451](https://github.com/typescript-eslint/typescript-eslint/issues/1451)) ([62e4ca0](https://github.com/typescript-eslint/typescript-eslint/commit/62e4ca0))
+
+
+
+
+
+# [2.16.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.15.0...v2.16.0) (2020-01-13)
+
+
+### Bug Fixes
+
+* **typescript-estree:** fix persisted parse for relative paths ([#1424](https://github.com/typescript-eslint/typescript-eslint/issues/1424)) ([9720d2c](https://github.com/typescript-eslint/typescript-eslint/commit/9720d2c))
+* **typescript-estree:** parsing of deeply nested new files in new folder ([#1412](https://github.com/typescript-eslint/typescript-eslint/issues/1412)) ([206c94b](https://github.com/typescript-eslint/typescript-eslint/commit/206c94b))
+* **typescript-estree:** resolve path relative to tsconfigRootDir ([#1439](https://github.com/typescript-eslint/typescript-eslint/issues/1439)) ([c709056](https://github.com/typescript-eslint/typescript-eslint/commit/c709056))
+
+
+### Features
+
+* **typescript-estree:** add parserOption to turn on debug logs ([#1413](https://github.com/typescript-eslint/typescript-eslint/issues/1413)) ([25092fd](https://github.com/typescript-eslint/typescript-eslint/commit/25092fd))
+* **typescript-estree:** add strict type mapping to esTreeNodeToTSNodeMap ([#1382](https://github.com/typescript-eslint/typescript-eslint/issues/1382)) ([d3d70a3](https://github.com/typescript-eslint/typescript-eslint/commit/d3d70a3))
+
+
+
+
+
+# [2.15.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.14.0...v2.15.0) (2020-01-06)
+
+
+### Bug Fixes
+
+* **typescript-estree:** correct persisted parse for windows ([#1406](https://github.com/typescript-eslint/typescript-eslint/issues/1406)) ([1a42f3d](https://github.com/typescript-eslint/typescript-eslint/commit/1a42f3d))
+
+
+
+
+
+# [2.14.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.13.0...v2.14.0) (2019-12-30)
+
+
+### Bug Fixes
+
+* **typescript-estree:** visit typeParameters in OptionalCallExpr ([#1377](https://github.com/typescript-eslint/typescript-eslint/issues/1377)) ([cba6a2a](https://github.com/typescript-eslint/typescript-eslint/commit/cba6a2a))
+
+
+### Features
+
+* add internal eslint plugin for repo-specific lint rules ([#1373](https://github.com/typescript-eslint/typescript-eslint/issues/1373)) ([3a15413](https://github.com/typescript-eslint/typescript-eslint/commit/3a15413))
+
+
+
+
+
+# [2.13.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.12.0...v2.13.0) (2019-12-23)
+
+
+### Bug Fixes
+
+* **typescript-estree:** correct type of key for base nodes ([#1367](https://github.com/typescript-eslint/typescript-eslint/issues/1367)) ([099225a](https://github.com/typescript-eslint/typescript-eslint/commit/099225a))
+
+
+### Features
+
+* **typescript-estree:** computed members discriminated unions ([#1349](https://github.com/typescript-eslint/typescript-eslint/issues/1349)) ([013df9a](https://github.com/typescript-eslint/typescript-eslint/commit/013df9a))
+* **typescript-estree:** tighten prop name and destructure types ([#1346](https://github.com/typescript-eslint/typescript-eslint/issues/1346)) ([f335c50](https://github.com/typescript-eslint/typescript-eslint/commit/f335c50))
+
+
+
+
+
+# [2.12.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.11.0...v2.12.0) (2019-12-16)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [2.11.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.10.0...v2.11.0) (2019-12-09)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [2.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.9.0...v2.10.0) (2019-12-02)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-unused-expressions] ignore directives ([#1285](https://github.com/typescript-eslint/typescript-eslint/issues/1285)) ([ce4c803](https://github.com/typescript-eslint/typescript-eslint/commit/ce4c803))
+* **typescript-estree:** make FunctionDeclaration.body non-null ([#1288](https://github.com/typescript-eslint/typescript-eslint/issues/1288)) ([dc73510](https://github.com/typescript-eslint/typescript-eslint/commit/dc73510))
+
+
+
+
+
+# [2.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.8.0...v2.9.0) (2019-11-25)
+
+
+### Bug Fixes
+
+* **typescript-estree:** fix synthetic default import ([#1245](https://github.com/typescript-eslint/typescript-eslint/issues/1245)) ([d97f809](https://github.com/typescript-eslint/typescript-eslint/commit/d97f809))
+
+
+### Features
+
+* **eslint-plugin:** add no-unused-vars-experimental ([#688](https://github.com/typescript-eslint/typescript-eslint/issues/688)) ([05ebea5](https://github.com/typescript-eslint/typescript-eslint/commit/05ebea5))
+
+
+
+
+
+# [2.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.7.0...v2.8.0) (2019-11-18)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [unified-signatures] crash: cannot read pro… ([#1096](https://github.com/typescript-eslint/typescript-eslint/issues/1096)) ([d1de3a7](https://github.com/typescript-eslint/typescript-eslint/commit/d1de3a7))
+* **typescript-estree:** correctly account for trailing slash in… ([#1205](https://github.com/typescript-eslint/typescript-eslint/issues/1205)) ([ba89168](https://github.com/typescript-eslint/typescript-eslint/commit/ba89168))
+* **typescript-estree:** options range loc being always true ([#704](https://github.com/typescript-eslint/typescript-eslint/issues/704)) ([db1aa18](https://github.com/typescript-eslint/typescript-eslint/commit/db1aa18))
+
+
+
+
+
+# [2.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.6.1...v2.7.0) (2019-11-11)
+
+
+### Bug Fixes
+
+* **typescript-estree:** hash code to reduce update frequency ([#1179](https://github.com/typescript-eslint/typescript-eslint/issues/1179)) ([96d1cc3](https://github.com/typescript-eslint/typescript-eslint/commit/96d1cc3))
+* **typescript-estree:** reduce bundle footprint of tsutils ([#1177](https://github.com/typescript-eslint/typescript-eslint/issues/1177)) ([c8fe515](https://github.com/typescript-eslint/typescript-eslint/commit/c8fe515))
+
+
+
+
+
+## [2.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v2.6.0...v2.6.1) (2019-11-04)
+
+
+### Bug Fixes
+
+* **typescript-estree:** don't use typescript's synthetic default ([#1156](https://github.com/typescript-eslint/typescript-eslint/issues/1156)) ([17c956e](https://github.com/typescript-eslint/typescript-eslint/commit/17c956e)), closes [#1153](https://github.com/typescript-eslint/typescript-eslint/issues/1153)
+* **typescript-estree:** fix filename handling for vue JSX + markdown ([#1127](https://github.com/typescript-eslint/typescript-eslint/issues/1127)) ([366518f](https://github.com/typescript-eslint/typescript-eslint/commit/366518f))
+* **typescript-estree:** improve comment parsing code ([#1120](https://github.com/typescript-eslint/typescript-eslint/issues/1120)) ([e54998d](https://github.com/typescript-eslint/typescript-eslint/commit/e54998d))
+
+
+
+
+
+# [2.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.5.0...v2.6.0) (2019-10-28)
+
+
+### Bug Fixes
+
+* **parser:** adds TTY check before logging the version mismatch warning ([#1121](https://github.com/typescript-eslint/typescript-eslint/issues/1121)) ([768ef63](https://github.com/typescript-eslint/typescript-eslint/commit/768ef63))
+* **typescript-estree:** better handle canonical paths ([#1111](https://github.com/typescript-eslint/typescript-eslint/issues/1111)) ([8dcbf4c](https://github.com/typescript-eslint/typescript-eslint/commit/8dcbf4c))
+* **typescript-estree:** correct parenthesized optional chain AST ([#1141](https://github.com/typescript-eslint/typescript-eslint/issues/1141)) ([5ae286e](https://github.com/typescript-eslint/typescript-eslint/commit/5ae286e))
+* **typescript-estree:** ensure parent pointers are set ([#1129](https://github.com/typescript-eslint/typescript-eslint/issues/1129)) ([d4703e1](https://github.com/typescript-eslint/typescript-eslint/commit/d4703e1))
+* **typescript-estree:** normalize paths to fix cache miss on windows ([#1128](https://github.com/typescript-eslint/typescript-eslint/issues/1128)) ([6d0f2ce](https://github.com/typescript-eslint/typescript-eslint/commit/6d0f2ce))
+
+
+### Features
+
+* **typescript-estree:** add support for declare class properties ([#1136](https://github.com/typescript-eslint/typescript-eslint/issues/1136)) ([1508670](https://github.com/typescript-eslint/typescript-eslint/commit/1508670))
+
+
+
+
+
+# [2.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.4.0...v2.5.0) (2019-10-21)
+
+
+### Bug Fixes
+
+* **typescript-estree:** correct semver check range ([#1109](https://github.com/typescript-eslint/typescript-eslint/issues/1109)) ([2fc9bd2](https://github.com/typescript-eslint/typescript-eslint/commit/2fc9bd2))
+* **typescript-estree:** handle running out of fs watchers ([#1088](https://github.com/typescript-eslint/typescript-eslint/issues/1088)) ([ec62747](https://github.com/typescript-eslint/typescript-eslint/commit/ec62747))
+* **typescript-estree:** parsing error for vue sfc ([#1083](https://github.com/typescript-eslint/typescript-eslint/issues/1083)) ([7a8cce6](https://github.com/typescript-eslint/typescript-eslint/commit/7a8cce6))
+* **typescript-estree:** remove now unneeded dep on chokidar ([088a691](https://github.com/typescript-eslint/typescript-eslint/commit/088a691))
+
+
+### Features
+
+* **typescript-estree:** support long running lint without watch ([#1106](https://github.com/typescript-eslint/typescript-eslint/issues/1106)) ([ed5564d](https://github.com/typescript-eslint/typescript-eslint/commit/ed5564d))
+
+
+
+
+
+# [2.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.3...v2.4.0) (2019-10-14)
+
+
+### Bug Fixes
+
+* support long running "watch" lint sessions ([#973](https://github.com/typescript-eslint/typescript-eslint/issues/973)) ([854620e](https://github.com/typescript-eslint/typescript-eslint/commit/854620e))
+
+
+### Features
+
+* **typescript-estree:** support for parsing 3.7 features ([#1045](https://github.com/typescript-eslint/typescript-eslint/issues/1045)) ([623febf](https://github.com/typescript-eslint/typescript-eslint/commit/623febf))
+
+
+
+
+
+## [2.3.3](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.2...v2.3.3) (2019-10-07)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+## [2.3.2](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.1...v2.3.2) (2019-09-30)
+
+
+### Bug Fixes
+
+* **typescript-estree:** correct ClassDeclarationBase type ([#1008](https://github.com/typescript-eslint/typescript-eslint/issues/1008)) ([8ce3a81](https://github.com/typescript-eslint/typescript-eslint/commit/8ce3a81))
+* **typescript-estree:** handle optional computed prop w/o type ([#1026](https://github.com/typescript-eslint/typescript-eslint/issues/1026)) ([95c13fe](https://github.com/typescript-eslint/typescript-eslint/commit/95c13fe))
+
+
+
+
+
+## [2.3.1](https://github.com/typescript-eslint/typescript-eslint/compare/v2.3.0...v2.3.1) (2019-09-23)
+
+
+### Bug Fixes
+
+* **typescript-estree:** parsing error for await in non-async func ([#988](https://github.com/typescript-eslint/typescript-eslint/issues/988)) ([19abbe0](https://github.com/typescript-eslint/typescript-eslint/commit/19abbe0))
+
+
+
+
+
+# [2.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.2.0...v2.3.0) (2019-09-16)
+
+
+### Bug Fixes
+
+* **typescript-estree:** ImportDeclaration.specifier to Literal ([#974](https://github.com/typescript-eslint/typescript-eslint/issues/974)) ([2bf8231](https://github.com/typescript-eslint/typescript-eslint/commit/2bf8231))
+
+
+
+
+
+# [2.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.1.0...v2.2.0) (2019-09-09)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [2.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v2.0.0...v2.1.0) (2019-09-02)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [unified-signatures] type comparison and exported nodes ([#839](https://github.com/typescript-eslint/typescript-eslint/issues/839)) ([580eceb](https://github.com/typescript-eslint/typescript-eslint/commit/580eceb))
+* **typescript-estree:** improve missing project file error msg ([#866](https://github.com/typescript-eslint/typescript-eslint/issues/866)) ([8f3b0a8](https://github.com/typescript-eslint/typescript-eslint/commit/8f3b0a8)), closes [#853](https://github.com/typescript-eslint/typescript-eslint/issues/853)
+
+
+### Features
+
+* **eslint-plugin:** [no-type-alias] support tuples ([#775](https://github.com/typescript-eslint/typescript-eslint/issues/775)) ([c68e033](https://github.com/typescript-eslint/typescript-eslint/commit/c68e033))
+* **typescript-estree:** Accept a glob pattern for `options.project` ([#806](https://github.com/typescript-eslint/typescript-eslint/issues/806)) ([9e5f21e](https://github.com/typescript-eslint/typescript-eslint/commit/9e5f21e))
+
+
+
+
+
+# [2.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.13.0...v2.0.0) (2019-08-13)
+
+
+* feat(eslint-plugin)!: change recommended config (#729) ([428567d](https://github.com/typescript-eslint/typescript-eslint/commit/428567d)), closes [#729](https://github.com/typescript-eslint/typescript-eslint/issues/729)
+* feat(typescript-estree)!: throw error on file not in project when `project` set (#760) ([3777b77](https://github.com/typescript-eslint/typescript-eslint/commit/3777b77)), closes [#760](https://github.com/typescript-eslint/typescript-eslint/issues/760)
+* feat(eslint-plugin)!: add rule `consistent-type-assertions` (#731) ([92e98de](https://github.com/typescript-eslint/typescript-eslint/commit/92e98de)), closes [#731](https://github.com/typescript-eslint/typescript-eslint/issues/731)
+
+
+### Bug Fixes
+
+* **typescript-estree:** fix `is` token typed as `Keyword ([#750](https://github.com/typescript-eslint/typescript-eslint/issues/750)) ([35dec52](https://github.com/typescript-eslint/typescript-eslint/commit/35dec52))
+* **typescript-estree:** jsx comment parsing ([#703](https://github.com/typescript-eslint/typescript-eslint/issues/703)) ([0cfc48e](https://github.com/typescript-eslint/typescript-eslint/commit/0cfc48e))
+
+
+### Features
+
+* explicitly support eslint v6 ([#645](https://github.com/typescript-eslint/typescript-eslint/issues/645)) ([34a7cf6](https://github.com/typescript-eslint/typescript-eslint/commit/34a7cf6))
+
+
+### BREAKING CHANGES
+
+* recommended config changes are considered breaking
+* by default we will now throw when a file is not in the `project` provided
+* Merges both no-angle-bracket-type-assertion and no-object-literal-type-assertion into one rule
+* Node 6 is no longer supported
+
+
+
+
+
+# [1.13.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.12.0...v1.13.0) (2019-07-21)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
+# [1.12.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.11.0...v1.12.0) (2019-07-12)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** handle `const;` ([#633](https://github.com/typescript-eslint/typescript-eslint/issues/633)) ([430d628](https://github.com/typescript-eslint/typescript-eslint/commit/430d628)), closes [#441](https://github.com/typescript-eslint/typescript-eslint/issues/441)
+* **typescript-estree:** fix `async` identifier token typed as `Keyword` ([#681](https://github.com/typescript-eslint/typescript-eslint/issues/681)) ([6de19d3](https://github.com/typescript-eslint/typescript-eslint/commit/6de19d3))
+
+
+### Features
+
+* **eslint-plugin:** added new rule prefer-readonly ([#555](https://github.com/typescript-eslint/typescript-eslint/issues/555)) ([76b89a5](https://github.com/typescript-eslint/typescript-eslint/commit/76b89a5))
+
+
+
+
+
+# [1.11.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.10.2...v1.11.0) (2019-06-23)
+
+
+### Bug Fixes
+
+* **typescript-estree:** fix more cases with double slash in JSX text ([#607](https://github.com/typescript-eslint/typescript-eslint/issues/607)) ([34cfa53](https://github.com/typescript-eslint/typescript-eslint/commit/34cfa53))
+
+
+
+
+
+## [1.10.2](https://github.com/typescript-eslint/typescript-eslint/compare/v1.10.1...v1.10.2) (2019-06-10)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+## [1.10.1](https://github.com/typescript-eslint/typescript-eslint/compare/v1.10.0...v1.10.1) (2019-06-09)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+# [1.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.9.0...v1.10.0) (2019-06-09)
+
+### Bug Fixes
+
+- **eslint-plugin:** [explicit-function-return-type] Fix obj setter prop ([8c8497c](https://github.com/typescript-eslint/typescript-eslint/commit/8c8497c)), closes [#525](https://github.com/typescript-eslint/typescript-eslint/issues/525)
+- **eslint-plugin:** [no-extra-parens] Fix crash default switch case crash ([5ec2b32](https://github.com/typescript-eslint/typescript-eslint/commit/5ec2b32)), closes [#509](https://github.com/typescript-eslint/typescript-eslint/issues/509)
+- **typescript-estree:** allow expressions in ExportDefaultDeclaration ([#593](https://github.com/typescript-eslint/typescript-eslint/issues/593)) ([861844d](https://github.com/typescript-eslint/typescript-eslint/commit/861844d))
+- **typescript-estree:** stop ignoring comments in JSX with generic ([#596](https://github.com/typescript-eslint/typescript-eslint/issues/596)) ([31d5bd4](https://github.com/typescript-eslint/typescript-eslint/commit/31d5bd4))
+
+### Features
+
+- make utils/TSESLint export typed classes instead of just types ([#526](https://github.com/typescript-eslint/typescript-eslint/issues/526)) ([370ac72](https://github.com/typescript-eslint/typescript-eslint/commit/370ac72))
+- support TypeScript versions >=3.2.1 <3.6.0 ([#597](https://github.com/typescript-eslint/typescript-eslint/issues/597)) ([5d2b962](https://github.com/typescript-eslint/typescript-eslint/commit/5d2b962))
+
+# [1.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.8.0...v1.9.0) (2019-05-12)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+# [1.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.7.0...v1.8.0) (2019-05-10)
+
+### Bug Fixes
+
+- **eslint-plugin:** [array-type] support readonly operator ([#429](https://github.com/typescript-eslint/typescript-eslint/issues/429)) ([8e2d2f5](https://github.com/typescript-eslint/typescript-eslint/commit/8e2d2f5))
+- **eslint-plugin:** Support more nodes [no-extra-parens](<[#465](https://github.com/typescript-eslint/typescript-eslint/issues/465)>) ([2d15644](https://github.com/typescript-eslint/typescript-eslint/commit/2d15644))
+- **typescript-estree:** ensure parents are defined during subsequent parses ([#500](https://github.com/typescript-eslint/typescript-eslint/issues/500)) ([665278f](https://github.com/typescript-eslint/typescript-eslint/commit/665278f))
+
+### Features
+
+- **eslint-plugin:** (EXPERIMENTAL) begin indent rewrite ([#439](https://github.com/typescript-eslint/typescript-eslint/issues/439)) ([6eb97d4](https://github.com/typescript-eslint/typescript-eslint/commit/6eb97d4))
+- **eslint-plugin:** no-inferrable-types: Support more primitives ([#442](https://github.com/typescript-eslint/typescript-eslint/issues/442)) ([4e193ca](https://github.com/typescript-eslint/typescript-eslint/commit/4e193ca))
+- **ts-estree:** add preserveNodeMaps option ([#494](https://github.com/typescript-eslint/typescript-eslint/issues/494)) ([c3061f9](https://github.com/typescript-eslint/typescript-eslint/commit/c3061f9))
+- Move shared types into their own package ([#425](https://github.com/typescript-eslint/typescript-eslint/issues/425)) ([a7a03ce](https://github.com/typescript-eslint/typescript-eslint/commit/a7a03ce))
+
+# [1.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.6.0...v1.7.0) (2019-04-20)
+
+### Features
+
+- **eslint-plugin:** support type assertions in no-extra-parens rule ([#311](https://github.com/typescript-eslint/typescript-eslint/issues/311)) ([116ca75](https://github.com/typescript-eslint/typescript-eslint/commit/116ca75))
+
+# [1.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.5.0...v1.6.0) (2019-04-03)
+
+### Bug Fixes
+
+- **typescript-estree:** add ExportDefaultDeclaration to union DeclarationStatement ([#378](https://github.com/typescript-eslint/typescript-eslint/issues/378)) ([bf04398](https://github.com/typescript-eslint/typescript-eslint/commit/bf04398))
+
+### Features
+
+- change TypeScript version range to >=3.2.1 <3.5.0 ([#399](https://github.com/typescript-eslint/typescript-eslint/issues/399)) ([a4f95d3](https://github.com/typescript-eslint/typescript-eslint/commit/a4f95d3))
+
+# [1.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.4.2...v1.5.0) (2019-03-20)
+
+### Bug Fixes
+
+- **eslint-plugin:** fix false positives for adjacent-overload-signatures regarding computed property names ([#340](https://github.com/typescript-eslint/typescript-eslint/issues/340)) ([f6e5118](https://github.com/typescript-eslint/typescript-eslint/commit/f6e5118))
+- **typescript-estree:** only call watch callback on new files ([#367](https://github.com/typescript-eslint/typescript-eslint/issues/367)) ([0ef07c4](https://github.com/typescript-eslint/typescript-eslint/commit/0ef07c4))
+
+## [1.4.2](https://github.com/typescript-eslint/typescript-eslint/compare/v1.4.1...v1.4.2) (2019-02-25)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+## [1.4.1](https://github.com/typescript-eslint/typescript-eslint/compare/v1.4.0...v1.4.1) (2019-02-23)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+# [1.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.3.0...v1.4.0) (2019-02-19)
+
+### Bug Fixes
+
+- **ts-estree:** make sure that every node can be converted to tsNode ([#287](https://github.com/typescript-eslint/typescript-eslint/issues/287)) ([9f1d314](https://github.com/typescript-eslint/typescript-eslint/commit/9f1d314))
+- **typescript-estree, eslint-plugin:** stop adding ParenthesizedExpressions to node maps ([#226](https://github.com/typescript-eslint/typescript-eslint/issues/226)) ([317405a](https://github.com/typescript-eslint/typescript-eslint/commit/317405a))
+
+### Features
+
+- **eslint-plugin:** add 'no-unnecessary-qualifier' rule ([#231](https://github.com/typescript-eslint/typescript-eslint/issues/231)) ([cc8f906](https://github.com/typescript-eslint/typescript-eslint/commit/cc8f906))
+- **eslint-plugin:** Migrate plugin to ts ([#120](https://github.com/typescript-eslint/typescript-eslint/issues/120)) ([61c60dc](https://github.com/typescript-eslint/typescript-eslint/commit/61c60dc))
+- **ts-estree:** fix parsing nested sequence expressions ([#286](https://github.com/typescript-eslint/typescript-eslint/issues/286)) ([ecc9631](https://github.com/typescript-eslint/typescript-eslint/commit/ecc9631))
+
+# [1.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.2.0...v1.3.0) (2019-02-07)
+
+### Bug Fixes
+
+- **ts-estree:** align typeArguments and typeParameters across nodes ([#223](https://github.com/typescript-eslint/typescript-eslint/issues/223)) ([3306198](https://github.com/typescript-eslint/typescript-eslint/commit/3306198))
+- **ts-estree:** convert decorators on var and fn decs ([#211](https://github.com/typescript-eslint/typescript-eslint/issues/211)) ([0a1777f](https://github.com/typescript-eslint/typescript-eslint/commit/0a1777f))
+- **ts-estree:** fix issues with typeParams in FunctionExpression ([#208](https://github.com/typescript-eslint/typescript-eslint/issues/208)) ([d4dfa3b](https://github.com/typescript-eslint/typescript-eslint/commit/d4dfa3b))
+
+### Features
+
+- change TypeScript version range to >=3.2.1 <3.4.0 ([#184](https://github.com/typescript-eslint/typescript-eslint/issues/184)) ([f513a14](https://github.com/typescript-eslint/typescript-eslint/commit/f513a14))
+- **ts-estree:** enable errors 1098 and 1099 ([#219](https://github.com/typescript-eslint/typescript-eslint/issues/219)) ([fc50167](https://github.com/typescript-eslint/typescript-eslint/commit/fc50167))
+
+# [1.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.1.1...v1.2.0) (2019-02-01)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+## [1.1.1](https://github.com/typescript-eslint/typescript-eslint/compare/v1.1.0...v1.1.1) (2019-01-29)
+
+### Bug Fixes
+
+- **parser:** add visiting of type parameters in JSXOpeningElement ([#150](https://github.com/typescript-eslint/typescript-eslint/issues/150)) ([5e16003](https://github.com/typescript-eslint/typescript-eslint/commit/5e16003))
+- **ts-estree:** expand optional property to include question token ([#138](https://github.com/typescript-eslint/typescript-eslint/issues/138)) ([9068b62](https://github.com/typescript-eslint/typescript-eslint/commit/9068b62))
+
+### Performance Improvements
+
+- **ts-estree:** don't create Program in parse() ([#148](https://github.com/typescript-eslint/typescript-eslint/issues/148)) ([aacf5b0](https://github.com/typescript-eslint/typescript-eslint/commit/aacf5b0))
+
+# [1.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v1.0.0...v1.1.0) (2019-01-23)
+
+### Bug Fixes
+
+- **typescript-estree:** correct range of parameters with comments ([#128](https://github.com/typescript-eslint/typescript-eslint/issues/128)) ([91eedf2](https://github.com/typescript-eslint/typescript-eslint/commit/91eedf2))
+- **typescript-estree:** fix range of assignment in parameter ([#115](https://github.com/typescript-eslint/typescript-eslint/issues/115)) ([4e781f1](https://github.com/typescript-eslint/typescript-eslint/commit/4e781f1))
+
+# [1.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v0.2.1...v1.0.0) (2019-01-20)
+
+### Features
+
+- **parser:** support ecmaFeatures.jsx flag and tests ([#85](https://github.com/typescript-eslint/typescript-eslint/issues/85)) ([b321736](https://github.com/typescript-eslint/typescript-eslint/commit/b321736))
+
+## [0.2.1](https://github.com/typescript-eslint/typescript-eslint/compare/v0.2.0...v0.2.1) (2019-01-20)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/LICENSE b/server/node_modules/@typescript-eslint/typescript-estree/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..fda3b7546aa5f7e1fa0ec556a6dc7ba584317f21
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/LICENSE
@@ -0,0 +1,26 @@
+TypeScript ESTree
+
+Originally extracted from:
+
+TypeScript ESLint Parser
+Copyright JS Foundation and other contributors, https://js.foundation
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/README.md b/server/node_modules/@typescript-eslint/typescript-estree/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..b9d40fb1ec07662f362f9208aaa46df8ebb734d8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/README.md
@@ -0,0 +1,338 @@
+<h1 align="center">TypeScript ESTree</h1>
+
+<p align="center">A parser that converts TypeScript source code into an <a href="https://github.com/estree/estree">ESTree</a>-compatible form</p>
+
+<p align="center">
+    <img src="https://github.com/typescript-eslint/typescript-eslint/workflows/CI/badge.svg" alt="CI" />
+    <a href="https://www.npmjs.com/package/@typescript-eslint/typescript-estree"><img src="https://img.shields.io/npm/v/@typescript-eslint/typescript-estree.svg?style=flat-square" alt="NPM Version" /></a>
+    <a href="https://www.npmjs.com/package/@typescript-eslint/typescript-estree"><img src="https://img.shields.io/npm/dm/@typescript-eslint/typescript-estree.svg?style=flat-square" alt="NPM Downloads" /></a>
+</p>
+
+## Getting Started
+
+**[You can find our Getting Started docs here](../../docs/getting-started/linting/README.md)**
+
+## About
+
+This parser is somewhat generic and robust, and could be used to power any use-case which requires taking TypeScript source code and producing an ESTree-compatible AST.
+
+In fact, it is already used within these hyper-popular open-source projects to power their TypeScript support:
+
+- [ESLint](https://eslint.org), the pluggable linting utility for JavaScript and JSX
+- [Prettier](https://prettier.io), an opinionated code formatter
+
+## Installation
+
+```sh
+yarn add -D @typescript-eslint/typescript-estree
+```
+
+## API
+
+### Parsing
+
+#### `parse(code, options)`
+
+Parses the given string of code with the options provided and returns an ESTree-compatible AST.
+
+```ts
+interface ParseOptions {
+  /**
+   * create a top-level comments array containing all comments
+   */
+  comment?: boolean;
+
+  /**
+   * An array of modules to turn explicit debugging on for.
+   * - 'typescript-eslint' is the same as setting the env var `DEBUG=typescript-eslint:*`
+   * - 'eslint' is the same as setting the env var `DEBUG=eslint:*`
+   * - 'typescript' is the same as setting `extendedDiagnostics: true` in your tsconfig compilerOptions
+   *
+   * For convenience, also supports a boolean:
+   * - true === ['typescript-eslint']
+   * - false === []
+   */
+  debugLevel?: boolean | ('typescript-eslint' | 'eslint' | 'typescript')[];
+
+  /**
+   * Cause the parser to error if it encounters an unknown AST node type (useful for testing).
+   * This case only usually occurs when TypeScript releases new features.
+   */
+  errorOnUnknownASTType?: boolean;
+
+  /**
+   * Absolute (or relative to `cwd`) path to the file being parsed.
+   */
+  filePath?: string;
+
+  /**
+   * Enable parsing of JSX.
+   * For more details, see https://www.typescriptlang.org/docs/handbook/jsx.html
+   *
+   * NOTE: this setting does not effect known file types (.js, .jsx, .ts, .tsx, .json) because the
+   * TypeScript compiler has its own internal handling for known file extensions.
+   *
+   * For the exact behavior, see https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/parser#parseroptionsecmafeaturesjsx
+   */
+  jsx?: boolean;
+
+  /**
+   * Controls whether the `loc` information to each node.
+   * The `loc` property is an object which contains the exact line/column the node starts/ends on.
+   * This is similar to the `range` property, except it is line/column relative.
+   */
+  loc?: boolean;
+
+  /*
+   * Allows overriding of function used for logging.
+   * When value is `false`, no logging will occur.
+   * When value is not provided, `console.log()` will be used.
+   */
+  loggerFn?: Function | false;
+
+  /**
+   * Controls whether the `range` property is included on AST nodes.
+   * The `range` property is a [number, number] which indicates the start/end index of the node in the file contents.
+   * This is similar to the `loc` property, except this is the absolute index.
+   */
+  range?: boolean;
+
+  /**
+   * Set to true to create a top-level array containing all tokens from the file.
+   */
+  tokens?: boolean;
+
+  /*
+   * The JSX AST changed the node type for string literals
+   * inside a JSX Element from `Literal` to `JSXText`.
+   * When value is `true`, these nodes will be parsed as type `JSXText`.
+   * When value is `false`, these nodes will be parsed as type `Literal`.
+   */
+  useJSXTextNode?: boolean;
+}
+
+const PARSE_DEFAULT_OPTIONS: ParseOptions = {
+  comment: false,
+  errorOnUnknownASTType: false,
+  filePath: 'estree.ts', // or 'estree.tsx', if you pass jsx: true
+  jsx: false,
+  loc: false,
+  loggerFn: undefined,
+  range: false,
+  tokens: false,
+  useJSXTextNode: false,
+};
+
+declare function parse(
+  code: string,
+  options: ParseOptions = PARSE_DEFAULT_OPTIONS,
+): TSESTree.Program;
+```
+
+Example usage:
+
+```js
+import { parse } from '@typescript-eslint/typescript-estree';
+
+const code = `const hello: string = 'world';`;
+const ast = parse(code, {
+  loc: true,
+  range: true,
+});
+```
+
+#### `parseAndGenerateServices(code, options)`
+
+Parses the given string of code with the options provided and returns an ESTree-compatible AST. Accepts additional options which can be used to generate type information along with the AST.
+
+```ts
+interface ParseAndGenerateServicesOptions extends ParseOptions {
+  /**
+   * Causes the parser to error if the TypeScript compiler returns any unexpected syntax/semantic errors.
+   */
+  errorOnTypeScriptSyntacticAndSemanticIssues?: boolean;
+
+  /**
+   * ***EXPERIMENTAL FLAG*** - Use this at your own risk.
+   *
+   * Causes TS to use the source files for referenced projects instead of the compiled .d.ts files.
+   * This feature is not yet optimized, and is likely to cause OOMs for medium to large projects.
+   *
+   * This flag REQUIRES at least TS v3.9, otherwise it does nothing.
+   *
+   * See: https://github.com/typescript-eslint/typescript-eslint/issues/2094
+   */
+  EXPERIMENTAL_useSourceOfProjectReferenceRedirect?: boolean;
+
+  /**
+   * When `project` is provided, this controls the non-standard file extensions which will be parsed.
+   * It accepts an array of file extensions, each preceded by a `.`.
+   */
+  extraFileExtensions?: string[];
+
+  /**
+   * Absolute (or relative to `tsconfigRootDir`) path to the file being parsed.
+   * When `project` is provided, this is required, as it is used to fetch the file from the TypeScript compiler's cache.
+   */
+  filePath?: string;
+
+  /**
+   * Allows the user to control whether or not two-way AST node maps are preserved
+   * during the AST conversion process.
+   *
+   * By default: the AST node maps are NOT preserved, unless `project` has been specified,
+   * in which case the maps are made available on the returned `parserServices`.
+   *
+   * NOTE: If `preserveNodeMaps` is explicitly set by the user, it will be respected,
+   * regardless of whether or not `project` is in use.
+   */
+  preserveNodeMaps?: boolean;
+
+  /**
+   * Absolute (or relative to `tsconfigRootDir`) paths to the tsconfig(s).
+   * If this is provided, type information will be returned.
+   */
+  project?: string | string[];
+
+  /**
+   * If you provide a glob (or globs) to the project option, you can use this option to ignore certain folders from
+   * being matched by the globs.
+   * This accepts an array of globs to ignore.
+   *
+   * By default, this is set to ["/node_modules/"]
+   */
+  projectFolderIgnoreList?: string[];
+
+  /**
+   * The absolute path to the root directory for all provided `project`s.
+   */
+  tsconfigRootDir?: string;
+
+  /**
+   ***************************************************************************************
+   * IT IS RECOMMENDED THAT YOU DO NOT USE THIS OPTION, AS IT CAUSES PERFORMANCE ISSUES. *
+   ***************************************************************************************
+   *
+   * When passed with `project`, this allows the parser to create a catch-all, default program.
+   * This means that if the parser encounters a file not included in any of the provided `project`s,
+   * it will not error, but will instead parse the file and its dependencies in a new program.
+   */
+  createDefaultProgram?: boolean;
+}
+
+interface ParserServices {
+  program: ts.Program;
+  esTreeNodeToTSNodeMap: WeakMap<TSESTree.Node, ts.Node | ts.Token>;
+  tsNodeToESTreeNodeMap: WeakMap<ts.Node | ts.Token, TSESTree.Node>;
+  hasFullTypeInformation: boolean;
+}
+
+interface ParseAndGenerateServicesResult<T extends TSESTreeOptions> {
+  ast: TSESTree.Program;
+  services: ParserServices;
+}
+
+const PARSE_AND_GENERATE_SERVICES_DEFAULT_OPTIONS: ParseOptions = {
+  ...PARSE_DEFAULT_OPTIONS,
+  errorOnTypeScriptSyntacticAndSemanticIssues: false,
+  extraFileExtensions: [],
+  preserveNodeMaps: false, // or true, if you do not set this, but pass `project`
+  project: undefined,
+  projectFolderIgnoreList: ['/node_modules/'],
+  tsconfigRootDir: process.cwd(),
+};
+
+declare function parseAndGenerateServices(
+  code: string,
+  options: ParseOptions = PARSE_DEFAULT_OPTIONS,
+): ParseAndGenerateServicesResult;
+```
+
+Example usage:
+
+```js
+import { parseAndGenerateServices } from '@typescript-eslint/typescript-estree';
+
+const code = `const hello: string = 'world';`;
+const { ast, services } = parseAndGenerateServices(code, {
+  filePath: '/some/path/to/file/foo.ts',
+  loc: true,
+  project: './tsconfig.json',
+  range: true,
+});
+```
+
+#### `parseWithNodeMaps(code, options)`
+
+Parses the given string of code with the options provided and returns both the ESTree-compatible AST as well as the node maps.
+This allows you to work with both ASTs without the overhead of types that may come with `parseAndGenerateServices`.
+
+```ts
+interface ParseWithNodeMapsResult<T extends TSESTreeOptions> {
+  ast: TSESTree.Program;
+  esTreeNodeToTSNodeMap: ParserServices['esTreeNodeToTSNodeMap'];
+  tsNodeToESTreeNodeMap: ParserServices['tsNodeToESTreeNodeMap'];
+}
+
+declare function parseWithNodeMaps(
+  code: string,
+  options: ParseOptions = PARSE_DEFAULT_OPTIONS,
+): ParseWithNodeMapsResult;
+```
+
+Example usage:
+
+```js
+import { parseWithNodeMaps } from '@typescript-eslint/typescript-estree';
+
+const code = `const hello: string = 'world';`;
+const { ast, esTreeNodeToTSNodeMap, tsNodeToESTreeNodeMap } = parseWithNodeMaps(
+  code,
+  {
+    loc: true,
+    range: true,
+  },
+);
+```
+
+### `TSESTree`, `AST_NODE_TYPES` and `AST_TOKEN_TYPES`
+
+Types for the AST produced by the parse functions.
+
+- `TSESTree` is a namespace which contains object types representing all of the AST Nodes produced by the parser.
+- `AST_NODE_TYPES` is an enum which provides the values for every single AST node's `type` property.
+- `AST_TOKEN_TYPES` is an enum which provides the values for every single AST token's `type` property.
+
+## Supported TypeScript Version
+
+See the [Supported TypeScript Version](../../README.md#supported-typescript-version) section in the project root.
+
+If you use a non-supported version of TypeScript, the parser will log a warning to the console.
+
+**Please ensure that you are using a supported version before submitting any issues/bug reports.**
+
+## Reporting Issues
+
+Please check the current list of open and known issues and ensure the issue has not been reported before. When creating a new issue provide as much information about your environment as possible. This includes:
+
+- TypeScript version
+- The `typescript-estree` version
+
+## AST Alignment Tests
+
+A couple of years after work on this parser began, the TypeScript Team at Microsoft began [officially supporting TypeScript parsing via Babel](https://blogs.msdn.microsoft.com/typescript/2018/08/27/typescript-and-babel-7/).
+
+I work closely with the TypeScript Team and we are gradually aligning the AST of this project with the one produced by Babel's parser. To that end, I have created a full test harness to compare the ASTs of the two projects which runs on every PR, please see [the code](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/typescript-estree/tests/ast-alignment) for more details.
+
+## Debugging
+
+If you encounter a bug with the parser that you want to investigate, you can turn on the debug logging via setting the environment variable: `DEBUG=typescript-eslint:*`.
+I.e. in this repo you can run: `DEBUG=typescript-eslint:* yarn lint`.
+
+## License
+
+TypeScript ESTree inherits from the the original TypeScript ESLint Parser license, as the majority of the work began there. It is licensed under a permissive BSD 2-clause license.
+
+## Contributing
+
+[See the contributing guide here](../../CONTRIBUTING.md)
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..61bc2f1be38000cffbb7c1f77a73a8a64619c2df
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.d.ts
@@ -0,0 +1,9 @@
+import { SourceFile } from 'typescript';
+import { ASTMaps } from './convert';
+import { Extra } from './parser-options';
+import { TSESTree } from './ts-estree';
+export declare function astConverter(ast: SourceFile, extra: Extra, shouldPreserveNodeMaps: boolean): {
+    estree: TSESTree.Program;
+    astMaps: ASTMaps;
+};
+//# sourceMappingURL=ast-converter.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..df6276c5ad0db8a1692016d388d58c72e033f18a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ast-converter.d.ts","sourceRoot":"","sources":["../src/ast-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAA2B,OAAO,EAAE,MAAM,WAAW,CAAC;AAG7D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,wBAAgB,YAAY,CAC1B,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,KAAK,EACZ,sBAAsB,EAAE,OAAO,GAC9B;IAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CA4DhD"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.js
new file mode 100644
index 0000000000000000000000000000000000000000..6af960ee3368c76b9e7dc95eff8d378a242f1805
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.js
@@ -0,0 +1,63 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.astConverter = void 0;
+const convert_1 = require("./convert");
+const convert_comments_1 = require("./convert-comments");
+const node_utils_1 = require("./node-utils");
+const simple_traverse_1 = require("./simple-traverse");
+function astConverter(ast, extra, shouldPreserveNodeMaps) {
+    /**
+     * The TypeScript compiler produced fundamental parse errors when parsing the
+     * source.
+     */
+    // internal typescript api...
+    // eslint-disable-next-line @typescript-eslint/no-explicit-any
+    const parseDiagnostics = ast.parseDiagnostics;
+    if (parseDiagnostics.length) {
+        throw convert_1.convertError(parseDiagnostics[0]);
+    }
+    /**
+     * Recursively convert the TypeScript AST into an ESTree-compatible AST
+     */
+    const instance = new convert_1.Converter(ast, {
+        errorOnUnknownASTType: extra.errorOnUnknownASTType || false,
+        useJSXTextNode: extra.useJSXTextNode || false,
+        shouldPreserveNodeMaps,
+    });
+    const estree = instance.convertProgram();
+    /**
+     * Optionally remove range and loc if specified
+     */
+    if (!extra.range || !extra.loc) {
+        simple_traverse_1.simpleTraverse(estree, {
+            enter: node => {
+                if (!extra.range) {
+                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- TS 4.0 made this an error because the types aren't optional
+                    // @ts-expect-error
+                    delete node.range;
+                }
+                if (!extra.loc) {
+                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- TS 4.0 made this an error because the types aren't optional
+                    // @ts-expect-error
+                    delete node.loc;
+                }
+            },
+        });
+    }
+    /**
+     * Optionally convert and include all tokens in the AST
+     */
+    if (extra.tokens) {
+        estree.tokens = node_utils_1.convertTokens(ast);
+    }
+    /**
+     * Optionally convert and include all comments in the AST
+     */
+    if (extra.comment) {
+        estree.comments = convert_comments_1.convertComments(ast, extra.code);
+    }
+    const astMaps = instance.getASTMaps();
+    return { estree, astMaps };
+}
+exports.astConverter = astConverter;
+//# sourceMappingURL=ast-converter.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..6a5b215589dd528790fc93ecdacfa6269f0e9fbb
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ast-converter.js","sourceRoot":"","sources":["../src/ast-converter.ts"],"names":[],"mappings":";;;AACA,uCAA6D;AAC7D,yDAAqD;AACrD,6CAA6C;AAG7C,uDAAmD;AAEnD,SAAgB,YAAY,CAC1B,GAAe,EACf,KAAY,EACZ,sBAA+B;IAE/B;;;OAGG;IACH,6BAA6B;IAC7B,8DAA8D;IAC9D,MAAM,gBAAgB,GAAI,GAAW,CAAC,gBAAgB,CAAC;IACvD,IAAI,gBAAgB,CAAC,MAAM,EAAE;QAC3B,MAAM,sBAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;KACzC;IAED;;OAEG;IACH,MAAM,QAAQ,GAAG,IAAI,mBAAS,CAAC,GAAG,EAAE;QAClC,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,IAAI,KAAK;QAC3D,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,KAAK;QAC7C,sBAAsB;KACvB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;IAEzC;;OAEG;IACH,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;QAC9B,gCAAc,CAAC,MAAM,EAAE;YACrB,KAAK,EAAE,IAAI,CAAC,EAAE;gBACZ,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;oBAChB,4HAA4H;oBAC5H,mBAAmB;oBACnB,OAAO,IAAI,CAAC,KAAK,CAAC;iBACnB;gBACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;oBACd,4HAA4H;oBAC5H,mBAAmB;oBACnB,OAAO,IAAI,CAAC,GAAG,CAAC;iBACjB;YACH,CAAC;SACF,CAAC,CAAC;KACJ;IAED;;OAEG;IACH,IAAI,KAAK,CAAC,MAAM,EAAE;QAChB,MAAM,CAAC,MAAM,GAAG,0BAAa,CAAC,GAAG,CAAC,CAAC;KACpC;IAED;;OAEG;IACH,IAAI,KAAK,CAAC,OAAO,EAAE;QACjB,MAAM,CAAC,QAAQ,GAAG,kCAAe,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;KACpD;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;IAEtC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAhED,oCAgEC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3f081e6990071d665ead376c80d0c6625569ff72
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.d.ts
@@ -0,0 +1,11 @@
+import * as ts from 'typescript';
+import { TSESTree } from './ts-estree';
+/**
+ * Convert all comments for the given AST.
+ * @param ast the AST object
+ * @param code the TypeScript code
+ * @returns the converted ESTreeComment
+ * @private
+ */
+export declare function convertComments(ast: ts.SourceFile, code: string): TSESTree.Comment[];
+//# sourceMappingURL=convert-comments.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e3e8a043be958a2c83e4f032ea44ede301c28626
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"convert-comments.d.ts","sourceRoot":"","sources":["../src/convert-comments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAGjC,OAAO,EAAmB,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,EAAE,CAAC,UAAU,EAClB,IAAI,EAAE,MAAM,GACX,QAAQ,CAAC,OAAO,EAAE,CAgCpB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.js
new file mode 100644
index 0000000000000000000000000000000000000000..de4a735a60a67be46a6c540381729fe64c0ddd81
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.js
@@ -0,0 +1,59 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.convertComments = void 0;
+const ts = __importStar(require("typescript"));
+const util_1 = require("tsutils/util/util");
+const node_utils_1 = require("./node-utils");
+const ts_estree_1 = require("./ts-estree");
+/**
+ * Convert all comments for the given AST.
+ * @param ast the AST object
+ * @param code the TypeScript code
+ * @returns the converted ESTreeComment
+ * @private
+ */
+function convertComments(ast, code) {
+    const comments = [];
+    util_1.forEachComment(ast, (_, comment) => {
+        const type = comment.kind == ts.SyntaxKind.SingleLineCommentTrivia
+            ? ts_estree_1.AST_TOKEN_TYPES.Line
+            : ts_estree_1.AST_TOKEN_TYPES.Block;
+        const range = [comment.pos, comment.end];
+        const loc = node_utils_1.getLocFor(range[0], range[1], ast);
+        // both comments start with 2 characters - /* or //
+        const textStart = range[0] + 2;
+        const textEnd = comment.kind === ts.SyntaxKind.SingleLineCommentTrivia
+            ? // single line comments end at the end
+                range[1] - textStart
+            : // multiline comments end 2 characters early
+                range[1] - textStart - 2;
+        comments.push({
+            type,
+            value: code.substr(textStart, textEnd),
+            range,
+            loc,
+        });
+    }, ast);
+    return comments;
+}
+exports.convertComments = convertComments;
+//# sourceMappingURL=convert-comments.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..6952a58937f96b1d653ee6ebb01a1f63ed3ae9e5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"convert-comments.js","sourceRoot":"","sources":["../src/convert-comments.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,4CAAmD;AACnD,6CAAyC;AACzC,2CAAwD;AAExD;;;;;;GAMG;AACH,SAAgB,eAAe,CAC7B,GAAkB,EAClB,IAAY;IAEZ,MAAM,QAAQ,GAAuB,EAAE,CAAC;IAExC,qBAAc,CACZ,GAAG,EACH,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;QACb,MAAM,IAAI,GACR,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,UAAU,CAAC,uBAAuB;YACnD,CAAC,CAAC,2BAAe,CAAC,IAAI;YACtB,CAAC,CAAC,2BAAe,CAAC,KAAK,CAAC;QAC5B,MAAM,KAAK,GAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,sBAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAE/C,mDAAmD;QACnD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,OAAO,GACX,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,uBAAuB;YACpD,CAAC,CAAC,sCAAsC;gBACtC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS;YACtB,CAAC,CAAC,4CAA4C;gBAC5C,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI;YACJ,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC;YACtC,KAAK;YACL,GAAG;SACJ,CAAC,CAAC;IACL,CAAC,EACD,GAAG,CACJ,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAnCD,0CAmCC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/convert.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c065e15d0ecf5e56be4cbadb1ff3c634821ebcab
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert.d.ts
@@ -0,0 +1,152 @@
+import * as ts from 'typescript';
+import { TSError } from './node-utils';
+import { ParserWeakMap, ParserWeakMapESTreeToTSNode } from './parser-options';
+import { TSESTree, TSNode } from './ts-estree';
+interface ConverterOptions {
+    errorOnUnknownASTType: boolean;
+    useJSXTextNode: boolean;
+    shouldPreserveNodeMaps: boolean;
+}
+/**
+ * Extends and formats a given error object
+ * @param error the error object
+ * @returns converted error object
+ */
+export declare function convertError(error: any): TSError;
+export interface ASTMaps {
+    esTreeNodeToTSNodeMap: ParserWeakMapESTreeToTSNode;
+    tsNodeToESTreeNodeMap: ParserWeakMap<TSNode, TSESTree.Node>;
+}
+export declare class Converter {
+    private readonly ast;
+    private readonly options;
+    private readonly esTreeNodeToTSNodeMap;
+    private readonly tsNodeToESTreeNodeMap;
+    private allowPattern;
+    private inTypeMode;
+    /**
+     * Converts a TypeScript node into an ESTree node
+     * @param ast the full TypeScript AST
+     * @param options additional options for the conversion
+     * @returns the converted ESTreeNode
+     */
+    constructor(ast: ts.SourceFile, options: ConverterOptions);
+    getASTMaps(): ASTMaps;
+    convertProgram(): TSESTree.Program;
+    /**
+     * Converts a TypeScript node into an ESTree node.
+     * @param node the child ts.Node
+     * @param parent parentNode
+     * @param inTypeMode flag to determine if we are in typeMode
+     * @param allowPattern flag to determine if patterns are allowed
+     * @returns the converted ESTree node
+     */
+    private converter;
+    /**
+     * Fixes the exports of the given ts.Node
+     * @param node the ts.Node
+     * @param result result
+     * @returns the ESTreeNode with fixed exports
+     */
+    private fixExports;
+    /**
+     * Register specific TypeScript node into map with first ESTree node provided
+     */
+    private registerTSNodeInNodeMap;
+    /**
+     * Converts a TypeScript node into an ESTree node.
+     * @param child the child ts.Node
+     * @param parent parentNode
+     * @returns the converted ESTree node
+     */
+    private convertPattern;
+    /**
+     * Converts a TypeScript node into an ESTree node.
+     * @param child the child ts.Node
+     * @param parent parentNode
+     * @returns the converted ESTree node
+     */
+    private convertChild;
+    /**
+     * Converts a TypeScript node into an ESTree node.
+     * @param child the child ts.Node
+     * @param parent parentNode
+     * @returns the converted ESTree node
+     */
+    private convertType;
+    private createNode;
+    private convertBindingNameWithTypeAnnotation;
+    /**
+     * Converts a child into a type annotation. This creates an intermediary
+     * TypeAnnotation node to match what Flow does.
+     * @param child The TypeScript AST node to convert.
+     * @param parent parentNode
+     * @returns The type annotation node.
+     */
+    private convertTypeAnnotation;
+    /**
+     * Coverts body Nodes and add a directive field to StringLiterals
+     * @param nodes of ts.Node
+     * @param parent parentNode
+     * @returns Array of body statements
+     */
+    private convertBodyExpressions;
+    /**
+     * Converts a ts.Node's typeArguments to TSTypeParameterInstantiation node
+     * @param typeArguments ts.NodeArray typeArguments
+     * @param node parent used to create this node
+     * @returns TypeParameterInstantiation node
+     */
+    private convertTypeArgumentsToTypeParameters;
+    /**
+     * Converts a ts.Node's typeParameters to TSTypeParameterDeclaration node
+     * @param typeParameters ts.Node typeParameters
+     * @returns TypeParameterDeclaration node
+     */
+    private convertTSTypeParametersToTypeParametersDeclaration;
+    /**
+     * Converts an array of ts.Node parameters into an array of ESTreeNode params
+     * @param parameters An array of ts.Node params to be converted
+     * @returns an array of converted ESTreeNode params
+     */
+    private convertParameters;
+    private convertChainExpression;
+    /**
+     * For nodes that are copied directly from the TypeScript AST into
+     * ESTree mostly as-is. The only difference is the addition of a type
+     * property instead of a kind property. Recursively copies all children.
+     */
+    private deeplyCopy;
+    /**
+     * Converts a TypeScript JSX node.tagName into an ESTree node.name
+     * @param node the tagName object from a JSX ts.Node
+     * @param parent
+     * @returns the converted ESTree name object
+     */
+    private convertJSXTagName;
+    /**
+     * Applies the given TS modifiers to the given result object.
+     * @param result
+     * @param modifiers original ts.Nodes from the node.modifiers array
+     * @returns the current result object will be mutated
+     * @deprecated This method adds not standardized `modifiers` property in nodes
+     */
+    private applyModifiersToResult;
+    /**
+     * Uses the provided range location to adjust the location data of the given Node
+     * @param result The node that will have its location data mutated
+     * @param childRange The child node range used to expand location
+     */
+    private fixParentLocation;
+    /**
+     * Converts a TypeScript node into an ESTree node.
+     * The core of the conversion logic:
+     * Identify and convert each relevant TypeScript SyntaxKind
+     * @param node the child ts.Node
+     * @param parent parentNode
+     * @returns the converted ESTree node
+     */
+    private convertNode;
+}
+export {};
+//# sourceMappingURL=convert.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/convert.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..95ecf6477e896e5bc6569abafab0b1f4135023cb
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAkBL,OAAO,EAGR,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAEL,QAAQ,EACR,MAAM,EAEP,MAAM,aAAa,CAAC;AAKrB,UAAU,gBAAgB;IACxB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAMhD;AAED,MAAM,WAAW,OAAO;IACtB,qBAAqB,EAAE,2BAA2B,CAAC;IACnD,qBAAqB,EAAE,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAiB;IACvD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAiB;IAEvD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;IAE3B;;;;;OAKG;gBACS,GAAG,EAAE,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,gBAAgB;IAKzD,UAAU,IAAI,OAAO;IAOrB,cAAc,IAAI,QAAQ,CAAC,OAAO;IAIlC;;;;;;;OAOG;IACH,OAAO,CAAC,SAAS;IAkCjB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAyDlB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAW/B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAItB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAIpB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,oCAAoC;IAe5C;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IA8B9B;;;;;OAKG;IACH,OAAO,CAAC,oCAAoC;IAa5C;;;;OAIG;IACH,OAAO,CAAC,kDAAkD;IAe1D;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,sBAAsB;IA4C9B;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAmElB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA2CzB;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAkD9B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAczB;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW;CA8jEpB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/convert.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert.js
new file mode 100644
index 0000000000000000000000000000000000000000..093e002c38a4fb7f25ec6ab24ea8867f943b7d22
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert.js
@@ -0,0 +1,2220 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Converter = exports.convertError = void 0;
+// There's lots of funny stuff due to the typing of ts.Node
+/* eslint-disable @typescript-eslint/no-explicit-any */
+const ts = __importStar(require("typescript"));
+const node_utils_1 = require("./node-utils");
+const ts_estree_1 = require("./ts-estree");
+const version_check_1 = require("./version-check");
+const SyntaxKind = ts.SyntaxKind;
+/**
+ * Extends and formats a given error object
+ * @param error the error object
+ * @returns converted error object
+ */
+function convertError(error) {
+    return node_utils_1.createError(error.file, error.start, error.message || error.messageText);
+}
+exports.convertError = convertError;
+class Converter {
+    /**
+     * Converts a TypeScript node into an ESTree node
+     * @param ast the full TypeScript AST
+     * @param options additional options for the conversion
+     * @returns the converted ESTreeNode
+     */
+    constructor(ast, options) {
+        this.esTreeNodeToTSNodeMap = new WeakMap();
+        this.tsNodeToESTreeNodeMap = new WeakMap();
+        this.allowPattern = false;
+        this.inTypeMode = false;
+        this.ast = ast;
+        this.options = Object.assign({}, options);
+    }
+    getASTMaps() {
+        return {
+            esTreeNodeToTSNodeMap: this.esTreeNodeToTSNodeMap,
+            tsNodeToESTreeNodeMap: this.tsNodeToESTreeNodeMap,
+        };
+    }
+    convertProgram() {
+        return this.converter(this.ast);
+    }
+    /**
+     * Converts a TypeScript node into an ESTree node.
+     * @param node the child ts.Node
+     * @param parent parentNode
+     * @param inTypeMode flag to determine if we are in typeMode
+     * @param allowPattern flag to determine if patterns are allowed
+     * @returns the converted ESTree node
+     */
+    converter(node, parent, inTypeMode, allowPattern) {
+        /**
+         * Exit early for null and undefined
+         */
+        if (!node) {
+            return null;
+        }
+        const typeMode = this.inTypeMode;
+        const pattern = this.allowPattern;
+        if (inTypeMode !== undefined) {
+            this.inTypeMode = inTypeMode;
+        }
+        if (allowPattern !== undefined) {
+            this.allowPattern = allowPattern;
+        }
+        const result = this.convertNode(node, (parent !== null && parent !== void 0 ? parent : node.parent));
+        this.registerTSNodeInNodeMap(node, result);
+        this.inTypeMode = typeMode;
+        this.allowPattern = pattern;
+        return result;
+    }
+    /**
+     * Fixes the exports of the given ts.Node
+     * @param node the ts.Node
+     * @param result result
+     * @returns the ESTreeNode with fixed exports
+     */
+    fixExports(node, result) {
+        // check for exports
+        if (node.modifiers && node.modifiers[0].kind === SyntaxKind.ExportKeyword) {
+            /**
+             * Make sure that original node is registered instead of export
+             */
+            this.registerTSNodeInNodeMap(node, result);
+            const exportKeyword = node.modifiers[0];
+            const nextModifier = node.modifiers[1];
+            const declarationIsDefault = nextModifier && nextModifier.kind === SyntaxKind.DefaultKeyword;
+            const varToken = declarationIsDefault
+                ? node_utils_1.findNextToken(nextModifier, this.ast, this.ast)
+                : node_utils_1.findNextToken(exportKeyword, this.ast, this.ast);
+            result.range[0] = varToken.getStart(this.ast);
+            result.loc = node_utils_1.getLocFor(result.range[0], result.range[1], this.ast);
+            if (declarationIsDefault) {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ExportDefaultDeclaration,
+                    declaration: result,
+                    range: [exportKeyword.getStart(this.ast), result.range[1]],
+                    exportKind: 'value',
+                });
+            }
+            else {
+                const isType = result.type === ts_estree_1.AST_NODE_TYPES.TSInterfaceDeclaration ||
+                    result.type === ts_estree_1.AST_NODE_TYPES.TSTypeAliasDeclaration;
+                const isDeclare = result.declare === true;
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ExportNamedDeclaration,
+                    declaration: result,
+                    specifiers: [],
+                    source: null,
+                    exportKind: isType || isDeclare ? 'type' : 'value',
+                    range: [exportKeyword.getStart(this.ast), result.range[1]],
+                });
+            }
+        }
+        return result;
+    }
+    /**
+     * Register specific TypeScript node into map with first ESTree node provided
+     */
+    registerTSNodeInNodeMap(node, result) {
+        if (result && this.options.shouldPreserveNodeMaps) {
+            if (!this.tsNodeToESTreeNodeMap.has(node)) {
+                this.tsNodeToESTreeNodeMap.set(node, result);
+            }
+        }
+    }
+    /**
+     * Converts a TypeScript node into an ESTree node.
+     * @param child the child ts.Node
+     * @param parent parentNode
+     * @returns the converted ESTree node
+     */
+    convertPattern(child, parent) {
+        return this.converter(child, parent, this.inTypeMode, true);
+    }
+    /**
+     * Converts a TypeScript node into an ESTree node.
+     * @param child the child ts.Node
+     * @param parent parentNode
+     * @returns the converted ESTree node
+     */
+    convertChild(child, parent) {
+        return this.converter(child, parent, this.inTypeMode, false);
+    }
+    /**
+     * Converts a TypeScript node into an ESTree node.
+     * @param child the child ts.Node
+     * @param parent parentNode
+     * @returns the converted ESTree node
+     */
+    convertType(child, parent) {
+        return this.converter(child, parent, true, false);
+    }
+    createNode(node, data) {
+        const result = data;
+        if (!result.range) {
+            result.range = node_utils_1.getRange(
+            // this is completely valid, but TS hates it
+            node, this.ast);
+        }
+        if (!result.loc) {
+            result.loc = node_utils_1.getLocFor(result.range[0], result.range[1], this.ast);
+        }
+        if (result && this.options.shouldPreserveNodeMaps) {
+            this.esTreeNodeToTSNodeMap.set(result, node);
+        }
+        return result;
+    }
+    convertBindingNameWithTypeAnnotation(name, tsType, parent) {
+        const id = this.convertPattern(name);
+        if (tsType) {
+            id.typeAnnotation = this.convertTypeAnnotation(tsType, parent);
+            this.fixParentLocation(id, id.typeAnnotation.range);
+        }
+        return id;
+    }
+    /**
+     * Converts a child into a type annotation. This creates an intermediary
+     * TypeAnnotation node to match what Flow does.
+     * @param child The TypeScript AST node to convert.
+     * @param parent parentNode
+     * @returns The type annotation node.
+     */
+    convertTypeAnnotation(child, parent) {
+        // in FunctionType and ConstructorType typeAnnotation has 2 characters `=>` and in other places is just colon
+        const offset = (parent === null || parent === void 0 ? void 0 : parent.kind) === SyntaxKind.FunctionType ||
+            (parent === null || parent === void 0 ? void 0 : parent.kind) === SyntaxKind.ConstructorType
+            ? 2
+            : 1;
+        const annotationStartCol = child.getFullStart() - offset;
+        const loc = node_utils_1.getLocFor(annotationStartCol, child.end, this.ast);
+        return {
+            type: ts_estree_1.AST_NODE_TYPES.TSTypeAnnotation,
+            loc,
+            range: [annotationStartCol, child.end],
+            typeAnnotation: this.convertType(child),
+        };
+    }
+    /**
+     * Coverts body Nodes and add a directive field to StringLiterals
+     * @param nodes of ts.Node
+     * @param parent parentNode
+     * @returns Array of body statements
+     */
+    convertBodyExpressions(nodes, parent) {
+        let allowDirectives = node_utils_1.canContainDirective(parent);
+        return (nodes
+            .map(statement => {
+            const child = this.convertChild(statement);
+            if (allowDirectives) {
+                if ((child === null || child === void 0 ? void 0 : child.expression) &&
+                    ts.isExpressionStatement(statement) &&
+                    ts.isStringLiteral(statement.expression)) {
+                    const raw = child.expression.raw;
+                    child.directive = raw.slice(1, -1);
+                    return child; // child can be null, but it's filtered below
+                }
+                else {
+                    allowDirectives = false;
+                }
+            }
+            return child; // child can be null, but it's filtered below
+        })
+            // filter out unknown nodes for now
+            .filter(statement => statement));
+    }
+    /**
+     * Converts a ts.Node's typeArguments to TSTypeParameterInstantiation node
+     * @param typeArguments ts.NodeArray typeArguments
+     * @param node parent used to create this node
+     * @returns TypeParameterInstantiation node
+     */
+    convertTypeArgumentsToTypeParameters(typeArguments, node) {
+        const greaterThanToken = node_utils_1.findNextToken(typeArguments, this.ast, this.ast);
+        return this.createNode(node, {
+            type: ts_estree_1.AST_NODE_TYPES.TSTypeParameterInstantiation,
+            range: [typeArguments.pos - 1, greaterThanToken.end],
+            params: typeArguments.map(typeArgument => this.convertType(typeArgument)),
+        });
+    }
+    /**
+     * Converts a ts.Node's typeParameters to TSTypeParameterDeclaration node
+     * @param typeParameters ts.Node typeParameters
+     * @returns TypeParameterDeclaration node
+     */
+    convertTSTypeParametersToTypeParametersDeclaration(typeParameters) {
+        const greaterThanToken = node_utils_1.findNextToken(typeParameters, this.ast, this.ast);
+        return {
+            type: ts_estree_1.AST_NODE_TYPES.TSTypeParameterDeclaration,
+            range: [typeParameters.pos - 1, greaterThanToken.end],
+            loc: node_utils_1.getLocFor(typeParameters.pos - 1, greaterThanToken.end, this.ast),
+            params: typeParameters.map(typeParameter => this.convertType(typeParameter)),
+        };
+    }
+    /**
+     * Converts an array of ts.Node parameters into an array of ESTreeNode params
+     * @param parameters An array of ts.Node params to be converted
+     * @returns an array of converted ESTreeNode params
+     */
+    convertParameters(parameters) {
+        if (!parameters || !parameters.length) {
+            return [];
+        }
+        return parameters.map(param => {
+            var _a;
+            const convertedParam = this.convertChild(param);
+            if ((_a = param.decorators) === null || _a === void 0 ? void 0 : _a.length) {
+                convertedParam.decorators = param.decorators.map(el => this.convertChild(el));
+            }
+            return convertedParam;
+        });
+    }
+    convertChainExpression(node, tsNode) {
+        const { child, isOptional } = (() => {
+            if (node.type === ts_estree_1.AST_NODE_TYPES.MemberExpression) {
+                return { child: node.object, isOptional: node.optional };
+            }
+            if (node.type === ts_estree_1.AST_NODE_TYPES.CallExpression) {
+                return { child: node.callee, isOptional: node.optional };
+            }
+            return { child: node.expression, isOptional: false };
+        })();
+        const isChildUnwrappable = node_utils_1.isChildUnwrappableOptionalChain(tsNode, child);
+        if (!isChildUnwrappable && !isOptional) {
+            return node;
+        }
+        if (isChildUnwrappable && node_utils_1.isChainExpression(child)) {
+            // unwrap the chain expression child
+            const newChild = child.expression;
+            if (node.type === ts_estree_1.AST_NODE_TYPES.MemberExpression) {
+                node.object = newChild;
+            }
+            else if (node.type === ts_estree_1.AST_NODE_TYPES.CallExpression) {
+                node.callee = newChild;
+            }
+            else {
+                node.expression = newChild;
+            }
+        }
+        return this.createNode(tsNode, {
+            type: ts_estree_1.AST_NODE_TYPES.ChainExpression,
+            expression: node,
+        });
+    }
+    /**
+     * For nodes that are copied directly from the TypeScript AST into
+     * ESTree mostly as-is. The only difference is the addition of a type
+     * property instead of a kind property. Recursively copies all children.
+     */
+    deeplyCopy(node) {
+        if (node.kind === ts.SyntaxKind.JSDocFunctionType) {
+            throw node_utils_1.createError(this.ast, node.pos, 'JSDoc types can only be used inside documentation comments.');
+        }
+        const customType = `TS${SyntaxKind[node.kind]}`;
+        /**
+         * If the "errorOnUnknownASTType" option is set to true, throw an error,
+         * otherwise fallback to just including the unknown type as-is.
+         */
+        if (this.options.errorOnUnknownASTType && !ts_estree_1.AST_NODE_TYPES[customType]) {
+            throw new Error(`Unknown AST_NODE_TYPE: "${customType}"`);
+        }
+        const result = this.createNode(node, {
+            type: customType,
+        });
+        if ('type' in node) {
+            result.typeAnnotation =
+                node.type && 'kind' in node.type && ts.isTypeNode(node.type)
+                    ? this.convertTypeAnnotation(node.type, node)
+                    : null;
+        }
+        if ('typeArguments' in node) {
+            result.typeParameters =
+                node.typeArguments && 'pos' in node.typeArguments
+                    ? this.convertTypeArgumentsToTypeParameters(node.typeArguments, node)
+                    : null;
+        }
+        if ('typeParameters' in node) {
+            result.typeParameters =
+                node.typeParameters && 'pos' in node.typeParameters
+                    ? this.convertTSTypeParametersToTypeParametersDeclaration(node.typeParameters)
+                    : null;
+        }
+        if ('decorators' in node && node.decorators && node.decorators.length) {
+            result.decorators = node.decorators.map(el => this.convertChild(el));
+        }
+        Object.entries(node)
+            .filter(([key]) => !/^(?:_children|kind|parent|pos|end|flags|modifierFlagsCache|jsDoc|type|typeArguments|typeParameters|decorators)$/.test(key))
+            .forEach(([key, value]) => {
+            if (Array.isArray(value)) {
+                result[key] = value.map(el => this.convertChild(el));
+            }
+            else if (value && typeof value === 'object' && value.kind) {
+                // need to check node[key].kind to ensure we don't try to convert a symbol
+                result[key] = this.convertChild(value);
+            }
+            else {
+                result[key] = value;
+            }
+        });
+        return result;
+    }
+    /**
+     * Converts a TypeScript JSX node.tagName into an ESTree node.name
+     * @param node the tagName object from a JSX ts.Node
+     * @param parent
+     * @returns the converted ESTree name object
+     */
+    convertJSXTagName(node, parent) {
+        let result;
+        switch (node.kind) {
+            case SyntaxKind.PropertyAccessExpression:
+                if (node.name.kind === SyntaxKind.PrivateIdentifier) {
+                    // This is one of the few times where TS explicitly errors, and doesn't even gracefully handle the syntax.
+                    // So we shouldn't ever get into this state to begin with.
+                    throw new Error('Non-private identifier expected.');
+                }
+                result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.JSXMemberExpression,
+                    object: this.convertJSXTagName(node.expression, parent),
+                    property: this.convertJSXTagName(node.name, parent),
+                });
+                break;
+            case SyntaxKind.ThisKeyword:
+                result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.JSXIdentifier,
+                    name: 'this',
+                });
+                break;
+            case SyntaxKind.Identifier:
+            default:
+                result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.JSXIdentifier,
+                    name: node.text,
+                });
+                break;
+        }
+        this.registerTSNodeInNodeMap(node, result);
+        return result;
+    }
+    /**
+     * Applies the given TS modifiers to the given result object.
+     * @param result
+     * @param modifiers original ts.Nodes from the node.modifiers array
+     * @returns the current result object will be mutated
+     * @deprecated This method adds not standardized `modifiers` property in nodes
+     */
+    applyModifiersToResult(result, modifiers) {
+        if (!modifiers || !modifiers.length) {
+            return;
+        }
+        /**
+         * Some modifiers are explicitly handled by applying them as
+         * boolean values on the result node. As well as adding them
+         * to the result, we remove them from the array, so that they
+         * are not handled twice.
+         */
+        const handledModifierIndices = {};
+        for (let i = 0; i < modifiers.length; i++) {
+            const modifier = modifiers[i];
+            switch (modifier.kind) {
+                /**
+                 * Ignore ExportKeyword and DefaultKeyword, they are handled
+                 * via the fixExports utility function
+                 */
+                case SyntaxKind.ExportKeyword:
+                case SyntaxKind.DefaultKeyword:
+                    handledModifierIndices[i] = true;
+                    break;
+                case SyntaxKind.ConstKeyword:
+                    result.const = true;
+                    handledModifierIndices[i] = true;
+                    break;
+                case SyntaxKind.DeclareKeyword:
+                    result.declare = true;
+                    handledModifierIndices[i] = true;
+                    break;
+                default:
+            }
+        }
+        /**
+         * If there are still valid modifiers available which have
+         * not been explicitly handled above, we just convert and
+         * add the modifiers array to the result node.
+         */
+        const remainingModifiers = modifiers.filter((_, i) => !handledModifierIndices[i]);
+        if (!remainingModifiers || !remainingModifiers.length) {
+            return;
+        }
+        result.modifiers = remainingModifiers.map(el => this.convertChild(el));
+    }
+    /**
+     * Uses the provided range location to adjust the location data of the given Node
+     * @param result The node that will have its location data mutated
+     * @param childRange The child node range used to expand location
+     */
+    fixParentLocation(result, childRange) {
+        if (childRange[0] < result.range[0]) {
+            result.range[0] = childRange[0];
+            result.loc.start = node_utils_1.getLineAndCharacterFor(result.range[0], this.ast);
+        }
+        if (childRange[1] > result.range[1]) {
+            result.range[1] = childRange[1];
+            result.loc.end = node_utils_1.getLineAndCharacterFor(result.range[1], this.ast);
+        }
+    }
+    /**
+     * Converts a TypeScript node into an ESTree node.
+     * The core of the conversion logic:
+     * Identify and convert each relevant TypeScript SyntaxKind
+     * @param node the child ts.Node
+     * @param parent parentNode
+     * @returns the converted ESTree node
+     */
+    convertNode(node, parent) {
+        var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
+        switch (node.kind) {
+            case SyntaxKind.SourceFile: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.Program,
+                    body: this.convertBodyExpressions(node.statements, node),
+                    sourceType: node.externalModuleIndicator ? 'module' : 'script',
+                    range: [node.getStart(this.ast), node.endOfFileToken.end],
+                });
+            }
+            case SyntaxKind.Block: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.BlockStatement,
+                    body: this.convertBodyExpressions(node.statements, node),
+                });
+            }
+            case SyntaxKind.Identifier: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.Identifier,
+                    name: node.text,
+                });
+            }
+            case SyntaxKind.WithStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.WithStatement,
+                    object: this.convertChild(node.expression),
+                    body: this.convertChild(node.statement),
+                });
+            // Control Flow
+            case SyntaxKind.ReturnStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ReturnStatement,
+                    argument: this.convertChild(node.expression),
+                });
+            case SyntaxKind.LabeledStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.LabeledStatement,
+                    label: this.convertChild(node.label),
+                    body: this.convertChild(node.statement),
+                });
+            case SyntaxKind.ContinueStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ContinueStatement,
+                    label: this.convertChild(node.label),
+                });
+            case SyntaxKind.BreakStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.BreakStatement,
+                    label: this.convertChild(node.label),
+                });
+            // Choice
+            case SyntaxKind.IfStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.IfStatement,
+                    test: this.convertChild(node.expression),
+                    consequent: this.convertChild(node.thenStatement),
+                    alternate: this.convertChild(node.elseStatement),
+                });
+            case SyntaxKind.SwitchStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.SwitchStatement,
+                    discriminant: this.convertChild(node.expression),
+                    cases: node.caseBlock.clauses.map(el => this.convertChild(el)),
+                });
+            case SyntaxKind.CaseClause:
+            case SyntaxKind.DefaultClause:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.SwitchCase,
+                    // expression is present in case only
+                    test: node.kind === SyntaxKind.CaseClause
+                        ? this.convertChild(node.expression)
+                        : null,
+                    consequent: node.statements.map(el => this.convertChild(el)),
+                });
+            // Exceptions
+            case SyntaxKind.ThrowStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ThrowStatement,
+                    argument: this.convertChild(node.expression),
+                });
+            case SyntaxKind.TryStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TryStatement,
+                    block: this.convertChild(node.tryBlock),
+                    handler: this.convertChild(node.catchClause),
+                    finalizer: this.convertChild(node.finallyBlock),
+                });
+            case SyntaxKind.CatchClause:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.CatchClause,
+                    param: node.variableDeclaration
+                        ? this.convertBindingNameWithTypeAnnotation(node.variableDeclaration.name, node.variableDeclaration.type)
+                        : null,
+                    body: this.convertChild(node.block),
+                });
+            // Loops
+            case SyntaxKind.WhileStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.WhileStatement,
+                    test: this.convertChild(node.expression),
+                    body: this.convertChild(node.statement),
+                });
+            /**
+             * Unlike other parsers, TypeScript calls a "DoWhileStatement"
+             * a "DoStatement"
+             */
+            case SyntaxKind.DoStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.DoWhileStatement,
+                    test: this.convertChild(node.expression),
+                    body: this.convertChild(node.statement),
+                });
+            case SyntaxKind.ForStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ForStatement,
+                    init: this.convertChild(node.initializer),
+                    test: this.convertChild(node.condition),
+                    update: this.convertChild(node.incrementor),
+                    body: this.convertChild(node.statement),
+                });
+            case SyntaxKind.ForInStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ForInStatement,
+                    left: this.convertPattern(node.initializer),
+                    right: this.convertChild(node.expression),
+                    body: this.convertChild(node.statement),
+                });
+            case SyntaxKind.ForOfStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ForOfStatement,
+                    left: this.convertPattern(node.initializer),
+                    right: this.convertChild(node.expression),
+                    body: this.convertChild(node.statement),
+                    await: Boolean(node.awaitModifier &&
+                        node.awaitModifier.kind === SyntaxKind.AwaitKeyword),
+                });
+            // Declarations
+            case SyntaxKind.FunctionDeclaration: {
+                const isDeclare = node_utils_1.hasModifier(SyntaxKind.DeclareKeyword, node);
+                const result = this.createNode(node, {
+                    type: isDeclare || !node.body
+                        ? ts_estree_1.AST_NODE_TYPES.TSDeclareFunction
+                        : ts_estree_1.AST_NODE_TYPES.FunctionDeclaration,
+                    id: this.convertChild(node.name),
+                    generator: !!node.asteriskToken,
+                    expression: false,
+                    async: node_utils_1.hasModifier(SyntaxKind.AsyncKeyword, node),
+                    params: this.convertParameters(node.parameters),
+                    body: this.convertChild(node.body) || undefined,
+                });
+                // Process returnType
+                if (node.type) {
+                    result.returnType = this.convertTypeAnnotation(node.type, node);
+                }
+                if (isDeclare) {
+                    result.declare = true;
+                }
+                // Process typeParameters
+                if (node.typeParameters) {
+                    result.typeParameters = this.convertTSTypeParametersToTypeParametersDeclaration(node.typeParameters);
+                }
+                // check for exports
+                return this.fixExports(node, result);
+            }
+            case SyntaxKind.VariableDeclaration: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.VariableDeclarator,
+                    id: this.convertBindingNameWithTypeAnnotation(node.name, node.type, node),
+                    init: this.convertChild(node.initializer),
+                });
+                if (node.exclamationToken) {
+                    result.definite = true;
+                }
+                return result;
+            }
+            case SyntaxKind.VariableStatement: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.VariableDeclaration,
+                    declarations: node.declarationList.declarations.map(el => this.convertChild(el)),
+                    kind: node_utils_1.getDeclarationKind(node.declarationList),
+                });
+                /**
+                 * Semantically, decorators are not allowed on variable declarations,
+                 * but the TypeScript compiler will parse them and produce a valid AST,
+                 * so we handle them here too.
+                 */
+                if (node.decorators) {
+                    result.decorators = node.decorators.map(el => this.convertChild(el));
+                }
+                if (node_utils_1.hasModifier(SyntaxKind.DeclareKeyword, node)) {
+                    result.declare = true;
+                }
+                // check for exports
+                return this.fixExports(node, result);
+            }
+            // mostly for for-of, for-in
+            case SyntaxKind.VariableDeclarationList:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.VariableDeclaration,
+                    declarations: node.declarations.map(el => this.convertChild(el)),
+                    kind: node_utils_1.getDeclarationKind(node),
+                });
+            // Expressions
+            case SyntaxKind.ExpressionStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ExpressionStatement,
+                    expression: this.convertChild(node.expression),
+                });
+            case SyntaxKind.ThisKeyword:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ThisExpression,
+                });
+            case SyntaxKind.ArrayLiteralExpression: {
+                // TypeScript uses ArrayLiteralExpression in destructuring assignment, too
+                if (this.allowPattern) {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.ArrayPattern,
+                        elements: node.elements.map(el => this.convertPattern(el)),
+                    });
+                }
+                else {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.ArrayExpression,
+                        elements: node.elements.map(el => this.convertChild(el)),
+                    });
+                }
+            }
+            case SyntaxKind.ObjectLiteralExpression: {
+                // TypeScript uses ObjectLiteralExpression in destructuring assignment, too
+                if (this.allowPattern) {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.ObjectPattern,
+                        properties: node.properties.map(el => this.convertPattern(el)),
+                    });
+                }
+                else {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.ObjectExpression,
+                        properties: node.properties.map(el => this.convertChild(el)),
+                    });
+                }
+            }
+            case SyntaxKind.PropertyAssignment:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.Property,
+                    key: this.convertChild(node.name),
+                    value: this.converter(node.initializer, node, this.inTypeMode, this.allowPattern),
+                    computed: node_utils_1.isComputedProperty(node.name),
+                    method: false,
+                    shorthand: false,
+                    kind: 'init',
+                });
+            case SyntaxKind.ShorthandPropertyAssignment: {
+                if (node.objectAssignmentInitializer) {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.Property,
+                        key: this.convertChild(node.name),
+                        value: this.createNode(node, {
+                            type: ts_estree_1.AST_NODE_TYPES.AssignmentPattern,
+                            left: this.convertPattern(node.name),
+                            right: this.convertChild(node.objectAssignmentInitializer),
+                        }),
+                        computed: false,
+                        method: false,
+                        shorthand: true,
+                        kind: 'init',
+                    });
+                }
+                else {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.Property,
+                        key: this.convertChild(node.name),
+                        value: this.convertChild(node.name),
+                        computed: false,
+                        method: false,
+                        shorthand: true,
+                        kind: 'init',
+                    });
+                }
+            }
+            case SyntaxKind.ComputedPropertyName:
+                return this.convertChild(node.expression);
+            case SyntaxKind.PropertyDeclaration: {
+                const isAbstract = node_utils_1.hasModifier(SyntaxKind.AbstractKeyword, node);
+                const result = this.createNode(node, {
+                    type: isAbstract
+                        ? ts_estree_1.AST_NODE_TYPES.TSAbstractClassProperty
+                        : ts_estree_1.AST_NODE_TYPES.ClassProperty,
+                    key: this.convertChild(node.name),
+                    value: this.convertChild(node.initializer),
+                    computed: node_utils_1.isComputedProperty(node.name),
+                    static: node_utils_1.hasModifier(SyntaxKind.StaticKeyword, node),
+                    readonly: node_utils_1.hasModifier(SyntaxKind.ReadonlyKeyword, node) || undefined,
+                    declare: node_utils_1.hasModifier(SyntaxKind.DeclareKeyword, node),
+                });
+                if (node.type) {
+                    result.typeAnnotation = this.convertTypeAnnotation(node.type, node);
+                }
+                if (node.decorators) {
+                    result.decorators = node.decorators.map(el => this.convertChild(el));
+                }
+                const accessibility = node_utils_1.getTSNodeAccessibility(node);
+                if (accessibility) {
+                    result.accessibility = accessibility;
+                }
+                if ((node.name.kind === SyntaxKind.Identifier ||
+                    node.name.kind === SyntaxKind.ComputedPropertyName) &&
+                    node.questionToken) {
+                    result.optional = true;
+                }
+                if (node.exclamationToken) {
+                    result.definite = true;
+                }
+                if (result.key.type === ts_estree_1.AST_NODE_TYPES.Literal && node.questionToken) {
+                    result.optional = true;
+                }
+                return result;
+            }
+            case SyntaxKind.GetAccessor:
+            case SyntaxKind.SetAccessor:
+            case SyntaxKind.MethodDeclaration: {
+                const method = this.createNode(node, {
+                    type: !node.body
+                        ? ts_estree_1.AST_NODE_TYPES.TSEmptyBodyFunctionExpression
+                        : ts_estree_1.AST_NODE_TYPES.FunctionExpression,
+                    id: null,
+                    generator: !!node.asteriskToken,
+                    expression: false,
+                    async: node_utils_1.hasModifier(SyntaxKind.AsyncKeyword, node),
+                    body: this.convertChild(node.body),
+                    range: [node.parameters.pos - 1, node.end],
+                    params: [],
+                });
+                if (node.type) {
+                    method.returnType = this.convertTypeAnnotation(node.type, node);
+                }
+                // Process typeParameters
+                if (node.typeParameters) {
+                    method.typeParameters = this.convertTSTypeParametersToTypeParametersDeclaration(node.typeParameters);
+                    this.fixParentLocation(method, method.typeParameters.range);
+                }
+                let result;
+                if (parent.kind === SyntaxKind.ObjectLiteralExpression) {
+                    method.params = node.parameters.map(el => this.convertChild(el));
+                    result = this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.Property,
+                        key: this.convertChild(node.name),
+                        value: method,
+                        computed: node_utils_1.isComputedProperty(node.name),
+                        method: node.kind === SyntaxKind.MethodDeclaration,
+                        shorthand: false,
+                        kind: 'init',
+                    });
+                }
+                else {
+                    // class
+                    /**
+                     * Unlike in object literal methods, class method params can have decorators
+                     */
+                    method.params = this.convertParameters(node.parameters);
+                    /**
+                     * TypeScript class methods can be defined as "abstract"
+                     */
+                    const methodDefinitionType = node_utils_1.hasModifier(SyntaxKind.AbstractKeyword, node)
+                        ? ts_estree_1.AST_NODE_TYPES.TSAbstractMethodDefinition
+                        : ts_estree_1.AST_NODE_TYPES.MethodDefinition;
+                    result = this.createNode(node, {
+                        type: methodDefinitionType,
+                        key: this.convertChild(node.name),
+                        value: method,
+                        computed: node_utils_1.isComputedProperty(node.name),
+                        static: node_utils_1.hasModifier(SyntaxKind.StaticKeyword, node),
+                        kind: 'method',
+                    });
+                    if (node.decorators) {
+                        result.decorators = node.decorators.map(el => this.convertChild(el));
+                    }
+                    const accessibility = node_utils_1.getTSNodeAccessibility(node);
+                    if (accessibility) {
+                        result.accessibility = accessibility;
+                    }
+                }
+                if (node.questionToken) {
+                    result.optional = true;
+                }
+                if (node.kind === SyntaxKind.GetAccessor) {
+                    result.kind = 'get';
+                }
+                else if (node.kind === SyntaxKind.SetAccessor) {
+                    result.kind = 'set';
+                }
+                else if (!result.static &&
+                    node.name.kind === SyntaxKind.StringLiteral &&
+                    node.name.text === 'constructor' &&
+                    result.type !== ts_estree_1.AST_NODE_TYPES.Property) {
+                    result.kind = 'constructor';
+                }
+                return result;
+            }
+            // TypeScript uses this even for static methods named "constructor"
+            case SyntaxKind.Constructor: {
+                const lastModifier = node_utils_1.getLastModifier(node);
+                const constructorToken = (lastModifier && node_utils_1.findNextToken(lastModifier, node, this.ast)) ||
+                    node.getFirstToken();
+                const constructor = this.createNode(node, {
+                    type: !node.body
+                        ? ts_estree_1.AST_NODE_TYPES.TSEmptyBodyFunctionExpression
+                        : ts_estree_1.AST_NODE_TYPES.FunctionExpression,
+                    id: null,
+                    params: this.convertParameters(node.parameters),
+                    generator: false,
+                    expression: false,
+                    async: false,
+                    body: this.convertChild(node.body),
+                    range: [node.parameters.pos - 1, node.end],
+                });
+                // Process typeParameters
+                if (node.typeParameters) {
+                    constructor.typeParameters = this.convertTSTypeParametersToTypeParametersDeclaration(node.typeParameters);
+                    this.fixParentLocation(constructor, constructor.typeParameters.range);
+                }
+                // Process returnType
+                if (node.type) {
+                    constructor.returnType = this.convertTypeAnnotation(node.type, node);
+                }
+                const constructorKey = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.Identifier,
+                    name: 'constructor',
+                    range: [constructorToken.getStart(this.ast), constructorToken.end],
+                });
+                const isStatic = node_utils_1.hasModifier(SyntaxKind.StaticKeyword, node);
+                const result = this.createNode(node, {
+                    type: node_utils_1.hasModifier(SyntaxKind.AbstractKeyword, node)
+                        ? ts_estree_1.AST_NODE_TYPES.TSAbstractMethodDefinition
+                        : ts_estree_1.AST_NODE_TYPES.MethodDefinition,
+                    key: constructorKey,
+                    value: constructor,
+                    computed: false,
+                    static: isStatic,
+                    kind: isStatic ? 'method' : 'constructor',
+                });
+                const accessibility = node_utils_1.getTSNodeAccessibility(node);
+                if (accessibility) {
+                    result.accessibility = accessibility;
+                }
+                return result;
+            }
+            case SyntaxKind.FunctionExpression: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.FunctionExpression,
+                    id: this.convertChild(node.name),
+                    generator: !!node.asteriskToken,
+                    params: this.convertParameters(node.parameters),
+                    body: this.convertChild(node.body),
+                    async: node_utils_1.hasModifier(SyntaxKind.AsyncKeyword, node),
+                    expression: false,
+                });
+                // Process returnType
+                if (node.type) {
+                    result.returnType = this.convertTypeAnnotation(node.type, node);
+                }
+                // Process typeParameters
+                if (node.typeParameters) {
+                    result.typeParameters = this.convertTSTypeParametersToTypeParametersDeclaration(node.typeParameters);
+                }
+                return result;
+            }
+            case SyntaxKind.SuperKeyword:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.Super,
+                });
+            case SyntaxKind.ArrayBindingPattern:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ArrayPattern,
+                    elements: node.elements.map(el => this.convertPattern(el)),
+                });
+            // occurs with missing array elements like [,]
+            case SyntaxKind.OmittedExpression:
+                return null;
+            case SyntaxKind.ObjectBindingPattern:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ObjectPattern,
+                    properties: node.elements.map(el => this.convertPattern(el)),
+                });
+            case SyntaxKind.BindingElement: {
+                if (parent.kind === SyntaxKind.ArrayBindingPattern) {
+                    const arrayItem = this.convertChild(node.name, parent);
+                    if (node.initializer) {
+                        return this.createNode(node, {
+                            type: ts_estree_1.AST_NODE_TYPES.AssignmentPattern,
+                            left: arrayItem,
+                            right: this.convertChild(node.initializer),
+                        });
+                    }
+                    else if (node.dotDotDotToken) {
+                        return this.createNode(node, {
+                            type: ts_estree_1.AST_NODE_TYPES.RestElement,
+                            argument: arrayItem,
+                        });
+                    }
+                    else {
+                        return arrayItem;
+                    }
+                }
+                else {
+                    let result;
+                    if (node.dotDotDotToken) {
+                        result = this.createNode(node, {
+                            type: ts_estree_1.AST_NODE_TYPES.RestElement,
+                            argument: this.convertChild((_a = node.propertyName) !== null && _a !== void 0 ? _a : node.name),
+                        });
+                    }
+                    else {
+                        result = this.createNode(node, {
+                            type: ts_estree_1.AST_NODE_TYPES.Property,
+                            key: this.convertChild((_b = node.propertyName) !== null && _b !== void 0 ? _b : node.name),
+                            value: this.convertChild(node.name),
+                            computed: Boolean(node.propertyName &&
+                                node.propertyName.kind === SyntaxKind.ComputedPropertyName),
+                            method: false,
+                            shorthand: !node.propertyName,
+                            kind: 'init',
+                        });
+                    }
+                    if (node.initializer) {
+                        result.value = this.createNode(node, {
+                            type: ts_estree_1.AST_NODE_TYPES.AssignmentPattern,
+                            left: this.convertChild(node.name),
+                            right: this.convertChild(node.initializer),
+                            range: [node.name.getStart(this.ast), node.initializer.end],
+                        });
+                    }
+                    return result;
+                }
+            }
+            case SyntaxKind.ArrowFunction: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ArrowFunctionExpression,
+                    generator: false,
+                    id: null,
+                    params: this.convertParameters(node.parameters),
+                    body: this.convertChild(node.body),
+                    async: node_utils_1.hasModifier(SyntaxKind.AsyncKeyword, node),
+                    expression: node.body.kind !== SyntaxKind.Block,
+                });
+                // Process returnType
+                if (node.type) {
+                    result.returnType = this.convertTypeAnnotation(node.type, node);
+                }
+                // Process typeParameters
+                if (node.typeParameters) {
+                    result.typeParameters = this.convertTSTypeParametersToTypeParametersDeclaration(node.typeParameters);
+                }
+                return result;
+            }
+            case SyntaxKind.YieldExpression:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.YieldExpression,
+                    delegate: !!node.asteriskToken,
+                    argument: this.convertChild(node.expression),
+                });
+            case SyntaxKind.AwaitExpression:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.AwaitExpression,
+                    argument: this.convertChild(node.expression),
+                });
+            // Template Literals
+            case SyntaxKind.NoSubstitutionTemplateLiteral:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TemplateLiteral,
+                    quasis: [
+                        this.createNode(node, {
+                            type: ts_estree_1.AST_NODE_TYPES.TemplateElement,
+                            value: {
+                                raw: this.ast.text.slice(node.getStart(this.ast) + 1, node.end - 1),
+                                cooked: node.text,
+                            },
+                            tail: true,
+                        }),
+                    ],
+                    expressions: [],
+                });
+            case SyntaxKind.TemplateExpression: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TemplateLiteral,
+                    quasis: [this.convertChild(node.head)],
+                    expressions: [],
+                });
+                node.templateSpans.forEach(templateSpan => {
+                    result.expressions.push(this.convertChild(templateSpan.expression));
+                    result.quasis.push(this.convertChild(templateSpan.literal));
+                });
+                return result;
+            }
+            case SyntaxKind.TaggedTemplateExpression:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TaggedTemplateExpression,
+                    typeParameters: node.typeArguments
+                        ? this.convertTypeArgumentsToTypeParameters(node.typeArguments, node)
+                        : undefined,
+                    tag: this.convertChild(node.tag),
+                    quasi: this.convertChild(node.template),
+                });
+            case SyntaxKind.TemplateHead:
+            case SyntaxKind.TemplateMiddle:
+            case SyntaxKind.TemplateTail: {
+                const tail = node.kind === SyntaxKind.TemplateTail;
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TemplateElement,
+                    value: {
+                        raw: this.ast.text.slice(node.getStart(this.ast) + 1, node.end - (tail ? 1 : 2)),
+                        cooked: node.text,
+                    },
+                    tail,
+                });
+            }
+            // Patterns
+            case SyntaxKind.SpreadAssignment:
+            case SyntaxKind.SpreadElement: {
+                if (this.allowPattern) {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.RestElement,
+                        argument: this.convertPattern(node.expression),
+                    });
+                }
+                else {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.SpreadElement,
+                        argument: this.convertChild(node.expression),
+                    });
+                }
+            }
+            case SyntaxKind.Parameter: {
+                let parameter;
+                let result;
+                if (node.dotDotDotToken) {
+                    parameter = result = this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.RestElement,
+                        argument: this.convertChild(node.name),
+                    });
+                }
+                else if (node.initializer) {
+                    parameter = this.convertChild(node.name);
+                    result = this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.AssignmentPattern,
+                        left: parameter,
+                        right: this.convertChild(node.initializer),
+                    });
+                    if (node.modifiers) {
+                        // AssignmentPattern should not contain modifiers in range
+                        result.range[0] = parameter.range[0];
+                        result.loc = node_utils_1.getLocFor(result.range[0], result.range[1], this.ast);
+                    }
+                }
+                else {
+                    parameter = result = this.convertChild(node.name, parent);
+                }
+                if (node.type) {
+                    parameter.typeAnnotation = this.convertTypeAnnotation(node.type, node);
+                    this.fixParentLocation(parameter, parameter.typeAnnotation.range);
+                }
+                if (node.questionToken) {
+                    if (node.questionToken.end > parameter.range[1]) {
+                        parameter.range[1] = node.questionToken.end;
+                        parameter.loc.end = node_utils_1.getLineAndCharacterFor(parameter.range[1], this.ast);
+                    }
+                    parameter.optional = true;
+                }
+                if (node.modifiers) {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.TSParameterProperty,
+                        accessibility: (_c = node_utils_1.getTSNodeAccessibility(node)) !== null && _c !== void 0 ? _c : undefined,
+                        readonly: node_utils_1.hasModifier(SyntaxKind.ReadonlyKeyword, node) || undefined,
+                        static: node_utils_1.hasModifier(SyntaxKind.StaticKeyword, node) || undefined,
+                        export: node_utils_1.hasModifier(SyntaxKind.ExportKeyword, node) || undefined,
+                        parameter: result,
+                    });
+                }
+                return result;
+            }
+            // Classes
+            case SyntaxKind.ClassDeclaration:
+            case SyntaxKind.ClassExpression: {
+                const heritageClauses = (_d = node.heritageClauses) !== null && _d !== void 0 ? _d : [];
+                const classNodeType = node.kind === SyntaxKind.ClassDeclaration
+                    ? ts_estree_1.AST_NODE_TYPES.ClassDeclaration
+                    : ts_estree_1.AST_NODE_TYPES.ClassExpression;
+                const superClass = heritageClauses.find(clause => clause.token === SyntaxKind.ExtendsKeyword);
+                const implementsClause = heritageClauses.find(clause => clause.token === SyntaxKind.ImplementsKeyword);
+                const result = this.createNode(node, {
+                    type: classNodeType,
+                    id: this.convertChild(node.name),
+                    body: this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.ClassBody,
+                        body: [],
+                        range: [node.members.pos - 1, node.end],
+                    }),
+                    superClass: (superClass === null || superClass === void 0 ? void 0 : superClass.types[0]) ? this.convertChild(superClass.types[0].expression)
+                        : null,
+                });
+                if (superClass) {
+                    if (superClass.types.length > 1) {
+                        throw node_utils_1.createError(this.ast, superClass.types[1].pos, 'Classes can only extend a single class.');
+                    }
+                    if ((_e = superClass.types[0]) === null || _e === void 0 ? void 0 : _e.typeArguments) {
+                        result.superTypeParameters = this.convertTypeArgumentsToTypeParameters(superClass.types[0].typeArguments, superClass.types[0]);
+                    }
+                }
+                if (node.typeParameters) {
+                    result.typeParameters = this.convertTSTypeParametersToTypeParametersDeclaration(node.typeParameters);
+                }
+                if (implementsClause) {
+                    result.implements = implementsClause.types.map(el => this.convertChild(el));
+                }
+                /**
+                 * TypeScript class declarations can be defined as "abstract"
+                 */
+                if (node_utils_1.hasModifier(SyntaxKind.AbstractKeyword, node)) {
+                    result.abstract = true;
+                }
+                if (node_utils_1.hasModifier(SyntaxKind.DeclareKeyword, node)) {
+                    result.declare = true;
+                }
+                if (node.decorators) {
+                    result.decorators = node.decorators.map(el => this.convertChild(el));
+                }
+                const filteredMembers = node.members.filter(node_utils_1.isESTreeClassMember);
+                if (filteredMembers.length) {
+                    result.body.body = filteredMembers.map(el => this.convertChild(el));
+                }
+                // check for exports
+                return this.fixExports(node, result);
+            }
+            // Modules
+            case SyntaxKind.ModuleBlock:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSModuleBlock,
+                    body: this.convertBodyExpressions(node.statements, node),
+                });
+            case SyntaxKind.ImportDeclaration: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ImportDeclaration,
+                    source: this.convertChild(node.moduleSpecifier),
+                    specifiers: [],
+                    importKind: 'value',
+                });
+                if (node.importClause) {
+                    if (node.importClause.isTypeOnly) {
+                        result.importKind = 'type';
+                    }
+                    if (node.importClause.name) {
+                        result.specifiers.push(this.convertChild(node.importClause));
+                    }
+                    if (node.importClause.namedBindings) {
+                        switch (node.importClause.namedBindings.kind) {
+                            case SyntaxKind.NamespaceImport:
+                                result.specifiers.push(this.convertChild(node.importClause.namedBindings));
+                                break;
+                            case SyntaxKind.NamedImports:
+                                result.specifiers = result.specifiers.concat(node.importClause.namedBindings.elements.map(el => this.convertChild(el)));
+                                break;
+                        }
+                    }
+                }
+                return result;
+            }
+            case SyntaxKind.NamespaceImport:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ImportNamespaceSpecifier,
+                    local: this.convertChild(node.name),
+                });
+            case SyntaxKind.ImportSpecifier:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ImportSpecifier,
+                    local: this.convertChild(node.name),
+                    imported: this.convertChild((_f = node.propertyName) !== null && _f !== void 0 ? _f : node.name),
+                });
+            case SyntaxKind.ImportClause: {
+                const local = this.convertChild(node.name);
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ImportDefaultSpecifier,
+                    local,
+                    range: local.range,
+                });
+            }
+            case SyntaxKind.ExportDeclaration:
+                if (((_g = node.exportClause) === null || _g === void 0 ? void 0 : _g.kind) === SyntaxKind.NamedExports) {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.ExportNamedDeclaration,
+                        source: this.convertChild(node.moduleSpecifier),
+                        specifiers: node.exportClause.elements.map(el => this.convertChild(el)),
+                        exportKind: node.isTypeOnly ? 'type' : 'value',
+                        declaration: null,
+                    });
+                }
+                else {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.ExportAllDeclaration,
+                        source: this.convertChild(node.moduleSpecifier),
+                        exportKind: node.isTypeOnly ? 'type' : 'value',
+                        exported: 
+                        // note - for compat with 3.7.x, where node.exportClause is always undefined and
+                        //        SyntaxKind.NamespaceExport does not exist yet (i.e. is undefined), this
+                        //        cannot be shortened to an optional chain, or else you end up with
+                        //        undefined === undefined, and the true path will hard error at runtime
+                        node.exportClause &&
+                            node.exportClause.kind === SyntaxKind.NamespaceExport
+                            ? this.convertChild(node.exportClause.name)
+                            : null,
+                    });
+                }
+            case SyntaxKind.ExportSpecifier:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ExportSpecifier,
+                    local: this.convertChild((_h = node.propertyName) !== null && _h !== void 0 ? _h : node.name),
+                    exported: this.convertChild(node.name),
+                });
+            case SyntaxKind.ExportAssignment:
+                if (node.isExportEquals) {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.TSExportAssignment,
+                        expression: this.convertChild(node.expression),
+                    });
+                }
+                else {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.ExportDefaultDeclaration,
+                        declaration: this.convertChild(node.expression),
+                        exportKind: 'value',
+                    });
+                }
+            // Unary Operations
+            case SyntaxKind.PrefixUnaryExpression:
+            case SyntaxKind.PostfixUnaryExpression: {
+                const operator = node_utils_1.getTextForTokenKind(node.operator);
+                /**
+                 * ESTree uses UpdateExpression for ++/--
+                 */
+                if (operator === '++' || operator === '--') {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.UpdateExpression,
+                        operator,
+                        prefix: node.kind === SyntaxKind.PrefixUnaryExpression,
+                        argument: this.convertChild(node.operand),
+                    });
+                }
+                else {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.UnaryExpression,
+                        operator,
+                        prefix: node.kind === SyntaxKind.PrefixUnaryExpression,
+                        argument: this.convertChild(node.operand),
+                    });
+                }
+            }
+            case SyntaxKind.DeleteExpression:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.UnaryExpression,
+                    operator: 'delete',
+                    prefix: true,
+                    argument: this.convertChild(node.expression),
+                });
+            case SyntaxKind.VoidExpression:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.UnaryExpression,
+                    operator: 'void',
+                    prefix: true,
+                    argument: this.convertChild(node.expression),
+                });
+            case SyntaxKind.TypeOfExpression:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.UnaryExpression,
+                    operator: 'typeof',
+                    prefix: true,
+                    argument: this.convertChild(node.expression),
+                });
+            case SyntaxKind.TypeOperator:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSTypeOperator,
+                    operator: node_utils_1.getTextForTokenKind(node.operator),
+                    typeAnnotation: this.convertChild(node.type),
+                });
+            // Binary Operations
+            case SyntaxKind.BinaryExpression: {
+                // TypeScript uses BinaryExpression for sequences as well
+                if (node_utils_1.isComma(node.operatorToken)) {
+                    const result = this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.SequenceExpression,
+                        expressions: [],
+                    });
+                    const left = this.convertChild(node.left);
+                    if (left.type === ts_estree_1.AST_NODE_TYPES.SequenceExpression &&
+                        node.left.kind !== SyntaxKind.ParenthesizedExpression) {
+                        result.expressions = result.expressions.concat(left.expressions);
+                    }
+                    else {
+                        result.expressions.push(left);
+                    }
+                    result.expressions.push(this.convertChild(node.right));
+                    return result;
+                }
+                else {
+                    const type = node_utils_1.getBinaryExpressionType(node.operatorToken);
+                    if (this.allowPattern &&
+                        type === ts_estree_1.AST_NODE_TYPES.AssignmentExpression) {
+                        return this.createNode(node, {
+                            type: ts_estree_1.AST_NODE_TYPES.AssignmentPattern,
+                            left: this.convertPattern(node.left, node),
+                            right: this.convertChild(node.right),
+                        });
+                    }
+                    return this.createNode(node, {
+                        type,
+                        operator: node_utils_1.getTextForTokenKind(node.operatorToken.kind),
+                        left: this.converter(node.left, node, this.inTypeMode, type === ts_estree_1.AST_NODE_TYPES.AssignmentExpression),
+                        right: this.convertChild(node.right),
+                    });
+                }
+            }
+            case SyntaxKind.PropertyAccessExpression: {
+                const object = this.convertChild(node.expression);
+                const property = this.convertChild(node.name);
+                const computed = false;
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.MemberExpression,
+                    object,
+                    property,
+                    computed,
+                    optional: node.questionDotToken !== undefined,
+                });
+                return this.convertChainExpression(result, node);
+            }
+            case SyntaxKind.ElementAccessExpression: {
+                const object = this.convertChild(node.expression);
+                const property = this.convertChild(node.argumentExpression);
+                const computed = true;
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.MemberExpression,
+                    object,
+                    property,
+                    computed,
+                    optional: node.questionDotToken !== undefined,
+                });
+                return this.convertChainExpression(result, node);
+            }
+            case SyntaxKind.CallExpression: {
+                if (node.expression.kind === SyntaxKind.ImportKeyword) {
+                    if (node.arguments.length !== 1) {
+                        throw node_utils_1.createError(this.ast, node.arguments.pos, 'Dynamic import must have one specifier as an argument.');
+                    }
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.ImportExpression,
+                        source: this.convertChild(node.arguments[0]),
+                    });
+                }
+                const callee = this.convertChild(node.expression);
+                const args = node.arguments.map(el => this.convertChild(el));
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.CallExpression,
+                    callee,
+                    arguments: args,
+                    optional: node.questionDotToken !== undefined,
+                });
+                if (node.typeArguments) {
+                    result.typeParameters = this.convertTypeArgumentsToTypeParameters(node.typeArguments, node);
+                }
+                return this.convertChainExpression(result, node);
+            }
+            case SyntaxKind.NewExpression: {
+                // NOTE - NewExpression cannot have an optional chain in it
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.NewExpression,
+                    callee: this.convertChild(node.expression),
+                    arguments: node.arguments
+                        ? node.arguments.map(el => this.convertChild(el))
+                        : [],
+                });
+                if (node.typeArguments) {
+                    result.typeParameters = this.convertTypeArgumentsToTypeParameters(node.typeArguments, node);
+                }
+                return result;
+            }
+            case SyntaxKind.ConditionalExpression:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.ConditionalExpression,
+                    test: this.convertChild(node.condition),
+                    consequent: this.convertChild(node.whenTrue),
+                    alternate: this.convertChild(node.whenFalse),
+                });
+            case SyntaxKind.MetaProperty: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.MetaProperty,
+                    meta: this.createNode(
+                    // TODO: do we really want to convert it to Token?
+                    node.getFirstToken(), {
+                        type: ts_estree_1.AST_NODE_TYPES.Identifier,
+                        name: node_utils_1.getTextForTokenKind(node.keywordToken),
+                    }),
+                    property: this.convertChild(node.name),
+                });
+            }
+            case SyntaxKind.Decorator: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.Decorator,
+                    expression: this.convertChild(node.expression),
+                });
+            }
+            // Literals
+            case SyntaxKind.StringLiteral: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.Literal,
+                    raw: '',
+                    value: '',
+                });
+                result.raw = this.ast.text.slice(result.range[0], result.range[1]);
+                if ('name' in parent && parent.name === node) {
+                    result.value = node.text;
+                }
+                else {
+                    result.value = node_utils_1.unescapeStringLiteralText(node.text);
+                }
+                return result;
+            }
+            case SyntaxKind.NumericLiteral: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.Literal,
+                    value: Number(node.text),
+                    raw: node.getText(),
+                });
+            }
+            case SyntaxKind.BigIntLiteral: {
+                const range = node_utils_1.getRange(node, this.ast);
+                const rawValue = this.ast.text.slice(range[0], range[1]);
+                const bigint = rawValue
+                    // remove suffix `n`
+                    .slice(0, -1)
+                    // `BigInt` doesn't accept numeric separator
+                    // and `bigint` property should not include numeric separator
+                    .replace(/_/g, '');
+                const value = typeof BigInt !== 'undefined' ? BigInt(bigint) : null;
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.Literal,
+                    raw: rawValue,
+                    value: value,
+                    bigint: value === null ? bigint : String(value),
+                    range,
+                });
+            }
+            case SyntaxKind.RegularExpressionLiteral: {
+                const pattern = node.text.slice(1, node.text.lastIndexOf('/'));
+                const flags = node.text.slice(node.text.lastIndexOf('/') + 1);
+                let regex = null;
+                try {
+                    regex = new RegExp(pattern, flags);
+                }
+                catch (exception) {
+                    regex = null;
+                }
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.Literal,
+                    value: regex,
+                    raw: node.text,
+                    regex: {
+                        pattern,
+                        flags,
+                    },
+                });
+            }
+            case SyntaxKind.TrueKeyword:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.Literal,
+                    value: true,
+                    raw: 'true',
+                });
+            case SyntaxKind.FalseKeyword:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.Literal,
+                    value: false,
+                    raw: 'false',
+                });
+            case SyntaxKind.NullKeyword: {
+                if (!version_check_1.typescriptVersionIsAtLeast['4.0'] && this.inTypeMode) {
+                    // 4.0 started nesting null types inside a LiteralType node, but we still need to support pre-4.0
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.TSNullKeyword,
+                    });
+                }
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.Literal,
+                    value: null,
+                    raw: 'null',
+                });
+            }
+            case SyntaxKind.EmptyStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.EmptyStatement,
+                });
+            case SyntaxKind.DebuggerStatement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.DebuggerStatement,
+                });
+            // JSX
+            case SyntaxKind.JsxElement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.JSXElement,
+                    openingElement: this.convertChild(node.openingElement),
+                    closingElement: this.convertChild(node.closingElement),
+                    children: node.children.map(el => this.convertChild(el)),
+                });
+            case SyntaxKind.JsxFragment:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.JSXFragment,
+                    openingFragment: this.convertChild(node.openingFragment),
+                    closingFragment: this.convertChild(node.closingFragment),
+                    children: node.children.map(el => this.convertChild(el)),
+                });
+            case SyntaxKind.JsxSelfClosingElement: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.JSXElement,
+                    /**
+                     * Convert SyntaxKind.JsxSelfClosingElement to SyntaxKind.JsxOpeningElement,
+                     * TypeScript does not seem to have the idea of openingElement when tag is self-closing
+                     */
+                    openingElement: this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.JSXOpeningElement,
+                        typeParameters: node.typeArguments
+                            ? this.convertTypeArgumentsToTypeParameters(node.typeArguments, node)
+                            : undefined,
+                        selfClosing: true,
+                        name: this.convertJSXTagName(node.tagName, node),
+                        attributes: node.attributes.properties.map(el => this.convertChild(el)),
+                        range: node_utils_1.getRange(node, this.ast),
+                    }),
+                    closingElement: null,
+                    children: [],
+                });
+            }
+            case SyntaxKind.JsxOpeningElement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.JSXOpeningElement,
+                    typeParameters: node.typeArguments
+                        ? this.convertTypeArgumentsToTypeParameters(node.typeArguments, node)
+                        : undefined,
+                    selfClosing: false,
+                    name: this.convertJSXTagName(node.tagName, node),
+                    attributes: node.attributes.properties.map(el => this.convertChild(el)),
+                });
+            case SyntaxKind.JsxClosingElement:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.JSXClosingElement,
+                    name: this.convertJSXTagName(node.tagName, node),
+                });
+            case SyntaxKind.JsxOpeningFragment:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.JSXOpeningFragment,
+                });
+            case SyntaxKind.JsxClosingFragment:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.JSXClosingFragment,
+                });
+            case SyntaxKind.JsxExpression: {
+                const expression = node.expression
+                    ? this.convertChild(node.expression)
+                    : this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.JSXEmptyExpression,
+                        range: [node.getStart(this.ast) + 1, node.getEnd() - 1],
+                    });
+                if (node.dotDotDotToken) {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.JSXSpreadChild,
+                        expression,
+                    });
+                }
+                else {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.JSXExpressionContainer,
+                        expression,
+                    });
+                }
+            }
+            case SyntaxKind.JsxAttribute: {
+                const attributeName = this.convertChild(node.name);
+                attributeName.type = ts_estree_1.AST_NODE_TYPES.JSXIdentifier;
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.JSXAttribute,
+                    name: attributeName,
+                    value: this.convertChild(node.initializer),
+                });
+            }
+            /**
+             * The JSX AST changed the node type for string literals
+             * inside a JSX Element from `Literal` to `JSXText`. We
+             * provide a flag to support both types until `Literal`
+             * node type is deprecated in ESLint v5.
+             */
+            case SyntaxKind.JsxText: {
+                const start = node.getFullStart();
+                const end = node.getEnd();
+                if (this.options.useJSXTextNode) {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.JSXText,
+                        value: this.ast.text.slice(start, end),
+                        raw: this.ast.text.slice(start, end),
+                        range: [start, end],
+                    });
+                }
+                else {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.Literal,
+                        value: this.ast.text.slice(start, end),
+                        raw: this.ast.text.slice(start, end),
+                        range: [start, end],
+                    });
+                }
+            }
+            case SyntaxKind.JsxSpreadAttribute:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.JSXSpreadAttribute,
+                    argument: this.convertChild(node.expression),
+                });
+            case SyntaxKind.QualifiedName: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSQualifiedName,
+                    left: this.convertChild(node.left),
+                    right: this.convertChild(node.right),
+                });
+            }
+            // TypeScript specific
+            case SyntaxKind.TypeReference: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSTypeReference,
+                    typeName: this.convertType(node.typeName),
+                    typeParameters: node.typeArguments
+                        ? this.convertTypeArgumentsToTypeParameters(node.typeArguments, node)
+                        : undefined,
+                });
+            }
+            case SyntaxKind.TypeParameter: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSTypeParameter,
+                    name: this.convertType(node.name),
+                    constraint: node.constraint
+                        ? this.convertType(node.constraint)
+                        : undefined,
+                    default: node.default ? this.convertType(node.default) : undefined,
+                });
+            }
+            case SyntaxKind.ThisType:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSThisType,
+                });
+            case SyntaxKind.AnyKeyword:
+            case SyntaxKind.BigIntKeyword:
+            case SyntaxKind.BooleanKeyword:
+            case SyntaxKind.NeverKeyword:
+            case SyntaxKind.NumberKeyword:
+            case SyntaxKind.ObjectKeyword:
+            case SyntaxKind.StringKeyword:
+            case SyntaxKind.SymbolKeyword:
+            case SyntaxKind.UnknownKeyword:
+            case SyntaxKind.VoidKeyword:
+            case SyntaxKind.UndefinedKeyword: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES[`TS${SyntaxKind[node.kind]}`],
+                });
+            }
+            case SyntaxKind.NonNullExpression: {
+                const nnExpr = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSNonNullExpression,
+                    expression: this.convertChild(node.expression),
+                });
+                return this.convertChainExpression(nnExpr, node);
+            }
+            case SyntaxKind.TypeLiteral: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSTypeLiteral,
+                    members: node.members.map(el => this.convertChild(el)),
+                });
+            }
+            case SyntaxKind.ArrayType: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSArrayType,
+                    elementType: this.convertType(node.elementType),
+                });
+            }
+            case SyntaxKind.IndexedAccessType: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSIndexedAccessType,
+                    objectType: this.convertType(node.objectType),
+                    indexType: this.convertType(node.indexType),
+                });
+            }
+            case SyntaxKind.ConditionalType: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSConditionalType,
+                    checkType: this.convertType(node.checkType),
+                    extendsType: this.convertType(node.extendsType),
+                    trueType: this.convertType(node.trueType),
+                    falseType: this.convertType(node.falseType),
+                });
+            }
+            case SyntaxKind.TypeQuery: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSTypeQuery,
+                    exprName: this.convertType(node.exprName),
+                });
+            }
+            case SyntaxKind.MappedType: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSMappedType,
+                    typeParameter: this.convertType(node.typeParameter),
+                    nameType: (_j = this.convertType(node.nameType)) !== null && _j !== void 0 ? _j : null,
+                });
+                if (node.readonlyToken) {
+                    if (node.readonlyToken.kind === SyntaxKind.ReadonlyKeyword) {
+                        result.readonly = true;
+                    }
+                    else {
+                        result.readonly = node_utils_1.getTextForTokenKind(node.readonlyToken.kind);
+                    }
+                }
+                if (node.questionToken) {
+                    if (node.questionToken.kind === SyntaxKind.QuestionToken) {
+                        result.optional = true;
+                    }
+                    else {
+                        result.optional = node_utils_1.getTextForTokenKind(node.questionToken.kind);
+                    }
+                }
+                if (node.type) {
+                    result.typeAnnotation = this.convertType(node.type);
+                }
+                return result;
+            }
+            case SyntaxKind.ParenthesizedExpression:
+                return this.convertChild(node.expression, parent);
+            case SyntaxKind.TypeAliasDeclaration: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSTypeAliasDeclaration,
+                    id: this.convertChild(node.name),
+                    typeAnnotation: this.convertType(node.type),
+                });
+                if (node_utils_1.hasModifier(SyntaxKind.DeclareKeyword, node)) {
+                    result.declare = true;
+                }
+                // Process typeParameters
+                if (node.typeParameters) {
+                    result.typeParameters = this.convertTSTypeParametersToTypeParametersDeclaration(node.typeParameters);
+                }
+                // check for exports
+                return this.fixExports(node, result);
+            }
+            case SyntaxKind.MethodSignature: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSMethodSignature,
+                    computed: node_utils_1.isComputedProperty(node.name),
+                    key: this.convertChild(node.name),
+                    params: this.convertParameters(node.parameters),
+                });
+                if (node_utils_1.isOptional(node)) {
+                    result.optional = true;
+                }
+                if (node.type) {
+                    result.returnType = this.convertTypeAnnotation(node.type, node);
+                }
+                if (node_utils_1.hasModifier(SyntaxKind.ReadonlyKeyword, node)) {
+                    result.readonly = true;
+                }
+                if (node.typeParameters) {
+                    result.typeParameters = this.convertTSTypeParametersToTypeParametersDeclaration(node.typeParameters);
+                }
+                const accessibility = node_utils_1.getTSNodeAccessibility(node);
+                if (accessibility) {
+                    result.accessibility = accessibility;
+                }
+                if (node_utils_1.hasModifier(SyntaxKind.ExportKeyword, node)) {
+                    result.export = true;
+                }
+                if (node_utils_1.hasModifier(SyntaxKind.StaticKeyword, node)) {
+                    result.static = true;
+                }
+                return result;
+            }
+            case SyntaxKind.PropertySignature: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSPropertySignature,
+                    optional: node_utils_1.isOptional(node) || undefined,
+                    computed: node_utils_1.isComputedProperty(node.name),
+                    key: this.convertChild(node.name),
+                    typeAnnotation: node.type
+                        ? this.convertTypeAnnotation(node.type, node)
+                        : undefined,
+                    initializer: this.convertChild(node.initializer) || undefined,
+                    readonly: node_utils_1.hasModifier(SyntaxKind.ReadonlyKeyword, node) || undefined,
+                    static: node_utils_1.hasModifier(SyntaxKind.StaticKeyword, node) || undefined,
+                    export: node_utils_1.hasModifier(SyntaxKind.ExportKeyword, node) || undefined,
+                });
+                const accessibility = node_utils_1.getTSNodeAccessibility(node);
+                if (accessibility) {
+                    result.accessibility = accessibility;
+                }
+                return result;
+            }
+            case SyntaxKind.IndexSignature: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSIndexSignature,
+                    parameters: node.parameters.map(el => this.convertChild(el)),
+                });
+                if (node.type) {
+                    result.typeAnnotation = this.convertTypeAnnotation(node.type, node);
+                }
+                if (node_utils_1.hasModifier(SyntaxKind.ReadonlyKeyword, node)) {
+                    result.readonly = true;
+                }
+                const accessibility = node_utils_1.getTSNodeAccessibility(node);
+                if (accessibility) {
+                    result.accessibility = accessibility;
+                }
+                if (node_utils_1.hasModifier(SyntaxKind.ExportKeyword, node)) {
+                    result.export = true;
+                }
+                if (node_utils_1.hasModifier(SyntaxKind.StaticKeyword, node)) {
+                    result.static = true;
+                }
+                return result;
+            }
+            case SyntaxKind.ConstructorType:
+            case SyntaxKind.FunctionType:
+            case SyntaxKind.ConstructSignature:
+            case SyntaxKind.CallSignature: {
+                let type;
+                switch (node.kind) {
+                    case SyntaxKind.ConstructSignature:
+                        type = ts_estree_1.AST_NODE_TYPES.TSConstructSignatureDeclaration;
+                        break;
+                    case SyntaxKind.CallSignature:
+                        type = ts_estree_1.AST_NODE_TYPES.TSCallSignatureDeclaration;
+                        break;
+                    case SyntaxKind.FunctionType:
+                        type = ts_estree_1.AST_NODE_TYPES.TSFunctionType;
+                        break;
+                    case SyntaxKind.ConstructorType:
+                    default:
+                        type = ts_estree_1.AST_NODE_TYPES.TSConstructorType;
+                        break;
+                }
+                const result = this.createNode(node, {
+                    type: type,
+                    params: this.convertParameters(node.parameters),
+                });
+                if (node.type) {
+                    result.returnType = this.convertTypeAnnotation(node.type, node);
+                }
+                if (node.typeParameters) {
+                    result.typeParameters = this.convertTSTypeParametersToTypeParametersDeclaration(node.typeParameters);
+                }
+                return result;
+            }
+            case SyntaxKind.ExpressionWithTypeArguments: {
+                const result = this.createNode(node, {
+                    type: parent && parent.kind === SyntaxKind.InterfaceDeclaration
+                        ? ts_estree_1.AST_NODE_TYPES.TSInterfaceHeritage
+                        : ts_estree_1.AST_NODE_TYPES.TSClassImplements,
+                    expression: this.convertChild(node.expression),
+                });
+                if (node.typeArguments) {
+                    result.typeParameters = this.convertTypeArgumentsToTypeParameters(node.typeArguments, node);
+                }
+                return result;
+            }
+            case SyntaxKind.InterfaceDeclaration: {
+                const interfaceHeritageClauses = (_k = node.heritageClauses) !== null && _k !== void 0 ? _k : [];
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSInterfaceDeclaration,
+                    body: this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.TSInterfaceBody,
+                        body: node.members.map(member => this.convertChild(member)),
+                        range: [node.members.pos - 1, node.end],
+                    }),
+                    id: this.convertChild(node.name),
+                });
+                if (node.typeParameters) {
+                    result.typeParameters = this.convertTSTypeParametersToTypeParametersDeclaration(node.typeParameters);
+                }
+                if (interfaceHeritageClauses.length > 0) {
+                    const interfaceExtends = [];
+                    const interfaceImplements = [];
+                    for (const heritageClause of interfaceHeritageClauses) {
+                        if (heritageClause.token === SyntaxKind.ExtendsKeyword) {
+                            for (const n of heritageClause.types) {
+                                interfaceExtends.push(this.convertChild(n, node));
+                            }
+                        }
+                        else {
+                            for (const n of heritageClause.types) {
+                                interfaceImplements.push(this.convertChild(n, node));
+                            }
+                        }
+                    }
+                    if (interfaceExtends.length) {
+                        result.extends = interfaceExtends;
+                    }
+                    if (interfaceImplements.length) {
+                        result.implements = interfaceImplements;
+                    }
+                }
+                if (node_utils_1.hasModifier(SyntaxKind.AbstractKeyword, node)) {
+                    result.abstract = true;
+                }
+                if (node_utils_1.hasModifier(SyntaxKind.DeclareKeyword, node)) {
+                    result.declare = true;
+                }
+                // check for exports
+                return this.fixExports(node, result);
+            }
+            case SyntaxKind.TypePredicate: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSTypePredicate,
+                    asserts: node.assertsModifier !== undefined,
+                    parameterName: this.convertChild(node.parameterName),
+                    typeAnnotation: null,
+                });
+                /**
+                 * Specific fix for type-guard location data
+                 */
+                if (node.type) {
+                    result.typeAnnotation = this.convertTypeAnnotation(node.type, node);
+                    result.typeAnnotation.loc = result.typeAnnotation.typeAnnotation.loc;
+                    result.typeAnnotation.range =
+                        result.typeAnnotation.typeAnnotation.range;
+                }
+                return result;
+            }
+            case SyntaxKind.ImportType:
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSImportType,
+                    isTypeOf: !!node.isTypeOf,
+                    parameter: this.convertChild(node.argument),
+                    qualifier: this.convertChild(node.qualifier),
+                    typeParameters: node.typeArguments
+                        ? this.convertTypeArgumentsToTypeParameters(node.typeArguments, node)
+                        : null,
+                });
+            case SyntaxKind.EnumDeclaration: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSEnumDeclaration,
+                    id: this.convertChild(node.name),
+                    members: node.members.map(el => this.convertChild(el)),
+                });
+                // apply modifiers first...
+                this.applyModifiersToResult(result, node.modifiers);
+                // ...then check for exports
+                return this.fixExports(node, result);
+            }
+            case SyntaxKind.EnumMember: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSEnumMember,
+                    id: this.convertChild(node.name),
+                });
+                if (node.initializer) {
+                    result.initializer = this.convertChild(node.initializer);
+                }
+                if (node.name.kind === ts.SyntaxKind.ComputedPropertyName) {
+                    result.computed = true;
+                }
+                return result;
+            }
+            case SyntaxKind.ModuleDeclaration: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSModuleDeclaration,
+                    id: this.convertChild(node.name),
+                });
+                if (node.body) {
+                    result.body = this.convertChild(node.body);
+                }
+                // apply modifiers first...
+                this.applyModifiersToResult(result, node.modifiers);
+                if (node.flags & ts.NodeFlags.GlobalAugmentation) {
+                    result.global = true;
+                }
+                // ...then check for exports
+                return this.fixExports(node, result);
+            }
+            // TypeScript specific types
+            case SyntaxKind.ParenthesizedType: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSParenthesizedType,
+                    typeAnnotation: this.convertType(node.type),
+                });
+            }
+            case SyntaxKind.UnionType: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSUnionType,
+                    types: node.types.map(el => this.convertType(el)),
+                });
+            }
+            case SyntaxKind.IntersectionType: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSIntersectionType,
+                    types: node.types.map(el => this.convertType(el)),
+                });
+            }
+            case SyntaxKind.AsExpression: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSAsExpression,
+                    expression: this.convertChild(node.expression),
+                    typeAnnotation: this.convertType(node.type),
+                });
+            }
+            case SyntaxKind.InferType: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSInferType,
+                    typeParameter: this.convertType(node.typeParameter),
+                });
+            }
+            case SyntaxKind.LiteralType: {
+                if (version_check_1.typescriptVersionIsAtLeast['4.0'] &&
+                    node.literal.kind === SyntaxKind.NullKeyword) {
+                    // 4.0 started nesting null types inside a LiteralType node
+                    // but our AST is designed around the old way of null being a keyword
+                    return this.createNode(node.literal, {
+                        type: ts_estree_1.AST_NODE_TYPES.TSNullKeyword,
+                    });
+                }
+                else {
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.TSLiteralType,
+                        literal: this.convertType(node.literal),
+                    });
+                }
+            }
+            case SyntaxKind.TypeAssertionExpression: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSTypeAssertion,
+                    typeAnnotation: this.convertType(node.type),
+                    expression: this.convertChild(node.expression),
+                });
+            }
+            case SyntaxKind.ImportEqualsDeclaration: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSImportEqualsDeclaration,
+                    id: this.convertChild(node.name),
+                    moduleReference: this.convertChild(node.moduleReference),
+                    isExport: node_utils_1.hasModifier(SyntaxKind.ExportKeyword, node),
+                });
+            }
+            case SyntaxKind.ExternalModuleReference: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSExternalModuleReference,
+                    expression: this.convertChild(node.expression),
+                });
+            }
+            case SyntaxKind.NamespaceExportDeclaration: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSNamespaceExportDeclaration,
+                    id: this.convertChild(node.name),
+                });
+            }
+            case SyntaxKind.AbstractKeyword: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSAbstractKeyword,
+                });
+            }
+            // Tuple
+            case SyntaxKind.TupleType: {
+                // In TS 4.0, the `elementTypes` property was changed to `elements`.
+                // To support both at compile time, we cast to access the newer version
+                // if the former does not exist.
+                const elementTypes = 'elementTypes' in node
+                    ? node.elementTypes.map((el) => this.convertType(el))
+                    : node.elements.map((el) => this.convertType(el));
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSTupleType,
+                    elementTypes,
+                });
+            }
+            case SyntaxKind.NamedTupleMember: {
+                const member = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSNamedTupleMember,
+                    elementType: this.convertType(node.type, node),
+                    label: this.convertChild(node.name, node),
+                    optional: node.questionToken != null,
+                });
+                if (node.dotDotDotToken) {
+                    // adjust the start to account for the "..."
+                    member.range[0] = member.label.range[0];
+                    member.loc.start = member.label.loc.start;
+                    return this.createNode(node, {
+                        type: ts_estree_1.AST_NODE_TYPES.TSRestType,
+                        typeAnnotation: member,
+                    });
+                }
+                return member;
+            }
+            case SyntaxKind.OptionalType: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSOptionalType,
+                    typeAnnotation: this.convertType(node.type),
+                });
+            }
+            case SyntaxKind.RestType: {
+                return this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSRestType,
+                    typeAnnotation: this.convertType(node.type),
+                });
+            }
+            // Template Literal Types
+            case SyntaxKind.TemplateLiteralType: {
+                const result = this.createNode(node, {
+                    type: ts_estree_1.AST_NODE_TYPES.TSTemplateLiteralType,
+                    quasis: [this.convertChild(node.head)],
+                    types: [],
+                });
+                node.templateSpans.forEach(templateSpan => {
+                    result.types.push(this.convertChild(templateSpan.type));
+                    result.quasis.push(this.convertChild(templateSpan.literal));
+                });
+                return result;
+            }
+            default:
+                return this.deeplyCopy(node);
+        }
+    }
+}
+exports.Converter = Converter;
+//# sourceMappingURL=convert.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/convert.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..9f1b7bfc8a9baa1bf64f9467e7e71d5a3f4e57d1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/convert.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"convert.js","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..85764acf9e3017d566fd741fe9cfcf6d3e615cc6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.d.ts
@@ -0,0 +1,13 @@
+import * as ts from 'typescript';
+interface DirectoryStructureHost {
+    readDirectory?(path: string, extensions?: ReadonlyArray<string>, exclude?: ReadonlyArray<string>, include?: ReadonlyArray<string>, depth?: number): string[];
+}
+interface CachedDirectoryStructureHost extends DirectoryStructureHost {
+    readDirectory(path: string, extensions?: ReadonlyArray<string>, exclude?: ReadonlyArray<string>, include?: ReadonlyArray<string>, depth?: number): string[];
+}
+interface WatchCompilerHostOfConfigFile<T extends ts.BuilderProgram> extends ts.WatchCompilerHostOfConfigFile<T> {
+    onCachedDirectoryStructureHostCreate(host: CachedDirectoryStructureHost): void;
+    extraFileExtensions?: readonly ts.FileExtensionInfo[];
+}
+export { WatchCompilerHostOfConfigFile };
+//# sourceMappingURL=WatchCompilerHostOfConfigFile.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..408e42e8e47a686ab424633aa91cd8f337898704
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"WatchCompilerHostOfConfigFile.d.ts","sourceRoot":"","sources":["../../src/create-program/WatchCompilerHostOfConfigFile.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAGjC,UAAU,sBAAsB;IAC9B,aAAa,CAAC,CACZ,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,EAClC,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,EAC/B,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,EAC/B,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,EAAE,CAAC;CACb;AAGD,UAAU,4BAA6B,SAAQ,sBAAsB;IACnE,aAAa,CACX,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,EAClC,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,EAC/B,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,EAC/B,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,EAAE,CAAC;CACb;AAGD,UAAU,6BAA6B,CAAC,CAAC,SAAS,EAAE,CAAC,cAAc,CACjE,SAAQ,EAAE,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAC3C,oCAAoC,CAClC,IAAI,EAAE,4BAA4B,GACjC,IAAI,CAAC;IACR,mBAAmB,CAAC,EAAE,SAAS,EAAE,CAAC,iBAAiB,EAAE,CAAC;CACvD;AAED,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.js
new file mode 100644
index 0000000000000000000000000000000000000000..dcb0712993cd3e4944de0ee8636dacd66c9204d8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.js
@@ -0,0 +1,6 @@
+"use strict";
+// These types are internal to TS.
+// They have been trimmed down to only include the relevant bits
+// We use some special internal TS apis to help us do our parsing flexibly
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=WatchCompilerHostOfConfigFile.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..757e885ccc538f6baf90b86c0d62a9007dae0279
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"WatchCompilerHostOfConfigFile.js","sourceRoot":"","sources":["../../src/create-program/WatchCompilerHostOfConfigFile.ts"],"names":[],"mappings":";AAAA,kCAAkC;AAClC,gEAAgE;AAChE,0EAA0E"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ea80b7334c99c56b7af18a82e918173b20fac133
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.d.ts
@@ -0,0 +1,12 @@
+import { Extra } from '../parser-options';
+import { ASTAndProgram } from './shared';
+/**
+ * @param code The code of the file being linted
+ * @param extra The config object
+ * @param extra.tsconfigRootDir The root directory for relative tsconfig paths
+ * @param extra.projects Provided tsconfig paths
+ * @returns If found, returns the source file corresponding to the code and the containing program
+ */
+declare function createDefaultProgram(code: string, extra: Extra): ASTAndProgram | undefined;
+export { createDefaultProgram };
+//# sourceMappingURL=createDefaultProgram.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..2c26fe561d17c362299394df33830f0c2c1239c2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"createDefaultProgram.d.ts","sourceRoot":"","sources":["../../src/create-program/createDefaultProgram.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,aAAa,EAGd,MAAM,UAAU,CAAC;AAIlB;;;;;;GAMG;AACH,iBAAS,oBAAoB,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,GACX,aAAa,GAAG,SAAS,CAqC3B;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c1c584c90b0bf121521b8418d5d6fe14462a384
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.js
@@ -0,0 +1,59 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createDefaultProgram = void 0;
+const debug_1 = __importDefault(require("debug"));
+const path_1 = __importDefault(require("path"));
+const ts = __importStar(require("typescript"));
+const shared_1 = require("./shared");
+const log = debug_1.default('typescript-eslint:typescript-estree:createDefaultProgram');
+/**
+ * @param code The code of the file being linted
+ * @param extra The config object
+ * @param extra.tsconfigRootDir The root directory for relative tsconfig paths
+ * @param extra.projects Provided tsconfig paths
+ * @returns If found, returns the source file corresponding to the code and the containing program
+ */
+function createDefaultProgram(code, extra) {
+    log('Getting default program for: %s', extra.filePath || 'unnamed file');
+    if (!extra.projects || extra.projects.length !== 1) {
+        return undefined;
+    }
+    const tsconfigPath = extra.projects[0];
+    const commandLine = ts.getParsedCommandLineOfConfigFile(tsconfigPath, shared_1.createDefaultCompilerOptionsFromExtra(extra), Object.assign(Object.assign({}, ts.sys), { onUnRecoverableConfigFileDiagnostic: () => { } }));
+    if (!commandLine) {
+        return undefined;
+    }
+    const compilerHost = ts.createCompilerHost(commandLine.options, 
+    /* setParentNodes */ true);
+    const oldReadFile = compilerHost.readFile;
+    compilerHost.readFile = (fileName) => path_1.default.normalize(fileName) === path_1.default.normalize(extra.filePath)
+        ? code
+        : oldReadFile(fileName);
+    const program = ts.createProgram([extra.filePath], commandLine.options, compilerHost);
+    const ast = program.getSourceFile(extra.filePath);
+    return ast && { ast, program };
+}
+exports.createDefaultProgram = createDefaultProgram;
+//# sourceMappingURL=createDefaultProgram.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e70eabd76893778ae58f273ba9bbb081d41adcb1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"createDefaultProgram.js","sourceRoot":"","sources":["../../src/create-program/createDefaultProgram.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,gDAAwB;AACxB,+CAAiC;AAEjC,qCAIkB;AAElB,MAAM,GAAG,GAAG,eAAK,CAAC,0DAA0D,CAAC,CAAC;AAE9E;;;;;;GAMG;AACH,SAAS,oBAAoB,CAC3B,IAAY,EACZ,KAAY;IAEZ,GAAG,CAAC,iCAAiC,EAAE,KAAK,CAAC,QAAQ,IAAI,cAAc,CAAC,CAAC;IAEzE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;QAClD,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,YAAY,GAAkB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtD,MAAM,WAAW,GAAG,EAAE,CAAC,gCAAgC,CACrD,YAAY,EACZ,8CAAqC,CAAC,KAAK,CAAC,kCACvC,EAAE,CAAC,GAAG,KAAE,mCAAmC,EAAE,GAAG,EAAE,GAAE,CAAC,IAC3D,CAAC;IAEF,IAAI,CAAC,WAAW,EAAE;QAChB,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,YAAY,GAAG,EAAE,CAAC,kBAAkB,CACxC,WAAW,CAAC,OAAO;IACnB,oBAAoB,CAAC,IAAI,CAC1B,CAAC;IACF,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC;IAC1C,YAAY,CAAC,QAAQ,GAAG,CAAC,QAAgB,EAAsB,EAAE,CAC/D,cAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,cAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;QACzD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE5B,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAC9B,CAAC,KAAK,CAAC,QAAQ,CAAC,EAChB,WAAW,CAAC,OAAO,EACnB,YAAY,CACb,CAAC;IACF,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAElD,OAAO,GAAG,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC;AAEQ,oDAAoB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..26bc6e4b394af136040eaa378b26a8ef0e4d5b08
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.d.ts
@@ -0,0 +1,9 @@
+import { Extra } from '../parser-options';
+import { ASTAndProgram } from './shared';
+/**
+ * @param code The code of the file being linted
+ * @returns Returns a new source file and program corresponding to the linted code
+ */
+declare function createIsolatedProgram(code: string, extra: Extra): ASTAndProgram;
+export { createIsolatedProgram };
+//# sourceMappingURL=createIsolatedProgram.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..d246fcaf876f96014cba671b3b1f411ef137595f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"createIsolatedProgram.d.ts","sourceRoot":"","sources":["../../src/create-program/createIsolatedProgram.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,aAAa,EAGd,MAAM,UAAU,CAAC;AAIlB;;;GAGG;AACH,iBAAS,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,aAAa,CAmExE;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.js
new file mode 100644
index 0000000000000000000000000000000000000000..88d4ba3b625f49e7c499bad52eda356240192d16
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.js
@@ -0,0 +1,78 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createIsolatedProgram = void 0;
+const debug_1 = __importDefault(require("debug"));
+const ts = __importStar(require("typescript"));
+const shared_1 = require("./shared");
+const log = debug_1.default('typescript-eslint:typescript-estree:createIsolatedProgram');
+/**
+ * @param code The code of the file being linted
+ * @returns Returns a new source file and program corresponding to the linted code
+ */
+function createIsolatedProgram(code, extra) {
+    log('Getting isolated program in %s mode for: %s', extra.jsx ? 'TSX' : 'TS', extra.filePath);
+    const compilerHost = {
+        fileExists() {
+            return true;
+        },
+        getCanonicalFileName() {
+            return extra.filePath;
+        },
+        getCurrentDirectory() {
+            return '';
+        },
+        getDirectories() {
+            return [];
+        },
+        getDefaultLibFileName() {
+            return 'lib.d.ts';
+        },
+        // TODO: Support Windows CRLF
+        getNewLine() {
+            return '\n';
+        },
+        getSourceFile(filename) {
+            return ts.createSourceFile(filename, code, ts.ScriptTarget.Latest, 
+            /* setParentNodes */ true, shared_1.getScriptKind(extra, filename));
+        },
+        readFile() {
+            return undefined;
+        },
+        useCaseSensitiveFileNames() {
+            return true;
+        },
+        writeFile() {
+            return null;
+        },
+    };
+    const program = ts.createProgram([extra.filePath], Object.assign({ noResolve: true, target: ts.ScriptTarget.Latest, jsx: extra.jsx ? ts.JsxEmit.Preserve : undefined }, shared_1.createDefaultCompilerOptionsFromExtra(extra)), compilerHost);
+    const ast = program.getSourceFile(extra.filePath);
+    if (!ast) {
+        throw new Error('Expected an ast to be returned for the single-file isolated program.');
+    }
+    return { ast, program };
+}
+exports.createIsolatedProgram = createIsolatedProgram;
+//# sourceMappingURL=createIsolatedProgram.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..75a61456fe3d8cbe4e0bb9477d805289387fdd34
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"createIsolatedProgram.js","sourceRoot":"","sources":["../../src/create-program/createIsolatedProgram.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,+CAAiC;AAEjC,qCAIkB;AAElB,MAAM,GAAG,GAAG,eAAK,CAAC,2DAA2D,CAAC,CAAC;AAE/E;;;GAGG;AACH,SAAS,qBAAqB,CAAC,IAAY,EAAE,KAAY;IACvD,GAAG,CACD,6CAA6C,EAC7C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EACxB,KAAK,CAAC,QAAQ,CACf,CAAC;IAEF,MAAM,YAAY,GAAoB;QACpC,UAAU;YACR,OAAO,IAAI,CAAC;QACd,CAAC;QACD,oBAAoB;YAClB,OAAO,KAAK,CAAC,QAAQ,CAAC;QACxB,CAAC;QACD,mBAAmB;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,cAAc;YACZ,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,qBAAqB;YACnB,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,6BAA6B;QAC7B,UAAU;YACR,OAAO,IAAI,CAAC;QACd,CAAC;QACD,aAAa,CAAC,QAAgB;YAC5B,OAAO,EAAE,CAAC,gBAAgB,CACxB,QAAQ,EACR,IAAI,EACJ,EAAE,CAAC,YAAY,CAAC,MAAM;YACtB,oBAAoB,CAAC,IAAI,EACzB,sBAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAC/B,CAAC;QACJ,CAAC;QACD,QAAQ;YACN,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,yBAAyB;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,SAAS;YACP,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;IAEF,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAC9B,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAEd,SAAS,EAAE,IAAI,EACf,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAC9B,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,IAC7C,8CAAqC,CAAC,KAAK,CAAC,GAEjD,YAAY,CACb,CAAC;IAEF,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,EAAE;QACR,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;KACH;IAED,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC1B,CAAC;AAEQ,sDAAqB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..04a7e1032ebdd8650d75ff04f404ef123ccb8e2b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.d.ts
@@ -0,0 +1,11 @@
+import { Extra } from '../parser-options';
+import { ASTAndProgram } from './shared';
+/**
+ * @param code The code of the file being linted
+ * @param createDefaultProgram True if the default program should be created
+ * @param extra The config object
+ * @returns If found, returns the source file corresponding to the code and the containing program
+ */
+declare function createProjectProgram(code: string, createDefaultProgram: boolean, extra: Extra): ASTAndProgram | undefined;
+export { createProjectProgram };
+//# sourceMappingURL=createProjectProgram.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..18380901c9567292cae7922812044e8ab4fadb0f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"createProjectProgram.d.ts","sourceRoot":"","sources":["../../src/create-program/createProjectProgram.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAazC;;;;;GAKG;AACH,iBAAS,oBAAoB,CAC3B,IAAI,EAAE,MAAM,EACZ,oBAAoB,EAAE,OAAO,EAC7B,KAAK,EAAE,KAAK,GACX,aAAa,GAAG,SAAS,CAyE3B;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.js
new file mode 100644
index 0000000000000000000000000000000000000000..917330b7e351379cf4c5645d5443a9b0e30f27b5
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.js
@@ -0,0 +1,75 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createProjectProgram = void 0;
+const debug_1 = __importDefault(require("debug"));
+const path_1 = __importDefault(require("path"));
+const createWatchProgram_1 = require("./createWatchProgram");
+const node_utils_1 = require("../node-utils");
+const log = debug_1.default('typescript-eslint:typescript-estree:createProjectProgram');
+const DEFAULT_EXTRA_FILE_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx'];
+function getExtension(fileName) {
+    if (!fileName) {
+        return null;
+    }
+    return fileName.endsWith('.d.ts') ? '.d.ts' : path_1.default.extname(fileName);
+}
+/**
+ * @param code The code of the file being linted
+ * @param createDefaultProgram True if the default program should be created
+ * @param extra The config object
+ * @returns If found, returns the source file corresponding to the code and the containing program
+ */
+function createProjectProgram(code, createDefaultProgram, extra) {
+    log('Creating project program for: %s', extra.filePath);
+    const astAndProgram = node_utils_1.firstDefined(createWatchProgram_1.getProgramsForProjects(code, extra.filePath, extra), currentProgram => {
+        const ast = currentProgram.getSourceFile(extra.filePath);
+        // working around https://github.com/typescript-eslint/typescript-eslint/issues/1573
+        const expectedExt = getExtension(extra.filePath);
+        const returnedExt = getExtension(ast === null || ast === void 0 ? void 0 : ast.fileName);
+        if (expectedExt !== returnedExt) {
+            return;
+        }
+        return ast && { ast, program: currentProgram };
+    });
+    if (!astAndProgram && !createDefaultProgram) {
+        // the file was either not matched within the tsconfig, or the extension wasn't expected
+        const errorLines = [
+            '"parserOptions.project" has been set for @typescript-eslint/parser.',
+            `The file does not match your project config: ${path_1.default.relative(extra.tsconfigRootDir || process.cwd(), extra.filePath)}.`,
+        ];
+        let hasMatchedAnError = false;
+        const extraFileExtensions = extra.extraFileExtensions || [];
+        extraFileExtensions.forEach(extraExtension => {
+            if (!extraExtension.startsWith('.')) {
+                errorLines.push(`Found unexpected extension "${extraExtension}" specified with the "extraFileExtensions" option. Did you mean ".${extraExtension}"?`);
+            }
+            if (DEFAULT_EXTRA_FILE_EXTENSIONS.includes(extraExtension)) {
+                errorLines.push(`You unnecessarily included the extension "${extraExtension}" with the "extraFileExtensions" option. This extension is already handled by the parser by default.`);
+            }
+        });
+        const fileExtension = path_1.default.extname(extra.filePath);
+        if (!DEFAULT_EXTRA_FILE_EXTENSIONS.includes(fileExtension)) {
+            const nonStandardExt = `The extension for the file (${fileExtension}) is non-standard`;
+            if (extraFileExtensions.length > 0) {
+                if (!extraFileExtensions.includes(fileExtension)) {
+                    errorLines.push(`${nonStandardExt}. It should be added to your existing "parserOptions.extraFileExtensions".`);
+                    hasMatchedAnError = true;
+                }
+            }
+            else {
+                errorLines.push(`${nonStandardExt}. You should add "parserOptions.extraFileExtensions" to your config.`);
+                hasMatchedAnError = true;
+            }
+        }
+        if (!hasMatchedAnError) {
+            errorLines.push('The file must be included in at least one of the projects provided.');
+        }
+        throw new Error(errorLines.join('\n'));
+    }
+    return astAndProgram;
+}
+exports.createProjectProgram = createProjectProgram;
+//# sourceMappingURL=createProjectProgram.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..a39bb006e9d3cf677b5817aa2dc5527795d9c989
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"createProjectProgram.js","sourceRoot":"","sources":["../../src/create-program/createProjectProgram.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..340cdd985a9fedf6a0473a20712394b90024d2f7
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.d.ts
@@ -0,0 +1,5 @@
+import * as ts from 'typescript';
+import { Extra } from '../parser-options';
+declare function createSourceFile(code: string, extra: Extra): ts.SourceFile;
+export { createSourceFile };
+//# sourceMappingURL=createSourceFile.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..68f375dac35807f4243b3f6fadda70b6fdbc4835
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"createSourceFile.d.ts","sourceRoot":"","sources":["../../src/create-program/createSourceFile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAK1C,iBAAS,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,CAAC,UAAU,CAcnE;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.js
new file mode 100644
index 0000000000000000000000000000000000000000..910a1fa36eba19fc220e55c2814da6d73cb42434
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.js
@@ -0,0 +1,36 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createSourceFile = void 0;
+const debug_1 = __importDefault(require("debug"));
+const ts = __importStar(require("typescript"));
+const shared_1 = require("./shared");
+const log = debug_1.default('typescript-eslint:typescript-estree:createSourceFile');
+function createSourceFile(code, extra) {
+    log('Getting AST without type information in %s mode for: %s', extra.jsx ? 'TSX' : 'TS', extra.filePath);
+    return ts.createSourceFile(extra.filePath, code, ts.ScriptTarget.Latest, 
+    /* setParentNodes */ true, shared_1.getScriptKind(extra));
+}
+exports.createSourceFile = createSourceFile;
+//# sourceMappingURL=createSourceFile.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..693f43c7a3bbebea1001d81cb4b10ed830543416
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"createSourceFile.js","sourceRoot":"","sources":["../../src/create-program/createSourceFile.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,+CAAiC;AAEjC,qCAAyC;AAEzC,MAAM,GAAG,GAAG,eAAK,CAAC,sDAAsD,CAAC,CAAC;AAE1E,SAAS,gBAAgB,CAAC,IAAY,EAAE,KAAY;IAClD,GAAG,CACD,yDAAyD,EACzD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EACxB,KAAK,CAAC,QAAQ,CACf,CAAC;IAEF,OAAO,EAAE,CAAC,gBAAgB,CACxB,KAAK,CAAC,QAAQ,EACd,IAAI,EACJ,EAAE,CAAC,YAAY,CAAC,MAAM;IACtB,oBAAoB,CAAC,IAAI,EACzB,sBAAa,CAAC,KAAK,CAAC,CACrB,CAAC;AACJ,CAAC;AAEQ,4CAAgB"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createWatchProgram.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createWatchProgram.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..af73e0c66f8ef7adf653e914aa0056849bba15ad
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createWatchProgram.d.ts
@@ -0,0 +1,19 @@
+import * as ts from 'typescript';
+import { Extra } from '../parser-options';
+/**
+ * Clear all of the parser caches.
+ * This should only be used in testing to ensure the parser is clean between tests.
+ */
+declare function clearCaches(): void;
+/**
+ * Calculate project environments using options provided by consumer and paths from config
+ * @param code The code being linted
+ * @param filePathIn The path of the file being parsed
+ * @param extra.tsconfigRootDir The root directory for relative tsconfig paths
+ * @param extra.projects Provided tsconfig paths
+ * @returns The programs corresponding to the supplied tsconfig paths
+ */
+declare function getProgramsForProjects(code: string, filePathIn: string, extra: Extra): ts.Program[];
+declare function createWatchProgram(tsconfigPath: string, extra: Extra): ts.WatchOfConfigFile<ts.BuilderProgram>;
+export { clearCaches, createWatchProgram, getProgramsForProjects };
+//# sourceMappingURL=createWatchProgram.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createWatchProgram.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createWatchProgram.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..74b58d49cbbe7568d40f9428953e030aa1a4224f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createWatchProgram.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"createWatchProgram.d.ts","sourceRoot":"","sources":["../../src/create-program/createWatchProgram.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AA4C1C;;;GAGG;AACH,iBAAS,WAAW,IAAI,IAAI,CAO3B;AAyED;;;;;;;GAOG;AACH,iBAAS,sBAAsB,CAC7B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,KAAK,GACX,EAAE,CAAC,OAAO,EAAE,CAyGd;AAMD,iBAAS,kBAAkB,CACzB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,KAAK,GACX,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,cAAc,CAAC,CA+HzC;AAoJD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createWatchProgram.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createWatchProgram.js
new file mode 100644
index 0000000000000000000000000000000000000000..62343e9c85170159c55f5372803961bc66414073
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createWatchProgram.js
@@ -0,0 +1,406 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getProgramsForProjects = exports.createWatchProgram = exports.clearCaches = void 0;
+const debug_1 = __importDefault(require("debug"));
+const fs_1 = __importDefault(require("fs"));
+const semver_1 = __importDefault(require("semver"));
+const ts = __importStar(require("typescript"));
+const shared_1 = require("./shared");
+const log = debug_1.default('typescript-eslint:typescript-estree:createWatchProgram');
+/**
+ * Maps tsconfig paths to their corresponding file contents and resulting watches
+ */
+const knownWatchProgramMap = new Map();
+/**
+ * Maps file/folder paths to their set of corresponding watch callbacks
+ * There may be more than one per file/folder if a file/folder is shared between projects
+ */
+const fileWatchCallbackTrackingMap = new Map();
+const folderWatchCallbackTrackingMap = new Map();
+/**
+ * Stores the list of known files for each program
+ */
+const programFileListCache = new Map();
+/**
+ * Caches the last modified time of the tsconfig files
+ */
+const tsconfigLastModifiedTimestampCache = new Map();
+const parsedFilesSeenHash = new Map();
+/**
+ * Clear all of the parser caches.
+ * This should only be used in testing to ensure the parser is clean between tests.
+ */
+function clearCaches() {
+    knownWatchProgramMap.clear();
+    fileWatchCallbackTrackingMap.clear();
+    folderWatchCallbackTrackingMap.clear();
+    parsedFilesSeenHash.clear();
+    programFileListCache.clear();
+    tsconfigLastModifiedTimestampCache.clear();
+}
+exports.clearCaches = clearCaches;
+function saveWatchCallback(trackingMap) {
+    return (fileName, callback) => {
+        const normalizedFileName = shared_1.getCanonicalFileName(fileName);
+        const watchers = (() => {
+            let watchers = trackingMap.get(normalizedFileName);
+            if (!watchers) {
+                watchers = new Set();
+                trackingMap.set(normalizedFileName, watchers);
+            }
+            return watchers;
+        })();
+        watchers.add(callback);
+        return {
+            close: () => {
+                watchers.delete(callback);
+            },
+        };
+    };
+}
+/**
+ * Holds information about the file currently being linted
+ */
+const currentLintOperationState = {
+    code: '',
+    filePath: '',
+};
+/**
+ * Appropriately report issues found when reading a config file
+ * @param diagnostic The diagnostic raised when creating a program
+ */
+function diagnosticReporter(diagnostic) {
+    throw new Error(ts.flattenDiagnosticMessageText(diagnostic.messageText, ts.sys.newLine));
+}
+/**
+ * Hash content for compare content.
+ * @param content hashed contend
+ * @returns hashed result
+ */
+function createHash(content) {
+    var _a;
+    // No ts.sys in browser environments.
+    if ((_a = ts.sys) === null || _a === void 0 ? void 0 : _a.createHash) {
+        return ts.sys.createHash(content);
+    }
+    return content;
+}
+function updateCachedFileList(tsconfigPath, program, extra) {
+    const fileList = extra.EXPERIMENTAL_useSourceOfProjectReferenceRedirect
+        ? new Set(program.getSourceFiles().map(sf => shared_1.getCanonicalFileName(sf.fileName)))
+        : new Set(program.getRootFileNames().map(f => shared_1.getCanonicalFileName(f)));
+    programFileListCache.set(tsconfigPath, fileList);
+    return fileList;
+}
+/**
+ * Calculate project environments using options provided by consumer and paths from config
+ * @param code The code being linted
+ * @param filePathIn The path of the file being parsed
+ * @param extra.tsconfigRootDir The root directory for relative tsconfig paths
+ * @param extra.projects Provided tsconfig paths
+ * @returns The programs corresponding to the supplied tsconfig paths
+ */
+function getProgramsForProjects(code, filePathIn, extra) {
+    const filePath = shared_1.getCanonicalFileName(filePathIn);
+    const results = [];
+    // preserve reference to code and file being linted
+    currentLintOperationState.code = code;
+    currentLintOperationState.filePath = filePath;
+    // Update file version if necessary
+    const fileWatchCallbacks = fileWatchCallbackTrackingMap.get(filePath);
+    const codeHash = createHash(code);
+    if (parsedFilesSeenHash.get(filePath) !== codeHash &&
+        fileWatchCallbacks &&
+        fileWatchCallbacks.size > 0) {
+        fileWatchCallbacks.forEach(cb => cb(filePath, ts.FileWatcherEventKind.Changed));
+    }
+    /*
+     * before we go into the process of attempting to find and update every program
+     * see if we know of a program that contains this file
+     */
+    for (const [tsconfigPath, existingWatch] of knownWatchProgramMap.entries()) {
+        let fileList = programFileListCache.get(tsconfigPath);
+        let updatedProgram = null;
+        if (!fileList) {
+            updatedProgram = existingWatch.getProgram().getProgram();
+            fileList = updateCachedFileList(tsconfigPath, updatedProgram, extra);
+        }
+        if (fileList.has(filePath)) {
+            log('Found existing program for file. %s', filePath);
+            updatedProgram = updatedProgram !== null && updatedProgram !== void 0 ? updatedProgram : existingWatch.getProgram().getProgram();
+            // sets parent pointers in source files
+            updatedProgram.getTypeChecker();
+            return [updatedProgram];
+        }
+    }
+    log('File did not belong to any existing programs, moving to create/update. %s', filePath);
+    /*
+     * We don't know of a program that contains the file, this means that either:
+     * - the required program hasn't been created yet, or
+     * - the file is new/renamed, and the program hasn't been updated.
+     */
+    for (const tsconfigPath of extra.projects) {
+        const existingWatch = knownWatchProgramMap.get(tsconfigPath);
+        if (existingWatch) {
+            const updatedProgram = maybeInvalidateProgram(existingWatch, filePath, tsconfigPath);
+            if (!updatedProgram) {
+                continue;
+            }
+            // sets parent pointers in source files
+            updatedProgram.getTypeChecker();
+            // cache and check the file list
+            const fileList = updateCachedFileList(tsconfigPath, updatedProgram, extra);
+            if (fileList.has(filePath)) {
+                log('Found updated program for file. %s', filePath);
+                // we can return early because we know this program contains the file
+                return [updatedProgram];
+            }
+            results.push(updatedProgram);
+            continue;
+        }
+        const programWatch = createWatchProgram(tsconfigPath, extra);
+        knownWatchProgramMap.set(tsconfigPath, programWatch);
+        const program = programWatch.getProgram().getProgram();
+        // sets parent pointers in source files
+        program.getTypeChecker();
+        // cache and check the file list
+        const fileList = updateCachedFileList(tsconfigPath, program, extra);
+        if (fileList.has(filePath)) {
+            log('Found program for file. %s', filePath);
+            // we can return early because we know this program contains the file
+            return [program];
+        }
+        results.push(program);
+    }
+    return results;
+}
+exports.getProgramsForProjects = getProgramsForProjects;
+const isRunningNoTimeoutFix = semver_1.default.satisfies(ts.version, '>=3.9.0-beta', {
+    includePrerelease: true,
+});
+function createWatchProgram(tsconfigPath, extra) {
+    log('Creating watch program for %s.', tsconfigPath);
+    // create compiler host
+    const watchCompilerHost = ts.createWatchCompilerHost(tsconfigPath, shared_1.createDefaultCompilerOptionsFromExtra(extra), ts.sys, ts.createAbstractBuilder, diagnosticReporter, 
+    /*reportWatchStatus*/ () => { });
+    // ensure readFile reads the code being linted instead of the copy on disk
+    const oldReadFile = watchCompilerHost.readFile;
+    watchCompilerHost.readFile = (filePathIn, encoding) => {
+        const filePath = shared_1.getCanonicalFileName(filePathIn);
+        const fileContent = filePath === currentLintOperationState.filePath
+            ? currentLintOperationState.code
+            : oldReadFile(filePath, encoding);
+        if (fileContent !== undefined) {
+            parsedFilesSeenHash.set(filePath, createHash(fileContent));
+        }
+        return fileContent;
+    };
+    // ensure process reports error on failure instead of exiting process immediately
+    watchCompilerHost.onUnRecoverableConfigFileDiagnostic = diagnosticReporter;
+    // ensure process doesn't emit programs
+    watchCompilerHost.afterProgramCreate = (program) => {
+        // report error if there are any errors in the config file
+        const configFileDiagnostics = program
+            .getConfigFileParsingDiagnostics()
+            .filter(diag => diag.category === ts.DiagnosticCategory.Error && diag.code !== 18003);
+        if (configFileDiagnostics.length > 0) {
+            diagnosticReporter(configFileDiagnostics[0]);
+        }
+    };
+    /*
+     * From the CLI, the file watchers won't matter, as the files will be parsed once and then forgotten.
+     * When running from an IDE, these watchers will let us tell typescript about changes.
+     *
+     * ESLint IDE plugins will send us unfinished file content as the user types (before it's saved to disk).
+     * We use the file watchers to tell typescript about this latest file content.
+     *
+     * When files are created (or renamed), we won't know about them because we have no filesystem watchers attached.
+     * We use the folder watchers to tell typescript it needs to go and find new files in the project folders.
+     */
+    watchCompilerHost.watchFile = saveWatchCallback(fileWatchCallbackTrackingMap);
+    watchCompilerHost.watchDirectory = saveWatchCallback(folderWatchCallbackTrackingMap);
+    // allow files with custom extensions to be included in program (uses internal ts api)
+    const oldOnDirectoryStructureHostCreate = watchCompilerHost.onCachedDirectoryStructureHostCreate;
+    watchCompilerHost.onCachedDirectoryStructureHostCreate = (host) => {
+        const oldReadDirectory = host.readDirectory;
+        host.readDirectory = (path, extensions, exclude, include, depth) => oldReadDirectory(path, !extensions ? undefined : extensions.concat(extra.extraFileExtensions), exclude, include, depth);
+        oldOnDirectoryStructureHostCreate(host);
+    };
+    // This works only on 3.9
+    watchCompilerHost.extraFileExtensions = extra.extraFileExtensions.map(extension => ({
+        extension,
+        isMixedContent: true,
+        scriptKind: ts.ScriptKind.Deferred,
+    }));
+    watchCompilerHost.trace = log;
+    /**
+     * TODO: this needs refinement and development, but we're allowing users to opt-in to this for now for testing and feedback.
+     * See https://github.com/typescript-eslint/typescript-eslint/issues/2094
+     */
+    watchCompilerHost.useSourceOfProjectReferenceRedirect = () => extra.EXPERIMENTAL_useSourceOfProjectReferenceRedirect;
+    // Since we don't want to asynchronously update program we want to disable timeout methods
+    // So any changes in the program will be delayed and updated when getProgram is called on watch
+    let callback;
+    if (isRunningNoTimeoutFix) {
+        watchCompilerHost.setTimeout = undefined;
+        watchCompilerHost.clearTimeout = undefined;
+    }
+    else {
+        log('Running without timeout fix');
+        // But because of https://github.com/microsoft/TypeScript/pull/37308 we cannot just set it to undefined
+        // instead save it and call before getProgram is called
+        watchCompilerHost.setTimeout = (cb, _ms, ...args) => {
+            callback = cb.bind(/*this*/ undefined, ...args);
+            return callback;
+        };
+        watchCompilerHost.clearTimeout = () => {
+            callback = undefined;
+        };
+    }
+    const watch = ts.createWatchProgram(watchCompilerHost);
+    if (!isRunningNoTimeoutFix) {
+        const originalGetProgram = watch.getProgram;
+        watch.getProgram = () => {
+            if (callback) {
+                callback();
+            }
+            callback = undefined;
+            return originalGetProgram.call(watch);
+        };
+    }
+    return watch;
+}
+exports.createWatchProgram = createWatchProgram;
+function hasTSConfigChanged(tsconfigPath) {
+    const stat = fs_1.default.statSync(tsconfigPath);
+    const lastModifiedAt = stat.mtimeMs;
+    const cachedLastModifiedAt = tsconfigLastModifiedTimestampCache.get(tsconfigPath);
+    tsconfigLastModifiedTimestampCache.set(tsconfigPath, lastModifiedAt);
+    if (cachedLastModifiedAt === undefined) {
+        return false;
+    }
+    return Math.abs(cachedLastModifiedAt - lastModifiedAt) > Number.EPSILON;
+}
+function maybeInvalidateProgram(existingWatch, filePath, tsconfigPath) {
+    /*
+     * By calling watchProgram.getProgram(), it will trigger a resync of the program based on
+     * whatever new file content we've given it from our input.
+     */
+    let updatedProgram = existingWatch.getProgram().getProgram();
+    // In case this change causes problems in larger real world codebases
+    // Provide an escape hatch so people don't _have_ to revert to an older version
+    if (process.env.TSESTREE_NO_INVALIDATION === 'true') {
+        return updatedProgram;
+    }
+    if (hasTSConfigChanged(tsconfigPath)) {
+        /*
+         * If the stat of the tsconfig has changed, that could mean the include/exclude/files lists has changed
+         * We need to make sure typescript knows this so it can update appropriately
+         */
+        log('tsconfig has changed - triggering program update. %s', tsconfigPath);
+        fileWatchCallbackTrackingMap
+            .get(tsconfigPath)
+            .forEach(cb => cb(tsconfigPath, ts.FileWatcherEventKind.Changed));
+        // tsconfig change means that the file list more than likely changed, so clear the cache
+        programFileListCache.delete(tsconfigPath);
+    }
+    let sourceFile = updatedProgram.getSourceFile(filePath);
+    if (sourceFile) {
+        return updatedProgram;
+    }
+    /*
+     * Missing source file means our program's folder structure might be out of date.
+     * So we need to tell typescript it needs to update the correct folder.
+     */
+    log('File was not found in program - triggering folder update. %s', filePath);
+    // Find the correct directory callback by climbing the folder tree
+    const currentDir = shared_1.canonicalDirname(filePath);
+    let current = null;
+    let next = currentDir;
+    let hasCallback = false;
+    while (current !== next) {
+        current = next;
+        const folderWatchCallbacks = folderWatchCallbackTrackingMap.get(current);
+        if (folderWatchCallbacks) {
+            folderWatchCallbacks.forEach(cb => {
+                if (currentDir !== current) {
+                    cb(currentDir, ts.FileWatcherEventKind.Changed);
+                }
+                cb(current, ts.FileWatcherEventKind.Changed);
+            });
+            hasCallback = true;
+        }
+        next = shared_1.canonicalDirname(current);
+    }
+    if (!hasCallback) {
+        /*
+         * No callback means the paths don't matchup - so no point returning any program
+         * this will signal to the caller to skip this program
+         */
+        log('No callback found for file, not part of this program. %s', filePath);
+        return null;
+    }
+    // directory update means that the file list more than likely changed, so clear the cache
+    programFileListCache.delete(tsconfigPath);
+    // force the immediate resync
+    updatedProgram = existingWatch.getProgram().getProgram();
+    sourceFile = updatedProgram.getSourceFile(filePath);
+    if (sourceFile) {
+        return updatedProgram;
+    }
+    /*
+     * At this point we're in one of two states:
+     * - The file isn't supposed to be in this program due to exclusions
+     * - The file is new, and was renamed from an old, included filename
+     *
+     * For the latter case, we need to tell typescript that the old filename is now deleted
+     */
+    log('File was still not found in program after directory update - checking file deletions. %s', filePath);
+    const rootFilenames = updatedProgram.getRootFileNames();
+    // use find because we only need to "delete" one file to cause typescript to do a full resync
+    const deletedFile = rootFilenames.find(file => !fs_1.default.existsSync(file));
+    if (!deletedFile) {
+        // There are no deleted files, so it must be the former case of the file not belonging to this program
+        return null;
+    }
+    const fileWatchCallbacks = fileWatchCallbackTrackingMap.get(shared_1.getCanonicalFileName(deletedFile));
+    if (!fileWatchCallbacks) {
+        // shouldn't happen, but just in case
+        log('Could not find watch callbacks for root file. %s', deletedFile);
+        return updatedProgram;
+    }
+    log('Marking file as deleted. %s', deletedFile);
+    fileWatchCallbacks.forEach(cb => cb(deletedFile, ts.FileWatcherEventKind.Deleted));
+    // deleted files means that the file list _has_ changed, so clear the cache
+    programFileListCache.delete(tsconfigPath);
+    updatedProgram = existingWatch.getProgram().getProgram();
+    sourceFile = updatedProgram.getSourceFile(filePath);
+    if (sourceFile) {
+        return updatedProgram;
+    }
+    log('File was still not found in program after deletion check, assuming it is not part of this program. %s', filePath);
+    return null;
+}
+//# sourceMappingURL=createWatchProgram.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createWatchProgram.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createWatchProgram.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e874f09633e659ff4eebb14498fa646f4b119e71
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createWatchProgram.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"createWatchProgram.js","sourceRoot":"","sources":["../../src/create-program/createWatchProgram.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4223911346ee162bbe8b8fd8ebcbb52f4dff50ec
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.d.ts
@@ -0,0 +1,16 @@
+import * as ts from 'typescript';
+import { Extra } from '../parser-options';
+interface ASTAndProgram {
+    ast: ts.SourceFile;
+    program: ts.Program;
+}
+declare function createDefaultCompilerOptionsFromExtra(extra: Extra): ts.CompilerOptions;
+declare type CanonicalPath = string & {
+    __brand: unknown;
+};
+declare function getCanonicalFileName(filePath: string): CanonicalPath;
+declare function ensureAbsolutePath(p: string, extra: Extra): string;
+declare function canonicalDirname(p: CanonicalPath): CanonicalPath;
+declare function getScriptKind(extra: Extra, filePath?: string): ts.ScriptKind;
+export { ASTAndProgram, canonicalDirname, CanonicalPath, createDefaultCompilerOptionsFromExtra, ensureAbsolutePath, getCanonicalFileName, getScriptKind, };
+//# sourceMappingURL=shared.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..8de607f065002a4a3019c6c33db72ab565f92ab2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/create-program/shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,UAAU,aAAa;IACrB,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC;IACnB,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;CACrB;AAkBD,iBAAS,qCAAqC,CAC5C,KAAK,EAAE,KAAK,GACX,EAAE,CAAC,eAAe,CASpB;AAGD,aAAK,aAAa,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AASnD,iBAAS,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAM7D;AAED,iBAAS,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAI3D;AAED,iBAAS,gBAAgB,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAEzD;AAED,iBAAS,aAAa,CACpB,KAAK,EAAE,KAAK,EACZ,QAAQ,GAAE,MAAuB,GAChC,EAAE,CAAC,UAAU,CAwBf;AAED,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,qCAAqC,EACrC,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,GACd,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.js
new file mode 100644
index 0000000000000000000000000000000000000000..4e2653284a9f4acec5f125dc9b2ea4e27af50b66
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.js
@@ -0,0 +1,94 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getScriptKind = exports.getCanonicalFileName = exports.ensureAbsolutePath = exports.createDefaultCompilerOptionsFromExtra = exports.canonicalDirname = void 0;
+const path_1 = __importDefault(require("path"));
+const ts = __importStar(require("typescript"));
+/**
+ * Default compiler options for program generation from single root file
+ */
+const DEFAULT_COMPILER_OPTIONS = {
+    allowNonTsExtensions: true,
+    allowJs: true,
+    checkJs: true,
+    noEmit: true,
+    // extendedDiagnostics: true,
+    /**
+     * Flags required to make no-unused-vars work
+     */
+    noUnusedLocals: true,
+    noUnusedParameters: true,
+};
+function createDefaultCompilerOptionsFromExtra(extra) {
+    if (extra.debugLevel.has('typescript')) {
+        return Object.assign(Object.assign({}, DEFAULT_COMPILER_OPTIONS), { extendedDiagnostics: true });
+    }
+    return DEFAULT_COMPILER_OPTIONS;
+}
+exports.createDefaultCompilerOptionsFromExtra = createDefaultCompilerOptionsFromExtra;
+// typescript doesn't provide a ts.sys implementation for browser environments
+const useCaseSensitiveFileNames = ts.sys !== undefined ? ts.sys.useCaseSensitiveFileNames : true;
+const correctPathCasing = useCaseSensitiveFileNames
+    ? (filePath) => filePath
+    : (filePath) => filePath.toLowerCase();
+function getCanonicalFileName(filePath) {
+    let normalized = path_1.default.normalize(filePath);
+    if (normalized.endsWith(path_1.default.sep)) {
+        normalized = normalized.substr(0, normalized.length - 1);
+    }
+    return correctPathCasing(normalized);
+}
+exports.getCanonicalFileName = getCanonicalFileName;
+function ensureAbsolutePath(p, extra) {
+    return path_1.default.isAbsolute(p)
+        ? p
+        : path_1.default.join(extra.tsconfigRootDir || process.cwd(), p);
+}
+exports.ensureAbsolutePath = ensureAbsolutePath;
+function canonicalDirname(p) {
+    return path_1.default.dirname(p);
+}
+exports.canonicalDirname = canonicalDirname;
+function getScriptKind(extra, filePath = extra.filePath) {
+    const extension = path_1.default.extname(filePath).toLowerCase();
+    // note - we respect the user's extension when it is known  we could override it and force it to match their
+    // jsx setting, but that could create weird situations where we throw parse errors when TSC doesn't
+    switch (extension) {
+        case '.ts':
+            return ts.ScriptKind.TS;
+        case '.tsx':
+            return ts.ScriptKind.TSX;
+        case '.js':
+            return ts.ScriptKind.JS;
+        case '.jsx':
+            return ts.ScriptKind.JSX;
+        case '.json':
+            return ts.ScriptKind.JSON;
+        default:
+            // unknown extension, force typescript to ignore the file extension, and respect the user's setting
+            return extra.jsx ? ts.ScriptKind.TSX : ts.ScriptKind.TS;
+    }
+}
+exports.getScriptKind = getScriptKind;
+//# sourceMappingURL=shared.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..a18e3585f364e1c0a5e42e28396924f238761953
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/create-program/shared.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,+CAAiC;AAQjC;;GAEG;AACH,MAAM,wBAAwB,GAAuB;IACnD,oBAAoB,EAAE,IAAI;IAC1B,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,6BAA6B;IAC7B;;OAEG;IACH,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;CACzB,CAAC;AAEF,SAAS,qCAAqC,CAC5C,KAAY;IAEZ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;QACtC,uCACK,wBAAwB,KAC3B,mBAAmB,EAAE,IAAI,IACzB;KACH;IAED,OAAO,wBAAwB,CAAC;AAClC,CAAC;AA+DC,sFAAqC;AA1DvC,8EAA8E;AAC9E,MAAM,yBAAyB,GAC7B,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,MAAM,iBAAiB,GAAG,yBAAyB;IACjD,CAAC,CAAC,CAAC,QAAgB,EAAU,EAAE,CAAC,QAAQ;IACxC,CAAC,CAAC,CAAC,QAAgB,EAAU,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAEzD,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,IAAI,UAAU,GAAG,cAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAI,CAAC,GAAG,CAAC,EAAE;QACjC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KAC1D;IACD,OAAO,iBAAiB,CAAC,UAAU,CAAkB,CAAC;AACxD,CAAC;AA+CC,oDAAoB;AA7CtB,SAAS,kBAAkB,CAAC,CAAS,EAAE,KAAY;IACjD,OAAO,cAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAwCC,gDAAkB;AAtCpB,SAAS,gBAAgB,CAAC,CAAgB;IACxC,OAAO,cAAI,CAAC,OAAO,CAAC,CAAC,CAAkB,CAAC;AAC1C,CAAC;AAiCC,4CAAgB;AA/BlB,SAAS,aAAa,CACpB,KAAY,EACZ,WAAmB,KAAK,CAAC,QAAQ;IAEjC,MAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,4GAA4G;IAC5G,mGAAmG;IACnG,QAAQ,SAAS,EAAE;QACjB,KAAK,KAAK;YACR,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAE1B,KAAK,MAAM;YACT,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAE3B,KAAK,KAAK;YACR,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAE1B,KAAK,MAAM;YACT,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAE3B,KAAK,OAAO;YACV,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAE5B;YACE,mGAAmG;YACnG,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;KAC3D;AACH,CAAC;AASC,sCAAa"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/index.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8833ee4950feb061995748339dde9d4b7d4cbfac
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/index.d.ts
@@ -0,0 +1,8 @@
+export * from './parser';
+export { ParserServices, TSESTreeOptions } from './parser-options';
+export { simpleTraverse } from './simple-traverse';
+export * from './ts-estree';
+export { clearCaches } from './create-program/createWatchProgram';
+export { visitorKeys } from '@typescript-eslint/visitor-keys';
+export declare const version: string;
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/index.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..aef1e4c624c13927ccc741b45dfdba37652eaa72
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAGlE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAG9D,eAAO,MAAM,OAAO,EAAE,MAA2C,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/index.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..bff87578d6278cfddaf8711e7923191963e39130
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/index.js
@@ -0,0 +1,25 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.version = exports.visitorKeys = exports.clearCaches = exports.simpleTraverse = void 0;
+__exportStar(require("./parser"), exports);
+var simple_traverse_1 = require("./simple-traverse");
+Object.defineProperty(exports, "simpleTraverse", { enumerable: true, get: function () { return simple_traverse_1.simpleTraverse; } });
+__exportStar(require("./ts-estree"), exports);
+var createWatchProgram_1 = require("./create-program/createWatchProgram");
+Object.defineProperty(exports, "clearCaches", { enumerable: true, get: function () { return createWatchProgram_1.clearCaches; } });
+// re-export for backwards-compat
+var visitor_keys_1 = require("@typescript-eslint/visitor-keys");
+Object.defineProperty(exports, "visitorKeys", { enumerable: true, get: function () { return visitor_keys_1.visitorKeys; } });
+// note - cannot migrate this to an import statement because it will make TSC copy the package.json to the dist folder
+exports.version = require('../package.json').version;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/index.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..0733ab419e32a73f954ae50da7eafb16fd705a46
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAyB;AAEzB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,8CAA4B;AAC5B,0EAAkE;AAAzD,iHAAA,WAAW,OAAA;AAEpB,iCAAiC;AACjC,gEAA8D;AAArD,2GAAA,WAAW,OAAA;AAEpB,sHAAsH;AACzG,QAAA,OAAO,GAAW,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e9b5d410e2a3e6ea707fb7f58fbd0f5ec06e5553
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.d.ts
@@ -0,0 +1,282 @@
+import * as ts from 'typescript';
+import { AST_NODE_TYPES, AST_TOKEN_TYPES, TSESTree } from './ts-estree';
+declare const SyntaxKind: typeof ts.SyntaxKind;
+interface TokenToText {
+    [SyntaxKind.OpenBraceToken]: '{';
+    [SyntaxKind.CloseBraceToken]: '}';
+    [SyntaxKind.OpenParenToken]: '(';
+    [SyntaxKind.CloseParenToken]: ')';
+    [SyntaxKind.OpenBracketToken]: '[';
+    [SyntaxKind.CloseBracketToken]: ']';
+    [SyntaxKind.DotToken]: '.';
+    [SyntaxKind.DotDotDotToken]: '...';
+    [SyntaxKind.SemicolonToken]: ';';
+    [SyntaxKind.CommaToken]: ',';
+    [SyntaxKind.LessThanToken]: '<';
+    [SyntaxKind.GreaterThanToken]: '>';
+    [SyntaxKind.LessThanEqualsToken]: '<=';
+    [SyntaxKind.GreaterThanEqualsToken]: '>=';
+    [SyntaxKind.EqualsEqualsToken]: '==';
+    [SyntaxKind.ExclamationEqualsToken]: '!=';
+    [SyntaxKind.EqualsEqualsEqualsToken]: '===';
+    [SyntaxKind.InstanceOfKeyword]: 'instanceof';
+    [SyntaxKind.ExclamationEqualsEqualsToken]: '!==';
+    [SyntaxKind.EqualsGreaterThanToken]: '=>';
+    [SyntaxKind.PlusToken]: '+';
+    [SyntaxKind.MinusToken]: '-';
+    [SyntaxKind.AsteriskToken]: '*';
+    [SyntaxKind.AsteriskAsteriskToken]: '**';
+    [SyntaxKind.SlashToken]: '/';
+    [SyntaxKind.PercentToken]: '%';
+    [SyntaxKind.PlusPlusToken]: '++';
+    [SyntaxKind.MinusMinusToken]: '--';
+    [SyntaxKind.LessThanLessThanToken]: '<<';
+    [SyntaxKind.LessThanSlashToken]: '</';
+    [SyntaxKind.GreaterThanGreaterThanToken]: '>>';
+    [SyntaxKind.GreaterThanGreaterThanGreaterThanToken]: '>>>';
+    [SyntaxKind.AmpersandToken]: '&';
+    [SyntaxKind.BarToken]: '|';
+    [SyntaxKind.CaretToken]: '^';
+    [SyntaxKind.ExclamationToken]: '!';
+    [SyntaxKind.TildeToken]: '~';
+    [SyntaxKind.AmpersandAmpersandToken]: '&&';
+    [SyntaxKind.BarBarToken]: '||';
+    [SyntaxKind.QuestionToken]: '?';
+    [SyntaxKind.ColonToken]: ':';
+    [SyntaxKind.EqualsToken]: '=';
+    [SyntaxKind.PlusEqualsToken]: '+=';
+    [SyntaxKind.MinusEqualsToken]: '-=';
+    [SyntaxKind.AsteriskEqualsToken]: '*=';
+    [SyntaxKind.AsteriskAsteriskEqualsToken]: '**=';
+    [SyntaxKind.SlashEqualsToken]: '/=';
+    [SyntaxKind.PercentEqualsToken]: '%=';
+    [SyntaxKind.LessThanLessThanEqualsToken]: '<<=';
+    [SyntaxKind.GreaterThanGreaterThanEqualsToken]: '>>=';
+    [SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken]: '>>>=';
+    [SyntaxKind.AmpersandEqualsToken]: '&=';
+    [SyntaxKind.AmpersandAmpersandEqualsToken]: '&&=';
+    [SyntaxKind.BarEqualsToken]: '|=';
+    [SyntaxKind.BarBarEqualsToken]: '||=';
+    [SyntaxKind.CaretEqualsToken]: '^=';
+    [SyntaxKind.QuestionQuestionEqualsToken]: '??=';
+    [SyntaxKind.AtToken]: '@';
+    [SyntaxKind.InKeyword]: 'in';
+    [SyntaxKind.UniqueKeyword]: 'unique';
+    [SyntaxKind.KeyOfKeyword]: 'keyof';
+    [SyntaxKind.NewKeyword]: 'new';
+    [SyntaxKind.ImportKeyword]: 'import';
+    [SyntaxKind.ReadonlyKeyword]: 'readonly';
+    [SyntaxKind.QuestionQuestionToken]: '??';
+    [SyntaxKind.QuestionDotToken]: '?.';
+}
+/**
+ * Returns true if the given ts.Token is the assignment operator
+ * @param operator the operator token
+ * @returns is assignment
+ */
+export declare function isAssignmentOperator<T extends ts.SyntaxKind>(operator: ts.Token<T>): boolean;
+/**
+ * Returns true if the given ts.Token is a logical operator
+ * @param operator the operator token
+ * @returns is a logical operator
+ */
+export declare function isLogicalOperator<T extends ts.SyntaxKind>(operator: ts.Token<T>): boolean;
+/**
+ * Returns the string form of the given TSToken SyntaxKind
+ * @param kind the token's SyntaxKind
+ * @returns the token applicable token as a string
+ */
+export declare function getTextForTokenKind<T extends ts.SyntaxKind>(kind: T): T extends keyof TokenToText ? TokenToText[T] : string | undefined;
+/**
+ * Returns true if the given ts.Node is a valid ESTree class member
+ * @param node TypeScript AST node
+ * @returns is valid ESTree class member
+ */
+export declare function isESTreeClassMember(node: ts.Node): boolean;
+/**
+ * Checks if a ts.Node has a modifier
+ * @param modifierKind TypeScript SyntaxKind modifier
+ * @param node TypeScript AST node
+ * @returns has the modifier specified
+ */
+export declare function hasModifier(modifierKind: ts.KeywordSyntaxKind, node: ts.Node): boolean;
+/**
+ * Get last last modifier in ast
+ * @param node TypeScript AST node
+ * @returns returns last modifier if present or null
+ */
+export declare function getLastModifier(node: ts.Node): ts.Modifier | null;
+/**
+ * Returns true if the given ts.Token is a comma
+ * @param token the TypeScript token
+ * @returns is comma
+ */
+export declare function isComma(token: ts.Node): boolean;
+/**
+ * Returns true if the given ts.Node is a comment
+ * @param node the TypeScript node
+ * @returns is comment
+ */
+export declare function isComment(node: ts.Node): boolean;
+/**
+ * Returns true if the given ts.Node is a JSDoc comment
+ * @param node the TypeScript node
+ * @returns is JSDoc comment
+ */
+export declare function isJSDocComment(node: ts.Node): boolean;
+/**
+ * Returns the binary expression type of the given ts.Token
+ * @param operator the operator token
+ * @returns the binary expression type
+ */
+export declare function getBinaryExpressionType<T extends ts.SyntaxKind>(operator: ts.Token<T>): AST_NODE_TYPES.AssignmentExpression | AST_NODE_TYPES.LogicalExpression | AST_NODE_TYPES.BinaryExpression;
+/**
+ * Returns line and column data for the given positions,
+ * @param pos position to check
+ * @param ast the AST object
+ * @returns line and column
+ */
+export declare function getLineAndCharacterFor(pos: number, ast: ts.SourceFile): TSESTree.LineAndColumnData;
+/**
+ * Returns line and column data for the given start and end positions,
+ * for the given AST
+ * @param start start data
+ * @param end   end data
+ * @param ast   the AST object
+ * @returns the loc data
+ */
+export declare function getLocFor(start: number, end: number, ast: ts.SourceFile): TSESTree.SourceLocation;
+/**
+ * Check whatever node can contain directive
+ * @param node
+ * @returns returns true if node can contain directive
+ */
+export declare function canContainDirective(node: ts.SourceFile | ts.Block | ts.ModuleBlock): boolean;
+/**
+ * Returns range for the given ts.Node
+ * @param node the ts.Node or ts.Token
+ * @param ast the AST object
+ * @returns the range data
+ */
+export declare function getRange(node: ts.Node, ast: ts.SourceFile): [number, number];
+/**
+ * Returns true if a given ts.Node is a token
+ * @param node the ts.Node
+ * @returns is a token
+ */
+export declare function isToken(node: ts.Node): boolean;
+/**
+ * Returns true if a given ts.Node is a JSX token
+ * @param node ts.Node to be checked
+ * @returns is a JSX token
+ */
+export declare function isJSXToken(node: ts.Node): boolean;
+/**
+ * Returns the declaration kind of the given ts.Node
+ * @param node TypeScript AST node
+ * @returns declaration kind
+ */
+export declare function getDeclarationKind(node: ts.VariableDeclarationList): 'let' | 'const' | 'var';
+/**
+ * Gets a ts.Node's accessibility level
+ * @param node The ts.Node
+ * @returns accessibility "public", "protected", "private", or null
+ */
+export declare function getTSNodeAccessibility(node: ts.Node): 'public' | 'protected' | 'private' | null;
+/**
+ * Finds the next token based on the previous one and its parent
+ * Had to copy this from TS instead of using TS's version because theirs doesn't pass the ast to getChildren
+ * @param previousToken The previous TSToken
+ * @param parent The parent TSNode
+ * @param ast The TS AST
+ * @returns the next TSToken
+ */
+export declare function findNextToken(previousToken: ts.TextRange, parent: ts.Node, ast: ts.SourceFile): ts.Node | undefined;
+/**
+ * Find the first matching ancestor based on the given predicate function.
+ * @param node The current ts.Node
+ * @param predicate The predicate function to apply to each checked ancestor
+ * @returns a matching parent ts.Node
+ */
+export declare function findFirstMatchingAncestor(node: ts.Node, predicate: (node: ts.Node) => boolean): ts.Node | undefined;
+/**
+ * Returns true if a given ts.Node has a JSX token within its hierarchy
+ * @param node ts.Node to be checked
+ * @returns has JSX ancestor
+ */
+export declare function hasJSXAncestor(node: ts.Node): boolean;
+/**
+ * Unescape the text content of string literals, e.g. &amp; -> &
+ * @param text The escaped string literal text.
+ * @returns The unescaped string literal text.
+ */
+export declare function unescapeStringLiteralText(text: string): string;
+/**
+ * Returns true if a given ts.Node is a computed property
+ * @param node ts.Node to be checked
+ * @returns is Computed Property
+ */
+export declare function isComputedProperty(node: ts.Node): boolean;
+/**
+ * Returns true if a given ts.Node is optional (has QuestionToken)
+ * @param node ts.Node to be checked
+ * @returns is Optional
+ */
+export declare function isOptional(node: {
+    questionToken?: ts.QuestionToken;
+}): boolean;
+/**
+ * Returns true if the node is an optional chain node
+ */
+export declare function isChainExpression(node: TSESTree.Node): node is TSESTree.ChainExpression;
+/**
+ * Returns true of the child of property access expression is an optional chain
+ */
+export declare function isChildUnwrappableOptionalChain(node: ts.PropertyAccessExpression | ts.ElementAccessExpression | ts.CallExpression | ts.NonNullExpression, child: TSESTree.Node): boolean;
+/**
+ * Returns the type of a given ts.Token
+ * @param token the ts.Token
+ * @returns the token type
+ */
+export declare function getTokenType(token: ts.Identifier | ts.Token<ts.SyntaxKind>): Exclude<AST_TOKEN_TYPES, AST_TOKEN_TYPES.Line | AST_TOKEN_TYPES.Block>;
+/**
+ * Extends and formats a given ts.Token, for a given AST
+ * @param token the ts.Token
+ * @param ast   the AST object
+ * @returns the converted Token
+ */
+export declare function convertToken(token: ts.Node, ast: ts.SourceFile): TSESTree.Token;
+/**
+ * Converts all tokens for the given AST
+ * @param ast the AST object
+ * @returns the converted Tokens
+ */
+export declare function convertTokens(ast: ts.SourceFile): TSESTree.Token[];
+export interface TSError {
+    index: number;
+    lineNumber: number;
+    column: number;
+    message: string;
+}
+/**
+ * @param ast     the AST object
+ * @param start      the index at which the error starts
+ * @param message the error message
+ * @returns converted error object
+ */
+export declare function createError(ast: ts.SourceFile, start: number, message: string): TSError;
+/**
+ * @param n the TSNode
+ * @param ast the TS AST
+ */
+export declare function nodeHasTokens(n: ts.Node, ast: ts.SourceFile): boolean;
+/**
+ * Like `forEach`, but suitable for use with numbers and strings (which may be falsy).
+ * @template T
+ * @template U
+ * @param array
+ * @param callback
+ */
+export declare function firstDefined<T, U>(array: readonly T[] | undefined, callback: (element: T, index: number) => U | undefined): U | undefined;
+export {};
+//# sourceMappingURL=node-utils.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..f898a2f2838000f4a16477e54fd99c26ffffadd4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"node-utils.d.ts","sourceRoot":"","sources":["../src/node-utils.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..05c95cf2f4de6c4a137a9c665a30a1bd4d8bb4ba
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.js
@@ -0,0 +1,543 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.firstDefined = exports.nodeHasTokens = exports.createError = exports.convertTokens = exports.convertToken = exports.getTokenType = exports.isChildUnwrappableOptionalChain = exports.isChainExpression = exports.isOptional = exports.isComputedProperty = exports.unescapeStringLiteralText = exports.hasJSXAncestor = exports.findFirstMatchingAncestor = exports.findNextToken = exports.getTSNodeAccessibility = exports.getDeclarationKind = exports.isJSXToken = exports.isToken = exports.getRange = exports.canContainDirective = exports.getLocFor = exports.getLineAndCharacterFor = exports.getBinaryExpressionType = exports.isJSDocComment = exports.isComment = exports.isComma = exports.getLastModifier = exports.hasModifier = exports.isESTreeClassMember = exports.getTextForTokenKind = exports.isLogicalOperator = exports.isAssignmentOperator = void 0;
+const unescape_1 = __importDefault(require("lodash/unescape"));
+const ts = __importStar(require("typescript"));
+const ts_estree_1 = require("./ts-estree");
+const SyntaxKind = ts.SyntaxKind;
+const LOGICAL_OPERATORS = [
+    SyntaxKind.BarBarToken,
+    SyntaxKind.AmpersandAmpersandToken,
+    SyntaxKind.QuestionQuestionToken,
+];
+/**
+ * Returns true if the given ts.Token is the assignment operator
+ * @param operator the operator token
+ * @returns is assignment
+ */
+function isAssignmentOperator(operator) {
+    return (operator.kind >= SyntaxKind.FirstAssignment &&
+        operator.kind <= SyntaxKind.LastAssignment);
+}
+exports.isAssignmentOperator = isAssignmentOperator;
+/**
+ * Returns true if the given ts.Token is a logical operator
+ * @param operator the operator token
+ * @returns is a logical operator
+ */
+function isLogicalOperator(operator) {
+    return LOGICAL_OPERATORS.includes(operator.kind);
+}
+exports.isLogicalOperator = isLogicalOperator;
+/**
+ * Returns the string form of the given TSToken SyntaxKind
+ * @param kind the token's SyntaxKind
+ * @returns the token applicable token as a string
+ */
+function getTextForTokenKind(kind) {
+    return ts.tokenToString(kind);
+}
+exports.getTextForTokenKind = getTextForTokenKind;
+/**
+ * Returns true if the given ts.Node is a valid ESTree class member
+ * @param node TypeScript AST node
+ * @returns is valid ESTree class member
+ */
+function isESTreeClassMember(node) {
+    return node.kind !== SyntaxKind.SemicolonClassElement;
+}
+exports.isESTreeClassMember = isESTreeClassMember;
+/**
+ * Checks if a ts.Node has a modifier
+ * @param modifierKind TypeScript SyntaxKind modifier
+ * @param node TypeScript AST node
+ * @returns has the modifier specified
+ */
+function hasModifier(modifierKind, node) {
+    return (!!node.modifiers &&
+        !!node.modifiers.length &&
+        node.modifiers.some(modifier => modifier.kind === modifierKind));
+}
+exports.hasModifier = hasModifier;
+/**
+ * Get last last modifier in ast
+ * @param node TypeScript AST node
+ * @returns returns last modifier if present or null
+ */
+function getLastModifier(node) {
+    return ((!!node.modifiers &&
+        !!node.modifiers.length &&
+        node.modifiers[node.modifiers.length - 1]) ||
+        null);
+}
+exports.getLastModifier = getLastModifier;
+/**
+ * Returns true if the given ts.Token is a comma
+ * @param token the TypeScript token
+ * @returns is comma
+ */
+function isComma(token) {
+    return token.kind === SyntaxKind.CommaToken;
+}
+exports.isComma = isComma;
+/**
+ * Returns true if the given ts.Node is a comment
+ * @param node the TypeScript node
+ * @returns is comment
+ */
+function isComment(node) {
+    return (node.kind === SyntaxKind.SingleLineCommentTrivia ||
+        node.kind === SyntaxKind.MultiLineCommentTrivia);
+}
+exports.isComment = isComment;
+/**
+ * Returns true if the given ts.Node is a JSDoc comment
+ * @param node the TypeScript node
+ * @returns is JSDoc comment
+ */
+function isJSDocComment(node) {
+    return node.kind === SyntaxKind.JSDocComment;
+}
+exports.isJSDocComment = isJSDocComment;
+/**
+ * Returns the binary expression type of the given ts.Token
+ * @param operator the operator token
+ * @returns the binary expression type
+ */
+function getBinaryExpressionType(operator) {
+    if (isAssignmentOperator(operator)) {
+        return ts_estree_1.AST_NODE_TYPES.AssignmentExpression;
+    }
+    else if (isLogicalOperator(operator)) {
+        return ts_estree_1.AST_NODE_TYPES.LogicalExpression;
+    }
+    return ts_estree_1.AST_NODE_TYPES.BinaryExpression;
+}
+exports.getBinaryExpressionType = getBinaryExpressionType;
+/**
+ * Returns line and column data for the given positions,
+ * @param pos position to check
+ * @param ast the AST object
+ * @returns line and column
+ */
+function getLineAndCharacterFor(pos, ast) {
+    const loc = ast.getLineAndCharacterOfPosition(pos);
+    return {
+        line: loc.line + 1,
+        column: loc.character,
+    };
+}
+exports.getLineAndCharacterFor = getLineAndCharacterFor;
+/**
+ * Returns line and column data for the given start and end positions,
+ * for the given AST
+ * @param start start data
+ * @param end   end data
+ * @param ast   the AST object
+ * @returns the loc data
+ */
+function getLocFor(start, end, ast) {
+    return {
+        start: getLineAndCharacterFor(start, ast),
+        end: getLineAndCharacterFor(end, ast),
+    };
+}
+exports.getLocFor = getLocFor;
+/**
+ * Check whatever node can contain directive
+ * @param node
+ * @returns returns true if node can contain directive
+ */
+function canContainDirective(node) {
+    if (node.kind === ts.SyntaxKind.Block) {
+        switch (node.parent.kind) {
+            case ts.SyntaxKind.Constructor:
+            case ts.SyntaxKind.GetAccessor:
+            case ts.SyntaxKind.SetAccessor:
+            case ts.SyntaxKind.ArrowFunction:
+            case ts.SyntaxKind.FunctionExpression:
+            case ts.SyntaxKind.FunctionDeclaration:
+            case ts.SyntaxKind.MethodDeclaration:
+                return true;
+            default:
+                return false;
+        }
+    }
+    return true;
+}
+exports.canContainDirective = canContainDirective;
+/**
+ * Returns range for the given ts.Node
+ * @param node the ts.Node or ts.Token
+ * @param ast the AST object
+ * @returns the range data
+ */
+function getRange(node, ast) {
+    return [node.getStart(ast), node.getEnd()];
+}
+exports.getRange = getRange;
+/**
+ * Returns true if a given ts.Node is a token
+ * @param node the ts.Node
+ * @returns is a token
+ */
+function isToken(node) {
+    return (node.kind >= SyntaxKind.FirstToken && node.kind <= SyntaxKind.LastToken);
+}
+exports.isToken = isToken;
+/**
+ * Returns true if a given ts.Node is a JSX token
+ * @param node ts.Node to be checked
+ * @returns is a JSX token
+ */
+function isJSXToken(node) {
+    return (node.kind >= SyntaxKind.JsxElement && node.kind <= SyntaxKind.JsxAttribute);
+}
+exports.isJSXToken = isJSXToken;
+/**
+ * Returns the declaration kind of the given ts.Node
+ * @param node TypeScript AST node
+ * @returns declaration kind
+ */
+function getDeclarationKind(node) {
+    if (node.flags & ts.NodeFlags.Let) {
+        return 'let';
+    }
+    if (node.flags & ts.NodeFlags.Const) {
+        return 'const';
+    }
+    return 'var';
+}
+exports.getDeclarationKind = getDeclarationKind;
+/**
+ * Gets a ts.Node's accessibility level
+ * @param node The ts.Node
+ * @returns accessibility "public", "protected", "private", or null
+ */
+function getTSNodeAccessibility(node) {
+    const modifiers = node.modifiers;
+    if (!modifiers) {
+        return null;
+    }
+    for (let i = 0; i < modifiers.length; i++) {
+        const modifier = modifiers[i];
+        switch (modifier.kind) {
+            case SyntaxKind.PublicKeyword:
+                return 'public';
+            case SyntaxKind.ProtectedKeyword:
+                return 'protected';
+            case SyntaxKind.PrivateKeyword:
+                return 'private';
+            default:
+                break;
+        }
+    }
+    return null;
+}
+exports.getTSNodeAccessibility = getTSNodeAccessibility;
+/**
+ * Finds the next token based on the previous one and its parent
+ * Had to copy this from TS instead of using TS's version because theirs doesn't pass the ast to getChildren
+ * @param previousToken The previous TSToken
+ * @param parent The parent TSNode
+ * @param ast The TS AST
+ * @returns the next TSToken
+ */
+function findNextToken(previousToken, parent, ast) {
+    return find(parent);
+    function find(n) {
+        if (ts.isToken(n) && n.pos === previousToken.end) {
+            // this is token that starts at the end of previous token - return it
+            return n;
+        }
+        return firstDefined(n.getChildren(ast), (child) => {
+            const shouldDiveInChildNode = 
+            // previous token is enclosed somewhere in the child
+            (child.pos <= previousToken.pos && child.end > previousToken.end) ||
+                // previous token ends exactly at the beginning of child
+                child.pos === previousToken.end;
+            return shouldDiveInChildNode && nodeHasTokens(child, ast)
+                ? find(child)
+                : undefined;
+        });
+    }
+}
+exports.findNextToken = findNextToken;
+/**
+ * Find the first matching ancestor based on the given predicate function.
+ * @param node The current ts.Node
+ * @param predicate The predicate function to apply to each checked ancestor
+ * @returns a matching parent ts.Node
+ */
+function findFirstMatchingAncestor(node, predicate) {
+    while (node) {
+        if (predicate(node)) {
+            return node;
+        }
+        node = node.parent;
+    }
+    return undefined;
+}
+exports.findFirstMatchingAncestor = findFirstMatchingAncestor;
+/**
+ * Returns true if a given ts.Node has a JSX token within its hierarchy
+ * @param node ts.Node to be checked
+ * @returns has JSX ancestor
+ */
+function hasJSXAncestor(node) {
+    return !!findFirstMatchingAncestor(node, isJSXToken);
+}
+exports.hasJSXAncestor = hasJSXAncestor;
+/**
+ * Unescape the text content of string literals, e.g. &amp; -> &
+ * @param text The escaped string literal text.
+ * @returns The unescaped string literal text.
+ */
+function unescapeStringLiteralText(text) {
+    return unescape_1.default(text);
+}
+exports.unescapeStringLiteralText = unescapeStringLiteralText;
+/**
+ * Returns true if a given ts.Node is a computed property
+ * @param node ts.Node to be checked
+ * @returns is Computed Property
+ */
+function isComputedProperty(node) {
+    return node.kind === SyntaxKind.ComputedPropertyName;
+}
+exports.isComputedProperty = isComputedProperty;
+/**
+ * Returns true if a given ts.Node is optional (has QuestionToken)
+ * @param node ts.Node to be checked
+ * @returns is Optional
+ */
+function isOptional(node) {
+    return node.questionToken
+        ? node.questionToken.kind === SyntaxKind.QuestionToken
+        : false;
+}
+exports.isOptional = isOptional;
+/**
+ * Returns true if the node is an optional chain node
+ */
+function isChainExpression(node) {
+    return node.type === ts_estree_1.AST_NODE_TYPES.ChainExpression;
+}
+exports.isChainExpression = isChainExpression;
+/**
+ * Returns true of the child of property access expression is an optional chain
+ */
+function isChildUnwrappableOptionalChain(node, child) {
+    if (isChainExpression(child) &&
+        // (x?.y).z is semantically different, and as such .z is no longer optional
+        node.expression.kind !== ts.SyntaxKind.ParenthesizedExpression) {
+        return true;
+    }
+    return false;
+}
+exports.isChildUnwrappableOptionalChain = isChildUnwrappableOptionalChain;
+/**
+ * Returns the type of a given ts.Token
+ * @param token the ts.Token
+ * @returns the token type
+ */
+function getTokenType(token) {
+    if ('originalKeywordKind' in token && token.originalKeywordKind) {
+        if (token.originalKeywordKind === SyntaxKind.NullKeyword) {
+            return ts_estree_1.AST_TOKEN_TYPES.Null;
+        }
+        else if (token.originalKeywordKind >= SyntaxKind.FirstFutureReservedWord &&
+            token.originalKeywordKind <= SyntaxKind.LastKeyword) {
+            return ts_estree_1.AST_TOKEN_TYPES.Identifier;
+        }
+        return ts_estree_1.AST_TOKEN_TYPES.Keyword;
+    }
+    if (token.kind >= SyntaxKind.FirstKeyword &&
+        token.kind <= SyntaxKind.LastFutureReservedWord) {
+        if (token.kind === SyntaxKind.FalseKeyword ||
+            token.kind === SyntaxKind.TrueKeyword) {
+            return ts_estree_1.AST_TOKEN_TYPES.Boolean;
+        }
+        return ts_estree_1.AST_TOKEN_TYPES.Keyword;
+    }
+    if (token.kind >= SyntaxKind.FirstPunctuation &&
+        token.kind <= SyntaxKind.LastBinaryOperator) {
+        return ts_estree_1.AST_TOKEN_TYPES.Punctuator;
+    }
+    if (token.kind >= SyntaxKind.NoSubstitutionTemplateLiteral &&
+        token.kind <= SyntaxKind.TemplateTail) {
+        return ts_estree_1.AST_TOKEN_TYPES.Template;
+    }
+    switch (token.kind) {
+        case SyntaxKind.NumericLiteral:
+            return ts_estree_1.AST_TOKEN_TYPES.Numeric;
+        case SyntaxKind.JsxText:
+            return ts_estree_1.AST_TOKEN_TYPES.JSXText;
+        case SyntaxKind.StringLiteral:
+            // A TypeScript-StringLiteral token with a TypeScript-JsxAttribute or TypeScript-JsxElement parent,
+            // must actually be an ESTree-JSXText token
+            if (token.parent &&
+                (token.parent.kind === SyntaxKind.JsxAttribute ||
+                    token.parent.kind === SyntaxKind.JsxElement)) {
+                return ts_estree_1.AST_TOKEN_TYPES.JSXText;
+            }
+            return ts_estree_1.AST_TOKEN_TYPES.String;
+        case SyntaxKind.RegularExpressionLiteral:
+            return ts_estree_1.AST_TOKEN_TYPES.RegularExpression;
+        case SyntaxKind.Identifier:
+        case SyntaxKind.ConstructorKeyword:
+        case SyntaxKind.GetKeyword:
+        case SyntaxKind.SetKeyword:
+        // falls through
+        default:
+    }
+    // Some JSX tokens have to be determined based on their parent
+    if (token.parent && token.kind === SyntaxKind.Identifier) {
+        if (isJSXToken(token.parent)) {
+            return ts_estree_1.AST_TOKEN_TYPES.JSXIdentifier;
+        }
+        if (token.parent.kind === SyntaxKind.PropertyAccessExpression &&
+            hasJSXAncestor(token)) {
+            return ts_estree_1.AST_TOKEN_TYPES.JSXIdentifier;
+        }
+    }
+    return ts_estree_1.AST_TOKEN_TYPES.Identifier;
+}
+exports.getTokenType = getTokenType;
+/**
+ * Extends and formats a given ts.Token, for a given AST
+ * @param token the ts.Token
+ * @param ast   the AST object
+ * @returns the converted Token
+ */
+function convertToken(token, ast) {
+    const start = token.kind === SyntaxKind.JsxText
+        ? token.getFullStart()
+        : token.getStart(ast);
+    const end = token.getEnd();
+    const value = ast.text.slice(start, end);
+    const tokenType = getTokenType(token);
+    if (tokenType === ts_estree_1.AST_TOKEN_TYPES.RegularExpression) {
+        return {
+            type: tokenType,
+            value,
+            range: [start, end],
+            loc: getLocFor(start, end, ast),
+            regex: {
+                pattern: value.slice(1, value.lastIndexOf('/')),
+                flags: value.slice(value.lastIndexOf('/') + 1),
+            },
+        };
+    }
+    else {
+        return {
+            type: tokenType,
+            value,
+            range: [start, end],
+            loc: getLocFor(start, end, ast),
+        };
+    }
+}
+exports.convertToken = convertToken;
+/**
+ * Converts all tokens for the given AST
+ * @param ast the AST object
+ * @returns the converted Tokens
+ */
+function convertTokens(ast) {
+    const result = [];
+    /**
+     * @param node the ts.Node
+     */
+    function walk(node) {
+        // TypeScript generates tokens for types in JSDoc blocks. Comment tokens
+        // and their children should not be walked or added to the resulting tokens list.
+        if (isComment(node) || isJSDocComment(node)) {
+            return;
+        }
+        if (isToken(node) && node.kind !== SyntaxKind.EndOfFileToken) {
+            const converted = convertToken(node, ast);
+            if (converted) {
+                result.push(converted);
+            }
+        }
+        else {
+            node.getChildren(ast).forEach(walk);
+        }
+    }
+    walk(ast);
+    return result;
+}
+exports.convertTokens = convertTokens;
+/**
+ * @param ast     the AST object
+ * @param start      the index at which the error starts
+ * @param message the error message
+ * @returns converted error object
+ */
+function createError(ast, start, message) {
+    const loc = ast.getLineAndCharacterOfPosition(start);
+    return {
+        index: start,
+        lineNumber: loc.line + 1,
+        column: loc.character,
+        message,
+    };
+}
+exports.createError = createError;
+/**
+ * @param n the TSNode
+ * @param ast the TS AST
+ */
+function nodeHasTokens(n, ast) {
+    // If we have a token or node that has a non-zero width, it must have tokens.
+    // Note: getWidth() does not take trivia into account.
+    return n.kind === SyntaxKind.EndOfFileToken
+        ? // eslint-disable-next-line @typescript-eslint/no-explicit-any
+            !!n.jsDoc
+        : n.getWidth(ast) !== 0;
+}
+exports.nodeHasTokens = nodeHasTokens;
+/**
+ * Like `forEach`, but suitable for use with numbers and strings (which may be falsy).
+ * @template T
+ * @template U
+ * @param array
+ * @param callback
+ */
+function firstDefined(array, callback) {
+    if (array === undefined) {
+        return undefined;
+    }
+    for (let i = 0; i < array.length; i++) {
+        const result = callback(array[i], i);
+        if (result !== undefined) {
+            return result;
+        }
+    }
+    return undefined;
+}
+exports.firstDefined = firstDefined;
+//# sourceMappingURL=node-utils.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..306ba366843e5d5521c9e6eaf13a419929ea559d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"node-utils.js","sourceRoot":"","sources":["../src/node-utils.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e41c80ef65d63bf739cff51b70d1fc716ffad257
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.d.ts
@@ -0,0 +1,163 @@
+import { DebugLevel } from '@typescript-eslint/types';
+import { Program } from 'typescript';
+import { TSESTree, TSNode, TSESTreeToTSNode, TSToken } from './ts-estree';
+import { CanonicalPath } from './create-program/shared';
+declare type DebugModule = 'typescript-eslint' | 'eslint' | 'typescript';
+export interface Extra {
+    code: string;
+    comment: boolean;
+    comments: TSESTree.Comment[];
+    createDefaultProgram: boolean;
+    debugLevel: Set<DebugModule>;
+    errorOnTypeScriptSyntacticAndSemanticIssues: boolean;
+    errorOnUnknownASTType: boolean;
+    EXPERIMENTAL_useSourceOfProjectReferenceRedirect: boolean;
+    extraFileExtensions: string[];
+    filePath: string;
+    jsx: boolean;
+    loc: boolean;
+    log: (message: string) => void;
+    preserveNodeMaps?: boolean;
+    projects: CanonicalPath[];
+    range: boolean;
+    strict: boolean;
+    tokens: null | TSESTree.Token[];
+    tsconfigRootDir: string;
+    useJSXTextNode: boolean;
+}
+interface ParseOptions {
+    /**
+     * create a top-level comments array containing all comments
+     */
+    comment?: boolean;
+    /**
+     * An array of modules to turn explicit debugging on for.
+     * - 'typescript-eslint' is the same as setting the env var `DEBUG=typescript-eslint:*`
+     * - 'eslint' is the same as setting the env var `DEBUG=eslint:*`
+     * - 'typescript' is the same as setting `extendedDiagnostics: true` in your tsconfig compilerOptions
+     *
+     * For convenience, also supports a boolean:
+     * - true === ['typescript-eslint']
+     * - false === []
+     */
+    debugLevel?: DebugLevel;
+    /**
+     * Cause the parser to error if it encounters an unknown AST node type (useful for testing).
+     * This case only usually occurs when TypeScript releases new features.
+     */
+    errorOnUnknownASTType?: boolean;
+    /**
+     * Absolute (or relative to `cwd`) path to the file being parsed.
+     */
+    filePath?: string;
+    /**
+     * Enable parsing of JSX.
+     * For more details, see https://www.typescriptlang.org/docs/handbook/jsx.html
+     *
+     * NOTE: this setting does not effect known file types (.js, .jsx, .ts, .tsx, .json) because the
+     * TypeScript compiler has its own internal handling for known file extensions.
+     *
+     * For the exact behavior, see https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/parser#parseroptionsecmafeaturesjsx
+     */
+    jsx?: boolean;
+    /**
+     * Controls whether the `loc` information to each node.
+     * The `loc` property is an object which contains the exact line/column the node starts/ends on.
+     * This is similar to the `range` property, except it is line/column relative.
+     */
+    loc?: boolean;
+    loggerFn?: ((message: string) => void) | false;
+    /**
+     * Controls whether the `range` property is included on AST nodes.
+     * The `range` property is a [number, number] which indicates the start/end index of the node in the file contents.
+     * This is similar to the `loc` property, except this is the absolute index.
+     */
+    range?: boolean;
+    /**
+     * Set to true to create a top-level array containing all tokens from the file.
+     */
+    tokens?: boolean;
+    useJSXTextNode?: boolean;
+}
+interface ParseAndGenerateServicesOptions extends ParseOptions {
+    /**
+     * Causes the parser to error if the TypeScript compiler returns any unexpected syntax/semantic errors.
+     */
+    errorOnTypeScriptSyntacticAndSemanticIssues?: boolean;
+    /**
+     * ***EXPERIMENTAL FLAG*** - Use this at your own risk.
+     *
+     * Causes TS to use the source files for referenced projects instead of the compiled .d.ts files.
+     * This feature is not yet optimized, and is likely to cause OOMs for medium to large projects.
+     *
+     * This flag REQUIRES at least TS v3.9, otherwise it does nothing.
+     *
+     * See: https://github.com/typescript-eslint/typescript-eslint/issues/2094
+     */
+    EXPERIMENTAL_useSourceOfProjectReferenceRedirect?: boolean;
+    /**
+     * When `project` is provided, this controls the non-standard file extensions which will be parsed.
+     * It accepts an array of file extensions, each preceded by a `.`.
+     */
+    extraFileExtensions?: string[];
+    /**
+     * Absolute (or relative to `tsconfigRootDir`) path to the file being parsed.
+     * When `project` is provided, this is required, as it is used to fetch the file from the TypeScript compiler's cache.
+     */
+    filePath?: string;
+    /**
+     * Allows the user to control whether or not two-way AST node maps are preserved
+     * during the AST conversion process.
+     *
+     * By default: the AST node maps are NOT preserved, unless `project` has been specified,
+     * in which case the maps are made available on the returned `parserServices`.
+     *
+     * NOTE: If `preserveNodeMaps` is explicitly set by the user, it will be respected,
+     * regardless of whether or not `project` is in use.
+     */
+    preserveNodeMaps?: boolean;
+    /**
+     * Absolute (or relative to `tsconfigRootDir`) paths to the tsconfig(s).
+     * If this is provided, type information will be returned.
+     */
+    project?: string | string[];
+    /**
+     * If you provide a glob (or globs) to the project option, you can use this option to ignore certain folders from
+     * being matched by the globs.
+     * This accepts an array of globs to ignore.
+     *
+     * By default, this is set to ["**\/node_modules/**"]
+     */
+    projectFolderIgnoreList?: string[];
+    /**
+     * The absolute path to the root directory for all provided `project`s.
+     */
+    tsconfigRootDir?: string;
+    /**
+     ***************************************************************************************
+     * IT IS RECOMMENDED THAT YOU DO NOT USE THIS OPTION, AS IT CAUSES PERFORMANCE ISSUES. *
+     ***************************************************************************************
+     *
+     * When passed with `project`, this allows the parser to create a catch-all, default program.
+     * This means that if the parser encounters a file not included in any of the provided `project`s,
+     * it will not error, but will instead parse the file and its dependencies in a new program.
+     */
+    createDefaultProgram?: boolean;
+}
+export declare type TSESTreeOptions = ParseAndGenerateServicesOptions;
+export interface ParserWeakMap<TKey, TValueBase> {
+    get<TValue extends TValueBase>(key: TKey): TValue;
+    has(key: unknown): boolean;
+}
+export interface ParserWeakMapESTreeToTSNode<TKey extends TSESTree.Node = TSESTree.Node> {
+    get<TKeyBase extends TKey>(key: TKeyBase): TSESTreeToTSNode<TKeyBase>;
+    has(key: unknown): boolean;
+}
+export interface ParserServices {
+    program: Program;
+    esTreeNodeToTSNodeMap: ParserWeakMapESTreeToTSNode;
+    tsNodeToESTreeNodeMap: ParserWeakMap<TSNode | TSToken, TSESTree.Node>;
+    hasFullTypeInformation: boolean;
+}
+export {};
+//# sourceMappingURL=parser-options.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..933eb45e6159627cace0746d7b5615ab283e11a0
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"parser-options.d.ts","sourceRoot":"","sources":["../src/parser-options.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.js
new file mode 100644
index 0000000000000000000000000000000000000000..66f40a290d71f2fc4811d2bd4e5af267c32accac
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=parser-options.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..22b7b8ab93f6db4309d13da8b448a657c8109d41
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"parser-options.js","sourceRoot":"","sources":["../src/parser-options.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/parser.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..130ece282c6a789785d4b08f6d2aeb106e28f555
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser.d.ts
@@ -0,0 +1,23 @@
+import { TSESTreeOptions, ParserServices } from './parser-options';
+import { TSESTree } from './ts-estree';
+interface EmptyObject {
+}
+declare type AST<T extends TSESTreeOptions> = TSESTree.Program & (T['tokens'] extends true ? {
+    tokens: TSESTree.Token[];
+} : EmptyObject) & (T['comment'] extends true ? {
+    comments: TSESTree.Comment[];
+} : EmptyObject);
+interface ParseAndGenerateServicesResult<T extends TSESTreeOptions> {
+    ast: AST<T>;
+    services: ParserServices;
+}
+interface ParseWithNodeMapsResult<T extends TSESTreeOptions> {
+    ast: AST<T>;
+    esTreeNodeToTSNodeMap: ParserServices['esTreeNodeToTSNodeMap'];
+    tsNodeToESTreeNodeMap: ParserServices['tsNodeToESTreeNodeMap'];
+}
+declare function parse<T extends TSESTreeOptions = TSESTreeOptions>(code: string, options?: T): AST<T>;
+declare function parseWithNodeMaps<T extends TSESTreeOptions = TSESTreeOptions>(code: string, options?: T): ParseWithNodeMapsResult<T>;
+declare function parseAndGenerateServices<T extends TSESTreeOptions = TSESTreeOptions>(code: string, options: T): ParseAndGenerateServicesResult<T>;
+export { AST, parse, parseAndGenerateServices, parseWithNodeMaps, ParseAndGenerateServicesResult, ParseWithNodeMapsResult, };
+//# sourceMappingURL=parser.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/parser.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..cc150d7f72f6d3cdf11fe7a1c1be10a81f5ceed9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAWA,OAAO,EAAS,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE1E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA2TvC,UAAU,WAAW;CAAG;AACxB,aAAK,GAAG,CAAC,CAAC,SAAS,eAAe,IAAI,QAAQ,CAAC,OAAO,GACpD,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,IAAI,GAAG;IAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAA;CAAE,GAAG,WAAW,CAAC,GACvE,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,IAAI,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAA;CAAE,GAAG,WAAW,CAAC,CAAC;AAE/E,UAAU,8BAA8B,CAAC,CAAC,SAAS,eAAe;IAChE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACZ,QAAQ,EAAE,cAAc,CAAC;CAC1B;AACD,UAAU,uBAAuB,CAAC,CAAC,SAAS,eAAe;IACzD,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACZ,qBAAqB,EAAE,cAAc,CAAC,uBAAuB,CAAC,CAAC;IAC/D,qBAAqB,EAAE,cAAc,CAAC,uBAAuB,CAAC,CAAC;CAChE;AAED,iBAAS,KAAK,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,EACxD,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,CAAC,GACV,GAAG,CAAC,CAAC,CAAC,CAGR;AAyDD,iBAAS,iBAAiB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,EACpE,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,CAAC,GACV,uBAAuB,CAAC,CAAC,CAAC,CAE5B;AAED,iBAAS,wBAAwB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,EAC3E,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,GACT,8BAA8B,CAAC,CAAC,CAAC,CA0EnC;AAED,OAAO,EACL,GAAG,EACH,KAAK,EACL,wBAAwB,EACxB,iBAAiB,EACjB,8BAA8B,EAC9B,uBAAuB,GACxB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/parser.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser.js
new file mode 100644
index 0000000000000000000000000000000000000000..ea4bafffebb515b4e839b557b3070f10a13aff1c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser.js
@@ -0,0 +1,400 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parseWithNodeMaps = exports.parseAndGenerateServices = exports.parse = void 0;
+const debug_1 = __importDefault(require("debug"));
+const globby_1 = require("globby");
+const is_glob_1 = __importDefault(require("is-glob"));
+const semver_1 = __importDefault(require("semver"));
+const ts = __importStar(require("typescript"));
+const ast_converter_1 = require("./ast-converter");
+const convert_1 = require("./convert");
+const createDefaultProgram_1 = require("./create-program/createDefaultProgram");
+const createIsolatedProgram_1 = require("./create-program/createIsolatedProgram");
+const createProjectProgram_1 = require("./create-program/createProjectProgram");
+const createSourceFile_1 = require("./create-program/createSourceFile");
+const semantic_or_syntactic_errors_1 = require("./semantic-or-syntactic-errors");
+const shared_1 = require("./create-program/shared");
+const log = debug_1.default('typescript-eslint:typescript-estree:parser');
+/**
+ * This needs to be kept in sync with the top-level README.md in the
+ * typescript-eslint monorepo
+ */
+const SUPPORTED_TYPESCRIPT_VERSIONS = '>=3.3.1 <4.2.0';
+/*
+ * The semver package will ignore prerelease ranges, and we don't want to explicitly document every one
+ * List them all separately here, so we can automatically create the full string
+ */
+const SUPPORTED_PRERELEASE_RANGES = ['4.1.1-rc', '4.1.0-beta'];
+const ACTIVE_TYPESCRIPT_VERSION = ts.version;
+const isRunningSupportedTypeScriptVersion = semver_1.default.satisfies(ACTIVE_TYPESCRIPT_VERSION, [SUPPORTED_TYPESCRIPT_VERSIONS]
+    .concat(SUPPORTED_PRERELEASE_RANGES)
+    .join(' || '));
+let extra;
+let warnedAboutTSVersion = false;
+function enforceString(code) {
+    /**
+     * Ensure the source code is a string
+     */
+    if (typeof code !== 'string') {
+        return String(code);
+    }
+    return code;
+}
+/**
+ * @param code The code of the file being linted
+ * @param shouldProvideParserServices True if the program should be attempted to be calculated from provided tsconfig files
+ * @param shouldCreateDefaultProgram True if the program should be created from compiler host
+ * @returns Returns a source file and program corresponding to the linted code
+ */
+function getProgramAndAST(code, shouldProvideParserServices, shouldCreateDefaultProgram) {
+    return ((shouldProvideParserServices &&
+        createProjectProgram_1.createProjectProgram(code, shouldCreateDefaultProgram, extra)) ||
+        (shouldProvideParserServices &&
+            shouldCreateDefaultProgram &&
+            createDefaultProgram_1.createDefaultProgram(code, extra)) ||
+        createIsolatedProgram_1.createIsolatedProgram(code, extra));
+}
+/**
+ * Compute the filename based on the parser options.
+ *
+ * Even if jsx option is set in typescript compiler, filename still has to
+ * contain .tsx file extension.
+ *
+ * @param options Parser options
+ */
+function getFileName({ jsx } = {}) {
+    return jsx ? 'estree.tsx' : 'estree.ts';
+}
+/**
+ * Resets the extra config object
+ */
+function resetExtra() {
+    extra = {
+        code: '',
+        comment: false,
+        comments: [],
+        createDefaultProgram: false,
+        debugLevel: new Set(),
+        errorOnTypeScriptSyntacticAndSemanticIssues: false,
+        errorOnUnknownASTType: false,
+        EXPERIMENTAL_useSourceOfProjectReferenceRedirect: false,
+        extraFileExtensions: [],
+        filePath: getFileName(),
+        jsx: false,
+        loc: false,
+        log: console.log,
+        preserveNodeMaps: true,
+        projects: [],
+        range: false,
+        strict: false,
+        tokens: null,
+        tsconfigRootDir: process.cwd(),
+        useJSXTextNode: false,
+    };
+}
+function getTsconfigPath(tsconfigPath, extra) {
+    return shared_1.getCanonicalFileName(shared_1.ensureAbsolutePath(tsconfigPath, extra));
+}
+/**
+ * Normalizes, sanitizes, resolves and filters the provided project paths
+ */
+function prepareAndTransformProjects(projectsInput, ignoreListInput) {
+    const sanitizedProjects = [];
+    // Normalize and sanitize the project paths
+    if (typeof projectsInput === 'string') {
+        sanitizedProjects.push(projectsInput);
+    }
+    else if (Array.isArray(projectsInput)) {
+        for (const project of projectsInput) {
+            if (typeof project === 'string') {
+                sanitizedProjects.push(project);
+            }
+        }
+    }
+    if (sanitizedProjects.length === 0) {
+        return [];
+    }
+    // Transform glob patterns into paths
+    const nonGlobProjects = sanitizedProjects.filter(project => !is_glob_1.default(project));
+    const globProjects = sanitizedProjects.filter(project => is_glob_1.default(project));
+    const uniqueCanonicalProjectPaths = new Set(nonGlobProjects
+        .concat(globby_1.sync([...globProjects, ...ignoreListInput], {
+        cwd: extra.tsconfigRootDir,
+    }))
+        .map(project => getTsconfigPath(project, extra)));
+    log('parserOptions.project (excluding ignored) matched projects: %s', uniqueCanonicalProjectPaths);
+    return Array.from(uniqueCanonicalProjectPaths);
+}
+function applyParserOptionsToExtra(options) {
+    var _a;
+    /**
+     * Configure Debug logging
+     */
+    if (options.debugLevel === true) {
+        extra.debugLevel = new Set(['typescript-eslint']);
+    }
+    else if (Array.isArray(options.debugLevel)) {
+        extra.debugLevel = new Set(options.debugLevel);
+    }
+    if (extra.debugLevel.size > 0) {
+        // debug doesn't support multiple `enable` calls, so have to do it all at once
+        const namespaces = [];
+        if (extra.debugLevel.has('typescript-eslint')) {
+            namespaces.push('typescript-eslint:*');
+        }
+        if (extra.debugLevel.has('eslint') ||
+            // make sure we don't turn off the eslint debug if it was enabled via --debug
+            debug_1.default.enabled('eslint:*,-eslint:code-path')) {
+            // https://github.com/eslint/eslint/blob/9dfc8501fb1956c90dc11e6377b4cb38a6bea65d/bin/eslint.js#L25
+            namespaces.push('eslint:*,-eslint:code-path');
+        }
+        debug_1.default.enable(namespaces.join(','));
+    }
+    /**
+     * Track range information in the AST
+     */
+    extra.range = typeof options.range === 'boolean' && options.range;
+    extra.loc = typeof options.loc === 'boolean' && options.loc;
+    /**
+     * Track tokens in the AST
+     */
+    if (typeof options.tokens === 'boolean' && options.tokens) {
+        extra.tokens = [];
+    }
+    /**
+     * Track comments in the AST
+     */
+    if (typeof options.comment === 'boolean' && options.comment) {
+        extra.comment = true;
+        extra.comments = [];
+    }
+    /**
+     * Enable JSX - note the applicable file extension is still required
+     */
+    if (typeof options.jsx === 'boolean' && options.jsx) {
+        extra.jsx = true;
+    }
+    /**
+     * Get the file path
+     */
+    if (typeof options.filePath === 'string' && options.filePath !== '<input>') {
+        extra.filePath = options.filePath;
+    }
+    else {
+        extra.filePath = getFileName(extra);
+    }
+    /**
+     * The JSX AST changed the node type for string literals
+     * inside a JSX Element from `Literal` to `JSXText`.
+     *
+     * When value is `true`, these nodes will be parsed as type `JSXText`.
+     * When value is `false`, these nodes will be parsed as type `Literal`.
+     */
+    if (typeof options.useJSXTextNode === 'boolean' && options.useJSXTextNode) {
+        extra.useJSXTextNode = true;
+    }
+    /**
+     * Allow the user to cause the parser to error if it encounters an unknown AST Node Type
+     * (used in testing)
+     */
+    if (typeof options.errorOnUnknownASTType === 'boolean' &&
+        options.errorOnUnknownASTType) {
+        extra.errorOnUnknownASTType = true;
+    }
+    /**
+     * Allow the user to override the function used for logging
+     */
+    if (typeof options.loggerFn === 'function') {
+        extra.log = options.loggerFn;
+    }
+    else if (options.loggerFn === false) {
+        extra.log = () => { };
+    }
+    if (typeof options.tsconfigRootDir === 'string') {
+        extra.tsconfigRootDir = options.tsconfigRootDir;
+    }
+    // NOTE - ensureAbsolutePath relies upon having the correct tsconfigRootDir in extra
+    extra.filePath = shared_1.ensureAbsolutePath(extra.filePath, extra);
+    const projectFolderIgnoreList = ((_a = options.projectFolderIgnoreList) !== null && _a !== void 0 ? _a : ['**/node_modules/**'])
+        .reduce((acc, folder) => {
+        if (typeof folder === 'string') {
+            acc.push(folder);
+        }
+        return acc;
+    }, [])
+        // prefix with a ! for not match glob
+        .map(folder => (folder.startsWith('!') ? folder : `!${folder}`));
+    // NOTE - prepareAndTransformProjects relies upon having the correct tsconfigRootDir in extra
+    extra.projects = prepareAndTransformProjects(options.project, projectFolderIgnoreList);
+    if (Array.isArray(options.extraFileExtensions) &&
+        options.extraFileExtensions.every(ext => typeof ext === 'string')) {
+        extra.extraFileExtensions = options.extraFileExtensions;
+    }
+    /**
+     * Allow the user to enable or disable the preservation of the AST node maps
+     * during the conversion process.
+     */
+    if (typeof options.preserveNodeMaps === 'boolean') {
+        extra.preserveNodeMaps = options.preserveNodeMaps;
+    }
+    extra.createDefaultProgram =
+        typeof options.createDefaultProgram === 'boolean' &&
+            options.createDefaultProgram;
+    extra.EXPERIMENTAL_useSourceOfProjectReferenceRedirect =
+        typeof options.EXPERIMENTAL_useSourceOfProjectReferenceRedirect ===
+            'boolean' && options.EXPERIMENTAL_useSourceOfProjectReferenceRedirect;
+}
+function warnAboutTSVersion() {
+    var _a;
+    if (!isRunningSupportedTypeScriptVersion && !warnedAboutTSVersion) {
+        const isTTY = typeof process === undefined ? false : (_a = process.stdout) === null || _a === void 0 ? void 0 : _a.isTTY;
+        if (isTTY) {
+            const border = '=============';
+            const versionWarning = [
+                border,
+                'WARNING: You are currently running a version of TypeScript which is not officially supported by @typescript-eslint/typescript-estree.',
+                'You may find that it works just fine, or you may not.',
+                `SUPPORTED TYPESCRIPT VERSIONS: ${SUPPORTED_TYPESCRIPT_VERSIONS}`,
+                `YOUR TYPESCRIPT VERSION: ${ACTIVE_TYPESCRIPT_VERSION}`,
+                'Please only submit bug reports when using the officially supported version.',
+                border,
+            ];
+            extra.log(versionWarning.join('\n\n'));
+        }
+        warnedAboutTSVersion = true;
+    }
+}
+function parse(code, options) {
+    const { ast } = parseWithNodeMapsInternal(code, options, false);
+    return ast;
+}
+exports.parse = parse;
+function parseWithNodeMapsInternal(code, options, shouldPreserveNodeMaps) {
+    /**
+     * Reset the parse configuration
+     */
+    resetExtra();
+    /**
+     * Ensure users do not attempt to use parse() when they need parseAndGenerateServices()
+     */
+    if (options === null || options === void 0 ? void 0 : options.errorOnTypeScriptSyntacticAndSemanticIssues) {
+        throw new Error(`"errorOnTypeScriptSyntacticAndSemanticIssues" is only supported for parseAndGenerateServices()`);
+    }
+    /**
+     * Ensure the source code is a string, and store a reference to it
+     */
+    code = enforceString(code);
+    extra.code = code;
+    /**
+     * Apply the given parser options
+     */
+    if (typeof options !== 'undefined') {
+        applyParserOptionsToExtra(options);
+    }
+    /**
+     * Warn if the user is using an unsupported version of TypeScript
+     */
+    warnAboutTSVersion();
+    /**
+     * Create a ts.SourceFile directly, no ts.Program is needed for a simple
+     * parse
+     */
+    const ast = createSourceFile_1.createSourceFile(code, extra);
+    /**
+     * Convert the TypeScript AST to an ESTree-compatible one
+     */
+    const { estree, astMaps } = ast_converter_1.astConverter(ast, extra, shouldPreserveNodeMaps);
+    return {
+        ast: estree,
+        esTreeNodeToTSNodeMap: astMaps.esTreeNodeToTSNodeMap,
+        tsNodeToESTreeNodeMap: astMaps.tsNodeToESTreeNodeMap,
+    };
+}
+function parseWithNodeMaps(code, options) {
+    return parseWithNodeMapsInternal(code, options, true);
+}
+exports.parseWithNodeMaps = parseWithNodeMaps;
+function parseAndGenerateServices(code, options) {
+    /**
+     * Reset the parse configuration
+     */
+    resetExtra();
+    /**
+     * Ensure the source code is a string, and store a reference to it
+     */
+    code = enforceString(code);
+    extra.code = code;
+    /**
+     * Apply the given parser options
+     */
+    if (typeof options !== 'undefined') {
+        applyParserOptionsToExtra(options);
+        if (typeof options.errorOnTypeScriptSyntacticAndSemanticIssues ===
+            'boolean' &&
+            options.errorOnTypeScriptSyntacticAndSemanticIssues) {
+            extra.errorOnTypeScriptSyntacticAndSemanticIssues = true;
+        }
+    }
+    /**
+     * Warn if the user is using an unsupported version of TypeScript
+     */
+    warnAboutTSVersion();
+    /**
+     * Generate a full ts.Program in order to be able to provide parser
+     * services, such as type-checking
+     */
+    const shouldProvideParserServices = extra.projects && extra.projects.length > 0;
+    const { ast, program } = getProgramAndAST(code, shouldProvideParserServices, extra.createDefaultProgram);
+    /**
+     * Convert the TypeScript AST to an ESTree-compatible one, and optionally preserve
+     * mappings between converted and original AST nodes
+     */
+    const preserveNodeMaps = typeof extra.preserveNodeMaps === 'boolean' ? extra.preserveNodeMaps : true;
+    const { estree, astMaps } = ast_converter_1.astConverter(ast, extra, preserveNodeMaps);
+    /**
+     * Even if TypeScript parsed the source code ok, and we had no problems converting the AST,
+     * there may be other syntactic or semantic issues in the code that we can optionally report on.
+     */
+    if (program && extra.errorOnTypeScriptSyntacticAndSemanticIssues) {
+        const error = semantic_or_syntactic_errors_1.getFirstSemanticOrSyntacticError(program, ast);
+        if (error) {
+            throw convert_1.convertError(error);
+        }
+    }
+    /**
+     * Return the converted AST and additional parser services
+     */
+    return {
+        ast: estree,
+        services: {
+            hasFullTypeInformation: shouldProvideParserServices,
+            program,
+            esTreeNodeToTSNodeMap: astMaps.esTreeNodeToTSNodeMap,
+            tsNodeToESTreeNodeMap: astMaps.tsNodeToESTreeNodeMap,
+        },
+    };
+}
+exports.parseAndGenerateServices = parseAndGenerateServices;
+//# sourceMappingURL=parser.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/parser.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..68cd088c68b4276a177159867c604fc39ea53cd6
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/parser.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..06b3e12a6e644e46920d5b1f6fd3f7949c09122a
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.d.ts
@@ -0,0 +1,14 @@
+import * as ts from 'typescript';
+interface SemanticOrSyntacticError extends ts.Diagnostic {
+    message: string;
+}
+/**
+ * By default, diagnostics from the TypeScript compiler contain all errors - regardless of whether
+ * they are related to generic ECMAScript standards, or TypeScript-specific constructs.
+ *
+ * Therefore, we filter out all diagnostics, except for the ones we explicitly want to consider when
+ * the user opts in to throwing errors on semantic issues.
+ */
+export declare function getFirstSemanticOrSyntacticError(program: ts.Program, ast: ts.SourceFile): SemanticOrSyntacticError | undefined;
+export {};
+//# sourceMappingURL=semantic-or-syntactic-errors.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..83299c5968b895918dce058009523380a2eaeb13
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"semantic-or-syntactic-errors.d.ts","sourceRoot":"","sources":["../src/semantic-or-syntactic-errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,UAAU,wBAAyB,SAAQ,EAAE,CAAC,UAAU;IACtD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,EAAE,CAAC,OAAO,EACnB,GAAG,EAAE,EAAE,CAAC,UAAU,GACjB,wBAAwB,GAAG,SAAS,CAmCtC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.js
new file mode 100644
index 0000000000000000000000000000000000000000..96473c4e1f377a1837b0e9eba844c595ae5baa86
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.js
@@ -0,0 +1,112 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getFirstSemanticOrSyntacticError = void 0;
+const ts = __importStar(require("typescript"));
+/**
+ * By default, diagnostics from the TypeScript compiler contain all errors - regardless of whether
+ * they are related to generic ECMAScript standards, or TypeScript-specific constructs.
+ *
+ * Therefore, we filter out all diagnostics, except for the ones we explicitly want to consider when
+ * the user opts in to throwing errors on semantic issues.
+ */
+function getFirstSemanticOrSyntacticError(program, ast) {
+    try {
+        const supportedSyntacticDiagnostics = whitelistSupportedDiagnostics(program.getSyntacticDiagnostics(ast));
+        if (supportedSyntacticDiagnostics.length) {
+            return convertDiagnosticToSemanticOrSyntacticError(supportedSyntacticDiagnostics[0]);
+        }
+        const supportedSemanticDiagnostics = whitelistSupportedDiagnostics(program.getSemanticDiagnostics(ast));
+        if (supportedSemanticDiagnostics.length) {
+            return convertDiagnosticToSemanticOrSyntacticError(supportedSemanticDiagnostics[0]);
+        }
+        return undefined;
+    }
+    catch (e) {
+        /**
+         * TypeScript compiler has certain Debug.fail() statements in, which will cause the diagnostics
+         * retrieval above to throw.
+         *
+         * E.g. from ast-alignment-tests
+         * "Debug Failure. Shouldn't ever directly check a JsxOpeningElement"
+         *
+         * For our current use-cases this is undesired behavior, so we just suppress it
+         * and log a a warning.
+         */
+        /* istanbul ignore next */
+        console.warn(`Warning From TSC: "${e.message}`); // eslint-disable-line no-console
+        /* istanbul ignore next */
+        return undefined;
+    }
+}
+exports.getFirstSemanticOrSyntacticError = getFirstSemanticOrSyntacticError;
+function whitelistSupportedDiagnostics(diagnostics) {
+    return diagnostics.filter(diagnostic => {
+        switch (diagnostic.code) {
+            case 1013: // "A rest parameter or binding pattern may not have a trailing comma."
+            case 1014: // "A rest parameter must be last in a parameter list."
+            case 1044: // "'{0}' modifier cannot appear on a module or namespace element."
+            case 1045: // "A '{0}' modifier cannot be used with an interface declaration."
+            case 1048: // "A rest parameter cannot have an initializer."
+            case 1049: // "A 'set' accessor must have exactly one parameter."
+            case 1070: // "'{0}' modifier cannot appear on a type member."
+            case 1071: // "'{0}' modifier cannot appear on an index signature."
+            case 1085: // "Octal literals are not available when targeting ECMAScript 5 and higher. Use the syntax '{0}'."
+            case 1090: // "'{0}' modifier cannot appear on a parameter."
+            case 1096: // "An index signature must have exactly one parameter."
+            case 1097: // "'{0}' list cannot be empty."
+            case 1098: // "Type parameter list cannot be empty."
+            case 1099: // "Type argument list cannot be empty."
+            case 1117: // "An object literal cannot have multiple properties with the same name in strict mode."
+            case 1121: // "Octal literals are not allowed in strict mode."
+            case 1123: //  "Variable declaration list cannot be empty."
+            case 1141: // "String literal expected."
+            case 1162: // "An object member cannot be declared optional."
+            case 1164: // "Computed property names are not allowed in enums."
+            case 1172: // "'extends' clause already seen."
+            case 1173: // "'extends' clause must precede 'implements' clause."
+            case 1175: // "'implements' clause already seen."
+            case 1176: // "Interface declaration cannot have 'implements' clause."
+            case 1190: // "The variable declaration of a 'for...of' statement cannot have an initializer."
+            case 1196: // "Catch clause variable type annotation must be 'any' or 'unknown' if specified."
+            case 1200: // "Line terminator not permitted before arrow."
+            case 1206: // "Decorators are not valid here."
+            case 1211: // "A class declaration without the 'default' modifier must have a name."
+            case 1242: // "'abstract' modifier can only appear on a class, method, or property declaration."
+            case 1246: // "An interface property cannot have an initializer."
+            case 1255: // "A definite assignment assertion '!' is not permitted in this context."
+            case 1308: // "'await' expression is only allowed within an async function."
+            case 2364: // "The left-hand side of an assignment expression must be a variable or a property access."
+            case 2369: // "A parameter property is only allowed in a constructor implementation."
+            case 2452: // "An enum member cannot have a numeric name."
+            case 2462: // "A rest element must be last in a destructuring pattern."
+            case 8017: // "Octal literal types must use ES2015 syntax. Use the syntax '{0}'."
+            case 17012: // "'{0}' is not a valid meta-property for keyword '{1}'. Did you mean '{2}'?"
+            case 17013: // "Meta-property '{0}' is only allowed in the body of a function declaration, function expression, or constructor."
+                return true;
+        }
+        return false;
+    });
+}
+function convertDiagnosticToSemanticOrSyntacticError(diagnostic) {
+    return Object.assign(Object.assign({}, diagnostic), { message: ts.flattenDiagnosticMessageText(diagnostic.messageText, ts.sys.newLine) });
+}
+//# sourceMappingURL=semantic-or-syntactic-errors.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..af69657e4d701f933a2050fcacb35b2ed11d2006
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"semantic-or-syntactic-errors.js","sourceRoot":"","sources":["../src/semantic-or-syntactic-errors.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..be2b1fcab2775a1abe522a220ad372f892494765
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.d.ts
@@ -0,0 +1,9 @@
+import { TSESTree } from './ts-estree';
+declare type SimpleTraverseOptions = {
+    enter: (node: TSESTree.Node, parent: TSESTree.Node | undefined) => void;
+} | {
+    [key: string]: (node: TSESTree.Node, parent: TSESTree.Node | undefined) => void;
+};
+export declare function simpleTraverse(startingNode: TSESTree.Node, options: SimpleTraverseOptions, setParentPointers?: boolean): void;
+export {};
+//# sourceMappingURL=simple-traverse.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..7acdb8698753d6c26416858fd30f95c32ccf5c6c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"simple-traverse.d.ts","sourceRoot":"","sources":["../src/simple-traverse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAevC,aAAK,qBAAqB,GACtB;IACE,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC;CACzE,GACD;IACE,CAAC,GAAG,EAAE,MAAM,GAAG,CACb,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,MAAM,EAAE,QAAQ,CAAC,IAAI,GAAG,SAAS,KAC9B,IAAI,CAAC;CACX,CAAC;AA8CN,wBAAgB,cAAc,CAC5B,YAAY,EAAE,QAAQ,CAAC,IAAI,EAC3B,OAAO,EAAE,qBAAqB,EAC9B,iBAAiB,UAAQ,GACxB,IAAI,CAKN"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.js
new file mode 100644
index 0000000000000000000000000000000000000000..b19f9b77ccf77e6777244aab441dad3f82a17e67
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.js
@@ -0,0 +1,53 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.simpleTraverse = void 0;
+const visitor_keys_1 = require("@typescript-eslint/visitor-keys");
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function isValidNode(x) {
+    return x !== null && typeof x === 'object' && typeof x.type === 'string';
+}
+function getVisitorKeysForNode(allVisitorKeys, node) {
+    const keys = allVisitorKeys[node.type];
+    return (keys !== null && keys !== void 0 ? keys : []);
+}
+class SimpleTraverser {
+    constructor(selectors, setParentPointers = false) {
+        this.allVisitorKeys = visitor_keys_1.visitorKeys;
+        this.selectors = selectors;
+        this.setParentPointers = setParentPointers;
+    }
+    traverse(node, parent) {
+        if (!isValidNode(node)) {
+            return;
+        }
+        if (this.setParentPointers) {
+            node.parent = parent;
+        }
+        if ('enter' in this.selectors) {
+            this.selectors.enter(node, parent);
+        }
+        else if (node.type in this.selectors) {
+            this.selectors[node.type](node, parent);
+        }
+        const keys = getVisitorKeysForNode(this.allVisitorKeys, node);
+        if (keys.length < 1) {
+            return;
+        }
+        for (const key of keys) {
+            const childOrChildren = node[key];
+            if (Array.isArray(childOrChildren)) {
+                for (const child of childOrChildren) {
+                    this.traverse(child, node);
+                }
+            }
+            else {
+                this.traverse(childOrChildren, node);
+            }
+        }
+    }
+}
+function simpleTraverse(startingNode, options, setParentPointers = false) {
+    new SimpleTraverser(options, setParentPointers).traverse(startingNode, undefined);
+}
+exports.simpleTraverse = simpleTraverse;
+//# sourceMappingURL=simple-traverse.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..910f55ed1b674840f364d0a26ac49330c62751d2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"simple-traverse.js","sourceRoot":"","sources":["../src/simple-traverse.ts"],"names":[],"mappings":";;;AAAA,kEAA8D;AAG9D,8DAA8D;AAC9D,SAAS,WAAW,CAAC,CAAM;IACzB,OAAO,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC3E,CAAC;AAED,SAAS,qBAAqB,CAC5B,cAAkC,EAClC,IAAmB;IAEnB,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAU,CAAC;AAC/B,CAAC;AAaD,MAAM,eAAe;IAKnB,YAAY,SAAgC,EAAE,iBAAiB,GAAG,KAAK;QAJtD,mBAAc,GAAG,0BAAW,CAAC;QAK5C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC7C,CAAC;IAED,QAAQ,CAAC,IAAa,EAAE,MAAiC;QACvD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YACtB,OAAO;SACR;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACtB;QAED,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SACpC;aAAM,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;YACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SACzC;QAED,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,OAAO;SACR;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAElC,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;gBAClC,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE;oBACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;iBAC5B;aACF;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;aACtC;SACF;IACH,CAAC;CACF;AAED,SAAgB,cAAc,CAC5B,YAA2B,EAC3B,OAA8B,EAC9B,iBAAiB,GAAG,KAAK;IAEzB,IAAI,eAAe,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CACtD,YAAY,EACZ,SAAS,CACV,CAAC;AACJ,CAAC;AATD,wCASC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0db7a0e8fe09b352e668252b2f8681a53315c5a1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.d.ts
@@ -0,0 +1,170 @@
+import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/types';
+import * as ts from 'typescript';
+import { TSNode } from './ts-nodes';
+export interface EstreeToTsNodeTypes {
+    [AST_NODE_TYPES.ArrayExpression]: ts.ArrayLiteralExpression;
+    [AST_NODE_TYPES.ArrayPattern]: ts.ArrayLiteralExpression | ts.ArrayBindingPattern;
+    [AST_NODE_TYPES.ArrowFunctionExpression]: ts.ArrowFunction;
+    [AST_NODE_TYPES.AssignmentExpression]: ts.BinaryExpression;
+    [AST_NODE_TYPES.AssignmentPattern]: ts.ShorthandPropertyAssignment | ts.BindingElement | ts.BinaryExpression | ts.ParameterDeclaration;
+    [AST_NODE_TYPES.AwaitExpression]: ts.AwaitExpression;
+    [AST_NODE_TYPES.BinaryExpression]: ts.BinaryExpression;
+    [AST_NODE_TYPES.BlockStatement]: ts.Block;
+    [AST_NODE_TYPES.BreakStatement]: ts.BreakStatement;
+    [AST_NODE_TYPES.CallExpression]: ts.CallExpression;
+    [AST_NODE_TYPES.CatchClause]: ts.CatchClause;
+    [AST_NODE_TYPES.ChainExpression]: ts.CallExpression | ts.PropertyAccessExpression | ts.ElementAccessExpression | ts.NonNullExpression;
+    [AST_NODE_TYPES.ClassBody]: ts.ClassDeclaration | ts.ClassExpression;
+    [AST_NODE_TYPES.ClassDeclaration]: ts.ClassDeclaration;
+    [AST_NODE_TYPES.ClassExpression]: ts.ClassExpression;
+    [AST_NODE_TYPES.ClassProperty]: ts.PropertyDeclaration;
+    [AST_NODE_TYPES.ConditionalExpression]: ts.ConditionalExpression;
+    [AST_NODE_TYPES.ContinueStatement]: ts.ContinueStatement;
+    [AST_NODE_TYPES.DebuggerStatement]: ts.DebuggerStatement;
+    [AST_NODE_TYPES.Decorator]: ts.Decorator;
+    [AST_NODE_TYPES.DoWhileStatement]: ts.DoStatement;
+    [AST_NODE_TYPES.EmptyStatement]: ts.EmptyStatement;
+    [AST_NODE_TYPES.ExportAllDeclaration]: ts.ExportDeclaration;
+    [AST_NODE_TYPES.ExportDefaultDeclaration]: ts.ExportAssignment | ts.FunctionDeclaration | ts.VariableStatement | ts.ClassDeclaration | ts.ClassExpression | ts.TypeAliasDeclaration | ts.InterfaceDeclaration | ts.EnumDeclaration | ts.ModuleDeclaration;
+    [AST_NODE_TYPES.ExportNamedDeclaration]: ts.ExportDeclaration | ts.FunctionDeclaration | ts.VariableStatement | ts.ClassDeclaration | ts.ClassExpression | ts.TypeAliasDeclaration | ts.InterfaceDeclaration | ts.EnumDeclaration | ts.ModuleDeclaration;
+    [AST_NODE_TYPES.ExportSpecifier]: ts.ExportSpecifier;
+    [AST_NODE_TYPES.ExpressionStatement]: ts.ExpressionStatement;
+    [AST_NODE_TYPES.ForInStatement]: ts.ForInStatement;
+    [AST_NODE_TYPES.ForOfStatement]: ts.ForOfStatement;
+    [AST_NODE_TYPES.ForStatement]: ts.ForStatement;
+    [AST_NODE_TYPES.FunctionDeclaration]: ts.FunctionDeclaration;
+    [AST_NODE_TYPES.FunctionExpression]: ts.FunctionExpression | ts.ConstructorDeclaration | ts.GetAccessorDeclaration | ts.SetAccessorDeclaration | ts.MethodDeclaration;
+    [AST_NODE_TYPES.Identifier]: ts.Identifier | ts.ConstructorDeclaration | ts.Token<ts.SyntaxKind.NewKeyword | ts.SyntaxKind.ImportKeyword>;
+    [AST_NODE_TYPES.IfStatement]: ts.IfStatement;
+    [AST_NODE_TYPES.ImportDeclaration]: ts.ImportDeclaration;
+    [AST_NODE_TYPES.ImportDefaultSpecifier]: ts.ImportClause;
+    [AST_NODE_TYPES.ImportExpression]: ts.CallExpression;
+    [AST_NODE_TYPES.ImportNamespaceSpecifier]: ts.NamespaceImport;
+    [AST_NODE_TYPES.ImportSpecifier]: ts.ImportSpecifier;
+    [AST_NODE_TYPES.JSXAttribute]: ts.JsxAttribute;
+    [AST_NODE_TYPES.JSXClosingElement]: ts.JsxClosingElement;
+    [AST_NODE_TYPES.JSXClosingFragment]: ts.JsxClosingFragment;
+    [AST_NODE_TYPES.JSXElement]: ts.JsxElement | ts.JsxSelfClosingElement;
+    [AST_NODE_TYPES.JSXEmptyExpression]: ts.JsxExpression;
+    [AST_NODE_TYPES.JSXExpressionContainer]: ts.JsxExpression;
+    [AST_NODE_TYPES.JSXFragment]: ts.JsxFragment;
+    [AST_NODE_TYPES.JSXIdentifier]: ts.Identifier | ts.ThisExpression;
+    [AST_NODE_TYPES.JSXOpeningElement]: ts.JsxOpeningElement | ts.JsxSelfClosingElement;
+    [AST_NODE_TYPES.JSXOpeningFragment]: ts.JsxOpeningFragment;
+    [AST_NODE_TYPES.JSXSpreadAttribute]: ts.JsxSpreadAttribute;
+    [AST_NODE_TYPES.JSXSpreadChild]: ts.JsxExpression;
+    [AST_NODE_TYPES.JSXMemberExpression]: ts.PropertyAccessExpression;
+    [AST_NODE_TYPES.JSXText]: ts.JsxText;
+    [AST_NODE_TYPES.LabeledStatement]: ts.LabeledStatement;
+    [AST_NODE_TYPES.Literal]: ts.StringLiteral | ts.NumericLiteral | ts.RegularExpressionLiteral | ts.JsxText | ts.NullLiteral | ts.BooleanLiteral | ts.BigIntLiteral;
+    [AST_NODE_TYPES.LogicalExpression]: ts.BinaryExpression;
+    [AST_NODE_TYPES.MemberExpression]: ts.PropertyAccessExpression | ts.ElementAccessExpression;
+    [AST_NODE_TYPES.MetaProperty]: ts.MetaProperty;
+    [AST_NODE_TYPES.MethodDefinition]: ts.GetAccessorDeclaration | ts.SetAccessorDeclaration | ts.MethodDeclaration | ts.ConstructorDeclaration;
+    [AST_NODE_TYPES.NewExpression]: ts.NewExpression;
+    [AST_NODE_TYPES.ObjectExpression]: ts.ObjectLiteralExpression;
+    [AST_NODE_TYPES.ObjectPattern]: ts.ObjectLiteralExpression | ts.ObjectBindingPattern;
+    [AST_NODE_TYPES.Program]: ts.SourceFile;
+    [AST_NODE_TYPES.Property]: ts.PropertyAssignment | ts.ShorthandPropertyAssignment | ts.GetAccessorDeclaration | ts.SetAccessorDeclaration | ts.MethodDeclaration | ts.BindingElement;
+    [AST_NODE_TYPES.RestElement]: ts.BindingElement | ts.SpreadAssignment | ts.SpreadElement | ts.ParameterDeclaration;
+    [AST_NODE_TYPES.ReturnStatement]: ts.ReturnStatement;
+    [AST_NODE_TYPES.SequenceExpression]: ts.BinaryExpression;
+    [AST_NODE_TYPES.SpreadElement]: ts.SpreadElement | ts.SpreadAssignment;
+    [AST_NODE_TYPES.Super]: ts.SuperExpression;
+    [AST_NODE_TYPES.SwitchCase]: ts.CaseClause | ts.DefaultClause;
+    [AST_NODE_TYPES.SwitchStatement]: ts.SwitchStatement;
+    [AST_NODE_TYPES.TaggedTemplateExpression]: ts.TaggedTemplateExpression;
+    [AST_NODE_TYPES.TemplateElement]: ts.NoSubstitutionTemplateLiteral | ts.TemplateHead | ts.TemplateMiddle | ts.TemplateTail;
+    [AST_NODE_TYPES.TemplateLiteral]: ts.NoSubstitutionTemplateLiteral | ts.TemplateExpression;
+    [AST_NODE_TYPES.ThisExpression]: ts.ThisExpression | ts.KeywordTypeNode;
+    [AST_NODE_TYPES.ThrowStatement]: ts.ThrowStatement;
+    [AST_NODE_TYPES.TryStatement]: ts.TryStatement;
+    [AST_NODE_TYPES.TSAbstractClassProperty]: ts.PropertyDeclaration;
+    [AST_NODE_TYPES.TSAbstractMethodDefinition]: ts.GetAccessorDeclaration | ts.SetAccessorDeclaration | ts.MethodDeclaration | ts.ConstructorDeclaration;
+    [AST_NODE_TYPES.TSArrayType]: ts.ArrayTypeNode;
+    [AST_NODE_TYPES.TSAsExpression]: ts.AsExpression;
+    [AST_NODE_TYPES.TSCallSignatureDeclaration]: ts.PropertySignature;
+    [AST_NODE_TYPES.TSClassImplements]: ts.ExpressionWithTypeArguments;
+    [AST_NODE_TYPES.TSConditionalType]: ts.ConditionalTypeNode;
+    [AST_NODE_TYPES.TSConstructorType]: ts.ConstructorTypeNode;
+    [AST_NODE_TYPES.TSConstructSignatureDeclaration]: ts.ConstructorTypeNode | ts.FunctionTypeNode | ts.ConstructSignatureDeclaration | ts.CallSignatureDeclaration;
+    [AST_NODE_TYPES.TSDeclareFunction]: ts.FunctionDeclaration;
+    [AST_NODE_TYPES.TSEnumDeclaration]: ts.EnumDeclaration;
+    [AST_NODE_TYPES.TSEnumMember]: ts.EnumMember;
+    [AST_NODE_TYPES.TSExportAssignment]: ts.ExportAssignment;
+    [AST_NODE_TYPES.TSExternalModuleReference]: ts.ExternalModuleReference;
+    [AST_NODE_TYPES.TSFunctionType]: ts.FunctionTypeNode;
+    [AST_NODE_TYPES.TSImportEqualsDeclaration]: ts.ImportEqualsDeclaration;
+    [AST_NODE_TYPES.TSImportType]: ts.ImportTypeNode;
+    [AST_NODE_TYPES.TSIndexedAccessType]: ts.IndexedAccessTypeNode;
+    [AST_NODE_TYPES.TSIndexSignature]: ts.IndexSignatureDeclaration;
+    [AST_NODE_TYPES.TSInferType]: ts.InferTypeNode;
+    [AST_NODE_TYPES.TSInterfaceDeclaration]: ts.InterfaceDeclaration;
+    [AST_NODE_TYPES.TSInterfaceBody]: ts.InterfaceDeclaration;
+    [AST_NODE_TYPES.TSInterfaceHeritage]: ts.ExpressionWithTypeArguments;
+    [AST_NODE_TYPES.TSIntersectionType]: ts.IntersectionTypeNode;
+    [AST_NODE_TYPES.TSLiteralType]: ts.LiteralTypeNode;
+    [AST_NODE_TYPES.TSMappedType]: ts.MappedTypeNode;
+    [AST_NODE_TYPES.TSMethodSignature]: ts.MethodSignature;
+    [AST_NODE_TYPES.TSModuleBlock]: ts.ModuleBlock;
+    [AST_NODE_TYPES.TSModuleDeclaration]: ts.ModuleDeclaration;
+    [AST_NODE_TYPES.TSNamedTupleMember]: ts.NamedTupleMember;
+    [AST_NODE_TYPES.TSNamespaceExportDeclaration]: ts.NamespaceExportDeclaration;
+    [AST_NODE_TYPES.TSNonNullExpression]: ts.NonNullExpression;
+    [AST_NODE_TYPES.TSOptionalType]: ts.OptionalTypeNode;
+    [AST_NODE_TYPES.TSParameterProperty]: ts.ParameterDeclaration;
+    [AST_NODE_TYPES.TSParenthesizedType]: ts.ParenthesizedTypeNode;
+    [AST_NODE_TYPES.TSPropertySignature]: ts.PropertySignature;
+    [AST_NODE_TYPES.TSQualifiedName]: ts.QualifiedName;
+    [AST_NODE_TYPES.TSRestType]: ts.RestTypeNode | ts.NamedTupleMember;
+    [AST_NODE_TYPES.TSThisType]: ts.ThisTypeNode;
+    [AST_NODE_TYPES.TSTupleType]: ts.TupleTypeNode;
+    [AST_NODE_TYPES.TSTemplateLiteralType]: ts.TemplateLiteralTypeNode;
+    [AST_NODE_TYPES.TSTypeAliasDeclaration]: ts.TypeAliasDeclaration;
+    [AST_NODE_TYPES.TSTypeAnnotation]: undefined;
+    [AST_NODE_TYPES.TSTypeAssertion]: ts.TypeAssertion;
+    [AST_NODE_TYPES.TSTypeLiteral]: ts.TypeLiteralNode;
+    [AST_NODE_TYPES.TSTypeOperator]: ts.TypeOperatorNode;
+    [AST_NODE_TYPES.TSTypeParameter]: ts.TypeParameterDeclaration;
+    [AST_NODE_TYPES.TSTypeParameterDeclaration]: undefined;
+    [AST_NODE_TYPES.TSTypeParameterInstantiation]: ts.TaggedTemplateExpression | ts.ImportTypeNode | ts.ExpressionWithTypeArguments | ts.TypeReferenceNode | ts.JsxOpeningElement | ts.JsxSelfClosingElement | ts.NewExpression | ts.CallExpression;
+    [AST_NODE_TYPES.TSTypePredicate]: ts.TypePredicateNode;
+    [AST_NODE_TYPES.TSTypeQuery]: ts.TypeQueryNode;
+    [AST_NODE_TYPES.TSTypeReference]: ts.TypeReferenceNode;
+    [AST_NODE_TYPES.TSUnionType]: ts.UnionTypeNode;
+    [AST_NODE_TYPES.UpdateExpression]: ts.PrefixUnaryExpression | ts.PostfixUnaryExpression;
+    [AST_NODE_TYPES.UnaryExpression]: ts.PrefixUnaryExpression | ts.PostfixUnaryExpression | ts.DeleteExpression | ts.VoidExpression | ts.TypeOfExpression;
+    [AST_NODE_TYPES.VariableDeclaration]: ts.VariableDeclarationList | ts.VariableStatement;
+    [AST_NODE_TYPES.VariableDeclarator]: ts.VariableDeclaration;
+    [AST_NODE_TYPES.WhileStatement]: ts.WhileStatement;
+    [AST_NODE_TYPES.WithStatement]: ts.WithStatement;
+    [AST_NODE_TYPES.YieldExpression]: ts.YieldExpression;
+    [AST_NODE_TYPES.TSEmptyBodyFunctionExpression]: ts.FunctionExpression | ts.ConstructorDeclaration | ts.GetAccessorDeclaration | ts.SetAccessorDeclaration | ts.MethodDeclaration;
+    [AST_NODE_TYPES.TSAbstractKeyword]: ts.Token<ts.SyntaxKind.AbstractKeyword>;
+    [AST_NODE_TYPES.TSNullKeyword]: ts.NullLiteral | ts.KeywordTypeNode;
+    [AST_NODE_TYPES.TSAnyKeyword]: ts.KeywordTypeNode;
+    [AST_NODE_TYPES.TSBigIntKeyword]: ts.KeywordTypeNode;
+    [AST_NODE_TYPES.TSBooleanKeyword]: ts.KeywordTypeNode;
+    [AST_NODE_TYPES.TSNeverKeyword]: ts.KeywordTypeNode;
+    [AST_NODE_TYPES.TSNumberKeyword]: ts.KeywordTypeNode;
+    [AST_NODE_TYPES.TSObjectKeyword]: ts.KeywordTypeNode;
+    [AST_NODE_TYPES.TSStringKeyword]: ts.KeywordTypeNode;
+    [AST_NODE_TYPES.TSSymbolKeyword]: ts.KeywordTypeNode;
+    [AST_NODE_TYPES.TSUnknownKeyword]: ts.KeywordTypeNode;
+    [AST_NODE_TYPES.TSVoidKeyword]: ts.KeywordTypeNode;
+    [AST_NODE_TYPES.TSUndefinedKeyword]: ts.KeywordTypeNode;
+    [AST_NODE_TYPES.TSAsyncKeyword]: ts.Token<ts.SyntaxKind.AsyncKeyword>;
+    [AST_NODE_TYPES.TSDeclareKeyword]: ts.Token<ts.SyntaxKind.DeclareKeyword>;
+    [AST_NODE_TYPES.TSExportKeyword]: ts.Token<ts.SyntaxKind.ExportKeyword>;
+    [AST_NODE_TYPES.TSStaticKeyword]: ts.Token<ts.SyntaxKind.StaticKeyword>;
+    [AST_NODE_TYPES.TSPublicKeyword]: ts.Token<ts.SyntaxKind.PublicKeyword>;
+    [AST_NODE_TYPES.TSPrivateKeyword]: ts.Token<ts.SyntaxKind.PrivateKeyword>;
+    [AST_NODE_TYPES.TSProtectedKeyword]: ts.Token<ts.SyntaxKind.ProtectedKeyword>;
+    [AST_NODE_TYPES.TSReadonlyKeyword]: ts.Token<ts.SyntaxKind.ReadonlyKeyword>;
+}
+/**
+ * Maps TSESTree AST Node type to the expected TypeScript AST Node type(s).
+ * This mapping is based on the internal logic of the parser.
+ */
+export declare type TSESTreeToTSNode<T extends TSESTree.Node = TSESTree.Node> = Extract<TSNode | ts.Token<ts.SyntaxKind.NewKeyword | ts.SyntaxKind.ImportKeyword>, EstreeToTsNodeTypes[T['type']]>;
+//# sourceMappingURL=estree-to-ts-node-types.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..4e1cd7138b76b0d9cd778d4f97a37129923173b1
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"estree-to-ts-node-types.d.ts","sourceRoot":"","sources":["../../src/ts-estree/estree-to-ts-node-types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a133cdbd09b6aa1b0b28f7420966ba76c53c323
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.js
@@ -0,0 +1,4 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const types_1 = require("@typescript-eslint/types");
+//# sourceMappingURL=estree-to-ts-node-types.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b48e0fd37717dcea21cd7c8a91dd8501743d7a61
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"estree-to-ts-node-types.js","sourceRoot":"","sources":["../../src/ts-estree/estree-to-ts-node-types.ts"],"names":[],"mappings":";;AAAA,oDAAoE"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..37f26a39598445669c46b5f0cca022ed20f003f9
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts
@@ -0,0 +1,4 @@
+export { AST_NODE_TYPES, AST_TOKEN_TYPES, TSESTree, } from '@typescript-eslint/types';
+export * from './ts-nodes';
+export * from './estree-to-ts-node-types';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..6a839dc66d9b7afae5a00cd95021df7847e483d2
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ts-estree/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,eAAe,EACf,QAAQ,GACT,MAAM,0BAA0B,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..7f938027bb3c9c51cf064df73c48262d607aa1f4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js
@@ -0,0 +1,21 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TSESTree = exports.AST_TOKEN_TYPES = exports.AST_NODE_TYPES = void 0;
+// for simplicity and backwards-compatibility
+var types_1 = require("@typescript-eslint/types");
+Object.defineProperty(exports, "AST_NODE_TYPES", { enumerable: true, get: function () { return types_1.AST_NODE_TYPES; } });
+Object.defineProperty(exports, "AST_TOKEN_TYPES", { enumerable: true, get: function () { return types_1.AST_TOKEN_TYPES; } });
+Object.defineProperty(exports, "TSESTree", { enumerable: true, get: function () { return types_1.TSESTree; } });
+__exportStar(require("./ts-nodes"), exports);
+__exportStar(require("./estree-to-ts-node-types"), exports);
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..5325d5dcb028cb92ba79eac3959f422b08ea3ac8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ts-estree/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,6CAA6C;AAC7C,kDAIkC;AAHhC,uGAAA,cAAc,OAAA;AACd,wGAAA,eAAe,OAAA;AACf,iGAAA,QAAQ,OAAA;AAEV,6CAA2B;AAC3B,4DAA0C"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cc622388ae3bcbbc5a05c6e06b64ab7d3a8e57fa
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.d.ts
@@ -0,0 +1,10 @@
+import * as ts from 'typescript';
+declare module 'typescript' {
+    interface NamedTupleMember extends ts.Node {
+    }
+    interface TemplateLiteralTypeNode extends ts.Node {
+    }
+}
+export declare type TSToken = ts.Token<ts.SyntaxKind>;
+export declare type TSNode = ts.Modifier | ts.Identifier | ts.QualifiedName | ts.ComputedPropertyName | ts.Decorator | ts.TypeParameterDeclaration | ts.CallSignatureDeclaration | ts.ConstructSignatureDeclaration | ts.VariableDeclaration | ts.VariableDeclarationList | ts.ParameterDeclaration | ts.BindingElement | ts.PropertySignature | ts.PropertyDeclaration | ts.PropertyAssignment | ts.ShorthandPropertyAssignment | ts.SpreadAssignment | ts.ObjectBindingPattern | ts.ArrayBindingPattern | ts.FunctionDeclaration | ts.MethodSignature | ts.MethodDeclaration | ts.ConstructorDeclaration | ts.SemicolonClassElement | ts.GetAccessorDeclaration | ts.SetAccessorDeclaration | ts.IndexSignatureDeclaration | ts.KeywordTypeNode | ts.ImportTypeNode | ts.ThisTypeNode | ts.ConstructorTypeNode | ts.FunctionTypeNode | ts.TypeReferenceNode | ts.TypePredicateNode | ts.TypeQueryNode | ts.TypeLiteralNode | ts.ArrayTypeNode | ts.NamedTupleMember | ts.TupleTypeNode | ts.OptionalTypeNode | ts.RestTypeNode | ts.UnionTypeNode | ts.IntersectionTypeNode | ts.ConditionalTypeNode | ts.InferTypeNode | ts.ParenthesizedTypeNode | ts.TypeOperatorNode | ts.IndexedAccessTypeNode | ts.MappedTypeNode | ts.LiteralTypeNode | ts.StringLiteral | ts.OmittedExpression | ts.PartiallyEmittedExpression | ts.PrefixUnaryExpression | ts.PostfixUnaryExpression | ts.NullLiteral | ts.BooleanLiteral | ts.ThisExpression | ts.SuperExpression | ts.ImportExpression | ts.DeleteExpression | ts.TypeOfExpression | ts.VoidExpression | ts.AwaitExpression | ts.YieldExpression | ts.SyntheticExpression | ts.BinaryExpression | ts.ConditionalExpression | ts.FunctionExpression | ts.ArrowFunction | ts.RegularExpressionLiteral | ts.NoSubstitutionTemplateLiteral | ts.NumericLiteral | ts.BigIntLiteral | ts.TemplateHead | ts.TemplateMiddle | ts.TemplateTail | ts.TemplateExpression | ts.TemplateSpan | ts.ParenthesizedExpression | ts.ArrayLiteralExpression | ts.SpreadElement | ts.ObjectLiteralExpression | ts.PropertyAccessExpression | ts.ElementAccessExpression | ts.CallExpression | ts.ExpressionWithTypeArguments | ts.NewExpression | ts.TaggedTemplateExpression | ts.AsExpression | ts.TypeAssertion | ts.NonNullExpression | ts.MetaProperty | ts.JsxElement | ts.JsxOpeningElement | ts.JsxSelfClosingElement | ts.JsxFragment | ts.JsxOpeningFragment | ts.JsxClosingFragment | ts.JsxAttribute | ts.JsxSpreadAttribute | ts.JsxClosingElement | ts.JsxExpression | ts.JsxText | ts.NotEmittedStatement | ts.CommaListExpression | ts.EmptyStatement | ts.DebuggerStatement | ts.MissingDeclaration | ts.Block | ts.VariableStatement | ts.ExpressionStatement | ts.IfStatement | ts.DoStatement | ts.WhileStatement | ts.ForStatement | ts.ForInStatement | ts.ForOfStatement | ts.BreakStatement | ts.ContinueStatement | ts.ReturnStatement | ts.WithStatement | ts.SwitchStatement | ts.CaseBlock | ts.CaseClause | ts.DefaultClause | ts.LabeledStatement | ts.ThrowStatement | ts.TryStatement | ts.CatchClause | ts.ClassDeclaration | ts.ClassExpression | ts.InterfaceDeclaration | ts.HeritageClause | ts.TypeAliasDeclaration | ts.EnumMember | ts.EnumDeclaration | ts.ModuleDeclaration | ts.ModuleBlock | ts.ImportEqualsDeclaration | ts.ExternalModuleReference | ts.ImportDeclaration | ts.ImportClause | ts.NamespaceImport | ts.NamespaceExportDeclaration | ts.ExportDeclaration | ts.NamedImports | ts.NamedExports | ts.ImportSpecifier | ts.ExportSpecifier | ts.ExportAssignment | ts.SourceFile | ts.Bundle | ts.InputFiles | ts.UnparsedSource | ts.JsonMinusNumericLiteral | ts.TemplateLiteralTypeNode | ts.JSDoc | ts.JSDocTypeExpression | ts.JSDocUnknownTag | ts.JSDocAugmentsTag | ts.JSDocClassTag | ts.JSDocEnumTag | ts.JSDocThisTag | ts.JSDocTemplateTag | ts.JSDocReturnTag | ts.JSDocTypeTag | ts.JSDocTypedefTag | ts.JSDocCallbackTag | ts.JSDocSignature | ts.JSDocPropertyTag | ts.JSDocParameterTag | ts.JSDocTypeLiteral | ts.JSDocFunctionType | ts.JSDocAllType | ts.JSDocUnknownType | ts.JSDocNullableType | ts.JSDocNonNullableType | ts.JSDocOptionalType | ts.JSDocVariadicType | ts.JSDocAuthorTag;
+//# sourceMappingURL=ts-nodes.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..3ef52afe1328261402406682c7e972c41e668e7c
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ts-nodes.d.ts","sourceRoot":"","sources":["../../src/ts-estree/ts-nodes.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.js
new file mode 100644
index 0000000000000000000000000000000000000000..ba99b5f136b92b070e89784cf55c28eb7621a00b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=ts-nodes.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..a4fa02c4913b4b58cb591ec9827d33649ffff398
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ts-nodes.js","sourceRoot":"","sources":["../../src/ts-estree/ts-nodes.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/version-check.d.ts b/server/node_modules/@typescript-eslint/typescript-estree/dist/version-check.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1fd68a7aa06f2899ae7bee28e3da89026ac3c2b4
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/version-check.d.ts
@@ -0,0 +1,3 @@
+declare const typescriptVersionIsAtLeast: Record<"3.7" | "3.8" | "3.9" | "4.0", boolean>;
+export { typescriptVersionIsAtLeast };
+//# sourceMappingURL=version-check.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/version-check.d.ts.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/version-check.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..ffc7335f68c848762d4d71a44161f0138126110d
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/version-check.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"AAsBA,QAAA,MAAM,0BAA0B,gDAAkC,CAAC;AAKnE,OAAO,EAAE,0BAA0B,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/version-check.js b/server/node_modules/@typescript-eslint/typescript-estree/dist/version-check.js
new file mode 100644
index 0000000000000000000000000000000000000000..811b0397ed2cf10aa715a8b4e2db47c2f4be5f19
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/version-check.js
@@ -0,0 +1,42 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.typescriptVersionIsAtLeast = void 0;
+const semver = __importStar(require("semver"));
+const ts = __importStar(require("typescript"));
+function semverCheck(version) {
+    return semver.satisfies(ts.version, `>= ${version}.0 || >= ${version}.1-rc || >= ${version}.0-beta`, {
+        includePrerelease: true,
+    });
+}
+const versions = [
+    //
+    '3.7',
+    '3.8',
+    '3.9',
+    '4.0',
+];
+const typescriptVersionIsAtLeast = {};
+exports.typescriptVersionIsAtLeast = typescriptVersionIsAtLeast;
+for (const version of versions) {
+    typescriptVersionIsAtLeast[version] = semverCheck(version);
+}
+//# sourceMappingURL=version-check.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/dist/version-check.js.map b/server/node_modules/@typescript-eslint/typescript-estree/dist/version-check.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..50620437a5a979c7cf7e07234cdcffd627b77b31
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/dist/version-check.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"version-check.js","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,+CAAiC;AAEjC,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,MAAM,CAAC,SAAS,CACrB,EAAE,CAAC,OAAO,EACV,MAAM,OAAO,YAAY,OAAO,eAAe,OAAO,SAAS,EAC/D;QACE,iBAAiB,EAAE,IAAI;KACxB,CACF,CAAC;AACJ,CAAC;AAED,MAAM,QAAQ,GAAG;IACf,EAAE;IACF,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;CACG,CAAC;AAGX,MAAM,0BAA0B,GAAG,EAA+B,CAAC;AAK1D,gEAA0B;AAJnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;IAC9B,0BAA0B,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;CAC5D"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/typescript-estree/package.json b/server/node_modules/@typescript-eslint/typescript-estree/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ca4e3c0cc8984f346733ddef32c0827c65dfae62
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/typescript-estree/package.json
@@ -0,0 +1,116 @@
+{
+  "_from": "@typescript-eslint/typescript-estree@4.11.0",
+  "_id": "@typescript-eslint/typescript-estree@4.11.0",
+  "_inBundle": false,
+  "_integrity": "sha512-eA6sT5dE5RHAFhtcC+b5WDlUIGwnO9b0yrfGa1mIOIAjqwSQCpXbLiFmKTdRbQN/xH2EZkGqqLDrKUuYOZ0+Hg==",
+  "_location": "/@typescript-eslint/typescript-estree",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "@typescript-eslint/typescript-estree@4.11.0",
+    "name": "@typescript-eslint/typescript-estree",
+    "escapedName": "@typescript-eslint%2ftypescript-estree",
+    "scope": "@typescript-eslint",
+    "rawSpec": "4.11.0",
+    "saveSpec": null,
+    "fetchSpec": "4.11.0"
+  },
+  "_requiredBy": [
+    "/@typescript-eslint/experimental-utils",
+    "/@typescript-eslint/parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.11.0.tgz",
+  "_shasum": "1144d145841e5987d61c4c845442a24b24165a4b",
+  "_spec": "@typescript-eslint/typescript-estree@4.11.0",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\@typescript-eslint\\experimental-utils",
+  "bugs": {
+    "url": "https://github.com/typescript-eslint/typescript-eslint/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@typescript-eslint/types": "4.11.0",
+    "@typescript-eslint/visitor-keys": "4.11.0",
+    "debug": "^4.1.1",
+    "globby": "^11.0.1",
+    "is-glob": "^4.0.1",
+    "lodash": "^4.17.15",
+    "semver": "^7.3.2",
+    "tsutils": "^3.17.1"
+  },
+  "deprecated": false,
+  "description": "A parser that converts TypeScript source code into an ESTree compatible form",
+  "devDependencies": {
+    "@babel/code-frame": "^7.10.4",
+    "@babel/parser": "^7.12.7",
+    "@babel/types": "^7.12.6",
+    "@types/babel__code-frame": "^7.0.2",
+    "@types/debug": "*",
+    "@types/glob": "*",
+    "@types/is-glob": "^4.0.1",
+    "@types/lodash": "*",
+    "@types/semver": "^7.1.0",
+    "@types/tmp": "^0.2.0",
+    "@typescript-eslint/shared-fixtures": "4.11.0",
+    "glob": "*",
+    "jest-specific-snapshot": "*",
+    "make-dir": "*",
+    "tmp": "^0.2.1",
+    "typescript": "*"
+  },
+  "engines": {
+    "node": "^10.12.0 || >=12.0.0"
+  },
+  "files": [
+    "dist",
+    "README.md",
+    "LICENSE"
+  ],
+  "funding": {
+    "type": "opencollective",
+    "url": "https://opencollective.com/typescript-eslint"
+  },
+  "gitHead": "e8f73e168a89ff9a84038e760a667b646ede5956",
+  "homepage": "https://github.com/typescript-eslint/typescript-eslint#readme",
+  "keywords": [
+    "ast",
+    "estree",
+    "ecmascript",
+    "javascript",
+    "typescript",
+    "parser",
+    "syntax"
+  ],
+  "license": "BSD-2-Clause",
+  "main": "dist/index.js",
+  "name": "@typescript-eslint/typescript-estree",
+  "peerDependenciesMeta": {
+    "typescript": {
+      "optional": true
+    }
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/typescript-eslint/typescript-eslint.git",
+    "directory": "packages/typescript-estree"
+  },
+  "scripts": {
+    "build": "tsc -b tsconfig.build.json",
+    "clean": "tsc -b tsconfig.build.json --clean",
+    "format": "prettier --write \"./**/*.{ts,js,json,md}\" --ignore-path ../../.prettierignore",
+    "lint": "eslint . --ext .js,.ts --ignore-path='../../.eslintignore'",
+    "postbuild": "downlevel-dts dist _ts3.4/dist",
+    "postclean": "rimraf dist",
+    "test": "jest --coverage",
+    "typecheck": "tsc -p tsconfig.json --noEmit"
+  },
+  "types": "dist/index.d.ts",
+  "typesVersions": {
+    "<3.8": {
+      "*": [
+        "_ts3.4/*"
+      ]
+    }
+  },
+  "version": "4.11.0"
+}
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/CHANGELOG.md b/server/node_modules/@typescript-eslint/visitor-keys/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..f8b4f2a6195d3f017130835c4d5281b757240c7b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/CHANGELOG.md
@@ -0,0 +1,255 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [4.11.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.10.0...v4.11.0) (2020-12-21)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [4.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.9.1...v4.10.0) (2020-12-14)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+## [4.9.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.9.0...v4.9.1) (2020-12-07)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [4.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.2...v4.9.0) (2020-11-30)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+## [4.8.2](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.1...v4.8.2) (2020-11-23)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+## [4.8.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.8.0...v4.8.1) (2020-11-17)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [4.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.7.0...v4.8.0) (2020-11-16)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [4.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.6.1...v4.7.0) (2020-11-09)
+
+
+### Features
+
+* support TS4.1 features ([#2748](https://github.com/typescript-eslint/typescript-eslint/issues/2748)) ([2be354b](https://github.com/typescript-eslint/typescript-eslint/commit/2be354bb15f9013a2da1b13a0c0836e9ef057e16)), closes [#2583](https://github.com/typescript-eslint/typescript-eslint/issues/2583)
+
+
+
+
+
+## [4.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.6.0...v4.6.1) (2020-11-02)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [4.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.5.0...v4.6.0) (2020-10-26)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [4.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.4.1...v4.5.0) (2020-10-19)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+## [4.4.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.4.0...v4.4.1) (2020-10-12)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [4.4.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.3.0...v4.4.0) (2020-10-05)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [4.3.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.2.0...v4.3.0) (2020-09-28)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [4.2.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.1.1...v4.2.0) (2020-09-21)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+## [4.1.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.1.0...v4.1.1) (2020-09-14)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [4.1.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.0.1...v4.1.0) (2020-09-07)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+## [4.0.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.0.0...v4.0.1) (2020-08-31)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [4.0.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.10.1...v4.0.0) (2020-08-31)
+
+
+### Bug Fixes
+
+* correct decorator traversal for AssignmentPattern ([#2375](https://github.com/typescript-eslint/typescript-eslint/issues/2375)) ([d738fa4](https://github.com/typescript-eslint/typescript-eslint/commit/d738fa4eff0a5c4cfc9b30b1c0502f8d1e78d7b6))
+
+
+### Features
+
+* support ESTree optional chaining representation ([#2308](https://github.com/typescript-eslint/typescript-eslint/issues/2308)) ([e9d2ab6](https://github.com/typescript-eslint/typescript-eslint/commit/e9d2ab638b6767700b52797e74b814ea059beaae))
+
+
+### BREAKING CHANGES
+
+* - Removed decorators property from several Nodes that could never semantically have them (FunctionDeclaration, TSEnumDeclaration, and TSInterfaceDeclaration)
+- Removed AST_NODE_TYPES.Import. This is a minor breaking change as the node type that used this was removed ages ago.
+
+
+
+
+
+## [3.10.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.10.0...v3.10.1) (2020-08-25)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [3.10.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.9.1...v3.10.0) (2020-08-24)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+## [3.9.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.9.0...v3.9.1) (2020-08-17)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [3.9.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.8.0...v3.9.0) (2020-08-10)
+
+
+### Features
+
+* **typescript-estree:** support TSv4 labelled tuple members ([#2378](https://github.com/typescript-eslint/typescript-eslint/issues/2378)) ([00d84ff](https://github.com/typescript-eslint/typescript-eslint/commit/00d84ffbcbe9d0ec98bdb2f2ce59959a27ce4dbe))
+
+
+
+
+
+# [3.8.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.7.1...v3.8.0) (2020-08-03)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+## [3.7.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.7.0...v3.7.1) (2020-07-27)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [3.7.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.6.1...v3.7.0) (2020-07-20)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+## [3.6.1](https://github.com/typescript-eslint/typescript-eslint/compare/v3.6.0...v3.6.1) (2020-07-13)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [3.6.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.5.0...v3.6.0) (2020-07-06)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
+# [3.5.0](https://github.com/typescript-eslint/typescript-eslint/compare/v3.4.0...v3.5.0) (2020-06-29)
+
+
+### Features
+
+* split visitor keys into their own package ([#2230](https://github.com/typescript-eslint/typescript-eslint/issues/2230)) ([689dae3](https://github.com/typescript-eslint/typescript-eslint/commit/689dae37392d527c64ae83db2a4c3e6b7fecece7))
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/LICENSE b/server/node_modules/@typescript-eslint/visitor-keys/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..7e7370143b26b5e2a826528507c7cc8df2d2eacf
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 TypeScript ESLint and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/README.md b/server/node_modules/@typescript-eslint/visitor-keys/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..839c20c4954dc7e8e8149472df4f860593eaf193
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/README.md
@@ -0,0 +1,13 @@
+<h1 align="center">TypeScript-ESTree Visitor Keys</h1>
+
+<p align="center">Visitor keys used to help traverse the TypeScript-ESTree AST</p>
+
+<p align="center">
+    <img src="https://github.com/typescript-eslint/typescript-eslint/workflows/CI/badge.svg" alt="CI" />
+    <a href="https://www.npmjs.com/package/@typescript-eslint/visitor-keys"><img src="https://img.shields.io/npm/v/@typescript-eslint/visitor-keys.svg?style=flat-square" alt="NPM Version" /></a>
+    <a href="https://www.npmjs.com/package/@typescript-eslint/visitor-keys"><img src="https://img.shields.io/npm/dm/@typescript-eslint/visitor-keys.svg?style=flat-square" alt="NPM Downloads" /></a>
+</p>
+
+## Contributing
+
+[See the contributing guide here](../../CONTRIBUTING.md)
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.d.ts b/server/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3ea365416cc75375723e55722169cbabd567c077
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.d.ts
@@ -0,0 +1,4 @@
+import { TSESTree } from '@typescript-eslint/types';
+declare const getKeys: (node: TSESTree.Node) => ReadonlyArray<string>;
+export { getKeys };
+//# sourceMappingURL=get-keys.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.d.ts.map b/server/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..499c1191a86849c18fc7d3f4943badca1b1aa6e8
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"get-keys.d.ts","sourceRoot":"","sources":["../src/get-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,QAAA,MAAM,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,KAAK,aAAa,CAAC,MAAM,CAAmB,CAAC;AAEhF,OAAO,EAAE,OAAO,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.js b/server/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.js
new file mode 100644
index 0000000000000000000000000000000000000000..309b72b959b28de9a34711a99c4606c5b2fd049b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.js
@@ -0,0 +1,7 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getKeys = void 0;
+const eslint_visitor_keys_1 = require("eslint-visitor-keys");
+const getKeys = eslint_visitor_keys_1.getKeys;
+exports.getKeys = getKeys;
+//# sourceMappingURL=get-keys.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.js.map b/server/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..4a0c0986715f59f64aec6ff22f87c907a4229a9b
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"get-keys.js","sourceRoot":"","sources":["../src/get-keys.ts"],"names":[],"mappings":";;;AACA,6DAAiE;AAEjE,MAAM,OAAO,GAAmD,6BAAe,CAAC;AAEvE,0BAAO"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/dist/index.d.ts b/server/node_modules/@typescript-eslint/visitor-keys/dist/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..895ff52b8adbfb2a0edd95b544570e746b11d1fe
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/dist/index.d.ts
@@ -0,0 +1,3 @@
+export { getKeys } from './get-keys';
+export { visitorKeys, VisitorKeys } from './visitor-keys';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/dist/index.d.ts.map b/server/node_modules/@typescript-eslint/visitor-keys/dist/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..393a70678b411cd1b42d3dee150a1295e7e6a832
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/dist/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/dist/index.js b/server/node_modules/@typescript-eslint/visitor-keys/dist/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..a5b4b62aec60acfb7b9249705706e937645d9465
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/dist/index.js
@@ -0,0 +1,8 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.visitorKeys = exports.getKeys = void 0;
+var get_keys_1 = require("./get-keys");
+Object.defineProperty(exports, "getKeys", { enumerable: true, get: function () { return get_keys_1.getKeys; } });
+var visitor_keys_1 = require("./visitor-keys");
+Object.defineProperty(exports, "visitorKeys", { enumerable: true, get: function () { return visitor_keys_1.visitorKeys; } });
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/dist/index.js.map b/server/node_modules/@typescript-eslint/visitor-keys/dist/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..5f74496faed5fe3f882ae510e2f95331334d4449
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/dist/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAAqC;AAA5B,mGAAA,OAAO,OAAA;AAChB,+CAA0D;AAAjD,2GAAA,WAAW,OAAA"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.d.ts b/server/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ceb5a2b5ac3dfd2bc207d5a46f5156fc22e9b982
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.d.ts
@@ -0,0 +1,6 @@
+interface VisitorKeys {
+    readonly [type: string]: readonly string[] | undefined;
+}
+declare const visitorKeys: VisitorKeys;
+export { visitorKeys, VisitorKeys };
+//# sourceMappingURL=visitor-keys.d.ts.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.d.ts.map b/server/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..0566e46680935015838b61f947cff6165721a167
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"visitor-keys.d.ts","sourceRoot":"","sources":["../src/visitor-keys.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACnB,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACxD;AA6ID,QAAA,MAAM,WAAW,EAAE,WAAyD,CAAC;AAE7E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.js b/server/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.js
new file mode 100644
index 0000000000000000000000000000000000000000..5fa2c9ca3077dab248403e95ae25d14ccf6ee2ea
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.js
@@ -0,0 +1,150 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.visitorKeys = void 0;
+const eslintVisitorKeys = __importStar(require("eslint-visitor-keys"));
+const additionalKeys = {
+    // ES2020
+    ImportExpression: ['source'],
+    // Additional Properties.
+    ArrayPattern: ['decorators', 'elements', 'typeAnnotation'],
+    ArrowFunctionExpression: ['typeParameters', 'params', 'returnType', 'body'],
+    AssignmentPattern: ['decorators', 'left', 'right', 'typeAnnotation'],
+    CallExpression: ['callee', 'typeParameters', 'arguments'],
+    ClassDeclaration: [
+        'decorators',
+        'id',
+        'typeParameters',
+        'superClass',
+        'superTypeParameters',
+        'implements',
+        'body',
+    ],
+    ClassExpression: [
+        'decorators',
+        'id',
+        'typeParameters',
+        'superClass',
+        'superTypeParameters',
+        'implements',
+        'body',
+    ],
+    FunctionDeclaration: ['id', 'typeParameters', 'params', 'returnType', 'body'],
+    FunctionExpression: ['id', 'typeParameters', 'params', 'returnType', 'body'],
+    Identifier: ['decorators', 'typeAnnotation'],
+    MethodDefinition: ['decorators', 'key', 'value'],
+    NewExpression: ['callee', 'typeParameters', 'arguments'],
+    ObjectPattern: ['decorators', 'properties', 'typeAnnotation'],
+    RestElement: ['decorators', 'argument', 'typeAnnotation'],
+    TaggedTemplateExpression: ['tag', 'typeParameters', 'quasi'],
+    // JSX
+    JSXOpeningElement: ['name', 'typeParameters', 'attributes'],
+    JSXClosingFragment: [],
+    JSXOpeningFragment: [],
+    JSXSpreadChild: ['expression'],
+    // Additional Nodes.
+    ClassProperty: ['decorators', 'key', 'typeAnnotation', 'value'],
+    Decorator: ['expression'],
+    // TS-prefixed nodes
+    TSAbstractClassProperty: ['decorators', 'key', 'typeAnnotation', 'value'],
+    TSAbstractKeyword: [],
+    TSAbstractMethodDefinition: ['key', 'value'],
+    TSAnyKeyword: [],
+    TSArrayType: ['elementType'],
+    TSAsExpression: ['expression', 'typeAnnotation'],
+    TSAsyncKeyword: [],
+    TSBigIntKeyword: [],
+    TSBooleanKeyword: [],
+    TSCallSignatureDeclaration: ['typeParameters', 'params', 'returnType'],
+    TSClassImplements: ['expression', 'typeParameters'],
+    TSConditionalType: ['checkType', 'extendsType', 'trueType', 'falseType'],
+    TSConstructorType: ['typeParameters', 'params', 'returnType'],
+    TSConstructSignatureDeclaration: ['typeParameters', 'params', 'returnType'],
+    TSDeclareFunction: ['id', 'typeParameters', 'params', 'returnType', 'body'],
+    TSDeclareKeyword: [],
+    TSEmptyBodyFunctionExpression: [
+        'id',
+        'typeParameters',
+        'params',
+        'returnType',
+    ],
+    TSEnumDeclaration: ['id', 'members'],
+    TSEnumMember: ['id', 'initializer'],
+    TSExportAssignment: ['expression'],
+    TSExportKeyword: [],
+    TSExternalModuleReference: ['expression'],
+    TSFunctionType: ['typeParameters', 'params', 'returnType'],
+    TSImportEqualsDeclaration: ['id', 'moduleReference'],
+    TSImportType: ['parameter', 'qualifier', 'typeParameters'],
+    TSIndexedAccessType: ['indexType', 'objectType'],
+    TSIndexSignature: ['parameters', 'typeAnnotation'],
+    TSInferType: ['typeParameter'],
+    TSInterfaceBody: ['body'],
+    TSInterfaceDeclaration: ['id', 'typeParameters', 'extends', 'body'],
+    TSInterfaceHeritage: ['expression', 'typeParameters'],
+    TSIntersectionType: ['types'],
+    TSLiteralType: ['literal'],
+    TSMappedType: ['nameType', 'typeParameter', 'typeAnnotation'],
+    TSMethodSignature: ['typeParameters', 'key', 'params', 'returnType'],
+    TSModuleBlock: ['body'],
+    TSModuleDeclaration: ['id', 'body'],
+    TSNamedTupleMember: ['elementType'],
+    TSNamespaceExportDeclaration: ['id'],
+    TSNeverKeyword: [],
+    TSNonNullExpression: ['expression'],
+    TSNullKeyword: [],
+    TSNumberKeyword: [],
+    TSObjectKeyword: [],
+    TSOptionalType: ['typeAnnotation'],
+    TSParameterProperty: ['decorators', 'parameter'],
+    TSParenthesizedType: ['typeAnnotation'],
+    TSPrivateKeyword: [],
+    TSPropertySignature: ['typeAnnotation', 'key', 'initializer'],
+    TSProtectedKeyword: [],
+    TSPublicKeyword: [],
+    TSQualifiedName: ['left', 'right'],
+    TSReadonlyKeyword: [],
+    TSRestType: ['typeAnnotation'],
+    TSStaticKeyword: [],
+    TSStringKeyword: [],
+    TSSymbolKeyword: [],
+    TSTemplateLiteralType: ['quasis', 'types'],
+    TSThisType: [],
+    TSTupleType: ['elementTypes'],
+    TSTypeAliasDeclaration: ['id', 'typeParameters', 'typeAnnotation'],
+    TSTypeAnnotation: ['typeAnnotation'],
+    TSTypeAssertion: ['typeAnnotation', 'expression'],
+    TSTypeLiteral: ['members'],
+    TSTypeOperator: ['typeAnnotation'],
+    TSTypeParameter: ['name', 'constraint', 'default'],
+    TSTypeParameterDeclaration: ['params'],
+    TSTypeParameterInstantiation: ['params'],
+    TSTypePredicate: ['typeAnnotation', 'parameterName'],
+    TSTypeQuery: ['exprName'],
+    TSTypeReference: ['typeName', 'typeParameters'],
+    TSUndefinedKeyword: [],
+    TSUnionType: ['types'],
+    TSUnknownKeyword: [],
+    TSVoidKeyword: [],
+};
+const visitorKeys = eslintVisitorKeys.unionWith(additionalKeys);
+exports.visitorKeys = visitorKeys;
+//# sourceMappingURL=visitor-keys.js.map
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.js.map b/server/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..433a6de8cf5a3ef351fada1006fb437c5841fc7f
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"visitor-keys.js","sourceRoot":"","sources":["../src/visitor-keys.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/server/node_modules/@typescript-eslint/visitor-keys/package.json b/server/node_modules/@typescript-eslint/visitor-keys/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b988758b68ffaaac8d147ca160651a0a49677a89
--- /dev/null
+++ b/server/node_modules/@typescript-eslint/visitor-keys/package.json
@@ -0,0 +1,87 @@
+{
+  "_from": "@typescript-eslint/visitor-keys@4.11.0",
+  "_id": "@typescript-eslint/visitor-keys@4.11.0",
+  "_inBundle": false,
+  "_integrity": "sha512-tRYKyY0i7cMk6v4UIOCjl1LhuepC/pc6adQqJk4Is3YcC6k46HvsV9Wl7vQoLbm9qADgeujiT7KdLrylvFIQ+A==",
+  "_location": "/@typescript-eslint/visitor-keys",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "@typescript-eslint/visitor-keys@4.11.0",
+    "name": "@typescript-eslint/visitor-keys",
+    "escapedName": "@typescript-eslint%2fvisitor-keys",
+    "scope": "@typescript-eslint",
+    "rawSpec": "4.11.0",
+    "saveSpec": null,
+    "fetchSpec": "4.11.0"
+  },
+  "_requiredBy": [
+    "/@typescript-eslint/scope-manager",
+    "/@typescript-eslint/typescript-estree"
+  ],
+  "_resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.11.0.tgz",
+  "_shasum": "906669a50f06aa744378bb84c7d5c4fdbc5b7d51",
+  "_spec": "@typescript-eslint/visitor-keys@4.11.0",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\@typescript-eslint\\scope-manager",
+  "bugs": {
+    "url": "https://github.com/typescript-eslint/typescript-eslint/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@typescript-eslint/types": "4.11.0",
+    "eslint-visitor-keys": "^2.0.0"
+  },
+  "deprecated": false,
+  "description": "Visitor keys used to help traverse the TypeScript-ESTree AST",
+  "devDependencies": {
+    "@types/eslint-visitor-keys": "^1.0.0"
+  },
+  "engines": {
+    "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+  },
+  "files": [
+    "dist",
+    "package.json",
+    "README.md",
+    "LICENSE"
+  ],
+  "funding": {
+    "type": "opencollective",
+    "url": "https://opencollective.com/typescript-eslint"
+  },
+  "gitHead": "e8f73e168a89ff9a84038e760a667b646ede5956",
+  "homepage": "https://github.com/typescript-eslint/typescript-eslint#readme",
+  "keywords": [
+    "eslint",
+    "typescript",
+    "estree"
+  ],
+  "license": "MIT",
+  "main": "dist/index.js",
+  "name": "@typescript-eslint/visitor-keys",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/typescript-eslint/typescript-eslint.git",
+    "directory": "packages/visitor-keys"
+  },
+  "scripts": {
+    "build": "tsc -b tsconfig.build.json",
+    "clean": "tsc -b tsconfig.build.json --clean",
+    "format": "prettier --write \"./**/*.{ts,js,json,md}\" --ignore-path ../../.prettierignore",
+    "lint": "eslint . --ext .js,.ts --ignore-path='../../.eslintignore'",
+    "postbuild": "downlevel-dts dist _ts3.4/dist",
+    "postclean": "rimraf dist",
+    "test": "jest --coverage",
+    "typecheck": "tsc -p tsconfig.json --noEmit"
+  },
+  "types": "dist/index.d.ts",
+  "typesVersions": {
+    "<3.8": {
+      "*": [
+        "_ts3.4/*"
+      ]
+    }
+  },
+  "version": "4.11.0"
+}
diff --git a/server/node_modules/array-union/index.d.ts b/server/node_modules/array-union/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..379fc1d2f5bd07eb8067ebb112876318faefa998
--- /dev/null
+++ b/server/node_modules/array-union/index.d.ts
@@ -0,0 +1,25 @@
+/**
+Create an array of unique values, in order, from the input arrays.
+
+@example
+```
+import arrayUnion = require('array-union');
+
+arrayUnion([1, 1, 2, 3], [2, 3]);
+//=> [1, 2, 3]
+
+arrayUnion(['foo', 'foo', 'bar']);
+//=> ['foo', 'bar']
+
+arrayUnion(['🐱', '🦄', '🐻'], ['🦄', '🌈']);
+//=> ['🐱', '🦄', '🐻', '🌈']
+
+arrayUnion(['🐱', '🦄'], ['🐻', '🦄'], ['🐶', '🌈', '🌈']);
+//=> ['🐱', '🦄', '🐻', '🐶', '🌈']
+```
+*/
+declare function arrayUnion<ArgumentsType extends readonly unknown[]>(
+	...arguments: readonly ArgumentsType[]
+): ArgumentsType;
+
+export = arrayUnion;
diff --git a/server/node_modules/array-union/index.js b/server/node_modules/array-union/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..7f85d3d193ab85d0a1e0498933241a299468118a
--- /dev/null
+++ b/server/node_modules/array-union/index.js
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = (...arguments_) => {
+	return [...new Set([].concat(...arguments_))];
+};
diff --git a/server/node_modules/array-union/license b/server/node_modules/array-union/license
new file mode 100644
index 0000000000000000000000000000000000000000..e7af2f77107d73046421ef56c4684cbfdd3c1e89
--- /dev/null
+++ b/server/node_modules/array-union/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/server/node_modules/array-union/package.json b/server/node_modules/array-union/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..544a7c2ef2eaac0692844a374639a888d4fcd5f2
--- /dev/null
+++ b/server/node_modules/array-union/package.json
@@ -0,0 +1,70 @@
+{
+  "_from": "array-union@^2.1.0",
+  "_id": "array-union@2.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+  "_location": "/array-union",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "array-union@^2.1.0",
+    "name": "array-union",
+    "escapedName": "array-union",
+    "rawSpec": "^2.1.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.1.0"
+  },
+  "_requiredBy": [
+    "/globby"
+  ],
+  "_resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+  "_shasum": "b798420adbeb1de828d84acd8a2e23d3efe85e8d",
+  "_spec": "array-union@^2.1.0",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\globby",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/array-union/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Create an array of unique values, in order, from the input arrays",
+  "devDependencies": {
+    "ava": "^1.4.1",
+    "tsd": "^0.7.2",
+    "xo": "^0.24.0"
+  },
+  "engines": {
+    "node": ">=8"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts"
+  ],
+  "homepage": "https://github.com/sindresorhus/array-union#readme",
+  "keywords": [
+    "array",
+    "set",
+    "uniq",
+    "unique",
+    "duplicate",
+    "remove",
+    "union",
+    "combine",
+    "merge"
+  ],
+  "license": "MIT",
+  "name": "array-union",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/array-union.git"
+  },
+  "scripts": {
+    "test": "xo && ava && tsd"
+  },
+  "version": "2.1.0"
+}
diff --git a/server/node_modules/array-union/readme.md b/server/node_modules/array-union/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..2474a1aed16d860b63daaff0e1e052f0634a036d
--- /dev/null
+++ b/server/node_modules/array-union/readme.md
@@ -0,0 +1,34 @@
+# array-union [![Build Status](https://travis-ci.org/sindresorhus/array-union.svg?branch=master)](https://travis-ci.org/sindresorhus/array-union)
+
+> Create an array of unique values, in order, from the input arrays
+
+
+## Install
+
+```
+$ npm install array-union
+```
+
+
+## Usage
+
+```js
+const arrayUnion = require('array-union');
+
+arrayUnion([1, 1, 2, 3], [2, 3]);
+//=> [1, 2, 3]
+
+arrayUnion(['foo', 'foo', 'bar']);
+//=> ['foo', 'bar']
+
+arrayUnion(['🐱', '🦄', '🐻'], ['🦄', '🌈']);
+//=> ['🐱', '🦄', '🐻', '🌈']
+
+arrayUnion(['🐱', '🦄'], ['🐻', '🦄'], ['🐶', '🌈', '🌈']);
+//=> ['🐱', '🦄', '🐻', '🐶', '🌈']
+```
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/server/node_modules/dir-glob/index.js b/server/node_modules/dir-glob/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c21cdf393149303fb5222a8511558fd8cc673ddb
--- /dev/null
+++ b/server/node_modules/dir-glob/index.js
@@ -0,0 +1,75 @@
+'use strict';
+const path = require('path');
+const pathType = require('path-type');
+
+const getExtensions = extensions => extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0];
+
+const getPath = (filepath, cwd) => {
+	const pth = filepath[0] === '!' ? filepath.slice(1) : filepath;
+	return path.isAbsolute(pth) ? pth : path.join(cwd, pth);
+};
+
+const addExtensions = (file, extensions) => {
+	if (path.extname(file)) {
+		return `**/${file}`;
+	}
+
+	return `**/${file}.${getExtensions(extensions)}`;
+};
+
+const getGlob = (directory, options) => {
+	if (options.files && !Array.isArray(options.files)) {
+		throw new TypeError(`Expected \`files\` to be of type \`Array\` but received type \`${typeof options.files}\``);
+	}
+
+	if (options.extensions && !Array.isArray(options.extensions)) {
+		throw new TypeError(`Expected \`extensions\` to be of type \`Array\` but received type \`${typeof options.extensions}\``);
+	}
+
+	if (options.files && options.extensions) {
+		return options.files.map(x => path.posix.join(directory, addExtensions(x, options.extensions)));
+	}
+
+	if (options.files) {
+		return options.files.map(x => path.posix.join(directory, `**/${x}`));
+	}
+
+	if (options.extensions) {
+		return [path.posix.join(directory, `**/*.${getExtensions(options.extensions)}`)];
+	}
+
+	return [path.posix.join(directory, '**')];
+};
+
+module.exports = async (input, options) => {
+	options = {
+		cwd: process.cwd(),
+		...options
+	};
+
+	if (typeof options.cwd !== 'string') {
+		throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof options.cwd}\``);
+	}
+
+	const globs = await Promise.all([].concat(input).map(async x => {
+		const isDirectory = await pathType.isDirectory(getPath(x, options.cwd));
+		return isDirectory ? getGlob(x, options) : x;
+	}));
+
+	return [].concat.apply([], globs); // eslint-disable-line prefer-spread
+};
+
+module.exports.sync = (input, options) => {
+	options = {
+		cwd: process.cwd(),
+		...options
+	};
+
+	if (typeof options.cwd !== 'string') {
+		throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof options.cwd}\``);
+	}
+
+	const globs = [].concat(input).map(x => pathType.isDirectorySync(getPath(x, options.cwd)) ? getGlob(x, options) : x);
+
+	return [].concat.apply([], globs); // eslint-disable-line prefer-spread
+};
diff --git a/server/node_modules/dir-glob/license b/server/node_modules/dir-glob/license
new file mode 100644
index 0000000000000000000000000000000000000000..db6bc32cc7c44e86102035b2fb75ba8d05123f3f
--- /dev/null
+++ b/server/node_modules/dir-glob/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Kevin Mårtensson <kevinmartensson@gmail.com> (github.com/kevva)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/server/node_modules/dir-glob/package.json b/server/node_modules/dir-glob/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..990ee3c1692e658cd1cf4d745af7fa1e7a9a84ab
--- /dev/null
+++ b/server/node_modules/dir-glob/package.json
@@ -0,0 +1,70 @@
+{
+  "_from": "dir-glob@^3.0.1",
+  "_id": "dir-glob@3.0.1",
+  "_inBundle": false,
+  "_integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+  "_location": "/dir-glob",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "dir-glob@^3.0.1",
+    "name": "dir-glob",
+    "escapedName": "dir-glob",
+    "rawSpec": "^3.0.1",
+    "saveSpec": null,
+    "fetchSpec": "^3.0.1"
+  },
+  "_requiredBy": [
+    "/globby"
+  ],
+  "_resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+  "_shasum": "56dbf73d992a4a93ba1584f4534063fd2e41717f",
+  "_spec": "dir-glob@^3.0.1",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\globby",
+  "author": {
+    "name": "Kevin Mårtensson",
+    "email": "kevinmartensson@gmail.com",
+    "url": "github.com/kevva"
+  },
+  "bugs": {
+    "url": "https://github.com/kevva/dir-glob/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "path-type": "^4.0.0"
+  },
+  "deprecated": false,
+  "description": "Convert directories to glob compatible strings",
+  "devDependencies": {
+    "ava": "^2.1.0",
+    "del": "^4.1.1",
+    "make-dir": "^3.0.0",
+    "rimraf": "^2.5.0",
+    "xo": "^0.24.0"
+  },
+  "engines": {
+    "node": ">=8"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/kevva/dir-glob#readme",
+  "keywords": [
+    "convert",
+    "directory",
+    "extensions",
+    "files",
+    "glob"
+  ],
+  "license": "MIT",
+  "name": "dir-glob",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/kevva/dir-glob.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "3.0.1"
+}
diff --git a/server/node_modules/dir-glob/readme.md b/server/node_modules/dir-glob/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..cb7313f0ab6a744a74031bcb26727008dbe5e7d2
--- /dev/null
+++ b/server/node_modules/dir-glob/readme.md
@@ -0,0 +1,76 @@
+# dir-glob [![Build Status](https://travis-ci.org/kevva/dir-glob.svg?branch=master)](https://travis-ci.org/kevva/dir-glob)
+
+> Convert directories to glob compatible strings
+
+
+## Install
+
+```
+$ npm install dir-glob
+```
+
+
+## Usage
+
+```js
+const dirGlob = require('dir-glob');
+
+(async () => {
+	console.log(await dirGlob(['index.js', 'test.js', 'fixtures']));
+	//=> ['index.js', 'test.js', 'fixtures/**']
+
+	console.log(await dirGlob(['index.js', 'inner_folder'], {cwd: 'fixtures'}));
+	//=> ['index.js', 'inner_folder/**']
+
+	console.log(await dirGlob(['lib/**', 'fixtures'], {
+		files: ['test', 'unicorn']
+		extensions: ['js']
+	}));
+	//=> ['lib/**', 'fixtures/**/test.js', 'fixtures/**/unicorn.js']
+
+	console.log(await dirGlob(['lib/**', 'fixtures'], {
+		files: ['test', 'unicorn', '*.jsx'],
+		extensions: ['js', 'png']
+	}));
+	//=> ['lib/**', 'fixtures/**/test.{js,png}', 'fixtures/**/unicorn.{js,png}', 'fixtures/**/*.jsx']
+})();
+```
+
+
+## API
+
+### dirGlob(input, options?)
+
+Returns a `Promise<string[]>` with globs.
+
+### dirGlob.sync(input, options?)
+
+Returns a `string[]` with globs.
+
+#### input
+
+Type: `string | string[]`
+
+Paths.
+
+#### options
+
+Type: `object`
+
+##### extensions
+
+Type: `string[]`
+
+Append extensions to the end of your globs.
+
+##### files
+
+Type: `string[]`
+
+Only glob for certain files.
+
+##### cwd
+
+Type: `string[]`
+
+Test in specific directory.
diff --git a/server/node_modules/eslint-plugin-vue/LICENSE b/server/node_modules/eslint-plugin-vue/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..c914149a6f845cc9614f303b651db4289b511e73
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Toru Nagashima
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/server/node_modules/eslint-plugin-vue/README.md b/server/node_modules/eslint-plugin-vue/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..c8951f0a3efca55b967329fa3bdd860db332fbb0
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/README.md
@@ -0,0 +1,57 @@
+# eslint-plugin-vue
+
+[![NPM version](https://img.shields.io/npm/v/eslint-plugin-vue.svg?style=flat)](https://npmjs.org/package/eslint-plugin-vue)
+[![NPM downloads](https://img.shields.io/npm/dm/eslint-plugin-vue.svg?style=flat)](https://npmjs.org/package/eslint-plugin-vue)
+[![CircleCI](https://img.shields.io/circleci/project/github/vuejs/eslint-plugin-vue/master.svg?style=flat)](https://circleci.com/gh/vuejs/eslint-plugin-vue)
+[![License](https://img.shields.io/github/license/vuejs/eslint-plugin-vue.svg?style=flat)](https://github.com/vuejs/eslint-plugin-vue/blob/master/LICENSE.md)
+
+> Official ESLint plugin for Vue.js
+
+## :book: Documentation
+
+See [the official website](https://eslint.vuejs.org).
+
+## :anchor: Versioning Policy
+
+This plugin is following [Semantic Versioning](https://semver.org/) and [ESLint's Semantic Versioning Policy](https://github.com/eslint/eslint#semantic-versioning-policy).
+
+## :newspaper: Changelog
+
+This project uses [GitHub Releases](https://github.com/vuejs/eslint-plugin-vue/releases).
+
+## :beers: Contribution Guide
+
+Contribution is welcome!
+
+See [The ESLint Vue Plugin Developer Guide](https://eslint.vuejs.org/developer-guide/).
+
+### Working with Rules
+
+Before you start writing a new rule, please read [the official ESLint guide](https://eslint.org/docs/developer-guide/working-with-rules).
+
+Next, in order to get an idea how does the AST of the code that you want to check looks like, use the [astexplorer.net].
+The [astexplorer.net] is a great tool to inspect ASTs, also Vue templates are supported.
+
+After opening [astexplorer.net], select `Vue` as the syntax and `vue-eslint-parser` as the parser.
+
+[astexplorer.net]: https://astexplorer.net/
+
+Since single file components in Vue are not plain JavaScript, the default parser couldn't be used, so a new one was introduced. `vue-eslint-parser` generates enhanced AST with nodes that represent specific parts of the template syntax, as well as what's inside the `<script>` tag.
+
+To know more about certain nodes in produced ASTs, go here:
+- [ESTree docs](https://github.com/estree/estree)
+- [vue-eslint-parser AST docs](https://github.com/vuejs/vue-eslint-parser/blob/master/docs/ast.md)
+
+The `vue-eslint-parser` provides a few useful parser services that help traverse the produced AST and access tokens of the template:
+- `context.parserServices.defineTemplateBodyVisitor(visitor, scriptVisitor)`
+- `context.parserServices.getTemplateBodyTokenStore()`
+
+Check out [an example rule](https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/mustache-interpolation-spacing.js) to get a better understanding of how these work.
+
+Please be aware that regarding what kind of code examples you'll write in tests, you'll have to accordingly set up the parser in `RuleTester` (you can do it on a per test case basis). See an example [here](https://github.com/vuejs/eslint-plugin-vue/blob/master/tests/lib/rules/attribute-hyphenation.js#L19).
+
+If you'll stuck, remember there are plenty of rules you can learn from already. If you can't find the right solution, don't hesitate to reach out in [issues](https://github.com/vuejs/eslint-plugin-vue/issues) – we're happy to help!
+
+## :lock: License
+
+See the [LICENSE](LICENSE) file for license rights and limitations (MIT).
diff --git a/server/node_modules/eslint-plugin-vue/lib/configs/base.js b/server/node_modules/eslint-plugin-vue/lib/configs/base.js
new file mode 100644
index 0000000000000000000000000000000000000000..eb129643fbb5a2c67862651b679aa5fe67d5b09d
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/configs/base.js
@@ -0,0 +1,22 @@
+/*
+ * IMPORTANT!
+ * This file has been automatically generated,
+ * in order to update it's content execute "npm run update"
+ */
+module.exports = {
+  parser: require.resolve('vue-eslint-parser'),
+  parserOptions: {
+    ecmaVersion: 2020,
+    sourceType: 'module'
+  },
+  env: {
+    browser: true,
+    es6: true
+  },
+  plugins: ['vue'],
+  rules: {
+    'vue/comment-directive': 'error',
+    'vue/experimental-script-setup-vars': 'error',
+    'vue/jsx-uses-vars': 'error'
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/configs/essential.js b/server/node_modules/eslint-plugin-vue/lib/configs/essential.js
new file mode 100644
index 0000000000000000000000000000000000000000..dca31cd2ed3dbb9543fa12c0ba407167c683cc8e
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/configs/essential.js
@@ -0,0 +1,52 @@
+/*
+ * IMPORTANT!
+ * This file has been automatically generated,
+ * in order to update it's content execute "npm run update"
+ */
+module.exports = {
+  extends: require.resolve('./base'),
+  rules: {
+    'vue/no-arrow-functions-in-watch': 'error',
+    'vue/no-async-in-computed-properties': 'error',
+    'vue/no-custom-modifiers-on-v-model': 'error',
+    'vue/no-dupe-keys': 'error',
+    'vue/no-dupe-v-else-if': 'error',
+    'vue/no-duplicate-attributes': 'error',
+    'vue/no-multiple-template-root': 'error',
+    'vue/no-mutating-props': 'error',
+    'vue/no-parsing-error': 'error',
+    'vue/no-reserved-keys': 'error',
+    'vue/no-shared-component-data': 'error',
+    'vue/no-side-effects-in-computed-properties': 'error',
+    'vue/no-template-key': 'error',
+    'vue/no-textarea-mustache': 'error',
+    'vue/no-unused-components': 'error',
+    'vue/no-unused-vars': 'error',
+    'vue/no-use-v-if-with-v-for': 'error',
+    'vue/no-v-for-template-key': 'error',
+    'vue/no-v-model-argument': 'error',
+    'vue/require-component-is': 'error',
+    'vue/require-prop-type-constructor': 'error',
+    'vue/require-render-return': 'error',
+    'vue/require-v-for-key': 'error',
+    'vue/require-valid-default-prop': 'error',
+    'vue/return-in-computed-property': 'error',
+    'vue/use-v-on-exact': 'error',
+    'vue/valid-template-root': 'error',
+    'vue/valid-v-bind-sync': 'error',
+    'vue/valid-v-bind': 'error',
+    'vue/valid-v-cloak': 'error',
+    'vue/valid-v-else-if': 'error',
+    'vue/valid-v-else': 'error',
+    'vue/valid-v-for': 'error',
+    'vue/valid-v-html': 'error',
+    'vue/valid-v-if': 'error',
+    'vue/valid-v-model': 'error',
+    'vue/valid-v-on': 'error',
+    'vue/valid-v-once': 'error',
+    'vue/valid-v-pre': 'error',
+    'vue/valid-v-show': 'error',
+    'vue/valid-v-slot': 'error',
+    'vue/valid-v-text': 'error'
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/configs/no-layout-rules.js b/server/node_modules/eslint-plugin-vue/lib/configs/no-layout-rules.js
new file mode 100644
index 0000000000000000000000000000000000000000..b7d33e0c1562c69899216fcd6e058a9cfdc13ffb
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/configs/no-layout-rules.js
@@ -0,0 +1,50 @@
+/*
+ * IMPORTANT!
+ * This file has been automatically generated,
+ * in order to update it's content execute "npm run update"
+ */
+module.exports = {
+  rules: {
+    'vue/array-bracket-newline': 'off',
+    'vue/array-bracket-spacing': 'off',
+    'vue/arrow-spacing': 'off',
+    'vue/block-spacing': 'off',
+    'vue/block-tag-newline': 'off',
+    'vue/brace-style': 'off',
+    'vue/comma-dangle': 'off',
+    'vue/comma-spacing': 'off',
+    'vue/comma-style': 'off',
+    'vue/dot-location': 'off',
+    'vue/func-call-spacing': 'off',
+    'vue/html-closing-bracket-newline': 'off',
+    'vue/html-closing-bracket-spacing': 'off',
+    'vue/html-comment-content-newline': 'off',
+    'vue/html-comment-content-spacing': 'off',
+    'vue/html-comment-indent': 'off',
+    'vue/html-indent': 'off',
+    'vue/html-quotes': 'off',
+    'vue/html-self-closing': 'off',
+    'vue/key-spacing': 'off',
+    'vue/keyword-spacing': 'off',
+    'vue/max-attributes-per-line': 'off',
+    'vue/max-len': 'off',
+    'vue/multiline-html-element-content-newline': 'off',
+    'vue/mustache-interpolation-spacing': 'off',
+    'vue/new-line-between-multi-line-property': 'off',
+    'vue/no-extra-parens': 'off',
+    'vue/no-multi-spaces': 'off',
+    'vue/no-spaces-around-equal-signs-in-attribute': 'off',
+    'vue/object-curly-newline': 'off',
+    'vue/object-curly-spacing': 'off',
+    'vue/object-property-newline': 'off',
+    'vue/operator-linebreak': 'off',
+    'vue/padding-line-between-blocks': 'off',
+    'vue/script-indent': 'off',
+    'vue/singleline-html-element-content-newline': 'off',
+    'vue/space-in-parens': 'off',
+    'vue/space-infix-ops': 'off',
+    'vue/space-unary-ops': 'off',
+    'vue/template-curly-spacing': 'off',
+    'vue/v-for-delimiter-style': 'off'
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/configs/recommended.js b/server/node_modules/eslint-plugin-vue/lib/configs/recommended.js
new file mode 100644
index 0000000000000000000000000000000000000000..61781f754aa51174148dbe0f5f6c111550fb98c9
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/configs/recommended.js
@@ -0,0 +1,17 @@
+/*
+ * IMPORTANT!
+ * This file has been automatically generated,
+ * in order to update it's content execute "npm run update"
+ */
+module.exports = {
+  extends: require.resolve('./strongly-recommended'),
+  rules: {
+    'vue/attributes-order': 'warn',
+    'vue/component-tags-order': 'warn',
+    'vue/no-lone-template': 'warn',
+    'vue/no-multiple-slot-args': 'warn',
+    'vue/no-v-html': 'warn',
+    'vue/order-in-components': 'warn',
+    'vue/this-in-template': 'warn'
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/configs/strongly-recommended.js b/server/node_modules/eslint-plugin-vue/lib/configs/strongly-recommended.js
new file mode 100644
index 0000000000000000000000000000000000000000..0d3d41246b1304502a363e64360c7605084fe1f8
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/configs/strongly-recommended.js
@@ -0,0 +1,32 @@
+/*
+ * IMPORTANT!
+ * This file has been automatically generated,
+ * in order to update it's content execute "npm run update"
+ */
+module.exports = {
+  extends: require.resolve('./essential'),
+  rules: {
+    'vue/attribute-hyphenation': 'warn',
+    'vue/component-definition-name-casing': 'warn',
+    'vue/html-closing-bracket-newline': 'warn',
+    'vue/html-closing-bracket-spacing': 'warn',
+    'vue/html-end-tags': 'warn',
+    'vue/html-indent': 'warn',
+    'vue/html-quotes': 'warn',
+    'vue/html-self-closing': 'warn',
+    'vue/max-attributes-per-line': 'warn',
+    'vue/multiline-html-element-content-newline': 'warn',
+    'vue/mustache-interpolation-spacing': 'warn',
+    'vue/no-multi-spaces': 'warn',
+    'vue/no-spaces-around-equal-signs-in-attribute': 'warn',
+    'vue/no-template-shadow': 'warn',
+    'vue/one-component-per-file': 'warn',
+    'vue/prop-name-casing': 'warn',
+    'vue/require-default-prop': 'warn',
+    'vue/require-prop-types': 'warn',
+    'vue/singleline-html-element-content-newline': 'warn',
+    'vue/v-bind-style': 'warn',
+    'vue/v-on-style': 'warn',
+    'vue/v-slot-style': 'warn'
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/configs/vue3-essential.js b/server/node_modules/eslint-plugin-vue/lib/configs/vue3-essential.js
new file mode 100644
index 0000000000000000000000000000000000000000..802cb62ed357e89c8a9633c1d678e9bec3e41176
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/configs/vue3-essential.js
@@ -0,0 +1,73 @@
+/*
+ * IMPORTANT!
+ * This file has been automatically generated,
+ * in order to update it's content execute "npm run update"
+ */
+module.exports = {
+  extends: require.resolve('./base'),
+  rules: {
+    'vue/no-arrow-functions-in-watch': 'error',
+    'vue/no-async-in-computed-properties': 'error',
+    'vue/no-deprecated-data-object-declaration': 'error',
+    'vue/no-deprecated-destroyed-lifecycle': 'error',
+    'vue/no-deprecated-dollar-listeners-api': 'error',
+    'vue/no-deprecated-dollar-scopedslots-api': 'error',
+    'vue/no-deprecated-events-api': 'error',
+    'vue/no-deprecated-filter': 'error',
+    'vue/no-deprecated-functional-template': 'error',
+    'vue/no-deprecated-html-element-is': 'error',
+    'vue/no-deprecated-inline-template': 'error',
+    'vue/no-deprecated-props-default-this': 'error',
+    'vue/no-deprecated-scope-attribute': 'error',
+    'vue/no-deprecated-slot-attribute': 'error',
+    'vue/no-deprecated-slot-scope-attribute': 'error',
+    'vue/no-deprecated-v-bind-sync': 'error',
+    'vue/no-deprecated-v-on-native-modifier': 'error',
+    'vue/no-deprecated-v-on-number-modifiers': 'error',
+    'vue/no-deprecated-vue-config-keycodes': 'error',
+    'vue/no-dupe-keys': 'error',
+    'vue/no-dupe-v-else-if': 'error',
+    'vue/no-duplicate-attributes': 'error',
+    'vue/no-lifecycle-after-await': 'error',
+    'vue/no-mutating-props': 'error',
+    'vue/no-parsing-error': 'error',
+    'vue/no-ref-as-operand': 'error',
+    'vue/no-reserved-keys': 'error',
+    'vue/no-setup-props-destructure': 'error',
+    'vue/no-shared-component-data': 'error',
+    'vue/no-side-effects-in-computed-properties': 'error',
+    'vue/no-template-key': 'error',
+    'vue/no-textarea-mustache': 'error',
+    'vue/no-unused-components': 'error',
+    'vue/no-unused-vars': 'error',
+    'vue/no-use-v-if-with-v-for': 'error',
+    'vue/no-v-for-template-key-on-child': 'error',
+    'vue/no-watch-after-await': 'error',
+    'vue/require-component-is': 'error',
+    'vue/require-prop-type-constructor': 'error',
+    'vue/require-render-return': 'error',
+    'vue/require-slots-as-functions': 'error',
+    'vue/require-toggle-inside-transition': 'error',
+    'vue/require-v-for-key': 'error',
+    'vue/require-valid-default-prop': 'error',
+    'vue/return-in-computed-property': 'error',
+    'vue/return-in-emits-validator': 'error',
+    'vue/use-v-on-exact': 'error',
+    'vue/valid-template-root': 'error',
+    'vue/valid-v-bind': 'error',
+    'vue/valid-v-cloak': 'error',
+    'vue/valid-v-else-if': 'error',
+    'vue/valid-v-else': 'error',
+    'vue/valid-v-for': 'error',
+    'vue/valid-v-html': 'error',
+    'vue/valid-v-if': 'error',
+    'vue/valid-v-is': 'error',
+    'vue/valid-v-model': 'error',
+    'vue/valid-v-on': 'error',
+    'vue/valid-v-once': 'error',
+    'vue/valid-v-pre': 'error',
+    'vue/valid-v-show': 'error',
+    'vue/valid-v-slot': 'error',
+    'vue/valid-v-text': 'error'
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/configs/vue3-recommended.js b/server/node_modules/eslint-plugin-vue/lib/configs/vue3-recommended.js
new file mode 100644
index 0000000000000000000000000000000000000000..452703dcba7eabc73e21cbd563246cc6497ecd12
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/configs/vue3-recommended.js
@@ -0,0 +1,17 @@
+/*
+ * IMPORTANT!
+ * This file has been automatically generated,
+ * in order to update it's content execute "npm run update"
+ */
+module.exports = {
+  extends: require.resolve('./vue3-strongly-recommended'),
+  rules: {
+    'vue/attributes-order': 'warn',
+    'vue/component-tags-order': 'warn',
+    'vue/no-lone-template': 'warn',
+    'vue/no-multiple-slot-args': 'warn',
+    'vue/no-v-html': 'warn',
+    'vue/order-in-components': 'warn',
+    'vue/this-in-template': 'warn'
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/configs/vue3-strongly-recommended.js b/server/node_modules/eslint-plugin-vue/lib/configs/vue3-strongly-recommended.js
new file mode 100644
index 0000000000000000000000000000000000000000..9adfcd7c746a1f0024a3c5a30bb9c88d1082e98f
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/configs/vue3-strongly-recommended.js
@@ -0,0 +1,33 @@
+/*
+ * IMPORTANT!
+ * This file has been automatically generated,
+ * in order to update it's content execute "npm run update"
+ */
+module.exports = {
+  extends: require.resolve('./vue3-essential'),
+  rules: {
+    'vue/attribute-hyphenation': 'warn',
+    'vue/component-definition-name-casing': 'warn',
+    'vue/html-closing-bracket-newline': 'warn',
+    'vue/html-closing-bracket-spacing': 'warn',
+    'vue/html-end-tags': 'warn',
+    'vue/html-indent': 'warn',
+    'vue/html-quotes': 'warn',
+    'vue/html-self-closing': 'warn',
+    'vue/max-attributes-per-line': 'warn',
+    'vue/multiline-html-element-content-newline': 'warn',
+    'vue/mustache-interpolation-spacing': 'warn',
+    'vue/no-multi-spaces': 'warn',
+    'vue/no-spaces-around-equal-signs-in-attribute': 'warn',
+    'vue/no-template-shadow': 'warn',
+    'vue/one-component-per-file': 'warn',
+    'vue/prop-name-casing': 'warn',
+    'vue/require-default-prop': 'warn',
+    'vue/require-explicit-emits': 'warn',
+    'vue/require-prop-types': 'warn',
+    'vue/singleline-html-element-content-newline': 'warn',
+    'vue/v-bind-style': 'warn',
+    'vue/v-on-style': 'warn',
+    'vue/v-slot-style': 'warn'
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/index.js b/server/node_modules/eslint-plugin-vue/lib/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..95ffd1dd6b044e676575ff2fd871fe61fa35365b
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/index.js
@@ -0,0 +1,193 @@
+/*
+ * IMPORTANT!
+ * This file has been automatically generated,
+ * in order to update it's content execute "npm run update"
+ */
+'use strict'
+
+module.exports = {
+  rules: {
+    'array-bracket-newline': require('./rules/array-bracket-newline'),
+    'array-bracket-spacing': require('./rules/array-bracket-spacing'),
+    'arrow-spacing': require('./rules/arrow-spacing'),
+    'attribute-hyphenation': require('./rules/attribute-hyphenation'),
+    'attributes-order': require('./rules/attributes-order'),
+    'block-spacing': require('./rules/block-spacing'),
+    'block-tag-newline': require('./rules/block-tag-newline'),
+    'brace-style': require('./rules/brace-style'),
+    camelcase: require('./rules/camelcase'),
+    'comma-dangle': require('./rules/comma-dangle'),
+    'comma-spacing': require('./rules/comma-spacing'),
+    'comma-style': require('./rules/comma-style'),
+    'comment-directive': require('./rules/comment-directive'),
+    'component-definition-name-casing': require('./rules/component-definition-name-casing'),
+    'component-name-in-template-casing': require('./rules/component-name-in-template-casing'),
+    'component-tags-order': require('./rules/component-tags-order'),
+    'custom-event-name-casing': require('./rules/custom-event-name-casing'),
+    'dot-location': require('./rules/dot-location'),
+    'dot-notation': require('./rules/dot-notation'),
+    eqeqeq: require('./rules/eqeqeq'),
+    'experimental-script-setup-vars': require('./rules/experimental-script-setup-vars'),
+    'func-call-spacing': require('./rules/func-call-spacing'),
+    'html-closing-bracket-newline': require('./rules/html-closing-bracket-newline'),
+    'html-closing-bracket-spacing': require('./rules/html-closing-bracket-spacing'),
+    'html-comment-content-newline': require('./rules/html-comment-content-newline'),
+    'html-comment-content-spacing': require('./rules/html-comment-content-spacing'),
+    'html-comment-indent': require('./rules/html-comment-indent'),
+    'html-end-tags': require('./rules/html-end-tags'),
+    'html-indent': require('./rules/html-indent'),
+    'html-quotes': require('./rules/html-quotes'),
+    'html-self-closing': require('./rules/html-self-closing'),
+    'jsx-uses-vars': require('./rules/jsx-uses-vars'),
+    'key-spacing': require('./rules/key-spacing'),
+    'keyword-spacing': require('./rules/keyword-spacing'),
+    'match-component-file-name': require('./rules/match-component-file-name'),
+    'max-attributes-per-line': require('./rules/max-attributes-per-line'),
+    'max-len': require('./rules/max-len'),
+    'multiline-html-element-content-newline': require('./rules/multiline-html-element-content-newline'),
+    'mustache-interpolation-spacing': require('./rules/mustache-interpolation-spacing'),
+    'name-property-casing': require('./rules/name-property-casing'),
+    'new-line-between-multi-line-property': require('./rules/new-line-between-multi-line-property'),
+    'no-arrow-functions-in-watch': require('./rules/no-arrow-functions-in-watch'),
+    'no-async-in-computed-properties': require('./rules/no-async-in-computed-properties'),
+    'no-bare-strings-in-template': require('./rules/no-bare-strings-in-template'),
+    'no-boolean-default': require('./rules/no-boolean-default'),
+    'no-confusing-v-for-v-if': require('./rules/no-confusing-v-for-v-if'),
+    'no-custom-modifiers-on-v-model': require('./rules/no-custom-modifiers-on-v-model'),
+    'no-deprecated-data-object-declaration': require('./rules/no-deprecated-data-object-declaration'),
+    'no-deprecated-destroyed-lifecycle': require('./rules/no-deprecated-destroyed-lifecycle'),
+    'no-deprecated-dollar-listeners-api': require('./rules/no-deprecated-dollar-listeners-api'),
+    'no-deprecated-dollar-scopedslots-api': require('./rules/no-deprecated-dollar-scopedslots-api'),
+    'no-deprecated-events-api': require('./rules/no-deprecated-events-api'),
+    'no-deprecated-filter': require('./rules/no-deprecated-filter'),
+    'no-deprecated-functional-template': require('./rules/no-deprecated-functional-template'),
+    'no-deprecated-html-element-is': require('./rules/no-deprecated-html-element-is'),
+    'no-deprecated-inline-template': require('./rules/no-deprecated-inline-template'),
+    'no-deprecated-props-default-this': require('./rules/no-deprecated-props-default-this'),
+    'no-deprecated-scope-attribute': require('./rules/no-deprecated-scope-attribute'),
+    'no-deprecated-slot-attribute': require('./rules/no-deprecated-slot-attribute'),
+    'no-deprecated-slot-scope-attribute': require('./rules/no-deprecated-slot-scope-attribute'),
+    'no-deprecated-v-bind-sync': require('./rules/no-deprecated-v-bind-sync'),
+    'no-deprecated-v-on-native-modifier': require('./rules/no-deprecated-v-on-native-modifier'),
+    'no-deprecated-v-on-number-modifiers': require('./rules/no-deprecated-v-on-number-modifiers'),
+    'no-deprecated-vue-config-keycodes': require('./rules/no-deprecated-vue-config-keycodes'),
+    'no-dupe-keys': require('./rules/no-dupe-keys'),
+    'no-dupe-v-else-if': require('./rules/no-dupe-v-else-if'),
+    'no-duplicate-attr-inheritance': require('./rules/no-duplicate-attr-inheritance'),
+    'no-duplicate-attributes': require('./rules/no-duplicate-attributes'),
+    'no-empty-component-block': require('./rules/no-empty-component-block'),
+    'no-empty-pattern': require('./rules/no-empty-pattern'),
+    'no-extra-parens': require('./rules/no-extra-parens'),
+    'no-irregular-whitespace': require('./rules/no-irregular-whitespace'),
+    'no-lifecycle-after-await': require('./rules/no-lifecycle-after-await'),
+    'no-lone-template': require('./rules/no-lone-template'),
+    'no-multi-spaces': require('./rules/no-multi-spaces'),
+    'no-multiple-objects-in-class': require('./rules/no-multiple-objects-in-class'),
+    'no-multiple-slot-args': require('./rules/no-multiple-slot-args'),
+    'no-multiple-template-root': require('./rules/no-multiple-template-root'),
+    'no-mutating-props': require('./rules/no-mutating-props'),
+    'no-parsing-error': require('./rules/no-parsing-error'),
+    'no-potential-component-option-typo': require('./rules/no-potential-component-option-typo'),
+    'no-ref-as-operand': require('./rules/no-ref-as-operand'),
+    'no-reserved-component-names': require('./rules/no-reserved-component-names'),
+    'no-reserved-keys': require('./rules/no-reserved-keys'),
+    'no-restricted-component-options': require('./rules/no-restricted-component-options'),
+    'no-restricted-custom-event': require('./rules/no-restricted-custom-event'),
+    'no-restricted-props': require('./rules/no-restricted-props'),
+    'no-restricted-static-attribute': require('./rules/no-restricted-static-attribute'),
+    'no-restricted-syntax': require('./rules/no-restricted-syntax'),
+    'no-restricted-v-bind': require('./rules/no-restricted-v-bind'),
+    'no-setup-props-destructure': require('./rules/no-setup-props-destructure'),
+    'no-shared-component-data': require('./rules/no-shared-component-data'),
+    'no-side-effects-in-computed-properties': require('./rules/no-side-effects-in-computed-properties'),
+    'no-spaces-around-equal-signs-in-attribute': require('./rules/no-spaces-around-equal-signs-in-attribute'),
+    'no-sparse-arrays': require('./rules/no-sparse-arrays'),
+    'no-static-inline-styles': require('./rules/no-static-inline-styles'),
+    'no-template-key': require('./rules/no-template-key'),
+    'no-template-shadow': require('./rules/no-template-shadow'),
+    'no-template-target-blank': require('./rules/no-template-target-blank'),
+    'no-textarea-mustache': require('./rules/no-textarea-mustache'),
+    'no-unregistered-components': require('./rules/no-unregistered-components'),
+    'no-unsupported-features': require('./rules/no-unsupported-features'),
+    'no-unused-components': require('./rules/no-unused-components'),
+    'no-unused-properties': require('./rules/no-unused-properties'),
+    'no-unused-vars': require('./rules/no-unused-vars'),
+    'no-use-v-if-with-v-for': require('./rules/no-use-v-if-with-v-for'),
+    'no-useless-concat': require('./rules/no-useless-concat'),
+    'no-useless-mustaches': require('./rules/no-useless-mustaches'),
+    'no-useless-v-bind': require('./rules/no-useless-v-bind'),
+    'no-v-for-template-key-on-child': require('./rules/no-v-for-template-key-on-child'),
+    'no-v-for-template-key': require('./rules/no-v-for-template-key'),
+    'no-v-html': require('./rules/no-v-html'),
+    'no-v-model-argument': require('./rules/no-v-model-argument'),
+    'no-watch-after-await': require('./rules/no-watch-after-await'),
+    'object-curly-newline': require('./rules/object-curly-newline'),
+    'object-curly-spacing': require('./rules/object-curly-spacing'),
+    'object-property-newline': require('./rules/object-property-newline'),
+    'one-component-per-file': require('./rules/one-component-per-file'),
+    'operator-linebreak': require('./rules/operator-linebreak'),
+    'order-in-components': require('./rules/order-in-components'),
+    'padding-line-between-blocks': require('./rules/padding-line-between-blocks'),
+    'prefer-template': require('./rules/prefer-template'),
+    'prop-name-casing': require('./rules/prop-name-casing'),
+    'require-component-is': require('./rules/require-component-is'),
+    'require-default-prop': require('./rules/require-default-prop'),
+    'require-direct-export': require('./rules/require-direct-export'),
+    'require-explicit-emits': require('./rules/require-explicit-emits'),
+    'require-name-property': require('./rules/require-name-property'),
+    'require-prop-type-constructor': require('./rules/require-prop-type-constructor'),
+    'require-prop-types': require('./rules/require-prop-types'),
+    'require-render-return': require('./rules/require-render-return'),
+    'require-slots-as-functions': require('./rules/require-slots-as-functions'),
+    'require-toggle-inside-transition': require('./rules/require-toggle-inside-transition'),
+    'require-v-for-key': require('./rules/require-v-for-key'),
+    'require-valid-default-prop': require('./rules/require-valid-default-prop'),
+    'return-in-computed-property': require('./rules/return-in-computed-property'),
+    'return-in-emits-validator': require('./rules/return-in-emits-validator'),
+    'script-indent': require('./rules/script-indent'),
+    'singleline-html-element-content-newline': require('./rules/singleline-html-element-content-newline'),
+    'sort-keys': require('./rules/sort-keys'),
+    'space-in-parens': require('./rules/space-in-parens'),
+    'space-infix-ops': require('./rules/space-infix-ops'),
+    'space-unary-ops': require('./rules/space-unary-ops'),
+    'static-class-names-order': require('./rules/static-class-names-order'),
+    'template-curly-spacing': require('./rules/template-curly-spacing'),
+    'this-in-template': require('./rules/this-in-template'),
+    'use-v-on-exact': require('./rules/use-v-on-exact'),
+    'v-bind-style': require('./rules/v-bind-style'),
+    'v-for-delimiter-style': require('./rules/v-for-delimiter-style'),
+    'v-on-function-call': require('./rules/v-on-function-call'),
+    'v-on-style': require('./rules/v-on-style'),
+    'v-slot-style': require('./rules/v-slot-style'),
+    'valid-template-root': require('./rules/valid-template-root'),
+    'valid-v-bind-sync': require('./rules/valid-v-bind-sync'),
+    'valid-v-bind': require('./rules/valid-v-bind'),
+    'valid-v-cloak': require('./rules/valid-v-cloak'),
+    'valid-v-else-if': require('./rules/valid-v-else-if'),
+    'valid-v-else': require('./rules/valid-v-else'),
+    'valid-v-for': require('./rules/valid-v-for'),
+    'valid-v-html': require('./rules/valid-v-html'),
+    'valid-v-if': require('./rules/valid-v-if'),
+    'valid-v-is': require('./rules/valid-v-is'),
+    'valid-v-model': require('./rules/valid-v-model'),
+    'valid-v-on': require('./rules/valid-v-on'),
+    'valid-v-once': require('./rules/valid-v-once'),
+    'valid-v-pre': require('./rules/valid-v-pre'),
+    'valid-v-show': require('./rules/valid-v-show'),
+    'valid-v-slot': require('./rules/valid-v-slot'),
+    'valid-v-text': require('./rules/valid-v-text')
+  },
+  configs: {
+    base: require('./configs/base'),
+    essential: require('./configs/essential'),
+    'no-layout-rules': require('./configs/no-layout-rules'),
+    recommended: require('./configs/recommended'),
+    'strongly-recommended': require('./configs/strongly-recommended'),
+    'vue3-essential': require('./configs/vue3-essential'),
+    'vue3-recommended': require('./configs/vue3-recommended'),
+    'vue3-strongly-recommended': require('./configs/vue3-strongly-recommended')
+  },
+  processors: {
+    '.vue': require('./processor')
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/processor.js b/server/node_modules/eslint-plugin-vue/lib/processor.js
new file mode 100644
index 0000000000000000000000000000000000000000..81ab947841086210295d9f38d52566d7abf68d6e
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/processor.js
@@ -0,0 +1,165 @@
+/**
+ * @author Toru Nagashima <https://github.com/mysticatea>
+ */
+'use strict'
+
+/**
+ * @typedef {import('eslint').Linter.LintMessage} LintMessage
+ */
+/**
+ * @typedef {object} GroupState
+ * @property {Set<string>} GroupState.disableAllKeys
+ * @property {Map<string, string[]>} GroupState.disableRuleKeys
+ */
+
+module.exports = {
+  /** @param {string} code */
+  preprocess(code) {
+    return [code]
+  },
+
+  /**
+   * @param {LintMessage[][]} messages
+   * @returns {LintMessage[]}
+   */
+  postprocess(messages) {
+    const state = {
+      /** @type {GroupState} */
+      block: {
+        disableAllKeys: new Set(),
+        disableRuleKeys: new Map()
+      },
+      /** @type {GroupState} */
+      line: {
+        disableAllKeys: new Set(),
+        disableRuleKeys: new Map()
+      }
+    }
+    /** @type {string[]} */
+    const usedDisableDirectiveKeys = []
+    /** @type {Map<string,LintMessage>} */
+    const unusedDisableDirectiveReports = new Map()
+
+    // Filter messages which are in disabled area.
+    const filteredMessages = messages[0].filter((message) => {
+      if (message.ruleId === 'vue/comment-directive') {
+        const directiveType = message.messageId
+        const data = message.message.split(' ')
+        switch (directiveType) {
+          case 'disableBlock':
+            state.block.disableAllKeys.add(data[1])
+            break
+          case 'disableLine':
+            state.line.disableAllKeys.add(data[1])
+            break
+          case 'enableBlock':
+            state.block.disableAllKeys.clear()
+            break
+          case 'enableLine':
+            state.line.disableAllKeys.clear()
+            break
+          case 'disableBlockRule':
+            addDisableRule(state.block.disableRuleKeys, data[1], data[2])
+            break
+          case 'disableLineRule':
+            addDisableRule(state.line.disableRuleKeys, data[1], data[2])
+            break
+          case 'enableBlockRule':
+            state.block.disableRuleKeys.delete(data[1])
+            break
+          case 'enableLineRule':
+            state.line.disableRuleKeys.delete(data[1])
+            break
+          case 'clear':
+            state.block.disableAllKeys.clear()
+            state.block.disableRuleKeys.clear()
+            state.line.disableAllKeys.clear()
+            state.line.disableRuleKeys.clear()
+            break
+          default:
+            // unused eslint-disable comments report
+            unusedDisableDirectiveReports.set(messageToKey(message), message)
+            break
+        }
+        return false
+      } else {
+        const disableDirectiveKeys = []
+        if (state.block.disableAllKeys.size) {
+          disableDirectiveKeys.push(...state.block.disableAllKeys)
+        }
+        if (state.line.disableAllKeys.size) {
+          disableDirectiveKeys.push(...state.line.disableAllKeys)
+        }
+        if (message.ruleId) {
+          const block = state.block.disableRuleKeys.get(message.ruleId)
+          if (block) {
+            disableDirectiveKeys.push(...block)
+          }
+          const line = state.line.disableRuleKeys.get(message.ruleId)
+          if (line) {
+            disableDirectiveKeys.push(...line)
+          }
+        }
+
+        if (disableDirectiveKeys.length) {
+          // Store used eslint-disable comment key
+          usedDisableDirectiveKeys.push(...disableDirectiveKeys)
+          return false
+        } else {
+          return true
+        }
+      }
+    })
+
+    if (unusedDisableDirectiveReports.size) {
+      for (const key of usedDisableDirectiveKeys) {
+        // Remove used eslint-disable comments
+        unusedDisableDirectiveReports.delete(key)
+      }
+      // Reports unused eslint-disable comments
+      filteredMessages.push(...unusedDisableDirectiveReports.values())
+      filteredMessages.sort(compareLocations)
+    }
+
+    return filteredMessages
+  },
+
+  supportsAutofix: true
+}
+
+/**
+ * @param {Map<string, string[]>} disableRuleKeys
+ * @param {string} rule
+ * @param {string} key
+ */
+function addDisableRule(disableRuleKeys, rule, key) {
+  let keys = disableRuleKeys.get(rule)
+  if (keys) {
+    keys.push(key)
+  } else {
+    keys = [key]
+    disableRuleKeys.set(rule, keys)
+  }
+}
+
+/**
+ * @param {LintMessage} message
+ * @returns {string} message key
+ */
+function messageToKey(message) {
+  return `line:${message.line},column${
+    // -1 because +1 by ESLint's `report-translator`.
+    message.column - 1
+  }`
+}
+
+/**
+ * Compares the locations of two objects in a source file
+ * @param {Position} itemA The first object
+ * @param {Position} itemB The second object
+ * @returns {number} A value less than 1 if itemA appears before itemB in the source file, greater than 1 if
+ * itemA appears after itemB in the source file, or 0 if itemA and itemB have the same location.
+ */
+function compareLocations(itemA, itemB) {
+  return itemA.line - itemB.line || itemA.column - itemB.column
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/array-bracket-newline.js b/server/node_modules/eslint-plugin-vue/lib/rules/array-bracket-newline.js
new file mode 100644
index 0000000000000000000000000000000000000000..c667fc7e31e9ca78d74b06d9cc6a0203ad473ef8
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/array-bracket-newline.js
@@ -0,0 +1,11 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('array-bracket-newline', {
+  skipDynamicArguments: true
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/array-bracket-spacing.js b/server/node_modules/eslint-plugin-vue/lib/rules/array-bracket-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..0541d0585ccabcaf6c985c4e8164df6a0cc65dd6
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/array-bracket-spacing.js
@@ -0,0 +1,11 @@
+/**
+ * @author Toru Nagashima
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('array-bracket-spacing', {
+  skipDynamicArguments: true
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/arrow-spacing.js b/server/node_modules/eslint-plugin-vue/lib/rules/arrow-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..f31ab3c3df18434d145cd43671249c17273e3069
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/arrow-spacing.js
@@ -0,0 +1,9 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('arrow-spacing')
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/attribute-hyphenation.js b/server/node_modules/eslint-plugin-vue/lib/rules/attribute-hyphenation.js
new file mode 100644
index 0000000000000000000000000000000000000000..1fd7b5e9b221cd5cf689a11519599ba160806de5
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/attribute-hyphenation.js
@@ -0,0 +1,121 @@
+/**
+ * @fileoverview Define a style for the props casing in templates.
+ * @author Armano
+ */
+'use strict'
+
+const utils = require('../utils')
+const casing = require('../utils/casing')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'enforce attribute naming style on custom components in template',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/attribute-hyphenation.html'
+    },
+    fixable: 'code',
+    schema: [
+      {
+        enum: ['always', 'never']
+      },
+      {
+        type: 'object',
+        properties: {
+          ignore: {
+            type: 'array',
+            items: {
+              allOf: [
+                { type: 'string' },
+                { not: { type: 'string', pattern: ':exit$' } },
+                { not: { type: 'string', pattern: '^\\s*$' } }
+              ]
+            },
+            uniqueItems: true,
+            additionalItems: false
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const sourceCode = context.getSourceCode()
+    const option = context.options[0]
+    const optionsPayload = context.options[1]
+    const useHyphenated = option !== 'never'
+    let ignoredAttributes = ['data-', 'aria-', 'slot-scope']
+
+    if (optionsPayload && optionsPayload.ignore) {
+      ignoredAttributes = ignoredAttributes.concat(optionsPayload.ignore)
+    }
+
+    const caseConverter = casing.getExactConverter(
+      useHyphenated ? 'kebab-case' : 'camelCase'
+    )
+
+    /**
+     * @param {VDirective | VAttribute} node
+     * @param {string} name
+     */
+    function reportIssue(node, name) {
+      const text = sourceCode.getText(node.key)
+
+      context.report({
+        node: node.key,
+        loc: node.loc,
+        message: useHyphenated
+          ? "Attribute '{{text}}' must be hyphenated."
+          : "Attribute '{{text}}' can't be hyphenated.",
+        data: {
+          text
+        },
+        fix: (fixer) =>
+          fixer.replaceText(node.key, text.replace(name, caseConverter(name)))
+      })
+    }
+
+    /**
+     * @param {string} value
+     */
+    function isIgnoredAttribute(value) {
+      const isIgnored = ignoredAttributes.some((attr) => {
+        return value.indexOf(attr) !== -1
+      })
+
+      if (isIgnored) {
+        return true
+      }
+
+      return useHyphenated ? value.toLowerCase() === value : !/-/.test(value)
+    }
+
+    // ----------------------------------------------------------------------
+    // Public
+    // ----------------------------------------------------------------------
+
+    return utils.defineTemplateBodyVisitor(context, {
+      VAttribute(node) {
+        if (!utils.isCustomComponent(node.parent.parent)) return
+
+        const name = !node.directive
+          ? node.key.rawName
+          : node.key.name.name === 'bind'
+          ? node.key.argument &&
+            node.key.argument.type === 'VIdentifier' &&
+            node.key.argument.rawName
+          : /* otherwise */ false
+        if (!name || isIgnoredAttribute(name)) return
+
+        reportIssue(node, name)
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/attributes-order.js b/server/node_modules/eslint-plugin-vue/lib/rules/attributes-order.js
new file mode 100644
index 0000000000000000000000000000000000000000..34a9d7d32f76b393f6f189d1cf5503e21c46ab94
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/attributes-order.js
@@ -0,0 +1,281 @@
+/**
+ * @fileoverview enforce ordering of attributes
+ * @author Erin Depew
+ */
+'use strict'
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+const ATTRS = {
+  DEFINITION: 'DEFINITION',
+  LIST_RENDERING: 'LIST_RENDERING',
+  CONDITIONALS: 'CONDITIONALS',
+  RENDER_MODIFIERS: 'RENDER_MODIFIERS',
+  GLOBAL: 'GLOBAL',
+  UNIQUE: 'UNIQUE',
+  TWO_WAY_BINDING: 'TWO_WAY_BINDING',
+  OTHER_DIRECTIVES: 'OTHER_DIRECTIVES',
+  OTHER_ATTR: 'OTHER_ATTR',
+  EVENTS: 'EVENTS',
+  CONTENT: 'CONTENT'
+}
+
+/**
+ * @param {VAttribute | VDirective} attribute
+ * @param {SourceCode} sourceCode
+ */
+function getAttributeName(attribute, sourceCode) {
+  if (attribute.directive) {
+    if (attribute.key.name.name === 'bind') {
+      return attribute.key.argument
+        ? sourceCode.getText(attribute.key.argument)
+        : ''
+    } else {
+      return getDirectiveKeyName(attribute.key, sourceCode)
+    }
+  } else {
+    return attribute.key.name
+  }
+}
+
+/**
+ * @param {VDirectiveKey} directiveKey
+ * @param {SourceCode} sourceCode
+ */
+function getDirectiveKeyName(directiveKey, sourceCode) {
+  let text = `v-${directiveKey.name.name}`
+  if (directiveKey.argument) {
+    text += `:${sourceCode.getText(directiveKey.argument)}`
+  }
+  for (const modifier of directiveKey.modifiers) {
+    text += `.${modifier.name}`
+  }
+  return text
+}
+
+/**
+ * @param {VAttribute | VDirective} attribute
+ * @param {SourceCode} sourceCode
+ */
+function getAttributeType(attribute, sourceCode) {
+  let propName
+  if (attribute.directive) {
+    if (attribute.key.name.name !== 'bind') {
+      const name = attribute.key.name.name
+      if (name === 'for') {
+        return ATTRS.LIST_RENDERING
+      } else if (
+        name === 'if' ||
+        name === 'else-if' ||
+        name === 'else' ||
+        name === 'show' ||
+        name === 'cloak'
+      ) {
+        return ATTRS.CONDITIONALS
+      } else if (name === 'pre' || name === 'once') {
+        return ATTRS.RENDER_MODIFIERS
+      } else if (name === 'model') {
+        return ATTRS.TWO_WAY_BINDING
+      } else if (name === 'on') {
+        return ATTRS.EVENTS
+      } else if (name === 'html' || name === 'text') {
+        return ATTRS.CONTENT
+      } else if (name === 'slot') {
+        return ATTRS.UNIQUE
+      } else if (name === 'is') {
+        return ATTRS.DEFINITION
+      } else {
+        return ATTRS.OTHER_DIRECTIVES
+      }
+    }
+    propName = attribute.key.argument
+      ? sourceCode.getText(attribute.key.argument)
+      : ''
+  } else {
+    propName = attribute.key.name
+  }
+  if (propName === 'is') {
+    return ATTRS.DEFINITION
+  } else if (propName === 'id') {
+    return ATTRS.GLOBAL
+  } else if (
+    propName === 'ref' ||
+    propName === 'key' ||
+    propName === 'slot' ||
+    propName === 'slot-scope'
+  ) {
+    return ATTRS.UNIQUE
+  } else {
+    return ATTRS.OTHER_ATTR
+  }
+}
+
+/**
+ * @param {VAttribute | VDirective} attribute
+ * @param { { [key: string]: number } } attributePosition
+ * @param {SourceCode} sourceCode
+ */
+function getPosition(attribute, attributePosition, sourceCode) {
+  const attributeType = getAttributeType(attribute, sourceCode)
+  return attributePosition.hasOwnProperty(attributeType)
+    ? attributePosition[attributeType]
+    : -1
+}
+
+/**
+ * @param {VAttribute | VDirective} prevNode
+ * @param {VAttribute | VDirective} currNode
+ * @param {SourceCode} sourceCode
+ */
+function isAlphabetical(prevNode, currNode, sourceCode) {
+  const isSameType =
+    getAttributeType(prevNode, sourceCode) ===
+    getAttributeType(currNode, sourceCode)
+  if (isSameType) {
+    const prevName = getAttributeName(prevNode, sourceCode)
+    const currName = getAttributeName(currNode, sourceCode)
+    if (prevName === currName) {
+      const prevIsBind = Boolean(
+        prevNode.directive && prevNode.key.name.name === 'bind'
+      )
+      const currIsBind = Boolean(
+        currNode.directive && currNode.key.name.name === 'bind'
+      )
+      return prevIsBind <= currIsBind
+    }
+    return prevName < currName
+  }
+  return true
+}
+
+/**
+ * @param {RuleContext} context - The rule context.
+ * @returns {RuleListener} AST event handlers.
+ */
+function create(context) {
+  const sourceCode = context.getSourceCode()
+  let attributeOrder = [
+    ATTRS.DEFINITION,
+    ATTRS.LIST_RENDERING,
+    ATTRS.CONDITIONALS,
+    ATTRS.RENDER_MODIFIERS,
+    ATTRS.GLOBAL,
+    ATTRS.UNIQUE,
+    ATTRS.TWO_WAY_BINDING,
+    ATTRS.OTHER_DIRECTIVES,
+    ATTRS.OTHER_ATTR,
+    ATTRS.EVENTS,
+    ATTRS.CONTENT
+  ]
+  if (context.options[0] && context.options[0].order) {
+    attributeOrder = context.options[0].order
+  }
+  const alphabetical = Boolean(
+    context.options[0] && context.options[0].alphabetical
+  )
+
+  /** @type { { [key: string]: number } } */
+  const attributePosition = {}
+  attributeOrder.forEach((item, i) => {
+    if (Array.isArray(item)) {
+      item.forEach((attr) => {
+        attributePosition[attr] = i
+      })
+    } else attributePosition[item] = i
+  })
+
+  /**
+   * @typedef {object} State
+   * @property {number} currentPosition
+   * @property {VAttribute | VDirective} previousNode
+   */
+  /**
+   * @type {State | null}
+   */
+  let state
+
+  /**
+   * @param {VAttribute | VDirective} node
+   * @param {VAttribute | VDirective} previousNode
+   */
+  function reportIssue(node, previousNode) {
+    const currentNode = sourceCode.getText(node.key)
+    const prevNode = sourceCode.getText(previousNode.key)
+    context.report({
+      node: node.key,
+      loc: node.loc,
+      message: `Attribute "${currentNode}" should go before "${prevNode}".`,
+      data: {
+        currentNode
+      },
+
+      fix(fixer) {
+        const attributes = node.parent.attributes
+        const shiftAttrs = attributes.slice(
+          attributes.indexOf(previousNode),
+          attributes.indexOf(node) + 1
+        )
+
+        return shiftAttrs.map((attr, i) => {
+          const text =
+            attr === previousNode
+              ? sourceCode.getText(node)
+              : sourceCode.getText(shiftAttrs[i - 1])
+          return fixer.replaceText(attr, text)
+        })
+      }
+    })
+  }
+
+  return utils.defineTemplateBodyVisitor(context, {
+    VStartTag() {
+      state = null
+    },
+    VAttribute(node) {
+      let inAlphaOrder = true
+      if (state && alphabetical) {
+        inAlphaOrder = isAlphabetical(state.previousNode, node, sourceCode)
+      }
+      if (
+        !state ||
+        (state.currentPosition <=
+          getPosition(node, attributePosition, sourceCode) &&
+          inAlphaOrder)
+      ) {
+        state = {
+          currentPosition: getPosition(node, attributePosition, sourceCode),
+          previousNode: node
+        }
+      } else {
+        reportIssue(node, state.previousNode)
+      }
+    }
+  })
+}
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'enforce order of attributes',
+      categories: ['vue3-recommended', 'recommended'],
+      url: 'https://eslint.vuejs.org/rules/attributes-order.html'
+    },
+    fixable: 'code',
+    schema: {
+      type: 'array',
+      properties: {
+        order: {
+          items: {
+            type: 'string'
+          },
+          maxItems: 10,
+          minItems: 10
+        }
+      }
+    }
+  },
+  create
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/block-spacing.js b/server/node_modules/eslint-plugin-vue/lib/rules/block-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..0634f2b6a08aecc53b96f1e66d34e486a4314026
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/block-spacing.js
@@ -0,0 +1,11 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('block-spacing', {
+  skipDynamicArguments: true
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/block-tag-newline.js b/server/node_modules/eslint-plugin-vue/lib/rules/block-tag-newline.js
new file mode 100644
index 0000000000000000000000000000000000000000..c88a36c27f8d1ea1e9dac7e970c7e0bb4db713f6
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/block-tag-newline.js
@@ -0,0 +1,375 @@
+/**
+ * @fileoverview Enforce line breaks style after opening and before closing block-level tags.
+ * @author Yosuke Ota
+ */
+'use strict'
+const utils = require('../utils')
+
+/**
+ * @typedef { 'always' | 'never' | 'consistent' | 'ignore' } OptionType
+ * @typedef { { singleline?: OptionType, multiline?: OptionType, maxEmptyLines?: number } } ContentsOptions
+ * @typedef { ContentsOptions & { blocks?: { [element: string]: ContentsOptions } } } Options
+ * @typedef { Required<ContentsOptions> } ArgsOptions
+ */
+
+/**
+ * @param {string} text Source code as a string.
+ * @returns {number}
+ */
+function getLinebreakCount(text) {
+  return text.split(/\r\n|[\r\n\u2028\u2029]/gu).length - 1
+}
+
+/**
+ * @param {number} lineBreaks
+ */
+function getPhrase(lineBreaks) {
+  switch (lineBreaks) {
+    case 1:
+      return '1 line break'
+    default:
+      return `${lineBreaks} line breaks`
+  }
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+const ENUM_OPTIONS = { enum: ['always', 'never', 'consistent', 'ignore'] }
+module.exports = {
+  meta: {
+    type: 'layout',
+    docs: {
+      description:
+        'enforce line breaks after opening and before closing block-level tags',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/block-tag-newline.html'
+    },
+    fixable: 'whitespace',
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          singleline: ENUM_OPTIONS,
+          multiline: ENUM_OPTIONS,
+          maxEmptyLines: { type: 'number', minimum: 0 },
+          blocks: {
+            type: 'object',
+            patternProperties: {
+              '^(?:\\S+)$': {
+                type: 'object',
+                properties: {
+                  singleline: ENUM_OPTIONS,
+                  multiline: ENUM_OPTIONS,
+                  maxEmptyLines: { type: 'number', minimum: 0 }
+                },
+                additionalProperties: false
+              }
+            },
+            additionalProperties: false
+          }
+        },
+        additionalProperties: false
+      }
+    ],
+    messages: {
+      unexpectedOpeningLinebreak:
+        "There should be no line break after '<{{tag}}>'.",
+      unexpectedClosingLinebreak:
+        "There should be no line break before '</{{tag}}>'.",
+      expectedOpeningLinebreak:
+        "Expected {{expected}} after '<{{tag}}>', but {{actual}} found.",
+      expectedClosingLinebreak:
+        "Expected {{expected}}  before '</{{tag}}>', but {{actual}} found.",
+      missingOpeningLinebreak: "A line break is required after '<{{tag}}>'.",
+      missingClosingLinebreak: "A line break is required before '</{{tag}}>'."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const df =
+      context.parserServices.getDocumentFragment &&
+      context.parserServices.getDocumentFragment()
+    if (!df) {
+      return {}
+    }
+
+    const sourceCode = context.getSourceCode()
+
+    /**
+     * @param {VStartTag} startTag
+     * @param {string} beforeText
+     * @param {number} beforeLinebreakCount
+     * @param {'always' | 'never'} beforeOption
+     * @param {number} maxEmptyLines
+     * @returns {void}
+     */
+    function verifyBeforeSpaces(
+      startTag,
+      beforeText,
+      beforeLinebreakCount,
+      beforeOption,
+      maxEmptyLines
+    ) {
+      if (beforeOption === 'always') {
+        if (beforeLinebreakCount === 0) {
+          context.report({
+            loc: {
+              start: startTag.loc.end,
+              end: startTag.loc.end
+            },
+            messageId: 'missingOpeningLinebreak',
+            data: { tag: startTag.parent.name },
+            fix(fixer) {
+              return fixer.insertTextAfter(startTag, '\n')
+            }
+          })
+        } else if (maxEmptyLines < beforeLinebreakCount - 1) {
+          context.report({
+            loc: {
+              start: startTag.loc.end,
+              end: sourceCode.getLocFromIndex(
+                startTag.range[1] + beforeText.length
+              )
+            },
+            messageId: 'expectedOpeningLinebreak',
+            data: {
+              tag: startTag.parent.name,
+              expected: getPhrase(maxEmptyLines + 1),
+              actual: getPhrase(beforeLinebreakCount)
+            },
+            fix(fixer) {
+              return fixer.replaceTextRange(
+                [startTag.range[1], startTag.range[1] + beforeText.length],
+                '\n'.repeat(maxEmptyLines + 1)
+              )
+            }
+          })
+        }
+      } else {
+        if (beforeLinebreakCount > 0) {
+          context.report({
+            loc: {
+              start: startTag.loc.end,
+              end: sourceCode.getLocFromIndex(
+                startTag.range[1] + beforeText.length
+              )
+            },
+            messageId: 'unexpectedOpeningLinebreak',
+            data: { tag: startTag.parent.name },
+            fix(fixer) {
+              return fixer.removeRange([
+                startTag.range[1],
+                startTag.range[1] + beforeText.length
+              ])
+            }
+          })
+        }
+      }
+    }
+    /**
+     * @param {VEndTag} endTag
+     * @param {string} afterText
+     * @param {number} afterLinebreakCount
+     * @param {'always' | 'never'} afterOption
+     * @param {number} maxEmptyLines
+     * @returns {void}
+     */
+    function verifyAfterSpaces(
+      endTag,
+      afterText,
+      afterLinebreakCount,
+      afterOption,
+      maxEmptyLines
+    ) {
+      if (afterOption === 'always') {
+        if (afterLinebreakCount === 0) {
+          context.report({
+            loc: {
+              start: endTag.loc.start,
+              end: endTag.loc.start
+            },
+            messageId: 'missingClosingLinebreak',
+            data: { tag: endTag.parent.name },
+            fix(fixer) {
+              return fixer.insertTextBefore(endTag, '\n')
+            }
+          })
+        } else if (maxEmptyLines < afterLinebreakCount - 1) {
+          context.report({
+            loc: {
+              start: sourceCode.getLocFromIndex(
+                endTag.range[0] - afterText.length
+              ),
+              end: endTag.loc.start
+            },
+            messageId: 'expectedClosingLinebreak',
+            data: {
+              tag: endTag.parent.name,
+              expected: getPhrase(maxEmptyLines + 1),
+              actual: getPhrase(afterLinebreakCount)
+            },
+            fix(fixer) {
+              return fixer.replaceTextRange(
+                [endTag.range[0] - afterText.length, endTag.range[0]],
+                '\n'.repeat(maxEmptyLines + 1)
+              )
+            }
+          })
+        }
+      } else {
+        if (afterLinebreakCount > 0) {
+          context.report({
+            loc: {
+              start: sourceCode.getLocFromIndex(
+                endTag.range[0] - afterText.length
+              ),
+              end: endTag.loc.start
+            },
+            messageId: 'unexpectedOpeningLinebreak',
+            data: { tag: endTag.parent.name },
+            fix(fixer) {
+              return fixer.removeRange([
+                endTag.range[0] - afterText.length,
+                endTag.range[0]
+              ])
+            }
+          })
+        }
+      }
+    }
+    /**
+     * @param {VElement} element
+     * @param {ArgsOptions} options
+     * @returns {void}
+     */
+    function verifyElement(element, options) {
+      const { startTag, endTag } = element
+      if (startTag.selfClosing || endTag == null) {
+        return
+      }
+      const text = sourceCode.text.slice(startTag.range[1], endTag.range[0])
+
+      const trimText = text.trim()
+      if (!trimText) {
+        return
+      }
+
+      const option =
+        options.multiline === options.singleline
+          ? options.singleline
+          : /[\n\r\u2028\u2029]/u.test(text.trim())
+          ? options.multiline
+          : options.singleline
+      if (option === 'ignore') {
+        return
+      }
+      const beforeText = /** @type {RegExpExecArray} */ (/^\s*/u.exec(text))[0]
+      const afterText = /** @type {RegExpExecArray} */ (/\s*$/u.exec(text))[0]
+      const beforeLinebreakCount = getLinebreakCount(beforeText)
+      const afterLinebreakCount = getLinebreakCount(afterText)
+
+      /** @type {'always' | 'never'} */
+      let beforeOption
+      /** @type {'always' | 'never'} */
+      let afterOption
+      if (option === 'always' || option === 'never') {
+        beforeOption = option
+        afterOption = option
+      } else {
+        // consistent
+        if (beforeLinebreakCount > 0 === afterLinebreakCount > 0) {
+          return
+        }
+        beforeOption = 'always'
+        afterOption = 'always'
+      }
+
+      verifyBeforeSpaces(
+        startTag,
+        beforeText,
+        beforeLinebreakCount,
+        beforeOption,
+        options.maxEmptyLines
+      )
+
+      verifyAfterSpaces(
+        endTag,
+        afterText,
+        afterLinebreakCount,
+        afterOption,
+        options.maxEmptyLines
+      )
+    }
+
+    /**
+     * Normalizes a given option value.
+     * @param { Options | undefined } option An option value to parse.
+     * @returns { (element: VElement) => void } Verify function.
+     */
+    function normalizeOptionValue(option) {
+      if (!option) {
+        return normalizeOptionValue({})
+      }
+
+      /** @type {ContentsOptions} */
+      const contentsOptions = option
+      /** @type {ArgsOptions} */
+      const options = {
+        singleline: contentsOptions.singleline || 'consistent',
+        multiline: contentsOptions.multiline || 'always',
+        maxEmptyLines: contentsOptions.maxEmptyLines || 0
+      }
+      const { blocks } = option
+      if (!blocks) {
+        return (element) => verifyElement(element, options)
+      }
+
+      return (element) => {
+        const { name } = element
+        const elementsOptions = blocks[name]
+        if (!elementsOptions) {
+          verifyElement(element, options)
+        } else {
+          normalizeOptionValue({
+            singleline: elementsOptions.singleline || options.singleline,
+            multiline: elementsOptions.multiline || options.multiline,
+            maxEmptyLines:
+              elementsOptions.maxEmptyLines != null
+                ? elementsOptions.maxEmptyLines
+                : options.maxEmptyLines
+          })(element)
+        }
+      }
+    }
+
+    const documentFragment = df
+
+    const verify = normalizeOptionValue(context.options[0])
+
+    /**
+     * @returns {VElement[]}
+     */
+    function getTopLevelHTMLElements() {
+      return documentFragment.children.filter(utils.isVElement)
+    }
+
+    return utils.defineTemplateBodyVisitor(
+      context,
+      {},
+      {
+        /** @param {Program} node */
+        Program(node) {
+          if (utils.hasInvalidEOF(node)) {
+            return
+          }
+
+          for (const element of getTopLevelHTMLElements()) {
+            verify(element)
+          }
+        }
+      }
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/brace-style.js b/server/node_modules/eslint-plugin-vue/lib/rules/brace-style.js
new file mode 100644
index 0000000000000000000000000000000000000000..5dad2c29dc576727c0a4b4965d4ef00aaaf86794
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/brace-style.js
@@ -0,0 +1,11 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('brace-style', {
+  skipDynamicArguments: true
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/camelcase.js b/server/node_modules/eslint-plugin-vue/lib/rules/camelcase.js
new file mode 100644
index 0000000000000000000000000000000000000000..4b0898fe64d6f770182578aafd656d2d731e3a5a
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/camelcase.js
@@ -0,0 +1,9 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('camelcase')
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/comma-dangle.js b/server/node_modules/eslint-plugin-vue/lib/rules/comma-dangle.js
new file mode 100644
index 0000000000000000000000000000000000000000..6fb48b79d6df913b4c44c6c37fdbc52787293493
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/comma-dangle.js
@@ -0,0 +1,9 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('comma-dangle')
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/comma-spacing.js b/server/node_modules/eslint-plugin-vue/lib/rules/comma-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..7ac0245e88648dc5ae76890092cc5a1d362323a6
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/comma-spacing.js
@@ -0,0 +1,12 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('comma-spacing', {
+  skipDynamicArguments: true,
+  skipDynamicArgumentsReport: true
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/comma-style.js b/server/node_modules/eslint-plugin-vue/lib/rules/comma-style.js
new file mode 100644
index 0000000000000000000000000000000000000000..960e6d6dfbd6f5ee53bc1c983d586dec6c815116
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/comma-style.js
@@ -0,0 +1,20 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('comma-style', {
+  create(_context, { coreHandlers }) {
+    return {
+      VSlotScopeExpression(node) {
+        if (coreHandlers.FunctionExpression) {
+          // @ts-expect-error -- Process params of VSlotScopeExpression as FunctionExpression.
+          coreHandlers.FunctionExpression(node)
+        }
+      }
+    }
+  }
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/comment-directive.js b/server/node_modules/eslint-plugin-vue/lib/rules/comment-directive.js
new file mode 100644
index 0000000000000000000000000000000000000000..9ff9d2fdff5189e6c4309f86390d8f83ce9c74bb
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/comment-directive.js
@@ -0,0 +1,366 @@
+/**
+ * @author Toru Nagashima <https://github.com/mysticatea>
+ */
+/* eslint-disable eslint-plugin/report-message-format, consistent-docs-description */
+
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+/**
+ * @typedef {object} RuleAndLocation
+ * @property {string} RuleAndLocation.ruleId
+ * @property {number} RuleAndLocation.index
+ * @property {string} [RuleAndLocation.key]
+ */
+// -----------------------------------------------------------------------------
+// Helpers
+// -----------------------------------------------------------------------------
+
+const COMMENT_DIRECTIVE_B = /^\s*(eslint-(?:en|dis)able)(?:\s+|$)/
+const COMMENT_DIRECTIVE_L = /^\s*(eslint-disable(?:-next)?-line)(?:\s+|$)/
+
+/**
+ * Remove the ignored part from a given directive comment and trim it.
+ * @param {string} value The comment text to strip.
+ * @returns {string} The stripped text.
+ */
+function stripDirectiveComment(value) {
+  return value.split(/\s-{2,}\s/u)[0]
+}
+
+/**
+ * Parse a given comment.
+ * @param {RegExp} pattern The RegExp pattern to parse.
+ * @param {string} comment The comment value to parse.
+ * @returns {({type:string,rules:RuleAndLocation[]})|null} The parsing result.
+ */
+function parse(pattern, comment) {
+  const text = stripDirectiveComment(comment)
+  const match = pattern.exec(text)
+  if (match == null) {
+    return null
+  }
+
+  const type = match[1]
+
+  /** @type {RuleAndLocation[]} */
+  const rules = []
+
+  const rulesRe = /([^,\s]+)[,\s]*/g
+  let startIndex = match[0].length
+  rulesRe.lastIndex = startIndex
+
+  let res
+  while ((res = rulesRe.exec(text))) {
+    const ruleId = res[1].trim()
+    rules.push({
+      ruleId,
+      index: startIndex
+    })
+    startIndex = rulesRe.lastIndex
+  }
+
+  return { type, rules }
+}
+
+/**
+ * Enable rules.
+ * @param {RuleContext} context The rule context.
+ * @param {{line:number,column:number}} loc The location information to enable.
+ * @param { 'block' | 'line' } group The group to enable.
+ * @param {string | null} rule The rule ID to enable.
+ * @returns {void}
+ */
+function enable(context, loc, group, rule) {
+  if (!rule) {
+    context.report({
+      loc,
+      messageId: group === 'block' ? 'enableBlock' : 'enableLine'
+    })
+  } else {
+    context.report({
+      loc,
+      messageId: group === 'block' ? 'enableBlockRule' : 'enableLineRule',
+      data: { rule }
+    })
+  }
+}
+
+/**
+ * Disable rules.
+ * @param {RuleContext} context The rule context.
+ * @param {{line:number,column:number}} loc The location information to disable.
+ * @param { 'block' | 'line' } group The group to disable.
+ * @param {string | null} rule The rule ID to disable.
+ * @param {string} key The disable directive key.
+ * @returns {void}
+ */
+function disable(context, loc, group, rule, key) {
+  if (!rule) {
+    context.report({
+      loc,
+      messageId: group === 'block' ? 'disableBlock' : 'disableLine',
+      data: { key }
+    })
+  } else {
+    context.report({
+      loc,
+      messageId: group === 'block' ? 'disableBlockRule' : 'disableLineRule',
+      data: { rule, key }
+    })
+  }
+}
+
+/**
+ * Process a given comment token.
+ * If the comment is `eslint-disable` or `eslint-enable` then it reports the comment.
+ * @param {RuleContext} context The rule context.
+ * @param {Token} comment The comment token to process.
+ * @param {boolean} reportUnusedDisableDirectives To report unused eslint-disable comments.
+ * @returns {void}
+ */
+function processBlock(context, comment, reportUnusedDisableDirectives) {
+  const parsed = parse(COMMENT_DIRECTIVE_B, comment.value)
+  if (parsed != null) {
+    if (parsed.type === 'eslint-disable') {
+      if (parsed.rules.length) {
+        const rules = reportUnusedDisableDirectives
+          ? reportUnusedRules(context, comment, parsed.type, parsed.rules)
+          : parsed.rules
+        for (const rule of rules) {
+          disable(
+            context,
+            comment.loc.start,
+            'block',
+            rule.ruleId,
+            rule.key || '*'
+          )
+        }
+      } else {
+        const key = reportUnusedDisableDirectives
+          ? reportUnused(context, comment, parsed.type)
+          : ''
+        disable(context, comment.loc.start, 'block', null, key)
+      }
+    } else {
+      if (parsed.rules.length) {
+        for (const rule of parsed.rules) {
+          enable(context, comment.loc.start, 'block', rule.ruleId)
+        }
+      } else {
+        enable(context, comment.loc.start, 'block', null)
+      }
+    }
+  }
+}
+
+/**
+ * Process a given comment token.
+ * If the comment is `eslint-disable-line` or `eslint-disable-next-line` then it reports the comment.
+ * @param {RuleContext} context The rule context.
+ * @param {Token} comment The comment token to process.
+ * @param {boolean} reportUnusedDisableDirectives To report unused eslint-disable comments.
+ * @returns {void}
+ */
+function processLine(context, comment, reportUnusedDisableDirectives) {
+  const parsed = parse(COMMENT_DIRECTIVE_L, comment.value)
+  if (parsed != null && comment.loc.start.line === comment.loc.end.line) {
+    const line =
+      comment.loc.start.line + (parsed.type === 'eslint-disable-line' ? 0 : 1)
+    const column = -1
+    if (parsed.rules.length) {
+      const rules = reportUnusedDisableDirectives
+        ? reportUnusedRules(context, comment, parsed.type, parsed.rules)
+        : parsed.rules
+      for (const rule of rules) {
+        disable(context, { line, column }, 'line', rule.ruleId, rule.key || '')
+        enable(context, { line: line + 1, column }, 'line', rule.ruleId)
+      }
+    } else {
+      const key = reportUnusedDisableDirectives
+        ? reportUnused(context, comment, parsed.type)
+        : ''
+      disable(context, { line, column }, 'line', null, key)
+      enable(context, { line: line + 1, column }, 'line', null)
+    }
+  }
+}
+
+/**
+ * Reports unused disable directive.
+ * Do not check the use of directives here. Filter the directives used with postprocess.
+ * @param {RuleContext} context The rule context.
+ * @param {Token} comment The comment token to report.
+ * @param {string} kind The comment directive kind.
+ * @returns {string} The report key
+ */
+function reportUnused(context, comment, kind) {
+  const loc = comment.loc
+
+  context.report({
+    loc,
+    messageId: 'unused',
+    data: { kind }
+  })
+
+  return locToKey(loc.start)
+}
+
+/**
+ * Reports unused disable directive rules.
+ * Do not check the use of directives here. Filter the directives used with postprocess.
+ * @param {RuleContext} context The rule context.
+ * @param {Token} comment The comment token to report.
+ * @param {string} kind The comment directive kind.
+ * @param {RuleAndLocation[]} rules To report rule.
+ * @returns { { ruleId: string, key: string }[] }
+ */
+function reportUnusedRules(context, comment, kind, rules) {
+  const sourceCode = context.getSourceCode()
+  const commentStart = comment.range[0] + 4 /* <!-- */
+
+  return rules.map((rule) => {
+    const start = sourceCode.getLocFromIndex(commentStart + rule.index)
+    const end = sourceCode.getLocFromIndex(
+      commentStart + rule.index + rule.ruleId.length
+    )
+
+    context.report({
+      loc: { start, end },
+      messageId: 'unusedRule',
+      data: { rule: rule.ruleId, kind }
+    })
+
+    return {
+      ruleId: rule.ruleId,
+      key: locToKey(start)
+    }
+  })
+}
+
+/**
+ * Gets the key of location
+ * @param {Position} location The location
+ * @returns {string} The key
+ */
+function locToKey(location) {
+  return `line:${location.line},column${location.column}`
+}
+
+/**
+ * Extracts the top-level elements in document fragment.
+ * @param {VDocumentFragment} documentFragment The document fragment.
+ * @returns {VElement[]} The top-level elements
+ */
+function extractTopLevelHTMLElements(documentFragment) {
+  return documentFragment.children.filter(utils.isVElement)
+}
+/**
+ * Extracts the top-level comments in document fragment.
+ * @param {VDocumentFragment} documentFragment The document fragment.
+ * @returns {Token[]} The top-level comments
+ */
+function extractTopLevelDocumentFragmentComments(documentFragment) {
+  const elements = extractTopLevelHTMLElements(documentFragment)
+
+  return documentFragment.comments.filter((comment) =>
+    elements.every(
+      (element) =>
+        comment.range[1] <= element.range[0] ||
+        element.range[1] <= comment.range[0]
+    )
+  )
+}
+
+// -----------------------------------------------------------------------------
+// Rule Definition
+// -----------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'support comment-directives in `<template>`',
+      categories: ['base'],
+      url: 'https://eslint.vuejs.org/rules/comment-directive.html'
+    },
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          reportUnusedDisableDirectives: {
+            type: 'boolean'
+          }
+        },
+        additionalProperties: false
+      }
+    ],
+    messages: {
+      disableBlock: '--block {{key}}',
+      enableBlock: '++block',
+      disableLine: '--line {{key}}',
+      enableLine: '++line',
+      disableBlockRule: '-block {{rule}} {{key}}',
+      enableBlockRule: '+block {{rule}}',
+      disableLineRule: '-line {{rule}} {{key}}',
+      enableLineRule: '+line {{rule}}',
+      clear: 'clear',
+
+      unused: 'Unused {{kind}} directive (no problems were reported).',
+      unusedRule:
+        "Unused {{kind}} directive (no problems were reported from '{{rule}}')."
+    }
+  },
+  /**
+   * @param {RuleContext} context - The rule context.
+   * @returns {RuleListener} AST event handlers.
+   */
+  create(context) {
+    const options = context.options[0] || {}
+    /** @type {boolean} */
+    const reportUnusedDisableDirectives = options.reportUnusedDisableDirectives
+    const documentFragment =
+      context.parserServices.getDocumentFragment &&
+      context.parserServices.getDocumentFragment()
+
+    return {
+      Program(node) {
+        if (node.templateBody) {
+          // Send directives to the post-process.
+          for (const comment of node.templateBody.comments) {
+            processBlock(context, comment, reportUnusedDisableDirectives)
+            processLine(context, comment, reportUnusedDisableDirectives)
+          }
+
+          // Send a clear mark to the post-process.
+          context.report({
+            loc: node.templateBody.loc.end,
+            messageId: 'clear'
+          })
+        }
+        if (documentFragment) {
+          // Send directives to the post-process.
+          for (const comment of extractTopLevelDocumentFragmentComments(
+            documentFragment
+          )) {
+            processBlock(context, comment, reportUnusedDisableDirectives)
+            processLine(context, comment, reportUnusedDisableDirectives)
+          }
+
+          // Send a clear mark to the post-process.
+          for (const element of extractTopLevelHTMLElements(documentFragment)) {
+            context.report({
+              loc: element.loc.end,
+              messageId: 'clear'
+            })
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/component-definition-name-casing.js b/server/node_modules/eslint-plugin-vue/lib/rules/component-definition-name-casing.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f2e59a85275d322b25c5c2be117c524e0be087d
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/component-definition-name-casing.js
@@ -0,0 +1,108 @@
+/**
+ * @fileoverview enforce specific casing for component definition name
+ * @author Armano
+ */
+'use strict'
+
+const utils = require('../utils')
+const casing = require('../utils/casing')
+const allowedCaseOptions = ['PascalCase', 'kebab-case']
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'enforce specific casing for component definition name',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url:
+        'https://eslint.vuejs.org/rules/component-definition-name-casing.html'
+    },
+    fixable: 'code', // or "code" or "whitespace"
+    schema: [
+      {
+        enum: allowedCaseOptions
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0]
+    const caseType =
+      allowedCaseOptions.indexOf(options) !== -1 ? options : 'PascalCase'
+
+    // ----------------------------------------------------------------------
+    // Public
+    // ----------------------------------------------------------------------
+
+    /**
+     * @param {Literal | TemplateLiteral} node
+     */
+    function convertName(node) {
+      /** @type {string} */
+      let nodeValue
+      /** @type {Range} */
+      let range
+      if (node.type === 'TemplateLiteral') {
+        const quasis = node.quasis[0]
+        nodeValue = quasis.value.cooked
+        range = quasis.range
+      } else {
+        nodeValue = `${node.value}`
+        range = node.range
+      }
+
+      if (!casing.getChecker(caseType)(nodeValue)) {
+        context.report({
+          node,
+          message: 'Property name "{{value}}" is not {{caseType}}.',
+          data: {
+            value: nodeValue,
+            caseType
+          },
+          fix: (fixer) =>
+            fixer.replaceTextRange(
+              [range[0] + 1, range[1] - 1],
+              casing.getExactConverter(caseType)(nodeValue)
+            )
+        })
+      }
+    }
+
+    /**
+     * @param {Expression | SpreadElement} node
+     * @returns {node is (Literal | TemplateLiteral)}
+     */
+    function canConvert(node) {
+      return (
+        node.type === 'Literal' ||
+        (node.type === 'TemplateLiteral' &&
+          node.expressions.length === 0 &&
+          node.quasis.length === 1)
+      )
+    }
+
+    return Object.assign(
+      {},
+      utils.executeOnCallVueComponent(context, (node) => {
+        if (node.arguments.length === 2) {
+          const argument = node.arguments[0]
+
+          if (canConvert(argument)) {
+            convertName(argument)
+          }
+        }
+      }),
+      utils.executeOnVue(context, (obj) => {
+        const node = utils.findProperty(obj, 'name')
+
+        if (!node) return
+        if (!canConvert(node.value)) return
+        convertName(node.value)
+      })
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/component-name-in-template-casing.js b/server/node_modules/eslint-plugin-vue/lib/rules/component-name-in-template-casing.js
new file mode 100644
index 0000000000000000000000000000000000000000..dffca0c8826bda8815db3ff79b31c81d0296b0de
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/component-name-in-template-casing.js
@@ -0,0 +1,164 @@
+/**
+ * @author Yosuke Ota
+ * issue https://github.com/vuejs/eslint-plugin-vue/issues/250
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+const casing = require('../utils/casing')
+const { toRegExp } = require('../utils/regexp')
+
+// -----------------------------------------------------------------------------
+// Helpers
+// -----------------------------------------------------------------------------
+
+const allowedCaseOptions = ['PascalCase', 'kebab-case']
+const defaultCase = 'PascalCase'
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'enforce specific casing for the component naming style in template',
+      categories: undefined,
+      url:
+        'https://eslint.vuejs.org/rules/component-name-in-template-casing.html'
+    },
+    fixable: 'code',
+    schema: [
+      {
+        enum: allowedCaseOptions
+      },
+      {
+        type: 'object',
+        properties: {
+          ignores: {
+            type: 'array',
+            items: { type: 'string' },
+            uniqueItems: true,
+            additionalItems: false
+          },
+          registeredComponentsOnly: {
+            type: 'boolean'
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const caseOption = context.options[0]
+    const options = context.options[1] || {}
+    const caseType =
+      allowedCaseOptions.indexOf(caseOption) !== -1 ? caseOption : defaultCase
+    /** @type {RegExp[]} */
+    const ignores = (options.ignores || []).map(toRegExp)
+    const registeredComponentsOnly = options.registeredComponentsOnly !== false
+    const tokens =
+      context.parserServices.getTemplateBodyTokenStore &&
+      context.parserServices.getTemplateBodyTokenStore()
+
+    /** @type { string[] } */
+    const registeredComponents = []
+
+    /**
+     * Checks whether the given node is the verification target node.
+     * @param {VElement} node element node
+     * @returns {boolean} `true` if the given node is the verification target node.
+     */
+    function isVerifyTarget(node) {
+      if (ignores.some((re) => re.test(node.rawName))) {
+        // ignore
+        return false
+      }
+
+      if (!registeredComponentsOnly) {
+        // If the user specifies registeredComponentsOnly as false, it checks all component tags.
+        if (
+          (!utils.isHtmlElementNode(node) && !utils.isSvgElementNode(node)) ||
+          utils.isHtmlWellKnownElementName(node.rawName) ||
+          utils.isSvgWellKnownElementName(node.rawName)
+        ) {
+          return false
+        }
+        return true
+      }
+      // We only verify the components registered in the component.
+      if (
+        registeredComponents
+          .filter((name) => casing.isPascalCase(name)) // When defining a component with PascalCase, you can use either case
+          .some(
+            (name) =>
+              node.rawName === name || casing.pascalCase(node.rawName) === name
+          )
+      ) {
+        return true
+      }
+
+      return false
+    }
+
+    let hasInvalidEOF = false
+
+    return utils.defineTemplateBodyVisitor(
+      context,
+      {
+        VElement(node) {
+          if (hasInvalidEOF) {
+            return
+          }
+
+          if (!isVerifyTarget(node)) {
+            return
+          }
+
+          const name = node.rawName
+          if (!casing.getChecker(caseType)(name)) {
+            const startTag = node.startTag
+            const open = tokens.getFirstToken(startTag)
+            const casingName = casing.getExactConverter(caseType)(name)
+            context.report({
+              node: open,
+              loc: open.loc,
+              message: 'Component name "{{name}}" is not {{caseType}}.',
+              data: {
+                name,
+                caseType
+              },
+              *fix(fixer) {
+                yield fixer.replaceText(open, `<${casingName}`)
+                const endTag = node.endTag
+                if (endTag) {
+                  const endTagOpen = tokens.getFirstToken(endTag)
+                  yield fixer.replaceText(endTagOpen, `</${casingName}`)
+                }
+              }
+            })
+          }
+        }
+      },
+      {
+        Program(node) {
+          hasInvalidEOF = utils.hasInvalidEOF(node)
+        },
+        ...(registeredComponentsOnly
+          ? utils.executeOnVue(context, (obj) => {
+              registeredComponents.push(
+                ...utils.getRegisteredComponents(obj).map((n) => n.name)
+              )
+            })
+          : {})
+      }
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/component-tags-order.js b/server/node_modules/eslint-plugin-vue/lib/rules/component-tags-order.js
new file mode 100644
index 0000000000000000000000000000000000000000..b2a2692a87322718c0f532c22482230e38fa2339
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/component-tags-order.js
@@ -0,0 +1,131 @@
+/**
+ * @author Yosuke Ota
+ * issue https://github.com/vuejs/eslint-plugin-vue/issues/140
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+const DEFAULT_ORDER = Object.freeze([['script', 'template'], 'style'])
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'enforce order of component top-level elements',
+      categories: ['vue3-recommended', 'recommended'],
+      url: 'https://eslint.vuejs.org/rules/component-tags-order.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          order: {
+            type: 'array',
+            items: {
+              anyOf: [
+                { type: 'string' },
+                { type: 'array', items: { type: 'string' }, uniqueItems: true }
+              ]
+            },
+            uniqueItems: true,
+            additionalItems: false
+          }
+        }
+      }
+    ],
+    messages: {
+      unexpected:
+        'The <{{name}}> should be above the <{{firstUnorderedName}}> on line {{line}}.'
+    }
+  },
+  /**
+   * @param {RuleContext} context - The rule context.
+   * @returns {RuleListener} AST event handlers.
+   */
+  create(context) {
+    /** @type {Map<string, number>} */
+    const orderMap = new Map()
+    /** @type {(string|string[])[]} */
+    const orderOptions =
+      (context.options[0] && context.options[0].order) || DEFAULT_ORDER
+    orderOptions.forEach((nameOrNames, index) => {
+      if (Array.isArray(nameOrNames)) {
+        for (const name of nameOrNames) {
+          orderMap.set(name, index)
+        }
+      } else {
+        orderMap.set(nameOrNames, index)
+      }
+    })
+
+    /**
+     * @param {string} name
+     */
+    function getOrderPosition(name) {
+      const num = orderMap.get(name)
+      return num == null ? -1 : num
+    }
+    const documentFragment =
+      context.parserServices.getDocumentFragment &&
+      context.parserServices.getDocumentFragment()
+
+    function getTopLevelHTMLElements() {
+      if (documentFragment) {
+        return documentFragment.children.filter(utils.isVElement)
+      }
+      return []
+    }
+
+    /**
+     * @param {VElement} element
+     * @param {VElement} firstUnorderedElement
+     */
+    function report(element, firstUnorderedElement) {
+      context.report({
+        node: element,
+        loc: element.loc,
+        messageId: 'unexpected',
+        data: {
+          name: element.name,
+          firstUnorderedName: firstUnorderedElement.name,
+          line: firstUnorderedElement.loc.start.line
+        }
+      })
+    }
+
+    return {
+      Program(node) {
+        if (utils.hasInvalidEOF(node)) {
+          return
+        }
+        const elements = getTopLevelHTMLElements()
+
+        elements.forEach((element, index) => {
+          const expectedIndex = getOrderPosition(element.name)
+          if (expectedIndex < 0) {
+            return
+          }
+          const firstUnordered = elements
+            .slice(0, index)
+            .filter((e) => expectedIndex < getOrderPosition(e.name))
+            .sort(
+              (e1, e2) => getOrderPosition(e1.name) - getOrderPosition(e2.name)
+            )[0]
+          if (firstUnordered) {
+            report(element, firstUnordered)
+          }
+        })
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/custom-event-name-casing.js b/server/node_modules/eslint-plugin-vue/lib/rules/custom-event-name-casing.js
new file mode 100644
index 0000000000000000000000000000000000000000..39d9436e785241ebab0ac49d6ad68216cd55ebb9
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/custom-event-name-casing.js
@@ -0,0 +1,263 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const { findVariable } = require('eslint-utils')
+const utils = require('../utils')
+const casing = require('../utils/casing')
+const { toRegExp } = require('../utils/regexp')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+const ALLOWED_CASE_OPTIONS = ['kebab-case', 'camelCase']
+const DEFAULT_CASE = 'kebab-case'
+
+/**
+ * Get the name param node from the given CallExpression
+ * @param {CallExpression} node CallExpression
+ * @returns { Literal & { value: string } | null }
+ */
+function getNameParamNode(node) {
+  const nameLiteralNode = node.arguments[0]
+  if (
+    !nameLiteralNode ||
+    nameLiteralNode.type !== 'Literal' ||
+    typeof nameLiteralNode.value !== 'string'
+  ) {
+    // cannot check
+    return null
+  }
+
+  return /** @type {Literal & { value: string }} */ (nameLiteralNode)
+}
+/**
+ * Get the callee member node from the given CallExpression
+ * @param {CallExpression} node CallExpression
+ */
+function getCalleeMemberNode(node) {
+  const callee = utils.skipChainExpression(node.callee)
+
+  if (callee.type === 'MemberExpression') {
+    const name = utils.getStaticPropertyName(callee)
+    if (name) {
+      return { name, member: callee }
+    }
+  }
+  return null
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+const OBJECT_OPTION_SCHEMA = {
+  type: 'object',
+  properties: {
+    ignores: {
+      type: 'array',
+      items: { type: 'string' },
+      uniqueItems: true,
+      additionalItems: false
+    }
+  },
+  additionalProperties: false
+}
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'enforce specific casing for custom event name',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/custom-event-name-casing.html'
+    },
+    fixable: null,
+    schema: {
+      anyOf: [
+        {
+          type: 'array',
+          items: [
+            {
+              enum: ALLOWED_CASE_OPTIONS
+            },
+            OBJECT_OPTION_SCHEMA
+          ]
+        },
+        // For backward compatibility
+        {
+          type: 'array',
+          items: [OBJECT_OPTION_SCHEMA]
+        }
+      ]
+    },
+    messages: {
+      unexpected: "Custom event name '{{name}}' must be {{caseType}}."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /** @type {Map<ObjectExpression, {contextReferenceIds:Set<Identifier>,emitReferenceIds:Set<Identifier>}>} */
+    const setupContexts = new Map()
+    const options =
+      context.options.length === 1 && typeof context.options[0] !== 'string'
+        ? // For backward compatibility
+          [undefined, context.options[0]]
+        : context.options
+    const caseType = options[0] || DEFAULT_CASE
+    const objectOption = options[1] || {}
+    const caseChecker = casing.getChecker(caseType)
+    /** @type {RegExp[]} */
+    const ignores = (objectOption.ignores || []).map(toRegExp)
+
+    /**
+     * Check whether the given event name is valid.
+     * @param {string} name The name to check.
+     * @returns {boolean} `true` if the given event name is valid.
+     */
+    function isValidEventName(name) {
+      return caseChecker(name) || name.startsWith('update:')
+    }
+
+    /**
+     * @param { Literal & { value: string } } nameLiteralNode
+     */
+    function verify(nameLiteralNode) {
+      const name = nameLiteralNode.value
+      if (isValidEventName(name) || ignores.some((re) => re.test(name))) {
+        return
+      }
+      context.report({
+        node: nameLiteralNode,
+        messageId: 'unexpected',
+        data: {
+          name,
+          caseType
+        }
+      })
+    }
+
+    return utils.defineTemplateBodyVisitor(
+      context,
+      {
+        CallExpression(node) {
+          const callee = node.callee
+          const nameLiteralNode = getNameParamNode(node)
+          if (!nameLiteralNode) {
+            // cannot check
+            return
+          }
+          if (callee.type === 'Identifier' && callee.name === '$emit') {
+            verify(nameLiteralNode)
+          }
+        }
+      },
+      utils.compositingVisitors(
+        utils.defineVueVisitor(context, {
+          onSetupFunctionEnter(node, { node: vueNode }) {
+            const contextParam = utils.skipDefaultParamValue(node.params[1])
+            if (!contextParam) {
+              // no arguments
+              return
+            }
+            if (
+              contextParam.type === 'RestElement' ||
+              contextParam.type === 'ArrayPattern'
+            ) {
+              // cannot check
+              return
+            }
+            const contextReferenceIds = new Set()
+            const emitReferenceIds = new Set()
+            if (contextParam.type === 'ObjectPattern') {
+              const emitProperty = utils.findAssignmentProperty(
+                contextParam,
+                'emit'
+              )
+              if (!emitProperty || emitProperty.value.type !== 'Identifier') {
+                return
+              }
+              const emitParam = emitProperty.value
+              // `setup(props, {emit})`
+              const variable = findVariable(context.getScope(), emitParam)
+              if (!variable) {
+                return
+              }
+              for (const reference of variable.references) {
+                emitReferenceIds.add(reference.identifier)
+              }
+            } else {
+              // `setup(props, context)`
+              const variable = findVariable(context.getScope(), contextParam)
+              if (!variable) {
+                return
+              }
+              for (const reference of variable.references) {
+                contextReferenceIds.add(reference.identifier)
+              }
+            }
+            setupContexts.set(vueNode, {
+              contextReferenceIds,
+              emitReferenceIds
+            })
+          },
+          CallExpression(node, { node: vueNode }) {
+            const nameLiteralNode = getNameParamNode(node)
+            if (!nameLiteralNode) {
+              // cannot check
+              return
+            }
+
+            // verify setup context
+            const setupContext = setupContexts.get(vueNode)
+            if (setupContext) {
+              const { contextReferenceIds, emitReferenceIds } = setupContext
+              if (
+                node.callee.type === 'Identifier' &&
+                emitReferenceIds.has(node.callee)
+              ) {
+                // verify setup(props,{emit}) {emit()}
+                verify(nameLiteralNode)
+              } else {
+                const emit = getCalleeMemberNode(node)
+                if (
+                  emit &&
+                  emit.name === 'emit' &&
+                  emit.member.object.type === 'Identifier' &&
+                  contextReferenceIds.has(emit.member.object)
+                ) {
+                  // verify setup(props,context) {context.emit()}
+                  verify(nameLiteralNode)
+                }
+              }
+            }
+          },
+          onVueObjectExit(node) {
+            setupContexts.delete(node)
+          }
+        }),
+        {
+          CallExpression(node) {
+            const nameLiteralNode = getNameParamNode(node)
+            if (!nameLiteralNode) {
+              // cannot check
+              return
+            }
+            const emit = getCalleeMemberNode(node)
+            // verify $emit
+            if (emit && emit.name === '$emit') {
+              // verify this.$emit()
+              verify(nameLiteralNode)
+            }
+          }
+        }
+      )
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/dot-location.js b/server/node_modules/eslint-plugin-vue/lib/rules/dot-location.js
new file mode 100644
index 0000000000000000000000000000000000000000..08f96127b3d57c9d29d8f498f75bd117ec7b7345
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/dot-location.js
@@ -0,0 +1,9 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('dot-location')
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/dot-notation.js b/server/node_modules/eslint-plugin-vue/lib/rules/dot-notation.js
new file mode 100644
index 0000000000000000000000000000000000000000..712658967e47aac95ab3ef93c48581ba773878e2
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/dot-notation.js
@@ -0,0 +1,9 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('dot-notation')
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/eqeqeq.js b/server/node_modules/eslint-plugin-vue/lib/rules/eqeqeq.js
new file mode 100644
index 0000000000000000000000000000000000000000..39894e1fc0adf999073f232196c221d51246ea48
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/eqeqeq.js
@@ -0,0 +1,9 @@
+/**
+ * @author Toru Nagashima
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('eqeqeq')
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/experimental-script-setup-vars.js b/server/node_modules/eslint-plugin-vue/lib/rules/experimental-script-setup-vars.js
new file mode 100644
index 0000000000000000000000000000000000000000..b209376d6470600e5d3e07278b724a4ef4362162
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/experimental-script-setup-vars.js
@@ -0,0 +1,228 @@
+/**
+ * @fileoverview prevent variables defined in `<script setup>` to be marked as undefined
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const Module = require('module')
+const path = require('path')
+const utils = require('../utils')
+const AST = require('vue-eslint-parser').AST
+
+const ecmaVersion = 2020
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'prevent variables defined in `<script setup>` to be marked as undefined', // eslint-disable-line consistent-docs-description
+      categories: ['base'],
+      url: 'https://eslint.vuejs.org/rules/experimental-script-setup-vars.html'
+    },
+    schema: []
+  },
+  /**
+   * @param {RuleContext} context - The rule context.
+   * @returns {RuleListener} AST event handlers.
+   */
+  create(context) {
+    const documentFragment =
+      context.parserServices.getDocumentFragment &&
+      context.parserServices.getDocumentFragment()
+    if (!documentFragment) {
+      return {}
+    }
+    const sourceCode = context.getSourceCode()
+    const scriptElement = documentFragment.children
+      .filter(utils.isVElement)
+      .find(
+        (element) =>
+          element.name === 'script' &&
+          element.range[0] <= sourceCode.ast.range[0] &&
+          sourceCode.ast.range[1] <= element.range[1]
+      )
+    if (!scriptElement) {
+      return {}
+    }
+    const setupAttr = utils.getAttribute(scriptElement, 'setup')
+    if (!setupAttr || !setupAttr.value) {
+      return {}
+    }
+    const value = setupAttr.value.value
+
+    let eslintScope
+    try {
+      eslintScope = getESLintModule('eslint-scope', () =>
+        // @ts-ignore
+        require('eslint-scope')
+      )
+    } catch (_e) {
+      context.report({
+        node: setupAttr,
+        message: 'Can not be resolved eslint-scope.'
+      })
+      return {}
+    }
+    let espree
+    try {
+      espree = getESLintModule('espree', () =>
+        // @ts-ignore
+        require('espree')
+      )
+    } catch (_e) {
+      context.report({
+        node: setupAttr,
+        message: 'Can not be resolved espree.'
+      })
+      return {}
+    }
+
+    const globalScope = sourceCode.scopeManager.scopes[0]
+
+    /** @type {string[]} */
+    let vars
+    try {
+      vars = parseSetup(value, espree, eslintScope)
+    } catch (_e) {
+      context.report({
+        node: setupAttr.value,
+        message: 'Parsing error.'
+      })
+      return {}
+    }
+
+    // Define configured global variables.
+    for (const id of vars) {
+      const tempVariable = globalScope.set.get(id)
+
+      /** @type {Variable} */
+      let variable
+      if (!tempVariable) {
+        variable = new eslintScope.Variable(id, globalScope)
+
+        globalScope.variables.push(variable)
+        globalScope.set.set(id, variable)
+      } else {
+        variable = tempVariable
+      }
+
+      variable.eslintImplicitGlobalSetting = 'readonly'
+      variable.eslintExplicitGlobal = undefined
+      variable.eslintExplicitGlobalComments = undefined
+      variable.writeable = false
+    }
+
+    /*
+     * "through" contains all references which definitions cannot be found.
+     * Since we augment the global scope using configuration, we need to update
+     * references and remove the ones that were added by configuration.
+     */
+    globalScope.through = globalScope.through.filter((reference) => {
+      const name = reference.identifier.name
+      const variable = globalScope.set.get(name)
+
+      if (variable) {
+        /*
+         * Links the variable and the reference.
+         * And this reference is removed from `Scope#through`.
+         */
+        reference.resolved = variable
+        variable.references.push(reference)
+
+        return false
+      }
+
+      return true
+    })
+
+    return {}
+  }
+}
+
+/**
+ * @param {string} code
+ * @param {any} espree
+ * @param {any} eslintScope
+ * @returns {string[]}
+ */
+function parseSetup(code, espree, eslintScope) {
+  /** @type {Program} */
+  const ast = espree.parse(`(${code})=>{}`, { ecmaVersion })
+  const result = eslintScope.analyze(ast, {
+    ignoreEval: true,
+    nodejsScope: false,
+    ecmaVersion,
+    sourceType: 'script',
+    fallback: AST.getFallbackKeys
+  })
+
+  const variables = /** @type {Variable[]} */ (result.globalScope.childScopes[0]
+    .variables)
+
+  return variables.map((v) => v.name)
+}
+
+const createRequire =
+  // Added in v12.2.0
+  Module.createRequire ||
+  // Added in v10.12.0, but deprecated in v12.2.0.
+  Module.createRequireFromPath ||
+  // Polyfill - This is not executed on the tests on node@>=10.
+  /**
+   * @param {string} filename
+   */
+  function (filename) {
+    const mod = new Module(filename)
+
+    mod.filename = filename
+    // @ts-ignore
+    mod.paths = Module._nodeModulePaths(path.dirname(filename))
+    // @ts-ignore
+    mod._compile('module.exports = require;', filename)
+    return mod.exports
+  }
+
+/** @type { { 'espree'?: any, 'eslint-scope'?: any } } */
+const modulesCache = {}
+
+/**
+ * @param {string} p
+ */
+function isLinterPath(p) {
+  return (
+    // ESLint 6 and above
+    p.includes(`eslint${path.sep}lib${path.sep}linter${path.sep}linter.js`) ||
+    // ESLint 5
+    p.includes(`eslint${path.sep}lib${path.sep}linter.js`)
+  )
+}
+
+/**
+ * Load module from the loaded ESLint.
+ * If the loaded ESLint was not found, just returns `fallback()`.
+ * @param {'espree' | 'eslint-scope'} name
+ * @param { () => any } fallback
+ */
+function getESLintModule(name, fallback) {
+  if (!modulesCache[name]) {
+    // Lookup the loaded eslint
+    const linterPath = Object.keys(require.cache).find(isLinterPath)
+    if (linterPath) {
+      try {
+        modulesCache[name] = createRequire(linterPath)(name)
+      } catch (_e) {
+        // ignore
+      }
+    }
+    if (!modulesCache[name]) {
+      modulesCache[name] = fallback()
+    }
+  }
+
+  return modulesCache[name]
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/func-call-spacing.js b/server/node_modules/eslint-plugin-vue/lib/rules/func-call-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..9fb96ab3904c1037e7f04e780e0d2fdbc1e79669
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/func-call-spacing.js
@@ -0,0 +1,11 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('func-call-spacing', {
+  skipDynamicArguments: true
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/html-closing-bracket-newline.js b/server/node_modules/eslint-plugin-vue/lib/rules/html-closing-bracket-newline.js
new file mode 100644
index 0000000000000000000000000000000000000000..6963de8f1bcc3a3ad3e5c0356fb9e97b928607ce
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/html-closing-bracket-newline.js
@@ -0,0 +1,115 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2016 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * @param {number} lineBreaks
+ */
+function getPhrase(lineBreaks) {
+  switch (lineBreaks) {
+    case 0:
+      return 'no line breaks'
+    case 1:
+      return '1 line break'
+    default:
+      return `${lineBreaks} line breaks`
+  }
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'layout',
+    docs: {
+      description:
+        "require or disallow a line break before tag's closing brackets",
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/html-closing-bracket-newline.html'
+    },
+    fixable: 'whitespace',
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          singleline: { enum: ['always', 'never'] },
+          multiline: { enum: ['always', 'never'] }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = Object.assign(
+      {},
+      {
+        singleline: 'never',
+        multiline: 'always'
+      },
+      context.options[0] || {}
+    )
+    const template =
+      context.parserServices.getTemplateBodyTokenStore &&
+      context.parserServices.getTemplateBodyTokenStore()
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VStartTag | VEndTag} node */
+      'VStartTag, VEndTag'(node) {
+        const closingBracketToken = template.getLastToken(node)
+        if (
+          closingBracketToken.type !== 'HTMLSelfClosingTagClose' &&
+          closingBracketToken.type !== 'HTMLTagClose'
+        ) {
+          return
+        }
+
+        const prevToken = template.getTokenBefore(closingBracketToken)
+        const type =
+          node.loc.start.line === prevToken.loc.end.line
+            ? 'singleline'
+            : 'multiline'
+        const expectedLineBreaks = options[type] === 'always' ? 1 : 0
+        const actualLineBreaks =
+          closingBracketToken.loc.start.line - prevToken.loc.end.line
+
+        if (actualLineBreaks !== expectedLineBreaks) {
+          context.report({
+            node,
+            loc: {
+              start: prevToken.loc.end,
+              end: closingBracketToken.loc.start
+            },
+            message:
+              'Expected {{expected}} before closing bracket, but {{actual}} found.',
+            data: {
+              expected: getPhrase(expectedLineBreaks),
+              actual: getPhrase(actualLineBreaks)
+            },
+            fix(fixer) {
+              /** @type {Range} */
+              const range = [prevToken.range[1], closingBracketToken.range[0]]
+              const text = '\n'.repeat(expectedLineBreaks)
+              return fixer.replaceTextRange(range, text)
+            }
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/html-closing-bracket-spacing.js b/server/node_modules/eslint-plugin-vue/lib/rules/html-closing-bracket-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..95de6d01f7727d74c2c8dc1d2e3276939dafff28
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/html-closing-bracket-spacing.js
@@ -0,0 +1,137 @@
+/**
+ * @author Toru Nagashima <https://github.com/mysticatea>
+ */
+
+'use strict'
+
+// -----------------------------------------------------------------------------
+// Requirements
+// -----------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// -----------------------------------------------------------------------------
+// Helpers
+// -----------------------------------------------------------------------------
+
+/**
+ * @typedef { {startTag?:"always"|"never",endTag?:"always"|"never",selfClosingTag?:"always"|"never"} } Options
+ */
+
+/**
+ * Normalize options.
+ * @param {Options} options The options user configured.
+ * @param {ParserServices.TokenStore} tokens The token store of template body.
+ * @returns {Options & { detectType: (node: VStartTag | VEndTag) => 'never' | 'always' | null }} The normalized options.
+ */
+function parseOptions(options, tokens) {
+  const opts = Object.assign(
+    {
+      startTag: 'never',
+      endTag: 'never',
+      selfClosingTag: 'always'
+    },
+    options
+  )
+  return Object.assign(opts, {
+    /**
+     * @param {VStartTag | VEndTag} node
+     * @returns {'never' | 'always' | null}
+     */
+    detectType(node) {
+      const openType = tokens.getFirstToken(node).type
+      const closeType = tokens.getLastToken(node).type
+
+      if (openType === 'HTMLEndTagOpen' && closeType === 'HTMLTagClose') {
+        return opts.endTag
+      }
+      if (openType === 'HTMLTagOpen' && closeType === 'HTMLTagClose') {
+        return opts.startTag
+      }
+      if (
+        openType === 'HTMLTagOpen' &&
+        closeType === 'HTMLSelfClosingTagClose'
+      ) {
+        return opts.selfClosingTag
+      }
+      return null
+    }
+  })
+}
+
+// -----------------------------------------------------------------------------
+// Rule Definition
+// -----------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'layout',
+    docs: {
+      description: "require or disallow a space before tag's closing brackets",
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/html-closing-bracket-spacing.html'
+    },
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          startTag: { enum: ['always', 'never'] },
+          endTag: { enum: ['always', 'never'] },
+          selfClosingTag: { enum: ['always', 'never'] }
+        },
+        additionalProperties: false
+      }
+    ],
+    fixable: 'whitespace'
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const sourceCode = context.getSourceCode()
+    const tokens =
+      context.parserServices.getTemplateBodyTokenStore &&
+      context.parserServices.getTemplateBodyTokenStore()
+    const options = parseOptions(context.options[0], tokens)
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VStartTag | VEndTag} node */
+      'VStartTag, VEndTag'(node) {
+        const type = options.detectType(node)
+        const lastToken = tokens.getLastToken(node)
+        const prevToken = tokens.getLastToken(node, 1)
+
+        // Skip if EOF exists in the tag or linebreak exists before `>`.
+        if (
+          type == null ||
+          prevToken == null ||
+          prevToken.loc.end.line !== lastToken.loc.start.line
+        ) {
+          return
+        }
+
+        // Check and report.
+        const hasSpace = prevToken.range[1] !== lastToken.range[0]
+        if (type === 'always' && !hasSpace) {
+          context.report({
+            node,
+            loc: lastToken.loc,
+            message: "Expected a space before '{{bracket}}', but not found.",
+            data: { bracket: sourceCode.getText(lastToken) },
+            fix: (fixer) => fixer.insertTextBefore(lastToken, ' ')
+          })
+        } else if (type === 'never' && hasSpace) {
+          context.report({
+            node,
+            loc: {
+              start: prevToken.loc.end,
+              end: lastToken.loc.end
+            },
+            message: "Expected no space before '{{bracket}}', but found.",
+            data: { bracket: sourceCode.getText(lastToken) },
+            fix: (fixer) =>
+              fixer.removeRange([prevToken.range[1], lastToken.range[0]])
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/html-comment-content-newline.js b/server/node_modules/eslint-plugin-vue/lib/rules/html-comment-content-newline.js
new file mode 100644
index 0000000000000000000000000000000000000000..3985f7d523626f1cf4118b36954d4c45b97c56c6
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/html-comment-content-newline.js
@@ -0,0 +1,215 @@
+/**
+ * @author Yosuke ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// -----------------------------------------------------------------------------
+// Requirements
+// -----------------------------------------------------------------------------
+
+const htmlComments = require('../utils/html-comments')
+
+/**
+ * @typedef { import('../utils/html-comments').ParsedHTMLComment } ParsedHTMLComment
+ */
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * @param {any} param
+ */
+function parseOption(param) {
+  if (param && typeof param === 'string') {
+    return {
+      singleline: param,
+      multiline: param
+    }
+  }
+  return Object.assign(
+    {
+      singleline: 'never',
+      multiline: 'always'
+    },
+    param
+  )
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'layout',
+
+    docs: {
+      description: 'enforce unified line brake in HTML comments',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/html-comment-content-newline.html'
+    },
+    fixable: 'whitespace',
+    schema: [
+      {
+        anyOf: [
+          {
+            enum: ['always', 'never']
+          },
+          {
+            type: 'object',
+            properties: {
+              singleline: { enum: ['always', 'never', 'ignore'] },
+              multiline: { enum: ['always', 'never', 'ignore'] }
+            },
+            additionalProperties: false
+          }
+        ]
+      },
+      {
+        type: 'object',
+        properties: {
+          exceptions: {
+            type: 'array',
+            items: {
+              type: 'string'
+            }
+          }
+        },
+        additionalProperties: false
+      }
+    ],
+    messages: {
+      expectedAfterHTMLCommentOpen: "Expected line break after '<!--'.",
+      expectedBeforeHTMLCommentOpen: "Expected line break before '-->'.",
+      expectedAfterExceptionBlock: 'Expected line break after exception block.',
+      expectedBeforeExceptionBlock:
+        'Expected line break before exception block.',
+      unexpectedAfterHTMLCommentOpen: "Unexpected line breaks after '<!--'.",
+      unexpectedBeforeHTMLCommentOpen: "Unexpected line breaks before '-->'."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const option = parseOption(context.options[0])
+    return htmlComments.defineVisitor(
+      context,
+      context.options[1],
+      (comment) => {
+        const { value, openDecoration, closeDecoration } = comment
+        if (!value) {
+          return
+        }
+
+        const startLine = openDecoration
+          ? openDecoration.loc.end.line
+          : value.loc.start.line
+        const endLine = closeDecoration
+          ? closeDecoration.loc.start.line
+          : value.loc.end.line
+        const newlineType =
+          startLine === endLine ? option.singleline : option.multiline
+        if (newlineType === 'ignore') {
+          return
+        }
+        checkCommentOpen(comment, newlineType !== 'never')
+        checkCommentClose(comment, newlineType !== 'never')
+      }
+    )
+
+    /**
+     * Reports the newline before the contents of a given comment if it's invalid.
+     * @param {ParsedHTMLComment} comment - comment data.
+     * @param {boolean} requireNewline - `true` if line breaks are required.
+     * @returns {void}
+     */
+    function checkCommentOpen(comment, requireNewline) {
+      const { value, openDecoration, open } = comment
+      if (!value) {
+        return
+      }
+      const beforeToken = openDecoration || open
+
+      if (requireNewline) {
+        if (beforeToken.loc.end.line < value.loc.start.line) {
+          // Is valid
+          return
+        }
+        context.report({
+          loc: {
+            start: beforeToken.loc.end,
+            end: value.loc.start
+          },
+          messageId: openDecoration
+            ? 'expectedAfterExceptionBlock'
+            : 'expectedAfterHTMLCommentOpen',
+          fix: openDecoration
+            ? undefined
+            : (fixer) => fixer.insertTextAfter(beforeToken, '\n')
+        })
+      } else {
+        if (beforeToken.loc.end.line === value.loc.start.line) {
+          // Is valid
+          return
+        }
+        context.report({
+          loc: {
+            start: beforeToken.loc.end,
+            end: value.loc.start
+          },
+          messageId: 'unexpectedAfterHTMLCommentOpen',
+          fix: (fixer) =>
+            fixer.replaceTextRange([beforeToken.range[1], value.range[0]], ' ')
+        })
+      }
+    }
+
+    /**
+     * Reports the space after the contents of a given comment if it's invalid.
+     * @param {ParsedHTMLComment} comment - comment data.
+     * @param {boolean} requireNewline - `true` if line breaks are required.
+     * @returns {void}
+     */
+    function checkCommentClose(comment, requireNewline) {
+      const { value, closeDecoration, close } = comment
+      if (!value) {
+        return
+      }
+      const afterToken = closeDecoration || close
+
+      if (requireNewline) {
+        if (value.loc.end.line < afterToken.loc.start.line) {
+          // Is valid
+          return
+        }
+        context.report({
+          loc: {
+            start: value.loc.end,
+            end: afterToken.loc.start
+          },
+          messageId: closeDecoration
+            ? 'expectedBeforeExceptionBlock'
+            : 'expectedBeforeHTMLCommentOpen',
+          fix: closeDecoration
+            ? undefined
+            : (fixer) => fixer.insertTextBefore(afterToken, '\n')
+        })
+      } else {
+        if (value.loc.end.line === afterToken.loc.start.line) {
+          // Is valid
+          return
+        }
+        context.report({
+          loc: {
+            start: value.loc.end,
+            end: afterToken.loc.start
+          },
+          messageId: 'unexpectedBeforeHTMLCommentOpen',
+          fix: (fixer) =>
+            fixer.replaceTextRange([value.range[1], afterToken.range[0]], ' ')
+        })
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/html-comment-content-spacing.js b/server/node_modules/eslint-plugin-vue/lib/rules/html-comment-content-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..b4f31672a5975df90894e087b0f08f794fb25329
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/html-comment-content-spacing.js
@@ -0,0 +1,179 @@
+/**
+ * @author Yosuke ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// -----------------------------------------------------------------------------
+// Requirements
+// -----------------------------------------------------------------------------
+
+const htmlComments = require('../utils/html-comments')
+
+/**
+ * @typedef { import('../utils/html-comments').ParsedHTMLComment } ParsedHTMLComment
+ */
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'layout',
+
+    docs: {
+      description: 'enforce unified spacing in HTML comments',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/html-comment-content-spacing.html'
+    },
+    fixable: 'whitespace',
+    schema: [
+      {
+        enum: ['always', 'never']
+      },
+      {
+        type: 'object',
+        properties: {
+          exceptions: {
+            type: 'array',
+            items: {
+              type: 'string'
+            }
+          }
+        },
+        additionalProperties: false
+      }
+    ],
+    messages: {
+      expectedAfterHTMLCommentOpen: "Expected space after '<!--'.",
+      expectedBeforeHTMLCommentOpen: "Expected space before '-->'.",
+      expectedAfterExceptionBlock: 'Expected space after exception block.',
+      expectedBeforeExceptionBlock: 'Expected space before exception block.',
+      unexpectedAfterHTMLCommentOpen: "Unexpected space after '<!--'.",
+      unexpectedBeforeHTMLCommentOpen: "Unexpected space before '-->'."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    // Unless the first option is never, require a space
+    const requireSpace = context.options[0] !== 'never'
+    return htmlComments.defineVisitor(
+      context,
+      context.options[1],
+      (comment) => {
+        checkCommentOpen(comment)
+        checkCommentClose(comment)
+      },
+      { includeDirectives: true }
+    )
+
+    /**
+     * Reports the space before the contents of a given comment if it's invalid.
+     * @param {ParsedHTMLComment} comment - comment data.
+     * @returns {void}
+     */
+    function checkCommentOpen(comment) {
+      const { value, openDecoration, open } = comment
+      if (!value) {
+        return
+      }
+      const beforeToken = openDecoration || open
+      if (beforeToken.loc.end.line !== value.loc.start.line) {
+        // Ignore newline
+        return
+      }
+
+      if (requireSpace) {
+        if (beforeToken.range[1] < value.range[0]) {
+          // Is valid
+          return
+        }
+        context.report({
+          loc: {
+            start: beforeToken.loc.end,
+            end: value.loc.start
+          },
+          messageId: openDecoration
+            ? 'expectedAfterExceptionBlock'
+            : 'expectedAfterHTMLCommentOpen',
+          fix: openDecoration
+            ? undefined
+            : (fixer) => fixer.insertTextAfter(beforeToken, ' ')
+        })
+      } else {
+        if (openDecoration) {
+          // Ignore expection block
+          return
+        }
+        if (beforeToken.range[1] === value.range[0]) {
+          // Is valid
+          return
+        }
+        context.report({
+          loc: {
+            start: beforeToken.loc.end,
+            end: value.loc.start
+          },
+          messageId: 'unexpectedAfterHTMLCommentOpen',
+          fix: (fixer) =>
+            fixer.removeRange([beforeToken.range[1], value.range[0]])
+        })
+      }
+    }
+
+    /**
+     * Reports the space after the contents of a given comment if it's invalid.
+     * @param {ParsedHTMLComment} comment - comment data.
+     * @returns {void}
+     */
+    function checkCommentClose(comment) {
+      const { value, closeDecoration, close } = comment
+      if (!value) {
+        return
+      }
+      const afterToken = closeDecoration || close
+      if (value.loc.end.line !== afterToken.loc.start.line) {
+        // Ignore newline
+        return
+      }
+
+      if (requireSpace) {
+        if (value.range[1] < afterToken.range[0]) {
+          // Is valid
+          return
+        }
+        context.report({
+          loc: {
+            start: value.loc.end,
+            end: afterToken.loc.start
+          },
+          messageId: closeDecoration
+            ? 'expectedBeforeExceptionBlock'
+            : 'expectedBeforeHTMLCommentOpen',
+          fix: closeDecoration
+            ? undefined
+            : (fixer) => fixer.insertTextBefore(afterToken, ' ')
+        })
+      } else {
+        if (closeDecoration) {
+          // Ignore expection block
+          return
+        }
+        if (value.range[1] === afterToken.range[0]) {
+          // Is valid
+          return
+        }
+        context.report({
+          loc: {
+            start: value.loc.end,
+            end: afterToken.loc.start
+          },
+          messageId: 'unexpectedBeforeHTMLCommentOpen',
+          fix: (fixer) =>
+            fixer.removeRange([value.range[1], afterToken.range[0]])
+        })
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/html-comment-indent.js b/server/node_modules/eslint-plugin-vue/lib/rules/html-comment-indent.js
new file mode 100644
index 0000000000000000000000000000000000000000..d5992b59b1587cc7e3f3fc90d50cb5aceab91fe0
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/html-comment-indent.js
@@ -0,0 +1,258 @@
+/**
+ * @author Yosuke ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// -----------------------------------------------------------------------------
+// Requirements
+// -----------------------------------------------------------------------------
+
+const htmlComments = require('../utils/html-comments')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Normalize options.
+ * @param {number|"tab"|undefined} type The type of indentation.
+ * @returns { { indentChar: string, indentSize: number, indentText: string } } Normalized options.
+ */
+function parseOptions(type) {
+  const ret = {
+    indentChar: ' ',
+    indentSize: 2,
+    indentText: ''
+  }
+
+  if (Number.isSafeInteger(type)) {
+    ret.indentSize = Number(type)
+  } else if (type === 'tab') {
+    ret.indentChar = '\t'
+    ret.indentSize = 1
+  }
+  ret.indentText = ret.indentChar.repeat(ret.indentSize)
+
+  return ret
+}
+
+/**
+ * @param {string} s
+ * @param {string} [unitChar]
+ */
+function toDisplay(s, unitChar) {
+  if (s.length === 0 && unitChar) {
+    return `0 ${toUnit(unitChar)}s`
+  }
+  const char = s[0]
+  if (char === ' ' || char === '\t') {
+    if (s.split('').every((c) => c === char)) {
+      return `${s.length} ${toUnit(char)}${s.length === 1 ? '' : 's'}`
+    }
+  }
+
+  return JSON.stringify(s)
+}
+
+/** @param {string} char */
+function toUnit(char) {
+  if (char === '\t') {
+    return 'tab'
+  }
+  if (char === ' ') {
+    return 'space'
+  }
+  return JSON.stringify(char)
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'layout',
+
+    docs: {
+      description: 'enforce consistent indentation in HTML comments',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/html-comment-indent.html'
+    },
+    fixable: 'whitespace',
+    schema: [
+      {
+        anyOf: [{ type: 'integer', minimum: 0 }, { enum: ['tab'] }]
+      }
+    ],
+    messages: {
+      unexpectedBaseIndentation:
+        'Expected base point indentation of {{expected}}, but found {{actual}}.',
+      missingBaseIndentation:
+        'Expected base point indentation of {{expected}}, but not found.',
+      unexpectedIndentationCharacter:
+        'Expected {{expected}} character, but found {{actual}} character.',
+      unexpectedIndentation:
+        'Expected indentation of {{expected}} but found {{actual}}.',
+      unexpectedRelativeIndentation:
+        'Expected relative indentation of {{expected}} but found {{actual}}.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = parseOptions(context.options[0])
+    const sourceCode = context.getSourceCode()
+    return htmlComments.defineVisitor(
+      context,
+      null,
+      (comment) => {
+        const baseIndentText = getLineIndentText(comment.open.loc.start.line)
+        let endLine
+        if (comment.value) {
+          const startLine = comment.value.loc.start.line
+          endLine = comment.value.loc.end.line
+
+          const checkStartLine =
+            comment.open.loc.end.line === startLine ? startLine + 1 : startLine
+
+          for (let line = checkStartLine; line <= endLine; line++) {
+            validateIndentForLine(line, baseIndentText, 1)
+          }
+        } else {
+          endLine = comment.open.loc.end.line
+        }
+
+        if (endLine < comment.close.loc.start.line) {
+          // `-->`
+          validateIndentForLine(comment.close.loc.start.line, baseIndentText, 0)
+        }
+      },
+      { includeDirectives: true }
+    )
+
+    /**
+     * Checks whether the given line is a blank line.
+     * @param {number} line The number of line. Begins with 1.
+     * @returns {boolean} `true` if the given line is a blank line
+     */
+    function isEmptyLine(line) {
+      const lineText = sourceCode.getLines()[line - 1]
+      return !lineText.trim()
+    }
+
+    /**
+     * Get the actual indentation of the given line.
+     * @param {number} line The number of line. Begins with 1.
+     * @returns {string} The actual indentation text
+     */
+    function getLineIndentText(line) {
+      const lineText = sourceCode.getLines()[line - 1]
+      const charIndex = lineText.search(/\S/)
+      // already checked
+      // if (charIndex < 0) {
+      //   return lineText
+      // }
+      return lineText.slice(0, charIndex)
+    }
+
+    /**
+     * Define the function which fixes the problem.
+     * @param {number} line The number of line.
+     * @param {string} actualIndentText The actual indentation text.
+     * @param {string} expectedIndentText The expected indentation text.
+     * @returns { (fixer: RuleFixer) => Fix } The defined function.
+     */
+    function defineFix(line, actualIndentText, expectedIndentText) {
+      return (fixer) => {
+        const start = sourceCode.getIndexFromLoc({
+          line,
+          column: 0
+        })
+        return fixer.replaceTextRange(
+          [start, start + actualIndentText.length],
+          expectedIndentText
+        )
+      }
+    }
+
+    /**
+     * Validate the indentation of a line.
+     * @param {number} line The number of line. Begins with 1.
+     * @param {string} baseIndentText The expected base indentation text.
+     * @param {number} offset The number of the indentation offset.
+     */
+    function validateIndentForLine(line, baseIndentText, offset) {
+      if (isEmptyLine(line)) {
+        return
+      }
+      const actualIndentText = getLineIndentText(line)
+
+      const expectedOffsetIndentText = options.indentText.repeat(offset)
+      const expectedIndentText = baseIndentText + expectedOffsetIndentText
+
+      // validate base indent
+      if (
+        baseIndentText &&
+        (actualIndentText.length < baseIndentText.length ||
+          !actualIndentText.startsWith(baseIndentText))
+      ) {
+        context.report({
+          loc: {
+            start: { line, column: 0 },
+            end: { line, column: actualIndentText.length }
+          },
+          messageId: actualIndentText
+            ? 'unexpectedBaseIndentation'
+            : 'missingBaseIndentation',
+          data: {
+            expected: toDisplay(baseIndentText),
+            actual: toDisplay(actualIndentText.slice(0, baseIndentText.length))
+          },
+          fix: defineFix(line, actualIndentText, expectedIndentText)
+        })
+        return
+      }
+
+      const actualOffsetIndentText = actualIndentText.slice(
+        baseIndentText.length
+      )
+
+      // validate indent charctor
+      for (let i = 0; i < actualOffsetIndentText.length; ++i) {
+        if (actualOffsetIndentText[i] !== options.indentChar) {
+          context.report({
+            loc: {
+              start: { line, column: baseIndentText.length + i },
+              end: { line, column: baseIndentText.length + i + 1 }
+            },
+            messageId: 'unexpectedIndentationCharacter',
+            data: {
+              expected: toUnit(options.indentChar),
+              actual: toUnit(actualOffsetIndentText[i])
+            },
+            fix: defineFix(line, actualIndentText, expectedIndentText)
+          })
+          return
+        }
+      }
+
+      // validate indent length
+      if (actualOffsetIndentText.length !== expectedOffsetIndentText.length) {
+        context.report({
+          loc: {
+            start: { line, column: baseIndentText.length },
+            end: { line, column: actualIndentText.length }
+          },
+          messageId: baseIndentText
+            ? 'unexpectedRelativeIndentation'
+            : 'unexpectedIndentation',
+          data: {
+            expected: toDisplay(expectedOffsetIndentText, options.indentChar),
+            actual: toDisplay(actualOffsetIndentText, options.indentChar)
+          },
+          fix: defineFix(line, actualIndentText, expectedIndentText)
+        })
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/html-end-tags.js b/server/node_modules/eslint-plugin-vue/lib/rules/html-end-tags.js
new file mode 100644
index 0000000000000000000000000000000000000000..59d2e874f54e1458da50758e9e927657721dfd50
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/html-end-tags.js
@@ -0,0 +1,64 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'enforce end tag style',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/html-end-tags.html'
+    },
+    fixable: 'code',
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    let hasInvalidEOF = false
+
+    return utils.defineTemplateBodyVisitor(
+      context,
+      {
+        VElement(node) {
+          if (hasInvalidEOF) {
+            return
+          }
+
+          const name = node.name
+          const isVoid = utils.isHtmlVoidElementName(name)
+          const isSelfClosing = node.startTag.selfClosing
+          const hasEndTag = node.endTag != null
+
+          if (!isVoid && !hasEndTag && !isSelfClosing) {
+            context.report({
+              node: node.startTag,
+              loc: node.startTag.loc,
+              message: "'<{{name}}>' should have end tag.",
+              data: { name },
+              fix: (fixer) => fixer.insertTextAfter(node, `</${name}>`)
+            })
+          }
+        }
+      },
+      {
+        Program(node) {
+          hasInvalidEOF = utils.hasInvalidEOF(node)
+        }
+      }
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/html-indent.js b/server/node_modules/eslint-plugin-vue/lib/rules/html-indent.js
new file mode 100644
index 0000000000000000000000000000000000000000..6e6149ef5d7ab30f461702c94364f016f975add5
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/html-indent.js
@@ -0,0 +1,81 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2016 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const indentCommon = require('../utils/indent-common')
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  /** @param {RuleContext} context */
+  create(context) {
+    const tokenStore =
+      context.parserServices.getTemplateBodyTokenStore &&
+      context.parserServices.getTemplateBodyTokenStore()
+    const visitor = indentCommon.defineVisitor(context, tokenStore, {
+      baseIndent: 1
+    })
+
+    return utils.defineTemplateBodyVisitor(context, visitor)
+  },
+  meta: {
+    type: 'layout',
+    docs: {
+      description: 'enforce consistent indentation in `<template>`',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/html-indent.html'
+    },
+    fixable: 'whitespace',
+    schema: [
+      {
+        anyOf: [{ type: 'integer', minimum: 1 }, { enum: ['tab'] }]
+      },
+      {
+        type: 'object',
+        properties: {
+          attribute: { type: 'integer', minimum: 0 },
+          baseIndent: { type: 'integer', minimum: 0 },
+          closeBracket: {
+            anyOf: [
+              { type: 'integer', minimum: 0 },
+              {
+                type: 'object',
+                properties: {
+                  startTag: { type: 'integer', minimum: 0 },
+                  endTag: { type: 'integer', minimum: 0 },
+                  selfClosingTag: { type: 'integer', minimum: 0 }
+                },
+                additionalProperties: false
+              }
+            ]
+          },
+          switchCase: { type: 'integer', minimum: 0 },
+          alignAttributesVertically: { type: 'boolean' },
+          ignores: {
+            type: 'array',
+            items: {
+              allOf: [
+                { type: 'string' },
+                { not: { type: 'string', pattern: ':exit$' } },
+                { not: { type: 'string', pattern: '^\\s*$' } }
+              ]
+            },
+            uniqueItems: true,
+            additionalItems: false
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/html-quotes.js b/server/node_modules/eslint-plugin-vue/lib/rules/html-quotes.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f741b21b7647826b754d1902c55285d57d2cc15
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/html-quotes.js
@@ -0,0 +1,107 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'layout',
+    docs: {
+      description: 'enforce quotes style of HTML attributes',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/html-quotes.html'
+    },
+    fixable: 'code',
+    schema: [
+      { enum: ['double', 'single'] },
+      {
+        type: 'object',
+        properties: {
+          avoidEscape: {
+            type: 'boolean'
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const sourceCode = context.getSourceCode()
+    const double = context.options[0] !== 'single'
+    const avoidEscape =
+      context.options[1] && context.options[1].avoidEscape === true
+    const quoteChar = double ? '"' : "'"
+    const quoteName = double ? 'double quotes' : 'single quotes'
+    /** @type {boolean} */
+    let hasInvalidEOF
+
+    return utils.defineTemplateBodyVisitor(
+      context,
+      {
+        'VAttribute[value!=null]'(node) {
+          if (hasInvalidEOF) {
+            return
+          }
+
+          const text = sourceCode.getText(node.value)
+          const firstChar = text[0]
+
+          if (firstChar !== quoteChar) {
+            const quoted = firstChar === "'" || firstChar === '"'
+            if (avoidEscape && quoted) {
+              const contentText = text.slice(1, -1)
+              if (contentText.includes(quoteChar)) {
+                return
+              }
+            }
+
+            context.report({
+              node: node.value,
+              loc: node.value.loc,
+              message: 'Expected to be enclosed by {{kind}}.',
+              data: { kind: quoteName },
+              fix(fixer) {
+                const contentText = quoted ? text.slice(1, -1) : text
+
+                const fixToDouble =
+                  avoidEscape && !quoted && contentText.includes(quoteChar)
+                    ? double
+                      ? contentText.includes("'")
+                      : !contentText.includes('"')
+                    : double
+
+                const quotePattern = fixToDouble ? /"/g : /'/g
+                const quoteEscaped = fixToDouble ? '&quot;' : '&apos;'
+                const fixQuoteChar = fixToDouble ? '"' : "'"
+
+                const replacement =
+                  fixQuoteChar +
+                  contentText.replace(quotePattern, quoteEscaped) +
+                  fixQuoteChar
+                return fixer.replaceText(node.value, replacement)
+              }
+            })
+          }
+        }
+      },
+      {
+        Program(node) {
+          hasInvalidEOF = utils.hasInvalidEOF(node)
+        }
+      }
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/html-self-closing.js b/server/node_modules/eslint-plugin-vue/lib/rules/html-self-closing.js
new file mode 100644
index 0000000000000000000000000000000000000000..b54c206717c4a095c1b080bcd0cae3854a4a6865
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/html-self-closing.js
@@ -0,0 +1,222 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2016 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * These strings wil be displayed in error messages.
+ */
+const ELEMENT_TYPE_MESSAGES = Object.freeze({
+  NORMAL: 'HTML elements',
+  VOID: 'HTML void elements',
+  COMPONENT: 'Vue.js custom components',
+  SVG: 'SVG elements',
+  MATH: 'MathML elements',
+  UNKNOWN: 'unknown elements'
+})
+
+/**
+ * @typedef {object} Options
+ * @property {'always' | 'never'} NORMAL
+ * @property {'always' | 'never'} VOID
+ * @property {'always' | 'never'} COMPONENT
+ * @property {'always' | 'never'} SVG
+ * @property {'always' | 'never'} MATH
+ * @property {null} UNKNOWN
+ */
+
+/**
+ * Normalize the given options.
+ * @param {any} options The raw options object.
+ * @returns {Options} Normalized options.
+ */
+function parseOptions(options) {
+  return {
+    NORMAL: (options && options.html && options.html.normal) || 'always',
+    VOID: (options && options.html && options.html.void) || 'never',
+    COMPONENT: (options && options.html && options.html.component) || 'always',
+    SVG: (options && options.svg) || 'always',
+    MATH: (options && options.math) || 'always',
+    UNKNOWN: null
+  }
+}
+
+/**
+ * Get the elementType of the given element.
+ * @param {VElement} node The element node to get.
+ * @returns {keyof Options} The elementType of the element.
+ */
+function getElementType(node) {
+  if (utils.isCustomComponent(node)) {
+    return 'COMPONENT'
+  }
+  if (utils.isHtmlElementNode(node)) {
+    if (utils.isHtmlVoidElementName(node.name)) {
+      return 'VOID'
+    }
+    return 'NORMAL'
+  }
+  if (utils.isSvgElementNode(node)) {
+    return 'SVG'
+  }
+  if (utils.isMathMLElementNode(node)) {
+    return 'MATH'
+  }
+  return 'UNKNOWN'
+}
+
+/**
+ * Check whether the given element is empty or not.
+ * This ignores whitespaces, doesn't ignore comments.
+ * @param {VElement} node The element node to check.
+ * @param {SourceCode} sourceCode The source code object of the current context.
+ * @returns {boolean} `true` if the element is empty.
+ */
+function isEmpty(node, sourceCode) {
+  const start = node.startTag.range[1]
+  const end = node.endTag != null ? node.endTag.range[0] : node.range[1]
+
+  return sourceCode.text.slice(start, end).trim() === ''
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'layout',
+    docs: {
+      description: 'enforce self-closing style',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/html-self-closing.html'
+    },
+    fixable: 'code',
+    schema: {
+      definitions: {
+        optionValue: {
+          enum: ['always', 'never', 'any']
+        }
+      },
+      type: 'array',
+      items: [
+        {
+          type: 'object',
+          properties: {
+            html: {
+              type: 'object',
+              properties: {
+                normal: { $ref: '#/definitions/optionValue' },
+                void: { $ref: '#/definitions/optionValue' },
+                component: { $ref: '#/definitions/optionValue' }
+              },
+              additionalProperties: false
+            },
+            svg: { $ref: '#/definitions/optionValue' },
+            math: { $ref: '#/definitions/optionValue' }
+          },
+          additionalProperties: false
+        }
+      ],
+      maxItems: 1
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const sourceCode = context.getSourceCode()
+    const options = parseOptions(context.options[0])
+    let hasInvalidEOF = false
+
+    return utils.defineTemplateBodyVisitor(
+      context,
+      {
+        VElement(node) {
+          if (hasInvalidEOF) {
+            return
+          }
+
+          const elementType = getElementType(node)
+          const mode = options[elementType]
+
+          if (
+            mode === 'always' &&
+            !node.startTag.selfClosing &&
+            isEmpty(node, sourceCode)
+          ) {
+            context.report({
+              node,
+              loc: node.loc,
+              message: 'Require self-closing on {{elementType}} (<{{name}}>).',
+              data: {
+                elementType: ELEMENT_TYPE_MESSAGES[elementType],
+                name: node.rawName
+              },
+              fix(fixer) {
+                const tokens = context.parserServices.getTemplateBodyTokenStore()
+                const close = tokens.getLastToken(node.startTag)
+                if (close.type !== 'HTMLTagClose') {
+                  return null
+                }
+                return fixer.replaceTextRange(
+                  [close.range[0], node.range[1]],
+                  '/>'
+                )
+              }
+            })
+          }
+
+          if (mode === 'never' && node.startTag.selfClosing) {
+            context.report({
+              node,
+              loc: node.loc,
+              message:
+                'Disallow self-closing on {{elementType}} (<{{name}}/>).',
+              data: {
+                elementType: ELEMENT_TYPE_MESSAGES[elementType],
+                name: node.rawName
+              },
+              fix(fixer) {
+                const tokens = context.parserServices.getTemplateBodyTokenStore()
+                const close = tokens.getLastToken(node.startTag)
+                if (close.type !== 'HTMLSelfClosingTagClose') {
+                  return null
+                }
+                if (elementType === 'VOID') {
+                  return fixer.replaceText(close, '>')
+                }
+                // If only `close` is targeted for replacement, it conflicts with `component-name-in-template-casing`,
+                // so replace the entire element.
+                // return fixer.replaceText(close, `></${node.rawName}>`)
+                const elementPart = sourceCode.text.slice(
+                  node.range[0],
+                  close.range[0]
+                )
+                return fixer.replaceText(
+                  node,
+                  `${elementPart}></${node.rawName}>`
+                )
+              }
+            })
+          }
+        }
+      },
+      {
+        Program(node) {
+          hasInvalidEOF = utils.hasInvalidEOF(node)
+        }
+      }
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/jsx-uses-vars.js b/server/node_modules/eslint-plugin-vue/lib/rules/jsx-uses-vars.js
new file mode 100644
index 0000000000000000000000000000000000000000..0da5e486fd44049f290b297be883a8de0f3dc619
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/jsx-uses-vars.js
@@ -0,0 +1,73 @@
+// the following rule is based on yannickcr/eslint-plugin-react
+
+/**
+The MIT License (MIT)
+
+Copyright (c) 2014 Yannick Croissant
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+ */
+
+/**
+ * @fileoverview Prevent variables used in JSX to be marked as unused
+ * @author Yannick Croissant
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'prevent variables used in JSX to be marked as unused', // eslint-disable-line consistent-docs-description
+      categories: ['base'],
+      url: 'https://eslint.vuejs.org/rules/jsx-uses-vars.html'
+    },
+    schema: []
+  },
+  /**
+   * @param {RuleContext} context - The rule context.
+   * @returns {RuleListener} AST event handlers.
+   */
+  create(context) {
+    return {
+      JSXOpeningElement(node) {
+        let name
+        if (node.name.type === 'JSXIdentifier') {
+          // <Foo>
+          name = node.name.name
+        } else if (node.name.type === 'JSXMemberExpression') {
+          // <Foo...Bar>
+          let parent = node.name.object
+          while (parent.type === 'JSXMemberExpression') {
+            parent = parent.object
+          }
+          name = parent.name
+        } else {
+          return
+        }
+
+        context.markVariableAsUsed(name)
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/key-spacing.js b/server/node_modules/eslint-plugin-vue/lib/rules/key-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..a949c18a0cc265348cd9de0dd78f2a028758b0a7
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/key-spacing.js
@@ -0,0 +1,11 @@
+/**
+ * @author Toru Nagashima
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('key-spacing', {
+  skipDynamicArguments: true
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/keyword-spacing.js b/server/node_modules/eslint-plugin-vue/lib/rules/keyword-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..af1b2848774d12ed8f21a97d1b1e84350ba1b7a8
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/keyword-spacing.js
@@ -0,0 +1,11 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('keyword-spacing', {
+  skipDynamicArguments: true
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/match-component-file-name.js b/server/node_modules/eslint-plugin-vue/lib/rules/match-component-file-name.js
new file mode 100644
index 0000000000000000000000000000000000000000..8428516fb7ddd26a85539f863b33c613ca7f460a
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/match-component-file-name.js
@@ -0,0 +1,151 @@
+/**
+ * @fileoverview Require component name property to match its file name
+ * @author Rodrigo Pedra Brum <rodrigo.pedra@gmail.com>
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+const casing = require('../utils/casing')
+const path = require('path')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'require component name property to match its file name',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/match-component-file-name.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          extensions: {
+            type: 'array',
+            items: {
+              type: 'string'
+            },
+            uniqueItems: true,
+            additionalItems: false
+          },
+          shouldMatchCase: {
+            type: 'boolean'
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0]
+    const shouldMatchCase = (options && options.shouldMatchCase) || false
+    const extensionsArray = options && options.extensions
+    const allowedExtensions = Array.isArray(extensionsArray)
+      ? extensionsArray
+      : ['jsx']
+
+    const extension = path.extname(context.getFilename())
+    const filename = path.basename(context.getFilename(), extension)
+
+    /** @type {Rule.ReportDescriptor[]} */
+    const errors = []
+    let componentCount = 0
+
+    if (!allowedExtensions.includes(extension.replace(/^\./, ''))) {
+      return {}
+    }
+
+    // ----------------------------------------------------------------------
+    // Private
+    // ----------------------------------------------------------------------
+
+    /**
+     * @param {string} name
+     * @param {string} filename
+     */
+    function compareNames(name, filename) {
+      if (shouldMatchCase) {
+        return name === filename
+      }
+
+      return (
+        casing.pascalCase(name) === filename ||
+        casing.kebabCase(name) === filename
+      )
+    }
+
+    /**
+     * @param {Literal | TemplateLiteral} node
+     */
+    function verifyName(node) {
+      let name
+      if (node.type === 'TemplateLiteral') {
+        const quasis = node.quasis[0]
+        name = quasis.value.cooked
+      } else {
+        name = `${node.value}`
+      }
+
+      if (!compareNames(name, filename)) {
+        errors.push({
+          node,
+          message:
+            'Component name `{{name}}` should match file name `{{filename}}`.',
+          data: { filename, name }
+        })
+      }
+    }
+
+    /**
+     * @param {Expression | SpreadElement} node
+     * @returns {node is (Literal | TemplateLiteral)}
+     */
+    function canVerify(node) {
+      return (
+        node.type === 'Literal' ||
+        (node.type === 'TemplateLiteral' &&
+          node.expressions.length === 0 &&
+          node.quasis.length === 1)
+      )
+    }
+
+    return Object.assign(
+      {},
+      utils.executeOnCallVueComponent(context, (node) => {
+        if (node.arguments.length === 2) {
+          const argument = node.arguments[0]
+
+          if (canVerify(argument)) {
+            verifyName(argument)
+          }
+        }
+      }),
+      utils.executeOnVue(context, (object) => {
+        const node = utils.findProperty(object, 'name')
+
+        componentCount++
+
+        if (!node) return
+        if (!canVerify(node.value)) return
+        verifyName(node.value)
+      }),
+      {
+        'Program:exit'() {
+          if (componentCount > 1) return
+
+          errors.forEach((error) => context.report(error))
+        }
+      }
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/max-attributes-per-line.js b/server/node_modules/eslint-plugin-vue/lib/rules/max-attributes-per-line.js
new file mode 100644
index 0000000000000000000000000000000000000000..8cec636174c813a3d333bfdb0a8cf3182fd1fa2b
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/max-attributes-per-line.js
@@ -0,0 +1,194 @@
+/**
+ * @fileoverview Define the number of attributes allows per line
+ * @author Filipa Lacerda
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+const utils = require('../utils')
+
+module.exports = {
+  meta: {
+    type: 'layout',
+    docs: {
+      description: 'enforce the maximum number of attributes per line',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/max-attributes-per-line.html'
+    },
+    fixable: 'whitespace', // or "code" or "whitespace"
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          singleline: {
+            anyOf: [
+              {
+                type: 'number',
+                minimum: 1
+              },
+              {
+                type: 'object',
+                properties: {
+                  max: {
+                    type: 'number',
+                    minimum: 1
+                  }
+                },
+                additionalProperties: false
+              }
+            ]
+          },
+          multiline: {
+            anyOf: [
+              {
+                type: 'number',
+                minimum: 1
+              },
+              {
+                type: 'object',
+                properties: {
+                  max: {
+                    type: 'number',
+                    minimum: 1
+                  },
+                  allowFirstLine: {
+                    type: 'boolean'
+                  }
+                },
+                additionalProperties: false
+              }
+            ]
+          }
+        }
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const sourceCode = context.getSourceCode()
+    const configuration = parseOptions(context.options[0])
+    const multilineMaximum = configuration.multiline
+    const singlelinemMaximum = configuration.singleline
+    const canHaveFirstLine = configuration.allowFirstLine
+    const template =
+      context.parserServices.getTemplateBodyTokenStore &&
+      context.parserServices.getTemplateBodyTokenStore()
+
+    return utils.defineTemplateBodyVisitor(context, {
+      VStartTag(node) {
+        const numberOfAttributes = node.attributes.length
+
+        if (!numberOfAttributes) return
+
+        if (
+          utils.isSingleLine(node) &&
+          numberOfAttributes > singlelinemMaximum
+        ) {
+          showErrors(node.attributes.slice(singlelinemMaximum))
+        }
+
+        if (!utils.isSingleLine(node)) {
+          if (
+            !canHaveFirstLine &&
+            node.attributes[0].loc.start.line === node.loc.start.line
+          ) {
+            showErrors([node.attributes[0]])
+          }
+
+          groupAttrsByLine(node.attributes)
+            .filter((attrs) => attrs.length > multilineMaximum)
+            .forEach((attrs) => showErrors(attrs.splice(multilineMaximum)))
+        }
+      }
+    })
+
+    // ----------------------------------------------------------------------
+    // Helpers
+    // ----------------------------------------------------------------------
+    /**
+     * @param {any} options
+     */
+    function parseOptions(options) {
+      const defaults = {
+        singleline: 1,
+        multiline: 1,
+        allowFirstLine: false
+      }
+
+      if (options) {
+        if (typeof options.singleline === 'number') {
+          defaults.singleline = options.singleline
+        } else if (options.singleline && options.singleline.max) {
+          defaults.singleline = options.singleline.max
+        }
+
+        if (options.multiline) {
+          if (typeof options.multiline === 'number') {
+            defaults.multiline = options.multiline
+          } else if (typeof options.multiline === 'object') {
+            if (options.multiline.max) {
+              defaults.multiline = options.multiline.max
+            }
+
+            if (options.multiline.allowFirstLine) {
+              defaults.allowFirstLine = options.multiline.allowFirstLine
+            }
+          }
+        }
+      }
+
+      return defaults
+    }
+
+    /**
+     * @param {(VDirective | VAttribute)[]} attributes
+     */
+    function showErrors(attributes) {
+      attributes.forEach((prop, i) => {
+        context.report({
+          node: prop,
+          loc: prop.loc,
+          message: "'{{name}}' should be on a new line.",
+          data: { name: sourceCode.getText(prop.key) },
+          fix(fixer) {
+            if (i !== 0) return null
+
+            // Find the closest token before the current prop
+            // that is not a white space
+            const prevToken = /** @type {Token} */ (template.getTokenBefore(
+              prop,
+              {
+                filter: (token) => token.type !== 'HTMLWhitespace'
+              }
+            ))
+
+            /** @type {Range} */
+            const range = [prevToken.range[1], prop.range[0]]
+
+            return fixer.replaceTextRange(range, '\n')
+          }
+        })
+      })
+    }
+
+    /**
+     * @param {(VDirective | VAttribute)[]} attributes
+     */
+    function groupAttrsByLine(attributes) {
+      const propsPerLine = [[attributes[0]]]
+
+      attributes.reduce((previous, current) => {
+        if (previous.loc.end.line === current.loc.start.line) {
+          propsPerLine[propsPerLine.length - 1].push(current)
+        } else {
+          propsPerLine.push([current])
+        }
+        return current
+      })
+
+      return propsPerLine
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/max-len.js b/server/node_modules/eslint-plugin-vue/lib/rules/max-len.js
new file mode 100644
index 0000000000000000000000000000000000000000..6de8f8953a9c5bb146a3505becac7782237f0e12
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/max-len.js
@@ -0,0 +1,561 @@
+/**
+ * @author Yosuke Ota
+ * @fileoverview Rule to check for max length on a line of Vue file.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Constants
+// ------------------------------------------------------------------------------
+
+const OPTIONS_SCHEMA = {
+  type: 'object',
+  properties: {
+    code: {
+      type: 'integer',
+      minimum: 0
+    },
+    template: {
+      type: 'integer',
+      minimum: 0
+    },
+    comments: {
+      type: 'integer',
+      minimum: 0
+    },
+    tabWidth: {
+      type: 'integer',
+      minimum: 0
+    },
+    ignorePattern: {
+      type: 'string'
+    },
+    ignoreComments: {
+      type: 'boolean'
+    },
+    ignoreTrailingComments: {
+      type: 'boolean'
+    },
+    ignoreUrls: {
+      type: 'boolean'
+    },
+    ignoreStrings: {
+      type: 'boolean'
+    },
+    ignoreTemplateLiterals: {
+      type: 'boolean'
+    },
+    ignoreRegExpLiterals: {
+      type: 'boolean'
+    },
+    ignoreHTMLAttributeValues: {
+      type: 'boolean'
+    },
+    ignoreHTMLTextContents: {
+      type: 'boolean'
+    }
+  },
+  additionalProperties: false
+}
+
+const OPTIONS_OR_INTEGER_SCHEMA = {
+  anyOf: [
+    OPTIONS_SCHEMA,
+    {
+      type: 'integer',
+      minimum: 0
+    }
+  ]
+}
+
+// --------------------------------------------------------------------------
+// Helpers
+// --------------------------------------------------------------------------
+
+/**
+ * Computes the length of a line that may contain tabs. The width of each
+ * tab will be the number of spaces to the next tab stop.
+ * @param {string} line The line.
+ * @param {number} tabWidth The width of each tab stop in spaces.
+ * @returns {number} The computed line length.
+ * @private
+ */
+function computeLineLength(line, tabWidth) {
+  let extraCharacterCount = 0
+
+  const re = /\t/gu
+  let ret
+  while ((ret = re.exec(line))) {
+    const offset = ret.index
+    const totalOffset = offset + extraCharacterCount
+    const previousTabStopOffset = tabWidth ? totalOffset % tabWidth : 0
+    const spaceCount = tabWidth - previousTabStopOffset
+    extraCharacterCount += spaceCount - 1 // -1 for the replaced tab
+  }
+
+  return Array.from(line).length + extraCharacterCount
+}
+
+/**
+ * Tells if a given comment is trailing: it starts on the current line and
+ * extends to or past the end of the current line.
+ * @param {string} line The source line we want to check for a trailing comment on
+ * @param {number} lineNumber The one-indexed line number for line
+ * @param {Token | null} comment The comment to inspect
+ * @returns {comment is Token} If the comment is trailing on the given line
+ */
+function isTrailingComment(line, lineNumber, comment) {
+  return Boolean(
+    comment &&
+      comment.loc.start.line === lineNumber &&
+      lineNumber <= comment.loc.end.line &&
+      (comment.loc.end.line > lineNumber ||
+        comment.loc.end.column === line.length)
+  )
+}
+
+/**
+ * Tells if a comment encompasses the entire line.
+ * @param {string} line The source line with a trailing comment
+ * @param {number} lineNumber The one-indexed line number this is on
+ * @param {Token | null} comment The comment to remove
+ * @returns {boolean} If the comment covers the entire line
+ */
+function isFullLineComment(line, lineNumber, comment) {
+  if (!comment) {
+    return false
+  }
+  const start = comment.loc.start
+  const end = comment.loc.end
+  const 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))
+  )
+}
+
+/**
+ * Gets the line after the comment and any remaining trailing whitespace is
+ * stripped.
+ * @param {string} line The source line with a trailing comment
+ * @param {Token} comment The comment to remove
+ * @returns {string} Line without comment and trailing whitepace
+ */
+function stripTrailingComment(line, comment) {
+  // loc.column is zero-indexed
+  return line.slice(0, comment.loc.start.column).replace(/\s+$/u, '')
+}
+
+/**
+ * Ensure that an array exists at [key] on `object`, and add `value` to it.
+ *
+ * @param { { [key: number]: Token[] } } object the object to mutate
+ * @param {number} key the object's key
+ * @param {Token} value the value to add
+ * @returns {void}
+ * @private
+ */
+function ensureArrayAndPush(object, key, value) {
+  if (!Array.isArray(object[key])) {
+    object[key] = []
+  }
+  object[key].push(value)
+}
+
+/**
+ * A reducer to group an AST node by line number, both start and end.
+ *
+ * @param { { [key: number]: Token[] } } acc the accumulator
+ * @param {Token} node the AST node in question
+ * @returns { { [key: number]: Token[] } } the modified accumulator
+ * @private
+ */
+function groupByLineNumber(acc, node) {
+  for (let i = node.loc.start.line; i <= node.loc.end.line; ++i) {
+    ensureArrayAndPush(acc, i, node)
+  }
+  return acc
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'layout',
+
+    docs: {
+      description: 'enforce a maximum line length',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/max-len.html',
+      extensionRule: true,
+      coreRuleUrl: 'https://eslint.org/docs/rules/max-len'
+    },
+
+    schema: [
+      OPTIONS_OR_INTEGER_SCHEMA,
+      OPTIONS_OR_INTEGER_SCHEMA,
+      OPTIONS_SCHEMA
+    ],
+    messages: {
+      max:
+        'This line has a length of {{lineLength}}. Maximum allowed is {{maxLength}}.',
+      maxComment:
+        'This line has a comment length of {{lineLength}}. Maximum allowed is {{maxCommentLength}}.'
+    }
+  },
+  /**
+   * @param {RuleContext} context - The rule context.
+   * @returns {RuleListener} AST event handlers.
+   */
+  create(context) {
+    /*
+     * Inspired by http://tools.ietf.org/html/rfc3986#appendix-B, however:
+     * - They're matching an entire string that we know is a URI
+     * - We're matching part of a string where we think there *might* be a URL
+     * - We're only concerned about URLs, as picking out any URI would cause
+     *   too many false positives
+     * - We don't care about matching the entire URL, any small segment is fine
+     */
+    const URL_REGEXP = /[^:/?#]:\/\/[^?#]/u
+
+    const sourceCode = context.getSourceCode()
+    /** @type {Token[]} */
+    const tokens = []
+    /** @type {(HTMLComment | HTMLBogusComment | Comment)[]} */
+    const comments = []
+    /** @type {VLiteral[]} */
+    const htmlAttributeValues = []
+
+    // The options object must be the last option specified…
+    const options = Object.assign(
+      {},
+      context.options[context.options.length - 1]
+    )
+
+    // …but max code length…
+    if (typeof context.options[0] === 'number') {
+      options.code = context.options[0]
+    }
+
+    // …and tabWidth can be optionally specified directly as integers.
+    if (typeof context.options[1] === 'number') {
+      options.tabWidth = context.options[1]
+    }
+    /** @type {number} */
+    const scriptMaxLength = typeof options.code === 'number' ? options.code : 80
+    /** @type {number} */
+    const tabWidth = typeof options.tabWidth === 'number' ? options.tabWidth : 2 // default value of `vue/html-indent`
+    /** @type {number} */
+    const templateMaxLength =
+      typeof options.template === 'number' ? options.template : scriptMaxLength
+    const ignoreComments = !!options.ignoreComments
+    const ignoreStrings = !!options.ignoreStrings
+    const ignoreTemplateLiterals = !!options.ignoreTemplateLiterals
+    const ignoreRegExpLiterals = !!options.ignoreRegExpLiterals
+    const ignoreTrailingComments =
+      !!options.ignoreTrailingComments || !!options.ignoreComments
+    const ignoreUrls = !!options.ignoreUrls
+    const ignoreHTMLAttributeValues = !!options.ignoreHTMLAttributeValues
+    const ignoreHTMLTextContents = !!options.ignoreHTMLTextContents
+    /** @type {number} */
+    const maxCommentLength = options.comments
+    /** @type {RegExp} */
+    let ignorePattern = options.ignorePattern || null
+
+    if (ignorePattern) {
+      ignorePattern = new RegExp(ignorePattern, 'u')
+    }
+
+    // --------------------------------------------------------------------------
+    // Helpers
+    // --------------------------------------------------------------------------
+
+    /**
+     * Retrieves an array containing all strings (" or ') in the source code.
+     *
+     * @returns {Token[]} An array of string nodes.
+     */
+    function getAllStrings() {
+      return tokens.filter(
+        (token) =>
+          token.type === 'String' ||
+          (token.type === 'JSXText' &&
+            sourceCode.getNodeByRangeIndex(token.range[0] - 1).type ===
+              'JSXAttribute')
+      )
+    }
+
+    /**
+     * Retrieves an array containing all template literals in the source code.
+     *
+     * @returns {Token[]} An array of template literal nodes.
+     */
+    function getAllTemplateLiterals() {
+      return tokens.filter((token) => token.type === 'Template')
+    }
+
+    /**
+     * Retrieves an array containing all RegExp literals in the source code.
+     *
+     * @returns {Token[]} An array of RegExp literal nodes.
+     */
+    function getAllRegExpLiterals() {
+      return tokens.filter((token) => token.type === 'RegularExpression')
+    }
+
+    /**
+     * Retrieves an array containing all HTML texts in the source code.
+     *
+     * @returns {Token[]} An array of HTML text nodes.
+     */
+    function getAllHTMLTextContents() {
+      return tokens.filter((token) => token.type === 'HTMLText')
+    }
+
+    /**
+     * Check the program for max length
+     * @param {Program} node Node to examine
+     * @returns {void}
+     * @private
+     */
+    function checkProgramForMaxLength(node) {
+      const programNode = node
+      const templateBody = node.templateBody
+
+      // setup tokens
+      const scriptTokens = sourceCode.ast.tokens
+      const scriptComments = sourceCode.getAllComments()
+
+      if (context.parserServices.getTemplateBodyTokenStore && templateBody) {
+        const tokenStore = context.parserServices.getTemplateBodyTokenStore()
+
+        const templateTokens = tokenStore.getTokens(templateBody, {
+          includeComments: true
+        })
+
+        if (templateBody.range[0] < programNode.range[0]) {
+          tokens.push(...templateTokens, ...scriptTokens)
+        } else {
+          tokens.push(...scriptTokens, ...templateTokens)
+        }
+      } else {
+        tokens.push(...scriptTokens)
+      }
+
+      if (ignoreComments || maxCommentLength || ignoreTrailingComments) {
+        // list of comments to ignore
+        if (templateBody) {
+          if (templateBody.range[0] < programNode.range[0]) {
+            comments.push(...templateBody.comments, ...scriptComments)
+          } else {
+            comments.push(...scriptComments, ...templateBody.comments)
+          }
+        } else {
+          comments.push(...scriptComments)
+        }
+      }
+
+      /** @type {Range} */
+      let scriptLinesRange
+      if (scriptTokens.length) {
+        if (scriptComments.length) {
+          scriptLinesRange = [
+            Math.min(
+              scriptTokens[0].loc.start.line,
+              scriptComments[0].loc.start.line
+            ),
+            Math.max(
+              scriptTokens[scriptTokens.length - 1].loc.end.line,
+              scriptComments[scriptComments.length - 1].loc.end.line
+            )
+          ]
+        } else {
+          scriptLinesRange = [
+            scriptTokens[0].loc.start.line,
+            scriptTokens[scriptTokens.length - 1].loc.end.line
+          ]
+        }
+      } else if (scriptComments.length) {
+        scriptLinesRange = [
+          scriptComments[0].loc.start.line,
+          scriptComments[scriptComments.length - 1].loc.end.line
+        ]
+      }
+      const templateLinesRange = templateBody && [
+        templateBody.loc.start.line,
+        templateBody.loc.end.line
+      ]
+
+      // split (honors line-ending)
+      const lines = sourceCode.lines
+
+      const strings = getAllStrings()
+      const stringsByLine = strings.reduce(groupByLineNumber, {})
+
+      const templateLiterals = getAllTemplateLiterals()
+      const templateLiteralsByLine = templateLiterals.reduce(
+        groupByLineNumber,
+        {}
+      )
+
+      const regExpLiterals = getAllRegExpLiterals()
+      const regExpLiteralsByLine = regExpLiterals.reduce(groupByLineNumber, {})
+
+      const htmlAttributeValuesByLine = htmlAttributeValues.reduce(
+        groupByLineNumber,
+        {}
+      )
+
+      const htmlTextContents = getAllHTMLTextContents()
+      const htmlTextContentsByLine = htmlTextContents.reduce(
+        groupByLineNumber,
+        {}
+      )
+
+      const commentsByLine = comments.reduce(groupByLineNumber, {})
+
+      lines.forEach((line, i) => {
+        // i is zero-indexed, line numbers are one-indexed
+        const lineNumber = i + 1
+
+        const inScript =
+          scriptLinesRange &&
+          scriptLinesRange[0] <= lineNumber &&
+          lineNumber <= scriptLinesRange[1]
+        const inTemplate =
+          templateLinesRange &&
+          templateLinesRange[0] <= lineNumber &&
+          lineNumber <= templateLinesRange[1]
+        // check if line is inside a script or template.
+        if (!inScript && !inTemplate) {
+          // out of range.
+          return
+        }
+        const maxLength =
+          inScript && inTemplate
+            ? Math.max(scriptMaxLength, templateMaxLength)
+            : inScript
+            ? scriptMaxLength
+            : templateMaxLength
+
+        if (
+          (ignoreStrings && stringsByLine[lineNumber]) ||
+          (ignoreTemplateLiterals && templateLiteralsByLine[lineNumber]) ||
+          (ignoreRegExpLiterals && regExpLiteralsByLine[lineNumber]) ||
+          (ignoreHTMLAttributeValues &&
+            htmlAttributeValuesByLine[lineNumber]) ||
+          (ignoreHTMLTextContents && htmlTextContentsByLine[lineNumber])
+        ) {
+          // ignore this line
+          return
+        }
+
+        /*
+         * if we're checking comment length; we need to know whether this
+         * line is a comment
+         */
+        let lineIsComment = false
+        let textToMeasure
+
+        /*
+         * comments to check.
+         */
+        if (commentsByLine[lineNumber]) {
+          const commentList = [...commentsByLine[lineNumber]]
+
+          let comment = commentList.pop() || null
+
+          if (isFullLineComment(line, lineNumber, comment)) {
+            lineIsComment = true
+            textToMeasure = line
+          } else if (
+            ignoreTrailingComments &&
+            isTrailingComment(line, lineNumber, comment)
+          ) {
+            textToMeasure = stripTrailingComment(line, comment)
+
+            // ignore multiple trailing comments in the same line
+            comment = commentList.pop() || null
+
+            while (isTrailingComment(textToMeasure, lineNumber, comment)) {
+              textToMeasure = stripTrailingComment(textToMeasure, comment)
+            }
+          } else {
+            textToMeasure = line
+          }
+        } else {
+          textToMeasure = line
+        }
+
+        if (
+          (ignorePattern && ignorePattern.test(textToMeasure)) ||
+          (ignoreUrls && URL_REGEXP.test(textToMeasure))
+        ) {
+          // ignore this line
+          return
+        }
+
+        const lineLength = computeLineLength(textToMeasure, tabWidth)
+        const commentLengthApplies = lineIsComment && maxCommentLength
+
+        if (lineIsComment && ignoreComments) {
+          return
+        }
+
+        if (commentLengthApplies) {
+          if (lineLength > maxCommentLength) {
+            context.report({
+              node,
+              loc: { line: lineNumber, column: 0 },
+              messageId: 'maxComment',
+              data: {
+                lineLength,
+                maxCommentLength
+              }
+            })
+          }
+        } else if (lineLength > maxLength) {
+          context.report({
+            node,
+            loc: { line: lineNumber, column: 0 },
+            messageId: 'max',
+            data: {
+              lineLength,
+              maxLength
+            }
+          })
+        }
+      })
+    }
+
+    // --------------------------------------------------------------------------
+    // Public API
+    // --------------------------------------------------------------------------
+
+    return utils.compositingVisitors(
+      utils.defineTemplateBodyVisitor(context, {
+        /** @param {VLiteral} node */
+        'VAttribute[directive=false] > VLiteral'(node) {
+          htmlAttributeValues.push(node)
+        }
+      }),
+      {
+        'Program:exit'(node) {
+          checkProgramForMaxLength(node)
+        }
+      }
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/multiline-html-element-content-newline.js b/server/node_modules/eslint-plugin-vue/lib/rules/multiline-html-element-content-newline.js
new file mode 100644
index 0000000000000000000000000000000000000000..49a675c4bbe87d1ee84bbef035467d156f58c394
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/multiline-html-element-content-newline.js
@@ -0,0 +1,246 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+const casing = require('../utils/casing')
+const INLINE_ELEMENTS = require('../utils/inline-non-void-elements.json')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * @param {VElement & { endTag: VEndTag }} element
+ */
+function isMultilineElement(element) {
+  return element.loc.start.line < element.endTag.loc.start.line
+}
+
+/**
+ * @param {any} options
+ */
+function parseOptions(options) {
+  return Object.assign(
+    {
+      ignores: ['pre', 'textarea'].concat(INLINE_ELEMENTS),
+      ignoreWhenEmpty: true,
+      allowEmptyLines: false
+    },
+    options
+  )
+}
+
+/**
+ * @param {number} lineBreaks
+ */
+function getPhrase(lineBreaks) {
+  switch (lineBreaks) {
+    case 0:
+      return 'no'
+    default:
+      return `${lineBreaks}`
+  }
+}
+/**
+ * Check whether the given element is empty or not.
+ * This ignores whitespaces, doesn't ignore comments.
+ * @param {VElement & { endTag: VEndTag }} node The element node to check.
+ * @param {SourceCode} sourceCode The source code object of the current context.
+ * @returns {boolean} `true` if the element is empty.
+ */
+function isEmpty(node, sourceCode) {
+  const start = node.startTag.range[1]
+  const end = node.endTag.range[0]
+  return sourceCode.text.slice(start, end).trim() === ''
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'layout',
+    docs: {
+      description:
+        'require a line break before and after the contents of a multiline element',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url:
+        'https://eslint.vuejs.org/rules/multiline-html-element-content-newline.html'
+    },
+    fixable: 'whitespace',
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          ignoreWhenEmpty: {
+            type: 'boolean'
+          },
+          ignores: {
+            type: 'array',
+            items: { type: 'string' },
+            uniqueItems: true,
+            additionalItems: false
+          },
+          allowEmptyLines: {
+            type: 'boolean'
+          }
+        },
+        additionalProperties: false
+      }
+    ],
+    messages: {
+      unexpectedAfterClosingBracket:
+        'Expected 1 line break after opening tag (`<{{name}}>`), but {{actual}} line breaks found.',
+      unexpectedBeforeOpeningBracket:
+        'Expected 1 line break before closing tag (`</{{name}}>`), but {{actual}} line breaks found.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = parseOptions(context.options[0])
+    const ignores = options.ignores
+    const ignoreWhenEmpty = options.ignoreWhenEmpty
+    const allowEmptyLines = options.allowEmptyLines
+    const template =
+      context.parserServices.getTemplateBodyTokenStore &&
+      context.parserServices.getTemplateBodyTokenStore()
+    const sourceCode = context.getSourceCode()
+
+    /** @type {VElement | null} */
+    let inIgnoreElement = null
+
+    /**
+     * @param {VElement} node
+     */
+    function isIgnoredElement(node) {
+      return (
+        ignores.includes(node.name) ||
+        ignores.includes(casing.pascalCase(node.rawName)) ||
+        ignores.includes(casing.kebabCase(node.rawName))
+      )
+    }
+
+    /**
+     * @param {number} lineBreaks
+     */
+    function isInvalidLineBreaks(lineBreaks) {
+      if (allowEmptyLines) {
+        return lineBreaks === 0
+      } else {
+        return lineBreaks !== 1
+      }
+    }
+
+    return utils.defineTemplateBodyVisitor(context, {
+      VElement(node) {
+        if (inIgnoreElement) {
+          return
+        }
+        if (isIgnoredElement(node)) {
+          // ignore element name
+          inIgnoreElement = node
+          return
+        }
+        if (node.startTag.selfClosing || !node.endTag) {
+          // self closing
+          return
+        }
+
+        const element = /** @type {VElement & { endTag: VEndTag }} */ (node)
+
+        if (!isMultilineElement(element)) {
+          return
+        }
+
+        /**
+         * @type {SourceCode.CursorWithCountOptions}
+         */
+        const getTokenOption = {
+          includeComments: true,
+          filter: (token) => token.type !== 'HTMLWhitespace'
+        }
+        if (
+          ignoreWhenEmpty &&
+          element.children.length === 0 &&
+          template.getFirstTokensBetween(
+            element.startTag,
+            element.endTag,
+            getTokenOption
+          ).length === 0
+        ) {
+          return
+        }
+
+        const contentFirst = /** @type {Token} */ (template.getTokenAfter(
+          element.startTag,
+          getTokenOption
+        ))
+        const contentLast = /** @type {Token} */ (template.getTokenBefore(
+          element.endTag,
+          getTokenOption
+        ))
+
+        const beforeLineBreaks =
+          contentFirst.loc.start.line - element.startTag.loc.end.line
+        const afterLineBreaks =
+          element.endTag.loc.start.line - contentLast.loc.end.line
+        if (isInvalidLineBreaks(beforeLineBreaks)) {
+          context.report({
+            node: template.getLastToken(element.startTag),
+            loc: {
+              start: element.startTag.loc.end,
+              end: contentFirst.loc.start
+            },
+            messageId: 'unexpectedAfterClosingBracket',
+            data: {
+              name: element.rawName,
+              actual: getPhrase(beforeLineBreaks)
+            },
+            fix(fixer) {
+              /** @type {Range} */
+              const range = [element.startTag.range[1], contentFirst.range[0]]
+              return fixer.replaceTextRange(range, '\n')
+            }
+          })
+        }
+
+        if (isEmpty(element, sourceCode)) {
+          return
+        }
+
+        if (isInvalidLineBreaks(afterLineBreaks)) {
+          context.report({
+            node: template.getFirstToken(element.endTag),
+            loc: {
+              start: contentLast.loc.end,
+              end: element.endTag.loc.start
+            },
+            messageId: 'unexpectedBeforeOpeningBracket',
+            data: {
+              name: element.name,
+              actual: getPhrase(afterLineBreaks)
+            },
+            fix(fixer) {
+              /** @type {Range} */
+              const range = [contentLast.range[1], element.endTag.range[0]]
+              return fixer.replaceTextRange(range, '\n')
+            }
+          })
+        }
+      },
+      'VElement:exit'(node) {
+        if (inIgnoreElement === node) {
+          inIgnoreElement = null
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/mustache-interpolation-spacing.js b/server/node_modules/eslint-plugin-vue/lib/rules/mustache-interpolation-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..8522c8ad9a4697c46ddbdc27d38e0d4a28dc1bf7
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/mustache-interpolation-spacing.js
@@ -0,0 +1,107 @@
+/**
+ * @fileoverview enforce unified spacing in mustache interpolations.
+ * @author Armano
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'layout',
+    docs: {
+      description: 'enforce unified spacing in mustache interpolations',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/mustache-interpolation-spacing.html'
+    },
+    fixable: 'whitespace',
+    schema: [
+      {
+        enum: ['always', 'never']
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0] || 'always'
+    const template =
+      context.parserServices.getTemplateBodyTokenStore &&
+      context.parserServices.getTemplateBodyTokenStore()
+
+    // ----------------------------------------------------------------------
+    // Public
+    // ----------------------------------------------------------------------
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VExpressionContainer} node */
+      'VExpressionContainer[expression!=null]'(node) {
+        const openBrace = template.getFirstToken(node)
+        const closeBrace = template.getLastToken(node)
+
+        if (
+          !openBrace ||
+          !closeBrace ||
+          openBrace.type !== 'VExpressionStart' ||
+          closeBrace.type !== 'VExpressionEnd'
+        ) {
+          return
+        }
+
+        const firstToken = template.getTokenAfter(openBrace, {
+          includeComments: true
+        })
+        const lastToken = template.getTokenBefore(closeBrace, {
+          includeComments: true
+        })
+
+        if (options === 'always') {
+          if (openBrace.range[1] === firstToken.range[0]) {
+            context.report({
+              node: openBrace,
+              message: "Expected 1 space after '{{', but not found.",
+              fix: (fixer) => fixer.insertTextAfter(openBrace, ' ')
+            })
+          }
+          if (closeBrace.range[0] === lastToken.range[1]) {
+            context.report({
+              node: closeBrace,
+              message: "Expected 1 space before '}}', but not found.",
+              fix: (fixer) => fixer.insertTextBefore(closeBrace, ' ')
+            })
+          }
+        } else {
+          if (openBrace.range[1] !== firstToken.range[0]) {
+            context.report({
+              loc: {
+                start: openBrace.loc.start,
+                end: firstToken.loc.start
+              },
+              message: "Expected no space after '{{', but found.",
+              fix: (fixer) =>
+                fixer.removeRange([openBrace.range[1], firstToken.range[0]])
+            })
+          }
+          if (closeBrace.range[0] !== lastToken.range[1]) {
+            context.report({
+              loc: {
+                start: lastToken.loc.end,
+                end: closeBrace.loc.end
+              },
+              message: "Expected no space before '}}', but found.",
+              fix: (fixer) =>
+                fixer.removeRange([lastToken.range[1], closeBrace.range[0]])
+            })
+          }
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/name-property-casing.js b/server/node_modules/eslint-plugin-vue/lib/rules/name-property-casing.js
new file mode 100644
index 0000000000000000000000000000000000000000..d86435a95b6d5a7c4c7d7b00c2ed0e091ca8e17e
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/name-property-casing.js
@@ -0,0 +1,71 @@
+/**
+ * @fileoverview Requires specific casing for the name property in Vue components
+ * @author Armano
+ */
+'use strict'
+
+const utils = require('../utils')
+const casing = require('../utils/casing')
+const allowedCaseOptions = ['PascalCase', 'kebab-case']
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'enforce specific casing for the name property in Vue components',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/name-property-casing.html',
+      replacedBy: ['component-definition-name-casing']
+    },
+    deprecated: true,
+    fixable: 'code', // or "code" or "whitespace"
+    schema: [
+      {
+        enum: allowedCaseOptions
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0]
+    const caseType =
+      allowedCaseOptions.indexOf(options) !== -1 ? options : 'PascalCase'
+
+    // ----------------------------------------------------------------------
+    // Public
+    // ----------------------------------------------------------------------
+
+    return utils.executeOnVue(context, (obj) => {
+      const node = utils.findProperty(obj, 'name')
+
+      if (!node) return
+      const valueNode = node.value
+      if (valueNode.type !== 'Literal') return
+
+      if (!casing.getChecker(caseType)(`${valueNode.value}`)) {
+        const value = casing.getExactConverter(caseType)(`${valueNode.value}`)
+        context.report({
+          node: valueNode,
+          message: 'Property name "{{value}}" is not {{caseType}}.',
+          data: {
+            value: `${valueNode.value}`,
+            caseType
+          },
+          fix: (fixer) =>
+            fixer.replaceText(
+              valueNode,
+              context
+                .getSourceCode()
+                .getText(valueNode)
+                .replace(`${valueNode.value}`, value)
+            )
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/new-line-between-multi-line-property.js b/server/node_modules/eslint-plugin-vue/lib/rules/new-line-between-multi-line-property.js
new file mode 100644
index 0000000000000000000000000000000000000000..b48d78379b8e74622be209384e2aa9b97f4cb2b8
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/new-line-between-multi-line-property.js
@@ -0,0 +1,154 @@
+/**
+ * @fileoverview Enforce new lines between multi-line properties in Vue components.
+ * @author IWANABETHATGUY
+ */
+'use strict'
+
+const utils = require('../utils')
+
+/**
+ * @param {Token} node
+ */
+function isComma(node) {
+  return node.type === 'Punctuator' && node.value === ','
+}
+
+/**
+ * Check whether the between given nodes has empty line.
+ * @param {SourceCode} sourceCode
+ * @param {ASTNode} pre
+ * @param {ASTNode} cur
+ */
+function* iterateBetweenTokens(sourceCode, pre, cur) {
+  yield sourceCode.getLastToken(pre)
+  yield* sourceCode.getTokensBetween(pre, cur, {
+    includeComments: true
+  })
+  yield sourceCode.getFirstToken(cur)
+}
+
+/**
+ * Check whether the between given nodes has empty line.
+ * @param {SourceCode} sourceCode
+ * @param {ASTNode} pre
+ * @param {ASTNode} cur
+ */
+function hasEmptyLine(sourceCode, pre, cur) {
+  /** @type {Token|null} */
+  let preToken = null
+  for (const token of iterateBetweenTokens(sourceCode, pre, cur)) {
+    if (preToken && token.loc.start.line - preToken.loc.end.line >= 2) {
+      return true
+    }
+    preToken = token
+  }
+  return false
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+module.exports = {
+  meta: {
+    type: 'layout',
+    docs: {
+      description:
+        'enforce new lines between multi-line properties in Vue components',
+      categories: undefined,
+      url:
+        'https://eslint.vuejs.org/rules/new-line-between-multi-line-property.html'
+    },
+    fixable: 'whitespace', // or "code" or "whitespace"
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          // number of line you want to insert after multi-line property
+          minLineOfMultilineProperty: {
+            type: 'number',
+            minimum: 2
+          }
+        }
+      }
+    ]
+  },
+
+  /** @param {RuleContext} context */
+  create(context) {
+    let minLineOfMultilineProperty = 2
+    if (
+      context.options &&
+      context.options[0] &&
+      context.options[0].minLineOfMultilineProperty
+    ) {
+      minLineOfMultilineProperty = context.options[0].minLineOfMultilineProperty
+    }
+
+    /** @type {CallExpression[]} */
+    const callStack = []
+    const sourceCode = context.getSourceCode()
+    return Object.assign(
+      utils.defineVueVisitor(context, {
+        CallExpression(node) {
+          callStack.push(node)
+        },
+        'CallExpression:exit'() {
+          callStack.pop()
+        },
+
+        /**
+         * @param {ObjectExpression} node
+         */
+        ObjectExpression(node) {
+          if (callStack.length) {
+            return
+          }
+          const properties = node.properties
+          for (let i = 1; i < properties.length; i++) {
+            const cur = properties[i]
+            const pre = properties[i - 1]
+
+            const lineCountOfPreProperty =
+              pre.loc.end.line - pre.loc.start.line + 1
+            if (lineCountOfPreProperty < minLineOfMultilineProperty) {
+              continue
+            }
+
+            if (hasEmptyLine(sourceCode, pre, cur)) {
+              continue
+            }
+
+            context.report({
+              node: pre,
+              loc: {
+                start: pre.loc.end,
+                end: cur.loc.start
+              },
+              message:
+                'Enforce new lines between multi-line properties in Vue components.',
+              fix(fixer) {
+                /** @type {Token|null} */
+                let preToken = null
+                for (const token of iterateBetweenTokens(
+                  sourceCode,
+                  pre,
+                  cur
+                )) {
+                  if (
+                    preToken &&
+                    preToken.loc.end.line < token.loc.start.line
+                  ) {
+                    return fixer.insertTextAfter(preToken, '\n')
+                  }
+                  preToken = token
+                }
+                const commaToken = sourceCode.getTokenAfter(pre, isComma)
+                return fixer.insertTextAfter(commaToken || pre, '\n\n')
+              }
+            })
+          }
+        }
+      })
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-arrow-functions-in-watch.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-arrow-functions-in-watch.js
new file mode 100644
index 0000000000000000000000000000000000000000..ca83a16a6a7619fd086ec43ab6412c64d91b9f55
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-arrow-functions-in-watch.js
@@ -0,0 +1,47 @@
+/**
+ * @author Sosuke Suzuki
+ */
+'use strict'
+
+const utils = require('../utils')
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow using arrow functions to define watcher',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/no-arrow-functions-in-watch.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.executeOnVue(context, (obj) => {
+      const watchNode = utils.findProperty(obj, 'watch')
+      if (watchNode == null) {
+        return
+      }
+      const watchValue = watchNode.value
+      if (watchValue.type !== 'ObjectExpression') {
+        return
+      }
+      for (const property of watchValue.properties) {
+        if (property.type !== 'Property') {
+          continue
+        }
+
+        for (const handler of utils.iterateWatchHandlerValues(property)) {
+          if (handler.type === 'ArrowFunctionExpression') {
+            context.report({
+              node: handler,
+              message:
+                'You should not use an arrow function to define a watcher.'
+            })
+          }
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-async-in-computed-properties.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-async-in-computed-properties.js
new file mode 100644
index 0000000000000000000000000000000000000000..9812d61c09feef23794b242c58d1eaa3eaaa503c
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-async-in-computed-properties.js
@@ -0,0 +1,201 @@
+/**
+ * @fileoverview Check if there are no asynchronous actions inside computed properties.
+ * @author Armano
+ */
+'use strict'
+
+const utils = require('../utils')
+
+/**
+ * @typedef {import('../utils').VueObjectData} VueObjectData
+ * @typedef {import('../utils').ComponentComputedProperty} ComponentComputedProperty
+ */
+
+const PROMISE_FUNCTIONS = ['then', 'catch', 'finally']
+
+const PROMISE_METHODS = ['all', 'race', 'reject', 'resolve']
+
+const TIMED_FUNCTIONS = [
+  'setTimeout',
+  'setInterval',
+  'setImmediate',
+  'requestAnimationFrame'
+]
+
+/**
+ * @param {CallExpression} node
+ */
+function isTimedFunction(node) {
+  const callee = utils.skipChainExpression(node.callee)
+  return (
+    ((node.type === 'CallExpression' &&
+      callee.type === 'Identifier' &&
+      TIMED_FUNCTIONS.indexOf(callee.name) !== -1) ||
+      (node.type === 'CallExpression' &&
+        callee.type === 'MemberExpression' &&
+        callee.object.type === 'Identifier' &&
+        callee.object.name === 'window' &&
+        callee.property.type === 'Identifier' &&
+        TIMED_FUNCTIONS.indexOf(callee.property.name) !== -1)) &&
+    node.arguments.length
+  )
+}
+
+/**
+ * @param {CallExpression} node
+ */
+function isPromise(node) {
+  const callee = utils.skipChainExpression(node.callee)
+  if (node.type === 'CallExpression' && callee.type === 'MemberExpression') {
+    return (
+      // hello.PROMISE_FUNCTION()
+      (callee.property.type === 'Identifier' &&
+        PROMISE_FUNCTIONS.indexOf(callee.property.name) !== -1) || // Promise.PROMISE_METHOD()
+      (callee.object.type === 'Identifier' &&
+        callee.object.name === 'Promise' &&
+        callee.property.type === 'Identifier' &&
+        PROMISE_METHODS.indexOf(callee.property.name) !== -1)
+    )
+  }
+  return false
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow asynchronous actions in computed properties',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/no-async-in-computed-properties.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /**
+     * @typedef {object} ScopeStack
+     * @property {ScopeStack | null} upper
+     * @property {BlockStatement | Expression} body
+     */
+    /** @type {Map<ObjectExpression, ComponentComputedProperty[]>} */
+    const computedPropertiesMap = new Map()
+    /** @type {ScopeStack | null} */
+    let scopeStack = null
+
+    const expressionTypes = {
+      promise: 'asynchronous action',
+      await: 'await operator',
+      async: 'async function declaration',
+      new: 'Promise object',
+      timed: 'timed function'
+    }
+
+    /**
+     * @param {FunctionExpression | FunctionDeclaration | ArrowFunctionExpression} node
+     * @param {VueObjectData} data
+     */
+    function onFunctionEnter(node, { node: vueNode }) {
+      if (node.async) {
+        verify(node, node.body, 'async', computedPropertiesMap.get(vueNode))
+      }
+
+      scopeStack = {
+        upper: scopeStack,
+        body: node.body
+      }
+    }
+
+    function onFunctionExit() {
+      scopeStack = scopeStack && scopeStack.upper
+    }
+
+    /**
+     * @param {ESNode} node
+     * @param {BlockStatement | Expression} targetBody
+     * @param {keyof expressionTypes} type
+     * @param {ComponentComputedProperty[]} computedProperties
+     */
+    function verify(node, targetBody, type, computedProperties = []) {
+      computedProperties.forEach((cp) => {
+        if (
+          cp.value &&
+          node.loc.start.line >= cp.value.loc.start.line &&
+          node.loc.end.line <= cp.value.loc.end.line &&
+          targetBody === cp.value
+        ) {
+          context.report({
+            node,
+            message:
+              'Unexpected {{expressionName}} in "{{propertyName}}" computed property.',
+            data: {
+              expressionName: expressionTypes[type],
+              propertyName: cp.key || 'unknown'
+            }
+          })
+        }
+      })
+    }
+    return utils.defineVueVisitor(context, {
+      onVueObjectEnter(node) {
+        computedPropertiesMap.set(node, utils.getComputedProperties(node))
+      },
+      ':function': onFunctionEnter,
+      ':function:exit': onFunctionExit,
+
+      NewExpression(node, { node: vueNode }) {
+        if (!scopeStack) {
+          return
+        }
+        if (
+          node.callee.type === 'Identifier' &&
+          node.callee.name === 'Promise'
+        ) {
+          verify(
+            node,
+            scopeStack.body,
+            'new',
+            computedPropertiesMap.get(vueNode)
+          )
+        }
+      },
+
+      CallExpression(node, { node: vueNode }) {
+        if (!scopeStack) {
+          return
+        }
+        if (isPromise(node)) {
+          verify(
+            node,
+            scopeStack.body,
+            'promise',
+            computedPropertiesMap.get(vueNode)
+          )
+        } else if (isTimedFunction(node)) {
+          verify(
+            node,
+            scopeStack.body,
+            'timed',
+            computedPropertiesMap.get(vueNode)
+          )
+        }
+      },
+
+      AwaitExpression(node, { node: vueNode }) {
+        if (!scopeStack) {
+          return
+        }
+        verify(
+          node,
+          scopeStack.body,
+          'await',
+          computedPropertiesMap.get(vueNode)
+        )
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-bare-strings-in-template.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-bare-strings-in-template.js
new file mode 100644
index 0000000000000000000000000000000000000000..e8dc5bfcd3bc28f41c1956555dece764f706de7e
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-bare-strings-in-template.js
@@ -0,0 +1,275 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+const regexp = require('../utils/regexp')
+const casing = require('../utils/casing')
+
+/**
+ * @typedef { { names: { [tagName in string]: Set<string> }, regexps: { name: RegExp, attrs: Set<string> }[], cache: { [tagName in string]: Set<string> } } } TargetAttrs
+ */
+
+// ------------------------------------------------------------------------------
+// Constants
+// ------------------------------------------------------------------------------
+
+// https://dev.w3.org/html5/html-author/charref
+const DEFAULT_ALLOWLIST = [
+  '(',
+  ')',
+  ',',
+  '.',
+  '&',
+  '+',
+  '-',
+  '=',
+  '*',
+  '/',
+  '#',
+  '%',
+  '!',
+  '?',
+  ':',
+  '[',
+  ']',
+  '{',
+  '}',
+  '<',
+  '>',
+  '\u00b7', // "·"
+  '\u2022', // "•"
+  '\u2010', // "‐"
+  '\u2013', // "–"
+  '\u2014', // "—"
+  '\u2212', // "−"
+  '|'
+]
+
+const DEFAULT_ATTRIBUTES = {
+  '/.+/': [
+    'title',
+    'aria-label',
+    'aria-placeholder',
+    'aria-roledescription',
+    'aria-valuetext'
+  ],
+  input: ['placeholder'],
+  img: ['alt']
+}
+
+const DEFAULT_DIRECTIVES = ['v-text']
+
+// --------------------------------------------------------------------------
+// Helpers
+// --------------------------------------------------------------------------
+
+/**
+ * Parse attributes option
+ * @param {any} options
+ * @returns {TargetAttrs}
+ */
+function parseTargetAttrs(options) {
+  /** @type {TargetAttrs} */
+  const result = { names: {}, regexps: [], cache: {} }
+  for (const tagName of Object.keys(options)) {
+    /** @type { Set<string> } */
+    const attrs = new Set(options[tagName])
+    if (regexp.isRegExp(tagName)) {
+      result.regexps.push({
+        name: regexp.toRegExp(tagName),
+        attrs
+      })
+    } else {
+      result.names[tagName] = attrs
+    }
+  }
+  return result
+}
+
+/**
+ * Get a string from given expression container node
+ * @param {VExpressionContainer} value
+ * @returns { string | null }
+ */
+function getStringValue(value) {
+  const expression = value.expression
+  if (!expression) {
+    return null
+  }
+  if (expression.type !== 'Literal') {
+    return null
+  }
+  if (typeof expression.value === 'string') {
+    return expression.value
+  }
+  return null
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow the use of bare strings in `<template>`',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-bare-strings-in-template.html'
+    },
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          allowlist: {
+            type: 'array',
+            items: { type: 'string' },
+            uniqueItems: true
+          },
+          attributes: {
+            type: 'object',
+            patternProperties: {
+              '^(?:\\S+|/.*/[a-z]*)$': {
+                type: 'array',
+                items: { type: 'string' },
+                uniqueItems: true
+              }
+            },
+            additionalProperties: false
+          },
+          directives: {
+            type: 'array',
+            items: { type: 'string', pattern: '^v-' },
+            uniqueItems: true
+          }
+        }
+      }
+    ],
+    messages: {
+      unexpected: 'Unexpected non-translated string used.',
+      unexpectedInAttr: 'Unexpected non-translated string used in `{{attr}}`.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /**
+     * @typedef { { upper: ElementStack | null, name: string, attrs: Set<string> } } ElementStack
+     */
+    const opts = context.options[0] || {}
+    /** @type {string[]} */
+    const allowlist = opts.allowlist || DEFAULT_ALLOWLIST
+    const attributes = parseTargetAttrs(opts.attributes || DEFAULT_ATTRIBUTES)
+    const directives = opts.directives || DEFAULT_DIRECTIVES
+
+    const allowlistRe = new RegExp(
+      allowlist.map((w) => regexp.escape(w)).join('|'),
+      'gu'
+    )
+
+    /** @type {ElementStack | null} */
+    let elementStack = null
+    /**
+     * Gets the bare string from given string
+     * @param {string} str
+     */
+    function getBareString(str) {
+      return str.trim().replace(allowlistRe, '').trim()
+    }
+
+    /**
+     * Get the attribute to be verified from the element name.
+     * @param {string} tagName
+     * @returns {Set<string>}
+     */
+    function getTargetAttrs(tagName) {
+      if (attributes.cache[tagName]) {
+        return attributes.cache[tagName]
+      }
+      /** @type {string[]} */
+      const result = []
+      if (attributes.names[tagName]) {
+        result.push(...attributes.names[tagName])
+      }
+      for (const { name, attrs } of attributes.regexps) {
+        name.lastIndex = 0
+        if (name.test(tagName)) {
+          result.push(...attrs)
+        }
+      }
+      if (casing.isKebabCase(tagName)) {
+        result.push(...getTargetAttrs(casing.pascalCase(tagName)))
+      }
+
+      return (attributes.cache[tagName] = new Set(result))
+    }
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VText} node */
+      VText(node) {
+        if (getBareString(node.value)) {
+          context.report({
+            node,
+            messageId: 'unexpected'
+          })
+        }
+      },
+      /**
+       * @param {VElement} node
+       */
+      VElement(node) {
+        elementStack = {
+          upper: elementStack,
+          name: node.rawName,
+          attrs: getTargetAttrs(node.rawName)
+        }
+      },
+      'VElement:exit'() {
+        elementStack = elementStack && elementStack.upper
+      },
+      /** @param {VAttribute|VDirective} node */
+      VAttribute(node) {
+        if (!node.value || !elementStack) {
+          return
+        }
+        if (node.directive === false) {
+          const attrs = elementStack.attrs
+          if (!attrs.has(node.key.rawName)) {
+            return
+          }
+
+          if (getBareString(node.value.value)) {
+            context.report({
+              node: node.value,
+              messageId: 'unexpectedInAttr',
+              data: {
+                attr: node.key.rawName
+              }
+            })
+          }
+        } else {
+          const directive = `v-${node.key.name.name}`
+          if (!directives.includes(directive)) {
+            return
+          }
+          const str = getStringValue(node.value)
+          if (str && getBareString(str)) {
+            context.report({
+              node: node.value,
+              messageId: 'unexpectedInAttr',
+              data: {
+                attr: directive
+              }
+            })
+          }
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-boolean-default.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-boolean-default.js
new file mode 100644
index 0000000000000000000000000000000000000000..e278e3011c794104d57b4dcf772cc898140dc43c
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-boolean-default.js
@@ -0,0 +1,114 @@
+/**
+ * @fileoverview Prevents boolean defaults from being set
+ * @author Hiroki Osame
+ */
+'use strict'
+
+const utils = require('../utils')
+
+/**
+ * @typedef {import('../utils').ComponentArrayProp} ComponentArrayProp
+ * @typedef {import('../utils').ComponentObjectProp} ComponentObjectProp
+ */
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+/**
+ * @param {Property | SpreadElement} prop
+ */
+function isBooleanProp(prop) {
+  return (
+    prop.type === 'Property' &&
+    prop.key.type === 'Identifier' &&
+    prop.key.name === 'type' &&
+    prop.value.type === 'Identifier' &&
+    prop.value.name === 'Boolean'
+  )
+}
+
+/**
+ * @typedef {ComponentObjectProp & { value : ObjectExpression }} ObjectExpressionProp
+ */
+
+/**
+ * @param {(ComponentArrayProp | ComponentObjectProp)[]} props
+ * @returns {ObjectExpressionProp[]}
+ */
+function getBooleanProps(props) {
+  return props.filter(
+    /**
+     * @param {ComponentArrayProp | ComponentObjectProp} prop
+     * @returns {prop is ObjectExpressionProp}
+     */
+    (prop) =>
+      prop.value != null &&
+      prop.value.type === 'ObjectExpression' &&
+      prop.value.properties.some(isBooleanProp)
+  )
+}
+
+/**
+ * @param {ObjectExpressionProp} propDef
+ */
+function getDefaultNode(propDef) {
+  return utils.findProperty(propDef.value, 'default')
+}
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow boolean defaults',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-boolean-default.html'
+    },
+    fixable: 'code',
+    schema: [
+      {
+        enum: ['default-false', 'no-default']
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.executeOnVueComponent(context, (obj) => {
+      const props = utils.getComponentProps(obj)
+      const booleanProps = getBooleanProps(props)
+
+      if (!booleanProps.length) return
+
+      const booleanType = context.options[0] || 'no-default'
+
+      booleanProps.forEach((propDef) => {
+        const defaultNode = getDefaultNode(propDef)
+        if (!defaultNode) {
+          return
+        }
+
+        switch (booleanType) {
+          case 'no-default':
+            context.report({
+              node: defaultNode,
+              message:
+                'Boolean prop should not set a default (Vue defaults it to false).'
+            })
+            break
+
+          case 'default-false':
+            if (
+              defaultNode.value.type !== 'Literal' ||
+              defaultNode.value.value !== false
+            ) {
+              context.report({
+                node: defaultNode,
+                message: 'Boolean prop should only be defaulted to false.'
+              })
+            }
+            break
+        }
+      })
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-confusing-v-for-v-if.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-confusing-v-for-v-if.js
new file mode 100644
index 0000000000000000000000000000000000000000..4135f163a779bdaf5061c8e0296f9c760eadf4cf
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-confusing-v-for-v-if.js
@@ -0,0 +1,69 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Check whether the given `v-if` node is using the variable which is defined by the `v-for` directive.
+ * @param {VDirective} vIf The `v-if` attribute node to check.
+ * @returns {boolean} `true` if the `v-if` is using the variable which is defined by the `v-for` directive.
+ */
+function isUsingIterationVar(vIf) {
+  const element = vIf.parent.parent
+  return Boolean(
+    vIf.value &&
+      vIf.value.references.some((reference) =>
+        element.variables.some(
+          (variable) =>
+            variable.id.name === reference.id.name && variable.kind === 'v-for'
+        )
+      )
+  )
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow confusing `v-for` and `v-if` on the same element',
+      categories: ['vue3-recommended', 'recommended'],
+      url: 'https://eslint.vuejs.org/rules/no-confusing-v-for-v-if.html',
+      replacedBy: ['no-use-v-if-with-v-for']
+    },
+    deprecated: true,
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      "VAttribute[directive=true][key.name.name='if']"(node) {
+        const element = node.parent.parent
+
+        if (utils.hasDirective(element, 'for') && !isUsingIterationVar(node)) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "This 'v-if' should be moved to the wrapper element."
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-custom-modifiers-on-v-model.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-custom-modifiers-on-v-model.js
new file mode 100644
index 0000000000000000000000000000000000000000..6670be1dacf811405196d41919007584fcd3c458
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-custom-modifiers-on-v-model.js
@@ -0,0 +1,59 @@
+/**
+ * @author Przemyslaw Falowski (@przemkow)
+ * @fileoverview This rule checks whether v-model used on the component do not have custom modifiers
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+const VALID_MODIFIERS = new Set(['lazy', 'number', 'trim'])
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow custom modifiers on v-model used on the component',
+      categories: ['essential'],
+      url: 'https://eslint.vuejs.org/rules/no-custom-modifiers-on-v-model.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      notSupportedModifier:
+        "'v-model' directives don't support the modifier '{{name}}'."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      "VAttribute[directive=true][key.name.name='model']"(node) {
+        const element = node.parent.parent
+
+        if (utils.isCustomComponent(element)) {
+          for (const modifier of node.key.modifiers) {
+            if (!VALID_MODIFIERS.has(modifier.name)) {
+              context.report({
+                node,
+                loc: node.loc,
+                messageId: 'notSupportedModifier',
+                data: { name: modifier.name }
+              })
+            }
+          }
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-data-object-declaration.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-data-object-declaration.js
new file mode 100644
index 0000000000000000000000000000000000000000..37d280ef67a559836d8afcfc7361eaa9a5c4e988
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-data-object-declaration.js
@@ -0,0 +1,95 @@
+/**
+ * @fileoverview disallow using deprecated object declaration on data
+ * @author yoyo930021
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+/** @param {Token} token */
+function isOpenParen(token) {
+  return token.type === 'Punctuator' && token.value === '('
+}
+
+/** @param {Token} token */
+function isCloseParen(token) {
+  return token.type === 'Punctuator' && token.value === ')'
+}
+
+/**
+ * @param {Expression} node
+ * @param {SourceCode} sourceCode
+ */
+function getFirstAndLastTokens(node, sourceCode) {
+  let first = sourceCode.getFirstToken(node)
+  let last = sourceCode.getLastToken(node)
+
+  // If the value enclosed by parentheses, update the 'first' and 'last' by the parentheses.
+  while (true) {
+    const prev = sourceCode.getTokenBefore(first)
+    const next = sourceCode.getTokenAfter(last)
+    if (isOpenParen(prev) && isCloseParen(next)) {
+      first = prev
+      last = next
+    } else {
+      return { first, last }
+    }
+  }
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'disallow using deprecated object declaration on data (in Vue.js 3.0.0+)',
+      categories: ['vue3-essential'],
+      url:
+        'https://eslint.vuejs.org/rules/no-deprecated-data-object-declaration.html'
+    },
+    fixable: 'code',
+    schema: [],
+    messages: {
+      objectDeclarationIsDeprecated:
+        "Object declaration on 'data' property is deprecated. Using function declaration instead."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const sourceCode = context.getSourceCode()
+
+    return utils.executeOnVue(context, (obj) => {
+      const invalidData = utils.findProperty(
+        obj,
+        'data',
+        (p) =>
+          p.value.type !== 'FunctionExpression' &&
+          p.value.type !== 'ArrowFunctionExpression' &&
+          p.value.type !== 'Identifier'
+      )
+
+      if (invalidData) {
+        context.report({
+          node: invalidData,
+          messageId: 'objectDeclarationIsDeprecated',
+          fix(fixer) {
+            const tokens = getFirstAndLastTokens(invalidData.value, sourceCode)
+
+            return [
+              fixer.insertTextBefore(tokens.first, 'function() {\nreturn '),
+              fixer.insertTextAfter(tokens.last, ';\n}')
+            ]
+          }
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-destroyed-lifecycle.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-destroyed-lifecycle.js
new file mode 100644
index 0000000000000000000000000000000000000000..c3556084cc38bec9fdf5c8934b42ee13a7c2d64d
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-destroyed-lifecycle.js
@@ -0,0 +1,101 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'disallow using deprecated `destroyed` and `beforeDestroy` lifecycle hooks (in Vue.js 3.0.0+)',
+      categories: ['vue3-essential'],
+      url:
+        'https://eslint.vuejs.org/rules/no-deprecated-destroyed-lifecycle.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      deprecatedDestroyed:
+        'The `destroyed` lifecycle hook is deprecated. Use `unmounted` instead.',
+      deprecatedBeforeDestroy:
+        'The `beforeDestroy` lifecycle hook is deprecated. Use `beforeUnmount` instead.',
+      insteadUnmounted: 'Instead, change to `unmounted`.',
+      insteadBeforeUnmount: 'Instead, change to `beforeUnmount`.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.executeOnVue(context, (obj) => {
+      const destroyed = utils.findProperty(obj, 'destroyed')
+
+      if (destroyed) {
+        context.report({
+          node: destroyed.key,
+          messageId: 'deprecatedDestroyed',
+          // I don't know if they have exactly the same function, so don't do autofix.
+          suggest: [
+            {
+              messageId: 'insteadUnmounted',
+              fix(fixer) {
+                return fix(fixer, destroyed, 'unmounted')
+              }
+            }
+          ]
+        })
+      }
+
+      const beforeDestroy = utils.findProperty(obj, 'beforeDestroy')
+      if (beforeDestroy) {
+        context.report({
+          node: beforeDestroy.key,
+          messageId: 'deprecatedBeforeDestroy',
+          // I don't know if they have exactly the same function, so don't do autofix.
+          suggest: [
+            {
+              messageId: 'insteadBeforeUnmount',
+              fix(fixer) {
+                return fix(fixer, beforeDestroy, 'beforeUnmount')
+              }
+            }
+          ]
+        })
+      }
+
+      /**
+       * @param {RuleFixer} fixer
+       * @param {Property} property
+       * @param {string} newName
+       */
+      function fix(fixer, property, newName) {
+        if (property.computed) {
+          if (
+            property.key.type === 'Literal' ||
+            property.key.type === 'TemplateLiteral'
+          ) {
+            return fixer.replaceTextRange(
+              [property.key.range[0] + 1, property.key.range[1] - 1],
+              newName
+            )
+          }
+          return null
+        }
+        if (property.shorthand) {
+          return fixer.insertTextBefore(property.key, `${newName}:`)
+        }
+        return fixer.replaceText(property.key, newName)
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-dollar-listeners-api.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-dollar-listeners-api.js
new file mode 100644
index 0000000000000000000000000000000000000000..97d98359cd7e6dc745d094c67b8161f2d8100957
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-dollar-listeners-api.js
@@ -0,0 +1,72 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow using deprecated `$listeners` (in Vue.js 3.0.0+)',
+      categories: ['vue3-essential'],
+      url:
+        'https://eslint.vuejs.org/rules/no-deprecated-dollar-listeners-api.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      deprecated: 'The `$listeners` is deprecated.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(
+      context,
+      {
+        VExpressionContainer(node) {
+          for (const reference of node.references) {
+            if (reference.variable != null) {
+              // Not vm reference
+              continue
+            }
+            if (reference.id.name === '$listeners') {
+              context.report({
+                node: reference.id,
+                messageId: 'deprecated'
+              })
+            }
+          }
+        }
+      },
+      utils.defineVueVisitor(context, {
+        MemberExpression(node) {
+          if (
+            node.property.type !== 'Identifier' ||
+            node.property.name !== '$listeners'
+          ) {
+            return
+          }
+          if (!utils.isThis(node.object, context)) {
+            return
+          }
+
+          context.report({
+            node: node.property,
+            messageId: 'deprecated'
+          })
+        }
+      })
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-dollar-scopedslots-api.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-dollar-scopedslots-api.js
new file mode 100644
index 0000000000000000000000000000000000000000..bdfa0f844dd35234be9611e137a536b35cd352dc
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-dollar-scopedslots-api.js
@@ -0,0 +1,79 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'disallow using deprecated `$scopedSlots` (in Vue.js 3.0.0+)',
+      categories: ['vue3-essential'],
+      url:
+        'https://eslint.vuejs.org/rules/no-deprecated-dollar-scopedslots-api.html'
+    },
+    fixable: 'code',
+    schema: [],
+    messages: {
+      deprecated: 'The `$scopedSlots` is deprecated.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(
+      context,
+      {
+        VExpressionContainer(node) {
+          for (const reference of node.references) {
+            if (reference.variable != null) {
+              // Not vm reference
+              continue
+            }
+            if (reference.id.name === '$scopedSlots') {
+              context.report({
+                node: reference.id,
+                messageId: 'deprecated',
+                fix(fixer) {
+                  return fixer.replaceText(reference.id, '$slots')
+                }
+              })
+            }
+          }
+        }
+      },
+      utils.defineVueVisitor(context, {
+        MemberExpression(node) {
+          if (
+            node.property.type !== 'Identifier' ||
+            node.property.name !== '$scopedSlots'
+          ) {
+            return
+          }
+          if (!utils.isThis(node.object, context)) {
+            return
+          }
+
+          context.report({
+            node: node.property,
+            messageId: 'deprecated',
+            fix(fixer) {
+              return fixer.replaceText(node.property, '$slots')
+            }
+          })
+        }
+      })
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-events-api.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-events-api.js
new file mode 100644
index 0000000000000000000000000000000000000000..f393f59ef5c236b0ceb1fea736237ff9695c921c
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-events-api.js
@@ -0,0 +1,69 @@
+/**
+ * @fileoverview disallow using deprecated events api
+ * @author yoyo930021
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow using deprecated events api (in Vue.js 3.0.0+)',
+      categories: ['vue3-essential'],
+      url: 'https://eslint.vuejs.org/rules/no-deprecated-events-api.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      noDeprecatedEventsApi:
+        'The Events api `$on`, `$off` `$once` is deprecated. Using external library instead, for example mitt.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineVueVisitor(context, {
+      /** @param {MemberExpression & ({parent: CallExpression} | {parent: ChainExpression & {parent: CallExpression}})} node */
+      'CallExpression > MemberExpression, CallExpression > ChainExpression > MemberExpression'(
+        node
+      ) {
+        const call =
+          node.parent.type === 'ChainExpression'
+            ? node.parent.parent
+            : node.parent
+
+        if (call.optional) {
+          // It is OK because checking whether it is deprecated.
+          // e.g. `this.$on?.()`
+          return
+        }
+
+        if (
+          utils.skipChainExpression(call.callee) !== node ||
+          !['$on', '$off', '$once'].includes(
+            utils.getStaticPropertyName(node) || ''
+          )
+        ) {
+          return
+        }
+        if (!utils.isThis(node.object, context)) {
+          return
+        }
+
+        context.report({
+          node: node.property,
+          messageId: 'noDeprecatedEventsApi'
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-filter.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-filter.js
new file mode 100644
index 0000000000000000000000000000000000000000..87b61a5b3c78010e6ee07ffcc4f4fefb1d0d9e13
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-filter.js
@@ -0,0 +1,44 @@
+/**
+ * @author Przemyslaw Falowski (@przemkow)
+ * @fileoverview disallow using deprecated filters syntax
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'disallow using deprecated filters syntax (in Vue.js 3.0.0+)',
+      categories: ['vue3-essential'],
+      url: 'https://eslint.vuejs.org/rules/no-deprecated-filter.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      noDeprecatedFilter: 'Filters are deprecated.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      VFilterSequenceExpression(node) {
+        context.report({
+          node,
+          loc: node.loc,
+          messageId: 'noDeprecatedFilter'
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-functional-template.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-functional-template.js
new file mode 100644
index 0000000000000000000000000000000000000000..e489841b0a51d65993492115627c17ec5e1db6ec
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-functional-template.js
@@ -0,0 +1,56 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'disallow using deprecated the `functional` template (in Vue.js 3.0.0+)',
+      categories: ['vue3-essential'],
+      url:
+        'https://eslint.vuejs.org/rules/no-deprecated-functional-template.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      unexpected: 'The `functional` template are deprecated.'
+    }
+  },
+  /**
+   * @param {RuleContext} context - The rule context.
+   * @returns {RuleListener} AST event handlers.
+   */
+  create(context) {
+    return {
+      Program(program) {
+        const element = program.templateBody
+        if (element == null) {
+          return
+        }
+
+        const functional = utils.getAttribute(element, 'functional')
+
+        if (functional) {
+          context.report({
+            node: functional,
+            messageId: 'unexpected'
+          })
+        }
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-html-element-is.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-html-element-is.js
new file mode 100644
index 0000000000000000000000000000000000000000..e07f493a59b8c70ee9f14e2c977f818abf7bb6fd
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-html-element-is.js
@@ -0,0 +1,54 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'disallow using deprecated the `is` attribute on HTML elements (in Vue.js 3.0.0+)',
+      categories: ['vue3-essential'],
+      url: 'https://eslint.vuejs.org/rules/no-deprecated-html-element-is.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      unexpected: 'The `is` attribute on HTML element are deprecated.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective | VAttribute} node */
+      "VAttribute[directive=true][key.name.name='bind'][key.argument.name='is'], VAttribute[directive=false][key.name='is']"(
+        node
+      ) {
+        const element = node.parent.parent
+        if (
+          !utils.isHtmlWellKnownElementName(element.rawName) &&
+          !utils.isSvgWellKnownElementName(element.rawName)
+        ) {
+          return
+        }
+        context.report({
+          node,
+          loc: node.loc,
+          messageId: 'unexpected'
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-inline-template.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-inline-template.js
new file mode 100644
index 0000000000000000000000000000000000000000..647121638d9c11a47c76c50c373637159a13ddef
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-inline-template.js
@@ -0,0 +1,47 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'disallow using deprecated `inline-template` attribute (in Vue.js 3.0.0+)',
+      categories: ['vue3-essential'],
+      url: 'https://eslint.vuejs.org/rules/no-deprecated-inline-template.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      unexpected: '`inline-template` are deprecated.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VIdentifier} node */
+      "VAttribute[directive=false] > VIdentifier[rawName='inline-template']"(
+        node
+      ) {
+        context.report({
+          node,
+          loc: node.loc,
+          messageId: 'unexpected'
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-props-default-this.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-props-default-this.js
new file mode 100644
index 0000000000000000000000000000000000000000..926476c1e2ec86e03e5cfcf817f450f436e89303
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-props-default-this.js
@@ -0,0 +1,107 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow props default function `this` access',
+      categories: ['vue3-essential'],
+      url:
+        'https://eslint.vuejs.org/rules/no-deprecated-props-default-this.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      deprecated:
+        'Props default value factory functions no longer have access to `this`.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /**
+     * @typedef {object} ScopeStack
+     * @property {ScopeStack | null} upper
+     * @property {FunctionExpression | FunctionDeclaration} node
+     * @property {boolean} propDefault
+     */
+    /** @type {Set<FunctionExpression>} */
+    const propsDefault = new Set()
+    /** @type {ScopeStack | null} */
+    let scopeStack = null
+
+    /**
+     * @param {FunctionExpression | FunctionDeclaration | ArrowFunctionExpression} node
+     */
+    function onFunctionEnter(node) {
+      if (node.type === 'ArrowFunctionExpression') {
+        return
+      }
+      if (scopeStack) {
+        scopeStack = {
+          upper: scopeStack,
+          node,
+          propDefault: false
+        }
+      } else if (node.type === 'FunctionExpression' && propsDefault.has(node)) {
+        scopeStack = {
+          upper: scopeStack,
+          node,
+          propDefault: true
+        }
+      }
+    }
+
+    /**
+     * @param {FunctionExpression | FunctionDeclaration | ArrowFunctionExpression} node
+     */
+    function onFunctionExit(node) {
+      if (scopeStack && scopeStack.node === node) {
+        scopeStack = scopeStack.upper
+      }
+    }
+    return utils.defineVueVisitor(context, {
+      onVueObjectEnter(node) {
+        for (const prop of utils.getComponentProps(node)) {
+          if (prop.type !== 'object') {
+            continue
+          }
+          if (prop.value.type !== 'ObjectExpression') {
+            continue
+          }
+          const def = utils.findProperty(prop.value, 'default')
+          if (!def) {
+            continue
+          }
+          if (def.value.type !== 'FunctionExpression') {
+            continue
+          }
+          propsDefault.add(def.value)
+        }
+      },
+      ':function': onFunctionEnter,
+      ':function:exit': onFunctionExit,
+      ThisExpression(node) {
+        if (scopeStack && scopeStack.propDefault) {
+          context.report({
+            node,
+            messageId: 'deprecated'
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-scope-attribute.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-scope-attribute.js
new file mode 100644
index 0000000000000000000000000000000000000000..e7e22c3d32f395f87d59af9bd70c69ac88e773d3
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-scope-attribute.js
@@ -0,0 +1,31 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const utils = require('../utils')
+const scopeAttribute = require('./syntaxes/scope-attribute')
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow deprecated `scope` attribute (in Vue.js 2.5.0+)',
+      categories: ['vue3-essential'],
+      url: 'https://eslint.vuejs.org/rules/no-deprecated-scope-attribute.html'
+    },
+    fixable: 'code',
+    schema: [],
+    messages: {
+      forbiddenScopeAttribute: '`scope` attributes are deprecated.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const templateBodyVisitor = scopeAttribute.createTemplateBodyVisitor(
+      context
+    )
+    return utils.defineTemplateBodyVisitor(context, templateBodyVisitor)
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-slot-attribute.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-slot-attribute.js
new file mode 100644
index 0000000000000000000000000000000000000000..6459cdff496a161d6c964a25142afdeeb44b4f0a
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-slot-attribute.js
@@ -0,0 +1,29 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const utils = require('../utils')
+const slotAttribute = require('./syntaxes/slot-attribute')
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow deprecated `slot` attribute (in Vue.js 2.6.0+)',
+      categories: ['vue3-essential'],
+      url: 'https://eslint.vuejs.org/rules/no-deprecated-slot-attribute.html'
+    },
+    fixable: 'code',
+    schema: [],
+    messages: {
+      forbiddenSlotAttribute: '`slot` attributes are deprecated.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const templateBodyVisitor = slotAttribute.createTemplateBodyVisitor(context)
+    return utils.defineTemplateBodyVisitor(context, templateBodyVisitor)
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-slot-scope-attribute.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-slot-scope-attribute.js
new file mode 100644
index 0000000000000000000000000000000000000000..793b1ed6ddc7a973cd76e30e4d919d76cbd52a9e
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-slot-scope-attribute.js
@@ -0,0 +1,34 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const utils = require('../utils')
+const slotScopeAttribute = require('./syntaxes/slot-scope-attribute')
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'disallow deprecated `slot-scope` attribute (in Vue.js 2.6.0+)',
+      categories: ['vue3-essential'],
+      url:
+        'https://eslint.vuejs.org/rules/no-deprecated-slot-scope-attribute.html'
+    },
+    fixable: 'code',
+    schema: [],
+    messages: {
+      forbiddenSlotScopeAttribute: '`slot-scope` are deprecated.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const templateBodyVisitor = slotScopeAttribute.createTemplateBodyVisitor(
+      context,
+      { fixToUpgrade: true }
+    )
+    return utils.defineTemplateBodyVisitor(context, templateBodyVisitor)
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-v-bind-sync.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-v-bind-sync.js
new file mode 100644
index 0000000000000000000000000000000000000000..786ecb92714690e8d767c3e45425d8901a4cbd34
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-v-bind-sync.js
@@ -0,0 +1,62 @@
+/**
+ * @author Przemyslaw Falowski (@przemkow)
+ * @fileoverview Disallow use of deprecated `.sync` modifier on `v-bind` directive (in Vue.js 3.0.0+)
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'disallow use of deprecated `.sync` modifier on `v-bind` directive (in Vue.js 3.0.0+)',
+      categories: ['vue3-essential'],
+      url: 'https://eslint.vuejs.org/rules/no-deprecated-v-bind-sync.html'
+    },
+    fixable: 'code',
+    schema: [],
+    messages: {
+      syncModifierIsDeprecated:
+        "'.sync' modifier on 'v-bind' directive is deprecated. Use 'v-model:propName' instead."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      "VAttribute[directive=true][key.name.name='bind']"(node) {
+        if (node.key.modifiers.map((mod) => mod.name).includes('sync')) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'syncModifierIsDeprecated',
+            fix(fixer) {
+              if (node.key.argument == null) {
+                // is using spread syntax
+                return null
+              }
+              if (node.key.modifiers.length > 1) {
+                // has multiple modifiers
+                return null
+              }
+
+              const bindArgument = context
+                .getSourceCode()
+                .getText(node.key.argument)
+              return fixer.replaceText(node.key, `v-model:${bindArgument}`)
+            }
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-v-on-native-modifier.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-v-on-native-modifier.js
new file mode 100644
index 0000000000000000000000000000000000000000..4f60210b0cd95cee4c289834061a99eb6e03cffe
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-v-on-native-modifier.js
@@ -0,0 +1,50 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'disallow using deprecated `.native` modifiers (in Vue.js 3.0.0+)',
+      categories: ['vue3-essential'],
+      url:
+        'https://eslint.vuejs.org/rules/no-deprecated-v-on-native-modifier.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      deprecated: "'.native' modifier on 'v-on' directive is deprecated."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VIdentifier & {parent:VDirectiveKey} } node */
+      "VAttribute[directive=true][key.name.name='on'] > VDirectiveKey > VIdentifier[name='native']"(
+        node
+      ) {
+        const key = node.parent
+        if (!key.modifiers.includes(node)) return
+
+        context.report({
+          node,
+          messageId: 'deprecated'
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-v-on-number-modifiers.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-v-on-number-modifiers.js
new file mode 100644
index 0000000000000000000000000000000000000000..24341580aaa46eed7466eef3c8ed73720d019e8a
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-v-on-number-modifiers.js
@@ -0,0 +1,61 @@
+/**
+ * @fileoverview disallow using deprecated number (keycode) modifiers
+ * @author yoyo930021
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+const keyCodeToKey = require('../utils/keycode-to-key')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'disallow using deprecated number (keycode) modifiers (in Vue.js 3.0.0+)',
+      categories: ['vue3-essential'],
+      url:
+        'https://eslint.vuejs.org/rules/no-deprecated-v-on-number-modifiers.html'
+    },
+    fixable: 'code',
+    schema: [],
+    messages: {
+      numberModifierIsDeprecated:
+        "'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirectiveKey} node */
+      "VAttribute[directive=true][key.name.name='on'] > VDirectiveKey"(node) {
+        const modifier = node.modifiers.find((mod) =>
+          Number.isInteger(parseInt(mod.name, 10))
+        )
+        if (!modifier) return
+
+        const keyCodes = parseInt(modifier.name, 10)
+        if (keyCodes > 9 || keyCodes < 0) {
+          context.report({
+            node: modifier,
+            messageId: 'numberModifierIsDeprecated',
+            fix(fixer) {
+              const key = keyCodeToKey[keyCodes]
+              if (!key) return null
+
+              return fixer.replaceText(modifier, `${key}`)
+            }
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-vue-config-keycodes.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-vue-config-keycodes.js
new file mode 100644
index 0000000000000000000000000000000000000000..4db268e44af573cc4a6478598a95359443e16760
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-deprecated-vue-config-keycodes.js
@@ -0,0 +1,53 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'disallow using deprecated `Vue.config.keyCodes` (in Vue.js 3.0.0+)',
+      categories: ['vue3-essential'],
+      url:
+        'https://eslint.vuejs.org/rules/no-deprecated-vue-config-keycodes.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      unexpected: '`Vue.config.keyCodes` are deprecated.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return {
+      /** @param {MemberExpression} node */
+      "MemberExpression[property.type='Identifier'][property.name='keyCodes']"(
+        node
+      ) {
+        const config = utils.skipChainExpression(node.object)
+        if (
+          config.type !== 'MemberExpression' ||
+          config.property.type !== 'Identifier' ||
+          config.property.name !== 'config' ||
+          config.object.type !== 'Identifier' ||
+          config.object.name !== 'Vue'
+        ) {
+          return
+        }
+        context.report({
+          node,
+          messageId: 'unexpected'
+        })
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-dupe-keys.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-dupe-keys.js
new file mode 100644
index 0000000000000000000000000000000000000000..8b5e8e54c69d74d376ce7a7082fe15af7e7a5b48
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-dupe-keys.js
@@ -0,0 +1,68 @@
+/**
+ * @fileoverview Prevents duplication of field names.
+ * @author Armano
+ */
+'use strict'
+
+const utils = require('../utils')
+
+/**
+ * @typedef {import('../utils').GroupName} GroupName
+ */
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+/** @type {GroupName[]} */
+const GROUP_NAMES = ['props', 'computed', 'data', 'methods', 'setup']
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow duplication of field names',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/no-dupe-keys.html'
+    },
+    fixable: null, // or "code" or "whitespace"
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          groups: {
+            type: 'array'
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0] || {}
+    const groups = new Set(GROUP_NAMES.concat(options.groups || []))
+
+    // ----------------------------------------------------------------------
+    // Public
+    // ----------------------------------------------------------------------
+
+    return utils.executeOnVue(context, (obj) => {
+      const usedNames = []
+      const properties = utils.iterateProperties(obj, groups)
+
+      for (const o of properties) {
+        if (usedNames.indexOf(o.name) !== -1) {
+          context.report({
+            node: o.node,
+            message: "Duplicated key '{{name}}'.",
+            data: {
+              name: o.name
+            }
+          })
+        }
+
+        usedNames.push(o.name)
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-dupe-v-else-if.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-dupe-v-else-if.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e3a3dec110c039785f4402bf1c04086291da8f4
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-dupe-v-else-if.js
@@ -0,0 +1,193 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * @typedef {NonNullable<VExpressionContainer['expression']>} VExpression
+ */
+/**
+ * @typedef {object} OrOperands
+ * @property {VExpression} OrOperands.node
+ * @property {AndOperands[]} OrOperands.operands
+ *
+ * @typedef {object} AndOperands
+ * @property {VExpression} AndOperands.node
+ * @property {VExpression[]} AndOperands.operands
+ */
+/**
+ * Splits the given node by the given logical operator.
+ * @param {string} operator Logical operator `||` or `&&`.
+ * @param {VExpression} node The node to split.
+ * @returns {VExpression[]} Array of conditions that makes the node when joined by the operator.
+ */
+function splitByLogicalOperator(operator, node) {
+  if (node.type === 'LogicalExpression' && node.operator === operator) {
+    return [
+      ...splitByLogicalOperator(operator, node.left),
+      ...splitByLogicalOperator(operator, node.right)
+    ]
+  }
+  return [node]
+}
+
+/**
+ * @param {VExpression} node
+ */
+function splitByOr(node) {
+  return splitByLogicalOperator('||', node)
+}
+/**
+ * @param {VExpression} node
+ */
+function splitByAnd(node) {
+  return splitByLogicalOperator('&&', node)
+}
+
+/**
+ * @param {VExpression} node
+ * @returns {OrOperands}
+ */
+function buildOrOperands(node) {
+  const orOperands = splitByOr(node)
+  return {
+    node,
+    operands: orOperands.map((orOperand) => {
+      const andOperands = splitByAnd(orOperand)
+      return {
+        node: orOperand,
+        operands: andOperands
+      }
+    })
+  }
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'disallow duplicate conditions in `v-if` / `v-else-if` chains',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/no-dupe-v-else-if.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      unexpected:
+        'This branch can never execute. Its condition is a duplicate or covered by previous conditions in the `v-if` / `v-else-if` chain.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const tokenStore =
+      context.parserServices.getTemplateBodyTokenStore &&
+      context.parserServices.getTemplateBodyTokenStore()
+    /**
+     * Determines whether the two given nodes are considered to be equal. In particular, given that the nodes
+     * represent expressions in a boolean context, `||` and `&&` can be considered as commutative operators.
+     * @param {VExpression} a First node.
+     * @param {VExpression} b Second node.
+     * @returns {boolean} `true` if the nodes are considered to be equal.
+     */
+    function equal(a, b) {
+      if (a.type !== b.type) {
+        return false
+      }
+
+      if (
+        a.type === 'LogicalExpression' &&
+        b.type === 'LogicalExpression' &&
+        (a.operator === '||' || a.operator === '&&') &&
+        a.operator === b.operator
+      ) {
+        return (
+          (equal(a.left, b.left) && equal(a.right, b.right)) ||
+          (equal(a.left, b.right) && equal(a.right, b.left))
+        )
+      }
+
+      return utils.equalTokens(a, b, tokenStore)
+    }
+
+    /**
+     * Determines whether the first given AndOperands is a subset of the second given AndOperands.
+     *
+     * e.g. A: (a && b), B: (a && b && c): B is a subset of A.
+     *
+     * @param {AndOperands} operandsA The AndOperands to compare from.
+     * @param {AndOperands} operandsB The AndOperands to compare against.
+     * @returns {boolean} `true` if the `andOperandsA` is a subset of the `andOperandsB`.
+     */
+    function isSubset(operandsA, operandsB) {
+      return operandsA.operands.every((operandA) =>
+        operandsB.operands.some((operandB) => equal(operandA, operandB))
+      )
+    }
+
+    return utils.defineTemplateBodyVisitor(context, {
+      "VAttribute[directive=true][key.name.name='else-if']"(node) {
+        if (!node.value || !node.value.expression) {
+          return
+        }
+        const test = node.value.expression
+        const conditionsToCheck =
+          test.type === 'LogicalExpression' && test.operator === '&&'
+            ? [...splitByAnd(test), test]
+            : [test]
+        const listToCheck = conditionsToCheck.map(buildOrOperands)
+
+        /** @type {VElement | null} */
+        let current = node.parent.parent
+        while (current && (current = utils.prevSibling(current))) {
+          const vIf = utils.getDirective(current, 'if')
+          const currentTestDir = vIf || utils.getDirective(current, 'else-if')
+          if (!currentTestDir) {
+            return
+          }
+          if (currentTestDir.value && currentTestDir.value.expression) {
+            const currentOrOperands = buildOrOperands(
+              currentTestDir.value.expression
+            )
+
+            for (const condition of listToCheck) {
+              const operands = (condition.operands = condition.operands.filter(
+                (orOperand) => {
+                  return !currentOrOperands.operands.some((currentOrOperand) =>
+                    isSubset(currentOrOperand, orOperand)
+                  )
+                }
+              ))
+              if (!operands.length) {
+                context.report({
+                  node: condition.node,
+                  messageId: 'unexpected'
+                })
+                return
+              }
+            }
+          }
+
+          if (vIf) {
+            return
+          }
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-duplicate-attr-inheritance.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-duplicate-attr-inheritance.js
new file mode 100644
index 0000000000000000000000000000000000000000..08426c352983b42c15bd5a496fd5071ee412c15c
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-duplicate-attr-inheritance.js
@@ -0,0 +1,67 @@
+/**
+ * @fileoverview Disable inheritAttrs when using v-bind="$attrs"
+ * @author Hiroki Osame
+ */
+'use strict'
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'enforce `inheritAttrs` to be set to `false` when using `v-bind="$attrs"`',
+      categories: undefined,
+      recommended: false,
+      url: 'https://eslint.vuejs.org/rules/no-duplicate-attr-inheritance.html'
+    },
+    fixable: null,
+    schema: [
+      // fill in your schema
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /** @type {string | number | boolean | RegExp | BigInt | null} */
+    let inheritsAttrs = true
+
+    return Object.assign(
+      utils.executeOnVue(context, (node) => {
+        const inheritAttrsProp = utils.findProperty(node, 'inheritAttrs')
+
+        if (inheritAttrsProp && inheritAttrsProp.value.type === 'Literal') {
+          inheritsAttrs = inheritAttrsProp.value.value
+        }
+      }),
+      utils.defineTemplateBodyVisitor(context, {
+        /** @param {VExpressionContainer} node */
+        "VAttribute[directive=true][key.name.name='bind'][key.argument=null] > VExpressionContainer"(
+          node
+        ) {
+          if (!inheritsAttrs) {
+            return
+          }
+          const attrsRef = node.references.find((reference) => {
+            if (reference.variable != null) {
+              // Not vm reference
+              return false
+            }
+            return reference.id.name === '$attrs'
+          })
+
+          if (attrsRef) {
+            context.report({
+              node: attrsRef.id,
+              message: 'Set "inheritAttrs" to false.'
+            })
+          }
+        }
+      })
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-duplicate-attributes.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-duplicate-attributes.js
new file mode 100644
index 0000000000000000000000000000000000000000..83cc52d834ef0e926fa9715888e765ea74f8ec8f
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-duplicate-attributes.js
@@ -0,0 +1,119 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Get the name of the given attribute node.
+ * @param {VAttribute | VDirective} attribute The attribute node to get.
+ * @returns {string | null} The name of the attribute.
+ */
+function getName(attribute) {
+  if (!attribute.directive) {
+    return attribute.key.name
+  }
+  if (attribute.key.name.name === 'bind') {
+    return (
+      (attribute.key.argument &&
+        attribute.key.argument.type === 'VIdentifier' &&
+        attribute.key.argument.name) ||
+      null
+    )
+  }
+  return null
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow duplication of attributes',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/no-duplicate-attributes.html'
+    },
+    fixable: null,
+
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          allowCoexistClass: {
+            type: 'boolean'
+          },
+          allowCoexistStyle: {
+            type: 'boolean'
+          }
+        }
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0] || {}
+    const allowCoexistStyle = options.allowCoexistStyle !== false
+    const allowCoexistClass = options.allowCoexistClass !== false
+
+    /** @type {Set<string>} */
+    const directiveNames = new Set()
+    /** @type {Set<string>} */
+    const attributeNames = new Set()
+
+    /**
+     * @param {string} name
+     * @param {boolean} isDirective
+     */
+    function isDuplicate(name, isDirective) {
+      if (
+        (allowCoexistStyle && name === 'style') ||
+        (allowCoexistClass && name === 'class')
+      ) {
+        return isDirective ? directiveNames.has(name) : attributeNames.has(name)
+      }
+      return directiveNames.has(name) || attributeNames.has(name)
+    }
+
+    return utils.defineTemplateBodyVisitor(context, {
+      VStartTag() {
+        directiveNames.clear()
+        attributeNames.clear()
+      },
+      VAttribute(node) {
+        const name = getName(node)
+        if (name == null) {
+          return
+        }
+
+        if (isDuplicate(name, node.directive)) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "Duplicate attribute '{{name}}'.",
+            data: { name }
+          })
+        }
+
+        if (node.directive) {
+          directiveNames.add(name)
+        } else {
+          attributeNames.add(name)
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-empty-component-block.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-empty-component-block.js
new file mode 100644
index 0000000000000000000000000000000000000000..6378dcd83f1b5cb2e28ff6ec986912dffeb378ac
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-empty-component-block.js
@@ -0,0 +1,109 @@
+/**
+ * @author tyankatsu <https://github.com/tyankatsu0105>
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const { isVElement } = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+/**
+ * check whether has attribute `src`
+ * @param {VElement} componentBlock
+ */
+function hasAttributeSrc(componentBlock) {
+  const hasAttribute = componentBlock.startTag.attributes.length > 0
+
+  const hasSrc =
+    componentBlock.startTag.attributes.filter(
+      (attribute) =>
+        !attribute.directive &&
+        attribute.key.name === 'src' &&
+        attribute.value &&
+        attribute.value.value !== ''
+    ).length > 0
+
+  return hasAttribute && hasSrc
+}
+
+/**
+ * check whether value under the component block is only whitespaces or break lines
+ * @param {VElement} componentBlock
+ */
+function isValueOnlyWhiteSpacesOrLineBreaks(componentBlock) {
+  return (
+    componentBlock.children.length === 1 &&
+    componentBlock.children[0].type === 'VText' &&
+    !componentBlock.children[0].value.trim()
+  )
+}
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'disallow the `<template>` `<script>` `<style>` block to be empty',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-empty-component-block.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      unexpected: '`<{{ blockName }}>` is empty. Empty block is not allowed.'
+    }
+  },
+
+  /**
+   * @param {RuleContext} context - The rule context.
+   * @returns {RuleListener} AST event handlers.
+   */
+  create(context) {
+    if (!context.parserServices.getDocumentFragment) {
+      return {}
+    }
+    const documentFragment = context.parserServices.getDocumentFragment()
+    if (!documentFragment) {
+      return {}
+    }
+
+    const componentBlocks = documentFragment.children.filter(isVElement)
+
+    return {
+      Program() {
+        for (const componentBlock of componentBlocks) {
+          if (
+            componentBlock.name !== 'template' &&
+            componentBlock.name !== 'script' &&
+            componentBlock.name !== 'style'
+          )
+            continue
+
+          // https://vue-loader.vuejs.org/spec.html#src-imports
+          if (hasAttributeSrc(componentBlock)) continue
+
+          if (
+            isValueOnlyWhiteSpacesOrLineBreaks(componentBlock) ||
+            componentBlock.children.length === 0
+          ) {
+            context.report({
+              node: componentBlock,
+              loc: componentBlock.loc,
+              messageId: 'unexpected',
+              data: {
+                blockName: componentBlock.name
+              }
+            })
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-empty-pattern.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-empty-pattern.js
new file mode 100644
index 0000000000000000000000000000000000000000..91c7472de550026f47aa1ae27d38269046f933c6
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-empty-pattern.js
@@ -0,0 +1,9 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('no-empty-pattern')
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-extra-parens.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-extra-parens.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f202fa9d0c034c206630b38d50cbf6b5ca58e38
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-extra-parens.js
@@ -0,0 +1,182 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { isParenthesized } = require('eslint-utils')
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('no-extra-parens', {
+  skipDynamicArguments: true,
+  create: createForVueSyntax
+})
+
+/**
+ * Check whether the given token is a left parenthesis.
+ * @param {Token} token The token to check.
+ * @returns {boolean} `true` if the token is a left parenthesis.
+ */
+function isLeftParen(token) {
+  return token.type === 'Punctuator' && token.value === '('
+}
+
+/**
+ * Check whether the given token is a right parenthesis.
+ * @param {Token} token The token to check.
+ * @returns {boolean} `true` if the token is a right parenthesis.
+ */
+function isRightParen(token) {
+  return token.type === 'Punctuator' && token.value === ')'
+}
+
+/**
+ * Check whether the given token is a left brace.
+ * @param {Token} token The token to check.
+ * @returns {boolean} `true` if the token is a left brace.
+ */
+function isLeftBrace(token) {
+  return token.type === 'Punctuator' && token.value === '{'
+}
+
+/**
+ * Check whether the given token is a right brace.
+ * @param {Token} token The token to check.
+ * @returns {boolean} `true` if the token is a right brace.
+ */
+function isRightBrace(token) {
+  return token.type === 'Punctuator' && token.value === '}'
+}
+
+/**
+ * Check whether the given token is a left bracket.
+ * @param {Token} token The token to check.
+ * @returns {boolean} `true` if the token is a left bracket.
+ */
+function isLeftBracket(token) {
+  return token.type === 'Punctuator' && token.value === '['
+}
+
+/**
+ * Check whether the given token is a right bracket.
+ * @param {Token} token The token to check.
+ * @returns {boolean} `true` if the token is a right bracket.
+ */
+function isRightBracket(token) {
+  return token.type === 'Punctuator' && token.value === ']'
+}
+
+/**
+ * Determines if a given expression node is an IIFE
+ * @param {Expression} node The node to check
+ * @returns {node is CallExpression & { callee: FunctionExpression } } `true` if the given node is an IIFE
+ */
+function isIIFE(node) {
+  return (
+    node.type === 'CallExpression' && node.callee.type === 'FunctionExpression'
+  )
+}
+
+/**
+ * @param {RuleContext} context - The rule context.
+ * @returns {TemplateListener} AST event handlers.
+ */
+function createForVueSyntax(context) {
+  if (!context.parserServices.getTemplateBodyTokenStore) {
+    return {}
+  }
+  const tokenStore = context.parserServices.getTemplateBodyTokenStore()
+
+  /**
+   * Checks if the given node turns into a filter when unwraped.
+   * @param {Expression} expression node to evaluate
+   * @returns {boolean} `true` if the given node turns into a filter when unwraped.
+   */
+  function isUnwrapChangeToFilter(expression) {
+    let parenStack = null
+    for (const token of tokenStore.getTokens(expression)) {
+      if (!parenStack) {
+        if (token.value === '|') {
+          return true
+        }
+      } else {
+        if (parenStack.isUpToken(token)) {
+          parenStack = parenStack.upper
+          continue
+        }
+      }
+      if (isLeftParen(token)) {
+        parenStack = { isUpToken: isRightParen, upper: parenStack }
+      } else if (isLeftBracket(token)) {
+        parenStack = { isUpToken: isRightBracket, upper: parenStack }
+      } else if (isLeftBrace(token)) {
+        parenStack = { isUpToken: isRightBrace, upper: parenStack }
+      }
+    }
+    return false
+  }
+  /**
+   * @param {VExpressionContainer & { expression: Expression | VFilterSequenceExpression | null }} node
+   */
+  function verify(node) {
+    if (!node.expression) {
+      return
+    }
+
+    const expression =
+      node.expression.type === 'VFilterSequenceExpression'
+        ? node.expression.expression
+        : node.expression
+
+    if (!isParenthesized(expression, tokenStore)) {
+      return
+    }
+
+    if (!isParenthesized(2, expression, tokenStore)) {
+      if (
+        isIIFE(expression) &&
+        !isParenthesized(expression.callee, tokenStore)
+      ) {
+        return
+      }
+      if (isUnwrapChangeToFilter(expression)) {
+        return
+      }
+    }
+    report(expression)
+  }
+
+  /**
+   * Report the node
+   * @param {Expression} node node to evaluate
+   * @returns {void}
+   * @private
+   */
+  function report(node) {
+    const sourceCode = context.getSourceCode()
+    const leftParenToken = tokenStore.getTokenBefore(node)
+    const rightParenToken = tokenStore.getTokenAfter(node)
+
+    context.report({
+      node,
+      loc: leftParenToken.loc,
+      messageId: 'unexpected',
+      fix(fixer) {
+        const parenthesizedSource = sourceCode.text.slice(
+          leftParenToken.range[1],
+          rightParenToken.range[0]
+        )
+
+        return fixer.replaceTextRange(
+          [leftParenToken.range[0], rightParenToken.range[1]],
+          parenthesizedSource
+        )
+      }
+    })
+  }
+
+  return {
+    "VAttribute[directive=true][key.name.name='bind'] > VExpressionContainer": verify,
+    'VElement > VExpressionContainer': verify
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-irregular-whitespace.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-irregular-whitespace.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c05083b3b429d8ed4011ca646bd29ec2ca6478a
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-irregular-whitespace.js
@@ -0,0 +1,251 @@
+/**
+ * @author Yosuke Ota
+ * @fileoverview Rule to disalow whitespace that is not a tab or space, whitespace inside strings and comments are allowed
+ */
+
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Constants
+// ------------------------------------------------------------------------------
+
+const ALL_IRREGULARS = /[\f\v\u0085\ufeff\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u202f\u205f\u3000\u2028\u2029]/u
+const IRREGULAR_WHITESPACE = /[\f\v\u0085\ufeff\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u202f\u205f\u3000]+/gmu
+const IRREGULAR_LINE_TERMINATORS = /[\u2028\u2029]/gmu
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+
+    docs: {
+      description: 'disallow irregular whitespace',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-irregular-whitespace.html',
+      extensionRule: true,
+      coreRuleUrl: 'https://eslint.org/docs/rules/no-irregular-whitespace'
+    },
+
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          skipComments: {
+            type: 'boolean',
+            default: false
+          },
+          skipStrings: {
+            type: 'boolean',
+            default: true
+          },
+          skipTemplates: {
+            type: 'boolean',
+            default: false
+          },
+          skipRegExps: {
+            type: 'boolean',
+            default: false
+          },
+          skipHTMLAttributeValues: {
+            type: 'boolean',
+            default: false
+          },
+          skipHTMLTextContents: {
+            type: 'boolean',
+            default: false
+          }
+        },
+        additionalProperties: false
+      }
+    ],
+    messages: {
+      disallow: 'Irregular whitespace not allowed.'
+    }
+  },
+  /**
+   * @param {RuleContext} context - The rule context.
+   * @returns {RuleListener} AST event handlers.
+   */
+  create(context) {
+    // Module store of error indexes that we have found
+    /** @type {number[]} */
+    let errorIndexes = []
+
+    // Lookup the `skipComments` option, which defaults to `false`.
+    const options = context.options[0] || {}
+    const skipComments = !!options.skipComments
+    const skipStrings = options.skipStrings !== false
+    const skipRegExps = !!options.skipRegExps
+    const skipTemplates = !!options.skipTemplates
+    const skipHTMLAttributeValues = !!options.skipHTMLAttributeValues
+    const skipHTMLTextContents = !!options.skipHTMLTextContents
+
+    const sourceCode = context.getSourceCode()
+
+    /**
+     * Removes errors that occur inside a string node
+     * @param {ASTNode | Token} node to check for matching errors.
+     * @returns {void}
+     * @private
+     */
+    function removeWhitespaceError(node) {
+      const [startIndex, endIndex] = node.range
+
+      errorIndexes = errorIndexes.filter(
+        (errorIndex) => errorIndex < startIndex || endIndex <= errorIndex
+      )
+    }
+
+    /**
+     * Checks literal nodes for errors that we are choosing to ignore and calls the relevant methods to remove the errors
+     * @param {Literal} node to check for matching errors.
+     * @returns {void}
+     * @private
+     */
+    function removeInvalidNodeErrorsInLiteral(node) {
+      const shouldCheckStrings = skipStrings && typeof node.value === 'string'
+      const shouldCheckRegExps = skipRegExps && Boolean(node.regex)
+
+      if (shouldCheckStrings || shouldCheckRegExps) {
+        // If we have irregular characters remove them from the errors list
+        if (ALL_IRREGULARS.test(sourceCode.getText(node))) {
+          removeWhitespaceError(node)
+        }
+      }
+    }
+
+    /**
+     * Checks template string literal nodes for errors that we are choosing to ignore and calls the relevant methods to remove the errors
+     * @param {TemplateElement} node to check for matching errors.
+     * @returns {void}
+     * @private
+     */
+    function removeInvalidNodeErrorsInTemplateLiteral(node) {
+      if (ALL_IRREGULARS.test(node.value.raw)) {
+        removeWhitespaceError(node)
+      }
+    }
+
+    /**
+     * Checks HTML attribute value nodes for errors that we are choosing to ignore and calls the relevant methods to remove the errors
+     * @param {VLiteral} node to check for matching errors.
+     * @returns {void}
+     * @private
+     */
+    function removeInvalidNodeErrorsInHTMLAttributeValue(node) {
+      if (ALL_IRREGULARS.test(sourceCode.getText(node))) {
+        removeWhitespaceError(node)
+      }
+    }
+
+    /**
+     * Checks HTML text content nodes for errors that we are choosing to ignore and calls the relevant methods to remove the errors
+     * @param {VText} node to check for matching errors.
+     * @returns {void}
+     * @private
+     */
+    function removeInvalidNodeErrorsInHTMLTextContent(node) {
+      if (ALL_IRREGULARS.test(sourceCode.getText(node))) {
+        removeWhitespaceError(node)
+      }
+    }
+
+    /**
+     * Checks comment nodes for errors that we are choosing to ignore and calls the relevant methods to remove the errors
+     * @param {Comment | HTMLComment | HTMLBogusComment} node to check for matching errors.
+     * @returns {void}
+     * @private
+     */
+    function removeInvalidNodeErrorsInComment(node) {
+      if (ALL_IRREGULARS.test(node.value)) {
+        removeWhitespaceError(node)
+      }
+    }
+
+    /**
+     * Checks the program source for irregular whitespaces and irregular line terminators
+     * @returns {void}
+     * @private
+     */
+    function checkForIrregularWhitespace() {
+      const source = sourceCode.getText()
+      let match
+      while ((match = IRREGULAR_WHITESPACE.exec(source)) !== null) {
+        errorIndexes.push(match.index)
+      }
+      while ((match = IRREGULAR_LINE_TERMINATORS.exec(source)) !== null) {
+        errorIndexes.push(match.index)
+      }
+    }
+
+    checkForIrregularWhitespace()
+
+    if (!errorIndexes.length) {
+      return {}
+    }
+    const bodyVisitor = utils.defineTemplateBodyVisitor(context, {
+      ...(skipHTMLAttributeValues
+        ? {
+            'VAttribute[directive=false] > VLiteral': removeInvalidNodeErrorsInHTMLAttributeValue
+          }
+        : {}),
+      ...(skipHTMLTextContents
+        ? { VText: removeInvalidNodeErrorsInHTMLTextContent }
+        : {}),
+
+      // inline scripts
+      Literal: removeInvalidNodeErrorsInLiteral,
+      ...(skipTemplates
+        ? { TemplateElement: removeInvalidNodeErrorsInTemplateLiteral }
+        : {})
+    })
+    return {
+      ...bodyVisitor,
+      Literal: removeInvalidNodeErrorsInLiteral,
+      ...(skipTemplates
+        ? { TemplateElement: removeInvalidNodeErrorsInTemplateLiteral }
+        : {}),
+      'Program:exit'(node) {
+        if (bodyVisitor['Program:exit']) {
+          bodyVisitor['Program:exit'](node)
+        }
+        const templateBody = node.templateBody
+        if (skipComments) {
+          // First strip errors occurring in comment nodes.
+          sourceCode.getAllComments().forEach(removeInvalidNodeErrorsInComment)
+          if (templateBody) {
+            templateBody.comments.forEach(removeInvalidNodeErrorsInComment)
+          }
+        }
+
+        // Removes errors that occur outside script and template
+        const [scriptStart, scriptEnd] = node.range
+        const [templateStart, templateEnd] = templateBody
+          ? templateBody.range
+          : [0, 0]
+        errorIndexes = errorIndexes.filter(
+          (errorIndex) =>
+            (scriptStart <= errorIndex && errorIndex < scriptEnd) ||
+            (templateStart <= errorIndex && errorIndex < templateEnd)
+        )
+
+        // If we have any errors remaining report on them
+        errorIndexes.forEach((errorIndex) => {
+          context.report({
+            loc: sourceCode.getLocFromIndex(errorIndex),
+            messageId: 'disallow'
+          })
+        })
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-lifecycle-after-await.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-lifecycle-after-await.js
new file mode 100644
index 0000000000000000000000000000000000000000..7688d5b70bb2242ccaca037f6473012afc7cbfe7
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-lifecycle-after-await.js
@@ -0,0 +1,133 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+const { ReferenceTracker } = require('eslint-utils')
+const utils = require('../utils')
+
+/**
+ * @typedef {import('eslint-utils').TYPES.TraceMap} TraceMap
+ */
+
+const LIFECYCLE_HOOKS = [
+  'onBeforeMount',
+  'onBeforeUnmount',
+  'onBeforeUpdate',
+  'onErrorCaptured',
+  'onMounted',
+  'onRenderTracked',
+  'onRenderTriggered',
+  'onUnmounted',
+  'onUpdated',
+  'onActivated',
+  'onDeactivated'
+]
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow asynchronously registered lifecycle hooks',
+      categories: ['vue3-essential'],
+      url: 'https://eslint.vuejs.org/rules/no-lifecycle-after-await.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      forbidden: 'The lifecycle hooks after `await` expression are forbidden.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /**
+     * @typedef {object} SetupFunctionData
+     * @property {Property} setupProperty
+     * @property {boolean} afterAwait
+     */
+    /**
+     * @typedef {object} ScopeStack
+     * @property {ScopeStack | null} upper
+     * @property {FunctionDeclaration | FunctionExpression | ArrowFunctionExpression} functionNode
+     */
+    /** @type {Set<ESNode>} */
+    const lifecycleHookCallNodes = new Set()
+    /** @type {Map<FunctionDeclaration | FunctionExpression | ArrowFunctionExpression, SetupFunctionData>} */
+    const setupFunctions = new Map()
+
+    /** @type {ScopeStack | null} */
+    let scopeStack = null
+
+    return Object.assign(
+      {
+        Program() {
+          const tracker = new ReferenceTracker(context.getScope())
+          const traceMap = {
+            /** @type {TraceMap} */
+            vue: {
+              [ReferenceTracker.ESM]: true
+            }
+          }
+          for (const lifecycleHook of LIFECYCLE_HOOKS) {
+            traceMap.vue[lifecycleHook] = {
+              [ReferenceTracker.CALL]: true
+            }
+          }
+
+          for (const { node } of tracker.iterateEsmReferences(traceMap)) {
+            lifecycleHookCallNodes.add(node)
+          }
+        }
+      },
+      utils.defineVueVisitor(context, {
+        ':function'(node) {
+          scopeStack = {
+            upper: scopeStack,
+            functionNode: node
+          }
+        },
+        onSetupFunctionEnter(node) {
+          setupFunctions.set(node, {
+            setupProperty: node.parent,
+            afterAwait: false
+          })
+        },
+        AwaitExpression() {
+          if (!scopeStack) {
+            return
+          }
+          const setupFunctionData = setupFunctions.get(scopeStack.functionNode)
+          if (!setupFunctionData) {
+            return
+          }
+          setupFunctionData.afterAwait = true
+        },
+        CallExpression(node) {
+          if (!scopeStack) {
+            return
+          }
+          const setupFunctionData = setupFunctions.get(scopeStack.functionNode)
+          if (!setupFunctionData || !setupFunctionData.afterAwait) {
+            return
+          }
+
+          if (lifecycleHookCallNodes.has(node)) {
+            if (node.arguments.length >= 2) {
+              // Has target instance. e.g. `onMounted(() => {}, instance)`
+              return
+            }
+            context.report({
+              node,
+              messageId: 'forbidden'
+            })
+          }
+        },
+        ':function:exit'(node) {
+          scopeStack = scopeStack && scopeStack.upper
+
+          setupFunctions.delete(node)
+        }
+      })
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-lone-template.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-lone-template.js
new file mode 100644
index 0000000000000000000000000000000000000000..b56c608152f25acb7cdfcb006ff4e6ca246bf66f
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-lone-template.js
@@ -0,0 +1,129 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+// https://github.com/vuejs/vue-next/blob/64e2f4643602c5980361e66674141e61ba60ef70/packages/compiler-core/src/parse.ts#L405
+const SPECIAL_TEMPLATE_DIRECTIVES = new Set([
+  'if',
+  'else',
+  'else-if',
+  'for',
+  'slot'
+])
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow unnecessary `<template>`',
+      categories: ['vue3-recommended', 'recommended'],
+      url: 'https://eslint.vuejs.org/rules/no-lone-template.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          ignoreAccessible: {
+            type: 'boolean'
+          }
+        },
+        additionalProperties: false
+      }
+    ],
+    messages: {
+      requireDirective: '`<template>` require directive.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0] || {}
+    const ignoreAccessible = options.ignoreAccessible === true
+
+    /**
+     * @param {VAttribute | VDirective} attr
+     */
+    function getKeyName(attr) {
+      if (attr.directive) {
+        if (attr.key.name.name !== 'bind') {
+          // no v-bind
+          return null
+        }
+        if (
+          !attr.key.argument ||
+          attr.key.argument.type === 'VExpressionContainer'
+        ) {
+          // unknown
+          return null
+        }
+        return attr.key.argument.name
+      }
+      return attr.key.name
+    }
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VStartTag} node */
+      "VElement[name='template'][parent.type='VElement'] > VStartTag"(node) {
+        if (
+          node.attributes.some((attr) => {
+            if (attr.directive) {
+              const directiveName = attr.key.name.name
+              if (SPECIAL_TEMPLATE_DIRECTIVES.has(directiveName)) {
+                return true
+              }
+              if (directiveName === 'slot-scope') {
+                // `slot-scope` is deprecated in Vue.js 2.6
+                return true
+              }
+              if (directiveName === 'scope') {
+                // `scope` is deprecated in Vue.js 2.5
+                return true
+              }
+            }
+
+            const keyName = getKeyName(attr)
+            if (keyName === 'slot') {
+              // `slot` is deprecated in Vue.js 2.6
+              return true
+            }
+
+            return false
+          })
+        ) {
+          return
+        }
+
+        if (
+          ignoreAccessible &&
+          node.attributes.some((attr) => {
+            const keyName = getKeyName(attr)
+            return keyName === 'id' || keyName === 'ref'
+          })
+        ) {
+          return
+        }
+
+        context.report({
+          node,
+          messageId: 'requireDirective'
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-multi-spaces.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-multi-spaces.js
new file mode 100644
index 0000000000000000000000000000000000000000..aa8b70a220c9042654da0e9845258a3d65ac4669
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-multi-spaces.js
@@ -0,0 +1,107 @@
+/**
+ * @fileoverview This rule warns about the usage of extra whitespaces between attributes
+ * @author Armano
+ */
+'use strict'
+
+const path = require('path')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+/**
+ * @param {RuleContext} context
+ * @param {Token} node
+ */
+const isProperty = (context, node) => {
+  const sourceCode = context.getSourceCode()
+  return node.type === 'Punctuator' && sourceCode.getText(node) === ':'
+}
+
+module.exports = {
+  meta: {
+    type: 'layout',
+    docs: {
+      description: 'disallow multiple spaces',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/no-multi-spaces.html'
+    },
+    fixable: 'whitespace', // or "code" or "whitespace"
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          ignoreProperties: {
+            type: 'boolean'
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+
+  /**
+   * @param {RuleContext} context - The rule context.
+   * @returns {RuleListener} AST event handlers.
+   */
+  create(context) {
+    const options = context.options[0] || {}
+    const ignoreProperties = options.ignoreProperties === true
+
+    return {
+      Program(node) {
+        if (context.parserServices.getTemplateBodyTokenStore == null) {
+          const filename = context.getFilename()
+          if (path.extname(filename) === '.vue') {
+            context.report({
+              loc: { line: 1, column: 0 },
+              message:
+                'Use the latest vue-eslint-parser. See also https://eslint.vuejs.org/user-guide/#what-is-the-use-the-latest-vue-eslint-parser-error.'
+            })
+          }
+          return
+        }
+        if (!node.templateBody) {
+          return
+        }
+        const sourceCode = context.getSourceCode()
+        const tokenStore = context.parserServices.getTemplateBodyTokenStore()
+        const tokens = tokenStore.getTokens(node.templateBody, {
+          includeComments: true
+        })
+
+        let prevToken = /** @type {Token} */ (tokens.shift())
+        for (const token of tokens) {
+          const spaces = token.range[0] - prevToken.range[1]
+          const shouldIgnore =
+            ignoreProperties &&
+            (isProperty(context, token) || isProperty(context, prevToken))
+          if (
+            spaces > 1 &&
+            token.loc.start.line === prevToken.loc.start.line &&
+            !shouldIgnore
+          ) {
+            context.report({
+              node: token,
+              loc: {
+                start: prevToken.loc.end,
+                end: token.loc.start
+              },
+              message: "Multiple spaces found before '{{displayValue}}'.",
+              fix: (fixer) =>
+                fixer.replaceTextRange(
+                  [prevToken.range[1], token.range[0]],
+                  ' '
+                ),
+              data: {
+                displayValue: sourceCode.getText(token)
+              }
+            })
+          }
+          prevToken = token
+        }
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-multiple-objects-in-class.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-multiple-objects-in-class.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf930ebec4932b4dcdfaa095800c44f7ef870570
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-multiple-objects-in-class.js
@@ -0,0 +1,59 @@
+/**
+ * @author tyankatsu <https://github.com/tyankatsu0105>
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const { defineTemplateBodyVisitor } = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+/**
+ * count ObjectExpression element
+ * @param {VDirective & {value: VExpressionContainer & {expression: ArrayExpression}}} node
+ * @return {number}
+ */
+function countObjectExpression(node) {
+  return node.value.expression.elements.filter(
+    (element) => element && element.type === 'ObjectExpression'
+  ).length
+}
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow to pass multiple objects into array to class',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-multiple-objects-in-class.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      unexpected: 'Unexpected multiple objects. Merge objects.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return defineTemplateBodyVisitor(context, {
+      /** @param {VDirective & {value: VExpressionContainer & {expression: ArrayExpression}}} node */
+      'VAttribute[directive=true][key.argument.name="class"][key.name.name="bind"][value.expression.type="ArrayExpression"]'(
+        node
+      ) {
+        if (countObjectExpression(node) > 1) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'unexpected'
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-multiple-slot-args.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-multiple-slot-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..474a56ba2f62ae273855e5f503f2e0202eef35da
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-multiple-slot-args.js
@@ -0,0 +1,118 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+const { findVariable } = require('eslint-utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow to pass multiple arguments to scoped slots',
+      categories: ['vue3-recommended', 'recommended'],
+      url: 'https://eslint.vuejs.org/rules/no-multiple-slot-args.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      unexpected: 'Unexpected multiple arguments.',
+      unexpectedSpread: 'Unexpected spread argument.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /**
+     * Verify the given node
+     * @param {MemberExpression | Identifier} node The node to verify
+     */
+    function verify(node) {
+      const parent = node.parent
+
+      if (
+        parent.type === 'VariableDeclarator' &&
+        parent.id.type === 'Identifier'
+      ) {
+        // const foo = this.$scopedSlots.foo
+        verifyReferences(parent.id)
+        return
+      }
+
+      if (
+        parent.type === 'AssignmentExpression' &&
+        parent.right === node &&
+        parent.left.type === 'Identifier'
+      ) {
+        // foo = this.$scopedSlots.foo
+        verifyReferences(parent.left)
+        return
+      }
+
+      if (parent.type !== 'CallExpression' || parent.arguments.includes(node)) {
+        return
+      }
+
+      if (!parent.arguments.length) {
+        return
+      }
+      if (parent.arguments.length > 1) {
+        context.report({
+          node: parent.arguments[1],
+          messageId: 'unexpected'
+        })
+      }
+      if (parent.arguments[0].type === 'SpreadElement') {
+        context.report({
+          node: parent.arguments[0],
+          messageId: 'unexpectedSpread'
+        })
+      }
+    }
+    /**
+     * Verify the references of the given node.
+     * @param {Identifier} node The node to verify
+     */
+    function verifyReferences(node) {
+      const variable = findVariable(context.getScope(), node)
+      if (!variable) {
+        return
+      }
+      for (const reference of variable.references) {
+        if (!reference.isRead()) {
+          continue
+        }
+        /** @type {Identifier} */
+        const id = reference.identifier
+        verify(id)
+      }
+    }
+
+    return utils.defineVueVisitor(context, {
+      /** @param {MemberExpression} node */
+      MemberExpression(node) {
+        const object = utils.skipChainExpression(node.object)
+        if (object.type !== 'MemberExpression') {
+          return
+        }
+        const name = utils.getStaticPropertyName(object)
+        if (!name || (name !== '$slots' && name !== '$scopedSlots')) {
+          return
+        }
+        if (!utils.isThis(object.object, context)) {
+          return
+        }
+        verify(node)
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-multiple-template-root.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-multiple-template-root.js
new file mode 100644
index 0000000000000000000000000000000000000000..1bbad01ca431dc6a90b6223810ecd74d284a8d7d
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-multiple-template-root.js
@@ -0,0 +1,101 @@
+/**
+ * @fileoverview disallow adding multiple root nodes to the template
+ * @author Przemyslaw Falowski (@przemkow)
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow adding multiple root nodes to the template',
+      categories: ['essential'],
+      url: 'https://eslint.vuejs.org/rules/no-multiple-template-root.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /**
+   * @param {RuleContext} context - The rule context.
+   * @returns {RuleListener} AST event handlers.
+   */
+  create(context) {
+    const sourceCode = context.getSourceCode()
+
+    return {
+      Program(program) {
+        const element = program.templateBody
+        if (element == null) {
+          return
+        }
+
+        const rootElements = []
+        let extraText = null
+        let extraElement = null
+        let vIf = false
+        for (const child of element.children) {
+          if (child.type === 'VElement') {
+            if (rootElements.length === 0) {
+              rootElements.push(child)
+              vIf = utils.hasDirective(child, 'if')
+            } else if (vIf && utils.hasDirective(child, 'else-if')) {
+              rootElements.push(child)
+            } else if (vIf && utils.hasDirective(child, 'else')) {
+              rootElements.push(child)
+              vIf = false
+            } else {
+              extraElement = child
+            }
+          } else if (sourceCode.getText(child).trim() !== '') {
+            extraText = child
+          }
+        }
+
+        if (extraText != null) {
+          context.report({
+            node: extraText,
+            loc: extraText.loc,
+            message: 'The template root requires an element rather than texts.'
+          })
+        } else if (extraElement != null) {
+          context.report({
+            node: extraElement,
+            loc: extraElement.loc,
+            message: 'The template root requires exactly one element.'
+          })
+        } else {
+          for (const element of rootElements) {
+            const tag = element.startTag
+            const name = element.name
+
+            if (name === 'template' || name === 'slot') {
+              context.report({
+                node: tag,
+                loc: tag.loc,
+                message: "The template root disallows '<{{name}}>' elements.",
+                data: { name }
+              })
+            }
+            if (utils.hasDirective(element, 'for')) {
+              context.report({
+                node: tag,
+                loc: tag.loc,
+                message: "The template root disallows 'v-for' directives."
+              })
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-mutating-props.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-mutating-props.js
new file mode 100644
index 0000000000000000000000000000000000000000..b8eeb17e460c56a7a17a4761416fe8533850f1e7
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-mutating-props.js
@@ -0,0 +1,323 @@
+/**
+ * @fileoverview disallow mutation component props
+ * @author 2018 Armano
+ */
+'use strict'
+
+const utils = require('../utils')
+const { findVariable } = require('eslint-utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow mutation of component props',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/no-mutating-props.html'
+    },
+    fixable: null, // or "code" or "whitespace"
+    schema: [
+      // fill in your schema
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /** @type {Map<ObjectExpression, Set<string>>} */
+    const propsMap = new Map()
+    /** @type { { type: 'export' | 'mark' | 'definition', object: ObjectExpression } | null } */
+    let vueObjectData = null
+
+    /**
+     * @param {ASTNode} node
+     * @param {string} name
+     */
+    function report(node, name) {
+      context.report({
+        node,
+        message: 'Unexpected mutation of "{{key}}" prop.',
+        data: {
+          key: name
+        }
+      })
+    }
+
+    /**
+     * @param {ASTNode} node
+     * @returns {VExpressionContainer}
+     */
+    function getVExpressionContainer(node) {
+      let n = node
+      while (n.type !== 'VExpressionContainer') {
+        n = /** @type {ASTNode} */ (n.parent)
+      }
+      return n
+    }
+    /**
+     * @param {MemberExpression|AssignmentProperty} node
+     * @returns {string}
+     */
+    function getPropertyNameText(node) {
+      const name = utils.getStaticPropertyName(node)
+      if (name) {
+        return name
+      }
+      if (node.computed) {
+        const expr = node.type === 'Property' ? node.key : node.property
+        const str = context.getSourceCode().getText(expr)
+        return `[${str}]`
+      }
+      return '?unknown?'
+    }
+    /**
+     * @param {ASTNode} node
+     * @returns {node is Identifier}
+     */
+    function isVmReference(node) {
+      if (node.type !== 'Identifier') {
+        return false
+      }
+      const parent = node.parent
+      if (parent.type === 'MemberExpression') {
+        if (parent.property === node) {
+          // foo.id
+          return false
+        }
+      } else if (parent.type === 'Property') {
+        // {id: foo}
+        if (parent.key === node && !parent.computed) {
+          return false
+        }
+      }
+
+      const exprContainer = getVExpressionContainer(node)
+
+      for (const reference of exprContainer.references) {
+        if (reference.variable != null) {
+          // Not vm reference
+          continue
+        }
+        if (reference.id === node) {
+          return true
+        }
+      }
+      return false
+    }
+
+    /**
+     * @param {MemberExpression|Identifier} props
+     * @param {string} name
+     */
+    function verifyMutating(props, name) {
+      const invalid = utils.findMutating(props)
+      if (invalid) {
+        report(invalid.node, name)
+      }
+    }
+
+    /**
+     * @param {Pattern} param
+     * @param {string[]} path
+     * @returns {Generator<{ node: Identifier, path: string[] }>}
+     */
+    function* iterateParamProperties(param, path) {
+      if (!param) {
+        return
+      }
+      if (param.type === 'Identifier') {
+        yield {
+          node: param,
+          path
+        }
+      } else if (param.type === 'RestElement') {
+        yield* iterateParamProperties(param.argument, path)
+      } else if (param.type === 'AssignmentPattern') {
+        yield* iterateParamProperties(param.left, path)
+      } else if (param.type === 'ObjectPattern') {
+        for (const prop of param.properties) {
+          if (prop.type === 'Property') {
+            const name = getPropertyNameText(prop)
+            yield* iterateParamProperties(prop.value, [...path, name])
+          } else if (prop.type === 'RestElement') {
+            yield* iterateParamProperties(prop.argument, path)
+          }
+        }
+      } else if (param.type === 'ArrayPattern') {
+        for (let index = 0; index < param.elements.length; index++) {
+          const element = param.elements[index]
+          yield* iterateParamProperties(element, [...path, `${index}`])
+        }
+      }
+    }
+
+    return Object.assign(
+      {},
+      utils.defineVueVisitor(context, {
+        onVueObjectEnter(node) {
+          propsMap.set(
+            node,
+            new Set(
+              utils
+                .getComponentProps(node)
+                .map((p) => p.propName)
+                .filter(utils.isDef)
+            )
+          )
+        },
+        onVueObjectExit(node, { type }) {
+          if (
+            (!vueObjectData || vueObjectData.type !== 'export') &&
+            type !== 'instance'
+          ) {
+            vueObjectData = {
+              type,
+              object: node
+            }
+          }
+        },
+        onSetupFunctionEnter(node) {
+          const propsParam = node.params[0]
+          if (!propsParam) {
+            // no arguments
+            return
+          }
+          if (
+            propsParam.type === 'RestElement' ||
+            propsParam.type === 'ArrayPattern'
+          ) {
+            // cannot check
+            return
+          }
+          for (const { node: prop, path } of iterateParamProperties(
+            propsParam,
+            []
+          )) {
+            const variable = findVariable(context.getScope(), prop)
+            if (!variable) {
+              continue
+            }
+
+            for (const reference of variable.references) {
+              if (!reference.isRead()) {
+                continue
+              }
+              const id = reference.identifier
+
+              const invalid = utils.findMutating(id)
+              if (!invalid) {
+                continue
+              }
+              let name
+              if (path.length === 0) {
+                if (invalid.pathNodes.length === 0) {
+                  continue
+                }
+                const mem = invalid.pathNodes[0]
+                name = getPropertyNameText(mem)
+              } else {
+                if (invalid.pathNodes.length === 0 && invalid.kind !== 'call') {
+                  continue
+                }
+                name = path[0]
+              }
+
+              report(invalid.node, name)
+            }
+          }
+        },
+        /** @param {(Identifier | ThisExpression) & { parent: MemberExpression } } node */
+        'MemberExpression > :matches(Identifier, ThisExpression)'(
+          node,
+          { node: vueNode }
+        ) {
+          if (!utils.isThis(node, context)) {
+            return
+          }
+          const mem = node.parent
+          if (mem.object !== node) {
+            return
+          }
+          const name = utils.getStaticPropertyName(mem)
+          if (
+            name &&
+            /** @type {Set<string>} */ (propsMap.get(vueNode)).has(name)
+          ) {
+            verifyMutating(mem, name)
+          }
+        }
+      }),
+      utils.defineTemplateBodyVisitor(context, {
+        /** @param {ThisExpression & { parent: MemberExpression } } node */
+        'VExpressionContainer MemberExpression > ThisExpression'(node) {
+          if (!vueObjectData) {
+            return
+          }
+          const mem = node.parent
+          if (mem.object !== node) {
+            return
+          }
+          const name = utils.getStaticPropertyName(mem)
+          if (
+            name &&
+            /** @type {Set<string>} */ (propsMap.get(vueObjectData.object)).has(
+              name
+            )
+          ) {
+            verifyMutating(mem, name)
+          }
+        },
+        /** @param {Identifier } node */
+        'VExpressionContainer Identifier'(node) {
+          if (!vueObjectData) {
+            return
+          }
+          if (!isVmReference(node)) {
+            return
+          }
+          const name = node.name
+          if (
+            name &&
+            /** @type {Set<string>} */ (propsMap.get(vueObjectData.object)).has(
+              name
+            )
+          ) {
+            verifyMutating(node, name)
+          }
+        },
+        /** @param {ESNode} node */
+        "VAttribute[directive=true][key.name.name='model'] VExpressionContainer > *"(
+          node
+        ) {
+          if (!vueObjectData) {
+            return
+          }
+          const nodes = utils.getMemberChaining(node)
+          const first = nodes[0]
+          let name
+          if (isVmReference(first)) {
+            name = first.name
+          } else if (first.type === 'ThisExpression') {
+            const mem = nodes[1]
+            if (!mem) {
+              return
+            }
+            name = utils.getStaticPropertyName(mem)
+          } else {
+            return
+          }
+          if (
+            name &&
+            /** @type {Set<string>} */ (propsMap.get(vueObjectData.object)).has(
+              name
+            )
+          ) {
+            report(node, name)
+          }
+        }
+      })
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-parsing-error.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-parsing-error.js
new file mode 100644
index 0000000000000000000000000000000000000000..9a6b4f8698cd767e5a1fe69d8a09eb3c6d980279
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-parsing-error.js
@@ -0,0 +1,111 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+// https://html.spec.whatwg.org/multipage/parsing.html#parse-errors
+const DEFAULT_OPTIONS = Object.freeze(
+  Object.assign(Object.create(null), {
+    'abrupt-closing-of-empty-comment': true,
+    'absence-of-digits-in-numeric-character-reference': true,
+    'cdata-in-html-content': true,
+    'character-reference-outside-unicode-range': true,
+    'control-character-in-input-stream': true,
+    'control-character-reference': true,
+    'eof-before-tag-name': true,
+    'eof-in-cdata': true,
+    'eof-in-comment': true,
+    'eof-in-tag': true,
+    'incorrectly-closed-comment': true,
+    'incorrectly-opened-comment': true,
+    'invalid-first-character-of-tag-name': true,
+    'missing-attribute-value': true,
+    'missing-end-tag-name': true,
+    'missing-semicolon-after-character-reference': true,
+    'missing-whitespace-between-attributes': true,
+    'nested-comment': true,
+    'noncharacter-character-reference': true,
+    'noncharacter-in-input-stream': true,
+    'null-character-reference': true,
+    'surrogate-character-reference': true,
+    'surrogate-in-input-stream': true,
+    'unexpected-character-in-attribute-name': true,
+    'unexpected-character-in-unquoted-attribute-value': true,
+    'unexpected-equals-sign-before-attribute-name': true,
+    'unexpected-null-character': true,
+    'unexpected-question-mark-instead-of-tag-name': true,
+    'unexpected-solidus-in-tag': true,
+    'unknown-named-character-reference': true,
+    'end-tag-with-attributes': true,
+    'duplicate-attribute': true,
+    'end-tag-with-trailing-solidus': true,
+    'non-void-html-element-start-tag-with-trailing-solidus': false,
+    'x-invalid-end-tag': true,
+    'x-invalid-namespace': true
+  })
+)
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow parsing errors in `<template>`',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/no-parsing-error.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: Object.keys(DEFAULT_OPTIONS).reduce((ret, code) => {
+          ret[code] = { type: 'boolean' }
+          return ret
+        }, /** @type { { [key: string]: { type: 'boolean' } } } */ ({})),
+        additionalProperties: false
+      }
+    ]
+  },
+  /**
+   * @param {RuleContext} context - The rule context.
+   * @returns {RuleListener} AST event handlers.
+   */
+  create(context) {
+    const options = Object.assign({}, DEFAULT_OPTIONS, context.options[0] || {})
+
+    return {
+      Program(program) {
+        const node = program.templateBody
+        if (node == null || node.errors == null) {
+          return
+        }
+
+        for (const error of node.errors) {
+          if (error.code && !options[error.code]) {
+            continue
+          }
+
+          context.report({
+            node,
+            loc: { line: error.lineNumber, column: error.column },
+            message: 'Parsing error: {{message}}.',
+            data: {
+              message: error.message.endsWith('.')
+                ? error.message.slice(0, -1)
+                : error.message
+            }
+          })
+        }
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-potential-component-option-typo.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-potential-component-option-typo.js
new file mode 100644
index 0000000000000000000000000000000000000000..f3ac47363e25c058b321ab5fa6d3f22a8c75e941
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-potential-component-option-typo.js
@@ -0,0 +1,125 @@
+/**
+ * @fileoverview detect if there is a potential typo in your component property
+ * @author IWANABETHATGUY
+ */
+'use strict'
+
+const utils = require('../utils')
+const vueComponentOptions = require('../utils/vue-component-options.json')
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow a potential typo in your component property',
+      categories: undefined,
+      recommended: false,
+      url:
+        'https://eslint.vuejs.org/rules/no-potential-component-option-typo.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          presets: {
+            type: 'array',
+            items: {
+              type: 'string',
+              enum: ['all', 'vue', 'vue-router', 'nuxt']
+            },
+            uniqueItems: true,
+            minItems: 0
+          },
+          custom: {
+            type: 'array',
+            minItems: 0,
+            items: { type: 'string' },
+            uniqueItems: true
+          },
+          threshold: {
+            type: 'number',
+            minimum: 1
+          }
+        }
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const option = context.options[0] || {}
+    const custom = option.custom || []
+    /** @type {('all' | 'vue' | 'vue-router' | 'nuxt')[]} */
+    const presets = option.presets || ['vue']
+    const threshold = option.threshold || 1
+    /** @type {Set<string>} */
+    const candidateOptionSet = new Set(custom)
+    for (const preset of presets) {
+      if (preset === 'all') {
+        for (const opts of Object.values(vueComponentOptions)) {
+          for (const opt of opts) {
+            candidateOptionSet.add(opt)
+          }
+        }
+      } else {
+        for (const opt of vueComponentOptions[preset]) {
+          candidateOptionSet.add(opt)
+        }
+      }
+    }
+    const candidateOptionList = [...candidateOptionSet]
+    if (!candidateOptionList.length) {
+      return {}
+    }
+    return utils.executeOnVue(context, (obj) => {
+      const componentInstanceOptions = obj.properties
+        .map((p) => {
+          if (p.type === 'Property') {
+            const name = utils.getStaticPropertyName(p)
+            if (name != null) {
+              return {
+                name,
+                key: p.key
+              }
+            }
+          }
+          return null
+        })
+        .filter(utils.isDef)
+
+      if (!componentInstanceOptions.length) {
+        return
+      }
+      componentInstanceOptions.forEach((option) => {
+        const id = option.key
+        const name = option.name
+        if (candidateOptionSet.has(name)) {
+          return
+        }
+        const potentialTypoList = candidateOptionList
+          .map((o) => ({ option: o, distance: utils.editDistance(o, name) }))
+          .filter(({ distance }) => distance <= threshold && distance > 0)
+          .sort((a, b) => a.distance - b.distance)
+        if (potentialTypoList.length) {
+          context.report({
+            node: id,
+            message: `'{{name}}' may be a typo, which is similar to option [{{option}}].`,
+            data: {
+              name,
+              option: potentialTypoList.map(({ option }) => option).join(',')
+            },
+            suggest: potentialTypoList.map(({ option }) => ({
+              desc: `Replace property '${name}' to '${option}'`,
+              fix(fixer) {
+                return fixer.replaceText(id, option)
+              }
+            }))
+          })
+        }
+      })
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-ref-as-operand.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-ref-as-operand.js
new file mode 100644
index 0000000000000000000000000000000000000000..fb5dc0881a1702302b87f2b3d7023e9ecfd57482
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-ref-as-operand.js
@@ -0,0 +1,189 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+const { ReferenceTracker, findVariable } = require('eslint-utils')
+const utils = require('../utils')
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'disallow use of value wrapped by `ref()` (Composition API) as an operand',
+      categories: ['vue3-essential'],
+      url: 'https://eslint.vuejs.org/rules/no-ref-as-operand.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      requireDotValue:
+        'Must use `.value` to read or write the value wrapped by `{{method}}()`.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /**
+     * @typedef {object} ReferenceData
+     * @property {VariableDeclarator} variableDeclarator
+     * @property {VariableDeclaration | null} variableDeclaration
+     * @property {string} method
+     */
+    /** @type {Map<Identifier, ReferenceData>} */
+    const refReferenceIds = new Map()
+
+    /**
+     * @param {Identifier} node
+     */
+    function reportIfRefWrapped(node) {
+      const data = refReferenceIds.get(node)
+      if (!data) {
+        return
+      }
+      context.report({
+        node,
+        messageId: 'requireDotValue',
+        data: {
+          method: data.method
+        }
+      })
+    }
+    return {
+      Program() {
+        const tracker = new ReferenceTracker(context.getScope())
+        const traceMap = utils.createCompositionApiTraceMap({
+          [ReferenceTracker.ESM]: true,
+          ref: {
+            [ReferenceTracker.CALL]: true
+          },
+          computed: {
+            [ReferenceTracker.CALL]: true
+          },
+          toRef: {
+            [ReferenceTracker.CALL]: true
+          },
+          customRef: {
+            [ReferenceTracker.CALL]: true
+          },
+          shallowRef: {
+            [ReferenceTracker.CALL]: true
+          }
+        })
+
+        for (const { node, path } of tracker.iterateEsmReferences(traceMap)) {
+          const variableDeclarator = node.parent
+          if (
+            !variableDeclarator ||
+            variableDeclarator.type !== 'VariableDeclarator' ||
+            variableDeclarator.id.type !== 'Identifier'
+          ) {
+            continue
+          }
+          const variable = findVariable(
+            context.getScope(),
+            variableDeclarator.id
+          )
+          if (!variable) {
+            continue
+          }
+          const variableDeclaration =
+            (variableDeclarator.parent &&
+              variableDeclarator.parent.type === 'VariableDeclaration' &&
+              variableDeclarator.parent) ||
+            null
+          for (const reference of variable.references) {
+            if (!reference.isRead()) {
+              continue
+            }
+
+            refReferenceIds.set(reference.identifier, {
+              variableDeclarator,
+              variableDeclaration,
+              method: path[1]
+            })
+          }
+        }
+      },
+      // if (refValue)
+      /** @param {Identifier} node */
+      'IfStatement>Identifier'(node) {
+        reportIfRefWrapped(node)
+      },
+      // switch (refValue)
+      /** @param {Identifier} node */
+      'SwitchStatement>Identifier'(node) {
+        reportIfRefWrapped(node)
+      },
+      // -refValue, +refValue, !refValue, ~refValue, typeof refValue
+      /** @param {Identifier} node */
+      'UnaryExpression>Identifier'(node) {
+        reportIfRefWrapped(node)
+      },
+      // refValue++, refValue--
+      /** @param {Identifier} node */
+      'UpdateExpression>Identifier'(node) {
+        reportIfRefWrapped(node)
+      },
+      // refValue+1, refValue-1
+      /** @param {Identifier} node */
+      'BinaryExpression>Identifier'(node) {
+        reportIfRefWrapped(node)
+      },
+      // refValue+=1, refValue-=1, foo+=refValue, foo-=refValue
+      /** @param {Identifier} node */
+      'AssignmentExpression>Identifier'(node) {
+        reportIfRefWrapped(node)
+      },
+      // refValue || other, refValue && other. ignore: other || refValue
+      /** @param {Identifier & {parent: LogicalExpression}} node */
+      'LogicalExpression>Identifier'(node) {
+        if (node.parent.left !== node) {
+          return
+        }
+        // Report only constants.
+        const data = refReferenceIds.get(node)
+        if (!data) {
+          return
+        }
+        if (
+          !data.variableDeclaration ||
+          data.variableDeclaration.kind !== 'const'
+        ) {
+          return
+        }
+        reportIfRefWrapped(node)
+      },
+      // refValue ? x : y
+      /** @param {Identifier & {parent: ConditionalExpression}} node */
+      'ConditionalExpression>Identifier'(node) {
+        if (node.parent.test !== node) {
+          return
+        }
+        reportIfRefWrapped(node)
+      },
+      // `${refValue}`
+      /** @param {Identifier} node */
+      'TemplateLiteral>Identifier'(node) {
+        reportIfRefWrapped(node)
+      },
+      // refValue.x
+      /** @param {Identifier & {parent: MemberExpression}} node */
+      'MemberExpression>Identifier'(node) {
+        if (node.parent.object !== node) {
+          return
+        }
+        const name = utils.getStaticPropertyName(node.parent)
+        if (
+          name === 'value' ||
+          name == null ||
+          // WritableComputedRef
+          name === 'effect'
+        ) {
+          return
+        }
+        reportIfRefWrapped(node)
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-reserved-component-names.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-reserved-component-names.js
new file mode 100644
index 0000000000000000000000000000000000000000..aecbe6020f8458b8e38a60135577881391909858
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-reserved-component-names.js
@@ -0,0 +1,187 @@
+/**
+ * @fileoverview disallow the use of reserved names in component definitions
+ * @author Jake Hassel <https://github.com/shadskii>
+ */
+'use strict'
+
+const utils = require('../utils')
+const casing = require('../utils/casing')
+
+const htmlElements = require('../utils/html-elements.json')
+const deprecatedHtmlElements = require('../utils/deprecated-html-elements.json')
+const svgElements = require('../utils/svg-elements.json')
+
+const kebabCaseElements = [
+  'annotation-xml',
+  'color-profile',
+  'font-face',
+  'font-face-src',
+  'font-face-uri',
+  'font-face-format',
+  'font-face-name',
+  'missing-glyph'
+]
+
+// https://vuejs.org/v2/api/index.html#Built-In-Components
+const vueBuiltInComponents = [
+  'component',
+  'transition',
+  'transition-group',
+  'keep-alive',
+  'slot'
+]
+
+const vue3BuiltInComponents = ['teleport', 'suspense']
+
+/** @param {string} word  */
+function isLowercase(word) {
+  return /^[a-z]*$/.test(word)
+}
+
+const RESERVED_NAMES_IN_HTML = new Set([
+  ...htmlElements,
+  ...htmlElements.map(casing.capitalize)
+])
+const RESERVED_NAMES_IN_VUE = new Set([
+  ...vueBuiltInComponents,
+  ...vueBuiltInComponents.map(casing.pascalCase)
+])
+const RESERVED_NAMES_IN_VUE3 = new Set([
+  ...RESERVED_NAMES_IN_VUE,
+  ...vue3BuiltInComponents,
+  ...vue3BuiltInComponents.map(casing.pascalCase)
+])
+const RESERVED_NAMES_IN_OTHERS = new Set([
+  ...deprecatedHtmlElements,
+  ...deprecatedHtmlElements.map(casing.capitalize),
+  ...kebabCaseElements,
+  ...kebabCaseElements.map(casing.pascalCase),
+  ...svgElements,
+  ...svgElements.filter(isLowercase).map(casing.capitalize)
+])
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'disallow the use of reserved names in component definitions',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-reserved-component-names.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          disallowVueBuiltInComponents: {
+            type: 'boolean'
+          },
+          disallowVue3BuiltInComponents: {
+            type: 'boolean'
+          }
+        }
+      }
+    ],
+    messages: {
+      reserved: 'Name "{{name}}" is reserved.',
+      reservedInHtml: 'Name "{{name}}" is reserved in HTML.',
+      reservedInVue: 'Name "{{name}}" is reserved in Vue.js.',
+      reservedInVue3: 'Name "{{name}}" is reserved in Vue.js 3.x.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0] || {}
+    const disallowVueBuiltInComponents =
+      options.disallowVueBuiltInComponents === true
+    const disallowVue3BuiltInComponents =
+      options.disallowVue3BuiltInComponents === true
+
+    const reservedNames = new Set([
+      ...RESERVED_NAMES_IN_HTML,
+      ...(disallowVueBuiltInComponents ? RESERVED_NAMES_IN_VUE : []),
+      ...(disallowVue3BuiltInComponents ? RESERVED_NAMES_IN_VUE3 : []),
+      ...RESERVED_NAMES_IN_OTHERS
+    ])
+
+    /**
+     * @param {Expression | SpreadElement} node
+     * @returns {node is (Literal | TemplateLiteral)}
+     */
+    function canVerify(node) {
+      return (
+        node.type === 'Literal' ||
+        (node.type === 'TemplateLiteral' &&
+          node.expressions.length === 0 &&
+          node.quasis.length === 1)
+      )
+    }
+
+    /**
+     * @param {Literal | TemplateLiteral} node
+     */
+    function reportIfInvalid(node) {
+      let name
+      if (node.type === 'TemplateLiteral') {
+        const quasis = node.quasis[0]
+        name = quasis.value.cooked
+      } else {
+        name = `${node.value}`
+      }
+      if (reservedNames.has(name)) {
+        report(node, name)
+      }
+    }
+
+    /**
+     * @param {ESNode} node
+     * @param {string} name
+     */
+    function report(node, name) {
+      context.report({
+        node,
+        messageId: RESERVED_NAMES_IN_HTML.has(name)
+          ? 'reservedInHtml'
+          : RESERVED_NAMES_IN_VUE.has(name)
+          ? 'reservedInVue'
+          : RESERVED_NAMES_IN_VUE3.has(name)
+          ? 'reservedInVue3'
+          : 'reserved',
+        data: {
+          name
+        }
+      })
+    }
+
+    return Object.assign(
+      {},
+      utils.executeOnCallVueComponent(context, (node) => {
+        if (node.arguments.length === 2) {
+          const argument = node.arguments[0]
+
+          if (canVerify(argument)) {
+            reportIfInvalid(argument)
+          }
+        }
+      }),
+      utils.executeOnVue(context, (obj) => {
+        // Report if a component has been registered locally with a reserved name.
+        utils
+          .getRegisteredComponents(obj)
+          .filter(({ name }) => reservedNames.has(name))
+          .forEach(({ node, name }) => report(node, name))
+
+        const node = utils.findProperty(obj, 'name')
+
+        if (!node) return
+        if (!canVerify(node.value)) return
+        reportIfInvalid(node.value)
+      })
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-reserved-keys.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-reserved-keys.js
new file mode 100644
index 0000000000000000000000000000000000000000..38b4f410daf1c74427bca1e24168c4eaf9611ce4
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-reserved-keys.js
@@ -0,0 +1,79 @@
+/**
+ * @fileoverview Prevent overwrite reserved keys
+ * @author Armano
+ */
+'use strict'
+
+const utils = require('../utils')
+
+/**
+ * @typedef {import('../utils').GroupName} GroupName
+ */
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+const RESERVED_KEYS = require('../utils/vue-reserved.json')
+/** @type {GroupName[]} */
+const GROUP_NAMES = ['props', 'computed', 'data', 'methods', 'setup']
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow overwriting reserved keys',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/no-reserved-keys.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          reserved: {
+            type: 'array'
+          },
+          groups: {
+            type: 'array'
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0] || {}
+    const reservedKeys = new Set(RESERVED_KEYS.concat(options.reserved || []))
+    const groups = new Set(GROUP_NAMES.concat(options.groups || []))
+
+    // ----------------------------------------------------------------------
+    // Public
+    // ----------------------------------------------------------------------
+
+    return utils.executeOnVue(context, (obj) => {
+      const properties = utils.iterateProperties(obj, groups)
+      for (const o of properties) {
+        if (o.groupName === 'data' && o.name[0] === '_') {
+          context.report({
+            node: o.node,
+            message:
+              "Keys starting with with '_' are reserved in '{{name}}' group.",
+            data: {
+              name: o.name
+            }
+          })
+        } else if (reservedKeys.has(o.name)) {
+          context.report({
+            node: o.node,
+            message: "Key '{{name}}' is reserved.",
+            data: {
+              name: o.name
+            }
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-component-options.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-component-options.js
new file mode 100644
index 0000000000000000000000000000000000000000..6d0de9a8db2a03140e9832e22d7d29cef7994bcc
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-component-options.js
@@ -0,0 +1,215 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const utils = require('../utils')
+const regexp = require('../utils/regexp')
+
+/**
+ * @typedef {object} ParsedOption
+ * @property {Tester} test
+ * @property {string|undefined} [message]
+ */
+/**
+ * @typedef {object} MatchResult
+ * @property {Tester | undefined} [next]
+ * @property {boolean} [wildcard]
+ * @property {string} keyName
+ */
+/**
+ * @typedef { (name: string) => boolean } Matcher
+ * @typedef { (node: Property | SpreadElement) => (MatchResult | null) } Tester
+ */
+
+/**
+ * @param {string} str
+ * @returns {Matcher}
+ */
+function buildMatcher(str) {
+  if (regexp.isRegExp(str)) {
+    const re = regexp.toRegExp(str)
+    return (s) => {
+      re.lastIndex = 0
+      return re.test(s)
+    }
+  }
+  return (s) => s === str
+}
+
+/**
+ * @param {string | string[] | { name: string | string[], message?: string } } option
+ * @returns {ParsedOption}
+ */
+function parseOption(option) {
+  if (typeof option === 'string' || Array.isArray(option)) {
+    return parseOption({
+      name: option
+    })
+  }
+
+  /**
+   * @typedef {object} Step
+   * @property {Matcher} [test]
+   * @property {boolean} [wildcard]
+   */
+
+  /** @type {Step[]} */
+  const steps = []
+  for (const name of Array.isArray(option.name) ? option.name : [option.name]) {
+    if (name === '*') {
+      steps.push({ wildcard: true })
+    } else {
+      steps.push({ test: buildMatcher(name) })
+    }
+  }
+  const message = option.message
+
+  return {
+    test: buildTester(0),
+    message
+  }
+
+  /**
+   * @param {number} index
+   * @returns {Tester}
+   */
+  function buildTester(index) {
+    const { wildcard, test } = steps[index]
+    const next = index + 1
+    const needNext = steps.length > next
+    return (node) => {
+      /** @type {string} */
+      let keyName
+      if (wildcard) {
+        keyName = '*'
+      } else {
+        if (node.type !== 'Property') {
+          return null
+        }
+        const name = utils.getStaticPropertyName(node)
+        if (!name || !test(name)) {
+          return null
+        }
+        keyName = name
+      }
+
+      return {
+        next: needNext ? buildTester(next) : undefined,
+        wildcard,
+        keyName
+      }
+    }
+  }
+}
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow specific component option',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-restricted-component-options.html'
+    },
+    fixable: null,
+    schema: {
+      type: 'array',
+      items: {
+        oneOf: [
+          { type: 'string' },
+          {
+            type: 'array',
+            items: {
+              type: 'string'
+            }
+          },
+          {
+            type: 'object',
+            properties: {
+              name: {
+                anyOf: [
+                  { type: 'string' },
+                  {
+                    type: 'array',
+                    items: {
+                      type: 'string'
+                    }
+                  }
+                ]
+              },
+              message: { type: 'string', minLength: 1 }
+            },
+            required: ['name'],
+            additionalProperties: false
+          }
+        ]
+      },
+      uniqueItems: true,
+      minItems: 0
+    },
+
+    messages: {
+      // eslint-disable-next-line eslint-plugin/report-message-format
+      restrictedOption: '{{message}}'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    if (!context.options || context.options.length === 0) {
+      return {}
+    }
+    /** @type {ParsedOption[]} */
+    const options = context.options.map(parseOption)
+
+    return utils.defineVueVisitor(context, {
+      onVueObjectEnter(node) {
+        for (const option of options) {
+          verify(node, option.test, option.message)
+        }
+      }
+    })
+
+    /**
+     * @param {ObjectExpression} node
+     * @param {Tester} test
+     * @param {string | undefined} customMessage
+     * @param {string[]} path
+     */
+    function verify(node, test, customMessage, path = []) {
+      for (const prop of node.properties) {
+        const result = test(prop)
+        if (!result) {
+          continue
+        }
+        if (result.next) {
+          if (
+            prop.type !== 'Property' ||
+            prop.value.type !== 'ObjectExpression'
+          ) {
+            continue
+          }
+          verify(prop.value, result.next, customMessage, [
+            ...path,
+            result.keyName
+          ])
+        } else {
+          const message =
+            customMessage || defaultMessage([...path, result.keyName])
+          context.report({
+            node: prop.type === 'Property' ? prop.key : prop,
+            messageId: 'restrictedOption',
+            data: { message }
+          })
+        }
+      }
+    }
+
+    /**
+     * @param {string[]} path
+     */
+    function defaultMessage(path) {
+      return `Using \`${path.join('.')}\` is not allowed.`
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-custom-event.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-custom-event.js
new file mode 100644
index 0000000000000000000000000000000000000000..19183e34a831ed52218cd4950508f5fe07dabf18
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-custom-event.js
@@ -0,0 +1,293 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const { findVariable } = require('eslint-utils')
+const utils = require('../utils')
+const regexp = require('../utils/regexp')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * @typedef {object} ParsedOption
+ * @property { (name: string) => boolean } test
+ * @property {string|undefined} [message]
+ * @property {string|undefined} [suggest]
+ */
+
+/**
+ * @param {string} str
+ * @returns {(str: string) => boolean}
+ */
+function buildMatcher(str) {
+  if (regexp.isRegExp(str)) {
+    const re = regexp.toRegExp(str)
+    return (s) => {
+      re.lastIndex = 0
+      return re.test(s)
+    }
+  }
+  return (s) => s === str
+}
+/**
+ * @param {string|{event: string, message?: string, suggest?: string}} option
+ * @returns {ParsedOption}
+ */
+function parseOption(option) {
+  if (typeof option === 'string') {
+    const matcher = buildMatcher(option)
+    return {
+      test(name) {
+        return matcher(name)
+      }
+    }
+  }
+  const parsed = parseOption(option.event)
+  parsed.message = option.message
+  parsed.suggest = option.suggest
+  return parsed
+}
+
+/**
+ * Get the name param node from the given CallExpression
+ * @param {CallExpression} node CallExpression
+ * @returns { Literal & { value: string } | null }
+ */
+function getNameParamNode(node) {
+  const nameLiteralNode = node.arguments[0]
+  if (
+    !nameLiteralNode ||
+    nameLiteralNode.type !== 'Literal' ||
+    typeof nameLiteralNode.value !== 'string'
+  ) {
+    // cannot check
+    return null
+  }
+
+  return /** @type {Literal & { value: string }} */ (nameLiteralNode)
+}
+/**
+ * Get the callee member node from the given CallExpression
+ * @param {CallExpression} node CallExpression
+ */
+function getCalleeMemberNode(node) {
+  const callee = utils.skipChainExpression(node.callee)
+
+  if (callee.type === 'MemberExpression') {
+    const name = utils.getStaticPropertyName(callee)
+    if (name) {
+      return { name, member: callee }
+    }
+  }
+  return null
+}
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow specific custom event',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-restricted-custom-event.html'
+    },
+    fixable: null,
+    schema: {
+      type: 'array',
+      items: {
+        oneOf: [
+          { type: ['string'] },
+          {
+            type: 'object',
+            properties: {
+              event: { type: 'string' },
+              message: { type: 'string', minLength: 1 },
+              suggest: { type: 'string' }
+            },
+            required: ['event'],
+            additionalProperties: false
+          }
+        ]
+      },
+      uniqueItems: true,
+      minItems: 0
+    },
+
+    messages: {
+      // eslint-disable-next-line eslint-plugin/report-message-format
+      restrictedEvent: '{{message}}',
+      instead: 'Instead, change to `{{suggest}}`.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /** @type {Map<ObjectExpression, {contextReferenceIds:Set<Identifier>,emitReferenceIds:Set<Identifier>}>} */
+    const setupContexts = new Map()
+    /** @type {ParsedOption[]} */
+    const options = context.options.map(parseOption)
+
+    /**
+     * @param { Literal & { value: string } } nameLiteralNode
+     */
+    function verify(nameLiteralNode) {
+      const name = nameLiteralNode.value
+
+      for (const option of options) {
+        if (option.test(name)) {
+          const message =
+            option.message || `Using \`${name}\` event is not allowed.`
+          context.report({
+            node: nameLiteralNode,
+            messageId: 'restrictedEvent',
+            data: { message },
+            suggest: option.suggest
+              ? [
+                  {
+                    fix(fixer) {
+                      const sourceCode = context.getSourceCode()
+                      return fixer.replaceText(
+                        nameLiteralNode,
+                        `${
+                          sourceCode.text[nameLiteralNode.range[0]]
+                        }${JSON.stringify(option.suggest)
+                          .slice(1, -1)
+                          .replace(/'/gu, "\\'")}${
+                          sourceCode.text[nameLiteralNode.range[1] - 1]
+                        }`
+                      )
+                    },
+                    messageId: 'instead',
+                    data: { suggest: option.suggest }
+                  }
+                ]
+              : []
+          })
+          break
+        }
+      }
+    }
+
+    return utils.defineTemplateBodyVisitor(
+      context,
+      {
+        CallExpression(node) {
+          const callee = node.callee
+          const nameLiteralNode = getNameParamNode(node)
+          if (!nameLiteralNode) {
+            // cannot check
+            return
+          }
+          if (callee.type === 'Identifier' && callee.name === '$emit') {
+            verify(nameLiteralNode)
+          }
+        }
+      },
+      utils.compositingVisitors(
+        utils.defineVueVisitor(context, {
+          onSetupFunctionEnter(node, { node: vueNode }) {
+            const contextParam = utils.skipDefaultParamValue(node.params[1])
+            if (!contextParam) {
+              // no arguments
+              return
+            }
+            if (
+              contextParam.type === 'RestElement' ||
+              contextParam.type === 'ArrayPattern'
+            ) {
+              // cannot check
+              return
+            }
+            const contextReferenceIds = new Set()
+            const emitReferenceIds = new Set()
+            if (contextParam.type === 'ObjectPattern') {
+              const emitProperty = utils.findAssignmentProperty(
+                contextParam,
+                'emit'
+              )
+              if (!emitProperty || emitProperty.value.type !== 'Identifier') {
+                return
+              }
+              const emitParam = emitProperty.value
+              // `setup(props, {emit})`
+              const variable = findVariable(context.getScope(), emitParam)
+              if (!variable) {
+                return
+              }
+              for (const reference of variable.references) {
+                emitReferenceIds.add(reference.identifier)
+              }
+            } else {
+              // `setup(props, context)`
+              const variable = findVariable(context.getScope(), contextParam)
+              if (!variable) {
+                return
+              }
+              for (const reference of variable.references) {
+                contextReferenceIds.add(reference.identifier)
+              }
+            }
+            setupContexts.set(vueNode, {
+              contextReferenceIds,
+              emitReferenceIds
+            })
+          },
+          CallExpression(node, { node: vueNode }) {
+            const nameLiteralNode = getNameParamNode(node)
+            if (!nameLiteralNode) {
+              // cannot check
+              return
+            }
+
+            // verify setup context
+            const setupContext = setupContexts.get(vueNode)
+            if (setupContext) {
+              const { contextReferenceIds, emitReferenceIds } = setupContext
+              if (
+                node.callee.type === 'Identifier' &&
+                emitReferenceIds.has(node.callee)
+              ) {
+                // verify setup(props,{emit}) {emit()}
+                verify(nameLiteralNode)
+              } else {
+                const emit = getCalleeMemberNode(node)
+                if (
+                  emit &&
+                  emit.name === 'emit' &&
+                  emit.member.object.type === 'Identifier' &&
+                  contextReferenceIds.has(emit.member.object)
+                ) {
+                  // verify setup(props,context) {context.emit()}
+                  verify(nameLiteralNode)
+                }
+              }
+            }
+          },
+          onVueObjectExit(node) {
+            setupContexts.delete(node)
+          }
+        }),
+        {
+          CallExpression(node) {
+            const nameLiteralNode = getNameParamNode(node)
+            if (!nameLiteralNode) {
+              // cannot check
+              return
+            }
+            const emit = getCalleeMemberNode(node)
+            // verify $emit
+            if (emit && emit.name === '$emit') {
+              // verify this.$emit()
+              verify(nameLiteralNode)
+            }
+          }
+        }
+      )
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-props.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-props.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a64913c3a60ed93581c3c5cd9b0f1fd058b1bda
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-props.js
@@ -0,0 +1,149 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const utils = require('../utils')
+const regexp = require('../utils/regexp')
+
+/**
+ * @typedef {object} ParsedOption
+ * @property { (name: string) => boolean } test
+ * @property {string|undefined} [message]
+ * @property {string|undefined} [suggest]
+ */
+
+/**
+ * @param {string} str
+ * @returns {(str: string) => boolean}
+ */
+function buildMatcher(str) {
+  if (regexp.isRegExp(str)) {
+    const re = regexp.toRegExp(str)
+    return (s) => {
+      re.lastIndex = 0
+      return re.test(s)
+    }
+  }
+  return (s) => s === str
+}
+/**
+ * @param {string|{name:string, message?: string, suggest?:string}} option
+ * @returns {ParsedOption}
+ */
+function parseOption(option) {
+  if (typeof option === 'string') {
+    const matcher = buildMatcher(option)
+    return {
+      test(name) {
+        return matcher(name)
+      }
+    }
+  }
+  const parsed = parseOption(option.name)
+  parsed.message = option.message
+  parsed.suggest = option.suggest
+  return parsed
+}
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow specific props',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-restricted-props.html'
+    },
+    fixable: null,
+    schema: {
+      type: 'array',
+      items: {
+        oneOf: [
+          { type: ['string'] },
+          {
+            type: 'object',
+            properties: {
+              name: { type: 'string' },
+              message: { type: 'string', minLength: 1 },
+              suggest: { type: 'string' }
+            },
+            required: ['name'],
+            additionalProperties: false
+          }
+        ]
+      },
+      uniqueItems: true,
+      minItems: 0
+    },
+
+    messages: {
+      // eslint-disable-next-line eslint-plugin/report-message-format
+      restrictedProp: '{{message}}',
+      instead: 'Instead, change to `{{suggest}}`.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /** @type {ParsedOption[]} */
+    const options = context.options.map(parseOption)
+
+    return utils.defineVueVisitor(context, {
+      onVueObjectEnter(node) {
+        for (const prop of utils.getComponentProps(node)) {
+          if (!prop.propName) {
+            continue
+          }
+
+          for (const option of options) {
+            if (option.test(prop.propName)) {
+              const message =
+                option.message ||
+                `Using \`${prop.propName}\` props is not allowed.`
+              context.report({
+                node: prop.key,
+                messageId: 'restrictedProp',
+                data: { message },
+                suggest: createSuggest(prop.key, option)
+              })
+              break
+            }
+          }
+        }
+      }
+    })
+  }
+}
+
+/**
+ * @param {Expression} node
+ * @param {ParsedOption} option
+ * @returns {Rule.SuggestionReportDescriptor[]}
+ */
+function createSuggest(node, option) {
+  if (!option.suggest) {
+    return []
+  }
+
+  /** @type {string} */
+  let replaceText
+  if (node.type === 'Literal' || node.type === 'TemplateLiteral') {
+    replaceText = JSON.stringify(option.suggest)
+  } else if (node.type === 'Identifier') {
+    replaceText = /^[a-z]\w*$/iu.exec(option.suggest)
+      ? option.suggest
+      : JSON.stringify(option.suggest)
+  } else {
+    return []
+  }
+
+  return [
+    {
+      fix(fixer) {
+        return fixer.replaceText(node, replaceText)
+      },
+      messageId: 'instead',
+      data: { suggest: option.suggest }
+    }
+  ]
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-static-attribute.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-static-attribute.js
new file mode 100644
index 0000000000000000000000000000000000000000..24cab62b84c084c159aae8416fa0f009fd05809b
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-static-attribute.js
@@ -0,0 +1,164 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const utils = require('../utils')
+const regexp = require('../utils/regexp')
+
+/**
+ * @typedef {object} ParsedOption
+ * @property { (key: VAttribute) => boolean } test
+ * @property {boolean} [useValue]
+ * @property {boolean} [useElement]
+ * @property {string} [message]
+ */
+
+/**
+ * @param {string} str
+ * @returns {(str: string) => boolean}
+ */
+function buildMatcher(str) {
+  if (regexp.isRegExp(str)) {
+    const re = regexp.toRegExp(str)
+    return (s) => {
+      re.lastIndex = 0
+      return re.test(s)
+    }
+  }
+  return (s) => s === str
+}
+/**
+ * @param {any} option
+ * @returns {ParsedOption}
+ */
+function parseOption(option) {
+  if (typeof option === 'string') {
+    const matcher = buildMatcher(option)
+    return {
+      test({ key }) {
+        return matcher(key.rawName)
+      }
+    }
+  }
+  const parsed = parseOption(option.key)
+  if (option.value) {
+    const keyTest = parsed.test
+    if (option.value === true) {
+      parsed.test = (node) => {
+        if (!keyTest(node)) {
+          return false
+        }
+        return node.value == null || node.value.value === node.key.rawName
+      }
+    } else {
+      const valueMatcher = buildMatcher(option.value)
+      parsed.test = (node) => {
+        if (!keyTest(node)) {
+          return false
+        }
+        return node.value != null && valueMatcher(node.value.value)
+      }
+    }
+    parsed.useValue = true
+  }
+  if (option.element) {
+    const argTest = parsed.test
+    const tagMatcher = buildMatcher(option.element)
+    parsed.test = (node) => {
+      if (!argTest(node)) {
+        return false
+      }
+      const element = node.parent.parent
+      return tagMatcher(element.rawName)
+    }
+    parsed.useElement = true
+  }
+  parsed.message = option.message
+  return parsed
+}
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow specific attribute',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-restricted-static-attribute.html'
+    },
+    fixable: null,
+    schema: {
+      type: 'array',
+      items: {
+        oneOf: [
+          { type: 'string' },
+          {
+            type: 'object',
+            properties: {
+              key: { type: 'string' },
+              value: { anyOf: [{ type: 'string' }, { enum: [true] }] },
+              element: { type: 'string' },
+              message: { type: 'string', minLength: 1 }
+            },
+            required: ['key'],
+            additionalProperties: false
+          }
+        ]
+      },
+      uniqueItems: true,
+      minItems: 0
+    },
+
+    messages: {
+      // eslint-disable-next-line eslint-plugin/report-message-format
+      restrictedAttr: '{{message}}'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    if (!context.options.length) {
+      return {}
+    }
+    /** @type {ParsedOption[]} */
+    const options = context.options.map(parseOption)
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /**
+       * @param {VAttribute} node
+       */
+      'VAttribute[directive=false]'(node) {
+        for (const option of options) {
+          if (option.test(node)) {
+            const message = option.message || defaultMessage(node, option)
+            context.report({
+              node,
+              messageId: 'restrictedAttr',
+              data: { message }
+            })
+            return
+          }
+        }
+      }
+    })
+
+    /**
+     * @param {VAttribute} node
+     * @param {ParsedOption} option
+     */
+    function defaultMessage(node, option) {
+      const key = node.key.rawName
+      const value = !option.useValue
+        ? ''
+        : node.value == null
+        ? '` set to `true'
+        : `="${node.value.value}"`
+
+      let on = ''
+      if (option.useElement) {
+        on = ` on \`<${node.parent.parent.rawName}>\``
+      }
+      return `Using \`${key + value}\`${on} is not allowed.`
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-syntax.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-syntax.js
new file mode 100644
index 0000000000000000000000000000000000000000..a09ff6660a36dc23c2c7744c7cafd453aa88cf8c
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-syntax.js
@@ -0,0 +1,9 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('no-restricted-syntax')
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-v-bind.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-v-bind.js
new file mode 100644
index 0000000000000000000000000000000000000000..02ac6e3992f9832613b06a28556a0c6ae2947408
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-restricted-v-bind.js
@@ -0,0 +1,184 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const utils = require('../utils')
+const regexp = require('../utils/regexp')
+/**
+ * @typedef {object} ParsedOption
+ * @property { (key: VDirectiveKey) => boolean } test
+ * @property {string[]} modifiers
+ * @property {boolean} [useElement]
+ * @property {string} [message]
+ */
+
+const DEFAULT_OPTIONS = [
+  {
+    argument: '/^v-/',
+    message:
+      'Using `:v-xxx` is not allowed. Instead, remove `:` and use it as directive.'
+  }
+]
+
+/**
+ * @param {string} str
+ * @returns {(str: string) => boolean}
+ */
+function buildMatcher(str) {
+  if (regexp.isRegExp(str)) {
+    const re = regexp.toRegExp(str)
+    return (s) => {
+      re.lastIndex = 0
+      return re.test(s)
+    }
+  }
+  return (s) => s === str
+}
+/**
+ * @param {any} option
+ * @returns {ParsedOption}
+ */
+function parseOption(option) {
+  if (typeof option === 'string') {
+    const matcher = buildMatcher(option)
+    return {
+      test(key) {
+        return Boolean(
+          key.argument &&
+            key.argument.type === 'VIdentifier' &&
+            matcher(key.argument.rawName)
+        )
+      },
+      modifiers: []
+    }
+  }
+  if (option === null) {
+    return {
+      test(key) {
+        return key.argument === null
+      },
+      modifiers: []
+    }
+  }
+  const parsed = parseOption(option.argument)
+  if (option.modifiers) {
+    const argTest = parsed.test
+    parsed.test = (key) => {
+      if (!argTest(key)) {
+        return false
+      }
+      return /** @type {string[]} */ (option.modifiers).every((modName) => {
+        return key.modifiers.some((mid) => mid.name === modName)
+      })
+    }
+    parsed.modifiers = option.modifiers
+  }
+  if (option.element) {
+    const argTest = parsed.test
+    const tagMatcher = buildMatcher(option.element)
+    parsed.test = (key) => {
+      if (!argTest(key)) {
+        return false
+      }
+      const element = key.parent.parent.parent
+      return tagMatcher(element.rawName)
+    }
+    parsed.useElement = true
+  }
+  parsed.message = option.message
+  return parsed
+}
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow specific argument in `v-bind`',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-restricted-v-bind.html'
+    },
+    fixable: null,
+    schema: {
+      type: 'array',
+      items: {
+        oneOf: [
+          { type: ['string', 'null'] },
+          {
+            type: 'object',
+            properties: {
+              argument: { type: ['string', 'null'] },
+              modifiers: {
+                type: 'array',
+                items: {
+                  type: 'string',
+                  enum: ['prop', 'camel', 'sync']
+                },
+                uniqueItems: true
+              },
+              element: { type: 'string' },
+              message: { type: 'string', minLength: 1 }
+            },
+            required: ['argument'],
+            additionalProperties: false
+          }
+        ]
+      },
+      uniqueItems: true,
+      minItems: 0
+    },
+
+    messages: {
+      // eslint-disable-next-line eslint-plugin/report-message-format
+      restrictedVBind: '{{message}}'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /** @type {ParsedOption[]} */
+    const options = (context.options.length === 0
+      ? DEFAULT_OPTIONS
+      : context.options
+    ).map(parseOption)
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /**
+       * @param {VDirectiveKey} node
+       */
+      "VAttribute[directive=true][key.name.name='bind'] > VDirectiveKey"(node) {
+        for (const option of options) {
+          if (option.test(node)) {
+            const message = option.message || defaultMessage(node, option)
+            context.report({
+              node,
+              messageId: 'restrictedVBind',
+              data: { message }
+            })
+            return
+          }
+        }
+      }
+    })
+
+    /**
+     * @param {VDirectiveKey} key
+     * @param {ParsedOption} option
+     */
+    function defaultMessage(key, option) {
+      const vbind = key.name.rawName === ':' ? '' : 'v-bind'
+      const arg =
+        key.argument != null && key.argument.type === 'VIdentifier'
+          ? `:${key.argument.rawName}`
+          : ''
+      const mod = option.modifiers.length
+        ? `.${option.modifiers.join('.')}`
+        : ''
+      let on = ''
+      if (option.useElement) {
+        on = ` on \`<${key.parent.parent.parent.rawName}>\``
+      }
+      return `Using \`${vbind + arg + mod}\`${on} is not allowed.`
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-setup-props-destructure.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-setup-props-destructure.js
new file mode 100644
index 0000000000000000000000000000000000000000..e77f63c4d9101b39776d17ba5f8949bbb28ecb51
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-setup-props-destructure.js
@@ -0,0 +1,149 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+const { findVariable } = require('eslint-utils')
+const utils = require('../utils')
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow destructuring of `props` passed to `setup`',
+      categories: ['vue3-essential'],
+      url: 'https://eslint.vuejs.org/rules/no-setup-props-destructure.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      destructuring:
+        'Destructuring the `props` will cause the value to lose reactivity.',
+      getProperty:
+        'Getting a value from the `props` in root scope of `setup()` will cause the value to lose reactivity.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /** @type {Map<FunctionDeclaration | FunctionExpression | ArrowFunctionExpression, Set<Identifier>>} */
+    const setupScopePropsReferenceIds = new Map()
+
+    /**
+     * @param {ESNode} node
+     * @param {string} messageId
+     */
+    function report(node, messageId) {
+      context.report({
+        node,
+        messageId
+      })
+    }
+
+    /**
+     * @param {Pattern} left
+     * @param {Expression | null} right
+     * @param {Set<Identifier>} propsReferenceIds
+     */
+    function verify(left, right, propsReferenceIds) {
+      if (!right) {
+        return
+      }
+
+      const rightNode = utils.skipChainExpression(right)
+      if (
+        left.type !== 'ArrayPattern' &&
+        left.type !== 'ObjectPattern' &&
+        rightNode.type !== 'MemberExpression'
+      ) {
+        return
+      }
+      /** @type {Expression | Super} */
+      let rightId = rightNode
+      while (rightId.type === 'MemberExpression') {
+        rightId = utils.skipChainExpression(rightId.object)
+      }
+      if (rightId.type === 'Identifier' && propsReferenceIds.has(rightId)) {
+        report(left, 'getProperty')
+      }
+    }
+    /**
+     * @typedef {object} ScopeStack
+     * @property {ScopeStack | null} upper
+     * @property {FunctionDeclaration | FunctionExpression | ArrowFunctionExpression} functionNode
+     */
+    /**
+     * @type {ScopeStack | null}
+     */
+    let scopeStack = null
+
+    return utils.defineVueVisitor(context, {
+      ':function'(node) {
+        scopeStack = {
+          upper: scopeStack,
+          functionNode: node
+        }
+      },
+      onSetupFunctionEnter(node) {
+        const propsParam = utils.skipDefaultParamValue(node.params[0])
+        if (!propsParam) {
+          // no arguments
+          return
+        }
+        if (propsParam.type === 'RestElement') {
+          // cannot check
+          return
+        }
+        if (
+          propsParam.type === 'ArrayPattern' ||
+          propsParam.type === 'ObjectPattern'
+        ) {
+          report(propsParam, 'destructuring')
+          return
+        }
+
+        const variable = findVariable(context.getScope(), propsParam)
+        if (!variable) {
+          return
+        }
+        const propsReferenceIds = new Set()
+        for (const reference of variable.references) {
+          if (!reference.isRead()) {
+            continue
+          }
+
+          propsReferenceIds.add(reference.identifier)
+        }
+        setupScopePropsReferenceIds.set(node, propsReferenceIds)
+      },
+      VariableDeclarator(node) {
+        if (!scopeStack) {
+          return
+        }
+        const propsReferenceIds = setupScopePropsReferenceIds.get(
+          scopeStack.functionNode
+        )
+        if (!propsReferenceIds) {
+          return
+        }
+        verify(node.id, node.init, propsReferenceIds)
+      },
+      AssignmentExpression(node) {
+        if (!scopeStack) {
+          return
+        }
+        const propsReferenceIds = setupScopePropsReferenceIds.get(
+          scopeStack.functionNode
+        )
+        if (!propsReferenceIds) {
+          return
+        }
+        verify(node.left, node.right, propsReferenceIds)
+      },
+      ':function:exit'(node) {
+        scopeStack = scopeStack && scopeStack.upper
+
+        setupScopePropsReferenceIds.delete(node)
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-shared-component-data.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-shared-component-data.js
new file mode 100644
index 0000000000000000000000000000000000000000..160f41ef9c4642fcc652ec30fb1b310212f52e01
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-shared-component-data.js
@@ -0,0 +1,84 @@
+/**
+ * @fileoverview Enforces component's data property to be a function.
+ * @author Armano
+ */
+'use strict'
+
+const utils = require('../utils')
+
+/** @param {Token} token  */
+function isOpenParen(token) {
+  return token.type === 'Punctuator' && token.value === '('
+}
+
+/** @param {Token} token  */
+function isCloseParen(token) {
+  return token.type === 'Punctuator' && token.value === ')'
+}
+
+/**
+ * @param {Expression} node
+ * @param {SourceCode} sourceCode
+ */
+function getFirstAndLastTokens(node, sourceCode) {
+  let first = sourceCode.getFirstToken(node)
+  let last = sourceCode.getLastToken(node)
+
+  // If the value enclosed by parentheses, update the 'first' and 'last' by the parentheses.
+  while (true) {
+    const prev = sourceCode.getTokenBefore(first)
+    const next = sourceCode.getTokenAfter(last)
+    if (isOpenParen(prev) && isCloseParen(next)) {
+      first = prev
+      last = next
+    } else {
+      return { first, last }
+    }
+  }
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: "enforce component's data property to be a function",
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/no-shared-component-data.html'
+    },
+    fixable: 'code',
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const sourceCode = context.getSourceCode()
+
+    return utils.executeOnVueComponent(context, (obj) => {
+      const invalidData = utils.findProperty(
+        obj,
+        'data',
+        (p) =>
+          p.value.type !== 'FunctionExpression' &&
+          p.value.type !== 'ArrowFunctionExpression' &&
+          p.value.type !== 'Identifier'
+      )
+      if (invalidData) {
+        context.report({
+          node: invalidData,
+          message: '`data` property in component must be a function.',
+          fix(fixer) {
+            const tokens = getFirstAndLastTokens(invalidData.value, sourceCode)
+
+            return [
+              fixer.insertTextBefore(tokens.first, 'function() {\nreturn '),
+              fixer.insertTextAfter(tokens.last, ';\n}')
+            ]
+          }
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-side-effects-in-computed-properties.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-side-effects-in-computed-properties.js
new file mode 100644
index 0000000000000000000000000000000000000000..4d5c79e49e33c2839597d1d15372bac67931612a
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-side-effects-in-computed-properties.js
@@ -0,0 +1,109 @@
+/**
+ * @fileoverview Don't introduce side effects in computed properties
+ * @author Michał Sajnóg
+ */
+'use strict'
+
+const utils = require('../utils')
+
+/**
+ * @typedef {import('../utils').VueObjectData} VueObjectData
+ * @typedef {import('../utils').ComponentComputedProperty} ComponentComputedProperty
+ */
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow side effects in computed properties',
+      categories: ['vue3-essential', 'essential'],
+      url:
+        'https://eslint.vuejs.org/rules/no-side-effects-in-computed-properties.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /** @type {Map<ObjectExpression, ComponentComputedProperty[]>} */
+    const computedPropertiesMap = new Map()
+
+    /**
+     * @typedef {object} ScopeStack
+     * @property {ScopeStack | null} upper
+     * @property {BlockStatement | Expression | null} body
+     */
+    /**
+     * @type {ScopeStack | null}
+     */
+    let scopeStack = null
+
+    /** @param {FunctionExpression | ArrowFunctionExpression | FunctionDeclaration} node */
+    function onFunctionEnter(node) {
+      scopeStack = {
+        upper: scopeStack,
+        body: node.body
+      }
+    }
+
+    function onFunctionExit() {
+      scopeStack = scopeStack && scopeStack.upper
+    }
+
+    return utils.defineVueVisitor(context, {
+      onVueObjectEnter(node) {
+        computedPropertiesMap.set(node, utils.getComputedProperties(node))
+      },
+      ':function': onFunctionEnter,
+      ':function:exit': onFunctionExit,
+
+      /**
+       * @param {(Identifier | ThisExpression) & {parent: MemberExpression}} node
+       * @param {VueObjectData} data
+       */
+      'MemberExpression > :matches(Identifier, ThisExpression)'(
+        node,
+        { node: vueNode }
+      ) {
+        if (!scopeStack) {
+          return
+        }
+        const targetBody = scopeStack.body
+        const computedProperty = /** @type {ComponentComputedProperty[]} */ (computedPropertiesMap.get(
+          vueNode
+        )).find((cp) => {
+          return (
+            cp.value &&
+            node.loc.start.line >= cp.value.loc.start.line &&
+            node.loc.end.line <= cp.value.loc.end.line &&
+            targetBody === cp.value
+          )
+        })
+        if (!computedProperty) {
+          return
+        }
+
+        if (!utils.isThis(node, context)) {
+          return
+        }
+        const mem = node.parent
+        if (mem.object !== node) {
+          return
+        }
+
+        const invalid = utils.findMutating(mem)
+        if (invalid) {
+          context.report({
+            node: invalid.node,
+            message: 'Unexpected side effect in "{{key}}" computed property.',
+            data: { key: computedProperty.key || 'Unknown' }
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-spaces-around-equal-signs-in-attribute.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-spaces-around-equal-signs-in-attribute.js
new file mode 100644
index 0000000000000000000000000000000000000000..8357fbf3d7d69446c8dbd3cc77f7314f333e3e9c
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-spaces-around-equal-signs-in-attribute.js
@@ -0,0 +1,57 @@
+/**
+ * @author Yosuke Ota
+ * issue https://github.com/vuejs/eslint-plugin-vue/issues/460
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'layout',
+    docs: {
+      description: 'disallow spaces around equal signs in attribute',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url:
+        'https://eslint.vuejs.org/rules/no-spaces-around-equal-signs-in-attribute.html'
+    },
+    fixable: 'whitespace',
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const sourceCode = context.getSourceCode()
+    return utils.defineTemplateBodyVisitor(context, {
+      VAttribute(node) {
+        if (!node.value) {
+          return
+        }
+        /** @type {Range} */
+        const range = [node.key.range[1], node.value.range[0]]
+        const eqText = sourceCode.text.slice(range[0], range[1])
+        const expect = eqText.trim()
+
+        if (eqText !== expect) {
+          context.report({
+            node: node.key,
+            loc: {
+              start: node.key.loc.end,
+              end: node.value.loc.start
+            },
+            message: 'Unexpected spaces found around equal signs.',
+            data: {},
+            fix: (fixer) => fixer.replaceTextRange(range, expect)
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-sparse-arrays.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-sparse-arrays.js
new file mode 100644
index 0000000000000000000000000000000000000000..48f7390e8269bf7dd05abef125c1c53f609ebbfd
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-sparse-arrays.js
@@ -0,0 +1,9 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('no-sparse-arrays')
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-static-inline-styles.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-static-inline-styles.js
new file mode 100644
index 0000000000000000000000000000000000000000..7dce27e1a993863027f24972754b7740532f228b
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-static-inline-styles.js
@@ -0,0 +1,141 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const utils = require('../utils')
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow static inline `style` attributes',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-static-inline-styles.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          allowBinding: {
+            type: 'boolean'
+          }
+        },
+        additionalProperties: false
+      }
+    ],
+    messages: {
+      forbiddenStaticInlineStyle: 'Static inline `style` are forbidden.',
+      forbiddenStyleAttr: '`style` attributes are forbidden.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /**
+     * Checks whether if the given property node is a static value.
+     * @param {Property} prop property node to check
+     * @returns {boolean} `true` if the given property node is a static value.
+     */
+    function isStaticValue(prop) {
+      return (
+        !prop.computed &&
+        prop.value.type === 'Literal' &&
+        (prop.key.type === 'Identifier' || prop.key.type === 'Literal')
+      )
+    }
+
+    /**
+     * Gets the static properties of a given expression node.
+     * - If `SpreadElement` or computed property exists, it gets only the static properties before it.
+     *   `:style="{ color: 'red', display: 'flex', ...spread, width: '16px' }"`
+     *              ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
+     * - If non-static object exists, it gets only the static properties up to that object.
+     *   `:style="[ { color: 'red' }, { display: 'flex', color, width: '16px' }, { height: '16px' } ]"`
+     *                ^^^^^^^^^^^^      ^^^^^^^^^^^^^^^         ^^^^^^^^^^^^^
+     * - If all properties are static properties, it returns one root node.
+     *   `:style="[ { color: 'red' }, { display: 'flex', width: '16px' } ]"`
+     *    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+     * @param {VDirective} node `:style` node to check
+     * @returns {Property[] | [VDirective]} the static properties.
+     */
+    function getReportNodes(node) {
+      const { value } = node
+      if (!value) {
+        return []
+      }
+      const { expression } = value
+      if (!expression) {
+        return []
+      }
+
+      let elements
+      if (expression.type === 'ObjectExpression') {
+        elements = [expression]
+      } else if (expression.type === 'ArrayExpression') {
+        elements = expression.elements
+      } else {
+        return []
+      }
+      const staticProperties = []
+      for (const element of elements) {
+        if (!element) {
+          continue
+        }
+        if (element.type !== 'ObjectExpression') {
+          return staticProperties
+        }
+
+        let isAllStatic = true
+        for (const prop of element.properties) {
+          if (prop.type === 'SpreadElement' || prop.computed) {
+            // If `SpreadElement` or computed property exists, it gets only the static properties before it.
+            return staticProperties
+          }
+          if (isStaticValue(prop)) {
+            staticProperties.push(prop)
+          } else {
+            isAllStatic = false
+          }
+        }
+        if (!isAllStatic) {
+          // If non-static object exists, it gets only the static properties up to that object.
+          return staticProperties
+        }
+      }
+      // If all properties are static properties, it returns one root node.
+      return [node]
+    }
+
+    /**
+     * Reports if the value is static.
+     * @param {VDirective} node `:style` node to check
+     */
+    function verifyVBindStyle(node) {
+      for (const n of getReportNodes(node)) {
+        context.report({
+          node: n,
+          messageId: 'forbiddenStaticInlineStyle'
+        })
+      }
+    }
+
+    /** @type {TemplateListener} */
+    const visitor = {
+      /** @param {VAttribute} node */
+      "VAttribute[directive=false][key.name='style']"(node) {
+        context.report({
+          node,
+          messageId: 'forbiddenStyleAttr'
+        })
+      }
+    }
+    if (!context.options[0] || !context.options[0].allowBinding) {
+      visitor[
+        "VAttribute[directive=true][key.name.name='bind'][key.argument.name='style']"
+      ] = verifyVBindStyle
+    }
+
+    return utils.defineTemplateBodyVisitor(context, visitor)
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-template-key.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-template-key.js
new file mode 100644
index 0000000000000000000000000000000000000000..c3fc3f2b4c46b158cad7e12a864b0fa819a09ff0
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-template-key.js
@@ -0,0 +1,57 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2016 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow `key` attribute on `<template>`',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/no-template-key.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      disallow:
+        "'<template>' cannot be keyed. Place the key on real elements instead."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VElement} node */
+      "VElement[name='template']"(node) {
+        const keyNode =
+          utils.getAttribute(node, 'key') ||
+          utils.getDirective(node, 'bind', 'key')
+        if (keyNode) {
+          if (utils.hasDirective(node, 'for')) {
+            // It's valid for Vue.js 3.x.
+            // <template v-for="item in list" :key="item.id"> ... </template>
+            // see https://github.com/vuejs/vue-next/issues/1734
+            return
+          }
+          context.report({
+            node: keyNode,
+            loc: keyNode.loc,
+            messageId: 'disallow'
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-template-shadow.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-template-shadow.js
new file mode 100644
index 0000000000000000000000000000000000000000..44f26cf57467055f15cfe93874a5b196e8459895
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-template-shadow.js
@@ -0,0 +1,101 @@
+/**
+ * @fileoverview Disallow variable declarations from shadowing variables declared in the outer scope.
+ * @author Armano
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+/**
+ * @typedef {import('../utils').GroupName} GroupName
+ */
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+/** @type {GroupName[]} */
+const GROUP_NAMES = ['props', 'computed', 'data', 'methods']
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'disallow variable declarations from shadowing variables declared in the outer scope',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/no-template-shadow.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /** @type {Set<string>} */
+    const jsVars = new Set()
+
+    /**
+     * @typedef {object} ScopeStack
+     * @property {ScopeStack | null} parent
+     * @property {Identifier[]} nodes
+     */
+    /** @type {ScopeStack | null} */
+    let scopeStack = null
+
+    // ----------------------------------------------------------------------
+    // Public
+    // ----------------------------------------------------------------------
+
+    return utils.defineTemplateBodyVisitor(
+      context,
+      {
+        /** @param {VElement} node */
+        VElement(node) {
+          scopeStack = {
+            parent: scopeStack,
+            nodes: scopeStack
+              ? scopeStack.nodes.slice() // make copy
+              : []
+          }
+          if (node.variables) {
+            for (const variable of node.variables) {
+              const varNode = variable.id
+              const name = varNode.name
+              if (
+                scopeStack.nodes.some((node) => node.name === name) ||
+                jsVars.has(name)
+              ) {
+                context.report({
+                  node: varNode,
+                  loc: varNode.loc,
+                  message:
+                    "Variable '{{name}}' is already declared in the upper scope.",
+                  data: {
+                    name
+                  }
+                })
+              } else {
+                scopeStack.nodes.push(varNode)
+              }
+            }
+          }
+        },
+        'VElement:exit'() {
+          scopeStack = scopeStack && scopeStack.parent
+        }
+      },
+      utils.executeOnVue(context, (obj) => {
+        const properties = Array.from(
+          utils.iterateProperties(obj, new Set(GROUP_NAMES))
+        )
+        for (const node of properties) {
+          jsVars.add(node.name)
+        }
+      })
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-template-target-blank.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-template-target-blank.js
new file mode 100644
index 0000000000000000000000000000000000000000..b671091ce3afa1ee15574b64e794b6b7415533e6
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-template-target-blank.js
@@ -0,0 +1,138 @@
+/**
+ * @fileoverview disallow target="_blank" attribute without rel="noopener noreferrer"
+ * @author Sosukesuzuki
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+/** @param {VAttribute} node */
+function isTargetBlank(node) {
+  return (
+    node.key &&
+    node.key.name === 'target' &&
+    node.value &&
+    node.value.value === '_blank'
+  )
+}
+/**
+ * @param {VStartTag} node
+ * @param {boolean} allowReferrer
+ */
+function hasSecureRel(node, allowReferrer) {
+  return node.attributes.some((attr) => {
+    if (attr.key && attr.key.name === 'rel') {
+      const tags =
+        attr.value &&
+        attr.value.type === 'VLiteral' &&
+        attr.value.value.toLowerCase().split(' ')
+      return (
+        tags &&
+        tags.includes('noopener') &&
+        (allowReferrer || tags.includes('noreferrer'))
+      )
+    } else {
+      return false
+    }
+  })
+}
+
+/**
+ * @param {VStartTag} node
+ */
+function hasExternalLink(node) {
+  return node.attributes.some(
+    (attr) =>
+      attr.key &&
+      attr.key.name === 'href' &&
+      attr.value &&
+      attr.value.type === 'VLiteral' &&
+      /^(?:\w+:|\/\/)/.test(attr.value.value)
+  )
+}
+
+/**
+ * @param {VStartTag} node
+ */
+function hasDynamicLink(node) {
+  return node.attributes.some(
+    (attr) =>
+      attr.key &&
+      attr.key.type === 'VDirectiveKey' &&
+      attr.key.name &&
+      attr.key.name.name === 'bind' &&
+      attr.key.argument &&
+      attr.key.argument.type === 'VIdentifier' &&
+      attr.key.argument.name === 'href'
+  )
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'disallow target="_blank" attribute without rel="noopener noreferrer"',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-template-target-blank.html'
+    },
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          allowReferrer: {
+            type: 'boolean'
+          },
+          enforceDynamicLinks: {
+            enum: ['always', 'never']
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+
+  /**
+   * Creates AST event handlers for no-template-target-blank
+   *
+   * @param {RuleContext} context - The rule context.
+   * @returns {Object} AST event handlers.
+   */
+  create(context) {
+    const configuration = context.options[0] || {}
+    const allowReferrer = configuration.allowReferrer || false
+    const enforceDynamicLinks = configuration.enforceDynamicLinks || 'always'
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VAttribute} node */
+      'VAttribute[directive=false]'(node) {
+        if (!isTargetBlank(node) || hasSecureRel(node.parent, allowReferrer)) {
+          return
+        }
+
+        const hasDangerHref =
+          hasExternalLink(node.parent) ||
+          (enforceDynamicLinks === 'always' && hasDynamicLink(node.parent))
+
+        if (hasDangerHref) {
+          context.report({
+            node,
+            message:
+              'Using target="_blank" without rel="noopener noreferrer" is a security risk.'
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-textarea-mustache.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-textarea-mustache.js
new file mode 100644
index 0000000000000000000000000000000000000000..abbe0115779e8db42ad9ad0adf1d7b3a02fd3788
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-textarea-mustache.js
@@ -0,0 +1,46 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow mustaches in `<textarea>`',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/no-textarea-mustache.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VExpressionContainer} node */
+      "VElement[name='textarea'] VExpressionContainer"(node) {
+        if (node.parent.type !== 'VElement') {
+          return
+        }
+
+        context.report({
+          node,
+          loc: node.loc,
+          message: "Unexpected mustache. Use 'v-model' instead."
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-unregistered-components.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-unregistered-components.js
new file mode 100644
index 0000000000000000000000000000000000000000..3ae2832840827b795638e87138ed50ae3df21683
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-unregistered-components.js
@@ -0,0 +1,198 @@
+/**
+ * @fileoverview Report used components that are not registered
+ * @author Jesús Ángel González Novez
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+const casing = require('../utils/casing')
+
+// ------------------------------------------------------------------------------
+// Rule helpers
+// ------------------------------------------------------------------------------
+
+const VUE_BUILT_IN_COMPONENTS = [
+  'component',
+  'suspense',
+  'teleport',
+  'transition',
+  'transition-group',
+  'keep-alive',
+  'slot'
+]
+/**
+ * Check whether the given node is a built-in component or not.
+ *
+ * Includes `suspense` and `teleport` from Vue 3.
+ *
+ * @param {VElement} node The start tag node to check.
+ * @returns {boolean} `true` if the node is a built-in component.
+ */
+const isBuiltInComponent = (node) => {
+  const rawName = node && casing.kebabCase(node.rawName)
+  return (
+    utils.isHtmlElementNode(node) &&
+    !utils.isHtmlWellKnownElementName(node.rawName) &&
+    VUE_BUILT_IN_COMPONENTS.indexOf(rawName) > -1
+  )
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'disallow using components that are not registered inside templates',
+      categories: null,
+      recommended: false,
+      url: 'https://eslint.vuejs.org/rules/no-unregistered-components.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          ignorePatterns: {
+            type: 'array'
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0] || {}
+    /** @type {string[]} */
+    const ignorePatterns = options.ignorePatterns || []
+    /** @type { { node: VElement | VDirective | VAttribute, name: string }[] } */
+    const usedComponentNodes = []
+    /** @type { { node: Property, name: string }[] } */
+    const registeredComponents = []
+
+    return utils.defineTemplateBodyVisitor(
+      context,
+      {
+        /** @param {VElement} node */
+        VElement(node) {
+          if (
+            (!utils.isHtmlElementNode(node) && !utils.isSvgElementNode(node)) ||
+            utils.isHtmlWellKnownElementName(node.rawName) ||
+            utils.isSvgWellKnownElementName(node.rawName) ||
+            isBuiltInComponent(node)
+          ) {
+            return
+          }
+
+          usedComponentNodes.push({ node, name: node.rawName })
+        },
+        /** @param {VDirective} node */
+        "VAttribute[directive=true][key.name.name='bind'][key.argument.name='is'], VAttribute[directive=true][key.name.name='is']"(
+          node
+        ) {
+          if (
+            !node.value ||
+            node.value.type !== 'VExpressionContainer' ||
+            !node.value.expression
+          )
+            return
+
+          if (node.value.expression.type === 'Literal') {
+            if (
+              utils.isHtmlWellKnownElementName(`${node.value.expression.value}`)
+            )
+              return
+            usedComponentNodes.push({
+              node,
+              name: `${node.value.expression.value}`
+            })
+          }
+        },
+        /** @param {VAttribute} node */
+        "VAttribute[directive=false][key.name='is']"(node) {
+          if (
+            !node.value || // `<component is />`
+            utils.isHtmlWellKnownElementName(node.value.value)
+          )
+            return
+          usedComponentNodes.push({ node, name: node.value.value })
+        },
+        /** @param {VElement} node */
+        "VElement[name='template']:exit"() {
+          // All registered components, transformed to kebab-case
+          const registeredComponentNames = registeredComponents.map(
+            ({ name }) => casing.kebabCase(name)
+          )
+
+          // All registered components using kebab-case syntax
+          const componentsRegisteredAsKebabCase = registeredComponents
+            .filter(({ name }) => name === casing.kebabCase(name))
+            .map(({ name }) => name)
+
+          usedComponentNodes
+            .filter(({ name }) => {
+              const kebabCaseName = casing.kebabCase(name)
+
+              // Check ignored patterns in first place
+              if (
+                ignorePatterns.find((pattern) => {
+                  const regExp = new RegExp(pattern)
+                  return (
+                    regExp.test(kebabCaseName) ||
+                    regExp.test(casing.pascalCase(name)) ||
+                    regExp.test(casing.camelCase(name)) ||
+                    regExp.test(casing.snakeCase(name)) ||
+                    regExp.test(name)
+                  )
+                })
+              )
+                return false
+
+              // Component registered as `foo-bar` cannot be used as `FooBar`
+              if (
+                casing.isPascalCase(name) &&
+                componentsRegisteredAsKebabCase.indexOf(kebabCaseName) !== -1
+              ) {
+                return true
+              }
+
+              // Otherwise
+              return registeredComponentNames.indexOf(kebabCaseName) === -1
+            })
+            .forEach(({ node, name }) =>
+              context.report({
+                node,
+                message:
+                  'The "{{name}}" component has been used but not registered.',
+                data: {
+                  name
+                }
+              })
+            )
+        }
+      },
+      utils.executeOnVue(context, (obj) => {
+        registeredComponents.push(...utils.getRegisteredComponents(obj))
+
+        const nameProperty = utils.findProperty(obj, 'name')
+
+        if (nameProperty) {
+          if (nameProperty.value.type === 'Literal') {
+            registeredComponents.push({
+              node: nameProperty,
+              name: `${nameProperty.value.value}`
+            })
+          }
+        }
+      })
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-unsupported-features.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-unsupported-features.js
new file mode 100644
index 0000000000000000000000000000000000000000..9eb00be0ec3d3a8238b321b4b8178886a8a36431
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-unsupported-features.js
@@ -0,0 +1,157 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const semver = require('semver')
+const utils = require('../utils')
+
+/**
+ * @typedef {object} SyntaxRule
+ * @property {string} supported
+ * @property { (context: RuleContext) => TemplateListener } [createTemplateBodyVisitor]
+ * @property { (context: RuleContext) => RuleListener } [createScriptVisitor]
+ */
+
+const FEATURES = {
+  // Vue.js 2.5.0+
+  'slot-scope-attribute': require('./syntaxes/slot-scope-attribute'),
+  // Vue.js 2.6.0+
+  'dynamic-directive-arguments': require('./syntaxes/dynamic-directive-arguments'),
+  'v-slot': require('./syntaxes/v-slot'),
+  // >=2.6.0-beta.1 <=2.6.0-beta.3
+  'v-bind-prop-modifier-shorthand': require('./syntaxes/v-bind-prop-modifier-shorthand'),
+  // Vue.js 3.0.0+
+  'v-model-argument': require('./syntaxes/v-model-argument'),
+  'v-model-custom-modifiers': require('./syntaxes/v-model-custom-modifiers'),
+  'v-is': require('./syntaxes/v-is')
+}
+
+const SYNTAX_NAMES = /** @type {(keyof FEATURES)[]} */ (Object.keys(FEATURES))
+
+const cache = new Map()
+/**
+ * Get the `semver.Range` object of a given range text.
+ * @param {string} x The text expression for a semver range.
+ * @returns {semver.Range} The range object of a given range text.
+ * It's null if the `x` is not a valid range text.
+ */
+function getSemverRange(x) {
+  const s = String(x)
+  let ret = cache.get(s) || null
+
+  if (!ret) {
+    try {
+      ret = new semver.Range(s)
+    } catch (_error) {
+      // Ignore parsing error.
+    }
+    cache.set(s, ret)
+  }
+
+  return ret
+}
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'disallow unsupported Vue.js syntax on the specified version',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-unsupported-features.html'
+    },
+    fixable: 'code',
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          version: {
+            type: 'string'
+          },
+          ignores: {
+            type: 'array',
+            items: {
+              enum: SYNTAX_NAMES
+            },
+            uniqueItems: true
+          }
+        },
+        additionalProperties: false
+      }
+    ],
+    messages: {
+      // Vue.js 2.5.0+
+      forbiddenSlotScopeAttribute:
+        '`slot-scope` are not supported except Vue.js ">=2.5.0 <3.0.0".',
+      // Vue.js 2.6.0+
+      forbiddenDynamicDirectiveArguments:
+        'Dynamic arguments are not supported until Vue.js "2.6.0".',
+      forbiddenVSlot: '`v-slot` are not supported until Vue.js "2.6.0".',
+      // >=2.6.0-beta.1 <=2.6.0-beta.3
+      forbiddenVBindPropModifierShorthand:
+        '`.prop` shorthand are not supported except Vue.js ">=2.6.0-beta.1 <=2.6.0-beta.3".',
+      // Vue.js 3.0.0+
+      forbiddenVModelArgument:
+        'Argument on `v-model` is not supported until Vue.js "3.0.0".',
+      forbiddenVModelCustomModifiers:
+        'Custom modifiers on `v-model` are not supported until Vue.js "3.0.0".',
+      forbiddenVIs: '`v-is` are not supported until Vue.js "3.0.0".'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const { version, ignores } = Object.assign(
+      {
+        version: null,
+        ignores: []
+      },
+      context.options[0] || {}
+    )
+    if (!version) {
+      // version is not set.
+      return {}
+    }
+    const versionRange = getSemverRange(version)
+
+    /**
+     * Check whether a given case object is full-supported on the configured node version.
+     * @param {SyntaxRule} aCase The case object to check.
+     * @returns {boolean} `true` if it's supporting.
+     */
+    function isNotSupportingVersion(aCase) {
+      return !semver.subset(versionRange, getSemverRange(aCase.supported))
+    }
+
+    /** @type {TemplateListener} */
+    let templateBodyVisitor = {}
+    /** @type {RuleListener} */
+    let scriptVisitor = {}
+
+    for (const syntaxName of SYNTAX_NAMES) {
+      /** @type {SyntaxRule} */
+      const syntax = FEATURES[syntaxName]
+      if (ignores.includes(syntaxName) || !isNotSupportingVersion(syntax)) {
+        continue
+      }
+      if (syntax.createTemplateBodyVisitor) {
+        const visitor = syntax.createTemplateBodyVisitor(context)
+        templateBodyVisitor = utils.compositingVisitors(
+          templateBodyVisitor,
+          visitor
+        )
+      }
+      if (syntax.createScriptVisitor) {
+        const visitor = syntax.createScriptVisitor(context)
+        scriptVisitor = utils.compositingVisitors(scriptVisitor, visitor)
+      }
+    }
+
+    return utils.defineTemplateBodyVisitor(
+      context,
+      templateBodyVisitor,
+      scriptVisitor
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-unused-components.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-unused-components.js
new file mode 100644
index 0000000000000000000000000000000000000000..e067e3eb04b69c5625619d56aa554736a0864aa1
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-unused-components.js
@@ -0,0 +1,143 @@
+/**
+ * @fileoverview Report used components
+ * @author Michał Sajnóg
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+const casing = require('../utils/casing')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'disallow registering components that are not used inside templates',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/no-unused-components.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          ignoreWhenBindingPresent: {
+            type: 'boolean'
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0] || {}
+    const ignoreWhenBindingPresent =
+      options.ignoreWhenBindingPresent !== undefined
+        ? options.ignoreWhenBindingPresent
+        : true
+    const usedComponents = new Set()
+    /** @type { { node: Property, name: string }[] } */
+    let registeredComponents = []
+    let ignoreReporting = false
+    /** @type {Position} */
+    let templateLocation
+
+    return utils.defineTemplateBodyVisitor(
+      context,
+      {
+        /** @param {VElement} node */
+        VElement(node) {
+          if (
+            (!utils.isHtmlElementNode(node) && !utils.isSvgElementNode(node)) ||
+            utils.isHtmlWellKnownElementName(node.rawName) ||
+            utils.isSvgWellKnownElementName(node.rawName)
+          ) {
+            return
+          }
+
+          usedComponents.add(node.rawName)
+        },
+        /** @param {VDirective} node */
+        "VAttribute[directive=true][key.name.name='bind'][key.argument.name='is'], VAttribute[directive=true][key.name.name='is']"(
+          node
+        ) {
+          if (
+            !node.value || // `<component :is>`
+            node.value.type !== 'VExpressionContainer' ||
+            !node.value.expression // `<component :is="">`
+          )
+            return
+
+          if (node.value.expression.type === 'Literal') {
+            usedComponents.add(node.value.expression.value)
+          } else if (ignoreWhenBindingPresent) {
+            ignoreReporting = true
+          }
+        },
+        /** @param {VAttribute} node */
+        "VAttribute[directive=false][key.name='is']"(node) {
+          if (!node.value) {
+            return
+          }
+          usedComponents.add(node.value.value)
+        },
+        /** @param {VElement} node */
+        "VElement[name='template']"(node) {
+          templateLocation = templateLocation || node.loc.start
+        },
+        /** @param {VElement} node */
+        "VElement[name='template']:exit"(node) {
+          if (
+            node.loc.start !== templateLocation ||
+            ignoreReporting ||
+            utils.hasAttribute(node, 'src')
+          )
+            return
+
+          registeredComponents
+            .filter(({ name }) => {
+              // If the component name is PascalCase or camelCase
+              // it can be used in various of ways inside template,
+              // like "theComponent", "The-component" etc.
+              // but except snake_case
+              if (casing.isPascalCase(name) || casing.isCamelCase(name)) {
+                return ![...usedComponents].some((n) => {
+                  return (
+                    n.indexOf('_') === -1 &&
+                    (name === casing.pascalCase(n) ||
+                      casing.camelCase(n) === name)
+                  )
+                })
+              } else {
+                // In any other case the used component name must exactly match
+                // the registered name
+                return !usedComponents.has(name)
+              }
+            })
+            .forEach(({ node, name }) =>
+              context.report({
+                node,
+                message:
+                  'The "{{name}}" component has been registered but not used.',
+                data: {
+                  name
+                }
+              })
+            )
+        }
+      },
+      utils.executeOnVue(context, (obj) => {
+        registeredComponents = utils.getRegisteredComponents(obj)
+      })
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-unused-properties.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-unused-properties.js
new file mode 100644
index 0000000000000000000000000000000000000000..a405c8e60392423a1a9104cad7e04060c465d423
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-unused-properties.js
@@ -0,0 +1,817 @@
+/**
+ * @fileoverview Disallow unused properties, data and computed properties.
+ * @author Learning Equality
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+const eslintUtils = require('eslint-utils')
+
+/**
+ * @typedef {import('../utils').ComponentPropertyData} ComponentPropertyData
+ * @typedef {import('../utils').VueObjectData} VueObjectData
+ */
+/**
+ * @typedef {object} TemplatePropertiesContainer
+ * @property {Set<string>} usedNames
+ * @property {Set<string>} refNames
+ * @typedef {object} VueComponentPropertiesContainer
+ * @property {ComponentPropertyData[]} properties
+ * @property {Set<string>} usedNames
+ * @property {boolean} unknown
+ * @property {Set<string>} usedPropsNames
+ * @property {boolean} unknownProps
+ * @typedef { { node: FunctionExpression | ArrowFunctionExpression | FunctionDeclaration, index: number } } CallIdAndParamIndex
+ * @typedef { { usedNames: UsedNames, unknown: boolean } } UsedProperties
+ * @typedef { (context: RuleContext) => UsedProps } UsedPropsTracker
+ */
+
+// ------------------------------------------------------------------------------
+// Constants
+// ------------------------------------------------------------------------------
+
+const GROUP_PROPERTY = 'props'
+const GROUP_DATA = 'data'
+const GROUP_COMPUTED_PROPERTY = 'computed'
+const GROUP_METHODS = 'methods'
+const GROUP_SETUP = 'setup'
+const GROUP_WATCHER = 'watch'
+
+const PROPERTY_LABEL = {
+  props: 'property',
+  data: 'data',
+  computed: 'computed property',
+  methods: 'method',
+  setup: 'property returned from `setup()`',
+  watch: 'watch'
+}
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Find the variable of a given name.
+ * @param {RuleContext} context The rule context
+ * @param {Identifier} node The variable name to find.
+ * @returns {Variable|null} The found variable or null.
+ */
+function findVariable(context, node) {
+  return eslintUtils.findVariable(getScope(context, node), node)
+}
+/**
+ * Gets the scope for the current node
+ * @param {RuleContext} context The rule context
+ * @param {ESNode} currentNode The node to get the scope of
+ * @returns { import('eslint').Scope.Scope } The scope information for this node
+ */
+function getScope(context, currentNode) {
+  // On Program node, get the outermost scope to avoid return Node.js special function scope or ES modules scope.
+  const inner = currentNode.type !== 'Program'
+  const scopeManager = context.getSourceCode().scopeManager
+
+  /** @type {ESNode | null} */
+  let node = currentNode
+  for (; node; node = /** @type {ESNode | null} */ (node.parent)) {
+    const scope = scopeManager.acquire(node, inner)
+
+    if (scope) {
+      if (scope.type === 'function-expression-name') {
+        return scope.childScopes[0]
+      }
+      return scope
+    }
+  }
+
+  return scopeManager.scopes[0]
+}
+
+/**
+ * Extract names from references objects.
+ * @param {VReference[]} references
+ */
+function getReferencesNames(references) {
+  return references
+    .filter((ref) => ref.variable == null)
+    .map((ref) => ref.id.name)
+}
+
+class UsedNames {
+  constructor() {
+    /** @type {Map<string, UsedPropsTracker[]>} */
+    this.map = new Map()
+  }
+  /**
+   * @returns {IterableIterator<string>}
+   */
+  names() {
+    return this.map.keys()
+  }
+  /**
+   * @param {string} name
+   * @returns {UsedPropsTracker[]}
+   */
+  get(name) {
+    return this.map.get(name) || []
+  }
+  /**
+   * @param {string} name
+   * @param {UsedPropsTracker} tracker
+   */
+  add(name, tracker) {
+    const list = this.map.get(name)
+    if (list) {
+      list.push(tracker)
+    } else {
+      this.map.set(name, [tracker])
+    }
+  }
+  /**
+   * @param {UsedNames} other
+   */
+  addAll(other) {
+    other.map.forEach((trackers, name) => {
+      const list = this.map.get(name)
+      if (list) {
+        list.push(...trackers)
+      } else {
+        this.map.set(name, trackers)
+      }
+    })
+  }
+}
+
+/**
+ * @param {ObjectPattern} node
+ * @returns {UsedProperties}
+ */
+function extractObjectPatternProperties(node) {
+  const usedNames = new UsedNames()
+  for (const prop of node.properties) {
+    if (prop.type === 'Property') {
+      const name = utils.getStaticPropertyName(prop)
+      if (name) {
+        usedNames.add(name, getObjectPatternPropertyPatternTracker(prop.value))
+      } else {
+        // If cannot trace name, everything is used!
+        return {
+          usedNames,
+          unknown: true
+        }
+      }
+    } else {
+      // If use RestElement, everything is used!
+      return {
+        usedNames,
+        unknown: true
+      }
+    }
+  }
+  return {
+    usedNames,
+    unknown: false
+  }
+}
+
+/**
+ * @param {Pattern} pattern
+ * @returns {UsedPropsTracker}
+ */
+function getObjectPatternPropertyPatternTracker(pattern) {
+  if (pattern.type === 'ObjectPattern') {
+    return () => {
+      const result = new UsedProps()
+      const { usedNames, unknown } = extractObjectPatternProperties(pattern)
+      result.usedNames.addAll(usedNames)
+      result.unknown = unknown
+      return result
+    }
+  }
+  if (pattern.type === 'Identifier') {
+    return (context) => {
+      const result = new UsedProps()
+      const variable = findVariable(context, pattern)
+      if (!variable) {
+        return result
+      }
+      for (const reference of variable.references) {
+        const id = reference.identifier
+        const { usedNames, unknown, calls } = extractPatternOrThisProperties(
+          id,
+          context
+        )
+        result.usedNames.addAll(usedNames)
+        result.unknown = result.unknown || unknown
+        result.calls.push(...calls)
+      }
+      return result
+    }
+  } else if (pattern.type === 'AssignmentPattern') {
+    return getObjectPatternPropertyPatternTracker(pattern.left)
+  }
+  return () => {
+    const result = new UsedProps()
+    result.unknown = true
+    return result
+  }
+}
+
+/**
+ * @param {Identifier | MemberExpression | ChainExpression | ThisExpression} node
+ * @param {RuleContext} context
+ * @returns {UsedProps}
+ */
+function extractPatternOrThisProperties(node, context) {
+  const result = new UsedProps()
+  const parent = node.parent
+  if (parent.type === 'AssignmentExpression') {
+    if (parent.right === node && parent.left.type === 'ObjectPattern') {
+      // `({foo} = arg)`
+      const { usedNames, unknown } = extractObjectPatternProperties(parent.left)
+      result.usedNames.addAll(usedNames)
+      result.unknown = result.unknown || unknown
+    }
+    return result
+  } else if (parent.type === 'VariableDeclarator') {
+    if (parent.init === node) {
+      if (parent.id.type === 'ObjectPattern') {
+        // `const {foo} = arg`
+        const { usedNames, unknown } = extractObjectPatternProperties(parent.id)
+        result.usedNames.addAll(usedNames)
+        result.unknown = result.unknown || unknown
+      } else if (parent.id.type === 'Identifier') {
+        // `const foo = arg`
+        const variable = findVariable(context, parent.id)
+        if (!variable) {
+          return result
+        }
+        for (const reference of variable.references) {
+          const id = reference.identifier
+          const { usedNames, unknown, calls } = extractPatternOrThisProperties(
+            id,
+            context
+          )
+          result.usedNames.addAll(usedNames)
+          result.unknown = result.unknown || unknown
+          result.calls.push(...calls)
+        }
+      }
+    }
+    return result
+  } else if (parent.type === 'MemberExpression') {
+    if (parent.object === node) {
+      // `arg.foo`
+      const name = utils.getStaticPropertyName(parent)
+      if (name) {
+        result.usedNames.add(name, () =>
+          extractPatternOrThisProperties(parent, context)
+        )
+      } else {
+        result.unknown = true
+      }
+    }
+    return result
+  } else if (parent.type === 'CallExpression') {
+    const argIndex = parent.arguments.indexOf(node)
+    if (argIndex > -1 && parent.callee.type === 'Identifier') {
+      // `foo(arg)`
+      const calleeVariable = findVariable(context, parent.callee)
+      if (!calleeVariable) {
+        return result
+      }
+      if (calleeVariable.defs.length === 1) {
+        const def = calleeVariable.defs[0]
+        if (
+          def.type === 'Variable' &&
+          def.parent.kind === 'const' &&
+          def.node.init &&
+          (def.node.init.type === 'FunctionExpression' ||
+            def.node.init.type === 'ArrowFunctionExpression')
+        ) {
+          result.calls.push({
+            node: def.node.init,
+            index: argIndex
+          })
+        } else if (def.node.type === 'FunctionDeclaration') {
+          result.calls.push({
+            node: def.node,
+            index: argIndex
+          })
+        }
+      }
+    }
+  } else if (parent.type === 'ChainExpression') {
+    const { usedNames, unknown, calls } = extractPatternOrThisProperties(
+      parent,
+      context
+    )
+    result.usedNames.addAll(usedNames)
+    result.unknown = result.unknown || unknown
+    result.calls.push(...calls)
+  }
+  return result
+}
+
+/**
+ * Collects the property names used.
+ */
+class UsedProps {
+  constructor() {
+    this.usedNames = new UsedNames()
+    /** @type {CallIdAndParamIndex[]} */
+    this.calls = []
+    this.unknown = false
+  }
+}
+
+/**
+ * Collects the property names used for one parameter of the function.
+ */
+class ParamUsedProps extends UsedProps {
+  /**
+   * @param {Pattern} paramNode
+   * @param {RuleContext} context
+   */
+  constructor(paramNode, context) {
+    super()
+    while (paramNode.type === 'AssignmentPattern') {
+      paramNode = paramNode.left
+    }
+    if (paramNode.type === 'RestElement' || paramNode.type === 'ArrayPattern') {
+      // cannot check
+      return
+    }
+    if (paramNode.type === 'ObjectPattern') {
+      const { usedNames, unknown } = extractObjectPatternProperties(paramNode)
+      this.usedNames.addAll(usedNames)
+      this.unknown = this.unknown || unknown
+      return
+    }
+    if (paramNode.type !== 'Identifier') {
+      return
+    }
+    const variable = findVariable(context, paramNode)
+    if (!variable) {
+      return
+    }
+    for (const reference of variable.references) {
+      const id = reference.identifier
+      const { usedNames, unknown, calls } = extractPatternOrThisProperties(
+        id,
+        context
+      )
+      this.usedNames.addAll(usedNames)
+      this.unknown = this.unknown || unknown
+      this.calls.push(...calls)
+    }
+  }
+}
+
+/**
+ * Collects the property names used for parameters of the function.
+ */
+class ParamsUsedProps {
+  /**
+   * @param {FunctionDeclaration | FunctionExpression | ArrowFunctionExpression} node
+   * @param {RuleContext} context
+   */
+  constructor(node, context) {
+    this.node = node
+    this.context = context
+    /** @type {ParamUsedProps[]} */
+    this.params = []
+  }
+
+  /**
+   * @param {number} index
+   * @returns {ParamUsedProps | null}
+   */
+  getParam(index) {
+    const param = this.params[index]
+    if (param != null) {
+      return param
+    }
+    if (this.node.params[index]) {
+      return (this.params[index] = new ParamUsedProps(
+        this.node.params[index],
+        this.context
+      ))
+    }
+    return null
+  }
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow unused properties',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-unused-properties.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          groups: {
+            type: 'array',
+            items: {
+              enum: [
+                GROUP_PROPERTY,
+                GROUP_DATA,
+                GROUP_COMPUTED_PROPERTY,
+                GROUP_METHODS,
+                GROUP_SETUP
+              ]
+            },
+            additionalItems: false,
+            uniqueItems: true
+          }
+        },
+        additionalProperties: false
+      }
+    ],
+    messages: {
+      unused: "'{{name}}' of {{group}} found, but never used."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0] || {}
+    const groups = new Set(options.groups || [GROUP_PROPERTY])
+
+    /** @type {Map<FunctionDeclaration | FunctionExpression | ArrowFunctionExpression, ParamsUsedProps>} */
+    const paramsUsedPropsMap = new Map()
+    /** @type {TemplatePropertiesContainer} */
+    const templatePropertiesContainer = {
+      usedNames: new Set(),
+      refNames: new Set()
+    }
+    /** @type {Map<ASTNode, VueComponentPropertiesContainer>} */
+    const vueComponentPropertiesContainerMap = new Map()
+
+    /**
+     * @param {FunctionDeclaration | FunctionExpression | ArrowFunctionExpression} node
+     * @returns {ParamsUsedProps}
+     */
+    function getParamsUsedProps(node) {
+      let usedProps = paramsUsedPropsMap.get(node)
+      if (!usedProps) {
+        usedProps = new ParamsUsedProps(node, context)
+        paramsUsedPropsMap.set(node, usedProps)
+      }
+      return usedProps
+    }
+
+    /**
+     * @param {ASTNode} node
+     * @returns {VueComponentPropertiesContainer}
+     */
+    function getVueComponentPropertiesContainer(node) {
+      let container = vueComponentPropertiesContainerMap.get(node)
+      if (!container) {
+        container = {
+          properties: [],
+          usedNames: new Set(),
+          usedPropsNames: new Set(),
+          unknown: false,
+          unknownProps: false
+        }
+        vueComponentPropertiesContainerMap.set(node, container)
+      }
+      return container
+    }
+
+    /**
+     * Report all unused properties.
+     */
+    function reportUnusedProperties() {
+      for (const container of vueComponentPropertiesContainerMap.values()) {
+        if (container.unknown) {
+          // unknown
+          continue
+        }
+        for (const property of container.properties) {
+          if (
+            container.usedNames.has(property.name) ||
+            templatePropertiesContainer.usedNames.has(property.name)
+          ) {
+            // used
+            continue
+          }
+          if (
+            property.groupName === 'props' &&
+            (container.unknownProps ||
+              container.usedPropsNames.has(property.name))
+          ) {
+            // used props
+            continue
+          }
+          if (
+            property.groupName === 'setup' &&
+            templatePropertiesContainer.refNames.has(property.name)
+          ) {
+            // used template refs
+            continue
+          }
+          context.report({
+            node: property.node,
+            messageId: 'unused',
+            data: {
+              group: PROPERTY_LABEL[property.groupName],
+              name: property.name
+            }
+          })
+        }
+      }
+    }
+
+    /**
+     * @param {UsedProps} usedProps
+     * @param {Map<ASTNode,Set<number>>} already
+     * @returns {IterableIterator<UsedProps>}
+     */
+    function* iterateUsedProps(usedProps, already = new Map()) {
+      yield usedProps
+      for (const call of usedProps.calls) {
+        let alreadyIndexes = already.get(call.node)
+        if (!alreadyIndexes) {
+          alreadyIndexes = new Set()
+          already.set(call.node, alreadyIndexes)
+        }
+        if (alreadyIndexes.has(call.index)) {
+          continue
+        }
+        alreadyIndexes.add(call.index)
+        const paramsUsedProps = getParamsUsedProps(call.node)
+        const paramUsedProps = paramsUsedProps.getParam(call.index)
+        if (!paramUsedProps) {
+          continue
+        }
+        yield paramUsedProps
+        yield* iterateUsedProps(paramUsedProps, already)
+      }
+    }
+
+    /**
+     * @param {VueComponentPropertiesContainer} container
+     * @param {UsedProps} baseUseProps
+     */
+    function processParamPropsUsed(container, baseUseProps) {
+      for (const { usedNames, unknown } of iterateUsedProps(baseUseProps)) {
+        if (unknown) {
+          container.unknownProps = true
+          return
+        }
+        for (const name of usedNames.names()) {
+          container.usedPropsNames.add(name)
+        }
+      }
+    }
+
+    /**
+     * @param {VueComponentPropertiesContainer} container
+     * @param {UsedProps} baseUseProps
+     */
+    function processUsed(container, baseUseProps) {
+      for (const { usedNames, unknown } of iterateUsedProps(baseUseProps)) {
+        if (unknown) {
+          container.unknown = true
+          return
+        }
+        for (const name of usedNames.names()) {
+          container.usedNames.add(name)
+        }
+      }
+    }
+
+    /**
+     * @param {Expression} node
+     * @returns {Property|null}
+     */
+    function getParentProperty(node) {
+      if (
+        !node.parent ||
+        node.parent.type !== 'Property' ||
+        node.parent.value !== node
+      ) {
+        return null
+      }
+      const property = node.parent
+      if (!property.parent || property.parent.type !== 'ObjectExpression') {
+        return null
+      }
+      return /** @type {Property} */ (property)
+    }
+
+    const scriptVisitor = Object.assign(
+      {},
+      utils.defineVueVisitor(context, {
+        onVueObjectEnter(node) {
+          const container = getVueComponentPropertiesContainer(node)
+          const watcherUsedProperties = new Set()
+          for (const watcher of utils.iterateProperties(
+            node,
+            new Set([GROUP_WATCHER])
+          )) {
+            // Process `watch: { foo /* <- this */ () {} }`
+            let path
+            for (const seg of watcher.name.split('.')) {
+              path = path ? `${path}.${seg}` : seg
+              watcherUsedProperties.add(path)
+            }
+
+            // Process `watch: { x: 'foo' /* <- this */  }`
+            if (watcher.type === 'object') {
+              const property = watcher.property
+              if (property.kind === 'init') {
+                for (const handlerValueNode of utils.iterateWatchHandlerValues(
+                  property
+                )) {
+                  if (
+                    handlerValueNode.type === 'Literal' ||
+                    handlerValueNode.type === 'TemplateLiteral'
+                  ) {
+                    const name = utils.getStringLiteralValue(handlerValueNode)
+                    if (name != null) {
+                      watcherUsedProperties.add(name)
+                    }
+                  }
+                }
+              }
+            }
+          }
+          for (const prop of utils.iterateProperties(node, groups)) {
+            if (watcherUsedProperties.has(prop.name)) {
+              continue
+            }
+            container.properties.push(prop)
+          }
+        },
+        /** @param { (FunctionExpression | ArrowFunctionExpression) & { parent: Property }} node */
+        'ObjectExpression > Property > :function[params.length>0]'(
+          node,
+          vueData
+        ) {
+          const property = getParentProperty(node)
+          if (!property) {
+            return
+          }
+          if (property.parent === vueData.node) {
+            if (utils.getStaticPropertyName(property) !== 'data') {
+              return
+            }
+            // check { data: (vm) => vm.prop }
+          } else {
+            const parentProperty = getParentProperty(property.parent)
+            if (!parentProperty) {
+              return
+            }
+            if (parentProperty.parent === vueData.node) {
+              if (utils.getStaticPropertyName(parentProperty) !== 'computed') {
+                return
+              }
+              // check { computed: { foo: (vm) => vm.prop } }
+            } else {
+              const parentParentProperty = getParentProperty(
+                parentProperty.parent
+              )
+              if (!parentParentProperty) {
+                return
+              }
+              if (parentParentProperty.parent === vueData.node) {
+                if (
+                  utils.getStaticPropertyName(parentParentProperty) !==
+                    'computed' ||
+                  utils.getStaticPropertyName(property) !== 'get'
+                ) {
+                  return
+                }
+                // check { computed: { foo: { get: () => vm.prop } } }
+              } else {
+                return
+              }
+            }
+          }
+
+          const paramsUsedProps = getParamsUsedProps(node)
+          const usedProps = /** @type {ParamUsedProps} */ (paramsUsedProps.getParam(
+            0
+          ))
+          processUsed(
+            getVueComponentPropertiesContainer(vueData.node),
+            usedProps
+          )
+        },
+        onSetupFunctionEnter(node, vueData) {
+          const container = getVueComponentPropertiesContainer(vueData.node)
+          if (node.params[0]) {
+            const paramsUsedProps = getParamsUsedProps(node)
+            const paramUsedProps = /** @type {ParamUsedProps} */ (paramsUsedProps.getParam(
+              0
+            ))
+
+            processParamPropsUsed(container, paramUsedProps)
+          }
+        },
+        onRenderFunctionEnter(node, vueData) {
+          const container = getVueComponentPropertiesContainer(vueData.node)
+          if (node.params[0]) {
+            // for Vue 3.x render
+            const paramsUsedProps = getParamsUsedProps(node)
+            const paramUsedProps = /** @type {ParamUsedProps} */ (paramsUsedProps.getParam(
+              0
+            ))
+
+            processParamPropsUsed(container, paramUsedProps)
+            if (container.unknownProps) {
+              return
+            }
+          }
+
+          if (vueData.functional && node.params[1]) {
+            // for Vue 2.x render & functional
+            const paramsUsedProps = getParamsUsedProps(node)
+            const paramUsedProps = /** @type {ParamUsedProps} */ (paramsUsedProps.getParam(
+              1
+            ))
+
+            for (const { usedNames, unknown } of iterateUsedProps(
+              paramUsedProps
+            )) {
+              if (unknown) {
+                container.unknownProps = true
+                return
+              }
+              for (const usedPropsTracker of usedNames.get('props')) {
+                const propUsedProps = usedPropsTracker(context)
+                processParamPropsUsed(container, propUsedProps)
+                if (container.unknownProps) {
+                  return
+                }
+              }
+            }
+          }
+        },
+        /**
+         * @param {ThisExpression | Identifier} node
+         * @param {VueObjectData} vueData
+         */
+        'ThisExpression, Identifier'(node, vueData) {
+          if (!utils.isThis(node, context)) {
+            return
+          }
+          const container = getVueComponentPropertiesContainer(vueData.node)
+          const usedProps = extractPatternOrThisProperties(node, context)
+
+          processUsed(container, usedProps)
+        }
+      }),
+      {
+        /** @param {Program} node */
+        'Program:exit'(node) {
+          if (!node.templateBody) {
+            reportUnusedProperties()
+          }
+        }
+      }
+    )
+
+    const templateVisitor = {
+      /**
+       * @param {VExpressionContainer} node
+       */
+      VExpressionContainer(node) {
+        for (const name of getReferencesNames(node.references)) {
+          templatePropertiesContainer.usedNames.add(name)
+        }
+      },
+      /**
+       * @param {VAttribute} node
+       */
+      'VAttribute[directive=false]'(node) {
+        if (node.key.name === 'ref' && node.value != null) {
+          templatePropertiesContainer.refNames.add(node.value.value)
+        }
+      },
+      "VElement[parent.type!='VElement']:exit"() {
+        reportUnusedProperties()
+      }
+    }
+
+    return utils.defineTemplateBodyVisitor(
+      context,
+      templateVisitor,
+      scriptVisitor
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-unused-vars.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-unused-vars.js
new file mode 100644
index 0000000000000000000000000000000000000000..a9939c1ae100bc69238d776ce58d9cc2ccda9f80
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-unused-vars.js
@@ -0,0 +1,147 @@
+/**
+ * @fileoverview disallow unused variable definitions of v-for directives or scope attributes.
+ * @author 薛定谔的猫<hh_2013@foxmail.com>
+ */
+'use strict'
+
+const utils = require('../utils')
+
+/**
+ * @typedef {VVariable['kind']} VariableKind
+ */
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Groups variables by directive kind.
+ * @param {VElement} node The element node
+ * @returns { { [kind in VariableKind]?: VVariable[] } } The variables of grouped by directive kind.
+ */
+function groupingVariables(node) {
+  /** @type { { [kind in VariableKind]?: VVariable[] } } */
+  const result = {}
+  for (const variable of node.variables) {
+    const vars = result[variable.kind] || (result[variable.kind] = [])
+    vars.push(variable)
+  }
+  return result
+}
+
+/**
+ * Checks if the given variable was defined by destructuring.
+ * @param {VVariable} variable the given variable to check
+ * @returns {boolean} `true` if the given variable was defined by destructuring.
+ */
+function isDestructuringVar(variable) {
+  const node = variable.id
+  /** @type {ASTNode | null} */
+  let parent = node.parent
+  while (parent) {
+    if (
+      parent.type === 'VForExpression' ||
+      parent.type === 'VSlotScopeExpression'
+    ) {
+      return false
+    }
+    if (parent.type === 'Property' || parent.type === 'ArrayPattern') {
+      return true
+    }
+    parent = parent.parent
+  }
+  return false
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'disallow unused variable definitions of v-for directives or scope attributes',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/no-unused-vars.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          ignorePattern: {
+            type: 'string'
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const option = context.options[0] || {}
+    const ignorePattern = option.ignorePattern
+    /** @type {RegExp | null} */
+    let ignoreRegEx = null
+    if (ignorePattern) {
+      ignoreRegEx = new RegExp(ignorePattern, 'u')
+    }
+    return utils.defineTemplateBodyVisitor(context, {
+      /**
+       * @param {VElement} node
+       */
+      VElement(node) {
+        const vars = groupingVariables(node)
+        for (const variables of Object.values(vars)) {
+          if (!variables) {
+            continue
+          }
+          let hasAfterUsed = false
+
+          for (let i = variables.length - 1; i >= 0; i--) {
+            const variable = variables[i]
+
+            if (variable.references.length) {
+              hasAfterUsed = true
+              continue
+            }
+
+            if (ignoreRegEx != null && ignoreRegEx.test(variable.id.name)) {
+              continue
+            }
+
+            if (hasAfterUsed && !isDestructuringVar(variable)) {
+              // If a variable after the variable is used, it will be skipped.
+              continue
+            }
+
+            context.report({
+              node: variable.id,
+              loc: variable.id.loc,
+              message: `'{{name}}' is defined but never used.`,
+              data: {
+                name: variable.id.name
+              },
+              suggest:
+                ignorePattern === '^_'
+                  ? [
+                      {
+                        desc: `Replace the ${variable.id.name} with _${variable.id.name}`,
+                        fix(fixer) {
+                          return fixer.replaceText(
+                            variable.id,
+                            `_${variable.id.name}`
+                          )
+                        }
+                      }
+                    ]
+                  : []
+            })
+          }
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-use-v-if-with-v-for.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-use-v-if-with-v-for.js
new file mode 100644
index 0000000000000000000000000000000000000000..18733926068ab3930ddb5678a7759a108fc06846
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-use-v-if-with-v-for.js
@@ -0,0 +1,119 @@
+/**
+ * @author Yosuke Ota
+ *
+ * Style guide: https://v3.vuejs.org/style-guide/#avoid-v-if-with-v-for-essential
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Check whether the given `v-if` node is using the variable which is defined by the `v-for` directive.
+ * @param {VDirective} vIf The `v-if` attribute node to check.
+ * @returns {boolean} `true` if the `v-if` is using the variable which is defined by the `v-for` directive.
+ */
+function isUsingIterationVar(vIf) {
+  return !!getVForUsingIterationVar(vIf)
+}
+
+/** @param {VDirective} vIf */
+function getVForUsingIterationVar(vIf) {
+  if (!vIf.value) {
+    return null
+  }
+  const element = vIf.parent.parent
+  for (const reference of vIf.value.references) {
+    const targetVFor = element.variables.find(
+      (variable) =>
+        variable.id.name === reference.id.name && variable.kind === 'v-for'
+    )
+    if (targetVFor) {
+      return targetVFor
+    }
+  }
+  return null
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow use v-if on the same element as v-for',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/no-use-v-if-with-v-for.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          allowUsingIterationVar: {
+            type: 'boolean'
+          }
+        }
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0] || {}
+    const allowUsingIterationVar = options.allowUsingIterationVar === true // default false
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='if']"(node) {
+        const element = node.parent.parent
+
+        if (utils.hasDirective(element, 'for')) {
+          if (isUsingIterationVar(node)) {
+            if (!allowUsingIterationVar) {
+              const vForVar = getVForUsingIterationVar(node)
+              if (!vForVar) {
+                return
+              }
+
+              let targetVForExpr = vForVar.id.parent
+              while (targetVForExpr.type !== 'VForExpression') {
+                targetVForExpr = /** @type {ASTNode} */ (targetVForExpr.parent)
+              }
+              const iteratorNode = targetVForExpr.right
+              context.report({
+                node,
+                loc: node.loc,
+                message:
+                  "The '{{iteratorName}}' {{kind}} inside 'v-for' directive should be replaced with a computed property that returns filtered array instead. You should not mix 'v-for' with 'v-if'.",
+                data: {
+                  iteratorName:
+                    iteratorNode.type === 'Identifier'
+                      ? iteratorNode.name
+                      : context.getSourceCode().getText(iteratorNode),
+                  kind:
+                    iteratorNode.type === 'Identifier'
+                      ? 'variable'
+                      : 'expression'
+                }
+              })
+            }
+          } else {
+            context.report({
+              node,
+              loc: node.loc,
+              message: "This 'v-if' should be moved to the wrapper element."
+            })
+          }
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-useless-concat.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-useless-concat.js
new file mode 100644
index 0000000000000000000000000000000000000000..7379a1ee7712f9ce02cc8eb63c7fdb9fa9fbdac5
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-useless-concat.js
@@ -0,0 +1,9 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('no-useless-concat')
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-useless-mustaches.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-useless-mustaches.js
new file mode 100644
index 0000000000000000000000000000000000000000..b8a2057d83de1fb924e6a37db036d8b1d1480596
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-useless-mustaches.js
@@ -0,0 +1,154 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const utils = require('../utils')
+
+/**
+ * Strip quotes string
+ * @param {string} text
+ * @returns {string|null}
+ */
+function stripQuotesForHTML(text) {
+  if (
+    (text[0] === '"' || text[0] === "'" || text[0] === '`') &&
+    text[0] === text[text.length - 1]
+  ) {
+    return text.slice(1, -1)
+  }
+
+  const re = /^(?:&(?:quot|apos|#\d+|#x[\da-f]+);|["'`])([\s\S]*)(?:&(?:quot|apos|#\d+|#x[\da-f]+);|["'`])$/u.exec(
+    text
+  )
+  if (!re) {
+    return null
+  }
+  return re[1]
+}
+
+module.exports = {
+  meta: {
+    docs: {
+      description: 'disallow unnecessary mustache interpolations',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-useless-mustaches.html'
+    },
+    fixable: 'code',
+    messages: {
+      unexpected:
+        'Unexpected mustache interpolation with a string literal value.'
+    },
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          ignoreIncludesComment: {
+            type: 'boolean'
+          },
+          ignoreStringEscape: {
+            type: 'boolean'
+          }
+        }
+      }
+    ],
+    type: 'suggestion'
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const opts = context.options[0] || {}
+    const ignoreIncludesComment = opts.ignoreIncludesComment
+    const ignoreStringEscape = opts.ignoreStringEscape
+    const sourceCode = context.getSourceCode()
+
+    /**
+     * Report if the value expression is string literals
+     * @param {VExpressionContainer} node the node to check
+     */
+    function verify(node) {
+      const { expression } = node
+      if (!expression) {
+        return
+      }
+      /** @type {string} */
+      let strValue
+      /** @type {string} */
+      let rawValue
+      if (expression.type === 'Literal') {
+        if (typeof expression.value !== 'string') {
+          return
+        }
+        strValue = expression.value
+        rawValue = sourceCode.getText(expression).slice(1, -1)
+      } else if (expression.type === 'TemplateLiteral') {
+        if (expression.expressions.length > 0) {
+          return
+        }
+        strValue = expression.quasis[0].value.cooked
+        rawValue = expression.quasis[0].value.raw
+      } else {
+        return
+      }
+
+      const tokenStore = context.parserServices.getTemplateBodyTokenStore()
+      const hasComment = tokenStore
+        .getTokens(node, { includeComments: true })
+        .some((t) => t.type === 'Block' || t.type === 'Line')
+      if (ignoreIncludesComment && hasComment) {
+        return
+      }
+
+      let hasEscape = false
+      if (rawValue !== strValue) {
+        // check escapes
+        const chars = [...rawValue]
+        let c = chars.shift()
+        while (c) {
+          if (c === '\\') {
+            c = chars.shift()
+            if (
+              c == null ||
+              // ignore "\\", '"', "'", "`" and "$"
+              'nrvtbfux'.includes(c)
+            ) {
+              // has useful escape.
+              hasEscape = true
+              break
+            }
+          }
+          c = chars.shift()
+        }
+      }
+      if (ignoreStringEscape && hasEscape) {
+        return
+      }
+
+      context.report({
+        node,
+        messageId: 'unexpected',
+        fix(fixer) {
+          if (hasComment || hasEscape) {
+            // cannot fix
+            return null
+          }
+          const text = stripQuotesForHTML(sourceCode.getText(expression))
+          if (text == null) {
+            // unknowns
+            return null
+          }
+          if (text.includes('\n') || /^\s|\s$/u.test(text)) {
+            // It doesn't autofix because another rule like indent or eol space might remove spaces.
+            return null
+          }
+
+          return fixer.replaceText(node, text.replace(/\\([\s\S])/g, '$1'))
+        }
+      })
+    }
+
+    return utils.defineTemplateBodyVisitor(context, {
+      'VElement > VExpressionContainer': verify
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-useless-v-bind.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-useless-v-bind.js
new file mode 100644
index 0000000000000000000000000000000000000000..01549ca6ea2c2c91c7367663f67d4ce492342cba
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-useless-v-bind.js
@@ -0,0 +1,150 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const utils = require('../utils')
+
+const DOUBLE_QUOTES_RE = /"/gu
+const SINGLE_QUOTES_RE = /'/gu
+
+module.exports = {
+  meta: {
+    docs: {
+      description: 'disallow unnecessary `v-bind` directives',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/no-useless-v-bind.html'
+    },
+    fixable: 'code',
+    messages: {
+      unexpected: 'Unexpected `v-bind` with a string literal value.'
+    },
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          ignoreIncludesComment: {
+            type: 'boolean'
+          },
+          ignoreStringEscape: {
+            type: 'boolean'
+          }
+        }
+      }
+    ],
+    type: 'suggestion'
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const opts = context.options[0] || {}
+    const ignoreIncludesComment = opts.ignoreIncludesComment
+    const ignoreStringEscape = opts.ignoreStringEscape
+    const sourceCode = context.getSourceCode()
+
+    /**
+     * Report if the value expression is string literals
+     * @param {VDirective} node the node to check
+     */
+    function verify(node) {
+      const { value } = node
+      if (!value || node.key.modifiers.length) {
+        return
+      }
+      const { expression } = value
+      if (!expression) {
+        return
+      }
+      /** @type {string} */
+      let strValue
+      /** @type {string} */
+      let rawValue
+      if (expression.type === 'Literal') {
+        if (typeof expression.value !== 'string') {
+          return
+        }
+        strValue = expression.value
+        rawValue = sourceCode.getText(expression).slice(1, -1)
+      } else if (expression.type === 'TemplateLiteral') {
+        if (expression.expressions.length > 0) {
+          return
+        }
+        strValue = expression.quasis[0].value.cooked
+        rawValue = expression.quasis[0].value.raw
+      } else {
+        return
+      }
+
+      const tokenStore = context.parserServices.getTemplateBodyTokenStore()
+      const hasComment = tokenStore
+        .getTokens(value, { includeComments: true })
+        .some((t) => t.type === 'Block' || t.type === 'Line')
+      if (ignoreIncludesComment && hasComment) {
+        return
+      }
+
+      let hasEscape = false
+      if (rawValue !== strValue) {
+        // check escapes
+        const chars = [...rawValue]
+        let c = chars.shift()
+        while (c) {
+          if (c === '\\') {
+            c = chars.shift()
+            if (
+              c == null ||
+              // ignore "\\", '"', "'", "`" and "$"
+              'nrvtbfux'.includes(c)
+            ) {
+              // has useful escape.
+              hasEscape = true
+              break
+            }
+          }
+          c = chars.shift()
+        }
+      }
+      if (ignoreStringEscape && hasEscape) {
+        return
+      }
+
+      context.report({
+        node,
+        messageId: 'unexpected',
+        *fix(fixer) {
+          if (hasComment || hasEscape) {
+            // cannot fix
+            return
+          }
+          const text = sourceCode.getText(value)
+          const quoteChar = text[0]
+
+          const shorthand = node.key.name.rawName === ':'
+          /** @type {Range} */
+          const keyDirectiveRange = [
+            node.key.name.range[0],
+            node.key.name.range[1] + (shorthand ? 0 : 1)
+          ]
+
+          yield fixer.removeRange(keyDirectiveRange)
+
+          let attrValue
+          if (quoteChar === '"') {
+            attrValue = strValue.replace(DOUBLE_QUOTES_RE, '&quot;')
+          } else if (quoteChar === "'") {
+            attrValue = strValue.replace(SINGLE_QUOTES_RE, '&apos;')
+          } else {
+            attrValue = strValue
+              .replace(DOUBLE_QUOTES_RE, '&quot;')
+              .replace(SINGLE_QUOTES_RE, '&apos;')
+          }
+          yield fixer.replaceText(expression, attrValue)
+        }
+      })
+    }
+
+    return utils.defineTemplateBodyVisitor(context, {
+      "VAttribute[directive=true][key.name.name='bind'][key.argument!=null]": verify
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-v-for-template-key-on-child.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-v-for-template-key-on-child.js
new file mode 100644
index 0000000000000000000000000000000000000000..79ee1d97c05b8ca9a6ff10e23cb4d86a95f31146
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-v-for-template-key-on-child.js
@@ -0,0 +1,95 @@
+/**
+ * @author Yosuke Ota
+ * This rule is based on X_V_FOR_TEMPLATE_KEY_PLACEMENT error of Vue 3.
+ * see https://github.com/vuejs/vue-next/blob/b0d01e9db9ffe5781cce5a2d62c8552db3d615b0/packages/compiler-core/src/errors.ts#L70
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Check whether the given attribute is using the variables which are defined by `v-for` directives.
+ * @param {VDirective} vFor The attribute node of `v-for` to check.
+ * @param {VDirective} vBindKey The attribute node of `v-bind:key` to check.
+ * @returns {boolean} `true` if the node is using the variables which are defined by `v-for` directives.
+ */
+function isUsingIterationVar(vFor, vBindKey) {
+  if (vBindKey.value == null) {
+    return false
+  }
+  const references = vBindKey.value.references
+  const variables = vFor.parent.parent.variables
+  return references.some((reference) =>
+    variables.some(
+      (variable) =>
+        variable.id.name === reference.id.name && variable.kind === 'v-for'
+    )
+  )
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'disallow key of `<template v-for>` placed on child elements',
+      categories: ['vue3-essential'],
+      url: 'https://eslint.vuejs.org/rules/no-v-for-template-key-on-child.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      vForTemplateKeyPlacement:
+        '`<template v-for>` key should be placed on the `<template>` tag.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VElement[name='template'] > VStartTag > VAttribute[directive=true][key.name.name='for']"(
+        node
+      ) {
+        const template = node.parent.parent
+        const vBindKeyOnTemplate = utils.getDirective(template, 'bind', 'key')
+        if (
+          vBindKeyOnTemplate &&
+          isUsingIterationVar(node, vBindKeyOnTemplate)
+        ) {
+          return
+        }
+
+        for (const child of template.children.filter(utils.isVElement)) {
+          if (
+            utils.hasDirective(child, 'if') ||
+            utils.hasDirective(child, 'else-if') ||
+            utils.hasDirective(child, 'else') ||
+            utils.hasDirective(child, 'for')
+          ) {
+            continue
+          }
+          const vBindKeyOnChild = utils.getDirective(child, 'bind', 'key')
+          if (vBindKeyOnChild && isUsingIterationVar(node, vBindKeyOnChild)) {
+            context.report({
+              node: vBindKeyOnChild,
+              loc: vBindKeyOnChild.loc,
+              messageId: 'vForTemplateKeyPlacement'
+            })
+          }
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-v-for-template-key.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-v-for-template-key.js
new file mode 100644
index 0000000000000000000000000000000000000000..9a0175150442e12a8a26f15c2b83c1100c324e5e
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-v-for-template-key.js
@@ -0,0 +1,48 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'disallow `key` attribute on `<template v-for>`',
+      categories: ['essential'],
+      url: 'https://eslint.vuejs.org/rules/no-v-for-template-key.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      disallow:
+        "'<template v-for>' cannot be keyed. Place the key on real elements instead."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VElement[name='template'] > VStartTag > VAttribute[directive=true][key.name.name='for']"(
+        node
+      ) {
+        const element = node.parent.parent
+        const keyNode =
+          utils.getAttribute(element, 'key') ||
+          utils.getDirective(element, 'bind', 'key')
+        if (keyNode) {
+          context.report({
+            node: keyNode,
+            loc: keyNode.loc,
+            messageId: 'disallow'
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-v-html.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-v-html.js
new file mode 100644
index 0000000000000000000000000000000000000000..33a1bfa30d2cba61ca1f6908c92011187ade479d
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-v-html.js
@@ -0,0 +1,36 @@
+/**
+ * @fileoverview Restrict or warn use of v-html to prevent XSS attack
+ * @author Nathan Zeplowitz
+ */
+'use strict'
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow use of v-html to prevent XSS attack',
+      categories: ['vue3-recommended', 'recommended'],
+      url: 'https://eslint.vuejs.org/rules/no-v-html.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='html']"(node) {
+        context.report({
+          node,
+          loc: node.loc,
+          message: "'v-html' directive can lead to XSS attack."
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-v-model-argument.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-v-model-argument.js
new file mode 100644
index 0000000000000000000000000000000000000000..615af912cf011b9ec3285979b48d80d5fd60395e
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-v-model-argument.js
@@ -0,0 +1,49 @@
+/**
+ * @author Przemyslaw Falowski (@przemkow)
+ * @fileoverview This rule checks whether v-model used on custom component do not have an argument
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'disallow adding an argument to `v-model` used in custom component',
+      categories: ['essential'],
+      url: 'https://eslint.vuejs.org/rules/no-v-model-argument.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      vModelRequireNoArgument: "'v-model' directives require no argument."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='model']"(node) {
+        const element = node.parent.parent
+
+        if (node.key.argument && utils.isCustomComponent(element)) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'vModelRequireNoArgument'
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/no-watch-after-await.js b/server/node_modules/eslint-plugin-vue/lib/rules/no-watch-after-await.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f037fb30aad11bb3db7f898e68d1002a58cf24a
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/no-watch-after-await.js
@@ -0,0 +1,142 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+const { ReferenceTracker } = require('eslint-utils')
+const utils = require('../utils')
+
+/**
+ * @param {CallExpression | ChainExpression} node
+ * @returns {boolean}
+ */
+function isMaybeUsedStopHandle(node) {
+  const parent = node.parent
+  if (parent) {
+    if (parent.type === 'VariableDeclarator') {
+      // var foo = watch()
+      return true
+    }
+    if (parent.type === 'AssignmentExpression') {
+      // foo = watch()
+      return true
+    }
+    if (parent.type === 'CallExpression') {
+      // foo(watch())
+      return true
+    }
+    if (parent.type === 'Property') {
+      // {foo: watch()}
+      return true
+    }
+    if (parent.type === 'ArrayExpression') {
+      // [watch()]
+      return true
+    }
+    if (parent.type === 'ChainExpression') {
+      return isMaybeUsedStopHandle(parent)
+    }
+  }
+  return false
+}
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow asynchronously registered `watch`',
+      categories: ['vue3-essential'],
+      url: 'https://eslint.vuejs.org/rules/no-watch-after-await.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      forbidden: 'The `watch` after `await` expression are forbidden.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const watchCallNodes = new Set()
+    /** @type {Map<FunctionExpression | ArrowFunctionExpression | FunctionDeclaration, { setupProperty: Property, afterAwait: boolean }>} */
+    const setupFunctions = new Map()
+
+    /**
+     * @typedef {object} ScopeStack
+     * @property {ScopeStack | null} upper
+     * @property {FunctionExpression | ArrowFunctionExpression | FunctionDeclaration} functionNode
+     */
+    /** @type {ScopeStack | null} */
+    let scopeStack = null
+
+    return Object.assign(
+      {
+        Program() {
+          const tracker = new ReferenceTracker(context.getScope())
+          const traceMap = {
+            vue: {
+              [ReferenceTracker.ESM]: true,
+              watch: {
+                [ReferenceTracker.CALL]: true
+              },
+              watchEffect: {
+                [ReferenceTracker.CALL]: true
+              }
+            }
+          }
+
+          for (const { node } of tracker.iterateEsmReferences(traceMap)) {
+            watchCallNodes.add(node)
+          }
+        }
+      },
+      utils.defineVueVisitor(context, {
+        /** @param {FunctionExpression | ArrowFunctionExpression | FunctionDeclaration} node */
+        ':function'(node) {
+          scopeStack = {
+            upper: scopeStack,
+            functionNode: node
+          }
+        },
+        onSetupFunctionEnter(node) {
+          setupFunctions.set(node, {
+            setupProperty: node.parent,
+            afterAwait: false
+          })
+        },
+        AwaitExpression() {
+          if (!scopeStack) {
+            return
+          }
+          const setupFunctionData = setupFunctions.get(scopeStack.functionNode)
+          if (!setupFunctionData) {
+            return
+          }
+          setupFunctionData.afterAwait = true
+        },
+        /** @param {CallExpression} node */
+        CallExpression(node) {
+          if (!scopeStack) {
+            return
+          }
+          const setupFunctionData = setupFunctions.get(scopeStack.functionNode)
+          if (!setupFunctionData || !setupFunctionData.afterAwait) {
+            return
+          }
+
+          if (watchCallNodes.has(node) && !isMaybeUsedStopHandle(node)) {
+            context.report({
+              node,
+              messageId: 'forbidden'
+            })
+          }
+        },
+        /** @param {FunctionExpression | ArrowFunctionExpression | FunctionDeclaration} node */
+        ':function:exit'(node) {
+          scopeStack = scopeStack && scopeStack.upper
+
+          setupFunctions.delete(node)
+        }
+      })
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/object-curly-newline.js b/server/node_modules/eslint-plugin-vue/lib/rules/object-curly-newline.js
new file mode 100644
index 0000000000000000000000000000000000000000..5aa9941174b01b80f9630a98137da569448f863f
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/object-curly-newline.js
@@ -0,0 +1,11 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('object-curly-newline', {
+  skipDynamicArguments: true
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/object-curly-spacing.js b/server/node_modules/eslint-plugin-vue/lib/rules/object-curly-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..b7c669c4fee3d161b04961195c9ec5442ab084be
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/object-curly-spacing.js
@@ -0,0 +1,11 @@
+/**
+ * @author Toru Nagashima
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('object-curly-spacing', {
+  skipDynamicArguments: true
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/object-property-newline.js b/server/node_modules/eslint-plugin-vue/lib/rules/object-property-newline.js
new file mode 100644
index 0000000000000000000000000000000000000000..dacd8244151a6f100650d9fd5e837fc7e6655b8c
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/object-property-newline.js
@@ -0,0 +1,11 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('object-property-newline', {
+  skipDynamicArguments: true
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/one-component-per-file.js b/server/node_modules/eslint-plugin-vue/lib/rules/one-component-per-file.js
new file mode 100644
index 0000000000000000000000000000000000000000..619942c1dce3f2ac4374351d32c0e5d5e9eda13e
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/one-component-per-file.js
@@ -0,0 +1,50 @@
+/**
+ * @fileoverview enforce that each component should be in its own file
+ * @author Armano
+ */
+'use strict'
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'enforce that each component should be in its own file',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/one-component-per-file.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      toManyComponents: 'There is more than one component in this file.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /** @type {ObjectExpression[]} */
+    const components = []
+
+    return Object.assign(
+      {},
+      utils.executeOnVueComponent(context, (node) => {
+        components.push(node)
+      }),
+      {
+        'Program:exit'() {
+          if (components.length > 1) {
+            for (const node of components) {
+              context.report({
+                node,
+                messageId: 'toManyComponents'
+              })
+            }
+          }
+        }
+      }
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/operator-linebreak.js b/server/node_modules/eslint-plugin-vue/lib/rules/operator-linebreak.js
new file mode 100644
index 0000000000000000000000000000000000000000..ad92aa74f21093040a50ee310c6301bf4a968e00
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/operator-linebreak.js
@@ -0,0 +1,9 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('operator-linebreak')
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/order-in-components.js b/server/node_modules/eslint-plugin-vue/lib/rules/order-in-components.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f3373458fb4e9f821c348ee9a874ef90eddbdad
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/order-in-components.js
@@ -0,0 +1,341 @@
+/**
+ * @fileoverview Keep order of properties in components
+ * @author Michał Sajnóg
+ */
+'use strict'
+
+const utils = require('../utils')
+const traverseNodes = require('vue-eslint-parser').AST.traverseNodes
+
+/**
+ * @typedef {import('eslint-visitor-keys').VisitorKeys} VisitorKeys
+ */
+
+const defaultOrder = [
+  // Side Effects (triggers effects outside the component)
+  'el',
+
+  // Global Awareness (requires knowledge beyond the component)
+  'name',
+  'key', // for Nuxt
+  'parent',
+
+  // Component Type (changes the type of the component)
+  'functional',
+
+  // Template Modifiers (changes the way templates are compiled)
+  ['delimiters', 'comments'],
+
+  // Template Dependencies (assets used in the template)
+  ['components', 'directives', 'filters'],
+
+  // Composition (merges properties into the options)
+  'extends',
+  'mixins',
+  ['provide', 'inject'], // for Vue.js 2.2.0+
+
+  // Page Options (component rendered as a router page)
+  'ROUTER_GUARDS', // for Vue Router
+  'layout', // for Nuxt
+  'middleware', // for Nuxt
+  'validate', // for Nuxt
+  'scrollToTop', // for Nuxt
+  'transition', // for Nuxt
+  'loading', // for Nuxt
+
+  // Interface (the interface to the component)
+  'inheritAttrs',
+  'model',
+  ['props', 'propsData'],
+  'emits', // for Vue.js 3.x
+
+  // Note:
+  // The `setup` option is included in the "Composition" category,
+  // but the behavior of the `setup` option requires the definition of "Interface",
+  // so we prefer to put the `setup` option after the "Interface".
+  'setup', // for Vue 3.x
+
+  // Local State (local reactive properties)
+  'asyncData', // for Nuxt
+  'data',
+  'fetch', // for Nuxt
+  'head', // for Nuxt
+  'computed',
+
+  // Events (callbacks triggered by reactive events)
+  'watch',
+  'watchQuery', // for Nuxt
+  'LIFECYCLE_HOOKS',
+
+  // Non-Reactive Properties (instance properties independent of the reactivity system)
+  'methods',
+
+  // Rendering (the declarative description of the component output)
+  ['template', 'render'],
+  'renderError'
+]
+
+/** @type { { [key: string]: string[] } } */
+const groups = {
+  LIFECYCLE_HOOKS: [
+    'beforeCreate',
+    'created',
+    'beforeMount',
+    'mounted',
+    'beforeUpdate',
+    'updated',
+    'activated',
+    'deactivated',
+    'beforeUnmount', // for Vue.js 3.x
+    'unmounted', // for Vue.js 3.x
+    'beforeDestroy',
+    'destroyed',
+    'renderTracked', // for Vue.js 3.x
+    'renderTriggered', // for Vue.js 3.x
+    'errorCaptured' // for Vue.js 2.5.0+
+  ],
+  ROUTER_GUARDS: ['beforeRouteEnter', 'beforeRouteUpdate', 'beforeRouteLeave']
+}
+
+/**
+ * @param {(string | string[])[]} order
+ */
+function getOrderMap(order) {
+  /** @type {Map<string, number>} */
+  const orderMap = new Map()
+
+  order.forEach((property, i) => {
+    if (Array.isArray(property)) {
+      property.forEach((p) => orderMap.set(p, i))
+    } else {
+      orderMap.set(property, i)
+    }
+  })
+
+  return orderMap
+}
+
+/**
+ * @param {Token} node
+ */
+function isComma(node) {
+  return node.type === 'Punctuator' && node.value === ','
+}
+
+const ARITHMETIC_OPERATORS = ['+', '-', '*', '/', '%', '**' /* es2016 */]
+const BITWISE_OPERATORS = ['&', '|', '^', '~', '<<', '>>', '>>>']
+const COMPARISON_OPERATORS = ['==', '!=', '===', '!==', '>', '>=', '<', '<=']
+const RELATIONAL_OPERATORS = ['in', 'instanceof']
+const ALL_BINARY_OPERATORS = [
+  ...ARITHMETIC_OPERATORS,
+  ...BITWISE_OPERATORS,
+  ...COMPARISON_OPERATORS,
+  ...RELATIONAL_OPERATORS
+]
+const LOGICAL_OPERATORS = ['&&', '||', '??' /* es2020 */]
+
+/**
+ * Result `true` if the node is sure that there are no side effects
+ *
+ * Currently known side effects types
+ *
+ * node.type === 'CallExpression'
+ * node.type === 'NewExpression'
+ * node.type === 'UpdateExpression'
+ * node.type === 'AssignmentExpression'
+ * node.type === 'TaggedTemplateExpression'
+ * node.type === 'UnaryExpression' && node.operator === 'delete'
+ *
+ * @param  {ASTNode} node target node
+ * @param  {VisitorKeys} visitorKeys sourceCode.visitorKey
+ * @returns {boolean} no side effects
+ */
+function isNotSideEffectsNode(node, visitorKeys) {
+  let result = true
+  /** @type {ASTNode | null} */
+  let skipNode = null
+  traverseNodes(node, {
+    visitorKeys,
+    enterNode(node) {
+      if (!result || skipNode) {
+        return
+      }
+
+      if (
+        // no side effects node
+        node.type === 'FunctionExpression' ||
+        node.type === 'Identifier' ||
+        node.type === 'Literal' ||
+        // es2015
+        node.type === 'ArrowFunctionExpression' ||
+        node.type === 'TemplateElement'
+      ) {
+        skipNode = node
+      } else if (
+        node.type !== 'Property' &&
+        node.type !== 'ObjectExpression' &&
+        node.type !== 'ArrayExpression' &&
+        (node.type !== 'UnaryExpression' ||
+          !['!', '~', '+', '-', 'typeof'].includes(node.operator)) &&
+        (node.type !== 'BinaryExpression' ||
+          !ALL_BINARY_OPERATORS.includes(node.operator)) &&
+        (node.type !== 'LogicalExpression' ||
+          !LOGICAL_OPERATORS.includes(node.operator)) &&
+        node.type !== 'MemberExpression' &&
+        node.type !== 'ConditionalExpression' &&
+        // es2015
+        node.type !== 'SpreadElement' &&
+        node.type !== 'TemplateLiteral' &&
+        // es2020
+        node.type !== 'ChainExpression'
+      ) {
+        // Can not be sure that a node has no side effects
+        result = false
+      }
+    },
+    leaveNode(node) {
+      if (skipNode === node) {
+        skipNode = null
+      }
+    }
+  })
+
+  return result
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'enforce order of properties in components',
+      categories: ['vue3-recommended', 'recommended'],
+      url: 'https://eslint.vuejs.org/rules/order-in-components.html'
+    },
+    fixable: 'code', // null or "code" or "whitespace"
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          order: {
+            type: 'array'
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0] || {}
+    /** @type {(string|string[])[]} */
+    const order = options.order || defaultOrder
+    /** @type {(string|string[])[]} */
+    const extendedOrder = order.map(
+      (property) =>
+        (typeof property === 'string' && groups[property]) || property
+    )
+    const orderMap = getOrderMap(extendedOrder)
+    const sourceCode = context.getSourceCode()
+
+    /**
+     * @param {string} name
+     */
+    function getOrderPosition(name) {
+      const num = orderMap.get(name)
+      return num == null ? -1 : num
+    }
+
+    /**
+     * @param {(Property | SpreadElement)[]} propertiesNodes
+     */
+    function checkOrder(propertiesNodes) {
+      const properties = propertiesNodes
+        .filter(utils.isProperty)
+        .map((property) => {
+          return {
+            node: property,
+            name:
+              utils.getStaticPropertyName(property) ||
+              (property.key.type === 'Identifier' && property.key.name) ||
+              ''
+          }
+        })
+
+      properties.forEach((property, i) => {
+        const orderPos = getOrderPosition(property.name)
+        if (orderPos < 0) {
+          return
+        }
+        const propertiesAbove = properties.slice(0, i)
+        const unorderedProperties = propertiesAbove
+          .filter(
+            (p) => getOrderPosition(p.name) > getOrderPosition(property.name)
+          )
+          .sort((p1, p2) =>
+            getOrderPosition(p1.name) > getOrderPosition(p2.name) ? 1 : -1
+          )
+
+        const firstUnorderedProperty = unorderedProperties[0]
+
+        if (firstUnorderedProperty) {
+          const line = firstUnorderedProperty.node.loc.start.line
+          context.report({
+            node: property.node,
+            message: `The "{{name}}" property should be above the "{{firstUnorderedPropertyName}}" property on line {{line}}.`,
+            data: {
+              name: property.name,
+              firstUnorderedPropertyName: firstUnorderedProperty.name,
+              line
+            },
+            *fix(fixer) {
+              const propertyNode = property.node
+              const firstUnorderedPropertyNode = firstUnorderedProperty.node
+              const hasSideEffectsPossibility = propertiesNodes
+                .slice(
+                  propertiesNodes.indexOf(firstUnorderedPropertyNode),
+                  propertiesNodes.indexOf(propertyNode) + 1
+                )
+                .some(
+                  (property) =>
+                    !isNotSideEffectsNode(property, sourceCode.visitorKeys)
+                )
+              if (hasSideEffectsPossibility) {
+                return
+              }
+              const afterComma = sourceCode.getTokenAfter(propertyNode)
+              const hasAfterComma = isComma(afterComma)
+
+              const beforeComma = sourceCode.getTokenBefore(propertyNode)
+              const codeStart = beforeComma.range[1] // to include comments
+              const codeEnd = hasAfterComma
+                ? afterComma.range[1]
+                : propertyNode.range[1]
+
+              const removeStart = hasAfterComma
+                ? codeStart
+                : beforeComma.range[0]
+              yield fixer.removeRange([removeStart, codeEnd])
+
+              const propertyCode =
+                sourceCode.text.slice(codeStart, codeEnd) +
+                (hasAfterComma ? '' : ',')
+              const insertTarget = sourceCode.getTokenBefore(
+                firstUnorderedPropertyNode
+              )
+
+              yield fixer.insertTextAfter(insertTarget, propertyCode)
+            }
+          })
+        }
+      })
+    }
+
+    return utils.executeOnVue(context, (obj) => {
+      checkOrder(obj.properties)
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/padding-line-between-blocks.js b/server/node_modules/eslint-plugin-vue/lib/rules/padding-line-between-blocks.js
new file mode 100644
index 0000000000000000000000000000000000000000..c1b6524559b4f638c8a4325163debef343dfbb6f
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/padding-line-between-blocks.js
@@ -0,0 +1,220 @@
+/**
+ * @fileoverview Require or disallow padding lines between blocks
+ * @author Yosuke Ota
+ */
+'use strict'
+const utils = require('../utils')
+
+/**
+ * Split the source code into multiple lines based on the line delimiters.
+ * @param {string} text Source code as a string.
+ * @returns {string[]} Array of source code lines.
+ */
+function splitLines(text) {
+  return text.split(/\r\n|[\r\n\u2028\u2029]/gu)
+}
+
+/**
+ * Check and report blocks for `never` configuration.
+ * This autofix removes blank lines between the given 2 blocks.
+ * @param {RuleContext} context The rule context to report.
+ * @param {VElement} prevBlock The previous block to check.
+ * @param {VElement} nextBlock The next block to check.
+ * @param {Token[]} betweenTokens The array of tokens between blocks.
+ * @returns {void}
+ * @private
+ */
+function verifyForNever(context, prevBlock, nextBlock, betweenTokens) {
+  if (prevBlock.loc.end.line === nextBlock.loc.start.line) {
+    // same line
+    return
+  }
+  const tokenOrNodes = [...betweenTokens, nextBlock]
+  /** @type {ASTNode | Token} */
+  let prev = prevBlock
+  /** @type {[ASTNode | Token, ASTNode | Token][]} */
+  const paddingLines = []
+  for (const tokenOrNode of tokenOrNodes) {
+    const numOfLineBreaks = tokenOrNode.loc.start.line - prev.loc.end.line
+    if (numOfLineBreaks > 1) {
+      paddingLines.push([prev, tokenOrNode])
+    }
+    prev = tokenOrNode
+  }
+  if (!paddingLines.length) {
+    return
+  }
+
+  context.report({
+    node: nextBlock,
+    messageId: 'never',
+    *fix(fixer) {
+      for (const [prevToken, nextToken] of paddingLines) {
+        const start = prevToken.range[1]
+        const end = nextToken.range[0]
+        const paddingText = context.getSourceCode().text.slice(start, end)
+        const lastSpaces = splitLines(paddingText).pop()
+        yield fixer.replaceTextRange([start, end], `\n${lastSpaces}`)
+      }
+    }
+  })
+}
+
+/**
+ * Check and report blocks for `always` configuration.
+ * This autofix inserts a blank line between the given 2 blocks.
+ * @param {RuleContext} context The rule context to report.
+ * @param {VElement} prevBlock The previous block to check.
+ * @param {VElement} nextBlock The next block to check.
+ * @param {Token[]} betweenTokens The array of tokens between blocks.
+ * @returns {void}
+ * @private
+ */
+function verifyForAlways(context, prevBlock, nextBlock, betweenTokens) {
+  const tokenOrNodes = [...betweenTokens, nextBlock]
+  /** @type {ASTNode | Token} */
+  let prev = prevBlock
+  /** @type {ASTNode | Token | undefined} */
+  let linebreak
+  for (const tokenOrNode of tokenOrNodes) {
+    const numOfLineBreaks = tokenOrNode.loc.start.line - prev.loc.end.line
+    if (numOfLineBreaks > 1) {
+      // Already padded.
+      return
+    }
+    if (!linebreak && numOfLineBreaks > 0) {
+      linebreak = prev
+    }
+    prev = tokenOrNode
+  }
+
+  context.report({
+    node: nextBlock,
+    messageId: 'always',
+    fix(fixer) {
+      if (linebreak) {
+        return fixer.insertTextAfter(linebreak, '\n')
+      }
+      return fixer.insertTextAfter(prevBlock, '\n\n')
+    }
+  })
+}
+
+/**
+ * Types of blank lines.
+ * `never` and `always` are defined.
+ * Those have `verify` method to check and report statements.
+ * @private
+ */
+const PaddingTypes = {
+  never: { verify: verifyForNever },
+  always: { verify: verifyForAlways }
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'layout',
+    docs: {
+      description: 'require or disallow padding lines between blocks',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/padding-line-between-blocks.html'
+    },
+    fixable: 'whitespace',
+    schema: [
+      {
+        enum: Object.keys(PaddingTypes)
+      }
+    ],
+    messages: {
+      never: 'Unexpected blank line before this block.',
+      always: 'Expected blank line before this block.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    if (!context.parserServices.getDocumentFragment) {
+      return {}
+    }
+    const df = context.parserServices.getDocumentFragment()
+    if (!df) {
+      return {}
+    }
+    const documentFragment = df
+
+    /** @type {'always' | 'never'} */
+    const option = context.options[0] || 'always'
+    const paddingType = PaddingTypes[option]
+
+    /** @type {Token[]} */
+    let tokens
+    /**
+     * @returns {VElement[]}
+     */
+    function getTopLevelHTMLElements() {
+      return documentFragment.children.filter(utils.isVElement)
+    }
+
+    /**
+     * @param {VElement} prev
+     * @param {VElement} next
+     */
+    function getTokenAndCommentsBetween(prev, next) {
+      // When there is no <template>, tokenStore.getTokensBetween cannot be used.
+      if (!tokens) {
+        tokens = [
+          ...documentFragment.tokens.filter(
+            (token) => token.type !== 'HTMLWhitespace'
+          ),
+          ...documentFragment.comments
+        ].sort((a, b) =>
+          a.range[0] > b.range[0] ? 1 : a.range[0] < b.range[0] ? -1 : 0
+        )
+      }
+
+      let token = tokens.shift()
+
+      const results = []
+      while (token) {
+        if (prev.range[1] <= token.range[0]) {
+          if (next.range[0] <= token.range[0]) {
+            tokens.unshift(token)
+            break
+          } else {
+            results.push(token)
+          }
+        }
+        token = tokens.shift()
+      }
+
+      return results
+    }
+
+    return utils.defineTemplateBodyVisitor(
+      context,
+      {},
+      {
+        /** @param {Program} node */
+        Program(node) {
+          if (utils.hasInvalidEOF(node)) {
+            return
+          }
+          const elements = [...getTopLevelHTMLElements()]
+
+          let prev = elements.shift()
+          for (const element of elements) {
+            if (!prev) {
+              return
+            }
+            const betweenTokens = getTokenAndCommentsBetween(prev, element)
+            paddingType.verify(context, prev, element, betweenTokens)
+            prev = element
+          }
+        }
+      }
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/prefer-template.js b/server/node_modules/eslint-plugin-vue/lib/rules/prefer-template.js
new file mode 100644
index 0000000000000000000000000000000000000000..5cc11e2a52eca31f0d15328dbffc1012bb52df04
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/prefer-template.js
@@ -0,0 +1,9 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('prefer-template')
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/prop-name-casing.js b/server/node_modules/eslint-plugin-vue/lib/rules/prop-name-casing.js
new file mode 100644
index 0000000000000000000000000000000000000000..5ee9b78f121ea549c0fcaa1c3e14f4ba2af2a097
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/prop-name-casing.js
@@ -0,0 +1,66 @@
+/**
+ * @fileoverview Requires specific casing for the Prop name in Vue components
+ * @author Yu Kimura
+ */
+'use strict'
+
+const utils = require('../utils')
+const casing = require('../utils/casing')
+const allowedCaseOptions = ['camelCase', 'snake_case']
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+/** @param {RuleContext} context */
+function create(context) {
+  const options = context.options[0]
+  const caseType =
+    allowedCaseOptions.indexOf(options) !== -1 ? options : 'camelCase'
+  const checker = casing.getChecker(caseType)
+
+  // ----------------------------------------------------------------------
+  // Public
+  // ----------------------------------------------------------------------
+
+  return utils.executeOnVue(context, (obj) => {
+    for (const item of utils.getComponentProps(obj)) {
+      const propName = item.propName
+      if (propName == null) {
+        continue
+      }
+      if (!checker(propName)) {
+        context.report({
+          node: item.node,
+          message: 'Prop "{{name}}" is not in {{caseType}}.',
+          data: {
+            name: propName,
+            caseType
+          }
+        })
+      }
+    }
+  })
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'enforce specific casing for the Prop name in Vue components',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/prop-name-casing.html'
+    },
+    fixable: null, // null or "code" or "whitespace"
+    schema: [
+      {
+        enum: allowedCaseOptions
+      }
+    ]
+  },
+  create
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/require-component-is.js b/server/node_modules/eslint-plugin-vue/lib/rules/require-component-is.js
new file mode 100644
index 0000000000000000000000000000000000000000..12fda302ba5f29a23ce7b3ba76de07dc5b5cbd1f
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/require-component-is.js
@@ -0,0 +1,45 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'require `v-bind:is` of `<component>` elements',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/require-component-is.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VElement} node */
+      "VElement[name='component']"(node) {
+        if (!utils.hasDirective(node, 'bind', 'is')) {
+          context.report({
+            node,
+            loc: node.loc,
+            message:
+              "Expected '<component>' elements to have 'v-bind:is' attribute."
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/require-default-prop.js b/server/node_modules/eslint-plugin-vue/lib/rules/require-default-prop.js
new file mode 100644
index 0000000000000000000000000000000000000000..e0e29b69e975ee248234c1ea7ffd27b7649545b4
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/require-default-prop.js
@@ -0,0 +1,190 @@
+/**
+ * @fileoverview Require default value for props
+ * @author Michał Sajnóg <msajnog93@gmail.com> (https://github.com/michalsnik)
+ */
+'use strict'
+
+/**
+ * @typedef {import('../utils').ComponentObjectProp} ComponentObjectProp
+ * @typedef {ComponentObjectProp & { value: ObjectExpression} } ComponentObjectPropObject
+ */
+
+const utils = require('../utils')
+const { isDef } = require('../utils')
+
+const NATIVE_TYPES = new Set([
+  'String',
+  'Number',
+  'Boolean',
+  'Function',
+  'Object',
+  'Array',
+  'Symbol'
+])
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'require default value for props',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/require-default-prop.html'
+    },
+    fixable: null, // or "code" or "whitespace"
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    // ----------------------------------------------------------------------
+    // Helpers
+    // ----------------------------------------------------------------------
+
+    /**
+     * Checks if the passed prop is required
+     * @param {ComponentObjectPropObject} prop - Property AST node for a single prop
+     * @return {boolean}
+     */
+    function propIsRequired(prop) {
+      const propRequiredNode = prop.value.properties.find(
+        (p) =>
+          p.type === 'Property' &&
+          utils.getStaticPropertyName(p) === 'required' &&
+          p.value.type === 'Literal' &&
+          p.value.value === true
+      )
+
+      return Boolean(propRequiredNode)
+    }
+
+    /**
+     * Checks if the passed prop has a default value
+     * @param {ComponentObjectPropObject} prop - Property AST node for a single prop
+     * @return {boolean}
+     */
+    function propHasDefault(prop) {
+      const propDefaultNode = prop.value.properties.find(
+        (p) =>
+          p.type === 'Property' && utils.getStaticPropertyName(p) === 'default'
+      )
+
+      return Boolean(propDefaultNode)
+    }
+
+    /**
+     * Finds all props that don't have a default value set
+     * @param {ComponentObjectProp[]} props - Vue component's "props" node
+     * @return {ComponentObjectProp[]} Array of props without "default" value
+     */
+    function findPropsWithoutDefaultValue(props) {
+      return props.filter((prop) => {
+        if (prop.value.type !== 'ObjectExpression') {
+          if (prop.value.type === 'Identifier') {
+            return NATIVE_TYPES.has(prop.value.name)
+          }
+          if (
+            prop.value.type === 'CallExpression' ||
+            prop.value.type === 'MemberExpression'
+          ) {
+            // OK
+            return false
+          }
+          // NG
+          return true
+        }
+
+        return (
+          !propIsRequired(/** @type {ComponentObjectPropObject} */ (prop)) &&
+          !propHasDefault(/** @type {ComponentObjectPropObject} */ (prop))
+        )
+      })
+    }
+
+    /**
+     * Detects whether given value node is a Boolean type
+     * @param {Expression} value
+     * @return {boolean}
+     */
+    function isValueNodeOfBooleanType(value) {
+      if (value.type === 'Identifier' && value.name === 'Boolean') {
+        return true
+      }
+      if (value.type === 'ArrayExpression') {
+        const elements = value.elements.filter(isDef)
+        return (
+          elements.length === 1 &&
+          elements[0].type === 'Identifier' &&
+          elements[0].name === 'Boolean'
+        )
+      }
+      return false
+    }
+
+    /**
+     * Detects whether given prop node is a Boolean
+     * @param {ComponentObjectProp} prop
+     * @return {Boolean}
+     */
+    function isBooleanProp(prop) {
+      const value = utils.skipTSAsExpression(prop.value)
+
+      return (
+        isValueNodeOfBooleanType(value) ||
+        (value.type === 'ObjectExpression' &&
+          value.properties.some(
+            (p) =>
+              p.type === 'Property' &&
+              p.key.type === 'Identifier' &&
+              p.key.name === 'type' &&
+              isValueNodeOfBooleanType(p.value)
+          ))
+      )
+    }
+
+    /**
+     * Excludes purely Boolean props from the Array
+     * @param {ComponentObjectProp[]} props - Array with props
+     * @return {ComponentObjectProp[]}
+     */
+    function excludeBooleanProps(props) {
+      return props.filter((prop) => !isBooleanProp(prop))
+    }
+
+    // ----------------------------------------------------------------------
+    // Public
+    // ----------------------------------------------------------------------
+
+    return utils.executeOnVue(context, (obj) => {
+      const props = utils
+        .getComponentProps(obj)
+        .filter(
+          (prop) =>
+            prop.value &&
+            !(prop.node.type === 'Property' && prop.node.shorthand)
+        )
+
+      const propsWithoutDefault = findPropsWithoutDefaultValue(
+        /** @type {ComponentObjectProp[]} */ (props)
+      )
+      const propsToReport = excludeBooleanProps(propsWithoutDefault)
+
+      for (const prop of propsToReport) {
+        const propName =
+          prop.propName != null
+            ? prop.propName
+            : `[${context.getSourceCode().getText(prop.node.key)}]`
+
+        context.report({
+          node: prop.node,
+          message: `Prop '{{propName}}' requires default value to be set.`,
+          data: {
+            propName
+          }
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/require-direct-export.js b/server/node_modules/eslint-plugin-vue/lib/rules/require-direct-export.js
new file mode 100644
index 0000000000000000000000000000000000000000..c3eaebd013d15e7f19799779359058c376807d28
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/require-direct-export.js
@@ -0,0 +1,128 @@
+/**
+ * @fileoverview require the component to be directly exported
+ * @author Hiroki Osame <hiroki.osame@gmail.com>
+ */
+'use strict'
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'require the component to be directly exported',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/require-direct-export.html'
+    },
+    fixable: null, // or "code" or "whitespace"
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          disallowFunctionalComponentFunction: { type: 'boolean' }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const filePath = context.getFilename()
+    if (!utils.isVueFile(filePath)) return {}
+
+    const disallowFunctional = (context.options[0] || {})
+      .disallowFunctionalComponentFunction
+
+    /**
+     * @typedef {object} ScopeStack
+     * @property {ScopeStack | null} upper
+     * @property {boolean} withinVue3FunctionalBody
+     */
+
+    /** @type { { body: BlockStatement, hasReturnArgument: boolean } } */
+    let maybeVue3Functional
+    /** @type {ScopeStack | null} */
+    let scopeStack = null
+
+    return {
+      /** @param {Declaration | Expression} node */
+      'ExportDefaultDeclaration > *'(node) {
+        if (node.type === 'ObjectExpression') {
+          // OK
+          return
+        }
+        if (!disallowFunctional) {
+          if (node.type === 'ArrowFunctionExpression') {
+            if (node.body.type !== 'BlockStatement') {
+              // OK
+              return
+            }
+            maybeVue3Functional = {
+              body: node.body,
+              hasReturnArgument: false
+            }
+            return
+          }
+          if (
+            node.type === 'FunctionExpression' ||
+            node.type === 'FunctionDeclaration'
+          ) {
+            maybeVue3Functional = {
+              body: node.body,
+              hasReturnArgument: false
+            }
+            return
+          }
+        }
+
+        context.report({
+          node: node.parent,
+          message: `Expected the component literal to be directly exported.`
+        })
+      },
+      ...(disallowFunctional
+        ? {}
+        : {
+            /** @param {BlockStatement} node */
+            ':function > BlockStatement'(node) {
+              if (!maybeVue3Functional) {
+                return
+              }
+              scopeStack = {
+                upper: scopeStack,
+                withinVue3FunctionalBody: maybeVue3Functional.body === node
+              }
+            },
+            /** @param {ReturnStatement} node */
+            ReturnStatement(node) {
+              if (
+                scopeStack &&
+                scopeStack.withinVue3FunctionalBody &&
+                node.argument
+              ) {
+                maybeVue3Functional.hasReturnArgument = true
+              }
+            },
+            ':function > BlockStatement:exit'() {
+              scopeStack = scopeStack && scopeStack.upper
+            },
+            /** @param {ExportDefaultDeclaration} node */
+            'ExportDefaultDeclaration:exit'(node) {
+              if (!maybeVue3Functional) {
+                return
+              }
+              if (!maybeVue3Functional.hasReturnArgument) {
+                context.report({
+                  node,
+                  message: `Expected the component literal to be directly exported.`
+                })
+              }
+            }
+          })
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/require-explicit-emits.js b/server/node_modules/eslint-plugin-vue/lib/rules/require-explicit-emits.js
new file mode 100644
index 0000000000000000000000000000000000000000..ec356364e1ccc693ce9149df85451ba086551877
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/require-explicit-emits.js
@@ -0,0 +1,511 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+/**
+ * @typedef {import('../utils').ComponentArrayEmit} ComponentArrayEmit
+ * @typedef {import('../utils').ComponentObjectEmit} ComponentObjectEmit
+ * @typedef {import('../utils').ComponentArrayProp} ComponentArrayProp
+ * @typedef {import('../utils').ComponentObjectProp} ComponentObjectProp
+ * @typedef {import('../utils').VueObjectData} VueObjectData
+ */
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const { findVariable } = require('eslint-utils')
+const utils = require('../utils')
+const { capitalize } = require('../utils/casing')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+const FIX_EMITS_AFTER_OPTIONS = [
+  'setup',
+  'data',
+  'computed',
+  'watch',
+  'methods',
+  'template',
+  'render',
+  'renderError',
+
+  // lifecycle hooks
+  'beforeCreate',
+  'created',
+  'beforeMount',
+  'mounted',
+  'beforeUpdate',
+  'updated',
+  'activated',
+  'deactivated',
+  'beforeUnmount',
+  'unmounted',
+  'beforeDestroy',
+  'destroyed',
+  'renderTracked',
+  'renderTriggered',
+  'errorCaptured'
+]
+
+/**
+ * Check whether the given token is a left brace.
+ * @param {Token} token The token to check.
+ * @returns {boolean} `true` if the token is a left brace.
+ */
+function isLeftBrace(token) {
+  return token != null && token.type === 'Punctuator' && token.value === '{'
+}
+
+/**
+ * Check whether the given token is a right brace.
+ * @param {Token} token The token to check.
+ * @returns {boolean} `true` if the token is a right brace.
+ */
+function isRightBrace(token) {
+  return token != null && token.type === 'Punctuator' && token.value === '}'
+}
+
+/**
+ * Check whether the given token is a left bracket.
+ * @param {Token} token The token to check.
+ * @returns {boolean} `true` if the token is a left bracket.
+ */
+function isLeftBracket(token) {
+  return token != null && token.type === 'Punctuator' && token.value === '['
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'require `emits` option with name triggered by `$emit()`',
+      categories: ['vue3-strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/require-explicit-emits.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          allowProps: {
+            type: 'boolean'
+          }
+        },
+        additionalProperties: false
+      }
+    ],
+    messages: {
+      missing:
+        'The "{{name}}" event has been triggered but not declared on `emits` option.',
+      addOneOption: 'Add the "{{name}}" to `emits` option.',
+      addArrayEmitsOption:
+        'Add the `emits` option with array syntax and define "{{name}}" event.',
+      addObjectEmitsOption:
+        'Add the `emits` option with object syntax and define "{{name}}" event.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0] || {}
+    const allowProps = !!options.allowProps
+    /** @type {Map<ObjectExpression, { contextReferenceIds: Set<Identifier>, emitReferenceIds: Set<Identifier> }>} */
+    const setupContexts = new Map()
+    /** @type {Map<ObjectExpression, (ComponentArrayEmit | ComponentObjectEmit)[]>} */
+    const vueEmitsDeclarations = new Map()
+    /** @type {Map<ObjectExpression, (ComponentArrayProp | ComponentObjectProp)[]>} */
+    const vuePropsDeclarations = new Map()
+
+    /**
+     * @typedef {object} VueTemplateObjectData
+     * @property {'export' | 'mark' | 'definition'} type
+     * @property {ObjectExpression} object
+     * @property {(ComponentArrayEmit | ComponentObjectEmit)[]} emits
+     * @property {(ComponentArrayProp | ComponentObjectProp)[]} props
+     */
+    /** @type {VueTemplateObjectData | null} */
+    let vueTemplateObjectData = null
+
+    /**
+     * @param {(ComponentArrayEmit | ComponentObjectEmit)[]} emits
+     * @param {(ComponentArrayProp | ComponentObjectProp)[]} props
+     * @param {Literal} nameLiteralNode
+     * @param {ObjectExpression} vueObjectNode
+     */
+    function verifyEmit(emits, props, nameLiteralNode, vueObjectNode) {
+      const name = `${nameLiteralNode.value}`
+      if (emits.some((e) => e.emitName === name)) {
+        return
+      }
+      if (allowProps) {
+        const key = `on${capitalize(name)}`
+        if (props.some((e) => e.propName === key)) {
+          return
+        }
+      }
+      context.report({
+        node: nameLiteralNode,
+        messageId: 'missing',
+        data: {
+          name
+        },
+        suggest: buildSuggest(vueObjectNode, emits, nameLiteralNode, context)
+      })
+    }
+
+    return utils.defineTemplateBodyVisitor(
+      context,
+      {
+        /** @param { CallExpression & { argument: [Literal, ...Expression] } } node */
+        'CallExpression[arguments.0.type=Literal]'(node) {
+          const callee = utils.skipChainExpression(node.callee)
+          const nameLiteralNode = /** @type {Literal} */ (node.arguments[0])
+          if (!nameLiteralNode || typeof nameLiteralNode.value !== 'string') {
+            // cannot check
+            return
+          }
+          if (!vueTemplateObjectData) {
+            return
+          }
+          if (callee.type === 'Identifier' && callee.name === '$emit') {
+            verifyEmit(
+              vueTemplateObjectData.emits,
+              vueTemplateObjectData.props,
+              nameLiteralNode,
+              vueTemplateObjectData.object
+            )
+          }
+        }
+      },
+      utils.defineVueVisitor(context, {
+        onVueObjectEnter(node) {
+          vueEmitsDeclarations.set(node, utils.getComponentEmits(node))
+          if (allowProps) {
+            vuePropsDeclarations.set(node, utils.getComponentProps(node))
+          }
+        },
+        onSetupFunctionEnter(node, { node: vueNode }) {
+          const contextParam = node.params[1]
+          if (!contextParam) {
+            // no arguments
+            return
+          }
+          if (contextParam.type === 'RestElement') {
+            // cannot check
+            return
+          }
+          if (contextParam.type === 'ArrayPattern') {
+            // cannot check
+            return
+          }
+          /** @type {Set<Identifier>} */
+          const contextReferenceIds = new Set()
+          /** @type {Set<Identifier>} */
+          const emitReferenceIds = new Set()
+          if (contextParam.type === 'ObjectPattern') {
+            const emitProperty = utils.findAssignmentProperty(
+              contextParam,
+              'emit'
+            )
+            if (!emitProperty) {
+              return
+            }
+            const emitParam = emitProperty.value
+            // `setup(props, {emit})`
+            const variable =
+              emitParam.type === 'Identifier'
+                ? findVariable(context.getScope(), emitParam)
+                : null
+            if (!variable) {
+              return
+            }
+            for (const reference of variable.references) {
+              if (!reference.isRead()) {
+                continue
+              }
+
+              emitReferenceIds.add(reference.identifier)
+            }
+          } else if (contextParam.type === 'Identifier') {
+            // `setup(props, context)`
+            const variable = findVariable(context.getScope(), contextParam)
+            if (!variable) {
+              return
+            }
+            for (const reference of variable.references) {
+              if (!reference.isRead()) {
+                continue
+              }
+
+              contextReferenceIds.add(reference.identifier)
+            }
+          }
+          setupContexts.set(vueNode, {
+            contextReferenceIds,
+            emitReferenceIds
+          })
+        },
+        /**
+         * @param {CallExpression & { arguments: [Literal, ...Expression] }} node
+         * @param {VueObjectData} data
+         */
+        'CallExpression[arguments.0.type=Literal]'(node, { node: vueNode }) {
+          const callee = utils.skipChainExpression(node.callee)
+          const nameLiteralNode = node.arguments[0]
+          if (!nameLiteralNode || typeof nameLiteralNode.value !== 'string') {
+            // cannot check
+            return
+          }
+          const emitsDeclarations = vueEmitsDeclarations.get(vueNode)
+          if (!emitsDeclarations) {
+            return
+          }
+
+          let emit
+          if (callee.type === 'MemberExpression') {
+            const name = utils.getStaticPropertyName(callee)
+            if (name === 'emit' || name === '$emit') {
+              emit = { name, member: callee }
+            }
+          }
+
+          // verify setup context
+          const setupContext = setupContexts.get(vueNode)
+          if (setupContext) {
+            const { contextReferenceIds, emitReferenceIds } = setupContext
+            if (callee.type === 'Identifier' && emitReferenceIds.has(callee)) {
+              // verify setup(props,{emit}) {emit()}
+              verifyEmit(
+                emitsDeclarations,
+                vuePropsDeclarations.get(vueNode) || [],
+                nameLiteralNode,
+                vueNode
+              )
+            } else if (emit && emit.name === 'emit') {
+              const memObject = utils.skipChainExpression(emit.member.object)
+              if (
+                memObject.type === 'Identifier' &&
+                contextReferenceIds.has(memObject)
+              ) {
+                // verify setup(props,context) {context.emit()}
+                verifyEmit(
+                  emitsDeclarations,
+                  vuePropsDeclarations.get(vueNode) || [],
+                  nameLiteralNode,
+                  vueNode
+                )
+              }
+            }
+          }
+
+          // verify $emit
+          if (emit && emit.name === '$emit') {
+            const memObject = utils.skipChainExpression(emit.member.object)
+            if (utils.isThis(memObject, context)) {
+              // verify this.$emit()
+              verifyEmit(
+                emitsDeclarations,
+                vuePropsDeclarations.get(vueNode) || [],
+                nameLiteralNode,
+                vueNode
+              )
+            }
+          }
+        },
+        onVueObjectExit(node, { type }) {
+          const emits = vueEmitsDeclarations.get(node)
+          if (
+            !vueTemplateObjectData ||
+            vueTemplateObjectData.type !== 'export'
+          ) {
+            if (
+              emits &&
+              (type === 'mark' || type === 'export' || type === 'definition')
+            ) {
+              vueTemplateObjectData = {
+                type,
+                object: node,
+                emits,
+                props: vuePropsDeclarations.get(node) || []
+              }
+            }
+          }
+          setupContexts.delete(node)
+          vueEmitsDeclarations.delete(node)
+          vuePropsDeclarations.delete(node)
+        }
+      })
+    )
+  }
+}
+
+/**
+ * @param {ObjectExpression} object
+ * @param {(ComponentArrayEmit | ComponentObjectEmit)[]} emits
+ * @param {Literal} nameNode
+ * @param {RuleContext} context
+ * @returns {Rule.SuggestionReportDescriptor[]}
+ */
+function buildSuggest(object, emits, nameNode, context) {
+  const certainEmits = emits.filter((e) => e.key)
+  if (certainEmits.length) {
+    const last = certainEmits[certainEmits.length - 1]
+    return [
+      {
+        messageId: 'addOneOption',
+        data: { name: `${nameNode.value}` },
+        fix(fixer) {
+          if (last.value === null) {
+            // Array
+            return fixer.insertTextAfter(last.node, `, '${nameNode.value}'`)
+          } else {
+            // Object
+            return fixer.insertTextAfter(
+              last.node,
+              `, '${nameNode.value}': null`
+            )
+          }
+        }
+      }
+    ]
+  }
+
+  const propertyNodes = object.properties.filter(utils.isProperty)
+
+  const emitsOption = propertyNodes.find(
+    (p) => utils.getStaticPropertyName(p) === 'emits'
+  )
+  if (emitsOption) {
+    const sourceCode = context.getSourceCode()
+    const emitsOptionValue = emitsOption.value
+    if (emitsOptionValue.type === 'ArrayExpression') {
+      const leftBracket = /** @type {Token} */ (sourceCode.getFirstToken(
+        emitsOptionValue,
+        isLeftBracket
+      ))
+      return [
+        {
+          messageId: 'addOneOption',
+          data: { name: `${nameNode.value}` },
+          fix(fixer) {
+            return fixer.insertTextAfter(
+              leftBracket,
+              `'${nameNode.value}'${
+                emitsOptionValue.elements.length ? ',' : ''
+              }`
+            )
+          }
+        }
+      ]
+    } else if (emitsOptionValue.type === 'ObjectExpression') {
+      const leftBrace = /** @type {Token} */ (sourceCode.getFirstToken(
+        emitsOptionValue,
+        isLeftBrace
+      ))
+      return [
+        {
+          messageId: 'addOneOption',
+          data: { name: `${nameNode.value}` },
+          fix(fixer) {
+            return fixer.insertTextAfter(
+              leftBrace,
+              `'${nameNode.value}': null${
+                emitsOptionValue.properties.length ? ',' : ''
+              }`
+            )
+          }
+        }
+      ]
+    }
+    return []
+  }
+
+  const sourceCode = context.getSourceCode()
+  const afterOptionNode = propertyNodes.find((p) =>
+    FIX_EMITS_AFTER_OPTIONS.includes(utils.getStaticPropertyName(p) || '')
+  )
+  return [
+    {
+      messageId: 'addArrayEmitsOption',
+      data: { name: `${nameNode.value}` },
+      fix(fixer) {
+        if (afterOptionNode) {
+          return fixer.insertTextAfter(
+            sourceCode.getTokenBefore(afterOptionNode),
+            `\nemits: ['${nameNode.value}'],`
+          )
+        } else if (object.properties.length) {
+          const before =
+            propertyNodes[propertyNodes.length - 1] ||
+            object.properties[object.properties.length - 1]
+          return fixer.insertTextAfter(
+            before,
+            `,\nemits: ['${nameNode.value}']`
+          )
+        } else {
+          const objectLeftBrace = /** @type {Token} */ (sourceCode.getFirstToken(
+            object,
+            isLeftBrace
+          ))
+          const objectRightBrace = /** @type {Token} */ (sourceCode.getLastToken(
+            object,
+            isRightBrace
+          ))
+          return fixer.insertTextAfter(
+            objectLeftBrace,
+            `\nemits: ['${nameNode.value}']${
+              objectLeftBrace.loc.end.line < objectRightBrace.loc.start.line
+                ? ''
+                : '\n'
+            }`
+          )
+        }
+      }
+    },
+    {
+      messageId: 'addObjectEmitsOption',
+      data: { name: `${nameNode.value}` },
+      fix(fixer) {
+        if (afterOptionNode) {
+          return fixer.insertTextAfter(
+            sourceCode.getTokenBefore(afterOptionNode),
+            `\nemits: {'${nameNode.value}': null},`
+          )
+        } else if (object.properties.length) {
+          const before =
+            propertyNodes[propertyNodes.length - 1] ||
+            object.properties[object.properties.length - 1]
+          return fixer.insertTextAfter(
+            before,
+            `,\nemits: {'${nameNode.value}': null}`
+          )
+        } else {
+          const objectLeftBrace = /** @type {Token} */ (sourceCode.getFirstToken(
+            object,
+            isLeftBrace
+          ))
+          const objectRightBrace = /** @type {Token} */ (sourceCode.getLastToken(
+            object,
+            isRightBrace
+          ))
+          return fixer.insertTextAfter(
+            objectLeftBrace,
+            `\nemits: {'${nameNode.value}': null}${
+              objectLeftBrace.loc.end.line < objectRightBrace.loc.start.line
+                ? ''
+                : '\n'
+            }`
+          )
+        }
+      }
+    }
+  ]
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/require-name-property.js b/server/node_modules/eslint-plugin-vue/lib/rules/require-name-property.js
new file mode 100644
index 0000000000000000000000000000000000000000..e8930ceb467318efe5b4f8d7bf89f81c7725c6e2
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/require-name-property.js
@@ -0,0 +1,43 @@
+/**
+ * @fileoverview Require a name property in Vue components
+ * @author LukeeeeBennett
+ */
+'use strict'
+
+const utils = require('../utils')
+
+/**
+ * @param {Property | SpreadElement} node
+ * @returns {node is ObjectExpressionProperty}
+ */
+function isNameProperty(node) {
+  return (
+    node.type === 'Property' &&
+    utils.getStaticPropertyName(node) === 'name' &&
+    !node.computed
+  )
+}
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'require a name property in Vue components',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/require-name-property.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.executeOnVue(context, (component) => {
+      if (component.properties.some(isNameProperty)) return
+
+      context.report({
+        node: component,
+        message: 'Required name property is not set.'
+      })
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/require-prop-type-constructor.js b/server/node_modules/eslint-plugin-vue/lib/rules/require-prop-type-constructor.js
new file mode 100644
index 0000000000000000000000000000000000000000..0f94f0f2c3afcc19268e0c2655e909daa81f15f7
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/require-prop-type-constructor.js
@@ -0,0 +1,99 @@
+/**
+ * @fileoverview require prop type to be a constructor
+ * @author Michał Sajnóg
+ */
+'use strict'
+
+const utils = require('../utils')
+const { isDef } = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+const message = 'The "{{name}}" property should be a constructor.'
+
+const forbiddenTypes = [
+  'Literal',
+  'TemplateLiteral',
+  'BinaryExpression',
+  'UpdateExpression'
+]
+
+/**
+ * @param {ESNode} node
+ */
+function isForbiddenType(node) {
+  return (
+    forbiddenTypes.indexOf(node.type) > -1 &&
+    !(node.type === 'Literal' && node.value == null && !node.bigint)
+  )
+}
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'require prop type to be a constructor',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/require-prop-type-constructor.html'
+    },
+    fixable: 'code', // or "code" or "whitespace"
+    schema: []
+  },
+
+  /** @param {RuleContext} context */
+  create(context) {
+    /**
+     * @param {string} propName
+     * @param {ESNode} node
+     */
+    function checkPropertyNode(propName, node) {
+      /** @type {ESNode[]} */
+      const nodes =
+        node.type === 'ArrayExpression' ? node.elements.filter(isDef) : [node]
+
+      nodes
+        .filter((prop) => isForbiddenType(prop))
+        .forEach((prop) =>
+          context.report({
+            node: prop,
+            message,
+            data: {
+              name: propName
+            },
+            fix: (fixer) => {
+              if (prop.type === 'Literal' || prop.type === 'TemplateLiteral') {
+                const newText = utils.getStringLiteralValue(prop, true)
+
+                if (newText) {
+                  return fixer.replaceText(prop, newText)
+                }
+              }
+              return null
+            }
+          })
+        )
+    }
+
+    return utils.executeOnVueComponent(context, (obj) => {
+      for (const prop of utils.getComponentProps(obj)) {
+        if (!prop.value || prop.propName == null) {
+          continue
+        }
+        if (
+          isForbiddenType(prop.value) ||
+          prop.value.type === 'ArrayExpression'
+        ) {
+          checkPropertyNode(prop.propName, prop.value)
+        } else if (prop.value.type === 'ObjectExpression') {
+          const typeProperty = utils.findProperty(prop.value, 'type')
+
+          if (!typeProperty) continue
+
+          checkPropertyNode(prop.propName, typeProperty.value)
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/require-prop-types.js b/server/node_modules/eslint-plugin-vue/lib/rules/require-prop-types.js
new file mode 100644
index 0000000000000000000000000000000000000000..17037853fa026d898fcd0346f9450523ec57266e
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/require-prop-types.js
@@ -0,0 +1,103 @@
+/**
+ * @fileoverview Prop definitions should be detailed
+ * @author Armano
+ */
+'use strict'
+
+const utils = require('../utils')
+
+/**
+ * @typedef {import('../utils').ComponentArrayProp} ComponentArrayProp
+ * @typedef {import('../utils').ComponentObjectProp} ComponentObjectProp
+ */
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'require type definitions in props',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/require-prop-types.html'
+    },
+    fixable: null, // or "code" or "whitespace"
+    schema: [
+      // fill in your schema
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    // ----------------------------------------------------------------------
+    // Helpers
+    // ----------------------------------------------------------------------
+
+    /**
+     * @param {ObjectExpression} node
+     * @returns {boolean}
+     */
+    function objectHasType(node) {
+      const typeProperty = node.properties.find(
+        (p) =>
+          p.type === 'Property' &&
+          utils.getStaticPropertyName(p) === 'type' &&
+          (p.value.type !== 'ArrayExpression' || p.value.elements.length > 0)
+      )
+      const validatorProperty = node.properties.find(
+        (p) =>
+          p.type === 'Property' &&
+          utils.getStaticPropertyName(p) === 'validator'
+      )
+      return Boolean(typeProperty || validatorProperty)
+    }
+
+    /**
+     * @param { ComponentArrayProp | ComponentObjectProp } prop
+     */
+    function checkProperty({ value, node, propName }) {
+      let hasType = true
+
+      if (!value) {
+        hasType = false
+      } else if (value.type === 'ObjectExpression') {
+        // foo: {
+        hasType = objectHasType(value)
+      } else if (value.type === 'ArrayExpression') {
+        // foo: [
+        hasType = value.elements.length > 0
+      } else if (
+        value.type === 'FunctionExpression' ||
+        value.type === 'ArrowFunctionExpression'
+      ) {
+        hasType = false
+      }
+      if (!hasType) {
+        const name =
+          propName ||
+          (node.type === 'Identifier' && node.name) ||
+          'Unknown prop'
+        context.report({
+          node,
+          message: 'Prop "{{name}}" should define at least its type.',
+          data: {
+            name
+          }
+        })
+      }
+    }
+
+    // ----------------------------------------------------------------------
+    // Public
+    // ----------------------------------------------------------------------
+
+    return utils.executeOnVue(context, (obj) => {
+      const props = utils.getComponentProps(obj)
+
+      for (const prop of props) {
+        checkProperty(prop)
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/require-render-return.js b/server/node_modules/eslint-plugin-vue/lib/rules/require-render-return.js
new file mode 100644
index 0000000000000000000000000000000000000000..8d3b2096ed5c7b35b4a2d5831a5baab5974448c7
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/require-render-return.js
@@ -0,0 +1,50 @@
+/**
+ * @fileoverview Enforces render function to always return value.
+ * @author Armano
+ */
+'use strict'
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce render function to always return value',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/require-render-return.html'
+    },
+    fixable: null, // or "code" or "whitespace"
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /** @type {Map<ESNode, Property['key']>} */
+    const renderFunctions = new Map()
+
+    // ----------------------------------------------------------------------
+    // Public
+    // ----------------------------------------------------------------------
+
+    return utils.compositingVisitors(
+      utils.defineVueVisitor(context, {
+        onRenderFunctionEnter(node) {
+          renderFunctions.set(node.parent.value, node.parent.key)
+        }
+      }),
+      utils.executeOnFunctionsWithoutReturn(true, (node) => {
+        const key = renderFunctions.get(node)
+        if (key) {
+          context.report({
+            node: key,
+            message: 'Expected to return a value in render function.'
+          })
+        }
+      })
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/require-slots-as-functions.js b/server/node_modules/eslint-plugin-vue/lib/rules/require-slots-as-functions.js
new file mode 100644
index 0000000000000000000000000000000000000000..658071d228b079641c34d1f27525d0c9baffeca5
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/require-slots-as-functions.js
@@ -0,0 +1,120 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+const { findVariable } = require('eslint-utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce properties of `$slots` to be used as a function',
+      categories: ['vue3-essential'],
+      url: 'https://eslint.vuejs.org/rules/require-slots-as-functions.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      unexpected: 'Property in `$slots` should be used as function.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /**
+     * Verify the given node
+     * @param {MemberExpression | Identifier | ChainExpression} node The node to verify
+     * @param {Expression} reportNode The node to report
+     */
+    function verify(node, reportNode) {
+      const parent = node.parent
+
+      if (
+        parent.type === 'VariableDeclarator' &&
+        parent.id.type === 'Identifier'
+      ) {
+        // const children = this.$slots.foo
+        verifyReferences(parent.id, reportNode)
+        return
+      }
+
+      if (
+        parent.type === 'AssignmentExpression' &&
+        parent.right === node &&
+        parent.left.type === 'Identifier'
+      ) {
+        // children = this.$slots.foo
+        verifyReferences(parent.left, reportNode)
+        return
+      }
+
+      if (parent.type === 'ChainExpression') {
+        // (this.$slots?.foo).x
+        verify(parent, reportNode)
+        return
+      }
+
+      if (
+        // this.$slots.foo.xxx
+        parent.type === 'MemberExpression' ||
+        // var [foo] = this.$slots.foo
+        parent.type === 'VariableDeclarator' ||
+        // [...this.$slots.foo]
+        parent.type === 'SpreadElement' ||
+        // [this.$slots.foo]
+        parent.type === 'ArrayExpression'
+      ) {
+        context.report({
+          node: reportNode,
+          messageId: 'unexpected'
+        })
+      }
+    }
+    /**
+     * Verify the references of the given node.
+     * @param {Identifier} node The node to verify
+     * @param {Expression} reportNode The node to report
+     */
+    function verifyReferences(node, reportNode) {
+      const variable = findVariable(context.getScope(), node)
+      if (!variable) {
+        return
+      }
+      for (const reference of variable.references) {
+        if (!reference.isRead()) {
+          continue
+        }
+        /** @type {Identifier} */
+        const id = reference.identifier
+        verify(id, reportNode)
+      }
+    }
+
+    return utils.defineVueVisitor(context, {
+      /** @param {MemberExpression} node */
+      MemberExpression(node) {
+        const object = utils.skipChainExpression(node.object)
+        if (object.type !== 'MemberExpression') {
+          return
+        }
+        if (utils.getStaticPropertyName(object) !== '$slots') {
+          return
+        }
+        if (!utils.isThis(object.object, context)) {
+          return
+        }
+        verify(node, node.property)
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/require-toggle-inside-transition.js b/server/node_modules/eslint-plugin-vue/lib/rules/require-toggle-inside-transition.js
new file mode 100644
index 0000000000000000000000000000000000000000..12b77d7412605f9f501ffa0afd99a2556b5e7bad
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/require-toggle-inside-transition.js
@@ -0,0 +1,66 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'require control the display of the content inside `<transition>`',
+      categories: ['vue3-essential'],
+      url:
+        'https://eslint.vuejs.org/rules/require-toggle-inside-transition.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      expected:
+        'The element inside `<transition>` is expected to have a `v-if` or `v-show` directive.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /**
+     * Check if the given element has display control.
+     * @param {VElement} element The element node to check.
+     */
+    function verifyInsideElement(element) {
+      if (utils.isCustomComponent(element)) {
+        return
+      }
+      if (
+        !utils.hasDirective(element, 'if') &&
+        !utils.hasDirective(element, 'show')
+      ) {
+        context.report({
+          node: element.startTag,
+          loc: element.startTag.loc,
+          messageId: 'expected'
+        })
+      }
+    }
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VElement} node */
+      "VElement[name='transition'] > VElement"(node) {
+        if (node.parent.children[0] !== node) {
+          return
+        }
+        verifyInsideElement(node)
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/require-v-for-key.js b/server/node_modules/eslint-plugin-vue/lib/rules/require-v-for-key.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f82e696ab470397edbd7a18b0ab06ae5acf15e3
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/require-v-for-key.js
@@ -0,0 +1,62 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'require `v-bind:key` with `v-for` directives',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/require-v-for-key.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /**
+     * Check the given element about `v-bind:key` attributes.
+     * @param {VElement} element The element node to check.
+     */
+    function checkKey(element) {
+      if (utils.hasDirective(element, 'bind', 'key')) {
+        return
+      }
+      if (element.name === 'template' || element.name === 'slot') {
+        for (const child of element.children) {
+          if (child.type === 'VElement') {
+            checkKey(child)
+          }
+        }
+      } else if (!utils.isCustomComponent(element)) {
+        context.report({
+          node: element.startTag,
+          loc: element.startTag.loc,
+          message:
+            "Elements in iteration expect to have 'v-bind:key' directives."
+        })
+      }
+    }
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='for']"(node) {
+        checkKey(node.parent.parent)
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/require-valid-default-prop.js b/server/node_modules/eslint-plugin-vue/lib/rules/require-valid-default-prop.js
new file mode 100644
index 0000000000000000000000000000000000000000..ef9453b23b94850caaf488a2ac29df4002d529ae
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/require-valid-default-prop.js
@@ -0,0 +1,338 @@
+/**
+ * @fileoverview Enforces props default values to be valid.
+ * @author Armano
+ */
+'use strict'
+const utils = require('../utils')
+const { capitalize } = require('../utils/casing')
+
+/**
+ * @typedef {import('../utils').ComponentObjectProp} ComponentObjectProp
+ * @typedef {import('../utils').ComponentArrayProp} ComponentArrayProp
+ * @typedef {import('../utils').VueObjectData} VueObjectData
+ */
+
+// ----------------------------------------------------------------------
+// Helpers
+// ----------------------------------------------------------------------
+
+const NATIVE_TYPES = new Set([
+  'String',
+  'Number',
+  'Boolean',
+  'Function',
+  'Object',
+  'Array',
+  'Symbol',
+  'BigInt'
+])
+
+const FUNCTION_VALUE_TYPES = new Set(['Function', 'Object', 'Array'])
+
+/**
+ * @param {ObjectExpression} obj
+ * @param {string} name
+ * @returns {Property | null}
+ */
+function getPropertyNode(obj, name) {
+  for (const p of obj.properties) {
+    if (
+      p.type === 'Property' &&
+      !p.computed &&
+      p.key.type === 'Identifier' &&
+      p.key.name === name
+    ) {
+      return p
+    }
+  }
+  return null
+}
+
+/**
+ * @param {Expression} node
+ * @returns {string[]}
+ */
+function getTypes(node) {
+  if (node.type === 'Identifier') {
+    return [node.name]
+  } else if (node.type === 'ArrayExpression') {
+    return node.elements
+      .filter(
+        /**
+         * @param {Expression | SpreadElement | null} item
+         * @returns {item is Identifier}
+         */
+        (item) => item != null && item.type === 'Identifier'
+      )
+      .map((item) => item.name)
+  }
+  return []
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'enforce props default values to be valid',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/require-valid-default-prop.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /**
+     * @typedef { { type: string, function: false } } StandardValueType
+     * @typedef { { type: 'Function', function: true, expression: true, functionBody: Expression, returnType: string | null } } FunctionExprValueType
+     * @typedef { { type: 'Function', function: true, expression: false, functionBody: BlockStatement, returnTypes: ReturnType[] } } FunctionValueType
+     * @typedef { ComponentObjectProp & { value: ObjectExpression } } ComponentObjectDefineProp
+     * @typedef { { prop: ComponentObjectDefineProp, type: Set<string>, default: FunctionValueType } } PropDefaultFunctionContext
+     * @typedef { { type: string, node: Expression } } ReturnType
+     */
+
+    /**
+     * @type {Map<ObjectExpression, PropDefaultFunctionContext[]>}
+     */
+    const vueObjectPropsContexts = new Map()
+
+    /**
+     * @typedef {object} ScopeStack
+     * @property {ScopeStack | null} upper
+     * @property {BlockStatement | Expression} body
+     * @property {null | ReturnType[]} [returnTypes]
+     */
+    /**
+     * @type {ScopeStack | null}
+     */
+    let scopeStack = null
+
+    function onFunctionExit() {
+      scopeStack = scopeStack && scopeStack.upper
+    }
+
+    /**
+     * @param {Expression} targetNode
+     * @returns { StandardValueType | FunctionExprValueType | FunctionValueType | null }
+     */
+    function getValueType(targetNode) {
+      const node = utils.skipChainExpression(targetNode)
+      if (node.type === 'CallExpression') {
+        // Symbol(), Number() ...
+        if (
+          node.callee.type === 'Identifier' &&
+          NATIVE_TYPES.has(node.callee.name)
+        ) {
+          return {
+            function: false,
+            type: node.callee.name
+          }
+        }
+      } else if (node.type === 'TemplateLiteral') {
+        // String
+        return {
+          function: false,
+          type: 'String'
+        }
+      } else if (node.type === 'Literal') {
+        // String, Boolean, Number
+        if (node.value === null && !node.bigint) return null
+        const type = node.bigint ? 'BigInt' : capitalize(typeof node.value)
+        if (NATIVE_TYPES.has(type)) {
+          return {
+            function: false,
+            type
+          }
+        }
+      } else if (node.type === 'ArrayExpression') {
+        // Array
+        return {
+          function: false,
+          type: 'Array'
+        }
+      } else if (node.type === 'ObjectExpression') {
+        // Object
+        return {
+          function: false,
+          type: 'Object'
+        }
+      } else if (node.type === 'FunctionExpression') {
+        return {
+          function: true,
+          expression: false,
+          type: 'Function',
+          functionBody: node.body,
+          returnTypes: []
+        }
+      } else if (node.type === 'ArrowFunctionExpression') {
+        if (node.expression) {
+          const valueType = getValueType(node.body)
+          return {
+            function: true,
+            expression: true,
+            type: 'Function',
+            functionBody: node.body,
+            returnType: valueType ? valueType.type : null
+          }
+        } else {
+          return {
+            function: true,
+            expression: false,
+            type: 'Function',
+            functionBody: node.body,
+            returnTypes: []
+          }
+        }
+      }
+      return null
+    }
+
+    /**
+     * @param {*} node
+     * @param {ComponentObjectProp} prop
+     * @param {Iterable<string>} expectedTypeNames
+     */
+    function report(node, prop, expectedTypeNames) {
+      const propName =
+        prop.propName != null
+          ? prop.propName
+          : `[${context.getSourceCode().getText(prop.node.key)}]`
+      context.report({
+        node,
+        message:
+          "Type of the default value for '{{name}}' prop must be a {{types}}.",
+        data: {
+          name: propName,
+          types: Array.from(expectedTypeNames).join(' or ').toLowerCase()
+        }
+      })
+    }
+
+    // ----------------------------------------------------------------------
+    // Public
+    // ----------------------------------------------------------------------
+
+    return utils.defineVueVisitor(context, {
+      onVueObjectEnter(obj) {
+        /** @type {ComponentObjectDefineProp[]} */
+        const props = utils.getComponentProps(obj).filter(
+          /**
+           * @param {ComponentObjectProp | ComponentArrayProp} prop
+           * @returns {prop is ComponentObjectDefineProp}
+           */
+          (prop) =>
+            Boolean(prop.value && prop.value.type === 'ObjectExpression')
+        )
+        /** @type {PropDefaultFunctionContext[]} */
+        const propContexts = []
+        for (const prop of props) {
+          const type = getPropertyNode(prop.value, 'type')
+          if (!type) continue
+
+          const typeNames = new Set(
+            getTypes(type.value).filter((item) => NATIVE_TYPES.has(item))
+          )
+
+          // There is no native types detected
+          if (typeNames.size === 0) continue
+
+          const def = getPropertyNode(prop.value, 'default')
+          if (!def) continue
+
+          const defType = getValueType(def.value)
+
+          if (!defType) continue
+
+          if (!defType.function) {
+            if (typeNames.has(defType.type)) {
+              if (!FUNCTION_VALUE_TYPES.has(defType.type)) {
+                continue
+              }
+            }
+            report(
+              def.value,
+              prop,
+              Array.from(typeNames).map((type) =>
+                FUNCTION_VALUE_TYPES.has(type) ? 'Function' : type
+              )
+            )
+          } else {
+            if (typeNames.has('Function')) {
+              continue
+            }
+            if (defType.expression) {
+              if (!defType.returnType || typeNames.has(defType.returnType)) {
+                continue
+              }
+              report(defType.functionBody, prop, typeNames)
+            } else {
+              propContexts.push({
+                prop,
+                type: typeNames,
+                default: defType
+              })
+            }
+          }
+        }
+        vueObjectPropsContexts.set(obj, propContexts)
+      },
+      /**
+       * @param {FunctionExpression | FunctionDeclaration | ArrowFunctionExpression} node
+       * @param {VueObjectData} data
+       */
+      ':function'(node, { node: vueNode }) {
+        scopeStack = {
+          upper: scopeStack,
+          body: node.body,
+          returnTypes: null
+        }
+
+        const data = vueObjectPropsContexts.get(vueNode)
+        if (!data) {
+          return
+        }
+
+        for (const { default: defType } of data) {
+          if (node.body === defType.functionBody) {
+            scopeStack.returnTypes = defType.returnTypes
+          }
+        }
+      },
+      /**
+       * @param {ReturnStatement} node
+       */
+      ReturnStatement(node) {
+        if (!scopeStack) {
+          return
+        }
+        if (scopeStack.returnTypes && node.argument) {
+          const type = getValueType(node.argument)
+          if (type) {
+            scopeStack.returnTypes.push({
+              type: type.type,
+              node: node.argument
+            })
+          }
+        }
+      },
+      ':function:exit': onFunctionExit,
+      onVueObjectExit(obj) {
+        const data = vueObjectPropsContexts.get(obj)
+        if (!data) {
+          return
+        }
+        for (const { prop, type: typeNames, default: defType } of data) {
+          for (const returnType of defType.returnTypes) {
+            if (typeNames.has(returnType.type)) continue
+
+            report(returnType.node, prop, typeNames)
+          }
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/return-in-computed-property.js b/server/node_modules/eslint-plugin-vue/lib/rules/return-in-computed-property.js
new file mode 100644
index 0000000000000000000000000000000000000000..770e0c597c4927202dc3eb2aa531444614299862
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/return-in-computed-property.js
@@ -0,0 +1,83 @@
+/**
+ * @fileoverview Enforces that a return statement is present in computed property (return-in-computed-property)
+ * @author Armano
+ */
+'use strict'
+
+const utils = require('../utils')
+
+/**
+ * @typedef {import('../utils').ComponentComputedProperty} ComponentComputedProperty
+ */
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'enforce that a return statement is present in computed property',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/return-in-computed-property.html'
+    },
+    fixable: null, // or "code" or "whitespace"
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          treatUndefinedAsUnspecified: {
+            type: 'boolean'
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0] || {}
+    const treatUndefinedAsUnspecified = !(
+      options.treatUndefinedAsUnspecified === false
+    )
+
+    /**
+     * @type {Set<ComponentComputedProperty>}
+     */
+    const computedProperties = new Set()
+
+    // ----------------------------------------------------------------------
+    // Public
+    // ----------------------------------------------------------------------
+
+    return Object.assign(
+      {},
+      utils.defineVueVisitor(context, {
+        onVueObjectEnter(obj) {
+          for (const computedProperty of utils.getComputedProperties(obj)) {
+            computedProperties.add(computedProperty)
+          }
+        }
+      }),
+      utils.executeOnFunctionsWithoutReturn(
+        treatUndefinedAsUnspecified,
+        (node) => {
+          computedProperties.forEach((cp) => {
+            if (cp.value && cp.value.parent === node) {
+              context.report({
+                node,
+                message:
+                  'Expected to return a value in "{{name}}" computed property.',
+                data: {
+                  name: cp.key || 'Unknown'
+                }
+              })
+            }
+          })
+        }
+      )
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/return-in-emits-validator.js b/server/node_modules/eslint-plugin-vue/lib/rules/return-in-emits-validator.js
new file mode 100644
index 0000000000000000000000000000000000000000..c4ced9074ccb51e694592111bb08cdd8249d8cca
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/return-in-emits-validator.js
@@ -0,0 +1,141 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const utils = require('../utils')
+
+/**
+ * @typedef {import('../utils').ComponentArrayEmit} ComponentArrayEmit
+ * @typedef {import('../utils').ComponentObjectEmit} ComponentObjectEmit
+ */
+
+/**
+ * Checks if the given node value is falsy.
+ * @param {Expression} node The node to check
+ * @returns {boolean} If `true`, the given node value is falsy.
+ */
+function isFalsy(node) {
+  if (node.type === 'Literal') {
+    if (node.bigint) {
+      return node.bigint === '0'
+    } else if (!node.value) {
+      return true
+    }
+  } else if (node.type === 'Identifier') {
+    if (node.name === 'undefined' || node.name === 'NaN') {
+      return true
+    }
+  }
+  return false
+}
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description:
+        'enforce that a return statement is present in emits validator',
+      categories: ['vue3-essential'],
+      url: 'https://eslint.vuejs.org/rules/return-in-emits-validator.html'
+    },
+    fixable: null, // or "code" or "whitespace"
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    /** @type {ComponentObjectEmit[]} */
+    const emitsValidators = []
+
+    // ----------------------------------------------------------------------
+    // Public
+    // ----------------------------------------------------------------------
+
+    /**
+     * @typedef {object} ScopeStack
+     * @property {ScopeStack | null} upper
+     * @property {FunctionExpression | FunctionDeclaration | ArrowFunctionExpression} functionNode
+     * @property {boolean} hasReturnValue
+     * @property {boolean} possibleOfReturnTrue
+     */
+    /**
+     * @type {ScopeStack | null}
+     */
+    let scopeStack = null
+
+    return Object.assign(
+      {},
+      utils.defineVueVisitor(context, {
+        /** @param {ObjectExpression} obj */
+        onVueObjectEnter(obj) {
+          for (const emits of utils.getComponentEmits(obj)) {
+            if (!emits.value) {
+              continue
+            }
+            const emitsValue = emits.value
+            if (
+              emitsValue.type !== 'FunctionExpression' &&
+              emitsValue.type !== 'ArrowFunctionExpression'
+            ) {
+              continue
+            }
+            emitsValidators.push(emits)
+          }
+        },
+        /** @param {FunctionExpression | FunctionDeclaration | ArrowFunctionExpression} node */
+        ':function'(node) {
+          scopeStack = {
+            upper: scopeStack,
+            functionNode: node,
+            hasReturnValue: false,
+            possibleOfReturnTrue: false
+          }
+
+          if (node.type === 'ArrowFunctionExpression' && node.expression) {
+            scopeStack.hasReturnValue = true
+
+            if (!isFalsy(node.body)) {
+              scopeStack.possibleOfReturnTrue = true
+            }
+          }
+        },
+        /** @param {ReturnStatement} node */
+        ReturnStatement(node) {
+          if (!scopeStack) {
+            return
+          }
+          if (node.argument) {
+            scopeStack.hasReturnValue = true
+
+            if (!isFalsy(node.argument)) {
+              scopeStack.possibleOfReturnTrue = true
+            }
+          }
+        },
+        /** @param {FunctionExpression | FunctionDeclaration | ArrowFunctionExpression} node */
+        ':function:exit'(node) {
+          if (scopeStack && !scopeStack.possibleOfReturnTrue) {
+            const emits = emitsValidators.find((e) => e.value === node)
+            if (emits) {
+              context.report({
+                node,
+                message: scopeStack.hasReturnValue
+                  ? 'Expected to return a true value in "{{name}}" emits validator.'
+                  : 'Expected to return a boolean value in "{{name}}" emits validator.',
+                data: {
+                  name: emits.emitName || 'Unknown'
+                }
+              })
+            }
+          }
+
+          scopeStack = scopeStack && scopeStack.upper
+        }
+      })
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/script-indent.js b/server/node_modules/eslint-plugin-vue/lib/rules/script-indent.js
new file mode 100644
index 0000000000000000000000000000000000000000..6a85e7114854b130d3b5e9c2b553947c22148a2a
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/script-indent.js
@@ -0,0 +1,56 @@
+/**
+ * @author Toru Nagashima
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const indentCommon = require('../utils/indent-common')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'layout',
+    docs: {
+      description: 'enforce consistent indentation in `<script>`',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/script-indent.html'
+    },
+    fixable: 'whitespace',
+    schema: [
+      {
+        anyOf: [{ type: 'integer', minimum: 1 }, { enum: ['tab'] }]
+      },
+      {
+        type: 'object',
+        properties: {
+          baseIndent: { type: 'integer', minimum: 0 },
+          switchCase: { type: 'integer', minimum: 0 },
+          ignores: {
+            type: 'array',
+            items: {
+              allOf: [
+                { type: 'string' },
+                { not: { type: 'string', pattern: ':exit$' } },
+                { not: { type: 'string', pattern: '^\\s*$' } }
+              ]
+            },
+            uniqueItems: true,
+            additionalItems: false
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return indentCommon.defineVisitor(context, context.getSourceCode(), {})
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/singleline-html-element-content-newline.js b/server/node_modules/eslint-plugin-vue/lib/rules/singleline-html-element-content-newline.js
new file mode 100644
index 0000000000000000000000000000000000000000..52b5ed1fe45a8fd98b2fd97f99429eec462fd33a
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/singleline-html-element-content-newline.js
@@ -0,0 +1,215 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+const casing = require('../utils/casing')
+const INLINE_ELEMENTS = require('../utils/inline-non-void-elements.json')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * @param {VElement & { endTag: VEndTag } } element
+ */
+function isSinglelineElement(element) {
+  return element.loc.start.line === element.endTag.loc.start.line
+}
+
+/**
+ * @param {any} options
+ */
+function parseOptions(options) {
+  return Object.assign(
+    {
+      ignores: ['pre', 'textarea'].concat(INLINE_ELEMENTS),
+      ignoreWhenNoAttributes: true,
+      ignoreWhenEmpty: true
+    },
+    options
+  )
+}
+
+/**
+ * Check whether the given element is empty or not.
+ * This ignores whitespaces, doesn't ignore comments.
+ * @param {VElement & { endTag: VEndTag } } node The element node to check.
+ * @param {SourceCode} sourceCode The source code object of the current context.
+ * @returns {boolean} `true` if the element is empty.
+ */
+function isEmpty(node, sourceCode) {
+  const start = node.startTag.range[1]
+  const end = node.endTag.range[0]
+  return sourceCode.text.slice(start, end).trim() === ''
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'layout',
+    docs: {
+      description:
+        'require a line break before and after the contents of a singleline element',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url:
+        'https://eslint.vuejs.org/rules/singleline-html-element-content-newline.html'
+    },
+    fixable: 'whitespace',
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          ignoreWhenNoAttributes: {
+            type: 'boolean'
+          },
+          ignoreWhenEmpty: {
+            type: 'boolean'
+          },
+          ignores: {
+            type: 'array',
+            items: { type: 'string' },
+            uniqueItems: true,
+            additionalItems: false
+          }
+        },
+        additionalProperties: false
+      }
+    ],
+    messages: {
+      unexpectedAfterClosingBracket:
+        'Expected 1 line break after opening tag (`<{{name}}>`), but no line breaks found.',
+      unexpectedBeforeOpeningBracket:
+        'Expected 1 line break before closing tag (`</{{name}}>`), but no line breaks found.'
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = parseOptions(context.options[0])
+    const ignores = options.ignores
+    const ignoreWhenNoAttributes = options.ignoreWhenNoAttributes
+    const ignoreWhenEmpty = options.ignoreWhenEmpty
+    const template =
+      context.parserServices.getTemplateBodyTokenStore &&
+      context.parserServices.getTemplateBodyTokenStore()
+    const sourceCode = context.getSourceCode()
+
+    /** @type {VElement | null} */
+    let inIgnoreElement = null
+
+    /** @param {VElement} node */
+    function isIgnoredElement(node) {
+      return (
+        ignores.includes(node.name) ||
+        ignores.includes(casing.pascalCase(node.rawName)) ||
+        ignores.includes(casing.kebabCase(node.rawName))
+      )
+    }
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VElement} node */
+      VElement(node) {
+        if (inIgnoreElement) {
+          return
+        }
+        if (isIgnoredElement(node)) {
+          // ignore element name
+          inIgnoreElement = node
+          return
+        }
+        if (node.startTag.selfClosing || !node.endTag) {
+          // self closing
+          return
+        }
+
+        const elem = /** @type {VElement & { endTag: VEndTag } } */ (node)
+
+        if (!isSinglelineElement(elem)) {
+          return
+        }
+        if (ignoreWhenNoAttributes && elem.startTag.attributes.length === 0) {
+          return
+        }
+
+        /** @type {SourceCode.CursorWithCountOptions} */
+        const getTokenOption = {
+          includeComments: true,
+          filter: (token) => token.type !== 'HTMLWhitespace'
+        }
+        if (
+          ignoreWhenEmpty &&
+          elem.children.length === 0 &&
+          template.getFirstTokensBetween(
+            elem.startTag,
+            elem.endTag,
+            getTokenOption
+          ).length === 0
+        ) {
+          return
+        }
+
+        const contentFirst = /** @type {Token} */ (template.getTokenAfter(
+          elem.startTag,
+          getTokenOption
+        ))
+        const contentLast = /** @type {Token} */ (template.getTokenBefore(
+          elem.endTag,
+          getTokenOption
+        ))
+
+        context.report({
+          node: template.getLastToken(elem.startTag),
+          loc: {
+            start: elem.startTag.loc.end,
+            end: contentFirst.loc.start
+          },
+          messageId: 'unexpectedAfterClosingBracket',
+          data: {
+            name: elem.rawName
+          },
+          fix(fixer) {
+            /** @type {Range} */
+            const range = [elem.startTag.range[1], contentFirst.range[0]]
+            return fixer.replaceTextRange(range, '\n')
+          }
+        })
+
+        if (isEmpty(elem, sourceCode)) {
+          return
+        }
+
+        context.report({
+          node: template.getFirstToken(elem.endTag),
+          loc: {
+            start: contentLast.loc.end,
+            end: elem.endTag.loc.start
+          },
+          messageId: 'unexpectedBeforeOpeningBracket',
+          data: {
+            name: elem.rawName
+          },
+          fix(fixer) {
+            /** @type {Range} */
+            const range = [contentLast.range[1], elem.endTag.range[0]]
+            return fixer.replaceTextRange(range, '\n')
+          }
+        })
+      },
+      /** @param {VElement} node */
+      'VElement:exit'(node) {
+        if (inIgnoreElement === node) {
+          inIgnoreElement = null
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/sort-keys.js b/server/node_modules/eslint-plugin-vue/lib/rules/sort-keys.js
new file mode 100644
index 0000000000000000000000000000000000000000..664186bddc1c26add5d3721b75f596ee34431859
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/sort-keys.js
@@ -0,0 +1,282 @@
+/**
+ * @fileoverview enforce sort-keys in a manner that is compatible with order-in-components
+ * @author Loren Klingman
+ * Original ESLint sort-keys by Toru Nagashima
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const naturalCompare = require('natural-compare')
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Gets the property name of the given `Property` node.
+ *
+ * - If the property's key is an `Identifier` node, this returns the key's name
+ *   whether it's a computed property or not.
+ * - If the property has a static name, this returns the static name.
+ * - Otherwise, this returns null.
+ * @param {Property} node The `Property` node to get.
+ * @returns {string|null} The property name or null.
+ * @private
+ */
+function getPropertyName(node) {
+  const staticName = utils.getStaticPropertyName(node)
+
+  if (staticName !== null) {
+    return staticName
+  }
+
+  return node.key.type === 'Identifier' ? node.key.name : null
+}
+
+/**
+ * Functions which check that the given 2 names are in specific order.
+ *
+ * Postfix `I` is meant insensitive.
+ * Postfix `N` is meant natural.
+ * @private
+ * @type { { [key: string]: (a:string, b:string) => boolean } }
+ */
+const isValidOrders = {
+  asc(a, b) {
+    return a <= b
+  },
+  ascI(a, b) {
+    return a.toLowerCase() <= b.toLowerCase()
+  },
+  ascN(a, b) {
+    return naturalCompare(a, b) <= 0
+  },
+  ascIN(a, b) {
+    return naturalCompare(a.toLowerCase(), b.toLowerCase()) <= 0
+  },
+  desc(a, b) {
+    return isValidOrders.asc(b, a)
+  },
+  descI(a, b) {
+    return isValidOrders.ascI(b, a)
+  },
+  descN(a, b) {
+    return isValidOrders.ascN(b, a)
+  },
+  descIN(a, b) {
+    return isValidOrders.ascIN(b, a)
+  }
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'enforce sort-keys in a manner that is compatible with order-in-components',
+      categories: null,
+      recommended: false,
+      url: 'https://eslint.vuejs.org/rules/sort-keys.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        enum: ['asc', 'desc']
+      },
+      {
+        type: 'object',
+        properties: {
+          caseSensitive: {
+            type: 'boolean',
+            default: true
+          },
+          ignoreChildrenOf: {
+            type: 'array'
+          },
+          ignoreGrandchildrenOf: {
+            type: 'array'
+          },
+          minKeys: {
+            type: 'integer',
+            minimum: 2,
+            default: 2
+          },
+          natural: {
+            type: 'boolean',
+            default: false
+          },
+          runOutsideVue: {
+            type: 'boolean',
+            default: true
+          }
+        },
+        additionalProperties: false
+      }
+    ],
+    messages: {
+      sortKeys:
+        "Expected object keys to be in {{natural}}{{insensitive}}{{order}}ending order. '{{thisName}}' should be before '{{prevName}}'."
+    }
+  },
+  /**
+   * @param {RuleContext} context - The rule context.
+   * @returns {RuleListener} AST event handlers.
+   */
+  create(context) {
+    // Parse options.
+    const options = context.options[1]
+    const order = context.options[0] || 'asc'
+
+    /** @type {string[]} */
+    const ignoreGrandchildrenOf = (options &&
+      options.ignoreGrandchildrenOf) || [
+      'computed',
+      'directives',
+      'inject',
+      'props',
+      'watch'
+    ]
+    /** @type {string[]} */
+    const ignoreChildrenOf = (options && options.ignoreChildrenOf) || ['model']
+    const insensitive = options && options.caseSensitive === false
+    const minKeys = options && options.minKeys
+    const natural = options && options.natural
+    const isValidOrder =
+      isValidOrders[order + (insensitive ? 'I' : '') + (natural ? 'N' : '')]
+
+    /**
+     * @typedef {object} ObjectStack
+     * @property {ObjectStack | null} ObjectStack.upper
+     * @property {string | null} ObjectStack.prevName
+     * @property {number} ObjectStack.numKeys
+     * @property {VueState} ObjectStack.vueState
+     *
+     * @typedef {object} VueState
+     * @property {Property} [VueState.currentProperty]
+     * @property {boolean} [VueState.isVueObject]
+     * @property {boolean} [VueState.within]
+     * @property {string} [VueState.propName]
+     * @property {number} [VueState.chainLevel]
+     * @property {boolean} [VueState.ignore]
+     */
+
+    /**
+     * The stack to save the previous property's name for each object literals.
+     * @type {ObjectStack | null}
+     */
+    let objectStack
+
+    return {
+      ObjectExpression(node) {
+        /** @type {VueState} */
+        const vueState = {}
+        const upperVueState = (objectStack && objectStack.vueState) || {}
+        objectStack = {
+          upper: objectStack,
+          prevName: null,
+          numKeys: node.properties.length,
+          vueState
+        }
+
+        vueState.isVueObject = utils.getVueObjectType(context, node) != null
+        if (vueState.isVueObject) {
+          vueState.within = vueState.isVueObject
+          // Ignore Vue object properties
+          vueState.ignore = true
+        } else {
+          if (upperVueState.within && upperVueState.currentProperty) {
+            const isChain = utils.isPropertyChain(
+              upperVueState.currentProperty,
+              node
+            )
+            if (isChain) {
+              let propName
+              let chainLevel
+              if (upperVueState.isVueObject) {
+                propName =
+                  utils.getStaticPropertyName(upperVueState.currentProperty) ||
+                  ''
+                chainLevel = 1
+              } else {
+                propName = upperVueState.propName
+                chainLevel = upperVueState.chainLevel + 1
+              }
+              vueState.propName = propName
+              vueState.chainLevel = chainLevel
+              // chaining
+              vueState.within = true
+
+              // Judge whether to ignore the property.
+              if (chainLevel === 1) {
+                if (ignoreChildrenOf.includes(propName)) {
+                  vueState.ignore = true
+                }
+              } else if (chainLevel === 2) {
+                if (ignoreGrandchildrenOf.includes(propName)) {
+                  vueState.ignore = true
+                }
+              }
+            } else {
+              // chaining has broken.
+              vueState.within = false
+            }
+          }
+        }
+      },
+      'ObjectExpression:exit'() {
+        objectStack = objectStack && objectStack.upper
+      },
+      SpreadElement(node) {
+        if (!objectStack) {
+          return
+        }
+        if (node.parent.type === 'ObjectExpression') {
+          objectStack.prevName = null
+        }
+      },
+      'ObjectExpression > Property'(node) {
+        if (!objectStack) {
+          return
+        }
+        objectStack.vueState.currentProperty = node
+        if (objectStack.vueState.ignore) {
+          return
+        }
+        const prevName = objectStack.prevName
+        const numKeys = objectStack.numKeys
+        const thisName = getPropertyName(node)
+
+        if (thisName !== null) {
+          objectStack.prevName = thisName
+        }
+
+        if (prevName === null || thisName === null || numKeys < minKeys) {
+          return
+        }
+
+        if (!isValidOrder(prevName, thisName)) {
+          context.report({
+            node,
+            loc: node.key.loc,
+            messageId: 'sortKeys',
+            data: {
+              thisName,
+              prevName,
+              order,
+              insensitive: insensitive ? 'insensitive ' : '',
+              natural: natural ? 'natural ' : ''
+            }
+          })
+        }
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/space-in-parens.js b/server/node_modules/eslint-plugin-vue/lib/rules/space-in-parens.js
new file mode 100644
index 0000000000000000000000000000000000000000..29ba0403bcad7abe015b89c66b2906dfcb440840
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/space-in-parens.js
@@ -0,0 +1,12 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('space-in-parens', {
+  skipDynamicArguments: true,
+  skipDynamicArgumentsReport: true
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/space-infix-ops.js b/server/node_modules/eslint-plugin-vue/lib/rules/space-infix-ops.js
new file mode 100644
index 0000000000000000000000000000000000000000..650b215e8558940a7adf5a83b78c283b0eed2580
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/space-infix-ops.js
@@ -0,0 +1,11 @@
+/**
+ * @author Toru Nagashima
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('space-infix-ops', {
+  skipDynamicArguments: true
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/space-unary-ops.js b/server/node_modules/eslint-plugin-vue/lib/rules/space-unary-ops.js
new file mode 100644
index 0000000000000000000000000000000000000000..4920ca9e4c9f8cea9a688dd6b61ce431cea95606
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/space-unary-ops.js
@@ -0,0 +1,11 @@
+/**
+ * @author Toru Nagashima
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('space-unary-ops', {
+  skipDynamicArguments: true
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/static-class-names-order.js b/server/node_modules/eslint-plugin-vue/lib/rules/static-class-names-order.js
new file mode 100644
index 0000000000000000000000000000000000000000..bee820fa224a7f3918d14bb32faeac44f20d8e18
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/static-class-names-order.js
@@ -0,0 +1,61 @@
+/**
+ * @fileoverview Alphabetizes static class names.
+ * @author Maciej Chmurski
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const { defineTemplateBodyVisitor } = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      url: 'https://eslint.vuejs.org/rules/static-class-names-order.html',
+      description: 'enforce static class names order',
+      categories: undefined
+    },
+    fixable: 'code',
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create: (context) => {
+    return defineTemplateBodyVisitor(context, {
+      /** @param {VAttribute} node */
+      "VAttribute[directive=false][key.name='class']"(node) {
+        const value = node.value
+        if (!value) {
+          return
+        }
+        const classList = value.value
+        const classListWithWhitespace = classList.split(/(\s+)/)
+
+        // Detect and reuse any type of whitespace.
+        let divider = ''
+        if (classListWithWhitespace.length > 1) {
+          divider = classListWithWhitespace[1]
+        }
+
+        const classListNoWhitespace = classListWithWhitespace.filter(
+          (className) => className.trim() !== ''
+        )
+        const classListSorted = classListNoWhitespace.sort().join(divider)
+
+        if (classList !== classListSorted) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: 'Classes should be ordered alphabetically.',
+            fix: (fixer) => fixer.replaceText(value, `"${classListSorted}"`)
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/dynamic-directive-arguments.js b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/dynamic-directive-arguments.js
new file mode 100644
index 0000000000000000000000000000000000000000..9a790e9f7ff2982f51eb7f0d9f01c5f6d12917d9
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/dynamic-directive-arguments.js
@@ -0,0 +1,26 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+module.exports = {
+  supported: '>=2.6.0',
+  /** @param {RuleContext} context @returns {TemplateListener} */
+  createTemplateBodyVisitor(context) {
+    /**
+     * Reports dynamic argument node
+     * @param {VExpressionContainer} dynamicArgument node of dynamic argument
+     * @returns {void}
+     */
+    function reportDynamicArgument(dynamicArgument) {
+      context.report({
+        node: dynamicArgument,
+        messageId: 'forbiddenDynamicDirectiveArguments'
+      })
+    }
+
+    return {
+      'VAttribute[directive=true] > VDirectiveKey > VExpressionContainer': reportDynamicArgument
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/scope-attribute.js b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/scope-attribute.js
new file mode 100644
index 0000000000000000000000000000000000000000..c356a6750823b9fc010583c53c129bee329dc40b
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/scope-attribute.js
@@ -0,0 +1,29 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+module.exports = {
+  deprecated: '2.5.0',
+  supported: '<3.0.0',
+  /** @param {RuleContext} context @returns {TemplateListener} */
+  createTemplateBodyVisitor(context) {
+    /**
+     * Reports `scope` node
+     * @param {VDirectiveKey} scopeKey node of `scope`
+     * @returns {void}
+     */
+    function reportScope(scopeKey) {
+      context.report({
+        node: scopeKey,
+        messageId: 'forbiddenScopeAttribute',
+        // fix to use `slot-scope`
+        fix: (fixer) => fixer.replaceText(scopeKey, 'slot-scope')
+      })
+    }
+
+    return {
+      "VAttribute[directive=true] > VDirectiveKey[name.name='scope']": reportScope
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/slot-attribute.js b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/slot-attribute.js
new file mode 100644
index 0000000000000000000000000000000000000000..1ce27484d18b01d5cc957815f1b75641c6aedf1b
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/slot-attribute.js
@@ -0,0 +1,134 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+module.exports = {
+  deprecated: '2.6.0',
+  supported: '<3.0.0',
+  /** @param {RuleContext} context @returns {TemplateListener} */
+  createTemplateBodyVisitor(context) {
+    const sourceCode = context.getSourceCode()
+
+    /**
+     * Checks whether the given node can convert to the `v-slot`.
+     * @param {VAttribute} slotAttr node of `slot`
+     * @returns {boolean} `true` if the given node can convert to the `v-slot`
+     */
+    function canConvertFromSlotToVSlot(slotAttr) {
+      if (slotAttr.parent.parent.name !== 'template') {
+        return false
+      }
+      if (!slotAttr.value) {
+        return true
+      }
+      const slotName = slotAttr.value.value
+      // If non-Latin characters are included it can not be converted.
+      return !/[^a-z]/i.test(slotName)
+    }
+
+    /**
+     * Checks whether the given node can convert to the `v-slot`.
+     * @param {VDirective} slotAttr node of `v-bind:slot`
+     * @returns {boolean} `true` if the given node can convert to the `v-slot`
+     */
+    function canConvertFromVBindSlotToVSlot(slotAttr) {
+      if (slotAttr.parent.parent.name !== 'template') {
+        return false
+      }
+
+      if (!slotAttr.value) {
+        return true
+      }
+
+      if (!slotAttr.value.expression) {
+        // parse error or empty expression
+        return false
+      }
+      const slotName = sourceCode.getText(slotAttr.value.expression).trim()
+      // If non-Latin characters are included it can not be converted.
+      // It does not check the space only because `a>b?c:d` should be rejected.
+      return !/[^a-z]/i.test(slotName)
+    }
+
+    /**
+     * Convert to `v-slot`.
+     * @param {RuleFixer} fixer fixer
+     * @param {VAttribute|VDirective} slotAttr node of `slot`
+     * @param {string | null} slotName name of `slot`
+     * @param {boolean} vBind `true` if `slotAttr` is `v-bind:slot`
+     * @returns {IterableIterator<Fix>} fix data
+     */
+    function* fixSlotToVSlot(fixer, slotAttr, slotName, vBind) {
+      const element = slotAttr.parent
+      const scopeAttr = element.attributes.find(
+        (attr) =>
+          attr.directive === true &&
+          attr.key.name &&
+          (attr.key.name.name === 'slot-scope' ||
+            attr.key.name.name === 'scope')
+      )
+      const nameArgument = slotName
+        ? vBind
+          ? `:[${slotName}]`
+          : `:${slotName}`
+        : ''
+      const scopeValue =
+        scopeAttr && scopeAttr.value
+          ? `=${sourceCode.getText(scopeAttr.value)}`
+          : ''
+
+      const replaceText = `v-slot${nameArgument}${scopeValue}`
+      yield fixer.replaceText(slotAttr || scopeAttr, replaceText)
+      if (slotAttr && scopeAttr) {
+        yield fixer.remove(scopeAttr)
+      }
+    }
+    /**
+     * Reports `slot` node
+     * @param {VAttribute} slotAttr node of `slot`
+     * @returns {void}
+     */
+    function reportSlot(slotAttr) {
+      context.report({
+        node: slotAttr.key,
+        messageId: 'forbiddenSlotAttribute',
+        // fix to use `v-slot`
+        *fix(fixer) {
+          if (!canConvertFromSlotToVSlot(slotAttr)) {
+            return
+          }
+          const slotName = slotAttr.value && slotAttr.value.value
+          yield* fixSlotToVSlot(fixer, slotAttr, slotName, false)
+        }
+      })
+    }
+    /**
+     * Reports `v-bind:slot` node
+     * @param {VDirective} slotAttr node of `v-bind:slot`
+     * @returns {void}
+     */
+    function reportVBindSlot(slotAttr) {
+      context.report({
+        node: slotAttr.key,
+        messageId: 'forbiddenSlotAttribute',
+        // fix to use `v-slot`
+        *fix(fixer) {
+          if (!canConvertFromVBindSlotToVSlot(slotAttr)) {
+            return
+          }
+          const slotName =
+            slotAttr.value &&
+            slotAttr.value.expression &&
+            sourceCode.getText(slotAttr.value.expression).trim()
+          yield* fixSlotToVSlot(fixer, slotAttr, slotName, true)
+        }
+      })
+    }
+
+    return {
+      "VAttribute[directive=false][key.name='slot']": reportSlot,
+      "VAttribute[directive=true][key.name.name='bind'][key.argument.name='slot']": reportVBindSlot
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/slot-scope-attribute.js b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/slot-scope-attribute.js
new file mode 100644
index 0000000000000000000000000000000000000000..902b5ded892f4d84e93a847b343fd0ab89707857
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/slot-scope-attribute.js
@@ -0,0 +1,95 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+module.exports = {
+  deprecated: '2.6.0',
+  supported: '>=2.5.0 <3.0.0',
+  /**
+   * @param {RuleContext} context
+   * @param {object} option
+   * @param {boolean} [option.fixToUpgrade]
+   * @returns {TemplateListener}
+   */
+  createTemplateBodyVisitor(context, { fixToUpgrade } = {}) {
+    const sourceCode = context.getSourceCode()
+
+    /**
+     * Checks whether the given node can convert to the `v-slot`.
+     * @param {VStartTag} startTag node of `<element v-slot ... >`
+     * @returns {boolean} `true` if the given node can convert to the `v-slot`
+     */
+    function canConvertToVSlot(startTag) {
+      if (startTag.parent.name !== 'template') {
+        return false
+      }
+
+      const slotAttr = startTag.attributes.find(
+        (attr) => attr.directive === false && attr.key.name === 'slot'
+      )
+      if (slotAttr) {
+        // if the element have `slot` it can not be converted.
+        // Conversion of `slot` is done with `vue/no-deprecated-slot-attribute`.
+        return false
+      }
+
+      const vBindSlotAttr = startTag.attributes.find(
+        (attr) =>
+          attr.directive === true &&
+          attr.key.name.name === 'bind' &&
+          attr.key.argument &&
+          attr.key.argument.type === 'VIdentifier' &&
+          attr.key.argument.name === 'slot'
+      )
+      if (vBindSlotAttr) {
+        // if the element have `v-bind:slot` it can not be converted.
+        // Conversion of `v-bind:slot` is done with `vue/no-deprecated-slot-attribute`.
+        return false
+      }
+      return true
+    }
+
+    /**
+     * Convert to `v-slot`.
+     * @param {RuleFixer} fixer fixer
+     * @param {VDirective} scopeAttr node of `slot-scope`
+     * @returns {Fix} fix data
+     */
+    function fixSlotScopeToVSlot(fixer, scopeAttr) {
+      const scopeValue =
+        scopeAttr && scopeAttr.value
+          ? `=${sourceCode.getText(scopeAttr.value)}`
+          : ''
+
+      const replaceText = `v-slot${scopeValue}`
+      return fixer.replaceText(scopeAttr, replaceText)
+    }
+    /**
+     * Reports `slot-scope` node
+     * @param {VDirective} scopeAttr node of `slot-scope`
+     * @returns {void}
+     */
+    function reportSlotScope(scopeAttr) {
+      context.report({
+        node: scopeAttr.key,
+        messageId: 'forbiddenSlotScopeAttribute',
+        fix(fixer) {
+          if (!fixToUpgrade) {
+            return null
+          }
+          // fix to use `v-slot`
+          const startTag = scopeAttr.parent
+          if (!canConvertToVSlot(startTag)) {
+            return null
+          }
+          return fixSlotScopeToVSlot(fixer, scopeAttr)
+        }
+      })
+    }
+
+    return {
+      "VAttribute[directive=true][key.name.name='slot-scope']": reportSlotScope
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/v-bind-prop-modifier-shorthand.js b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/v-bind-prop-modifier-shorthand.js
new file mode 100644
index 0000000000000000000000000000000000000000..219d2b3c94f2e053c9fd482aecc90d1923f87853
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/v-bind-prop-modifier-shorthand.js
@@ -0,0 +1,33 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+module.exports = {
+  supported: '>=2.6.0-beta.1 <=2.6.0-beta.3',
+  /** @param {RuleContext} context @returns {TemplateListener} */
+  createTemplateBodyVisitor(context) {
+    /**
+     * Reports `.prop` shorthand node
+     * @param { VDirectiveKey & { argument: VIdentifier } } bindPropKey node of `.prop` shorthand
+     * @returns {void}
+     */
+    function reportPropModifierShorthand(bindPropKey) {
+      context.report({
+        node: bindPropKey,
+        messageId: 'forbiddenVBindPropModifierShorthand',
+        // fix to use `:x.prop` (downgrade)
+        fix: (fixer) =>
+          fixer.replaceText(
+            bindPropKey,
+            `:${bindPropKey.argument.rawName}.prop`
+          )
+      })
+    }
+
+    return {
+      "VAttribute[directive=true] > VDirectiveKey[name.name='bind'][name.rawName='.']": reportPropModifierShorthand
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/v-is.js b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/v-is.js
new file mode 100644
index 0000000000000000000000000000000000000000..9aeeb8d7e1a838a0c2d721dd6c43e9004eac6c88
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/v-is.js
@@ -0,0 +1,26 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+module.exports = {
+  supported: '>=3.0.0',
+  /** @param {RuleContext} context @returns {TemplateListener} */
+  createTemplateBodyVisitor(context) {
+    /**
+     * Reports `v-is` node
+     * @param {VDirective} vSlotAttr node of `v-is`
+     * @returns {void}
+     */
+    function reportVSlot(vSlotAttr) {
+      context.report({
+        node: vSlotAttr.key,
+        messageId: 'forbiddenVIs'
+      })
+    }
+
+    return {
+      "VAttribute[directive=true][key.name.name='is']": reportVSlot
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/v-model-argument.js b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/v-model-argument.js
new file mode 100644
index 0000000000000000000000000000000000000000..d1bd59738ed02fababc2b5134ebdfb34aa491ff5
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/v-model-argument.js
@@ -0,0 +1,23 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+module.exports = {
+  supported: '>=3.0.0',
+  /** @param {RuleContext} context @returns {TemplateListener} */
+  createTemplateBodyVisitor(context) {
+    return {
+      /** @param {VDirectiveKey & { argument: VExpressionContainer | VIdentifier }} node */
+      "VAttribute[directive=true] > VDirectiveKey[name.name='model'][argument!=null]"(
+        node
+      ) {
+        context.report({
+          node: node.argument,
+          messageId: 'forbiddenVModelArgument'
+        })
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/v-model-custom-modifiers.js b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/v-model-custom-modifiers.js
new file mode 100644
index 0000000000000000000000000000000000000000..d11116b2d3025fdd3d98f49bc0bb24b714fbb173
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/v-model-custom-modifiers.js
@@ -0,0 +1,33 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+const BUILTIN_MODIFIERS = new Set(['lazy', 'number', 'trim'])
+
+module.exports = {
+  supported: '>=3.0.0',
+  /** @param {RuleContext} context @returns {TemplateListener} */
+  createTemplateBodyVisitor(context) {
+    return {
+      /** @param {VDirectiveKey} node */
+      "VAttribute[directive=true] > VDirectiveKey[name.name='model'][modifiers.length>0]"(
+        node
+      ) {
+        for (const modifier of node.modifiers) {
+          if (!BUILTIN_MODIFIERS.has(modifier.name)) {
+            context.report({
+              node: modifier,
+              messageId: 'forbiddenVModelCustomModifiers'
+            })
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/v-slot.js b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/v-slot.js
new file mode 100644
index 0000000000000000000000000000000000000000..9a9ba1fba06c4231af661fc227ccdbb565263a57
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/syntaxes/v-slot.js
@@ -0,0 +1,85 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+module.exports = {
+  supported: '>=2.6.0',
+  /** @param {RuleContext} context @returns {TemplateListener} */
+  createTemplateBodyVisitor(context) {
+    const sourceCode = context.getSourceCode()
+
+    /**
+     * Checks whether the given node can convert to the `slot`.
+     * @param {VDirective} vSlotAttr node of `v-slot`
+     * @returns {boolean} `true` if the given node can convert to the `slot`
+     */
+    function canConvertToSlot(vSlotAttr) {
+      if (vSlotAttr.parent.parent.name !== 'template') {
+        return false
+      }
+      return true
+    }
+    /**
+     * Convert to `slot` and `slot-scope`.
+     * @param {RuleFixer} fixer fixer
+     * @param {VDirective} vSlotAttr node of `v-slot`
+     * @returns {null|Fix} fix data
+     */
+    function fixVSlotToSlot(fixer, vSlotAttr) {
+      const key = vSlotAttr.key
+      if (key.modifiers.length) {
+        // unknown modifiers
+        return null
+      }
+
+      const attrs = []
+      const argument = key.argument
+      if (argument) {
+        if (argument.type === 'VIdentifier') {
+          const name = argument.rawName
+          attrs.push(`slot="${name}"`)
+        } else if (
+          argument.type === 'VExpressionContainer' &&
+          argument.expression
+        ) {
+          const expression = sourceCode.getText(argument.expression)
+          attrs.push(`:slot="${expression}"`)
+        } else {
+          // unknown or syntax error
+          return null
+        }
+      }
+      const scopedValueNode = vSlotAttr.value
+      if (scopedValueNode) {
+        attrs.push(`slot-scope=${sourceCode.getText(scopedValueNode)}`)
+      }
+      if (!attrs.length) {
+        attrs.push('slot') // useless
+      }
+      return fixer.replaceText(vSlotAttr, attrs.join(' '))
+    }
+    /**
+     * Reports `v-slot` node
+     * @param {VDirective} vSlotAttr node of `v-slot`
+     * @returns {void}
+     */
+    function reportVSlot(vSlotAttr) {
+      context.report({
+        node: vSlotAttr.key,
+        messageId: 'forbiddenVSlot',
+        // fix to use `slot` (downgrade)
+        fix(fixer) {
+          if (!canConvertToSlot(vSlotAttr)) {
+            return null
+          }
+          return fixVSlotToSlot(fixer, vSlotAttr)
+        }
+      })
+    }
+
+    return {
+      "VAttribute[directive=true][key.name.name='slot']": reportVSlot
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/template-curly-spacing.js b/server/node_modules/eslint-plugin-vue/lib/rules/template-curly-spacing.js
new file mode 100644
index 0000000000000000000000000000000000000000..acefea6b559cd931cb2413ee7fa81d1c188bdd66
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/template-curly-spacing.js
@@ -0,0 +1,11 @@
+/**
+ * @author Yosuke Ota
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('template-curly-spacing', {
+  skipDynamicArguments: true
+})
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/this-in-template.js b/server/node_modules/eslint-plugin-vue/lib/rules/this-in-template.js
new file mode 100644
index 0000000000000000000000000000000000000000..0efa0303563f9c8e9840029c139d0f510b37ab59
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/this-in-template.js
@@ -0,0 +1,128 @@
+/**
+ * @fileoverview disallow usage of `this` in template.
+ * @author Armano
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+const RESERVED_NAMES = new Set(require('../utils/js-reserved.json'))
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'disallow usage of `this` in template',
+      categories: ['vue3-recommended', 'recommended'],
+      url: 'https://eslint.vuejs.org/rules/this-in-template.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        enum: ['always', 'never']
+      }
+    ]
+  },
+
+  /**
+   * Creates AST event handlers for this-in-template.
+   *
+   * @param {RuleContext} context - The rule context.
+   * @returns {Object} AST event handlers.
+   */
+  create(context) {
+    const options = context.options[0] !== 'always' ? 'never' : 'always'
+    /**
+     * @typedef {object} ScopeStack
+     * @property {ScopeStack | null} parent
+     * @property {Identifier[]} nodes
+     */
+
+    /** @type {ScopeStack | null} */
+    let scopeStack = null
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VElement} node */
+      VElement(node) {
+        scopeStack = {
+          parent: scopeStack,
+          nodes: scopeStack
+            ? scopeStack.nodes.slice() // make copy
+            : []
+        }
+        if (node.variables) {
+          for (const variable of node.variables) {
+            const varNode = variable.id
+            const name = varNode.name
+            if (!scopeStack.nodes.some((node) => node.name === name)) {
+              // Prevent adding duplicates
+              scopeStack.nodes.push(varNode)
+            }
+          }
+        }
+      },
+      'VElement:exit'() {
+        scopeStack = scopeStack && scopeStack.parent
+      },
+      ...(options === 'never'
+        ? {
+            /** @param { ThisExpression & { parent: MemberExpression } } node */
+            'VExpressionContainer MemberExpression > ThisExpression'(node) {
+              if (!scopeStack) {
+                return
+              }
+              const propertyName = utils.getStaticPropertyName(node.parent)
+              if (
+                !propertyName ||
+                scopeStack.nodes.some((el) => el.name === propertyName) ||
+                RESERVED_NAMES.has(propertyName) || // this.class | this['class']
+                /^[0-9].*$|[^a-zA-Z0-9_]/.test(propertyName) // this['0aaaa'] | this['foo-bar bas']
+              ) {
+                return
+              }
+
+              context.report({
+                node,
+                loc: node.loc,
+                message: "Unexpected usage of 'this'."
+              })
+            }
+          }
+        : {
+            /** @param {VExpressionContainer} node */
+            VExpressionContainer(node) {
+              if (!scopeStack) {
+                return
+              }
+              if (node.parent.type === 'VDirectiveKey') {
+                // We cannot use `.` in dynamic arguments because the right of the `.` becomes a modifier.
+                // For example, In `:[this.prop]` case, `:[this` is an argument and `prop]` is a modifier.
+                return
+              }
+              if (node.references) {
+                for (const reference of node.references) {
+                  if (
+                    !scopeStack.nodes.some(
+                      (el) => el.name === reference.id.name
+                    )
+                  ) {
+                    context.report({
+                      node: reference.id,
+                      loc: reference.id.loc,
+                      message: "Expected 'this'."
+                    })
+                  }
+                }
+              }
+            }
+          })
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/use-v-on-exact.js b/server/node_modules/eslint-plugin-vue/lib/rules/use-v-on-exact.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a1790658a106cdaa36903e05d6ae83897c31ae9
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/use-v-on-exact.js
@@ -0,0 +1,228 @@
+/**
+ * @fileoverview enforce usage of `exact` modifier on `v-on`.
+ * @author Armano
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+/**
+ * @typedef { {name: string, node: VDirectiveKey, modifiers: string[] } } EventDirective
+ */
+
+const utils = require('../utils')
+
+const SYSTEM_MODIFIERS = new Set(['ctrl', 'shift', 'alt', 'meta'])
+const GLOBAL_MODIFIERS = new Set([
+  'stop',
+  'prevent',
+  'capture',
+  'self',
+  'once',
+  'passive',
+  'native'
+])
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Finds and returns all keys for event directives
+ *
+ * @param {VStartTag} startTag Element startTag
+ * @param {SourceCode} sourceCode The source code object.
+ * @returns {EventDirective[]} [{ name, node, modifiers }]
+ */
+function getEventDirectives(startTag, sourceCode) {
+  return utils.getDirectives(startTag, 'on').map((attribute) => ({
+    name: attribute.key.argument
+      ? sourceCode.getText(attribute.key.argument)
+      : '',
+    node: attribute.key,
+    modifiers: attribute.key.modifiers.map((modifier) => modifier.name)
+  }))
+}
+
+/**
+ * Checks whether given modifier is key modifier
+ *
+ * @param {string} modifier
+ * @returns {boolean}
+ */
+function isKeyModifier(modifier) {
+  return !GLOBAL_MODIFIERS.has(modifier) && !SYSTEM_MODIFIERS.has(modifier)
+}
+
+/**
+ * Checks whether given modifier is system one
+ *
+ * @param {string} modifier
+ * @returns {boolean}
+ */
+function isSystemModifier(modifier) {
+  return SYSTEM_MODIFIERS.has(modifier)
+}
+
+/**
+ * Checks whether given any of provided modifiers
+ * has system modifier
+ *
+ * @param {string[]} modifiers
+ * @returns {boolean}
+ */
+function hasSystemModifier(modifiers) {
+  return modifiers.some(isSystemModifier)
+}
+
+/**
+ * Groups all events in object,
+ * with keys represinting each event name
+ *
+ * @param {EventDirective[]} events
+ * @returns { { [key: string]: EventDirective[]  } } { click: [], keypress: [] }
+ */
+function groupEvents(events) {
+  return events.reduce((acc, event) => {
+    if (acc[event.name]) {
+      acc[event.name].push(event)
+    } else {
+      acc[event.name] = [event]
+    }
+    return acc
+  }, /** @type { { [key: string]: EventDirective[] } }*/ ({}))
+}
+
+/**
+ * Creates alphabetically sorted string with system modifiers
+ *
+ * @param {string[]} modifiers
+ * @returns {string} e.g. "alt,ctrl,del,shift"
+ */
+function getSystemModifiersString(modifiers) {
+  return modifiers.filter(isSystemModifier).sort().join(',')
+}
+
+/**
+ * Creates alphabetically sorted string with key modifiers
+ *
+ * @param {string[]} modifiers
+ * @returns {string} e.g. "enter,tab"
+ */
+function getKeyModifiersString(modifiers) {
+  return modifiers.filter(isKeyModifier).sort().join(',')
+}
+
+/**
+ * Compares two events based on their modifiers
+ * to detect possible event leakeage
+ *
+ * @param {EventDirective} baseEvent
+ * @param {EventDirective} event
+ * @returns {boolean}
+ */
+function hasConflictedModifiers(baseEvent, event) {
+  if (event.node === baseEvent.node || event.modifiers.includes('exact'))
+    return false
+
+  const eventKeyModifiers = getKeyModifiersString(event.modifiers)
+  const baseEventKeyModifiers = getKeyModifiersString(baseEvent.modifiers)
+
+  if (
+    eventKeyModifiers &&
+    baseEventKeyModifiers &&
+    eventKeyModifiers !== baseEventKeyModifiers
+  )
+    return false
+
+  const eventSystemModifiers = getSystemModifiersString(event.modifiers)
+  const baseEventSystemModifiers = getSystemModifiersString(baseEvent.modifiers)
+
+  return (
+    baseEvent.modifiers.length >= 1 &&
+    baseEventSystemModifiers !== eventSystemModifiers &&
+    baseEventSystemModifiers.indexOf(eventSystemModifiers) > -1
+  )
+}
+
+/**
+ * Searches for events that might conflict with each other
+ *
+ * @param {EventDirective[]} events
+ * @returns {EventDirective[]} conflicted events, without duplicates
+ */
+function findConflictedEvents(events) {
+  return events.reduce((acc, event) => {
+    return [
+      ...acc,
+      ...events
+        .filter((evt) => !acc.find((e) => evt === e)) // No duplicates
+        .filter(hasConflictedModifiers.bind(null, event))
+    ]
+  }, /** @type {EventDirective[]} */ ([]))
+}
+
+// ------------------------------------------------------------------------------
+// Rule details
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'enforce usage of `exact` modifier on `v-on`',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/use-v-on-exact.html'
+    },
+    fixable: null,
+    schema: []
+  },
+
+  /**
+   * Creates AST event handlers for use-v-on-exact.
+   *
+   * @param {RuleContext} context - The rule context.
+   * @returns {Object} AST event handlers.
+   */
+  create(context) {
+    const sourceCode = context.getSourceCode()
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VStartTag} node */
+      VStartTag(node) {
+        if (node.attributes.length === 0) return
+
+        const isCustomComponent = utils.isCustomComponent(node.parent)
+        let events = getEventDirectives(node, sourceCode)
+
+        if (isCustomComponent) {
+          // For components consider only events with `native` modifier
+          events = events.filter((event) => event.modifiers.includes('native'))
+        }
+
+        const grouppedEvents = groupEvents(events)
+
+        Object.keys(grouppedEvents).forEach((eventName) => {
+          const eventsInGroup = grouppedEvents[eventName]
+          const hasEventWithKeyModifier = eventsInGroup.some((event) =>
+            hasSystemModifier(event.modifiers)
+          )
+
+          if (!hasEventWithKeyModifier) return
+
+          const conflictedEvents = findConflictedEvents(eventsInGroup)
+
+          conflictedEvents.forEach((e) => {
+            context.report({
+              node: e.node,
+              loc: e.node.loc,
+              message: "Consider to use '.exact' modifier."
+            })
+          })
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/v-bind-style.js b/server/node_modules/eslint-plugin-vue/lib/rules/v-bind-style.js
new file mode 100644
index 0000000000000000000000000000000000000000..e6878a3491a1e818d2c0c36e78f5c665935f8126
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/v-bind-style.js
@@ -0,0 +1,76 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'enforce `v-bind` directive style',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/v-bind-style.html'
+    },
+    fixable: 'code',
+    schema: [{ enum: ['shorthand', 'longform'] }]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const preferShorthand = context.options[0] !== 'longform'
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='bind'][key.argument!=null]"(
+        node
+      ) {
+        const shorthandProp = node.key.name.rawName === '.'
+        const shorthand = node.key.name.rawName === ':' || shorthandProp
+        if (shorthand === preferShorthand) {
+          return
+        }
+
+        context.report({
+          node,
+          loc: node.loc,
+          message: preferShorthand
+            ? "Unexpected 'v-bind' before ':'."
+            : shorthandProp
+            ? "Expected 'v-bind:' instead of '.'."
+            : /* otherwise */ "Expected 'v-bind' before ':'.",
+          *fix(fixer) {
+            if (preferShorthand) {
+              yield fixer.remove(node.key.name)
+            } else {
+              yield fixer.insertTextBefore(node, 'v-bind')
+
+              if (shorthandProp) {
+                // Replace `.` by `:`.
+                yield fixer.replaceText(node.key.name, ':')
+
+                // Insert `.prop` modifier if it doesn't exist.
+                const modifier = node.key.modifiers[0]
+                const isAutoGeneratedPropModifier =
+                  modifier.name === 'prop' && modifier.rawName === ''
+                if (isAutoGeneratedPropModifier) {
+                  yield fixer.insertTextBefore(modifier, '.prop')
+                }
+              }
+            }
+          }
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/v-for-delimiter-style.js b/server/node_modules/eslint-plugin-vue/lib/rules/v-for-delimiter-style.js
new file mode 100644
index 0000000000000000000000000000000000000000..ef0086cfe4fb964c5c0667ef57087045b53a7cad
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/v-for-delimiter-style.js
@@ -0,0 +1,69 @@
+/**
+ * @fileoverview enforce `v-for` directive's delimiter style
+ * @author Flo Edelmann
+ * @copyright 2020 Flo Edelmann. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'layout',
+    docs: {
+      description: "enforce `v-for` directive's delimiter style",
+      categories: undefined,
+      recommended: false,
+      url: 'https://eslint.vuejs.org/rules/v-for-delimiter-style.html'
+    },
+    fixable: 'code',
+    schema: [{ enum: ['in', 'of'] }]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const preferredDelimiter =
+      /** @type {string|undefined} */ (context.options[0]) || 'in'
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VForExpression} node */
+      VForExpression(node) {
+        const tokenStore =
+          context.parserServices.getTemplateBodyTokenStore &&
+          context.parserServices.getTemplateBodyTokenStore()
+
+        const delimiterToken = /** @type {Token} */ (tokenStore.getTokenAfter(
+          node.left.length
+            ? node.left[node.left.length - 1]
+            : tokenStore.getFirstToken(node),
+          (token) => token.type !== 'Punctuator' || token.value !== ')'
+        ))
+
+        if (delimiterToken.value === preferredDelimiter) {
+          return
+        }
+
+        context.report({
+          node,
+          loc: node.loc,
+          message: `Expected '{{preferredDelimiter}}' instead of '{{usedDelimiter}}' in 'v-for'.`,
+          data: {
+            preferredDelimiter,
+            usedDelimiter: delimiterToken.value
+          },
+          *fix(fixer) {
+            yield fixer.replaceText(delimiterToken, preferredDelimiter)
+          }
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/v-on-function-call.js b/server/node_modules/eslint-plugin-vue/lib/rules/v-on-function-call.js
new file mode 100644
index 0000000000000000000000000000000000000000..90da5ed43907e2f555f3c5105bfc0b5aaecefdac
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/v-on-function-call.js
@@ -0,0 +1,209 @@
+/**
+ * @author Niklas Higi
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+/**
+ * @typedef { import('../utils').ComponentPropertyData } ComponentPropertyData
+ */
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Check whether the given token is a quote.
+ * @param {Token} token The token to check.
+ * @returns {boolean} `true` if the token is a quote.
+ */
+function isQuote(token) {
+  return (
+    token != null &&
+    token.type === 'Punctuator' &&
+    (token.value === '"' || token.value === "'")
+  )
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description:
+        'enforce or forbid parentheses after method calls without arguments in `v-on` directives',
+      categories: undefined,
+      url: 'https://eslint.vuejs.org/rules/v-on-function-call.html'
+    },
+    fixable: 'code',
+    schema: [
+      { enum: ['always', 'never'] },
+      {
+        type: 'object',
+        properties: {
+          ignoreIncludesComment: {
+            type: 'boolean'
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const always = context.options[0] === 'always'
+
+    /**
+     * @param {VOnExpression} node
+     * @returns {CallExpression | null}
+     */
+    function getInvalidNeverCallExpression(node) {
+      /** @type {ExpressionStatement} */
+      let exprStatement
+      let body = node.body
+      while (true) {
+        const statements = body.filter((st) => st.type !== 'EmptyStatement')
+        if (statements.length !== 1) {
+          return null
+        }
+        const statement = statements[0]
+        if (statement.type === 'ExpressionStatement') {
+          exprStatement = statement
+          break
+        }
+        if (statement.type === 'BlockStatement') {
+          body = statement.body
+          continue
+        }
+        return null
+      }
+      const expression = exprStatement.expression
+      if (expression.type !== 'CallExpression' || expression.arguments.length) {
+        return null
+      }
+      if (expression.optional) {
+        // Allow optional chaining
+        return null
+      }
+      const callee = expression.callee
+      if (callee.type !== 'Identifier') {
+        return null
+      }
+      return expression
+    }
+
+    if (always) {
+      return utils.defineTemplateBodyVisitor(context, {
+        /** @param {Identifier} node */
+        "VAttribute[directive=true][key.name.name='on'][key.argument!=null] > VExpressionContainer > Identifier"(
+          node
+        ) {
+          context.report({
+            node,
+            message:
+              "Method calls inside of 'v-on' directives must have parentheses."
+          })
+        }
+      })
+    }
+
+    const option = context.options[1] || {}
+    const ignoreIncludesComment = !!option.ignoreIncludesComment
+    /** @type {Set<string>} */
+    const useArgsMethods = new Set()
+
+    return utils.defineTemplateBodyVisitor(
+      context,
+      {
+        /** @param {VOnExpression} node */
+        "VAttribute[directive=true][key.name.name='on'][key.argument!=null] VOnExpression"(
+          node
+        ) {
+          const expression = getInvalidNeverCallExpression(node)
+          if (!expression) {
+            return
+          }
+
+          const tokenStore = context.parserServices.getTemplateBodyTokenStore()
+          const tokens = tokenStore.getTokens(node.parent, {
+            includeComments: true
+          })
+          /** @type {Token | undefined} */
+          let leftQuote
+          /** @type {Token | undefined} */
+          let rightQuote
+          if (isQuote(tokens[0])) {
+            leftQuote = tokens.shift()
+            rightQuote = tokens.pop()
+          }
+
+          const hasComment = tokens.some(
+            (token) => token.type === 'Block' || token.type === 'Line'
+          )
+
+          if (ignoreIncludesComment && hasComment) {
+            return
+          }
+
+          if (expression.callee.type === 'Identifier') {
+            if (useArgsMethods.has(expression.callee.name)) {
+              // The behavior of target method can change given the arguments.
+              return
+            }
+          }
+
+          context.report({
+            node: expression,
+            message:
+              "Method calls without arguments inside of 'v-on' directives must not have parentheses.",
+            fix: hasComment
+              ? null /* The comment is included and cannot be fixed. */
+              : (fixer) => {
+                  /** @type {Range} */
+                  const range =
+                    leftQuote && rightQuote
+                      ? [leftQuote.range[1], rightQuote.range[0]]
+                      : [tokens[0].range[0], tokens[tokens.length - 1].range[1]]
+
+                  return fixer.replaceTextRange(
+                    range,
+                    context.getSourceCode().getText(expression.callee)
+                  )
+                }
+          })
+        }
+      },
+      utils.defineVueVisitor(context, {
+        onVueObjectEnter(node) {
+          for (const method of utils.iterateProperties(
+            node,
+            new Set(['methods'])
+          )) {
+            if (useArgsMethods.has(method.name)) {
+              continue
+            }
+            if (method.type !== 'object') {
+              continue
+            }
+            const value = method.property.value
+            if (
+              (value.type === 'FunctionExpression' ||
+                value.type === 'ArrowFunctionExpression') &&
+              value.params.length > 0
+            ) {
+              useArgsMethods.add(method.name)
+            }
+          }
+        }
+      })
+    )
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/v-on-style.js b/server/node_modules/eslint-plugin-vue/lib/rules/v-on-style.js
new file mode 100644
index 0000000000000000000000000000000000000000..4649aacf9ef79faa57b1a341b2a2f63bbc45a9b7
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/v-on-style.js
@@ -0,0 +1,58 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'enforce `v-on` directive style',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/v-on-style.html'
+    },
+    fixable: 'code',
+    schema: [{ enum: ['shorthand', 'longform'] }]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const preferShorthand = context.options[0] !== 'longform'
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='on'][key.argument!=null]"(
+        node
+      ) {
+        const shorthand = node.key.name.rawName === '@'
+        if (shorthand === preferShorthand) {
+          return
+        }
+
+        const pos = node.range[0]
+        context.report({
+          node,
+          loc: node.loc,
+          message: preferShorthand
+            ? "Expected '@' instead of 'v-on:'."
+            : "Expected 'v-on:' instead of '@'.",
+          fix: (fixer) =>
+            preferShorthand
+              ? fixer.replaceTextRange([pos, pos + 5], '@')
+              : fixer.replaceTextRange([pos, pos + 1], 'v-on:')
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/v-slot-style.js b/server/node_modules/eslint-plugin-vue/lib/rules/v-slot-style.js
new file mode 100644
index 0000000000000000000000000000000000000000..f0cbe36106fbe991954edbe3c4fe6b90ed2dc4d2
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/v-slot-style.js
@@ -0,0 +1,155 @@
+/**
+ * @author Toru Nagashima
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const { pascalCase } = require('../utils/casing')
+const utils = require('../utils')
+
+/**
+ * @typedef {Object} Options
+ * @property {"shorthand" | "longform" | "v-slot"} atComponent The style for the default slot at a custom component directly.
+ * @property {"shorthand" | "longform" | "v-slot"} default The style for the default slot at a template wrapper.
+ * @property {"shorthand" | "longform"} named The style for named slots at a template wrapper.
+ */
+
+/**
+ * Normalize options.
+ * @param {any} options The raw options to normalize.
+ * @returns {Options} The normalized options.
+ */
+function normalizeOptions(options) {
+  /** @type {Options} */
+  const normalized = {
+    atComponent: 'v-slot',
+    default: 'shorthand',
+    named: 'shorthand'
+  }
+
+  if (typeof options === 'string') {
+    normalized.atComponent = normalized.default = normalized.named = /** @type {"shorthand" | "longform"} */ (options)
+  } else if (options != null) {
+    /** @type {(keyof Options)[]} */
+    const keys = ['atComponent', 'default', 'named']
+    for (const key of keys) {
+      if (options[key] != null) {
+        normalized[key] = options[key]
+      }
+    }
+  }
+
+  return normalized
+}
+
+/**
+ * Get the expected style.
+ * @param {Options} options The options that defined expected types.
+ * @param {VDirective} node The `v-slot` node to check.
+ * @returns {"shorthand" | "longform" | "v-slot"} The expected style.
+ */
+function getExpectedStyle(options, node) {
+  const { argument } = node.key
+
+  if (
+    argument == null ||
+    (argument.type === 'VIdentifier' && argument.name === 'default')
+  ) {
+    const element = node.parent.parent
+    return element.name === 'template' ? options.default : options.atComponent
+  }
+  return options.named
+}
+
+/**
+ * Get the expected style.
+ * @param {VDirective} node The `v-slot` node to check.
+ * @returns {"shorthand" | "longform" | "v-slot"} The expected style.
+ */
+function getActualStyle(node) {
+  const { name, argument } = node.key
+
+  if (name.rawName === '#') {
+    return 'shorthand'
+  }
+  if (argument != null) {
+    return 'longform'
+  }
+  return 'v-slot'
+}
+
+module.exports = {
+  meta: {
+    type: 'suggestion',
+    docs: {
+      description: 'enforce `v-slot` directive style',
+      categories: ['vue3-strongly-recommended', 'strongly-recommended'],
+      url: 'https://eslint.vuejs.org/rules/v-slot-style.html'
+    },
+    fixable: 'code',
+    schema: [
+      {
+        anyOf: [
+          { enum: ['shorthand', 'longform'] },
+          {
+            type: 'object',
+            properties: {
+              atComponent: { enum: ['shorthand', 'longform', 'v-slot'] },
+              default: { enum: ['shorthand', 'longform', 'v-slot'] },
+              named: { enum: ['shorthand', 'longform'] }
+            },
+            additionalProperties: false
+          }
+        ]
+      }
+    ],
+    messages: {
+      expectedShorthand: "Expected '#{{argument}}' instead of '{{actual}}'.",
+      expectedLongform:
+        "Expected 'v-slot:{{argument}}' instead of '{{actual}}'.",
+      expectedVSlot: "Expected 'v-slot' instead of '{{actual}}'."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const sourceCode = context.getSourceCode()
+    const options = normalizeOptions(context.options[0])
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='slot']"(node) {
+        const expected = getExpectedStyle(options, node)
+        const actual = getActualStyle(node)
+        if (actual === expected) {
+          return
+        }
+
+        const { name, argument } = node.key
+        /** @type {Range} */
+        const range = [name.range[0], (argument || name).range[1]]
+        const argumentText = argument ? sourceCode.getText(argument) : 'default'
+        context.report({
+          node,
+          messageId: `expected${pascalCase(expected)}`,
+          data: {
+            actual: sourceCode.text.slice(range[0], range[1]),
+            argument: argumentText
+          },
+
+          fix(fixer) {
+            switch (expected) {
+              case 'shorthand':
+                return fixer.replaceTextRange(range, `#${argumentText}`)
+              case 'longform':
+                return fixer.replaceTextRange(range, `v-slot:${argumentText}`)
+              case 'v-slot':
+                return fixer.replaceTextRange(range, 'v-slot')
+              default:
+                return null
+            }
+          }
+        })
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-template-root.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-template-root.js
new file mode 100644
index 0000000000000000000000000000000000000000..703ab8b8e85c8bb79413710479354e792e7ee599
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-template-root.js
@@ -0,0 +1,69 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid template root',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-template-root.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const sourceCode = context.getSourceCode()
+
+    return {
+      /** @param {Program} program */
+      Program(program) {
+        const element = program.templateBody
+        if (element == null) {
+          return
+        }
+
+        const hasSrc = utils.hasAttribute(element, 'src')
+        const rootElements = []
+
+        for (const child of element.children) {
+          if (sourceCode.getText(child).trim() !== '') {
+            rootElements.push(child)
+          }
+        }
+
+        if (hasSrc && rootElements.length) {
+          for (const element of rootElements) {
+            context.report({
+              node: element,
+              loc: element.loc,
+              message:
+                "The template root with 'src' attribute is required to be empty."
+            })
+          }
+        } else if (rootElements.length === 0 && !hasSrc) {
+          context.report({
+            node: element,
+            loc: element.loc,
+            message: 'The template requires child element.'
+          })
+        }
+      }
+    }
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-bind-sync.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-bind-sync.js
new file mode 100644
index 0000000000000000000000000000000000000000..945ab0a774182b46e4713d97b760a2537d04afef
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-bind-sync.js
@@ -0,0 +1,175 @@
+/**
+ * @fileoverview enforce valid `.sync` modifier on `v-bind` directives
+ * @author Yosuke Ota
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Check whether the given node is valid or not.
+ * @param {VElement} node The element node to check.
+ * @returns {boolean} `true` if the node is valid.
+ */
+function isValidElement(node) {
+  if (!utils.isCustomComponent(node)) {
+    // non Vue-component
+    return false
+  }
+  return true
+}
+
+/**
+ * Check whether the given node is a MemberExpression containing an optional chaining.
+ * e.g.
+ * - `a?.b`
+ * - `a?.b.c`
+ * @param {ASTNode} node The node to check.
+ * @returns {boolean} `true` if the node is a MemberExpression containing an optional chaining.
+ */
+function isOptionalChainingMemberExpression(node) {
+  return (
+    node.type === 'ChainExpression' &&
+    node.expression.type === 'MemberExpression'
+  )
+}
+
+/**
+ * Check whether the given node can be LHS (left-hand side).
+ * @param {ASTNode} node The node to check.
+ * @returns {boolean} `true` if the node can be LHS.
+ */
+function isLhs(node) {
+  return node.type === 'Identifier' || node.type === 'MemberExpression'
+}
+
+/**
+ * Check whether the given node is a MemberExpression of a possibly null object.
+ * e.g.
+ * - `(a?.b).c`
+ * - `(null).foo`
+ * @param {ASTNode} node The node to check.
+ * @returns {boolean} `true` if the node is a MemberExpression of a possibly null object.
+ */
+function maybeNullObjectMemberExpression(node) {
+  if (node.type !== 'MemberExpression') {
+    return false
+  }
+  const { object } = node
+  if (object.type === 'ChainExpression') {
+    // `(a?.b).c`
+    return true
+  }
+  if (object.type === 'Literal' && object.value === null && !object.bigint) {
+    // `(null).foo`
+    return true
+  }
+  if (object.type === 'MemberExpression') {
+    return maybeNullObjectMemberExpression(object)
+  }
+  return false
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `.sync` modifier on `v-bind` directives',
+      categories: ['essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-bind-sync.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      unexpectedInvalidElement:
+        "'.sync' modifiers aren't supported on <{{name}}> non Vue-components.",
+      unexpectedOptionalChaining:
+        "Optional chaining cannot appear in 'v-bind' with '.sync' modifiers.",
+      unexpectedNonLhsExpression:
+        "'.sync' modifiers require the attribute value which is valid as LHS.",
+      unexpectedNullObject:
+        "'.sync' modifier has potential null object property access.",
+      unexpectedUpdateIterationVariable:
+        "'.sync' modifiers cannot update the iteration variable '{{varName}}' itself."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='bind']"(node) {
+        if (!node.key.modifiers.map((mod) => mod.name).includes('sync')) {
+          return
+        }
+        const element = node.parent.parent
+        const name = element.name
+
+        if (!isValidElement(element)) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'unexpectedInvalidElement',
+            data: { name }
+          })
+        }
+
+        if (!node.value) {
+          return
+        }
+
+        const expression = node.value.expression
+        if (!expression) {
+          // Parsing error
+          return
+        }
+        if (isOptionalChainingMemberExpression(expression)) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'unexpectedOptionalChaining'
+          })
+        } else if (!isLhs(expression)) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'unexpectedNonLhsExpression'
+          })
+        } else if (maybeNullObjectMemberExpression(expression)) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'unexpectedNullObject'
+          })
+        }
+
+        for (const reference of node.value.references) {
+          const id = reference.id
+          if (id.parent.type !== 'VExpressionContainer') {
+            continue
+          }
+          const variable = reference.variable
+          if (variable) {
+            context.report({
+              node,
+              loc: node.loc,
+              messageId: 'unexpectedUpdateIterationVariable',
+              data: { varName: id.name }
+            })
+          }
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-bind.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-bind.js
new file mode 100644
index 0000000000000000000000000000000000000000..385272f71d7b3cdca4f56a5e2025f59b0c4a644c
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-bind.js
@@ -0,0 +1,62 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+const VALID_MODIFIERS = new Set(['prop', 'camel', 'sync'])
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `v-bind` directives',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-bind.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='bind']"(node) {
+        for (const modifier of node.key.modifiers) {
+          if (!VALID_MODIFIERS.has(modifier.name)) {
+            context.report({
+              node,
+              loc: node.key.loc,
+              message:
+                "'v-bind' directives don't support the modifier '{{name}}'.",
+              data: { name: modifier.name }
+            })
+          }
+        }
+
+        if (!node.value || utils.isEmptyValueDirective(node, context)) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-bind' directives require an attribute value."
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-cloak.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-cloak.js
new file mode 100644
index 0000000000000000000000000000000000000000..4fd51d7816bda5209d452d557c333c79774d14c4
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-cloak.js
@@ -0,0 +1,58 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `v-cloak` directives',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-cloak.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='cloak']"(node) {
+        if (node.key.argument) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-cloak' directives require no argument."
+          })
+        }
+        if (node.key.modifiers.length > 0) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-cloak' directives require no modifier."
+          })
+        }
+        if (node.value) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-cloak' directives require no attribute value."
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-else-if.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-else-if.js
new file mode 100644
index 0000000000000000000000000000000000000000..aafe97b1caa38daf6b2e34d323b2181c37f36748
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-else-if.js
@@ -0,0 +1,84 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `v-else-if` directives',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-else-if.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='else-if']"(node) {
+        const element = node.parent.parent
+
+        if (!utils.prevElementHasIf(element)) {
+          context.report({
+            node,
+            loc: node.loc,
+            message:
+              "'v-else-if' directives require being preceded by the element which has a 'v-if' or 'v-else-if' directive."
+          })
+        }
+        if (utils.hasDirective(element, 'if')) {
+          context.report({
+            node,
+            loc: node.loc,
+            message:
+              "'v-else-if' and 'v-if' directives can't exist on the same element."
+          })
+        }
+        if (utils.hasDirective(element, 'else')) {
+          context.report({
+            node,
+            loc: node.loc,
+            message:
+              "'v-else-if' and 'v-else' directives can't exist on the same element."
+          })
+        }
+        if (node.key.argument) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-else-if' directives require no argument."
+          })
+        }
+        if (node.key.modifiers.length > 0) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-else-if' directives require no modifier."
+          })
+        }
+        if (!node.value || utils.isEmptyValueDirective(node, context)) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-else-if' directives require that attribute value."
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-else.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-else.js
new file mode 100644
index 0000000000000000000000000000000000000000..7a8542787797a14bfae3a2c763e159dc9227dbd7
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-else.js
@@ -0,0 +1,84 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `v-else` directives',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-else.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='else']"(node) {
+        const element = node.parent.parent
+
+        if (!utils.prevElementHasIf(element)) {
+          context.report({
+            node,
+            loc: node.loc,
+            message:
+              "'v-else' directives require being preceded by the element which has a 'v-if' or 'v-else-if' directive."
+          })
+        }
+        if (utils.hasDirective(element, 'if')) {
+          context.report({
+            node,
+            loc: node.loc,
+            message:
+              "'v-else' and 'v-if' directives can't exist on the same element. You may want 'v-else-if' directives."
+          })
+        }
+        if (utils.hasDirective(element, 'else-if')) {
+          context.report({
+            node,
+            loc: node.loc,
+            message:
+              "'v-else' and 'v-else-if' directives can't exist on the same element."
+          })
+        }
+        if (node.key.argument) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-else' directives require no argument."
+          })
+        }
+        if (node.key.modifiers.length > 0) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-else' directives require no modifier."
+          })
+        }
+        if (node.value) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-else' directives require no attribute value."
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-for.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-for.js
new file mode 100644
index 0000000000000000000000000000000000000000..0d560aa91b86b5973adcbaf4cfcf5cdcafc18fb5
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-for.js
@@ -0,0 +1,194 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Check whether the given attribute is using the variables which are defined by `v-for` directives.
+ * @param {VDirective} vFor The attribute node of `v-for` to check.
+ * @param {VDirective} vBindKey The attribute node of `v-bind:key` to check.
+ * @returns {boolean} `true` if the node is using the variables which are defined by `v-for` directives.
+ */
+function isUsingIterationVar(vFor, vBindKey) {
+  if (vBindKey.value == null) {
+    return false
+  }
+  const references = vBindKey.value.references
+  const variables = vFor.parent.parent.variables
+  return references.some((reference) =>
+    variables.some(
+      (variable) =>
+        variable.id.name === reference.id.name && variable.kind === 'v-for'
+    )
+  )
+}
+
+/**
+ * Check the child element in tempalte v-for about `v-bind:key` attributes.
+ * @param {RuleContext} context The rule context to report.
+ * @param {VDirective} vFor The attribute node of `v-for` to check.
+ * @param {VElement} child The child node to check.
+ */
+function checkChildKey(context, vFor, child) {
+  const childFor = utils.getDirective(child, 'for')
+  // if child has v-for, check if parent iterator is used in v-for
+  if (childFor != null) {
+    const childForRefs = (childFor.value && childFor.value.references) || []
+    const variables = vFor.parent.parent.variables
+    const usedInFor = childForRefs.some((cref) =>
+      variables.some(
+        (variable) =>
+          cref.id.name === variable.id.name && variable.kind === 'v-for'
+      )
+    )
+    // if parent iterator is used, skip other checks
+    // iterator usage will be checked later by child v-for
+    if (usedInFor) {
+      return
+    }
+  }
+  // otherwise, check if parent iterator is directly used in child's key
+  checkKey(context, vFor, child)
+}
+
+/**
+ * Check the given element about `v-bind:key` attributes.
+ * @param {RuleContext} context The rule context to report.
+ * @param {VDirective} vFor The attribute node of `v-for` to check.
+ * @param {VElement} element The element node to check.
+ */
+function checkKey(context, vFor, element) {
+  const vBindKey = utils.getDirective(element, 'bind', 'key')
+
+  if (vBindKey == null && element.name === 'template') {
+    for (const child of element.children) {
+      if (child.type === 'VElement') {
+        checkChildKey(context, vFor, child)
+      }
+    }
+    return
+  }
+
+  if (utils.isCustomComponent(element) && vBindKey == null) {
+    context.report({
+      node: element.startTag,
+      loc: element.startTag.loc,
+      message: "Custom elements in iteration require 'v-bind:key' directives."
+    })
+  }
+  if (vBindKey != null && !isUsingIterationVar(vFor, vBindKey)) {
+    context.report({
+      node: vBindKey,
+      loc: vBindKey.loc,
+      message:
+        "Expected 'v-bind:key' directive to use the variables which are defined by the 'v-for' directive."
+    })
+  }
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `v-for` directives',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-for.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const sourceCode = context.getSourceCode()
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='for']"(node) {
+        const element = node.parent.parent
+
+        checkKey(context, node, element)
+
+        if (node.key.argument) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-for' directives require no argument."
+          })
+        }
+        if (node.key.modifiers.length > 0) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-for' directives require no modifier."
+          })
+        }
+        if (!node.value || utils.isEmptyValueDirective(node, context)) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-for' directives require that attribute value."
+          })
+          return
+        }
+
+        const expr = node.value.expression
+        if (expr == null) {
+          return
+        }
+        if (expr.type !== 'VForExpression') {
+          context.report({
+            node: node.value,
+            loc: node.value.loc,
+            message:
+              "'v-for' directives require the special syntax '<alias> in <expression>'."
+          })
+          return
+        }
+
+        const lhs = expr.left
+        const value = lhs[0]
+        const key = lhs[1]
+        const index = lhs[2]
+
+        if (value === null) {
+          context.report({
+            node: expr,
+            message: "Invalid alias ''."
+          })
+        }
+        if (key !== undefined && (!key || key.type !== 'Identifier')) {
+          context.report({
+            node: key || expr,
+            loc: key && key.loc,
+            message: "Invalid alias '{{text}}'.",
+            data: { text: key ? sourceCode.getText(key) : '' }
+          })
+        }
+        if (index !== undefined && (!index || index.type !== 'Identifier')) {
+          context.report({
+            node: index || expr,
+            loc: index && index.loc,
+            message: "Invalid alias '{{text}}'.",
+            data: { text: index ? sourceCode.getText(index) : '' }
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-html.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-html.js
new file mode 100644
index 0000000000000000000000000000000000000000..d88997682498d9b3faf42e2131028128051a9480
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-html.js
@@ -0,0 +1,58 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `v-html` directives',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-html.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='html']"(node) {
+        if (node.key.argument) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-html' directives require no argument."
+          })
+        }
+        if (node.key.modifiers.length > 0) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-html' directives require no modifier."
+          })
+        }
+        if (!node.value || utils.isEmptyValueDirective(node, context)) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-html' directives require that attribute value."
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-if.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-if.js
new file mode 100644
index 0000000000000000000000000000000000000000..b61435ab08d2e9f1f54eafc70deaecc8232764c4
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-if.js
@@ -0,0 +1,76 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `v-if` directives',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-if.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='if']"(node) {
+        const element = node.parent.parent
+
+        if (utils.hasDirective(element, 'else')) {
+          context.report({
+            node,
+            loc: node.loc,
+            message:
+              "'v-if' and 'v-else' directives can't exist on the same element. You may want 'v-else-if' directives."
+          })
+        }
+        if (utils.hasDirective(element, 'else-if')) {
+          context.report({
+            node,
+            loc: node.loc,
+            message:
+              "'v-if' and 'v-else-if' directives can't exist on the same element."
+          })
+        }
+        if (node.key.argument) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-if' directives require no argument."
+          })
+        }
+        if (node.key.modifiers.length > 0) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-if' directives require no modifier."
+          })
+        }
+        if (!node.value || utils.isEmptyValueDirective(node, context)) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-if' directives require that attribute value."
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-is.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-is.js
new file mode 100644
index 0000000000000000000000000000000000000000..50fa1fb5ed26a7a571b7fb2ee6cc47b9677eee56
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-is.js
@@ -0,0 +1,95 @@
+/**
+ * @fileoverview enforce valid `v-is` directives
+ * @author Yosuke Ota
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Check whether the given node is valid or not.
+ * @param {VElement} node The element node to check.
+ * @returns {boolean} `true` if the node is valid.
+ */
+function isValidElement(node) {
+  if (
+    utils.isHtmlElementNode(node) &&
+    !utils.isHtmlWellKnownElementName(node.rawName)
+  ) {
+    // Vue-component
+    return false
+  }
+  return true
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `v-is` directives',
+      categories: ['vue3-essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-is.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      unexpectedArgument: "'v-is' directives require no argument.",
+      unexpectedModifier: "'v-is' directives require no modifier.",
+      expectedValue: "'v-is' directives require that attribute value.",
+      ownerMustBeHTMLElement:
+        "'v-is' directive must be owned by a native HTML element, but '{{name}}' is not."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      "VAttribute[directive=true][key.name.name='is']"(node) {
+        if (node.key.argument) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'unexpectedArgument'
+          })
+        }
+        if (node.key.modifiers.length > 0) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'unexpectedModifier'
+          })
+        }
+        if (!node.value || utils.isEmptyValueDirective(node, context)) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'expectedValue'
+          })
+        }
+
+        const element = node.parent.parent
+
+        if (!isValidElement(element)) {
+          const name = element.name
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'ownerMustBeHTMLElement',
+            data: { name }
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-model.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-model.js
new file mode 100644
index 0000000000000000000000000000000000000000..adfe9c2da9ee97a1e439e67f42e5165e490d361c
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-model.js
@@ -0,0 +1,250 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+const VALID_MODIFIERS = new Set(['lazy', 'number', 'trim'])
+
+/**
+ * Check whether the given node is valid or not.
+ * @param {VElement} node The element node to check.
+ * @returns {boolean} `true` if the node is valid.
+ */
+function isValidElement(node) {
+  const name = node.name
+  return (
+    name === 'input' ||
+    name === 'select' ||
+    name === 'textarea' ||
+    (name !== 'keep-alive' &&
+      name !== 'slot' &&
+      name !== 'transition' &&
+      name !== 'transition-group' &&
+      utils.isCustomComponent(node))
+  )
+}
+
+/**
+ * Check whether the given node is a MemberExpression containing an optional chaining.
+ * e.g.
+ * - `a?.b`
+ * - `a?.b.c`
+ * @param {ASTNode} node The node to check.
+ * @returns {boolean} `true` if the node is a MemberExpression containing an optional chaining.
+ */
+function isOptionalChainingMemberExpression(node) {
+  return (
+    node.type === 'ChainExpression' &&
+    node.expression.type === 'MemberExpression'
+  )
+}
+
+/**
+ * Check whether the given node can be LHS (left-hand side).
+ * @param {ASTNode} node The node to check.
+ * @returns {boolean} `true` if the node can be LHS.
+ */
+function isLhs(node) {
+  return node.type === 'Identifier' || node.type === 'MemberExpression'
+}
+
+/**
+ * Check whether the given node is a MemberExpression of a possibly null object.
+ * e.g.
+ * - `(a?.b).c`
+ * - `(null).foo`
+ * @param {ASTNode} node The node to check.
+ * @returns {boolean} `true` if the node is a MemberExpression of a possibly null object.
+ */
+function maybeNullObjectMemberExpression(node) {
+  if (node.type !== 'MemberExpression') {
+    return false
+  }
+  const { object } = node
+  if (object.type === 'ChainExpression') {
+    // `(a?.b).c`
+    return true
+  }
+  if (object.type === 'Literal' && object.value === null && !object.bigint) {
+    // `(null).foo`
+    return true
+  }
+  if (object.type === 'MemberExpression') {
+    return maybeNullObjectMemberExpression(object)
+  }
+  return false
+}
+
+/**
+ * Get the variable by names.
+ * @param {string} name The variable name to find.
+ * @param {VElement} leafNode The node to look up.
+ * @returns {VVariable|null} The found variable or null.
+ */
+function getVariable(name, leafNode) {
+  let node = leafNode
+
+  while (node != null) {
+    const variables = node.variables
+    const variable = variables && variables.find((v) => v.id.name === name)
+
+    if (variable != null) {
+      return variable
+    }
+
+    if (node.parent.type === 'VDocumentFragment') {
+      break
+    }
+
+    node = node.parent
+  }
+
+  return null
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+/** @type {RuleModule}  */
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `v-model` directives',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-model.html'
+    },
+    fixable: null,
+    schema: [],
+    messages: {
+      unexpectedInvalidElement:
+        "'v-model' directives aren't supported on <{{name}}> elements.",
+      unexpectedInputFile:
+        "'v-model' directives don't support 'file' input type.",
+      unexpectedArgument: "'v-model' directives require no argument.",
+      unexpectedModifier:
+        "'v-model' directives don't support the modifier '{{name}}'.",
+      missingValue: "'v-model' directives require that attribute value.",
+      unexpectedOptionalChaining:
+        "Optional chaining cannot appear in 'v-model' directives.",
+      unexpectedNonLhsExpression:
+        "'v-model' directives require the attribute value which is valid as LHS.",
+      unexpectedNullObject:
+        "'v-model' directive has potential null object property access.",
+      unexpectedUpdateIterationVariable:
+        "'v-model' directives cannot update the iteration variable '{{varName}}' itself."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='model']"(node) {
+        const element = node.parent.parent
+        const name = element.name
+
+        if (!isValidElement(element)) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'unexpectedInvalidElement',
+            data: { name }
+          })
+        }
+
+        if (name === 'input' && utils.hasAttribute(element, 'type', 'file')) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'unexpectedInputFile'
+          })
+        }
+
+        if (!utils.isCustomComponent(element)) {
+          if (node.key.argument) {
+            context.report({
+              node,
+              loc: node.loc,
+              messageId: 'unexpectedArgument'
+            })
+          }
+
+          for (const modifier of node.key.modifiers) {
+            if (!VALID_MODIFIERS.has(modifier.name)) {
+              context.report({
+                node,
+                loc: node.loc,
+                messageId: 'unexpectedModifier',
+                data: { name: modifier.name }
+              })
+            }
+          }
+        }
+
+        if (!node.value || utils.isEmptyValueDirective(node, context)) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'missingValue'
+          })
+          return
+        }
+        const expression = node.value.expression
+        if (!expression) {
+          // Parsing error
+          return
+        }
+        if (isOptionalChainingMemberExpression(expression)) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'unexpectedOptionalChaining'
+          })
+        } else if (!isLhs(expression)) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'unexpectedNonLhsExpression'
+          })
+        } else if (maybeNullObjectMemberExpression(expression)) {
+          context.report({
+            node,
+            loc: node.loc,
+            messageId: 'unexpectedNullObject'
+          })
+        }
+
+        for (const reference of node.value.references) {
+          const id = reference.id
+          if (id.parent.type !== 'VExpressionContainer') {
+            continue
+          }
+
+          const variable = getVariable(id.name, element)
+          if (variable != null) {
+            context.report({
+              node,
+              loc: node.loc,
+              messageId: 'unexpectedUpdateIterationVariable',
+
+              data: { varName: id.name }
+            })
+          }
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-on.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-on.js
new file mode 100644
index 0000000000000000000000000000000000000000..4d55d7f1992a8820e3b10d7249f80c21799353eb
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-on.js
@@ -0,0 +1,153 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+const keyAliases = require('../utils/key-aliases.json')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+const VALID_MODIFIERS = new Set([
+  'stop',
+  'prevent',
+  'capture',
+  'self',
+  'ctrl',
+  'shift',
+  'alt',
+  'meta',
+  'native',
+  'once',
+  'left',
+  'right',
+  'middle',
+  'passive',
+  'esc',
+  'tab',
+  'enter',
+  'space',
+  'up',
+  'left',
+  'right',
+  'down',
+  'delete',
+  'exact'
+])
+const VERB_MODIFIERS = new Set(['stop', 'prevent'])
+// https://www.w3.org/TR/uievents-key/
+const KEY_ALIASES = new Set(keyAliases)
+
+/**
+ * @param {VIdentifier} modifierNode
+ * @param {Set<string>} customModifiers
+ */
+function isValidModifier(modifierNode, customModifiers) {
+  const modifier = modifierNode.name
+  return (
+    // built-in aliases
+    VALID_MODIFIERS.has(modifier) ||
+    // keyCode
+    Number.isInteger(parseInt(modifier, 10)) ||
+    // keyAlias (an Unicode character)
+    Array.from(modifier).length === 1 ||
+    // keyAlias (special keys)
+    KEY_ALIASES.has(modifier) ||
+    // custom modifiers
+    customModifiers.has(modifier)
+  )
+}
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `v-on` directives',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-on.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          modifiers: {
+            type: 'array'
+          }
+        },
+        additionalProperties: false
+      }
+    ]
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const options = context.options[0] || {}
+    /** @type {Set<string>} */
+    const customModifiers = new Set(options.modifiers || [])
+    const sourceCode = context.getSourceCode()
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='on']"(node) {
+        for (const modifier of node.key.modifiers) {
+          if (!isValidModifier(modifier, customModifiers)) {
+            context.report({
+              node,
+              loc: node.loc,
+              message:
+                "'v-on' directives don't support the modifier '{{modifier}}'.",
+              data: { modifier: modifier.name }
+            })
+          }
+        }
+
+        if (
+          (!node.value || !node.value.expression) &&
+          !node.key.modifiers.some((modifier) =>
+            VERB_MODIFIERS.has(modifier.name)
+          )
+        ) {
+          if (node.value && !utils.isEmptyValueDirective(node, context)) {
+            const valueText = sourceCode.getText(node.value)
+            let innerText = valueText
+            if (
+              (valueText[0] === '"' || valueText[0] === "'") &&
+              valueText[0] === valueText[valueText.length - 1]
+            ) {
+              // quoted
+              innerText = valueText.slice(1, -1)
+            }
+            if (/^\w+$/.test(innerText)) {
+              context.report({
+                node,
+                loc: node.loc,
+                message:
+                  'Avoid using JavaScript keyword as "v-on" value: {{value}}.',
+                data: { value: valueText }
+              })
+            }
+          } else {
+            context.report({
+              node,
+              loc: node.loc,
+              message:
+                "'v-on' directives require a value or verb modifier (like 'stop' or 'prevent')."
+            })
+          }
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-once.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-once.js
new file mode 100644
index 0000000000000000000000000000000000000000..83ff3ddcf263882f934f34bca68014e77091fd20
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-once.js
@@ -0,0 +1,58 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `v-once` directives',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-once.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='once']"(node) {
+        if (node.key.argument) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-once' directives require no argument."
+          })
+        }
+        if (node.key.modifiers.length > 0) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-once' directives require no modifier."
+          })
+        }
+        if (node.value) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-once' directives require no attribute value."
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-pre.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-pre.js
new file mode 100644
index 0000000000000000000000000000000000000000..90174db12a55c416ac626371e852aa3539940440
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-pre.js
@@ -0,0 +1,58 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `v-pre` directives',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-pre.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='pre']"(node) {
+        if (node.key.argument) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-pre' directives require no argument."
+          })
+        }
+        if (node.key.modifiers.length > 0) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-pre' directives require no modifier."
+          })
+        }
+        if (node.value) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-pre' directives require no attribute value."
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-show.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-show.js
new file mode 100644
index 0000000000000000000000000000000000000000..d5378a63ab405de1fc2ef9d277cb5a04929e43cf
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-show.js
@@ -0,0 +1,58 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `v-show` directives',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-show.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='show']"(node) {
+        if (node.key.argument) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-show' directives require no argument."
+          })
+        }
+        if (node.key.modifiers.length > 0) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-show' directives require no modifier."
+          })
+        }
+        if (!node.value || utils.isEmptyValueDirective(node, context)) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-show' directives require that attribute value."
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-slot.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-slot.js
new file mode 100644
index 0000000000000000000000000000000000000000..f5ff3a0e7b7cfb9d416a607887388932fb14be9b
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-slot.js
@@ -0,0 +1,432 @@
+/**
+ * @author Toru Nagashima
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const utils = require('../utils')
+
+/**
+ * @typedef { { expr: VForExpression, variables: VVariable[] } } VSlotVForVariables
+ */
+
+/**
+ * Get all `v-slot` directives on a given element.
+ * @param {VElement} node The VElement node to check.
+ * @returns {VDirective[]} The array of `v-slot` directives.
+ */
+function getSlotDirectivesOnElement(node) {
+  return utils.getDirectives(node, 'slot')
+}
+
+/**
+ * Get all `v-slot` directives on the children of a given element.
+ * @param {VElement} node The VElement node to check.
+ * @returns {VDirective[][]}
+ * The array of the group of `v-slot` directives.
+ * The group bundles `v-slot` directives of element sequence which is connected
+ * by `v-if`/`v-else-if`/`v-else`.
+ */
+function getSlotDirectivesOnChildren(node) {
+  return node.children
+    .reduce(
+      ({ groups, vIf }, childNode) => {
+        if (childNode.type === 'VElement') {
+          let connected
+          if (utils.hasDirective(childNode, 'if')) {
+            connected = false
+            vIf = true
+          } else if (utils.hasDirective(childNode, 'else-if')) {
+            connected = vIf
+            vIf = true
+          } else if (utils.hasDirective(childNode, 'else')) {
+            connected = vIf
+            vIf = false
+          } else {
+            connected = false
+            vIf = false
+          }
+
+          if (connected) {
+            groups[groups.length - 1].push(childNode)
+          } else {
+            groups.push([childNode])
+          }
+        } else if (
+          childNode.type !== 'VText' ||
+          childNode.value.trim() !== ''
+        ) {
+          vIf = false
+        }
+        return { groups, vIf }
+      },
+      {
+        /** @type {VElement[][]} */
+        groups: [],
+        vIf: false
+      }
+    )
+    .groups.map((group) =>
+      group
+        .map((childElement) =>
+          childElement.name === 'template'
+            ? utils.getDirective(childElement, 'slot')
+            : null
+        )
+        .filter(utils.isDef)
+    )
+    .filter((group) => group.length >= 1)
+}
+
+/**
+ * Get the normalized name of a given `v-slot` directive node with modifiers after `v-slot:` directive.
+ * @param {VDirective} node The `v-slot` directive node.
+ * @param {SourceCode} sourceCode The source code.
+ * @returns {string} The normalized name.
+ */
+function getNormalizedName(node, sourceCode) {
+  if (node.key.argument == null) {
+    return 'default'
+  }
+  return node.key.modifiers.length === 0
+    ? sourceCode.getText(node.key.argument)
+    : sourceCode.text.slice(node.key.argument.range[0], node.key.range[1])
+}
+
+/**
+ * Get all `v-slot` directives which are distributed to the same slot as a given `v-slot` directive node.
+ * @param {VDirective[][]} vSlotGroups The result of `getAllNamedSlotElements()`.
+ * @param {VDirective} currentVSlot The current `v-slot` directive node.
+ * @param {VSlotVForVariables | null} currentVSlotVForVars The current `v-for` variables.
+ * @param {SourceCode} sourceCode The source code.
+ * @param {ParserServices.TokenStore} tokenStore The token store.
+ * @returns {VDirective[][]} The array of the group of `v-slot` directives.
+ */
+function filterSameSlot(
+  vSlotGroups,
+  currentVSlot,
+  currentVSlotVForVars,
+  sourceCode,
+  tokenStore
+) {
+  const currentName = getNormalizedName(currentVSlot, sourceCode)
+  return vSlotGroups
+    .map((vSlots) =>
+      vSlots.filter((vSlot) => {
+        if (getNormalizedName(vSlot, sourceCode) !== currentName) {
+          return false
+        }
+        const vForExpr = getVSlotVForVariableIfUsingIterationVars(
+          vSlot,
+          utils.getDirective(vSlot.parent.parent, 'for')
+        )
+        if (!currentVSlotVForVars || !vForExpr) {
+          return !currentVSlotVForVars && !vForExpr
+        }
+        if (
+          !equalVSlotVForVariables(currentVSlotVForVars, vForExpr, tokenStore)
+        ) {
+          return false
+        }
+        //
+        return true
+      })
+    )
+    .filter((slots) => slots.length >= 1)
+}
+
+/**
+ * Determines whether the two given `v-slot` variables are considered to be equal.
+ * @param {VSlotVForVariables} a First element.
+ * @param {VSlotVForVariables} b Second element.
+ * @param {ParserServices.TokenStore} tokenStore The token store.
+ * @returns {boolean} `true` if the elements are considered to be equal.
+ */
+function equalVSlotVForVariables(a, b, tokenStore) {
+  if (a.variables.length !== b.variables.length) {
+    return false
+  }
+  if (!equal(a.expr.right, b.expr.right)) {
+    return false
+  }
+
+  const checkedVarNames = new Set()
+  const len = Math.min(a.expr.left.length, b.expr.left.length)
+  for (let index = 0; index < len; index++) {
+    const aPtn = a.expr.left[index]
+    const bPtn = b.expr.left[index]
+
+    const aVar = a.variables.find(
+      (v) => aPtn.range[0] <= v.id.range[0] && v.id.range[1] <= aPtn.range[1]
+    )
+    const bVar = b.variables.find(
+      (v) => bPtn.range[0] <= v.id.range[0] && v.id.range[1] <= bPtn.range[1]
+    )
+    if (aVar && bVar) {
+      if (aVar.id.name !== bVar.id.name) {
+        return false
+      }
+      if (!equal(aPtn, bPtn)) {
+        return false
+      }
+      checkedVarNames.add(aVar.id.name)
+    } else if (aVar || bVar) {
+      return false
+    }
+  }
+  for (const v of a.variables) {
+    if (!checkedVarNames.has(v.id.name)) {
+      if (b.variables.every((bv) => v.id.name !== bv.id.name)) {
+        return false
+      }
+    }
+  }
+  return true
+
+  /**
+   * Determines whether the two given nodes are considered to be equal.
+   * @param {ASTNode} a First node.
+   * @param {ASTNode} b Second node.
+   * @returns {boolean} `true` if the nodes are considered to be equal.
+   */
+  function equal(a, b) {
+    if (a.type !== b.type) {
+      return false
+    }
+    return utils.equalTokens(a, b, tokenStore)
+  }
+}
+
+/**
+ * Gets the `v-for` directive and variable that provide the variables used by the given` v-slot` directive.
+ * @param {VDirective} vSlot The current `v-slot` directive node.
+ * @param {VDirective | null} [vFor] The current `v-for` directive node.
+ * @returns { VSlotVForVariables | null } The VSlotVForVariable.
+ */
+function getVSlotVForVariableIfUsingIterationVars(vSlot, vFor) {
+  const expr =
+    vFor && vFor.value && /** @type {VForExpression} */ (vFor.value.expression)
+  const variables =
+    expr && getUsingIterationVars(vSlot.key.argument, vSlot.parent.parent)
+  return expr && variables && variables.length ? { expr, variables } : null
+}
+
+/**
+ * Gets iterative variables if a given argument node is using iterative variables that the element defined.
+ * @param {VExpressionContainer|VIdentifier|null} argument The argument node to check.
+ * @param {VElement} element The element node which has the argument.
+ * @returns {VVariable[]} The argument node is using iteration variables.
+ */
+function getUsingIterationVars(argument, element) {
+  const vars = []
+  if (argument && argument.type === 'VExpressionContainer') {
+    for (const { variable } of argument.references) {
+      if (
+        variable != null &&
+        variable.kind === 'v-for' &&
+        variable.id.range[0] > element.startTag.range[0] &&
+        variable.id.range[1] < element.startTag.range[1]
+      ) {
+        vars.push(variable)
+      }
+    }
+  }
+  return vars
+}
+
+/**
+ * Check whether a given argument node is using an scope variable that the directive defined.
+ * @param {VDirective} vSlot The `v-slot` directive to check.
+ * @returns {boolean} `true` if that argument node is using a scope variable the directive defined.
+ */
+function isUsingScopeVar(vSlot) {
+  const argument = vSlot.key.argument
+  const value = vSlot.value
+
+  if (argument && value && argument.type === 'VExpressionContainer') {
+    for (const { variable } of argument.references) {
+      if (
+        variable != null &&
+        variable.kind === 'scope' &&
+        variable.id.range[0] > value.range[0] &&
+        variable.id.range[1] < value.range[1]
+      ) {
+        return true
+      }
+    }
+  }
+  return false
+}
+
+/**
+ * If `allowModifiers` option is set to `true`, check whether a given argument node has invalid modifiers like `v-slot.foo`.
+ * Otherwise, check whether a given argument node has at least one modifier.
+ * @param {VDirective} vSlot The `v-slot` directive to check.
+ * @param {boolean} allowModifiers `allowModifiers` option in context.
+ * @return {boolean} `true` if that argument node has invalid modifiers like `v-slot.foo`.
+ */
+function hasInvalidModifiers(vSlot, allowModifiers) {
+  return allowModifiers
+    ? vSlot.key.argument == null && vSlot.key.modifiers.length >= 1
+    : vSlot.key.modifiers.length >= 1
+}
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `v-slot` directives',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-slot.html'
+    },
+    fixable: null,
+    schema: [
+      {
+        type: 'object',
+        properties: {
+          allowModifiers: {
+            type: 'boolean'
+          }
+        }
+      }
+    ],
+    messages: {
+      ownerMustBeCustomElement:
+        "'v-slot' directive must be owned by a custom element, but '{{name}}' is not.",
+      namedSlotMustBeOnTemplate:
+        "Named slots must use '<template>' on a custom element.",
+      defaultSlotMustBeOnTemplate:
+        "Default slot must use '<template>' on a custom element when there are other named slots.",
+      disallowDuplicateSlotsOnElement:
+        "An element cannot have multiple 'v-slot' directives.",
+      disallowDuplicateSlotsOnChildren:
+        "An element cannot have multiple '<template>' elements which are distributed to the same slot.",
+      disallowArgumentUseSlotParams:
+        "Dynamic argument of 'v-slot' directive cannot use that slot parameter.",
+      disallowAnyModifier: "'v-slot' directive doesn't support any modifier.",
+      requireAttributeValue:
+        "'v-slot' directive on a custom element requires that attribute value."
+    }
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    const sourceCode = context.getSourceCode()
+    const tokenStore =
+      context.parserServices.getTemplateBodyTokenStore &&
+      context.parserServices.getTemplateBodyTokenStore()
+    const options = context.options[0] || {}
+    const allowModifiers = options.allowModifiers === true
+
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='slot']"(node) {
+        const isDefaultSlot =
+          node.key.argument == null ||
+          (node.key.argument.type === 'VIdentifier' &&
+            node.key.argument.name === 'default')
+        const element = node.parent.parent
+        const parentElement = element.parent
+        const ownerElement =
+          element.name === 'template' ? parentElement : element
+        if (ownerElement.type === 'VDocumentFragment') {
+          return
+        }
+        const vSlotsOnElement = getSlotDirectivesOnElement(element)
+        const vSlotGroupsOnChildren = getSlotDirectivesOnChildren(ownerElement)
+
+        // Verify location.
+        if (!utils.isCustomComponent(ownerElement)) {
+          context.report({
+            node,
+            messageId: 'ownerMustBeCustomElement',
+            data: { name: ownerElement.rawName }
+          })
+        }
+        if (!isDefaultSlot && element.name !== 'template') {
+          context.report({
+            node,
+            messageId: 'namedSlotMustBeOnTemplate'
+          })
+        }
+        if (ownerElement === element && vSlotGroupsOnChildren.length >= 1) {
+          context.report({
+            node,
+            messageId: 'defaultSlotMustBeOnTemplate'
+          })
+        }
+
+        // Verify duplication.
+        if (vSlotsOnElement.length >= 2 && vSlotsOnElement[0] !== node) {
+          // E.g., <my-component #one #two>
+          context.report({
+            node,
+            messageId: 'disallowDuplicateSlotsOnElement'
+          })
+        }
+        if (ownerElement === parentElement) {
+          const vFor = utils.getDirective(element, 'for')
+          const vSlotVForVar = getVSlotVForVariableIfUsingIterationVars(
+            node,
+            vFor
+          )
+          const vSlotGroupsOfSameSlot = filterSameSlot(
+            vSlotGroupsOnChildren,
+            node,
+            vSlotVForVar,
+            sourceCode,
+            tokenStore
+          )
+          if (
+            vSlotGroupsOfSameSlot.length >= 2 &&
+            !vSlotGroupsOfSameSlot[0].includes(node)
+          ) {
+            // E.g., <template #one></template>
+            //       <template #one></template>
+            context.report({
+              node,
+              messageId: 'disallowDuplicateSlotsOnChildren'
+            })
+          }
+          if (vFor && !vSlotVForVar) {
+            // E.g., <template v-for="x of xs" #one></template>
+            context.report({
+              node,
+              messageId: 'disallowDuplicateSlotsOnChildren'
+            })
+          }
+        }
+
+        // Verify argument.
+        if (isUsingScopeVar(node)) {
+          context.report({
+            node,
+            messageId: 'disallowArgumentUseSlotParams'
+          })
+        }
+
+        // Verify modifiers.
+        if (hasInvalidModifiers(node, allowModifiers)) {
+          // E.g., <template v-slot.foo>
+          context.report({
+            node,
+            messageId: 'disallowAnyModifier'
+          })
+        }
+
+        // Verify value.
+        if (
+          ownerElement === element &&
+          isDefaultSlot &&
+          (!node.value ||
+            utils.isEmptyValueDirective(node, context) ||
+            utils.isEmptyExpressionValueDirective(node, context))
+        ) {
+          context.report({
+            node,
+            messageId: 'requireAttributeValue'
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-text.js b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-text.js
new file mode 100644
index 0000000000000000000000000000000000000000..1e90ec68839ecd2ef3536a87746ea7d864259ae1
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/rules/valid-v-text.js
@@ -0,0 +1,58 @@
+/**
+ * @author Toru Nagashima
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const utils = require('../utils')
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  meta: {
+    type: 'problem',
+    docs: {
+      description: 'enforce valid `v-text` directives',
+      categories: ['vue3-essential', 'essential'],
+      url: 'https://eslint.vuejs.org/rules/valid-v-text.html'
+    },
+    fixable: null,
+    schema: []
+  },
+  /** @param {RuleContext} context */
+  create(context) {
+    return utils.defineTemplateBodyVisitor(context, {
+      /** @param {VDirective} node */
+      "VAttribute[directive=true][key.name.name='text']"(node) {
+        if (node.key.argument) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-text' directives require no argument."
+          })
+        }
+        if (node.key.modifiers.length > 0) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-text' directives require no modifier."
+          })
+        }
+        if (!node.value || utils.isEmptyValueDirective(node, context)) {
+          context.report({
+            node,
+            loc: node.loc,
+            message: "'v-text' directives require that attribute value."
+          })
+        }
+      }
+    })
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/utils/casing.js b/server/node_modules/eslint-plugin-vue/lib/utils/casing.js
new file mode 100644
index 0000000000000000000000000000000000000000..b2f2e89b58e39c9b31bc6eedd91863bcf8a93e32
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/utils/casing.js
@@ -0,0 +1,203 @@
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Capitalize a string.
+ * @param {string} str
+ */
+function capitalize(str) {
+  return str.charAt(0).toUpperCase() + str.slice(1)
+}
+/**
+ * Checks whether the given string has symbols.
+ * @param {string} str
+ */
+function hasSymbols(str) {
+  return /[!"#%&'()*+,./:;<=>?@[\\\]^`{|}]/u.exec(str) // without " ", "$", "-" and "_"
+}
+/**
+ * Checks whether the given string has upper.
+ * @param {string} str
+ */
+function hasUpper(str) {
+  return /[A-Z]/u.exec(str)
+}
+
+/**
+ * Convert text to kebab-case
+ * @param {string} str Text to be converted
+ * @return {string}
+ */
+function kebabCase(str) {
+  return str
+    .replace(/_/gu, '-')
+    .replace(/\B([A-Z])/gu, '-$1')
+    .toLowerCase()
+}
+
+/**
+ * Checks whether the given string is kebab-case.
+ * @param {string} str
+ */
+function isKebabCase(str) {
+  if (
+    hasUpper(str) ||
+    hasSymbols(str) ||
+    /^-/u.exec(str) || // starts with hyphen is not kebab-case
+    /_|--|\s/u.exec(str)
+  ) {
+    return false
+  }
+  return true
+}
+
+/**
+ * Convert text to snake_case
+ * @param {string} str Text to be converted
+ * @return {string}
+ */
+function snakeCase(str) {
+  return str
+    .replace(/\B([A-Z])/gu, '_$1')
+    .replace(/-/gu, '_')
+    .toLowerCase()
+}
+
+/**
+ * Checks whether the given string is snake_case.
+ * @param {string} str
+ */
+function isSnakeCase(str) {
+  if (hasUpper(str) || hasSymbols(str) || /-|__|\s/u.exec(str)) {
+    return false
+  }
+  return true
+}
+
+/**
+ * Convert text to camelCase
+ * @param {string} str Text to be converted
+ * @return {string} Converted string
+ */
+function camelCase(str) {
+  if (isPascalCase(str)) {
+    return str.charAt(0).toLowerCase() + str.slice(1)
+  }
+  return str.replace(/[-_](\w)/gu, (_, c) => (c ? c.toUpperCase() : ''))
+}
+
+/**
+ * Checks whether the given string is camelCase.
+ * @param {string} str
+ */
+function isCamelCase(str) {
+  if (
+    hasSymbols(str) ||
+    /^[A-Z]/u.exec(str) ||
+    /-|_|\s/u.exec(str) // kebab or snake or space
+  ) {
+    return false
+  }
+  return true
+}
+
+/**
+ * Convert text to PascalCase
+ * @param {string} str Text to be converted
+ * @return {string} Converted string
+ */
+function pascalCase(str) {
+  return capitalize(camelCase(str))
+}
+
+/**
+ * Checks whether the given string is PascalCase.
+ * @param {string} str
+ */
+function isPascalCase(str) {
+  if (
+    hasSymbols(str) ||
+    /^[a-z]/u.exec(str) ||
+    /-|_|\s/u.exec(str) // kebab or snake or space
+  ) {
+    return false
+  }
+  return true
+}
+
+const convertersMap = {
+  'kebab-case': kebabCase,
+  snake_case: snakeCase,
+  camelCase,
+  PascalCase: pascalCase
+}
+
+const checkersMap = {
+  'kebab-case': isKebabCase,
+  snake_case: isSnakeCase,
+  camelCase: isCamelCase,
+  PascalCase: isPascalCase
+}
+/**
+ * Return case checker
+ * @param { 'camelCase' | 'kebab-case' | 'PascalCase' | 'snake_case' } name type of checker to return ('camelCase', 'kebab-case', 'PascalCase')
+ * @return {isKebabCase|isCamelCase|isPascalCase|isSnakeCase}
+ */
+function getChecker(name) {
+  return checkersMap[name] || isPascalCase
+}
+
+/**
+ * Return case converter
+ * @param { 'camelCase' | 'kebab-case' | 'PascalCase' | 'snake_case' } name type of converter to return ('camelCase', 'kebab-case', 'PascalCase')
+ * @return {kebabCase|camelCase|pascalCase|snakeCase}
+ */
+function getConverter(name) {
+  return convertersMap[name] || pascalCase
+}
+
+module.exports = {
+  allowedCaseOptions: ['camelCase', 'kebab-case', 'PascalCase'],
+
+  /**
+   * Return case converter
+   * @param {string} name type of converter to return ('camelCase', 'kebab-case', 'PascalCase')
+   * @return {kebabCase|camelCase|pascalCase|snakeCase}
+   */
+  getConverter,
+
+  /**
+   * Return case checker
+   * @param {string} name type of checker to return ('camelCase', 'kebab-case', 'PascalCase')
+   * @return {isKebabCase|isCamelCase|isPascalCase|isSnakeCase}
+   */
+  getChecker,
+
+  /**
+   * Return case exact converter.
+   * If the converted result is not the correct case, the original value is returned.
+   * @param { 'camelCase' | 'kebab-case' | 'PascalCase' | 'snake_case' } name type of converter to return ('camelCase', 'kebab-case', 'PascalCase')
+   * @return {kebabCase|camelCase|pascalCase|snakeCase}
+   */
+  getExactConverter(name) {
+    const converter = getConverter(name)
+    const checker = getChecker(name)
+    return (str) => {
+      const result = converter(str)
+      return checker(result) ? result : str /* cannot convert */
+    }
+  },
+
+  camelCase,
+  pascalCase,
+  kebabCase,
+  snakeCase,
+
+  isCamelCase,
+  isPascalCase,
+  isKebabCase,
+  isSnakeCase,
+
+  capitalize
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/utils/deprecated-html-elements.json b/server/node_modules/eslint-plugin-vue/lib/utils/deprecated-html-elements.json
new file mode 100644
index 0000000000000000000000000000000000000000..daf23f51290e0f63d6a1349469555d8f9f0ec361
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/utils/deprecated-html-elements.json
@@ -0,0 +1 @@
+["acronym","applet","basefont","bgsound","big","blink","center","command","content","dir","element","font","frame","frameset","image","isindex","keygen","listing","marquee","menuitem","multicol","nextid","nobr","noembed","noframes","plaintext","shadow","spacer","strike","tt","xmp"]
\ No newline at end of file
diff --git a/server/node_modules/eslint-plugin-vue/lib/utils/html-comments.js b/server/node_modules/eslint-plugin-vue/lib/utils/html-comments.js
new file mode 100644
index 0000000000000000000000000000000000000000..aced46e71bf82ae239a160fa86a7889fdff43a68
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/utils/html-comments.js
@@ -0,0 +1,259 @@
+/**
+ * @typedef { { exceptions?: string[] } } CommentParserConfig
+ * @typedef { (comment: ParsedHTMLComment) => void } HTMLCommentVisitor
+ * @typedef { { includeDirectives?: boolean } } CommentVisitorOption
+ *
+ * @typedef { Token & { type: 'HTMLCommentOpen' } } HTMLCommentOpen
+ * @typedef { Token & { type: 'HTMLCommentOpenDecoration' } } HTMLCommentOpenDecoration
+ * @typedef { Token & { type: 'HTMLCommentValue' } } HTMLCommentValue
+ * @typedef { Token & { type: 'HTMLCommentClose' } } HTMLCommentClose
+ * @typedef { Token & { type: 'HTMLCommentCloseDecoration' } } HTMLCommentCloseDecoration
+ * @typedef { { open: HTMLCommentOpen, openDecoration: HTMLCommentOpenDecoration | null, value: HTMLCommentValue | null, closeDecoration: HTMLCommentCloseDecoration | null, close: HTMLCommentClose } } ParsedHTMLComment
+ */
+// -----------------------------------------------------------------------------
+// Requirements
+// -----------------------------------------------------------------------------
+
+const utils = require('./')
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+const COMMENT_DIRECTIVE = /^\s*eslint-(?:en|dis)able/
+const IE_CONDITIONAL_IF = /^\[if\s+/
+const IE_CONDITIONAL_ENDIF = /\[endif\]$/
+
+/** @type { 'HTMLCommentOpen' } */
+const TYPE_HTML_COMMENT_OPEN = 'HTMLCommentOpen'
+/** @type { 'HTMLCommentOpenDecoration' } */
+const TYPE_HTML_COMMENT_OPEN_DECORATION = 'HTMLCommentOpenDecoration'
+/** @type { 'HTMLCommentValue' } */
+const TYPE_HTML_COMMENT_VALUE = 'HTMLCommentValue'
+/** @type { 'HTMLCommentClose' } */
+const TYPE_HTML_COMMENT_CLOSE = 'HTMLCommentClose'
+/** @type { 'HTMLCommentCloseDecoration' } */
+const TYPE_HTML_COMMENT_CLOSE_DECORATION = 'HTMLCommentCloseDecoration'
+
+/**
+ * @param {HTMLComment} comment
+ * @returns {boolean}
+ */
+function isCommentDirective(comment) {
+  return COMMENT_DIRECTIVE.test(comment.value)
+}
+
+/**
+ * @param {HTMLComment} comment
+ * @returns {boolean}
+ */
+function isIEConditionalComment(comment) {
+  return (
+    IE_CONDITIONAL_IF.test(comment.value) ||
+    IE_CONDITIONAL_ENDIF.test(comment.value)
+  )
+}
+
+/**
+ * Define HTML comment parser
+ *
+ * @param {SourceCode} sourceCode The source code instance.
+ * @param {CommentParserConfig | null} config The config.
+ * @returns { (node: Token) => (ParsedHTMLComment | null) } HTML comment parser.
+ */
+function defineParser(sourceCode, config) {
+  config = config || {}
+
+  const exceptions = config.exceptions || []
+
+  /**
+   * Get a open decoration string from comment contents.
+   * @param {string} contents comment contents
+   * @returns {string} decoration string
+   */
+  function getOpenDecoration(contents) {
+    let decoration = ''
+    for (const exception of exceptions) {
+      const length = exception.length
+      let index = 0
+      while (contents.startsWith(exception, index)) {
+        index += length
+      }
+      const exceptionLength = index
+      if (decoration.length < exceptionLength) {
+        decoration = contents.slice(0, exceptionLength)
+      }
+    }
+    return decoration
+  }
+
+  /**
+   * Get a close decoration string from comment contents.
+   * @param {string} contents comment contents
+   * @returns {string} decoration string
+   */
+  function getCloseDecoration(contents) {
+    let decoration = ''
+    for (const exception of exceptions) {
+      const length = exception.length
+      let index = contents.length
+      while (contents.endsWith(exception, index)) {
+        index -= length
+      }
+      const exceptionLength = contents.length - index
+      if (decoration.length < exceptionLength) {
+        decoration = contents.slice(index)
+      }
+    }
+    return decoration
+  }
+
+  /**
+   * Parse HTMLComment.
+   * @param {ASTToken} node a comment token
+   * @returns {HTMLComment | null} the result of HTMLComment tokens.
+   */
+  return function parseHTMLComment(node) {
+    if (node.type !== 'HTMLComment') {
+      // Is not HTMLComment
+      return null
+    }
+
+    const htmlCommentText = sourceCode.getText(node)
+
+    if (
+      !htmlCommentText.startsWith('<!--') ||
+      !htmlCommentText.endsWith('-->')
+    ) {
+      // Is not normal HTML Comment
+      // e.g. Error Code: "abrupt-closing-of-empty-comment", "incorrectly-closed-comment"
+      return null
+    }
+
+    let valueText = htmlCommentText.slice(4, -3)
+    const openDecorationText = getOpenDecoration(valueText)
+    valueText = valueText.slice(openDecorationText.length)
+    const firstCharIndex = valueText.search(/\S/)
+    const beforeSpace =
+      firstCharIndex >= 0 ? valueText.slice(0, firstCharIndex) : valueText
+    valueText = valueText.slice(beforeSpace.length)
+
+    const closeDecorationText = getCloseDecoration(valueText)
+    if (closeDecorationText) {
+      valueText = valueText.slice(0, -closeDecorationText.length)
+    }
+    const lastCharIndex = valueText.search(/\S\s*$/)
+    const afterSpace =
+      lastCharIndex >= 0 ? valueText.slice(lastCharIndex + 1) : valueText
+    if (afterSpace) {
+      valueText = valueText.slice(0, -afterSpace.length)
+    }
+
+    let tokenIndex = node.range[0]
+    /**
+     * @param {string} type
+     * @param {string} value
+     * @returns {any}
+     */
+    const createToken = (type, value) => {
+      /** @type {Range} */
+      const range = [tokenIndex, tokenIndex + value.length]
+      tokenIndex = range[1]
+      /** @type {SourceLocation} */
+      let loc
+      return {
+        type,
+        value,
+        range,
+        get loc() {
+          if (loc) {
+            return loc
+          }
+          return (loc = {
+            start: sourceCode.getLocFromIndex(range[0]),
+            end: sourceCode.getLocFromIndex(range[1])
+          })
+        }
+      }
+    }
+
+    /** @type {HTMLCommentOpen} */
+    const open = createToken(TYPE_HTML_COMMENT_OPEN, '<!--')
+    /** @type {HTMLCommentOpenDecoration | null} */
+    const openDecoration = openDecorationText
+      ? createToken(TYPE_HTML_COMMENT_OPEN_DECORATION, openDecorationText)
+      : null
+    tokenIndex += beforeSpace.length
+    /** @type {HTMLCommentValue | null} */
+    const value = valueText
+      ? createToken(TYPE_HTML_COMMENT_VALUE, valueText)
+      : null
+    tokenIndex += afterSpace.length
+    /** @type {HTMLCommentCloseDecoration | null} */
+    const closeDecoration = closeDecorationText
+      ? createToken(TYPE_HTML_COMMENT_CLOSE_DECORATION, closeDecorationText)
+      : null
+    /** @type {HTMLCommentClose} */
+    const close = createToken(TYPE_HTML_COMMENT_CLOSE, '-->')
+
+    return {
+      /** HTML comment open (`<!--`) */
+      open,
+      /** decoration of the start of HTML comments. (`*****` when `<!--*****`) */
+      openDecoration,
+      /** value of HTML comment. whitespaces and other tokens are not included. */
+      value,
+      /** decoration of the end of HTML comments.  (`*****` when `*****-->`) */
+      closeDecoration,
+      /** HTML comment close (`-->`) */
+      close
+    }
+  }
+}
+
+/**
+ * Define HTML comment visitor
+ *
+ * @param {RuleContext} context The rule context.
+ * @param {CommentParserConfig | null} config The config.
+ * @param {HTMLCommentVisitor} visitHTMLComment The HTML comment visitor.
+ * @param {CommentVisitorOption} [visitorOption] The option for visitor.
+ * @returns {RuleListener} HTML comment visitor.
+ */
+function defineVisitor(context, config, visitHTMLComment, visitorOption) {
+  return {
+    Program(node) {
+      visitorOption = visitorOption || {}
+      if (utils.hasInvalidEOF(node)) {
+        return
+      }
+      if (!node.templateBody) {
+        return
+      }
+      const parse = defineParser(context.getSourceCode(), config)
+
+      for (const comment of node.templateBody.comments) {
+        if (comment.type !== 'HTMLComment') {
+          continue
+        }
+        if (!visitorOption.includeDirectives && isCommentDirective(comment)) {
+          // ignore directives
+          continue
+        }
+        if (isIEConditionalComment(comment)) {
+          // ignore IE conditional
+          continue
+        }
+
+        const tokens = parse(comment)
+        if (tokens) {
+          visitHTMLComment(tokens)
+        }
+      }
+    }
+  }
+}
+
+module.exports = {
+  defineVisitor
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/utils/html-elements.json b/server/node_modules/eslint-plugin-vue/lib/utils/html-elements.json
new file mode 100644
index 0000000000000000000000000000000000000000..721f7876d373e4301a27a76424705d52878ea011
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/utils/html-elements.json
@@ -0,0 +1 @@
+["html","body","base","head","link","meta","style","title","address","article","aside","footer","header","h1","h2","h3","h4","h5","h6","hgroup","nav","section","div","dd","dl","dt","figcaption","figure","hr","img","li","main","ol","p","pre","ul","a","b","abbr","bdi","bdo","br","cite","code","data","dfn","em","i","kbd","mark","q","rp","rt","rtc","ruby","s","samp","small","span","strong","sub","sup","time","u","var","wbr","area","audio","map","track","video","embed","object","param","source","canvas","script","noscript","del","ins","caption","col","colgroup","table","thead","tbody","tfoot","td","th","tr","button","datalist","fieldset","form","input","label","legend","meter","optgroup","option","output","progress","select","textarea","details","dialog","menu","menuitem","summary","content","element","shadow","template","slot","blockquote","iframe","noframes","picture"]
diff --git a/server/node_modules/eslint-plugin-vue/lib/utils/indent-common.js b/server/node_modules/eslint-plugin-vue/lib/utils/indent-common.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e6bfdeff4129edc5dadebad1063b9776b58f74b
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/utils/indent-common.js
@@ -0,0 +1,2085 @@
+/**
+ * @author Toru Nagashima <https://github.com/mysticatea>
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+/** @type {Set<ASTNode['type']>} */
+const KNOWN_NODES = new Set([
+  'ArrayExpression',
+  'ArrayPattern',
+  'ArrowFunctionExpression',
+  'AssignmentExpression',
+  'AssignmentPattern',
+  'AwaitExpression',
+  'BinaryExpression',
+  'BlockStatement',
+  'BreakStatement',
+  'CallExpression',
+  'CatchClause',
+  'ChainExpression',
+  'ClassBody',
+  'ClassDeclaration',
+  'ClassExpression',
+  'ConditionalExpression',
+  'ContinueStatement',
+  'DebuggerStatement',
+  'DoWhileStatement',
+  'EmptyStatement',
+  'ExportAllDeclaration',
+  'ExportDefaultDeclaration',
+  'ExportNamedDeclaration',
+  'ExportSpecifier',
+  'ExpressionStatement',
+  'ForInStatement',
+  'ForOfStatement',
+  'ForStatement',
+  'FunctionDeclaration',
+  'FunctionExpression',
+  'Identifier',
+  'IfStatement',
+  'ImportDeclaration',
+  'ImportDefaultSpecifier',
+  'ImportExpression',
+  'ImportNamespaceSpecifier',
+  'ImportSpecifier',
+  'LabeledStatement',
+  'Literal',
+  'LogicalExpression',
+  'MemberExpression',
+  'MetaProperty',
+  'MethodDefinition',
+  'NewExpression',
+  'ObjectExpression',
+  'ObjectPattern',
+  'Program',
+  'Property',
+  'RestElement',
+  'ReturnStatement',
+  'SequenceExpression',
+  'SpreadElement',
+  'Super',
+  'SwitchCase',
+  'SwitchStatement',
+  'TaggedTemplateExpression',
+  'TemplateElement',
+  'TemplateLiteral',
+  'ThisExpression',
+  'ThrowStatement',
+  'TryStatement',
+  'UnaryExpression',
+  'UpdateExpression',
+  'VariableDeclaration',
+  'VariableDeclarator',
+  'WhileStatement',
+  'WithStatement',
+  'YieldExpression',
+  'VAttribute',
+  'VDirectiveKey',
+  'VDocumentFragment',
+  'VElement',
+  'VEndTag',
+  'VExpressionContainer',
+  'VFilter',
+  'VFilterSequenceExpression',
+  'VForExpression',
+  'VIdentifier',
+  'VLiteral',
+  'VOnExpression',
+  'VSlotScopeExpression',
+  'VStartTag',
+  'VText'
+])
+const NON_STANDARD_KNOWN_NODES = new Set([
+  'ExperimentalRestProperty',
+  'ExperimentalSpreadProperty'
+])
+const LT_CHAR = /[\r\n\u2028\u2029]/
+const LINES = /[^\r\n\u2028\u2029]+(?:$|\r\n|[\r\n\u2028\u2029])/g
+const BLOCK_COMMENT_PREFIX = /^\s*\*/
+const ITERATION_OPTS = Object.freeze({
+  includeComments: true,
+  filter: isNotWhitespace
+})
+const PREFORMATTED_ELEMENT_NAMES = ['pre', 'textarea']
+
+/**
+ * @typedef {object} IndentOptions
+ * @property { " " | "\t" } IndentOptions.indentChar
+ * @property {number} IndentOptions.indentSize
+ * @property {number} IndentOptions.baseIndent
+ * @property {number} IndentOptions.attribute
+ * @property {object} IndentOptions.closeBracket
+ * @property {number} IndentOptions.closeBracket.startTag
+ * @property {number} IndentOptions.closeBracket.endTag
+ * @property {number} IndentOptions.closeBracket.selfClosingTag
+ * @property {number} IndentOptions.switchCase
+ * @property {boolean} IndentOptions.alignAttributesVertically
+ * @property {string[]} IndentOptions.ignores
+ */
+/**
+ * @typedef {object} IndentUserOptions
+ * @property { " " | "\t" } [IndentUserOptions.indentChar]
+ * @property {number} [IndentUserOptions.indentSize]
+ * @property {number} [IndentUserOptions.baseIndent]
+ * @property {number} [IndentUserOptions.attribute]
+ * @property {IndentOptions['closeBracket'] | number} [IndentUserOptions.closeBracket]
+ * @property {number} [IndentUserOptions.switchCase]
+ * @property {boolean} [IndentUserOptions.alignAttributesVertically]
+ * @property {string[]} [IndentUserOptions.ignores]
+ */
+/**
+ * Normalize options.
+ * @param {number|"tab"|undefined} type The type of indentation.
+ * @param {IndentUserOptions} options Other options.
+ * @param {Partial<IndentOptions>} defaultOptions The default value of options.
+ * @returns {IndentOptions} Normalized options.
+ */
+function parseOptions(type, options, defaultOptions) {
+  /** @type {IndentOptions} */
+  const ret = Object.assign(
+    {
+      indentChar: ' ',
+      indentSize: 2,
+      baseIndent: 0,
+      attribute: 1,
+      closeBracket: {
+        startTag: 0,
+        endTag: 0,
+        selfClosingTag: 0
+      },
+      switchCase: 0,
+      alignAttributesVertically: true,
+      ignores: []
+    },
+    defaultOptions
+  )
+
+  if (Number.isSafeInteger(type)) {
+    ret.indentSize = Number(type)
+  } else if (type === 'tab') {
+    ret.indentChar = '\t'
+    ret.indentSize = 1
+  }
+
+  if (Number.isSafeInteger(options.baseIndent)) {
+    ret.baseIndent = options.baseIndent
+  }
+  if (Number.isSafeInteger(options.attribute)) {
+    ret.attribute = options.attribute
+  }
+  if (Number.isSafeInteger(options.closeBracket)) {
+    const num = Number(options.closeBracket)
+    ret.closeBracket = {
+      startTag: num,
+      endTag: num,
+      selfClosingTag: num
+    }
+  } else if (options.closeBracket) {
+    ret.closeBracket = Object.assign(
+      {
+        startTag: 0,
+        endTag: 0,
+        selfClosingTag: 0
+      },
+      options.closeBracket
+    )
+  }
+  if (Number.isSafeInteger(options.switchCase)) {
+    ret.switchCase = options.switchCase
+  }
+
+  if (options.alignAttributesVertically != null) {
+    ret.alignAttributesVertically = options.alignAttributesVertically
+  }
+  if (options.ignores != null) {
+    ret.ignores = options.ignores
+  }
+
+  return ret
+}
+
+/**
+ * Check whether the given token is an arrow.
+ * @param {Token|undefined|null} token The token to check.
+ * @returns {boolean} `true` if the token is an arrow.
+ */
+function isArrow(token) {
+  return token != null && token.type === 'Punctuator' && token.value === '=>'
+}
+
+/**
+ * Check whether the given token is a left parenthesis.
+ * @param {Token|undefined|null} token The token to check.
+ * @returns {boolean} `true` if the token is a left parenthesis.
+ */
+function isLeftParen(token) {
+  return token != null && token.type === 'Punctuator' && token.value === '('
+}
+
+/**
+ * Check whether the given token is a left parenthesis.
+ * @param {Token|undefined|null} token The token to check.
+ * @returns {boolean} `false` if the token is a left parenthesis.
+ */
+function isNotLeftParen(token) {
+  return token != null && (token.type !== 'Punctuator' || token.value !== '(')
+}
+
+/**
+ * Check whether the given token is a right parenthesis.
+ * @param {Token|undefined|null} token The token to check.
+ * @returns {boolean} `true` if the token is a right parenthesis.
+ */
+function isRightParen(token) {
+  return token != null && token.type === 'Punctuator' && token.value === ')'
+}
+
+/**
+ * Check whether the given token is a right parenthesis.
+ * @param {Token|undefined|null} token The token to check.
+ * @returns {boolean} `false` if the token is a right parenthesis.
+ */
+function isNotRightParen(token) {
+  return token != null && (token.type !== 'Punctuator' || token.value !== ')')
+}
+
+/**
+ * Check whether the given token is a left brace.
+ * @param {Token|undefined|null} token The token to check.
+ * @returns {boolean} `true` if the token is a left brace.
+ */
+function isLeftBrace(token) {
+  return token != null && token.type === 'Punctuator' && token.value === '{'
+}
+
+/**
+ * Check whether the given token is a right brace.
+ * @param {Token|undefined|null} token The token to check.
+ * @returns {boolean} `true` if the token is a right brace.
+ */
+function isRightBrace(token) {
+  return token != null && token.type === 'Punctuator' && token.value === '}'
+}
+
+/**
+ * Check whether the given token is a left bracket.
+ * @param {Token|undefined|null} token The token to check.
+ * @returns {boolean} `true` if the token is a left bracket.
+ */
+function isLeftBracket(token) {
+  return token != null && token.type === 'Punctuator' && token.value === '['
+}
+
+/**
+ * Check whether the given token is a right bracket.
+ * @param {Token|undefined|null} token The token to check.
+ * @returns {boolean} `true` if the token is a right bracket.
+ */
+function isRightBracket(token) {
+  return token != null && token.type === 'Punctuator' && token.value === ']'
+}
+
+/**
+ * Check whether the given token is a semicolon.
+ * @param {Token|undefined|null} token The token to check.
+ * @returns {boolean} `true` if the token is a semicolon.
+ */
+function isSemicolon(token) {
+  return token != null && token.type === 'Punctuator' && token.value === ';'
+}
+
+/**
+ * Check whether the given token is a comma.
+ * @param {Token|undefined|null} token The token to check.
+ * @returns {boolean} `true` if the token is a comma.
+ */
+function isComma(token) {
+  return token != null && token.type === 'Punctuator' && token.value === ','
+}
+/**
+ * Check whether the given token is a wildcard.
+ * @param {Token} token The token to check.
+ * @returns {boolean} `true` if the token is a wildcard.
+ */
+function isWildcard(token) {
+  return token != null && token.type === 'Punctuator' && token.value === '*'
+}
+
+/**
+ * Check whether the given token is a whitespace.
+ * @param {Token|undefined|null} token The token to check.
+ * @returns {boolean} `true` if the token is a whitespace.
+ */
+function isNotWhitespace(token) {
+  return token != null && token.type !== 'HTMLWhitespace'
+}
+
+/**
+ * Check whether the given token is a comment.
+ * @param {Token|undefined|null} token The token to check.
+ * @returns {boolean} `true` if the token is a comment.
+ */
+function isComment(token) {
+  return (
+    token != null &&
+    (token.type === 'Block' ||
+      token.type === 'Line' ||
+      token.type === 'Shebang' ||
+      (typeof token.type ===
+        'string' /* Although acorn supports new tokens, espree may not yet support new tokens.*/ &&
+        token.type.endsWith('Comment')))
+  )
+}
+
+/**
+ * Check whether the given token is a comment.
+ * @param {Token|undefined|null} token The token to check.
+ * @returns {boolean} `false` if the token is a comment.
+ */
+function isNotComment(token) {
+  return (
+    token != null &&
+    token.type !== 'Block' &&
+    token.type !== 'Line' &&
+    token.type !== 'Shebang' &&
+    !(
+      typeof token.type ===
+        'string' /* Although acorn supports new tokens, espree may not yet support new tokens.*/ &&
+      token.type.endsWith('Comment')
+    )
+  )
+}
+
+/**
+ * Check whether the given node is not an empty text node.
+ * @param {ASTNode} node The node to check.
+ * @returns {boolean} `false` if the token is empty text node.
+ */
+function isNotEmptyTextNode(node) {
+  return !(node.type === 'VText' && node.value.trim() === '')
+}
+
+/**
+ * Check whether the given token is a pipe operator.
+ * @param {Token|undefined|null} token The token to check.
+ * @returns {boolean} `true` if the token is a pipe operator.
+ */
+function isPipeOperator(token) {
+  return token != null && token.type === 'Punctuator' && token.value === '|'
+}
+
+/**
+ * Get the last element.
+ * @template T
+ * @param {T[]} xs The array to get the last element.
+ * @returns {T | undefined} The last element or undefined.
+ */
+function last(xs) {
+  return xs.length === 0 ? undefined : xs[xs.length - 1]
+}
+
+/**
+ * Check whether the node is at the beginning of line.
+ * @param {ASTNode|null} node The node to check.
+ * @param {number} index The index of the node in the nodes.
+ * @param {(ASTNode|null)[]} nodes The array of nodes.
+ * @returns {boolean} `true` if the node is at the beginning of line.
+ */
+function isBeginningOfLine(node, index, nodes) {
+  if (node != null) {
+    for (let i = index - 1; i >= 0; --i) {
+      const prevNode = nodes[i]
+      if (prevNode == null) {
+        continue
+      }
+
+      return node.loc.start.line !== prevNode.loc.end.line
+    }
+  }
+  return false
+}
+
+/**
+ * Check whether a given token is a closing token which triggers unindent.
+ * @param {Token} token The token to check.
+ * @returns {boolean} `true` if the token is a closing token.
+ */
+function isClosingToken(token) {
+  return (
+    token != null &&
+    (token.type === 'HTMLEndTagOpen' ||
+      token.type === 'VExpressionEnd' ||
+      (token.type === 'Punctuator' &&
+        (token.value === ')' || token.value === '}' || token.value === ']')))
+  )
+}
+
+/**
+ * Creates AST event handlers for html-indent.
+ *
+ * @param {RuleContext} context The rule context.
+ * @param {ParserServices.TokenStore | SourceCode} tokenStore The token store object to get tokens.
+ * @param {Partial<IndentOptions>} defaultOptions The default value of options.
+ * @returns {NodeListener} AST event handlers.
+ */
+module.exports.defineVisitor = function create(
+  context,
+  tokenStore,
+  defaultOptions
+) {
+  if (!context.getFilename().endsWith('.vue')) return {}
+
+  const options = parseOptions(
+    context.options[0],
+    context.options[1] || {},
+    defaultOptions
+  )
+  const sourceCode = context.getSourceCode()
+  const offsets = new Map()
+  const ignoreTokens = new Set()
+
+  /**
+   * Set offset to the given tokens.
+   * @param {Token|Token[]|null|(Token|null)[]} token The token to set.
+   * @param {number} offset The offset of the tokens.
+   * @param {Token} baseToken The token of the base offset.
+   * @returns {void}
+   */
+  function setOffset(token, offset, baseToken) {
+    if (!token) {
+      return
+    }
+    if (Array.isArray(token)) {
+      for (const t of token) {
+        offsets.set(t, {
+          baseToken,
+          offset,
+          baseline: false,
+          expectedIndent: undefined
+        })
+      }
+    } else {
+      offsets.set(token, {
+        baseToken,
+        offset,
+        baseline: false,
+        expectedIndent: undefined
+      })
+    }
+  }
+
+  /**
+   * Set baseline flag to the given token.
+   * @param {Token} token The token to set.
+   * @returns {void}
+   */
+  function setBaseline(token) {
+    const offsetInfo = offsets.get(token)
+    if (offsetInfo != null) {
+      offsetInfo.baseline = true
+    }
+  }
+
+  /**
+   * Sets preformatted tokens to the given element node.
+   * @param {VElement} node The node to set.
+   * @returns {void}
+   */
+  function setPreformattedTokens(node) {
+    const endToken =
+      (node.endTag && tokenStore.getFirstToken(node.endTag)) ||
+      tokenStore.getTokenAfter(node)
+
+    /** @type {SourceCode.CursorWithSkipOptions} */
+    const option = {
+      includeComments: true,
+      filter: (token) =>
+        token != null &&
+        (token.type === 'HTMLText' ||
+          token.type === 'HTMLRCDataText' ||
+          token.type === 'HTMLTagOpen' ||
+          token.type === 'HTMLEndTagOpen' ||
+          token.type === 'HTMLComment')
+    }
+    for (const token of tokenStore.getTokensBetween(
+      node.startTag,
+      endToken,
+      option
+    )) {
+      ignoreTokens.add(token)
+    }
+    ignoreTokens.add(endToken)
+  }
+
+  /**
+   * Get the first and last tokens of the given node.
+   * If the node is parenthesized, this gets the outermost parentheses.
+   * @param {ASTNode} node The node to get.
+   * @param {number} [borderOffset] The least offset of the first token. Defailt is 0. This value is used to prevent false positive in the following case: `(a) => {}` The parentheses are enclosing the whole parameter part rather than the first parameter, but this offset parameter is needed to distinguish.
+   * @returns {{firstToken:Token,lastToken:Token}} The gotten tokens.
+   */
+  function getFirstAndLastTokens(node, borderOffset = 0) {
+    borderOffset |= 0
+
+    let firstToken = tokenStore.getFirstToken(node)
+    let lastToken = tokenStore.getLastToken(node)
+
+    // Get the outermost left parenthesis if it's parenthesized.
+    let t, u
+    while (
+      (t = tokenStore.getTokenBefore(firstToken)) != null &&
+      (u = tokenStore.getTokenAfter(lastToken)) != null &&
+      isLeftParen(t) &&
+      isRightParen(u) &&
+      t.range[0] >= borderOffset
+    ) {
+      firstToken = t
+      lastToken = u
+    }
+
+    return { firstToken, lastToken }
+  }
+
+  /**
+   * Process the given node list.
+   * The first node is offsetted from the given left token.
+   * Rest nodes are adjusted to the first node.
+   * @param {(ASTNode|null)[]} nodeList The node to process.
+   * @param {ASTNode|Token|null} left The left parenthesis token.
+   * @param {ASTNode|Token|null} right The right parenthesis token.
+   * @param {number} offset The offset to set.
+   * @param {boolean} [alignVertically=true] The flag to align vertically. If `false`, this doesn't align vertically even if the first node is not at beginning of line.
+   * @returns {void}
+   */
+  function processNodeList(nodeList, left, right, offset, alignVertically) {
+    let t
+    const leftToken = left && tokenStore.getFirstToken(left)
+    const rightToken = right && tokenStore.getFirstToken(right)
+
+    if (nodeList.length >= 1) {
+      let baseToken = null
+      let lastToken = left
+      const alignTokensBeforeBaseToken = []
+      const alignTokens = []
+
+      for (let i = 0; i < nodeList.length; ++i) {
+        const node = nodeList[i]
+        if (node == null) {
+          // Holes of an array.
+          continue
+        }
+        const elementTokens = getFirstAndLastTokens(
+          node,
+          lastToken != null ? lastToken.range[1] : 0
+        )
+
+        // Collect comma/comment tokens between the last token of the previous node and the first token of this node.
+        if (lastToken != null) {
+          t = lastToken
+          while (
+            (t = tokenStore.getTokenAfter(t, ITERATION_OPTS)) != null &&
+            t.range[1] <= elementTokens.firstToken.range[0]
+          ) {
+            if (baseToken == null) {
+              alignTokensBeforeBaseToken.push(t)
+            } else {
+              alignTokens.push(t)
+            }
+          }
+        }
+
+        if (baseToken == null) {
+          baseToken = elementTokens.firstToken
+        } else {
+          alignTokens.push(elementTokens.firstToken)
+        }
+
+        // Save the last token to find tokens between this node and the next node.
+        lastToken = elementTokens.lastToken
+      }
+
+      // Check trailing commas and comments.
+      if (rightToken != null && lastToken != null) {
+        t = lastToken
+        while (
+          (t = tokenStore.getTokenAfter(t, ITERATION_OPTS)) != null &&
+          t.range[1] <= rightToken.range[0]
+        ) {
+          if (baseToken == null) {
+            alignTokensBeforeBaseToken.push(t)
+          } else {
+            alignTokens.push(t)
+          }
+        }
+      }
+
+      // Set offsets.
+      if (leftToken != null) {
+        setOffset(alignTokensBeforeBaseToken, offset, leftToken)
+      }
+      if (baseToken != null) {
+        // Set offset to the first token.
+        if (leftToken != null) {
+          setOffset(baseToken, offset, leftToken)
+        }
+
+        // Set baseline.
+        if (nodeList.some(isBeginningOfLine)) {
+          setBaseline(baseToken)
+        }
+
+        if (alignVertically === false && leftToken != null) {
+          // Align tokens relatively to the left token.
+          setOffset(alignTokens, offset, leftToken)
+        } else {
+          // Align the rest tokens to the first token.
+          setOffset(alignTokens, 0, baseToken)
+        }
+      }
+    }
+
+    if (rightToken != null && leftToken != null) {
+      setOffset(rightToken, 0, leftToken)
+    }
+  }
+
+  /**
+   * Process the given node as body.
+   * The body node maybe a block statement or an expression node.
+   * @param {ASTNode} node The body node to process.
+   * @param {Token} baseToken The base token.
+   * @returns {void}
+   */
+  function processMaybeBlock(node, baseToken) {
+    const firstToken = getFirstAndLastTokens(node).firstToken
+    setOffset(firstToken, isLeftBrace(firstToken) ? 0 : 1, baseToken)
+  }
+
+  /**
+   * Collect prefix tokens of the given property.
+   * The prefix includes `async`, `get`, `set`, `static`, and `*`.
+   * @param {Property|MethodDefinition} node The property node to collect prefix tokens.
+   */
+  function getPrefixTokens(node) {
+    const prefixes = []
+
+    /** @type {Token|null} */
+    let token = tokenStore.getFirstToken(node)
+    while (token != null && token.range[1] <= node.key.range[0]) {
+      prefixes.push(token)
+      token = tokenStore.getTokenAfter(token)
+    }
+    while (isLeftParen(last(prefixes)) || isLeftBracket(last(prefixes))) {
+      prefixes.pop()
+    }
+
+    return prefixes
+  }
+
+  /**
+   * Find the head of chaining nodes.
+   * @param {ASTNode} node The start node to find the head.
+   * @returns {Token} The head token of the chain.
+   */
+  function getChainHeadToken(node) {
+    const type = node.type
+    while (node.parent && node.parent.type === type) {
+      const prevToken = tokenStore.getTokenBefore(node)
+      if (isLeftParen(prevToken)) {
+        // The chaining is broken by parentheses.
+        break
+      }
+      node = node.parent
+    }
+    return tokenStore.getFirstToken(node)
+  }
+
+  /**
+   * Check whether a given token is the first token of:
+   *
+   * - ExpressionStatement
+   * - VExpressionContainer
+   * - A parameter of CallExpression/NewExpression
+   * - An element of ArrayExpression
+   * - An expression of SequenceExpression
+   *
+   * @param {Token} token The token to check.
+   * @param {ASTNode} belongingNode The node that the token is belonging to.
+   * @returns {boolean} `true` if the token is the first token of an element.
+   */
+  function isBeginningOfElement(token, belongingNode) {
+    let node = belongingNode
+
+    while (node != null && node.parent != null) {
+      const parent = node.parent
+      if (
+        parent.type.endsWith('Statement') ||
+        parent.type.endsWith('Declaration')
+      ) {
+        return parent.range[0] === token.range[0]
+      }
+      if (parent.type === 'VExpressionContainer') {
+        if (node.range[0] !== token.range[0]) {
+          return false
+        }
+        const prevToken = tokenStore.getTokenBefore(belongingNode)
+        if (isLeftParen(prevToken)) {
+          // It is not the first token because it is enclosed in parentheses.
+          return false
+        }
+        return true
+      }
+      if (parent.type === 'CallExpression' || parent.type === 'NewExpression') {
+        const openParen = /** @type {Token} */ (tokenStore.getTokenAfter(
+          parent.callee,
+          isNotRightParen
+        ))
+        return parent.arguments.some(
+          (param) =>
+            getFirstAndLastTokens(param, openParen.range[1]).firstToken
+              .range[0] === token.range[0]
+        )
+      }
+      if (parent.type === 'ArrayExpression') {
+        return parent.elements.some(
+          (element) =>
+            element != null &&
+            getFirstAndLastTokens(element).firstToken.range[0] ===
+              token.range[0]
+        )
+      }
+      if (parent.type === 'SequenceExpression') {
+        return parent.expressions.some(
+          (expr) =>
+            getFirstAndLastTokens(expr).firstToken.range[0] === token.range[0]
+        )
+      }
+
+      node = parent
+    }
+
+    return false
+  }
+
+  /**
+   * Set the base indentation to a given top-level AST node.
+   * @param {ASTNode} node The node to set.
+   * @param {number} expectedIndent The number of expected indent.
+   * @returns {void}
+   */
+  function processTopLevelNode(node, expectedIndent) {
+    const token = tokenStore.getFirstToken(node)
+    const offsetInfo = offsets.get(token)
+    if (offsetInfo != null) {
+      offsetInfo.expectedIndent = expectedIndent
+    } else {
+      offsets.set(token, {
+        baseToken: null,
+        offset: 0,
+        baseline: false,
+        expectedIndent
+      })
+    }
+  }
+
+  /**
+   * Ignore all tokens of the given node.
+   * @param {ASTNode} node The node to ignore.
+   * @returns {void}
+   */
+  function ignore(node) {
+    for (const token of tokenStore.getTokens(node)) {
+      offsets.delete(token)
+      ignoreTokens.add(token)
+    }
+  }
+
+  /**
+   * Define functions to ignore nodes into the given visitor.
+   * @param {NodeListener} visitor The visitor to define functions to ignore nodes.
+   * @returns {NodeListener} The visitor.
+   */
+  function processIgnores(visitor) {
+    for (const ignorePattern of options.ignores) {
+      const key = `${ignorePattern}:exit`
+
+      if (visitor.hasOwnProperty(key)) {
+        const handler = visitor[key]
+        visitor[key] = function (node, ...args) {
+          // @ts-expect-error
+          const ret = handler.call(this, node, ...args)
+          ignore(node)
+          return ret
+        }
+      } else {
+        visitor[key] = ignore
+      }
+    }
+
+    return visitor
+  }
+
+  /**
+   * Calculate correct indentation of the line of the given tokens.
+   * @param {Token[]} tokens Tokens which are on the same line.
+   * @returns { { expectedIndent: number, expectedBaseIndent: number } |null } Correct indentation. If it failed to calculate then `null`.
+   */
+  function getExpectedIndents(tokens) {
+    const expectedIndents = []
+
+    for (let i = 0; i < tokens.length; ++i) {
+      const token = tokens[i]
+      const offsetInfo = offsets.get(token)
+
+      if (offsetInfo != null) {
+        if (offsetInfo.expectedIndent != null) {
+          expectedIndents.push(offsetInfo.expectedIndent)
+        } else {
+          const baseOffsetInfo = offsets.get(offsetInfo.baseToken)
+          if (
+            baseOffsetInfo != null &&
+            baseOffsetInfo.expectedIndent != null &&
+            (i === 0 || !baseOffsetInfo.baseline)
+          ) {
+            expectedIndents.push(
+              baseOffsetInfo.expectedIndent +
+                offsetInfo.offset * options.indentSize
+            )
+            if (baseOffsetInfo.baseline) {
+              break
+            }
+          }
+        }
+      }
+    }
+    if (!expectedIndents.length) {
+      return null
+    }
+
+    return {
+      expectedIndent: expectedIndents[0],
+      expectedBaseIndent: expectedIndents.reduce((a, b) => Math.min(a, b))
+    }
+  }
+
+  /**
+   * Get the text of the indentation part of the line which the given token is on.
+   * @param {Token} firstToken The first token on a line.
+   * @returns {string} The text of indentation part.
+   */
+  function getIndentText(firstToken) {
+    const text = sourceCode.text
+    let i = firstToken.range[0] - 1
+
+    while (i >= 0 && !LT_CHAR.test(text[i])) {
+      i -= 1
+    }
+
+    return text.slice(i + 1, firstToken.range[0])
+  }
+
+  /**
+   * Define the function which fixes the problem.
+   * @param {Token} token The token to fix.
+   * @param {number} actualIndent The number of actual indentation.
+   * @param {number} expectedIndent The number of expected indentation.
+   * @returns { (fixer: RuleFixer) => Fix } The defined function.
+   */
+  function defineFix(token, actualIndent, expectedIndent) {
+    if (token.type === 'Block' && token.loc.start.line !== token.loc.end.line) {
+      // Fix indentation in multiline block comments.
+      const lines = sourceCode.getText(token).match(LINES) || []
+      const firstLine = lines.shift()
+      if (lines.every((l) => BLOCK_COMMENT_PREFIX.test(l))) {
+        return (fixer) => {
+          /** @type {Range} */
+          const range = [token.range[0] - actualIndent, token.range[1]]
+          const indent = options.indentChar.repeat(expectedIndent)
+
+          return fixer.replaceTextRange(
+            range,
+            `${indent}${firstLine}${lines
+              .map((l) => l.replace(BLOCK_COMMENT_PREFIX, `${indent} *`))
+              .join('')}`
+          )
+        }
+      }
+    }
+
+    return (fixer) => {
+      /** @type {Range} */
+      const range = [token.range[0] - actualIndent, token.range[0]]
+      const indent = options.indentChar.repeat(expectedIndent)
+      return fixer.replaceTextRange(range, indent)
+    }
+  }
+
+  /**
+   * Validate the given token with the pre-calculated expected indentation.
+   * @param {Token} token The token to validate.
+   * @param {number} expectedIndent The expected indentation.
+   * @param {number[]} [optionalExpectedIndents] The optional expected indentation.
+   * @returns {void}
+   */
+  function validateCore(token, expectedIndent, optionalExpectedIndents) {
+    const line = token.loc.start.line
+    const indentText = getIndentText(token)
+
+    // If there is no line terminator after the `<script>` start tag,
+    // `indentText` contains non-whitespace characters.
+    // In that case, do nothing in order to prevent removing the `<script>` tag.
+    if (indentText.trim() !== '') {
+      return
+    }
+
+    const actualIndent = token.loc.start.column
+    const unit = options.indentChar === '\t' ? 'tab' : 'space'
+
+    for (let i = 0; i < indentText.length; ++i) {
+      if (indentText[i] !== options.indentChar) {
+        context.report({
+          loc: {
+            start: { line, column: i },
+            end: { line, column: i + 1 }
+          },
+          message:
+            'Expected {{expected}} character, but found {{actual}} character.',
+          data: {
+            expected: JSON.stringify(options.indentChar),
+            actual: JSON.stringify(indentText[i])
+          },
+          fix: defineFix(token, actualIndent, expectedIndent)
+        })
+        return
+      }
+    }
+
+    if (
+      actualIndent !== expectedIndent &&
+      (optionalExpectedIndents == null ||
+        !optionalExpectedIndents.includes(actualIndent))
+    ) {
+      context.report({
+        loc: {
+          start: { line, column: 0 },
+          end: { line, column: actualIndent }
+        },
+        message:
+          'Expected indentation of {{expectedIndent}} {{unit}}{{expectedIndentPlural}} but found {{actualIndent}} {{unit}}{{actualIndentPlural}}.',
+        data: {
+          expectedIndent,
+          actualIndent,
+          unit,
+          expectedIndentPlural: expectedIndent === 1 ? '' : 's',
+          actualIndentPlural: actualIndent === 1 ? '' : 's'
+        },
+        fix: defineFix(token, actualIndent, expectedIndent)
+      })
+    }
+  }
+
+  /**
+   * Get the expected indent of comments.
+   * @param {Token} nextToken The next token of comments.
+   * @param {number} nextExpectedIndent The expected indent of the next token.
+   * @param {number} lastExpectedIndent The expected indent of the last token.
+   * @returns {number[]}
+   */
+  function getCommentExpectedIndents(
+    nextToken,
+    nextExpectedIndent,
+    lastExpectedIndent
+  ) {
+    if (typeof lastExpectedIndent === 'number' && isClosingToken(nextToken)) {
+      if (nextExpectedIndent === lastExpectedIndent) {
+        // For solo comment. E.g.,
+        // <div>
+        //    <!-- comment -->
+        // </div>
+        return [nextExpectedIndent + options.indentSize, nextExpectedIndent]
+      }
+
+      // For last comment. E.g.,
+      // <div>
+      //    <div></div>
+      //    <!-- comment -->
+      // </div>
+      return [lastExpectedIndent, nextExpectedIndent]
+    }
+
+    // Adjust to next normally. E.g.,
+    // <div>
+    //    <!-- comment -->
+    //    <div></div>
+    // </div>
+    return [nextExpectedIndent]
+  }
+
+  /**
+   * Validate indentation of the line that the given tokens are on.
+   * @param {Token[]} tokens The tokens on the same line to validate.
+   * @param {Token[]} comments The comments which are on the immediately previous lines of the tokens.
+   * @param {Token|null} lastToken The last validated token. Comments can adjust to the token.
+   * @returns {void}
+   */
+  function validate(tokens, comments, lastToken) {
+    // Calculate and save expected indentation.
+    const firstToken = tokens[0]
+    const actualIndent = firstToken.loc.start.column
+    const expectedIndents = getExpectedIndents(tokens)
+    if (!expectedIndents) {
+      return
+    }
+
+    const expectedBaseIndent = expectedIndents.expectedBaseIndent
+    const expectedIndent = expectedIndents.expectedIndent
+
+    // Debug log
+    // console.log('line', firstToken.loc.start.line, '=', { actualIndent, expectedIndent }, 'from:')
+    // for (const token of tokens) {
+    //   const offsetInfo = offsets.get(token)
+    //   if (offsetInfo == null) {
+    //     console.log('    ', JSON.stringify(sourceCode.getText(token)), 'is unknown.')
+    //   } else if (offsetInfo.expectedIndent != null) {
+    //     console.log('    ', JSON.stringify(sourceCode.getText(token)), 'is fixed at', offsetInfo.expectedIndent, '.')
+    //   } else {
+    //     const baseOffsetInfo = offsets.get(offsetInfo.baseToken)
+    //     console.log('    ', JSON.stringify(sourceCode.getText(token)), 'is', offsetInfo.offset, 'offset from ', JSON.stringify(sourceCode.getText(offsetInfo.baseToken)), '( line:', offsetInfo.baseToken && offsetInfo.baseToken.loc.start.line, ', indent:', baseOffsetInfo && baseOffsetInfo.expectedIndent, ', baseline:', baseOffsetInfo && baseOffsetInfo.baseline, ')')
+    //   }
+    // }
+
+    // Save.
+    const baseline = new Set()
+    for (const token of tokens) {
+      const offsetInfo = offsets.get(token)
+      if (offsetInfo != null) {
+        if (offsetInfo.baseline) {
+          // This is a baseline token, so the expected indent is the column of this token.
+          if (options.indentChar === ' ') {
+            offsetInfo.expectedIndent = Math.max(
+              0,
+              token.loc.start.column + expectedBaseIndent - actualIndent
+            )
+          } else {
+            // In hard-tabs mode, it cannot align tokens strictly, so use one additional offset.
+            // But the additional offset isn't needed if it's at the beginning of the line.
+            offsetInfo.expectedIndent =
+              expectedBaseIndent + (token === tokens[0] ? 0 : 1)
+          }
+          baseline.add(token)
+        } else if (baseline.has(offsetInfo.baseToken)) {
+          // The base token is a baseline token on this line, so inherit it.
+          offsetInfo.expectedIndent = offsets.get(
+            offsetInfo.baseToken
+          ).expectedIndent
+          baseline.add(token)
+        } else {
+          // Otherwise, set the expected indent of this line.
+          offsetInfo.expectedIndent = expectedBaseIndent
+        }
+      }
+    }
+
+    // It does not validate ignore tokens.
+    if (ignoreTokens.has(firstToken)) {
+      return
+    }
+
+    // Calculate the expected indents for comments.
+    // It allows the same indent level with the previous line.
+    const lastOffsetInfo = offsets.get(lastToken)
+    const lastExpectedIndent = lastOffsetInfo && lastOffsetInfo.expectedIndent
+    const commentOptionalExpectedIndents = getCommentExpectedIndents(
+      firstToken,
+      expectedIndent,
+      lastExpectedIndent
+    )
+
+    // Validate.
+    for (const comment of comments) {
+      const commentExpectedIndents = getExpectedIndents([comment])
+      const commentExpectedIndent = commentExpectedIndents
+        ? commentExpectedIndents.expectedIndent
+        : commentOptionalExpectedIndents[0]
+
+      validateCore(
+        comment,
+        commentExpectedIndent,
+        commentOptionalExpectedIndents
+      )
+    }
+    validateCore(firstToken, expectedIndent)
+  }
+
+  // ------------------------------------------------------------------------------
+  // Main
+  // ------------------------------------------------------------------------------
+
+  return processIgnores({
+    /** @param {VAttribute} node */
+    VAttribute(node) {
+      const keyToken = tokenStore.getFirstToken(node)
+      const eqToken = tokenStore.getTokenAfter(node.key)
+
+      if (eqToken != null && eqToken.range[1] <= node.range[1]) {
+        setOffset(eqToken, 1, keyToken)
+
+        const valueToken = tokenStore.getTokenAfter(eqToken)
+        if (valueToken != null && valueToken.range[1] <= node.range[1]) {
+          setOffset(valueToken, 1, keyToken)
+        }
+      }
+    },
+    /** @param {VElement} node */
+    VElement(node) {
+      if (!PREFORMATTED_ELEMENT_NAMES.includes(node.name)) {
+        const isTopLevel = node.parent.type !== 'VElement'
+        const offset = isTopLevel ? options.baseIndent : 1
+        processNodeList(
+          node.children.filter(isNotEmptyTextNode),
+          node.startTag,
+          node.endTag,
+          offset,
+          false
+        )
+      } else {
+        const startTagToken = tokenStore.getFirstToken(node)
+        const endTagToken = node.endTag && tokenStore.getFirstToken(node.endTag)
+        setOffset(endTagToken, 0, startTagToken)
+        setPreformattedTokens(node)
+      }
+    },
+    /** @param {VEndTag} node */
+    VEndTag(node) {
+      const element = node.parent
+      const startTagOpenToken = tokenStore.getFirstToken(element.startTag)
+      const closeToken = tokenStore.getLastToken(node)
+
+      if (closeToken.type.endsWith('TagClose')) {
+        setOffset(closeToken, options.closeBracket.endTag, startTagOpenToken)
+      }
+    },
+    /** @param {VExpressionContainer} node */
+    VExpressionContainer(node) {
+      if (
+        node.expression != null &&
+        node.range[0] !== node.expression.range[0]
+      ) {
+        const startQuoteToken = tokenStore.getFirstToken(node)
+        const endQuoteToken = tokenStore.getLastToken(node)
+        const childToken = tokenStore.getTokenAfter(startQuoteToken)
+
+        setOffset(childToken, 1, startQuoteToken)
+        setOffset(endQuoteToken, 0, startQuoteToken)
+      }
+    },
+    /** @param {VFilter} node */
+    VFilter(node) {
+      const idToken = tokenStore.getFirstToken(node)
+      const lastToken = tokenStore.getLastToken(node)
+      if (isRightParen(lastToken)) {
+        const leftParenToken = tokenStore.getTokenAfter(node.callee)
+        setOffset(leftParenToken, 1, idToken)
+        processNodeList(node.arguments, leftParenToken, lastToken, 1)
+      }
+    },
+    /** @param {VFilterSequenceExpression} node */
+    VFilterSequenceExpression(node) {
+      if (node.filters.length === 0) {
+        return
+      }
+
+      const firstToken = tokenStore.getFirstToken(node)
+      /** @type {(Token|null)[]} */
+      const tokens = []
+
+      for (const filter of node.filters) {
+        tokens.push(
+          tokenStore.getTokenBefore(filter, isPipeOperator),
+          tokenStore.getFirstToken(filter)
+        )
+      }
+
+      setOffset(tokens, 1, firstToken)
+    },
+    /** @param {VForExpression} node */
+    VForExpression(node) {
+      const firstToken = tokenStore.getFirstToken(node)
+      const lastOfLeft = last(node.left) || firstToken
+      const inToken = /** @type {Token} */ (tokenStore.getTokenAfter(
+        lastOfLeft,
+        isNotRightParen
+      ))
+      const rightToken = tokenStore.getFirstToken(node.right)
+
+      if (isLeftParen(firstToken)) {
+        const rightToken = tokenStore.getTokenAfter(lastOfLeft, isRightParen)
+        processNodeList(node.left, firstToken, rightToken, 1)
+      }
+      setOffset(inToken, 1, firstToken)
+      setOffset(rightToken, 1, inToken)
+    },
+    /** @param {VOnExpression} node */
+    VOnExpression(node) {
+      processNodeList(node.body, null, null, 0)
+    },
+    /** @param {VStartTag} node */
+    VStartTag(node) {
+      const openToken = tokenStore.getFirstToken(node)
+      const closeToken = tokenStore.getLastToken(node)
+
+      processNodeList(
+        node.attributes,
+        openToken,
+        null,
+        options.attribute,
+        options.alignAttributesVertically
+      )
+      if (closeToken != null && closeToken.type.endsWith('TagClose')) {
+        const offset =
+          closeToken.type !== 'HTMLSelfClosingTagClose'
+            ? options.closeBracket.startTag
+            : options.closeBracket.selfClosingTag
+        setOffset(closeToken, offset, openToken)
+      }
+    },
+    /** @param {VText} node */
+    VText(node) {
+      const tokens = tokenStore.getTokens(node, isNotWhitespace)
+      const firstTokenInfo = offsets.get(tokenStore.getFirstToken(node))
+
+      for (const token of tokens) {
+        offsets.set(token, Object.assign({}, firstTokenInfo))
+      }
+    },
+    /** @param {ArrayExpression | ArrayPattern} node */
+    'ArrayExpression, ArrayPattern'(node) {
+      processNodeList(
+        node.elements,
+        tokenStore.getFirstToken(node),
+        tokenStore.getLastToken(node),
+        1
+      )
+    },
+    /** @param {ArrowFunctionExpression} node */
+    ArrowFunctionExpression(node) {
+      const firstToken = tokenStore.getFirstToken(node)
+      const secondToken = tokenStore.getTokenAfter(firstToken)
+      const leftToken = node.async ? secondToken : firstToken
+      const arrowToken = tokenStore.getTokenBefore(node.body, isArrow)
+
+      if (node.async) {
+        setOffset(secondToken, 1, firstToken)
+      }
+      if (isLeftParen(leftToken)) {
+        const rightToken = tokenStore.getTokenAfter(
+          last(node.params) || leftToken,
+          isRightParen
+        )
+        processNodeList(node.params, leftToken, rightToken, 1)
+      }
+
+      setOffset(arrowToken, 1, firstToken)
+      processMaybeBlock(node.body, firstToken)
+    },
+    /** @param {AssignmentExpression | AssignmentPattern | BinaryExpression | LogicalExpression} node */
+    'AssignmentExpression, AssignmentPattern, BinaryExpression, LogicalExpression'(
+      node
+    ) {
+      const leftToken = getChainHeadToken(node)
+      const opToken = /** @type {Token} */ (tokenStore.getTokenAfter(
+        node.left,
+        isNotRightParen
+      ))
+      const rightToken = tokenStore.getTokenAfter(opToken)
+      const prevToken = tokenStore.getTokenBefore(leftToken)
+      const shouldIndent =
+        prevToken == null ||
+        prevToken.loc.end.line === leftToken.loc.start.line ||
+        isBeginningOfElement(leftToken, node)
+
+      setOffset([opToken, rightToken], shouldIndent ? 1 : 0, leftToken)
+    },
+    /** @param {AwaitExpression | RestElement | SpreadElement | UnaryExpression} node */
+    'AwaitExpression, RestElement, SpreadElement, UnaryExpression'(node) {
+      const firstToken = tokenStore.getFirstToken(node)
+      const nextToken = tokenStore.getTokenAfter(firstToken)
+
+      setOffset(nextToken, 1, firstToken)
+    },
+    /** @param {BlockStatement | ClassBody} node */
+    'BlockStatement, ClassBody'(node) {
+      processNodeList(
+        node.body,
+        tokenStore.getFirstToken(node),
+        tokenStore.getLastToken(node),
+        1
+      )
+    },
+    /** @param {BreakStatement | ContinueStatement | ReturnStatement | ThrowStatement} node */
+    'BreakStatement, ContinueStatement, ReturnStatement, ThrowStatement'(node) {
+      if (
+        ((node.type === 'ReturnStatement' || node.type === 'ThrowStatement') &&
+          node.argument != null) ||
+        ((node.type === 'BreakStatement' ||
+          node.type === 'ContinueStatement') &&
+          node.label != null)
+      ) {
+        const firstToken = tokenStore.getFirstToken(node)
+        const nextToken = tokenStore.getTokenAfter(firstToken)
+
+        setOffset(nextToken, 1, firstToken)
+      }
+    },
+    /** @param {CallExpression} node */
+    CallExpression(node) {
+      const firstToken = tokenStore.getFirstToken(node)
+      const rightToken = tokenStore.getLastToken(node)
+      const leftToken = tokenStore.getTokenAfter(node.callee, isLeftParen)
+
+      setOffset(leftToken, 1, firstToken)
+      processNodeList(node.arguments, leftToken, rightToken, 1)
+    },
+    /** @param {ImportExpression} node */
+    ImportExpression(node) {
+      const firstToken = tokenStore.getFirstToken(node)
+      const rightToken = tokenStore.getLastToken(node)
+      const leftToken = tokenStore.getTokenAfter(firstToken, isLeftParen)
+
+      setOffset(leftToken, 1, firstToken)
+      processNodeList([node.source], leftToken, rightToken, 1)
+    },
+    /** @param {CatchClause} node */
+    CatchClause(node) {
+      const firstToken = tokenStore.getFirstToken(node)
+      const bodyToken = tokenStore.getFirstToken(node.body)
+
+      if (node.param != null) {
+        const leftToken = tokenStore.getTokenAfter(firstToken)
+        const rightToken = tokenStore.getTokenAfter(node.param)
+
+        setOffset(leftToken, 1, firstToken)
+        processNodeList([node.param], leftToken, rightToken, 1)
+      }
+      setOffset(bodyToken, 0, firstToken)
+    },
+    /** @param {ClassDeclaration | ClassExpression} node */
+    'ClassDeclaration, ClassExpression'(node) {
+      const firstToken = tokenStore.getFirstToken(node)
+      const bodyToken = tokenStore.getFirstToken(node.body)
+
+      if (node.id != null) {
+        setOffset(tokenStore.getFirstToken(node.id), 1, firstToken)
+      }
+      if (node.superClass != null) {
+        const extendsToken = tokenStore.getTokenAfter(node.id || firstToken)
+        const superClassToken = tokenStore.getTokenAfter(extendsToken)
+        setOffset(extendsToken, 1, firstToken)
+        setOffset(superClassToken, 1, extendsToken)
+      }
+      setOffset(bodyToken, 0, firstToken)
+    },
+    /** @param {ConditionalExpression} node */
+    ConditionalExpression(node) {
+      const prevToken = tokenStore.getTokenBefore(node)
+      const firstToken = tokenStore.getFirstToken(node)
+      const questionToken = /** @type {Token} */ (tokenStore.getTokenAfter(
+        node.test,
+        isNotRightParen
+      ))
+      const consequentToken = tokenStore.getTokenAfter(questionToken)
+      const colonToken = /** @type {Token} */ (tokenStore.getTokenAfter(
+        node.consequent,
+        isNotRightParen
+      ))
+      const alternateToken = tokenStore.getTokenAfter(colonToken)
+      const isFlat =
+        prevToken &&
+        prevToken.loc.end.line !== node.loc.start.line &&
+        node.test.loc.end.line === node.consequent.loc.start.line
+
+      if (isFlat) {
+        setOffset(
+          [questionToken, consequentToken, colonToken, alternateToken],
+          0,
+          firstToken
+        )
+      } else {
+        setOffset([questionToken, colonToken], 1, firstToken)
+        setOffset([consequentToken, alternateToken], 1, questionToken)
+      }
+    },
+    /** @param {DoWhileStatement} node */
+    DoWhileStatement(node) {
+      const doToken = tokenStore.getFirstToken(node)
+      const whileToken = /** @type {Token} */ (tokenStore.getTokenAfter(
+        node.body,
+        isNotRightParen
+      ))
+      const leftToken = tokenStore.getTokenAfter(whileToken)
+      const testToken = tokenStore.getTokenAfter(leftToken)
+      const lastToken = tokenStore.getLastToken(node)
+      const rightToken = isSemicolon(lastToken)
+        ? tokenStore.getTokenBefore(lastToken)
+        : lastToken
+
+      processMaybeBlock(node.body, doToken)
+      setOffset(whileToken, 0, doToken)
+      setOffset(leftToken, 1, whileToken)
+      setOffset(testToken, 1, leftToken)
+      setOffset(rightToken, 0, leftToken)
+    },
+    /** @param {ExportAllDeclaration} node */
+    ExportAllDeclaration(node) {
+      const tokens = tokenStore.getTokens(node)
+      const firstToken = /** @type {Token} */ (tokens.shift())
+      if (isSemicolon(last(tokens))) {
+        tokens.pop()
+      }
+      if (!node.exported) {
+        setOffset(tokens, 1, firstToken)
+      } else {
+        // export * as foo from "mod"
+        const starToken = /** @type {Token} */ (tokens.find(isWildcard))
+        const asToken = tokenStore.getTokenAfter(starToken)
+        const exportedToken = tokenStore.getTokenAfter(asToken)
+        const afterTokens = tokens.slice(tokens.indexOf(exportedToken) + 1)
+
+        setOffset(starToken, 1, firstToken)
+        setOffset(asToken, 1, starToken)
+        setOffset(exportedToken, 1, starToken)
+        setOffset(afterTokens, 1, firstToken)
+      }
+    },
+    /** @param {ExportDefaultDeclaration} node */
+    ExportDefaultDeclaration(node) {
+      const exportToken = tokenStore.getFirstToken(node)
+      const defaultToken = tokenStore.getFirstToken(node, 1)
+      const declarationToken = getFirstAndLastTokens(node.declaration)
+        .firstToken
+      setOffset([defaultToken, declarationToken], 1, exportToken)
+    },
+    /** @param {ExportNamedDeclaration} node */
+    ExportNamedDeclaration(node) {
+      const exportToken = tokenStore.getFirstToken(node)
+      if (node.declaration) {
+        // export var foo = 1;
+        const declarationToken = tokenStore.getFirstToken(node, 1)
+        setOffset(declarationToken, 1, exportToken)
+      } else {
+        const firstSpecifier = node.specifiers[0]
+        if (!firstSpecifier || firstSpecifier.type === 'ExportSpecifier') {
+          // export {foo, bar}; or export {foo, bar} from "mod";
+          const leftParenToken = tokenStore.getFirstToken(node, 1)
+          const rightParenToken = /** @type {Token} */ (tokenStore.getLastToken(
+            node,
+            isRightBrace
+          ))
+          setOffset(leftParenToken, 0, exportToken)
+          processNodeList(node.specifiers, leftParenToken, rightParenToken, 1)
+
+          const maybeFromToken = tokenStore.getTokenAfter(rightParenToken)
+          if (
+            maybeFromToken != null &&
+            sourceCode.getText(maybeFromToken) === 'from'
+          ) {
+            const fromToken = maybeFromToken
+            const nameToken = tokenStore.getTokenAfter(fromToken)
+            setOffset([fromToken, nameToken], 1, exportToken)
+          }
+        } else {
+          // maybe babel-eslint
+        }
+      }
+    },
+    /** @param {ExportSpecifier} node */
+    ExportSpecifier(node) {
+      const tokens = tokenStore.getTokens(node)
+      const firstToken = /** @type {Token} */ (tokens.shift())
+      setOffset(tokens, 1, firstToken)
+    },
+    /** @param {ForInStatement | ForOfStatement} node */
+    'ForInStatement, ForOfStatement'(node) {
+      const forToken = tokenStore.getFirstToken(node)
+      const awaitToken =
+        (node.type === 'ForOfStatement' &&
+          node.await &&
+          tokenStore.getTokenAfter(forToken)) ||
+        null
+      const leftParenToken = tokenStore.getTokenAfter(awaitToken || forToken)
+      const leftToken = tokenStore.getTokenAfter(leftParenToken)
+      const inToken = /** @type {Token} */ (tokenStore.getTokenAfter(
+        leftToken,
+        isNotRightParen
+      ))
+      const rightToken = tokenStore.getTokenAfter(inToken)
+      const rightParenToken = tokenStore.getTokenBefore(
+        node.body,
+        isNotLeftParen
+      )
+
+      if (awaitToken != null) {
+        setOffset(awaitToken, 0, forToken)
+      }
+      setOffset(leftParenToken, 1, forToken)
+      setOffset(leftToken, 1, leftParenToken)
+      setOffset(inToken, 1, leftToken)
+      setOffset(rightToken, 1, leftToken)
+      setOffset(rightParenToken, 0, leftParenToken)
+      processMaybeBlock(node.body, forToken)
+    },
+    /** @param {ForStatement} node */
+    ForStatement(node) {
+      const forToken = tokenStore.getFirstToken(node)
+      const leftParenToken = tokenStore.getTokenAfter(forToken)
+      const rightParenToken = tokenStore.getTokenBefore(
+        node.body,
+        isNotLeftParen
+      )
+
+      setOffset(leftParenToken, 1, forToken)
+      processNodeList(
+        [node.init, node.test, node.update],
+        leftParenToken,
+        rightParenToken,
+        1
+      )
+      processMaybeBlock(node.body, forToken)
+    },
+    /** @param {FunctionDeclaration | FunctionExpression} node */
+    'FunctionDeclaration, FunctionExpression'(node) {
+      const firstToken = tokenStore.getFirstToken(node)
+      if (isLeftParen(firstToken)) {
+        // Methods.
+        const leftToken = firstToken
+        const rightToken = tokenStore.getTokenAfter(
+          last(node.params) || leftToken,
+          isRightParen
+        )
+        const bodyToken = tokenStore.getFirstToken(node.body)
+
+        processNodeList(node.params, leftToken, rightToken, 1)
+        setOffset(bodyToken, 0, tokenStore.getFirstToken(node.parent))
+      } else {
+        // Normal functions.
+        const functionToken = node.async
+          ? tokenStore.getTokenAfter(firstToken)
+          : firstToken
+        const starToken = node.generator
+          ? tokenStore.getTokenAfter(functionToken)
+          : null
+        const idToken = node.id && tokenStore.getFirstToken(node.id)
+        const leftToken = tokenStore.getTokenAfter(
+          idToken || starToken || functionToken
+        )
+        const rightToken = tokenStore.getTokenAfter(
+          last(node.params) || leftToken,
+          isRightParen
+        )
+        const bodyToken = tokenStore.getFirstToken(node.body)
+
+        if (node.async) {
+          setOffset(functionToken, 0, firstToken)
+        }
+        if (node.generator) {
+          setOffset(starToken, 1, firstToken)
+        }
+        if (node.id != null) {
+          setOffset(idToken, 1, firstToken)
+        }
+        setOffset(leftToken, 1, firstToken)
+        processNodeList(node.params, leftToken, rightToken, 1)
+        setOffset(bodyToken, 0, firstToken)
+      }
+    },
+    /** @param {IfStatement} node */
+    IfStatement(node) {
+      const ifToken = tokenStore.getFirstToken(node)
+      const ifLeftParenToken = tokenStore.getTokenAfter(ifToken)
+      const ifRightParenToken = tokenStore.getTokenBefore(
+        node.consequent,
+        isRightParen
+      )
+
+      setOffset(ifLeftParenToken, 1, ifToken)
+      setOffset(ifRightParenToken, 0, ifLeftParenToken)
+      processMaybeBlock(node.consequent, ifToken)
+
+      if (node.alternate != null) {
+        const elseToken = /** @type {Token} */ (tokenStore.getTokenAfter(
+          node.consequent,
+          isNotRightParen
+        ))
+
+        setOffset(elseToken, 0, ifToken)
+        processMaybeBlock(node.alternate, elseToken)
+      }
+    },
+    /** @param {ImportDeclaration} node */
+    ImportDeclaration(node) {
+      const firstSpecifier = node.specifiers[0]
+      const secondSpecifier = node.specifiers[1]
+      const importToken = tokenStore.getFirstToken(node)
+      const hasSemi = tokenStore.getLastToken(node).value === ';'
+      /** @type {Token[]} */
+      const tokens = [] // tokens to one indent
+
+      if (!firstSpecifier) {
+        // There are 2 patterns:
+        //     import "foo"
+        //     import {} from "foo"
+        const secondToken = tokenStore.getFirstToken(node, 1)
+        if (isLeftBrace(secondToken)) {
+          setOffset(
+            [secondToken, tokenStore.getTokenAfter(secondToken)],
+            0,
+            importToken
+          )
+          tokens.push(
+            tokenStore.getLastToken(node, hasSemi ? 2 : 1), // from
+            tokenStore.getLastToken(node, hasSemi ? 1 : 0) // "foo"
+          )
+        } else {
+          tokens.push(tokenStore.getLastToken(node, hasSemi ? 1 : 0))
+        }
+      } else if (firstSpecifier.type === 'ImportDefaultSpecifier') {
+        if (
+          secondSpecifier &&
+          secondSpecifier.type === 'ImportNamespaceSpecifier'
+        ) {
+          // There is a pattern:
+          //     import Foo, * as foo from "foo"
+          tokens.push(
+            tokenStore.getFirstToken(firstSpecifier), // Foo
+            tokenStore.getTokenAfter(firstSpecifier), // comma
+            tokenStore.getFirstToken(secondSpecifier), // *
+            tokenStore.getLastToken(node, hasSemi ? 2 : 1), // from
+            tokenStore.getLastToken(node, hasSemi ? 1 : 0) // "foo"
+          )
+        } else {
+          // There are 3 patterns:
+          //     import Foo from "foo"
+          //     import Foo, {} from "foo"
+          //     import Foo, {a} from "foo"
+          const idToken = tokenStore.getFirstToken(firstSpecifier)
+          const nextToken = tokenStore.getTokenAfter(firstSpecifier)
+          if (isComma(nextToken)) {
+            const leftBrace = tokenStore.getTokenAfter(nextToken)
+            const rightBrace = tokenStore.getLastToken(node, hasSemi ? 3 : 2)
+            setOffset([idToken, nextToken], 1, importToken)
+            setOffset(leftBrace, 0, idToken)
+            processNodeList(node.specifiers.slice(1), leftBrace, rightBrace, 1)
+            tokens.push(
+              tokenStore.getLastToken(node, hasSemi ? 2 : 1), // from
+              tokenStore.getLastToken(node, hasSemi ? 1 : 0) // "foo"
+            )
+          } else {
+            tokens.push(
+              idToken,
+              nextToken, // from
+              tokenStore.getTokenAfter(nextToken) // "foo"
+            )
+          }
+        }
+      } else if (firstSpecifier.type === 'ImportNamespaceSpecifier') {
+        // There is a pattern:
+        //     import * as foo from "foo"
+        tokens.push(
+          tokenStore.getFirstToken(firstSpecifier), // *
+          tokenStore.getLastToken(node, hasSemi ? 2 : 1), // from
+          tokenStore.getLastToken(node, hasSemi ? 1 : 0) // "foo"
+        )
+      } else {
+        // There is a pattern:
+        //     import {a} from "foo"
+        const leftBrace = tokenStore.getFirstToken(node, 1)
+        const rightBrace = tokenStore.getLastToken(node, hasSemi ? 3 : 2)
+        setOffset(leftBrace, 0, importToken)
+        processNodeList(node.specifiers, leftBrace, rightBrace, 1)
+        tokens.push(
+          tokenStore.getLastToken(node, hasSemi ? 2 : 1), // from
+          tokenStore.getLastToken(node, hasSemi ? 1 : 0) // "foo"
+        )
+      }
+
+      setOffset(tokens, 1, importToken)
+    },
+    /** @param {ImportSpecifier} node */
+    ImportSpecifier(node) {
+      if (node.local.range[0] !== node.imported.range[0]) {
+        const tokens = tokenStore.getTokens(node)
+        const firstToken = /** @type {Token} */ (tokens.shift())
+        setOffset(tokens, 1, firstToken)
+      }
+    },
+    /** @param {ImportNamespaceSpecifier} node */
+    ImportNamespaceSpecifier(node) {
+      const tokens = tokenStore.getTokens(node)
+      const firstToken = /** @type {Token} */ (tokens.shift())
+      setOffset(tokens, 1, firstToken)
+    },
+    /** @param {LabeledStatement} node */
+    LabeledStatement(node) {
+      const labelToken = tokenStore.getFirstToken(node)
+      const colonToken = tokenStore.getTokenAfter(labelToken)
+      const bodyToken = tokenStore.getTokenAfter(colonToken)
+
+      setOffset([colonToken, bodyToken], 1, labelToken)
+    },
+    /** @param {MemberExpression | MetaProperty} node */
+    'MemberExpression, MetaProperty'(node) {
+      const objectToken = tokenStore.getFirstToken(node)
+      if (node.type === 'MemberExpression' && node.computed) {
+        const leftBracketToken = /** @type {Token} */ (tokenStore.getTokenBefore(
+          node.property,
+          isLeftBracket
+        ))
+        const propertyToken = tokenStore.getTokenAfter(leftBracketToken)
+        const rightBracketToken = tokenStore.getTokenAfter(
+          node.property,
+          isRightBracket
+        )
+
+        setOffset(leftBracketToken, 1, objectToken)
+        setOffset(propertyToken, 1, leftBracketToken)
+        setOffset(rightBracketToken, 0, leftBracketToken)
+      } else {
+        const dotToken = tokenStore.getTokenBefore(node.property)
+        const propertyToken = tokenStore.getTokenAfter(dotToken)
+
+        setOffset([dotToken, propertyToken], 1, objectToken)
+      }
+    },
+    /** @param {MethodDefinition | Property} node */
+    'MethodDefinition, Property'(node) {
+      const isMethod = node.type === 'MethodDefinition' || node.method === true
+      const prefixTokens = getPrefixTokens(node)
+      const hasPrefix = prefixTokens.length >= 1
+
+      for (let i = 1; i < prefixTokens.length; ++i) {
+        setOffset(prefixTokens[i], 0, prefixTokens[i - 1])
+      }
+
+      /** @type {Token} */
+      let lastKeyToken
+      if (node.computed) {
+        const keyLeftToken = /** @type {Token} */ (tokenStore.getFirstToken(
+          node,
+          isLeftBracket
+        ))
+        const keyToken = tokenStore.getTokenAfter(keyLeftToken)
+        const keyRightToken = (lastKeyToken = /** @type {Token} */ (tokenStore.getTokenAfter(
+          node.key,
+          isRightBracket
+        )))
+
+        if (hasPrefix) {
+          setOffset(keyLeftToken, 0, /** @type {Token} */ (last(prefixTokens)))
+        }
+        setOffset(keyToken, 1, keyLeftToken)
+        setOffset(keyRightToken, 0, keyLeftToken)
+      } else {
+        const idToken = (lastKeyToken = tokenStore.getFirstToken(node.key))
+
+        if (hasPrefix) {
+          setOffset(idToken, 0, /** @type {Token} */ (last(prefixTokens)))
+        }
+      }
+
+      if (isMethod) {
+        const leftParenToken = tokenStore.getTokenAfter(lastKeyToken)
+
+        setOffset(leftParenToken, 1, lastKeyToken)
+      } else if (node.type === 'Property' && !node.shorthand) {
+        const colonToken = tokenStore.getTokenAfter(lastKeyToken)
+        const valueToken = tokenStore.getTokenAfter(colonToken)
+
+        setOffset([colonToken, valueToken], 1, lastKeyToken)
+      }
+    },
+    /** @param {NewExpression} node */
+    NewExpression(node) {
+      const newToken = tokenStore.getFirstToken(node)
+      const calleeToken = tokenStore.getTokenAfter(newToken)
+      const rightToken = tokenStore.getLastToken(node)
+      const leftToken = isRightParen(rightToken)
+        ? tokenStore.getFirstTokenBetween(node.callee, rightToken, isLeftParen)
+        : null
+
+      setOffset(calleeToken, 1, newToken)
+      if (leftToken != null) {
+        setOffset(leftToken, 1, calleeToken)
+        processNodeList(node.arguments, leftToken, rightToken, 1)
+      }
+    },
+    /** @param {ObjectExpression | ObjectPattern} node */
+    'ObjectExpression, ObjectPattern'(node) {
+      processNodeList(
+        node.properties,
+        tokenStore.getFirstToken(node),
+        tokenStore.getLastToken(node),
+        1
+      )
+    },
+    /** @param {SequenceExpression} node */
+    SequenceExpression(node) {
+      processNodeList(node.expressions, null, null, 0)
+    },
+    /** @param {SwitchCase} node */
+    SwitchCase(node) {
+      const caseToken = tokenStore.getFirstToken(node)
+
+      if (node.test != null) {
+        const testToken = tokenStore.getTokenAfter(caseToken)
+        const colonToken = tokenStore.getTokenAfter(node.test, isNotRightParen)
+
+        setOffset([testToken, colonToken], 1, caseToken)
+      } else {
+        const colonToken = tokenStore.getTokenAfter(caseToken)
+
+        setOffset(colonToken, 1, caseToken)
+      }
+
+      if (
+        node.consequent.length === 1 &&
+        node.consequent[0].type === 'BlockStatement'
+      ) {
+        setOffset(tokenStore.getFirstToken(node.consequent[0]), 0, caseToken)
+      } else if (node.consequent.length >= 1) {
+        setOffset(tokenStore.getFirstToken(node.consequent[0]), 1, caseToken)
+        processNodeList(node.consequent, null, null, 0)
+      }
+    },
+    /** @param {SwitchStatement} node */
+    SwitchStatement(node) {
+      const switchToken = tokenStore.getFirstToken(node)
+      const leftParenToken = tokenStore.getTokenAfter(switchToken)
+      const discriminantToken = tokenStore.getTokenAfter(leftParenToken)
+      const leftBraceToken = /** @type {Token} */ (tokenStore.getTokenAfter(
+        node.discriminant,
+        isLeftBrace
+      ))
+      const rightParenToken = tokenStore.getTokenBefore(leftBraceToken)
+      const rightBraceToken = tokenStore.getLastToken(node)
+
+      setOffset(leftParenToken, 1, switchToken)
+      setOffset(discriminantToken, 1, leftParenToken)
+      setOffset(rightParenToken, 0, leftParenToken)
+      setOffset(leftBraceToken, 0, switchToken)
+      processNodeList(
+        node.cases,
+        leftBraceToken,
+        rightBraceToken,
+        options.switchCase
+      )
+    },
+    /** @param {TaggedTemplateExpression} node */
+    TaggedTemplateExpression(node) {
+      const tagTokens = getFirstAndLastTokens(node.tag, node.range[0])
+      const quasiToken = tokenStore.getTokenAfter(tagTokens.lastToken)
+
+      setOffset(quasiToken, 1, tagTokens.firstToken)
+    },
+    /** @param {TemplateLiteral} node */
+    TemplateLiteral(node) {
+      const firstToken = tokenStore.getFirstToken(node)
+      const quasiTokens = node.quasis
+        .slice(1)
+        .map((n) => tokenStore.getFirstToken(n))
+      const expressionToken = node.quasis
+        .slice(0, -1)
+        .map((n) => tokenStore.getTokenAfter(n))
+
+      setOffset(quasiTokens, 0, firstToken)
+      setOffset(expressionToken, 1, firstToken)
+    },
+    /** @param {TryStatement} node */
+    TryStatement(node) {
+      const tryToken = tokenStore.getFirstToken(node)
+      const tryBlockToken = tokenStore.getFirstToken(node.block)
+
+      setOffset(tryBlockToken, 0, tryToken)
+
+      if (node.handler != null) {
+        const catchToken = tokenStore.getFirstToken(node.handler)
+
+        setOffset(catchToken, 0, tryToken)
+      }
+
+      if (node.finalizer != null) {
+        const finallyToken = tokenStore.getTokenBefore(node.finalizer)
+        const finallyBlockToken = tokenStore.getFirstToken(node.finalizer)
+
+        setOffset([finallyToken, finallyBlockToken], 0, tryToken)
+      }
+    },
+    /** @param {UpdateExpression} node */
+    UpdateExpression(node) {
+      const firstToken = tokenStore.getFirstToken(node)
+      const nextToken = tokenStore.getTokenAfter(firstToken)
+
+      setOffset(nextToken, 1, firstToken)
+    },
+    /** @param {VariableDeclaration} node */
+    VariableDeclaration(node) {
+      processNodeList(
+        node.declarations,
+        tokenStore.getFirstToken(node),
+        null,
+        1
+      )
+    },
+    /** @param {VariableDeclarator} node */
+    VariableDeclarator(node) {
+      if (node.init != null) {
+        const idToken = tokenStore.getFirstToken(node)
+        const eqToken = tokenStore.getTokenAfter(node.id)
+        const initToken = tokenStore.getTokenAfter(eqToken)
+
+        setOffset([eqToken, initToken], 1, idToken)
+      }
+    },
+    /** @param {WhileStatement | WithStatement} node */
+    'WhileStatement, WithStatement'(node) {
+      const firstToken = tokenStore.getFirstToken(node)
+      const leftParenToken = tokenStore.getTokenAfter(firstToken)
+      const rightParenToken = tokenStore.getTokenBefore(node.body, isRightParen)
+
+      setOffset(leftParenToken, 1, firstToken)
+      setOffset(rightParenToken, 0, leftParenToken)
+      processMaybeBlock(node.body, firstToken)
+    },
+    /** @param {YieldExpression} node */
+    YieldExpression(node) {
+      if (node.argument != null) {
+        const yieldToken = tokenStore.getFirstToken(node)
+
+        setOffset(tokenStore.getTokenAfter(yieldToken), 1, yieldToken)
+        if (node.delegate) {
+          setOffset(tokenStore.getTokenAfter(yieldToken, 1), 1, yieldToken)
+        }
+      }
+    },
+    /** @param {Statement} node */
+    // Process semicolons.
+    ':statement'(node) {
+      const firstToken = tokenStore.getFirstToken(node)
+      const lastToken = tokenStore.getLastToken(node)
+      if (isSemicolon(lastToken) && firstToken !== lastToken) {
+        setOffset(lastToken, 0, firstToken)
+      }
+
+      // Set to the semicolon of the previous token for semicolon-free style.
+      // E.g.,
+      //   foo
+      //   ;[1,2,3].forEach(f)
+      const info = offsets.get(firstToken)
+      const prevToken = tokenStore.getTokenBefore(firstToken)
+      if (
+        info != null &&
+        isSemicolon(prevToken) &&
+        prevToken.loc.end.line === firstToken.loc.start.line
+      ) {
+        offsets.set(prevToken, info)
+      }
+    },
+    /** @param {Expression | MetaProperty | TemplateLiteral} node */
+    // Process parentheses.
+    // `:expression` does not match with MetaProperty and TemplateLiteral as a bug: https://github.com/estools/esquery/pull/59
+    ':expression, MetaProperty, TemplateLiteral'(node) {
+      let leftToken = tokenStore.getTokenBefore(node)
+      let rightToken = tokenStore.getTokenAfter(node)
+      let firstToken = tokenStore.getFirstToken(node)
+
+      while (isLeftParen(leftToken) && isRightParen(rightToken)) {
+        setOffset(firstToken, 1, leftToken)
+        setOffset(rightToken, 0, leftToken)
+
+        firstToken = leftToken
+        leftToken = tokenStore.getTokenBefore(leftToken)
+        rightToken = tokenStore.getTokenAfter(rightToken)
+      }
+    },
+    /** @param {ASTNode} node */
+    // Ignore tokens of unknown nodes.
+    '*:exit'(node) {
+      if (
+        !KNOWN_NODES.has(node.type) &&
+        !NON_STANDARD_KNOWN_NODES.has(node.type)
+      ) {
+        ignore(node)
+      }
+    },
+    /** @param {Program} node */
+    // Top-level process.
+    Program(node) {
+      const firstToken = node.tokens[0]
+      const isScriptTag =
+        firstToken != null &&
+        firstToken.type === 'Punctuator' &&
+        firstToken.value === '<script>'
+      const baseIndent = isScriptTag
+        ? options.indentSize * options.baseIndent
+        : 0
+
+      for (const statement of node.body) {
+        processTopLevelNode(statement, baseIndent)
+      }
+    },
+    /** @param {VElement} node */
+    "VElement[parent.type!='VElement']"(node) {
+      processTopLevelNode(node, 0)
+    },
+    /** @param {Program | VElement} node */
+    // Do validation.
+    ":matches(Program, VElement[parent.type!='VElement']):exit"(node) {
+      let comments = []
+      /** @type {Token[]} */
+      let tokensOnSameLine = []
+      let isBesideMultilineToken = false
+      let lastValidatedToken = null
+
+      // Validate indentation of tokens.
+      for (const token of tokenStore.getTokens(node, ITERATION_OPTS)) {
+        if (
+          tokensOnSameLine.length === 0 ||
+          tokensOnSameLine[0].loc.start.line === token.loc.start.line
+        ) {
+          // This is on the same line (or the first token).
+          tokensOnSameLine.push(token)
+        } else if (tokensOnSameLine.every(isComment)) {
+          // New line is detected, but the all tokens of the previous line are comment.
+          // Comment lines are adjusted to the next code line.
+          comments.push(tokensOnSameLine[0])
+          isBesideMultilineToken =
+            /** @type {Token} */ (last(tokensOnSameLine)).loc.end.line ===
+            token.loc.start.line
+          tokensOnSameLine = [token]
+        } else {
+          // New line is detected, so validate the tokens.
+          if (!isBesideMultilineToken) {
+            validate(tokensOnSameLine, comments, lastValidatedToken)
+            lastValidatedToken = tokensOnSameLine[0]
+          }
+          isBesideMultilineToken =
+            /** @type {Token} */ (last(tokensOnSameLine)).loc.end.line ===
+            token.loc.start.line
+          tokensOnSameLine = [token]
+          comments = []
+        }
+      }
+      if (tokensOnSameLine.length >= 1 && tokensOnSameLine.some(isNotComment)) {
+        validate(tokensOnSameLine, comments, lastValidatedToken)
+      }
+    }
+  })
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/utils/index.js b/server/node_modules/eslint-plugin-vue/lib/utils/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..3df90418a6609e68b5ee9ce067a02f2648ff80ab
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/utils/index.js
@@ -0,0 +1,2022 @@
+/**
+ * @author Toru Nagashima <https://github.com/mysticatea>
+ * @copyright 2017 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+/**
+ * @typedef {import('eslint').Rule.RuleModule} RuleModule
+ * @typedef {import('estree').Position} Position
+ * @typedef {import('eslint').Rule.CodePath} CodePath
+ * @typedef {import('eslint').Rule.CodePathSegment} CodePathSegment
+ */
+/**
+ * @typedef {object} ComponentArrayPropDetectName
+ * @property {'array'} type
+ * @property {Literal | TemplateLiteral} key
+ * @property {string} propName
+ * @property {null} value
+ * @property {Expression | SpreadElement} node
+ *
+ * @typedef {object} ComponentArrayPropUnknownName
+ * @property {'array'} type
+ * @property {null} key
+ * @property {null} propName
+ * @property {null} value
+ * @property {Expression | SpreadElement} node
+ *
+ * @typedef {ComponentArrayPropDetectName | ComponentArrayPropUnknownName} ComponentArrayProp
+ *
+ * @typedef {object} ComponentObjectPropDetectName
+ * @property {'object'} type
+ * @property {Expression} key
+ * @property {string} propName
+ * @property {Expression} value
+ * @property {Property} node
+ *
+ * @typedef {object} ComponentObjectPropUnknownName
+ * @property {'object'} type
+ * @property {null} key
+ * @property {null} propName
+ * @property {Expression} value
+ * @property {Property} node
+ *
+ * @typedef {ComponentObjectPropDetectName | ComponentObjectPropUnknownName} ComponentObjectProp
+ */
+/**
+ * @typedef {object} ComponentArrayEmitDetectName
+ * @property {'array'} type
+ * @property {Literal | TemplateLiteral} key
+ * @property {string} emitName
+ * @property {null} value
+ * @property {Expression | SpreadElement} node
+ *
+ * @typedef {object} ComponentArrayEmitUnknownName
+ * @property {'array'} type
+ * @property {null} key
+ * @property {null} emitName
+ * @property {null} value
+ * @property {Expression | SpreadElement} node
+ *
+ * @typedef {ComponentArrayEmitDetectName | ComponentArrayEmitUnknownName} ComponentArrayEmit
+ *
+ * @typedef {object} ComponentObjectEmitDetectName
+ * @property {'object'} type
+ * @property {Expression} key
+ * @property {string} emitName
+ * @property {Expression} value
+ * @property {Property} node
+ *
+ * @typedef {object} ComponentObjectEmitUnknownName
+ * @property {'object'} type
+ * @property {null} key
+ * @property {null} emitName
+ * @property {Expression} value
+ * @property {Property} node
+ *
+ * @typedef {ComponentObjectEmitDetectName | ComponentObjectEmitUnknownName} ComponentObjectEmit
+ */
+/**
+ * @typedef { {key: string | null, value: BlockStatement | null} } ComponentComputedProperty
+ */
+/**
+ * @typedef { 'props' | 'data' | 'computed' | 'setup' | 'watch' | 'methods' } GroupName
+ * @typedef { { type: 'array',  name: string, groupName: GroupName, node: Literal | TemplateLiteral } } ComponentArrayPropertyData
+ * @typedef { { type: 'object', name: string, groupName: GroupName, node: Identifier | Literal | TemplateLiteral, property: Property } } ComponentObjectPropertyData
+ * @typedef { ComponentArrayPropertyData | ComponentObjectPropertyData } ComponentPropertyData
+ */
+/**
+ * @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').VueObjectType} VueObjectType
+ * @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').VueObjectData} VueObjectData
+ * @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').VueVisitor} VueVisitor
+ */
+
+// ------------------------------------------------------------------------------
+// Helpers
+// ------------------------------------------------------------------------------
+
+const HTML_ELEMENT_NAMES = new Set(require('./html-elements.json'))
+const SVG_ELEMENT_NAMES = new Set(require('./svg-elements.json'))
+const VOID_ELEMENT_NAMES = new Set(require('./void-elements.json'))
+const path = require('path')
+const vueEslintParser = require('vue-eslint-parser')
+const { findVariable } = require('eslint-utils')
+
+/**
+ * @type { WeakMap<RuleContext, Token[]> }
+ */
+const componentComments = new WeakMap()
+
+/** @type { Map<string, RuleModule> | null } */
+let ruleMap = null
+/**
+ * Get the core rule implementation from the rule name
+ * @param {string} name
+ * @returns {RuleModule}
+ */
+function getCoreRule(name) {
+  const map = ruleMap || (ruleMap = new (require('eslint').Linter)().getRules())
+  return map.get(name) || require(`eslint/lib/rules/${name}`)
+}
+
+/**
+ * Wrap the rule context object to override methods which access to tokens (such as getTokenAfter).
+ * @param {RuleContext} context The rule context object.
+ * @param {ParserServices.TokenStore} tokenStore The token store object for template.
+ * @returns {RuleContext}
+ */
+function wrapContextToOverrideTokenMethods(context, tokenStore) {
+  const eslintSourceCode = context.getSourceCode()
+  /** @type {Token[] | null} */
+  let tokensAndComments = null
+  function getTokensAndComments() {
+    if (tokensAndComments) {
+      return tokensAndComments
+    }
+    const templateBody = eslintSourceCode.ast.templateBody
+    tokensAndComments = templateBody
+      ? tokenStore.getTokens(templateBody, {
+          includeComments: true
+        })
+      : []
+    return tokensAndComments
+  }
+  const sourceCode = new Proxy(Object.assign({}, eslintSourceCode), {
+    get(_object, key) {
+      if (key === 'tokensAndComments') {
+        return getTokensAndComments()
+      }
+      // @ts-expect-error
+      return key in tokenStore ? tokenStore[key] : eslintSourceCode[key]
+    }
+  })
+
+  return {
+    // @ts-expect-error
+    __proto__: context,
+    getSourceCode() {
+      return sourceCode
+    }
+  }
+}
+
+/**
+ * Wrap the rule context object to override report method to skip the dynamic argument.
+ * @param {RuleContext} context The rule context object.
+ * @returns {RuleContext}
+ */
+function wrapContextToOverrideReportMethodToSkipDynamicArgument(context) {
+  const sourceCode = context.getSourceCode()
+  const templateBody = sourceCode.ast.templateBody
+  if (!templateBody) {
+    return context
+  }
+  /** @type {Range[]} */
+  const directiveKeyRanges = []
+  const traverseNodes = vueEslintParser.AST.traverseNodes
+  traverseNodes(templateBody, {
+    enterNode(node, parent) {
+      if (
+        parent &&
+        parent.type === 'VDirectiveKey' &&
+        node.type === 'VExpressionContainer'
+      ) {
+        directiveKeyRanges.push(node.range)
+      }
+    },
+    leaveNode() {}
+  })
+
+  return {
+    // @ts-expect-error
+    __proto__: context,
+    report(descriptor, ...args) {
+      let range = null
+      if (descriptor.loc) {
+        const startLoc = descriptor.loc.start || descriptor.loc
+        const endLoc = descriptor.loc.end || startLoc
+        range = [
+          sourceCode.getIndexFromLoc(startLoc),
+          sourceCode.getIndexFromLoc(endLoc)
+        ]
+      } else if (descriptor.node) {
+        range = descriptor.node.range
+      }
+      if (range) {
+        for (const directiveKeyRange of directiveKeyRanges) {
+          if (
+            range[0] < directiveKeyRange[1] &&
+            directiveKeyRange[0] < range[1]
+          ) {
+            return
+          }
+        }
+      }
+      context.report(descriptor, ...args)
+    }
+  }
+}
+
+// ------------------------------------------------------------------------------
+// Exports
+// ------------------------------------------------------------------------------
+
+module.exports = {
+  /**
+   * Register the given visitor to parser services.
+   * If the parser service of `vue-eslint-parser` was not found,
+   * this generates a warning.
+   *
+   * @param {RuleContext} context The rule context to use parser services.
+   * @param {TemplateListener} templateBodyVisitor The visitor to traverse the template body.
+   * @param {RuleListener} [scriptVisitor] The visitor to traverse the script.
+   * @returns {RuleListener} The merged visitor.
+   */
+  defineTemplateBodyVisitor,
+
+  /**
+   * Wrap a given core rule to apply it to Vue.js template.
+   * @param {string} coreRuleName The name of the core rule implementation to wrap.
+   * @param {Object} [options] The option of this rule.
+   * @param {string[]} [options.categories] The categories of this rule.
+   * @param {boolean} [options.skipDynamicArguments] If `true`, skip validation within dynamic arguments.
+   * @param {boolean} [options.skipDynamicArgumentsReport] If `true`, skip report within dynamic arguments.
+   * @param { (context: RuleContext, options: { coreHandlers: RuleListener }) => TemplateListener } [options.create] If define, extend core rule.
+   * @returns {RuleModule} The wrapped rule implementation.
+   */
+  wrapCoreRule(coreRuleName, options) {
+    const coreRule = getCoreRule(coreRuleName)
+    const {
+      categories,
+      skipDynamicArguments,
+      skipDynamicArgumentsReport,
+      create
+    } = options || {}
+    return {
+      create(context) {
+        const tokenStore =
+          context.parserServices.getTemplateBodyTokenStore &&
+          context.parserServices.getTemplateBodyTokenStore()
+
+        // The `context.getSourceCode()` cannot access the tokens of templates.
+        // So override the methods which access to tokens by the `tokenStore`.
+        if (tokenStore) {
+          context = wrapContextToOverrideTokenMethods(context, tokenStore)
+        }
+
+        if (skipDynamicArgumentsReport) {
+          context = wrapContextToOverrideReportMethodToSkipDynamicArgument(
+            context
+          )
+        }
+
+        // Move `Program` handlers to `VElement[parent.type!='VElement']`
+        const coreHandlers = coreRule.create(context)
+
+        const handlers = /** @type {TemplateListener} */ (Object.assign(
+          {},
+          coreHandlers
+        ))
+        if (handlers.Program) {
+          handlers["VElement[parent.type!='VElement']"] = handlers.Program
+          delete handlers.Program
+        }
+        if (handlers['Program:exit']) {
+          handlers["VElement[parent.type!='VElement']:exit"] =
+            handlers['Program:exit']
+          delete handlers['Program:exit']
+        }
+
+        if (skipDynamicArguments) {
+          let withinDynamicArguments = false
+          for (const name of Object.keys(handlers)) {
+            const original = handlers[name]
+            /** @param {any[]} args */
+            handlers[name] = (...args) => {
+              if (withinDynamicArguments) return
+              // @ts-expect-error
+              original(...args)
+            }
+          }
+          handlers['VDirectiveKey > VExpressionContainer'] = () => {
+            withinDynamicArguments = true
+          }
+          handlers['VDirectiveKey > VExpressionContainer:exit'] = () => {
+            withinDynamicArguments = false
+          }
+        }
+
+        if (create) {
+          compositingVisitors(handlers, create(context, { coreHandlers }))
+        }
+
+        // Apply the handlers to templates.
+        return defineTemplateBodyVisitor(context, handlers)
+      },
+
+      meta: Object.assign({}, coreRule.meta, {
+        docs: Object.assign({}, coreRule.meta.docs, {
+          category: null,
+          categories,
+          url: `https://eslint.vuejs.org/rules/${path.basename(
+            coreRule.meta.docs.url || ''
+          )}.html`,
+          extensionRule: true,
+          coreRuleUrl: coreRule.meta.docs.url
+        })
+      })
+    }
+  },
+  /**
+   * Checks whether the given value is defined.
+   * @template T
+   * @param {T | null | undefined} v
+   * @returns {v is T}
+   */
+  isDef,
+  /**
+   * Get the previous sibling element of the given element.
+   * @param {VElement} node The element node to get the previous sibling element.
+   * @returns {VElement|null} The previous sibling element.
+   */
+  prevSibling(node) {
+    let prevElement = null
+
+    for (const siblingNode of (node.parent && node.parent.children) || []) {
+      if (siblingNode === node) {
+        return prevElement
+      }
+      if (siblingNode.type === 'VElement') {
+        prevElement = siblingNode
+      }
+    }
+
+    return null
+  },
+
+  /**
+   * Check whether the given start tag has specific directive.
+   * @param {VElement} node The start tag node to check.
+   * @param {string} name The attribute name to check.
+   * @param {string} [value] The attribute value to check.
+   * @returns {boolean} `true` if the start tag has the attribute.
+   */
+  hasAttribute(node, name, value) {
+    return Boolean(this.getAttribute(node, name, value))
+  },
+
+  /**
+   * Check whether the given start tag has specific directive.
+   * @param {VElement} node The start tag node to check.
+   * @param {string} name The directive name to check.
+   * @param {string} [argument] The directive argument to check.
+   * @returns {boolean} `true` if the start tag has the directive.
+   */
+  hasDirective(node, name, argument) {
+    return Boolean(this.getDirective(node, name, argument))
+  },
+
+  /**
+   * Check whether the given directive attribute has their empty value (`=""`).
+   * @param {VDirective} node The directive attribute node to check.
+   * @param {RuleContext} context The rule context to use parser services.
+   * @returns {boolean} `true` if the directive attribute has their empty value (`=""`).
+   */
+  isEmptyValueDirective(node, context) {
+    if (node.value == null) {
+      return false
+    }
+    if (node.value.expression != null) {
+      return false
+    }
+
+    let valueText = context.getSourceCode().getText(node.value)
+    if (
+      (valueText[0] === '"' || valueText[0] === "'") &&
+      valueText[0] === valueText[valueText.length - 1]
+    ) {
+      // quoted
+      valueText = valueText.slice(1, -1)
+    }
+    if (!valueText) {
+      // empty
+      return true
+    }
+    return false
+  },
+
+  /**
+   * Check whether the given directive attribute has their empty expression value (e.g. `=" "`, `="/* &ast;/"`).
+   * @param {VDirective} node The directive attribute node to check.
+   * @param {RuleContext} context The rule context to use parser services.
+   * @returns {boolean} `true` if the directive attribute has their empty expression value.
+   */
+  isEmptyExpressionValueDirective(node, context) {
+    if (node.value == null) {
+      return false
+    }
+    if (node.value.expression != null) {
+      return false
+    }
+
+    const valueNode = node.value
+    const tokenStore = context.parserServices.getTemplateBodyTokenStore()
+    let quote1 = null
+    let quote2 = null
+    // `node.value` may be only comments, so cannot get the correct tokens with `tokenStore.getTokens(node.value)`.
+    for (const token of tokenStore.getTokens(node)) {
+      if (token.range[1] <= valueNode.range[0]) {
+        continue
+      }
+      if (valueNode.range[1] <= token.range[0]) {
+        // empty
+        return true
+      }
+      if (
+        !quote1 &&
+        token.type === 'Punctuator' &&
+        (token.value === '"' || token.value === "'")
+      ) {
+        quote1 = token
+        continue
+      }
+      if (
+        !quote2 &&
+        quote1 &&
+        token.type === 'Punctuator' &&
+        token.value === quote1.value
+      ) {
+        quote2 = token
+        continue
+      }
+      // not empty
+      return false
+    }
+    // empty
+    return true
+  },
+
+  /**
+   * Get the attribute which has the given name.
+   * @param {VElement} node The start tag node to check.
+   * @param {string} name The attribute name to check.
+   * @param {string} [value] The attribute value to check.
+   * @returns {VAttribute | null} The found attribute.
+   */
+  getAttribute(node, name, value) {
+    return (
+      node.startTag.attributes.find(
+        /**
+         * @param {VAttribute | VDirective} node
+         * @returns {node is VAttribute}
+         */
+        (node) => {
+          return (
+            !node.directive &&
+            node.key.name === name &&
+            (value === undefined ||
+              (node.value != null && node.value.value === value))
+          )
+        }
+      ) || null
+    )
+  },
+
+  /**
+   * Get the directive list which has the given name.
+   * @param {VElement | VStartTag} node The start tag node to check.
+   * @param {string} name The directive name to check.
+   * @returns {VDirective[]} The array of `v-slot` directives.
+   */
+  getDirectives(node, name) {
+    const attributes =
+      node.type === 'VElement' ? node.startTag.attributes : node.attributes
+    return attributes.filter(
+      /**
+       * @param {VAttribute | VDirective} node
+       * @returns {node is VDirective}
+       */
+      (node) => {
+        return node.directive && node.key.name.name === name
+      }
+    )
+  },
+  /**
+   * Get the directive which has the given name.
+   * @param {VElement} node The start tag node to check.
+   * @param {string} name The directive name to check.
+   * @param {string} [argument] The directive argument to check.
+   * @returns {VDirective | null} The found directive.
+   */
+  getDirective(node, name, argument) {
+    return (
+      node.startTag.attributes.find(
+        /**
+         * @param {VAttribute | VDirective} node
+         * @returns {node is VDirective}
+         */
+        (node) => {
+          return (
+            node.directive &&
+            node.key.name.name === name &&
+            (argument === undefined ||
+              (node.key.argument &&
+                node.key.argument.type === 'VIdentifier' &&
+                node.key.argument.name) === argument)
+          )
+        }
+      ) || null
+    )
+  },
+
+  /**
+   * Returns the list of all registered components
+   * @param {ObjectExpression} componentObject
+   * @returns { { node: Property, name: string }[] } Array of ASTNodes
+   */
+  getRegisteredComponents(componentObject) {
+    const componentsNode = componentObject.properties.find(
+      /**
+       * @param {ESNode} p
+       * @returns {p is (Property & { key: Identifier & {name: 'components'}, value: ObjectExpression })}
+       */
+      (p) => {
+        return (
+          p.type === 'Property' &&
+          p.key.type === 'Identifier' &&
+          p.key.name === 'components' &&
+          p.value.type === 'ObjectExpression'
+        )
+      }
+    )
+
+    if (!componentsNode) {
+      return []
+    }
+
+    return componentsNode.value.properties
+      .filter(isProperty)
+      .map((node) => {
+        const name = getStaticPropertyName(node)
+        return name ? { node, name } : null
+      })
+      .filter(isDef)
+  },
+
+  /**
+   * Check whether the previous sibling element has `if` or `else-if` directive.
+   * @param {VElement} node The element node to check.
+   * @returns {boolean} `true` if the previous sibling element has `if` or `else-if` directive.
+   */
+  prevElementHasIf(node) {
+    const prev = this.prevSibling(node)
+    return (
+      prev != null &&
+      prev.startTag.attributes.some(
+        (a) =>
+          a.directive &&
+          (a.key.name.name === 'if' || a.key.name.name === 'else-if')
+      )
+    )
+  },
+
+  /**
+   * Check whether the given node is a custom component or not.
+   * @param {VElement} node The start tag node to check.
+   * @returns {boolean} `true` if the node is a custom component.
+   */
+  isCustomComponent(node) {
+    return (
+      (this.isHtmlElementNode(node) &&
+        !this.isHtmlWellKnownElementName(node.rawName)) ||
+      (this.isSvgElementNode(node) &&
+        !this.isSvgWellKnownElementName(node.rawName)) ||
+      this.hasAttribute(node, 'is') ||
+      this.hasDirective(node, 'bind', 'is') ||
+      this.hasDirective(node, 'is')
+    )
+  },
+
+  /**
+   * Check whether the given node is a HTML element or not.
+   * @param {VElement} node The node to check.
+   * @returns {boolean} `true` if the node is a HTML element.
+   */
+  isHtmlElementNode(node) {
+    return node.namespace === vueEslintParser.AST.NS.HTML
+  },
+
+  /**
+   * Check whether the given node is a SVG element or not.
+   * @param {VElement} node The node to check.
+   * @returns {boolean} `true` if the name is a SVG element.
+   */
+  isSvgElementNode(node) {
+    return node.namespace === vueEslintParser.AST.NS.SVG
+  },
+
+  /**
+   * Check whether the given name is a MathML element or not.
+   * @param {VElement} node The node to check.
+   * @returns {boolean} `true` if the node is a MathML element.
+   */
+  isMathMLElementNode(node) {
+    return node.namespace === vueEslintParser.AST.NS.MathML
+  },
+
+  /**
+   * Check whether the given name is an well-known element or not.
+   * @param {string} name The name to check.
+   * @returns {boolean} `true` if the name is an well-known element name.
+   */
+  isHtmlWellKnownElementName(name) {
+    return HTML_ELEMENT_NAMES.has(name)
+  },
+
+  /**
+   * Check whether the given name is an well-known SVG element or not.
+   * @param {string} name The name to check.
+   * @returns {boolean} `true` if the name is an well-known SVG element name.
+   */
+  isSvgWellKnownElementName(name) {
+    return SVG_ELEMENT_NAMES.has(name)
+  },
+
+  /**
+   * Check whether the given name is a void element name or not.
+   * @param {string} name The name to check.
+   * @returns {boolean} `true` if the name is a void element name.
+   */
+  isHtmlVoidElementName(name) {
+    return VOID_ELEMENT_NAMES.has(name)
+  },
+  /**
+   * Gets the property name of a given node.
+   * @param {Property|AssignmentProperty|MethodDefinition|MemberExpression} node - The node to get.
+   * @return {string|null} The property name if static. Otherwise, null.
+   */
+  getStaticPropertyName,
+  /**
+   * Gets the string of a given node.
+   * @param {Literal|TemplateLiteral} node - The node to get.
+   * @return {string|null} The string if static. Otherwise, null.
+   */
+  getStringLiteralValue,
+  /**
+   * Get all props by looking at all component's properties
+   * @param {ObjectExpression} componentObject Object with component definition
+   * @return {(ComponentArrayProp | ComponentObjectProp)[]} Array of component props in format: [{key?: String, value?: ASTNode, node: ASTNod}]
+   */
+  getComponentProps(componentObject) {
+    const propsNode = componentObject.properties.find(
+      /**
+       * @param {ESNode} p
+       * @returns {p is (Property & { key: Identifier & {name: 'props'}, value: ObjectExpression | ArrayExpression })}
+       */
+      (p) => {
+        return (
+          p.type === 'Property' &&
+          p.key.type === 'Identifier' &&
+          p.key.name === 'props' &&
+          (p.value.type === 'ObjectExpression' ||
+            p.value.type === 'ArrayExpression')
+        )
+      }
+    )
+
+    if (!propsNode) {
+      return []
+    }
+
+    if (propsNode.value.type === 'ObjectExpression') {
+      return propsNode.value.properties.filter(isProperty).map((prop) => {
+        const propName = getStaticPropertyName(prop)
+        if (propName != null) {
+          return {
+            type: 'object',
+            key: prop.key,
+            propName,
+            value: skipTSAsExpression(prop.value),
+            node: prop
+          }
+        }
+        return {
+          type: 'object',
+          key: null,
+          propName: null,
+          value: skipTSAsExpression(prop.value),
+          node: prop
+        }
+      })
+    } else {
+      return propsNode.value.elements.filter(isDef).map((prop) => {
+        if (prop.type === 'Literal' || prop.type === 'TemplateLiteral') {
+          const propName = getStringLiteralValue(prop)
+          if (propName != null) {
+            return {
+              type: 'array',
+              key: prop,
+              propName,
+              value: null,
+              node: prop
+            }
+          }
+        }
+        return {
+          type: 'array',
+          key: null,
+          propName: null,
+          value: null,
+          node: prop
+        }
+      })
+    }
+  },
+
+  /**
+   * Get all emits by looking at all component's properties
+   * @param {ObjectExpression} componentObject Object with component definition
+   * @return {(ComponentArrayEmit | ComponentObjectEmit)[]} Array of component emits in format: [{key?: String, value?: ASTNode, node: ASTNod}]
+   */
+  getComponentEmits(componentObject) {
+    const emitsNode = componentObject.properties.find(
+      /**
+       * @param {ESNode} p
+       * @returns {p is (Property & { key: Identifier & {name: 'emits'}, value: ObjectExpression | ArrayExpression })}
+       */
+      (p) => {
+        return (
+          p.type === 'Property' &&
+          p.key.type === 'Identifier' &&
+          p.key.name === 'emits' &&
+          (p.value.type === 'ObjectExpression' ||
+            p.value.type === 'ArrayExpression')
+        )
+      }
+    )
+
+    if (!emitsNode) {
+      return []
+    }
+
+    if (emitsNode.value.type === 'ObjectExpression') {
+      return emitsNode.value.properties.filter(isProperty).map((prop) => {
+        const emitName = getStaticPropertyName(prop)
+        if (emitName != null) {
+          return {
+            type: 'object',
+            key: prop.key,
+            emitName,
+            value: skipTSAsExpression(prop.value),
+            node: prop
+          }
+        }
+        return {
+          type: 'object',
+          key: null,
+          emitName: null,
+          value: skipTSAsExpression(prop.value),
+          node: prop
+        }
+      })
+    } else {
+      return emitsNode.value.elements.filter(isDef).map((prop) => {
+        if (prop.type === 'Literal' || prop.type === 'TemplateLiteral') {
+          const emitName = getStringLiteralValue(prop)
+          if (emitName != null) {
+            return {
+              type: 'array',
+              key: prop,
+              emitName,
+              value: null,
+              node: prop
+            }
+          }
+        }
+        return {
+          type: 'array',
+          key: null,
+          emitName: null,
+          value: null,
+          node: prop
+        }
+      })
+    }
+  },
+
+  /**
+   * Get all computed properties by looking at all component's properties
+   * @param {ObjectExpression} componentObject Object with component definition
+   * @return {ComponentComputedProperty[]} Array of computed properties in format: [{key: String, value: ASTNode}]
+   */
+  getComputedProperties(componentObject) {
+    const computedPropertiesNode = componentObject.properties.find(
+      /**
+       * @param {ESNode} p
+       * @returns {p is (Property & { key: Identifier & {name: 'computed'}, value: ObjectExpression })}
+       */
+      (p) => {
+        return (
+          p.type === 'Property' &&
+          p.key.type === 'Identifier' &&
+          p.key.name === 'computed' &&
+          p.value.type === 'ObjectExpression'
+        )
+      }
+    )
+
+    if (!computedPropertiesNode) {
+      return []
+    }
+
+    return computedPropertiesNode.value.properties
+      .filter(isProperty)
+      .map((cp) => {
+        const key = getStaticPropertyName(cp)
+        /** @type {Expression} */
+        const propValue = skipTSAsExpression(cp.value)
+        /** @type {BlockStatement | null} */
+        let value = null
+
+        if (propValue.type === 'FunctionExpression') {
+          value = propValue.body
+        } else if (propValue.type === 'ObjectExpression') {
+          const get = propValue.properties.find(
+            /**
+             * @param {ESNode} p
+             * @returns { p is (Property & { value: FunctionExpression }) }
+             */
+            (p) =>
+              p.type === 'Property' &&
+              p.key.type === 'Identifier' &&
+              p.key.name === 'get' &&
+              p.value.type === 'FunctionExpression'
+          )
+          value = get ? get.value.body : null
+        }
+
+        return { key, value }
+      })
+  },
+
+  isVueFile,
+
+  /**
+   * Check if current file is a Vue instance or component and call callback
+   * @param {RuleContext} context The ESLint rule context object.
+   * @param { (node: ObjectExpression, type: VueObjectType) => void } cb Callback function
+   */
+  executeOnVue(context, cb) {
+    return compositingVisitors(
+      this.executeOnVueComponent(context, cb),
+      this.executeOnVueInstance(context, cb)
+    )
+  },
+
+  /**
+   * Define handlers to traverse the Vue Objects.
+   * Some special events are available to visitor.
+   *
+   * - `onVueObjectEnter` ... Event when Vue Object is found.
+   * - `onVueObjectExit` ... Event when Vue Object visit ends.
+   * - `onSetupFunctionEnter` ... Event when setup function found.
+   * - `onRenderFunctionEnter` ... Event when render function found.
+   *
+   * @param {RuleContext} context The ESLint rule context object.
+   * @param {VueVisitor} visitor The visitor to traverse the Vue Objects.
+   */
+  defineVueVisitor(context, visitor) {
+    /** @type {VueObjectData | null} */
+    let vueStack = null
+
+    /**
+     * @param {string} key
+     * @param {ESNode} node
+     */
+    function callVisitor(key, node) {
+      if (visitor[key] && vueStack) {
+        // @ts-expect-error
+        visitor[key](node, vueStack)
+      }
+    }
+
+    /** @type {NodeListener} */
+    const vueVisitor = {}
+    for (const key in visitor) {
+      vueVisitor[key] = (node) => callVisitor(key, node)
+    }
+
+    /**
+     * @param {ObjectExpression} node
+     */
+    vueVisitor.ObjectExpression = (node) => {
+      const type = getVueObjectType(context, node)
+      if (type) {
+        vueStack = {
+          node,
+          type,
+          parent: vueStack,
+          get functional() {
+            const functional = node.properties.find(
+              /**
+               * @param {Property | SpreadElement} p
+               * @returns {p is Property}
+               */
+              (p) =>
+                p.type === 'Property' &&
+                getStaticPropertyName(p) === 'functional'
+            )
+            if (!functional) {
+              return false
+            }
+            if (
+              functional.value.type === 'Literal' &&
+              functional.value.value === false
+            ) {
+              return false
+            }
+            return true
+          }
+        }
+        callVisitor('onVueObjectEnter', node)
+      }
+      callVisitor('ObjectExpression', node)
+    }
+    vueVisitor['ObjectExpression:exit'] = (node) => {
+      callVisitor('ObjectExpression:exit', node)
+      if (vueStack && vueStack.node === node) {
+        callVisitor('onVueObjectExit', node)
+        vueStack = vueStack.parent
+      }
+    }
+    if (visitor.onSetupFunctionEnter || visitor.onRenderFunctionEnter) {
+      /** @param { (FunctionExpression | ArrowFunctionExpression) & { parent: Property } } node */
+      vueVisitor[
+        'Property[value.type=/^(Arrow)?FunctionExpression$/] > :function'
+      ] = (node) => {
+        /** @type {Property} */
+        const prop = node.parent
+        if (vueStack && prop.parent === vueStack.node && prop.value === node) {
+          const name = getStaticPropertyName(prop)
+          if (name === 'setup') {
+            callVisitor('onSetupFunctionEnter', node)
+          } else if (name === 'render') {
+            callVisitor('onRenderFunctionEnter', node)
+          }
+        }
+        callVisitor(
+          'Property[value.type=/^(Arrow)?FunctionExpression$/] > :function',
+          node
+        )
+      }
+    }
+
+    return vueVisitor
+  },
+
+  getVueObjectType,
+  compositingVisitors,
+
+  /**
+   * Check if current file is a Vue instance (new Vue) and call callback
+   * @param {RuleContext} context The ESLint rule context object.
+   * @param { (node: ObjectExpression, type: VueObjectType) => void } cb Callback function
+   */
+  executeOnVueInstance(context, cb) {
+    return {
+      /** @param {ObjectExpression} node */
+      'ObjectExpression:exit'(node) {
+        const type = getVueObjectType(context, node)
+        if (!type || type !== 'instance') return
+        cb(node, type)
+      }
+    }
+  },
+
+  /**
+   * Check if current file is a Vue component and call callback
+   * @param {RuleContext} context The ESLint rule context object.
+   * @param { (node: ObjectExpression, type: VueObjectType) => void } cb Callback function
+   */
+  executeOnVueComponent(context, cb) {
+    return {
+      /** @param {ObjectExpression} node */
+      'ObjectExpression:exit'(node) {
+        const type = getVueObjectType(context, node)
+        if (
+          !type ||
+          (type !== 'mark' && type !== 'export' && type !== 'definition')
+        )
+          return
+        cb(node, type)
+      }
+    }
+  },
+
+  /**
+   * Check call `Vue.component` and call callback.
+   * @param {RuleContext} _context The ESLint rule context object.
+   * @param { (node: CallExpression) => void } cb Callback function
+   */
+  executeOnCallVueComponent(_context, cb) {
+    return {
+      /** @param {Identifier & { parent: MemberExpression & { parent: CallExpression } } } node */
+      "CallExpression > MemberExpression > Identifier[name='component']": (
+        node
+      ) => {
+        const callExpr = node.parent.parent
+        const callee = callExpr.callee
+
+        if (callee.type === 'MemberExpression') {
+          const calleeObject = skipTSAsExpression(callee.object)
+
+          if (
+            calleeObject.type === 'Identifier' &&
+            // calleeObject.name === 'Vue' && // Any names can be used in Vue.js 3.x. e.g. app.component()
+            callee.property === node &&
+            callExpr.arguments.length >= 1
+          ) {
+            cb(callExpr)
+          }
+        }
+      }
+    }
+  },
+  /**
+   * Return generator with all properties
+   * @param {ObjectExpression} node Node to check
+   * @param {Set<GroupName>} groups Name of parent group
+   * @returns {IterableIterator<ComponentPropertyData>}
+   */
+  *iterateProperties(node, groups) {
+    for (const item of node.properties) {
+      if (item.type !== 'Property') {
+        continue
+      }
+
+      const name = /** @type {GroupName | null} */ (getStaticPropertyName(item))
+      if (!name || !groups.has(name)) continue
+
+      if (item.value.type === 'ArrayExpression') {
+        yield* this.iterateArrayExpression(item.value, name)
+      } else if (item.value.type === 'ObjectExpression') {
+        yield* this.iterateObjectExpression(item.value, name)
+      } else if (item.value.type === 'FunctionExpression') {
+        yield* this.iterateFunctionExpression(item.value, name)
+      } else if (item.value.type === 'ArrowFunctionExpression') {
+        yield* this.iterateArrowFunctionExpression(item.value, name)
+      }
+    }
+  },
+
+  /**
+   * Return generator with all elements inside ArrayExpression
+   * @param {ArrayExpression} node Node to check
+   * @param {GroupName} groupName Name of parent group
+   * @returns {IterableIterator<ComponentArrayPropertyData>}
+   */
+  *iterateArrayExpression(node, groupName) {
+    for (const item of node.elements) {
+      if (
+        item &&
+        (item.type === 'Literal' || item.type === 'TemplateLiteral')
+      ) {
+        const name = getStringLiteralValue(item)
+        if (name) {
+          yield { type: 'array', name, groupName, node: item }
+        }
+      }
+    }
+  },
+
+  /**
+   * Return generator with all elements inside ObjectExpression
+   * @param {ObjectExpression} node Node to check
+   * @param {GroupName} groupName Name of parent group
+   * @returns {IterableIterator<ComponentObjectPropertyData>}
+   */
+  *iterateObjectExpression(node, groupName) {
+    /** @type {Set<Property> | undefined} */
+    let usedGetter
+    for (const item of node.properties) {
+      if (item.type === 'Property') {
+        const key = item.key
+        if (
+          key.type === 'Identifier' ||
+          key.type === 'Literal' ||
+          key.type === 'TemplateLiteral'
+        ) {
+          const name = getStaticPropertyName(item)
+          if (name) {
+            if (item.kind === 'set') {
+              // find getter pair
+              if (
+                node.properties.some((item2) => {
+                  if (item2.type === 'Property' && item2.kind === 'get') {
+                    if (!usedGetter) {
+                      usedGetter = new Set()
+                    }
+                    if (usedGetter.has(item2)) {
+                      return false
+                    }
+                    const getterName = getStaticPropertyName(item2)
+                    if (getterName === name) {
+                      usedGetter.add(item2)
+                      return true
+                    }
+                  }
+                  return false
+                })
+              ) {
+                // has getter pair
+                continue
+              }
+            }
+            yield {
+              type: 'object',
+              name,
+              groupName,
+              node: key,
+              property: item
+            }
+          }
+        }
+      }
+    }
+  },
+
+  /**
+   * Return generator with all elements inside FunctionExpression
+   * @param {FunctionExpression} node Node to check
+   * @param {GroupName} groupName Name of parent group
+   * @returns {IterableIterator<ComponentObjectPropertyData>}
+   */
+  *iterateFunctionExpression(node, groupName) {
+    if (node.body.type === 'BlockStatement') {
+      for (const item of node.body.body) {
+        if (
+          item.type === 'ReturnStatement' &&
+          item.argument &&
+          item.argument.type === 'ObjectExpression'
+        ) {
+          yield* this.iterateObjectExpression(item.argument, groupName)
+        }
+      }
+    }
+  },
+
+  /**
+   * Return generator with all elements inside ArrowFunctionExpression
+   * @param {ArrowFunctionExpression} node Node to check
+   * @param {GroupName} groupName Name of parent group
+   * @returns {IterableIterator<ComponentObjectPropertyData>}
+   */
+  *iterateArrowFunctionExpression(node, groupName) {
+    const body = node.body
+    if (body.type === 'BlockStatement') {
+      for (const item of body.body) {
+        if (
+          item.type === 'ReturnStatement' &&
+          item.argument &&
+          item.argument.type === 'ObjectExpression'
+        ) {
+          yield* this.iterateObjectExpression(item.argument, groupName)
+        }
+      }
+    } else if (body.type === 'ObjectExpression') {
+      yield* this.iterateObjectExpression(body, groupName)
+    }
+  },
+
+  /**
+   * Find all functions which do not always return values
+   * @param {boolean} treatUndefinedAsUnspecified
+   * @param { (node: ESNode) => void } cb Callback function
+   * @returns {RuleListener}
+   */
+  executeOnFunctionsWithoutReturn(treatUndefinedAsUnspecified, cb) {
+    /**
+     * @typedef {object} FuncInfo
+     * @property {FuncInfo} funcInfo
+     * @property {CodePath} codePath
+     * @property {boolean} hasReturn
+     * @property {boolean} hasReturnValue
+     * @property {ESNode} node
+     */
+
+    /** @type {FuncInfo} */
+    let funcInfo
+
+    /** @param {CodePathSegment} segment */
+    function isReachable(segment) {
+      return segment.reachable
+    }
+
+    function isValidReturn() {
+      if (
+        funcInfo.codePath &&
+        funcInfo.codePath.currentSegments.some(isReachable)
+      ) {
+        return false
+      }
+      return !treatUndefinedAsUnspecified || funcInfo.hasReturnValue
+    }
+
+    return {
+      /**
+       * @param {CodePath} codePath
+       * @param {ESNode} node
+       */
+      onCodePathStart(codePath, node) {
+        funcInfo = {
+          codePath,
+          funcInfo,
+          hasReturn: false,
+          hasReturnValue: false,
+          node
+        }
+      },
+      onCodePathEnd() {
+        funcInfo = funcInfo.funcInfo
+      },
+      /** @param {ReturnStatement} node */
+      ReturnStatement(node) {
+        funcInfo.hasReturn = true
+        funcInfo.hasReturnValue = Boolean(node.argument)
+      },
+      /** @param {ArrowFunctionExpression} node */
+      'ArrowFunctionExpression:exit'(node) {
+        if (!isValidReturn() && !node.expression) {
+          cb(funcInfo.node)
+        }
+      },
+      'FunctionExpression:exit'() {
+        if (!isValidReturn()) {
+          cb(funcInfo.node)
+        }
+      }
+    }
+  },
+
+  /**
+   * Check whether the component is declared in a single line or not.
+   * @param {ASTNode} node
+   * @returns {boolean}
+   */
+  isSingleLine(node) {
+    return node.loc.start.line === node.loc.end.line
+  },
+
+  /**
+   * Check whether the templateBody of the program has invalid EOF or not.
+   * @param {Program} node The program node to check.
+   * @returns {boolean} `true` if it has invalid EOF.
+   */
+  hasInvalidEOF(node) {
+    const body = node.templateBody
+    if (body == null || body.errors == null) {
+      return false
+    }
+    return body.errors.some(
+      (error) => typeof error.code === 'string' && error.code.startsWith('eof-')
+    )
+  },
+
+  /**
+   * Get the chaining nodes of MemberExpression.
+   *
+   * @param  {ESNode} node The node to parse
+   * @return {[ESNode, ...MemberExpression[]]} The chaining nodes
+   */
+  getMemberChaining(node) {
+    /** @type {MemberExpression[]} */
+    const nodes = []
+    let n = skipChainExpression(node)
+
+    while (n.type === 'MemberExpression') {
+      nodes.push(n)
+      n = skipChainExpression(n.object)
+    }
+
+    return [n, ...nodes.reverse()]
+  },
+  /**
+   * return two string editdistance
+   * @param {string} a string a to compare
+   * @param {string} b string b to compare
+   * @returns {number}
+   */
+  editDistance(a, b) {
+    if (a === b) {
+      return 0
+    }
+    const alen = a.length
+    const blen = b.length
+    const dp = Array.from({ length: alen + 1 }).map((_) =>
+      Array.from({ length: blen + 1 }).fill(0)
+    )
+    for (let i = 0; i <= alen; i++) {
+      dp[i][0] = i
+    }
+    for (let j = 0; j <= blen; j++) {
+      dp[0][j] = j
+    }
+    for (let i = 1; i <= alen; i++) {
+      for (let j = 1; j <= blen; j++) {
+        if (a[i - 1] === b[j - 1]) {
+          dp[i][j] = dp[i - 1][j - 1]
+        } else {
+          dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1
+        }
+      }
+    }
+    return dp[alen][blen]
+  },
+  /**
+   * Checks whether the given node is Property.
+   */
+  isProperty,
+  /**
+   * Checks whether the given node is AssignmentProperty.
+   */
+  isAssignmentProperty,
+  /**
+   * Checks whether the given node is VElement.
+   */
+  isVElement,
+  /**
+   * Finds the property with the given name from the given ObjectExpression node.
+   */
+  findProperty,
+  /**
+   * Finds the assignment property with the given name from the given ObjectPattern node.
+   */
+  findAssignmentProperty,
+  /**
+   * Checks if the given node is a property value.
+   * @param {Property} prop
+   * @param {Expression} node
+   */
+  isPropertyChain,
+  /**
+   * Retrieve `TSAsExpression#expression` value if the given node a `TSAsExpression` node. Otherwise, pass through it.
+   */
+  skipTSAsExpression,
+  /**
+   * Retrieve `AssignmentPattern#left` value if the given node a `AssignmentPattern` node. Otherwise, pass through it.
+   */
+  skipDefaultParamValue,
+  /**
+   * Retrieve `ChainExpression#expression` value if the given node a `ChainExpression` node. Otherwise, pass through it.
+   */
+  skipChainExpression,
+
+  /**
+   * Check whether the given node is `this` or variable that stores `this`.
+   * @param  {ESNode} node The node to check
+   * @param {RuleContext} context The rule context to use parser services.
+   * @returns {boolean} `true` if the given node is `this`.
+   */
+  isThis(node, context) {
+    if (node.type === 'ThisExpression') {
+      return true
+    }
+    if (node.type !== 'Identifier') {
+      return false
+    }
+    const parent = node.parent
+    if (parent.type === 'MemberExpression') {
+      if (parent.property === node) {
+        return false
+      }
+    } else if (parent.type === 'Property') {
+      if (parent.key === node && !parent.computed) {
+        return false
+      }
+    }
+
+    const variable = findVariable(context.getScope(), node)
+
+    if (variable != null && variable.defs.length === 1) {
+      const def = variable.defs[0]
+      if (
+        def.type === 'Variable' &&
+        def.parent.kind === 'const' &&
+        def.node.id.type === 'Identifier'
+      ) {
+        return Boolean(
+          def.node && def.node.init && def.node.init.type === 'ThisExpression'
+        )
+      }
+    }
+    return false
+  },
+
+  /**
+   * @param {MemberExpression|Identifier} props
+   * @returns { { kind: 'assignment' | 'update' | 'call' , node: ESNode, pathNodes: MemberExpression[] } | null }
+   */
+  findMutating(props) {
+    /** @type {MemberExpression[]} */
+    const pathNodes = []
+    /** @type {MemberExpression | Identifier | ChainExpression} */
+    let node = props
+    let target = node.parent
+    while (true) {
+      if (target.type === 'AssignmentExpression') {
+        if (target.left === node) {
+          // this.xxx <=|+=|-=>
+          return {
+            kind: 'assignment',
+            node: target,
+            pathNodes
+          }
+        }
+      } else if (target.type === 'UpdateExpression') {
+        // this.xxx <++|-->
+        return {
+          kind: 'update',
+          node: target,
+          pathNodes
+        }
+      } else if (target.type === 'CallExpression') {
+        if (pathNodes.length > 0 && target.callee === node) {
+          const mem = pathNodes[pathNodes.length - 1]
+          const callName = getStaticPropertyName(mem)
+          if (
+            callName &&
+            /^push|pop|shift|unshift|reverse|splice|sort|copyWithin|fill$/u.exec(
+              callName
+            )
+          ) {
+            // this.xxx.push()
+            pathNodes.pop()
+            return {
+              kind: 'call',
+              node: target,
+              pathNodes
+            }
+          }
+        }
+      } else if (target.type === 'MemberExpression') {
+        if (target.object === node) {
+          pathNodes.push(target)
+          node = target
+          target = target.parent
+          continue // loop
+        }
+      } else if (target.type === 'ChainExpression') {
+        node = target
+        target = target.parent
+        continue // loop
+      }
+
+      return null
+    }
+  },
+
+  /**
+   * Return generator with the all handler nodes defined in the given watcher property.
+   * @param {Property|Expression} property
+   * @returns {IterableIterator<Expression>}
+   */
+  iterateWatchHandlerValues,
+
+  /**
+   * Wraps composition API trace map in both 'vue' and '@vue/composition-api' imports
+   * @param {import('eslint-utils').TYPES.TraceMap} map
+   */
+  createCompositionApiTraceMap: (map) => ({
+    vue: map,
+    '@vue/composition-api': map
+  }),
+
+  /**
+   * Checks whether or not the tokens of two given nodes are same.
+   * @param {ASTNode} left A node 1 to compare.
+   * @param {ASTNode} right A node 2 to compare.
+   * @param {ParserServices.TokenStore | SourceCode} sourceCode The ESLint source code object.
+   * @returns {boolean} the source code for the given node.
+   */
+  equalTokens(left, right, sourceCode) {
+    const tokensL = sourceCode.getTokens(left)
+    const tokensR = sourceCode.getTokens(right)
+
+    if (tokensL.length !== tokensR.length) {
+      return false
+    }
+    for (let i = 0; i < tokensL.length; ++i) {
+      if (
+        tokensL[i].type !== tokensR[i].type ||
+        tokensL[i].value !== tokensR[i].value
+      ) {
+        return false
+      }
+    }
+
+    return true
+  }
+}
+
+// ------------------------------------------------------------------------------
+// Standard Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Checks whether the given value is defined.
+ * @template T
+ * @param {T | null | undefined} v
+ * @returns {v is T}
+ */
+function isDef(v) {
+  return v != null
+}
+
+// ------------------------------------------------------------------------------
+// Rule Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Register the given visitor to parser services.
+ * If the parser service of `vue-eslint-parser` was not found,
+ * this generates a warning.
+ *
+ * @param {RuleContext} context The rule context to use parser services.
+ * @param {TemplateListener} templateBodyVisitor The visitor to traverse the template body.
+ * @param {RuleListener} [scriptVisitor] The visitor to traverse the script.
+ * @returns {RuleListener} The merged visitor.
+ */
+function defineTemplateBodyVisitor(
+  context,
+  templateBodyVisitor,
+  scriptVisitor
+) {
+  if (context.parserServices.defineTemplateBodyVisitor == null) {
+    const filename = context.getFilename()
+    if (path.extname(filename) === '.vue') {
+      context.report({
+        loc: { line: 1, column: 0 },
+        message:
+          'Use the latest vue-eslint-parser. See also https://eslint.vuejs.org/user-guide/#what-is-the-use-the-latest-vue-eslint-parser-error.'
+      })
+    }
+    return {}
+  }
+  return context.parserServices.defineTemplateBodyVisitor(
+    templateBodyVisitor,
+    scriptVisitor
+  )
+}
+
+/**
+ * @template T
+ * @param {T} visitor
+ * @param {...(TemplateListener | RuleListener | NodeListener)} visitors
+ * @returns {T}
+ */
+function compositingVisitors(visitor, ...visitors) {
+  for (const v of visitors) {
+    for (const key in v) {
+      // @ts-expect-error
+      if (visitor[key]) {
+        // @ts-expect-error
+        const o = visitor[key]
+        // @ts-expect-error
+        visitor[key] = (...args) => {
+          o(...args)
+          // @ts-expect-error
+          v[key](...args)
+        }
+      } else {
+        // @ts-expect-error
+        visitor[key] = v[key]
+      }
+    }
+  }
+  return visitor
+}
+
+// ------------------------------------------------------------------------------
+// AST Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * Finds the property with the given name from the given ObjectExpression node.
+ * @param {ObjectExpression} node
+ * @param {string} name
+ * @param { (p: Property) => boolean } [filter]
+ * @returns { (Property) | null}
+ */
+function findProperty(node, name, filter) {
+  const predicate = filter
+    ? /**
+       * @param {Property | SpreadElement} prop
+       * @returns {prop is Property}
+       */
+      (prop) =>
+        isProperty(prop) && getStaticPropertyName(prop) === name && filter(prop)
+    : /**
+       * @param {Property | SpreadElement} prop
+       * @returns {prop is Property}
+       */
+      (prop) => isProperty(prop) && getStaticPropertyName(prop) === name
+  return node.properties.find(predicate) || null
+}
+
+/**
+ * Finds the assignment property with the given name from the given ObjectPattern node.
+ * @param {ObjectPattern} node
+ * @param {string} name
+ * @param { (p: AssignmentProperty) => boolean } [filter]
+ * @returns { (AssignmentProperty) | null}
+ */
+function findAssignmentProperty(node, name, filter) {
+  const predicate = filter
+    ? /**
+       * @param {AssignmentProperty | RestElement} prop
+       * @returns {prop is AssignmentProperty}
+       */
+      (prop) =>
+        isAssignmentProperty(prop) &&
+        getStaticPropertyName(prop) === name &&
+        filter(prop)
+    : /**
+       * @param {AssignmentProperty | RestElement} prop
+       * @returns {prop is AssignmentProperty}
+       */
+      (prop) =>
+        isAssignmentProperty(prop) && getStaticPropertyName(prop) === name
+  return node.properties.find(predicate) || null
+}
+
+/**
+ * Checks whether the given node is Property.
+ * @param {Property | SpreadElement} node
+ * @returns {node is Property}
+ */
+function isProperty(node) {
+  return node.type === 'Property'
+}
+/**
+ * Checks whether the given node is AssignmentProperty.
+ * @param {AssignmentProperty | RestElement} node
+ * @returns {node is AssignmentProperty}
+ */
+function isAssignmentProperty(node) {
+  return node.type === 'Property'
+}
+/**
+ * Checks whether the given node is VElement.
+ * @param {VElement | VExpressionContainer | VText} node
+ * @returns {node is VElement}
+ */
+function isVElement(node) {
+  return node.type === 'VElement'
+}
+
+/**
+ * Retrieve `TSAsExpression#expression` value if the given node a `TSAsExpression` node. Otherwise, pass through it.
+ * @template T Node type
+ * @param {T | TSAsExpression} node The node to address.
+ * @returns {T} The `TSAsExpression#expression` value if the node is a `TSAsExpression` node. Otherwise, the node.
+ */
+function skipTSAsExpression(node) {
+  if (!node) {
+    return node
+  }
+  // @ts-expect-error
+  if (node.type === 'TSAsExpression') {
+    // @ts-expect-error
+    return skipTSAsExpression(node.expression)
+  }
+  // @ts-expect-error
+  return node
+}
+
+/**
+ * Gets the parent node of the given node. This method returns a value ignoring `X as F`.
+ * @param {Expression} node
+ * @returns {ASTNode}
+ */
+function getParent(node) {
+  let parent = node.parent
+  while (parent.type === 'TSAsExpression') {
+    parent = parent.parent
+  }
+  return parent
+}
+
+/**
+ * Checks if the given node is a property value.
+ * @param {Property} prop
+ * @param {Expression} node
+ */
+function isPropertyChain(prop, node) {
+  let value = node
+  while (value.parent.type === 'TSAsExpression') {
+    value = value.parent
+  }
+  return prop === value.parent && prop.value === value
+}
+
+/**
+ * Retrieve `AssignmentPattern#left` value if the given node a `AssignmentPattern` node. Otherwise, pass through it.
+ * @template T Node type
+ * @param {T | AssignmentPattern} node The node to address.
+ * @return {T} The `AssignmentPattern#left` value if the node is a `AssignmentPattern` node. Otherwise, the node.
+ */
+function skipDefaultParamValue(node) {
+  if (!node) {
+    return node
+  }
+  // @ts-expect-error
+  if (node.type === 'AssignmentPattern') {
+    // @ts-expect-error
+    return skipDefaultParamValue(node.left)
+  }
+  // @ts-expect-error
+  return node
+}
+
+/**
+ * Retrieve `ChainExpression#expression` value if the given node a `ChainExpression` node. Otherwise, pass through it.
+ * @template T Node type
+ * @param {T | ChainExpression} node The node to address.
+ * @returns {T} The `ChainExpression#expression` value if the node is a `ChainExpression` node. Otherwise, the node.
+ */
+function skipChainExpression(node) {
+  if (!node) {
+    return node
+  }
+  // @ts-expect-error
+  if (node.type === 'ChainExpression') {
+    // @ts-expect-error
+    return skipChainExpression(node.expression)
+  }
+  // @ts-expect-error
+  return node
+}
+
+/**
+ * Gets the property name of a given node.
+ * @param {Property|AssignmentProperty|MethodDefinition|MemberExpression} node - The node to get.
+ * @return {string|null} The property name if static. Otherwise, null.
+ */
+function getStaticPropertyName(node) {
+  if (node.type === 'Property' || node.type === 'MethodDefinition') {
+    const key = node.key
+
+    if (!node.computed) {
+      if (key.type === 'Identifier') {
+        return key.name
+      }
+    }
+    // @ts-expect-error
+    return getStringLiteralValue(key)
+  } else if (node.type === 'MemberExpression') {
+    const property = node.property
+    if (!node.computed) {
+      if (property.type === 'Identifier') {
+        return property.name
+      }
+      return null
+    }
+    // @ts-expect-error
+    return getStringLiteralValue(property)
+  }
+  return null
+}
+
+/**
+ * Gets the string of a given node.
+ * @param {Literal|TemplateLiteral} node - The node to get.
+ * @param {boolean} [stringOnly]
+ * @return {string|null} The string if static. Otherwise, null.
+ */
+function getStringLiteralValue(node, stringOnly) {
+  if (node.type === 'Literal') {
+    if (node.value == null) {
+      if (!stringOnly && node.bigint != null) {
+        return node.bigint
+      }
+      return null
+    }
+    if (typeof node.value === 'string') {
+      return node.value
+    }
+    if (!stringOnly) {
+      return String(node.value)
+    }
+    return null
+  }
+  if (node.type === 'TemplateLiteral') {
+    if (node.expressions.length === 0 && node.quasis.length === 1) {
+      return node.quasis[0].value.cooked
+    }
+  }
+  return null
+}
+
+// ------------------------------------------------------------------------------
+// Vue Helpers
+// ------------------------------------------------------------------------------
+
+/**
+ * @param {string} path
+ */
+function isVueFile(path) {
+  return path.endsWith('.vue') || path.endsWith('.jsx')
+}
+
+/**
+ * Check whether the given node is a Vue component based
+ * on the filename and default export type
+ * export default {} in .vue || .jsx
+ * @param {ESNode} node Node to check
+ * @param {string} path File name with extension
+ * @returns {boolean}
+ */
+function isVueComponentFile(node, path) {
+  return (
+    isVueFile(path) &&
+    node.type === 'ExportDefaultDeclaration' &&
+    node.declaration.type === 'ObjectExpression'
+  )
+}
+
+/**
+ * Check whether given node is Vue component
+ * Vue.component('xxx', {}) || component('xxx', {})
+ * @param {ESNode} node Node to check
+ * @returns {boolean}
+ */
+function isVueComponent(node) {
+  if (node.type === 'CallExpression') {
+    const callee = node.callee
+
+    if (callee.type === 'MemberExpression') {
+      const calleeObject = skipTSAsExpression(callee.object)
+
+      if (calleeObject.type === 'Identifier') {
+        const propName = getStaticPropertyName(callee)
+        if (calleeObject.name === 'Vue') {
+          // for Vue.js 2.x
+          // Vue.component('xxx', {}) || Vue.mixin({}) || Vue.extend('xxx', {})
+          const isFullVueComponentForVue2 =
+            propName &&
+            ['component', 'mixin', 'extend'].includes(propName) &&
+            isObjectArgument(node)
+
+          return Boolean(isFullVueComponentForVue2)
+        }
+
+        // for Vue.js 3.x
+        // app.component('xxx', {}) || app.mixin({})
+        const isFullVueComponent =
+          propName &&
+          ['component', 'mixin'].includes(propName) &&
+          isObjectArgument(node)
+
+        return Boolean(isFullVueComponent)
+      }
+    }
+
+    if (callee.type === 'Identifier') {
+      if (callee.name === 'component') {
+        // for Vue.js 2.x
+        // component('xxx', {})
+        const isDestructedVueComponent = isObjectArgument(node)
+        return isDestructedVueComponent
+      }
+      if (callee.name === 'createApp') {
+        // for Vue.js 3.x
+        // createApp({})
+        const isAppVueComponent = isObjectArgument(node)
+        return isAppVueComponent
+      }
+      if (callee.name === 'defineComponent') {
+        // for Vue.js 3.x
+        // defineComponent({})
+        const isDestructedVueComponent = isObjectArgument(node)
+        return isDestructedVueComponent
+      }
+    }
+  }
+
+  return false
+
+  /** @param {CallExpression} node */
+  function isObjectArgument(node) {
+    return (
+      node.arguments.length > 0 &&
+      skipTSAsExpression(node.arguments.slice(-1)[0]).type ===
+        'ObjectExpression'
+    )
+  }
+}
+
+/**
+ * Check whether given node is new Vue instance
+ * new Vue({})
+ * @param {NewExpression} node Node to check
+ * @returns {boolean}
+ */
+function isVueInstance(node) {
+  const callee = node.callee
+  return Boolean(
+    node.type === 'NewExpression' &&
+      callee.type === 'Identifier' &&
+      callee.name === 'Vue' &&
+      node.arguments.length &&
+      skipTSAsExpression(node.arguments[0]).type === 'ObjectExpression'
+  )
+}
+
+/**
+ * If the given object is a Vue component or instance, returns the Vue definition type.
+ * @param {RuleContext} context The ESLint rule context object.
+ * @param {ObjectExpression} node Node to check
+ * @returns { VueObjectType | null } The Vue definition type.
+ */
+function getVueObjectType(context, node) {
+  if (node.type !== 'ObjectExpression') {
+    return null
+  }
+  const parent = getParent(node)
+  if (parent.type === 'ExportDefaultDeclaration') {
+    // export default {} in .vue || .jsx
+    const filePath = context.getFilename()
+    if (
+      isVueComponentFile(parent, filePath) &&
+      skipTSAsExpression(parent.declaration) === node
+    ) {
+      return 'export'
+    }
+  } else if (parent.type === 'CallExpression') {
+    // Vue.component('xxx', {}) || component('xxx', {})
+    if (
+      isVueComponent(parent) &&
+      skipTSAsExpression(parent.arguments.slice(-1)[0]) === node
+    ) {
+      return 'definition'
+    }
+  } else if (parent.type === 'NewExpression') {
+    // new Vue({})
+    if (
+      isVueInstance(parent) &&
+      skipTSAsExpression(parent.arguments[0]) === node
+    ) {
+      return 'instance'
+    }
+  }
+  if (
+    getComponentComments(context).some(
+      (el) => el.loc.end.line === node.loc.start.line - 1
+    )
+  ) {
+    return 'mark'
+  }
+  return null
+}
+
+/**
+ * Gets the component comments of a given context.
+ * @param {RuleContext} context The ESLint rule context object.
+ * @return {Token[]} The the component comments.
+ */
+function getComponentComments(context) {
+  let tokens = componentComments.get(context)
+  if (tokens) {
+    return tokens
+  }
+  const sourceCode = context.getSourceCode()
+  tokens = sourceCode
+    .getAllComments()
+    .filter((comment) => /@vue\/component/g.test(comment.value))
+  componentComments.set(context, tokens)
+  return tokens
+}
+
+/**
+ * Return generator with the all handler nodes defined in the given watcher property.
+ * @param {Property|Expression} property
+ * @returns {IterableIterator<Expression>}
+ */
+function* iterateWatchHandlerValues(property) {
+  const value = property.type === 'Property' ? property.value : property
+  if (value.type === 'ObjectExpression') {
+    const handler = findProperty(value, 'handler')
+    if (handler) {
+      yield handler.value
+    }
+  } else if (value.type === 'ArrayExpression') {
+    for (const element of value.elements.filter(isDef)) {
+      if (element.type !== 'SpreadElement') {
+        yield* iterateWatchHandlerValues(element)
+      }
+    }
+  } else {
+    yield value
+  }
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/utils/inline-non-void-elements.json b/server/node_modules/eslint-plugin-vue/lib/utils/inline-non-void-elements.json
new file mode 100644
index 0000000000000000000000000000000000000000..b3dda839ff5ba939bdf56a573f7ed57ba932a4b4
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/utils/inline-non-void-elements.json
@@ -0,0 +1,40 @@
+[
+  "a",
+  "abbr",
+  "audio",
+  "b",
+  "bdi",
+  "bdo",
+  "canvas",
+  "cite",
+  "code",
+  "data",
+  "del",
+  "dfn",
+  "em",
+  "i",
+  "iframe",
+  "ins",
+  "kbd",
+  "label",
+  "map",
+  "mark",
+  "noscript",
+  "object",
+  "output",
+  "picture",
+  "q",
+  "ruby",
+  "s",
+  "samp",
+  "small",
+  "span",
+  "strong",
+  "sub",
+  "sup",
+  "svg",
+  "time",
+  "u",
+  "var",
+  "video"
+]
diff --git a/server/node_modules/eslint-plugin-vue/lib/utils/js-reserved.json b/server/node_modules/eslint-plugin-vue/lib/utils/js-reserved.json
new file mode 100644
index 0000000000000000000000000000000000000000..9b3eb11cc1f2beb2b3f0e42b723e2e1e5979b371
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/utils/js-reserved.json
@@ -0,0 +1,18 @@
+[
+  "abstract", "arguments", "await", "boolean",
+  "break", "byte", "case", "catch",
+  "char", "class", "const", "continue",
+  "debugger", "default", "delete", "do",
+  "double", "else", "enum", "eval",
+  "export", "extends", "false", "final",
+  "finally", "float", "for", "function",
+  "goto", "if", "implements", "import",
+  "in", "instanceof", "int", "interface",
+  "let", "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", "yield"
+]
diff --git a/server/node_modules/eslint-plugin-vue/lib/utils/key-aliases.json b/server/node_modules/eslint-plugin-vue/lib/utils/key-aliases.json
new file mode 100644
index 0000000000000000000000000000000000000000..49de3b3d82ae63e124820149aa0da1e9965a7448
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/utils/key-aliases.json
@@ -0,0 +1,68 @@
+[
+  "unidentified", "alt", "alt-graph", "caps-lock", "control", "fn", "fn-lock",
+  "meta", "num-lock", "scroll-lock", "shift", "symbol", "symbol-lock", "hyper",
+  "super", "enter", "tab", "arrow-down", "arrow-left", "arrow-right",
+  "arrow-up", "end", "home", "page-down", "page-up", "backspace", "clear",
+  "copy", "cr-sel", "cut", "delete", "erase-eof", "ex-sel", "insert", "paste",
+  "redo", "undo", "accept", "again", "attn", "cancel", "context-menu", "escape",
+  "execute", "find", "help", "pause", "select", "zoom-in", "zoom-out",
+  "brightness-down", "brightness-up", "eject", "log-off", "power",
+  "print-screen", "hibernate", "standby", "wake-up", "all-candidates",
+  "alphanumeric", "code-input", "compose", "convert", "dead", "final-mode",
+  "group-first", "group-last", "group-next", "group-previous", "mode-change",
+  "next-candidate", "non-convert", "previous-candidate", "process",
+  "single-candidate", "hangul-mode", "hanja-mode", "junja-mode", "eisu",
+  "hankaku", "hiragana", "hiragana-katakana", "kana-mode", "kanji-mode",
+  "katakana", "romaji", "zenkaku", "zenkaku-hankaku", "f1", "f2", "f3", "f4",
+  "f5", "f6", "f7", "f8", "f9", "f10", "f11", "f12", "soft1", "soft2", "soft3",
+  "soft4", "channel-down", "channel-up", "close", "mail-forward", "mail-reply",
+  "mail-send", "media-close", "media-fast-forward", "media-pause",
+  "media-play-pause", "media-record", "media-rewind", "media-stop",
+  "media-track-next", "media-track-previous", "new", "open", "print", "save",
+  "spell-check", "key11", "key12", "audio-balance-left", "audio-balance-right",
+  "audio-bass-boost-down", "audio-bass-boost-toggle", "audio-bass-boost-up",
+  "audio-fader-front", "audio-fader-rear", "audio-surround-mode-next",
+  "audio-treble-down", "audio-treble-up", "audio-volume-down",
+  "audio-volume-up", "audio-volume-mute", "microphone-toggle",
+  "microphone-volume-down", "microphone-volume-up", "microphone-volume-mute",
+  "speech-correction-list", "speech-input-toggle", "launch-application1",
+  "launch-application2", "launch-calendar", "launch-contacts", "launch-mail",
+  "launch-media-player", "launch-music-player", "launch-phone",
+  "launch-screen-saver", "launch-spreadsheet", "launch-web-browser",
+  "launch-web-cam", "launch-word-processor", "browser-back",
+  "browser-favorites", "browser-forward", "browser-home", "browser-refresh",
+  "browser-search", "browser-stop", "app-switch", "call", "camera",
+  "camera-focus", "end-call", "go-back", "go-home", "headset-hook",
+  "last-number-redial", "notification", "manner-mode", "voice-dial", "t-v",
+  "t-v3-d-mode", "t-v-antenna-cable", "t-v-audio-description",
+  "t-v-audio-description-mix-down", "t-v-audio-description-mix-up",
+  "t-v-contents-menu", "t-v-data-service", "t-v-input", "t-v-input-component1",
+  "t-v-input-component2", "t-v-input-composite1", "t-v-input-composite2",
+  "t-v-input-h-d-m-i1", "t-v-input-h-d-m-i2", "t-v-input-h-d-m-i3",
+  "t-v-input-h-d-m-i4", "t-v-input-v-g-a1", "t-v-media-context", "t-v-network",
+  "t-v-number-entry", "t-v-power", "t-v-radio-service", "t-v-satellite",
+  "t-v-satellite-b-s", "t-v-satellite-c-s", "t-v-satellite-toggle",
+  "t-v-terrestrial-analog", "t-v-terrestrial-digital", "t-v-timer",
+  "a-v-r-input", "a-v-r-power", "color-f0-red", "color-f1-green",
+  "color-f2-yellow", "color-f3-blue", "color-f4-grey", "color-f5-brown",
+  "closed-caption-toggle", "dimmer", "display-swap", "d-v-r", "exit",
+  "favorite-clear0", "favorite-clear1", "favorite-clear2", "favorite-clear3",
+  "favorite-recall0", "favorite-recall1", "favorite-recall2",
+  "favorite-recall3", "favorite-store0", "favorite-store1", "favorite-store2",
+  "favorite-store3", "guide", "guide-next-day", "guide-previous-day", "info",
+  "instant-replay", "link", "list-program", "live-content", "lock",
+  "media-apps", "media-last", "media-skip-backward", "media-skip-forward",
+  "media-step-backward", "media-step-forward", "media-top-menu", "navigate-in",
+  "navigate-next", "navigate-out", "navigate-previous", "next-favorite-channel",
+  "next-user-profile", "on-demand", "pairing", "pin-p-down", "pin-p-move",
+  "pin-p-toggle", "pin-p-up", "play-speed-down", "play-speed-reset",
+  "play-speed-up", "random-toggle", "rc-low-battery", "record-speed-next",
+  "rf-bypass", "scan-channels-toggle", "screen-mode-next", "settings",
+  "split-screen-toggle", "s-t-b-input", "s-t-b-power", "subtitle", "teletext",
+  "video-mode-next", "wink", "zoom-toggle", "audio-volume-down",
+  "audio-volume-up", "audio-volume-mute", "browser-back", "browser-forward",
+  "channel-down", "channel-up", "context-menu", "eject", "end", "enter", "home",
+  "media-fast-forward", "media-play", "media-play-pause", "media-record",
+  "media-rewind", "media-stop", "media-next-track", "media-pause",
+  "media-previous-track", "power", "unidentified"
+]
diff --git a/server/node_modules/eslint-plugin-vue/lib/utils/keycode-to-key.js b/server/node_modules/eslint-plugin-vue/lib/utils/keycode-to-key.js
new file mode 100644
index 0000000000000000000000000000000000000000..cabf377d1b888c029fdbde7576d3b3479251131a
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/utils/keycode-to-key.js
@@ -0,0 +1,99 @@
+// https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values
+/** @type { { [key: number]: string }  } */
+module.exports = {
+  8: 'backspace',
+  9: 'tab',
+  13: 'enter',
+  16: 'shift',
+  17: 'ctrl',
+  18: 'alt',
+  19: 'pause', // windows
+  20: 'caps-lock',
+  27: 'escape',
+  32: 'space', // Vue.js specially key name.
+  33: 'page-up',
+  34: 'page-down',
+  35: 'end',
+  36: 'home',
+  37: 'arrow-left',
+  38: 'arrow-up',
+  39: 'arrow-right',
+  40: 'arrow-down',
+  45: 'insert', // windows
+  46: 'delete',
+
+  // If mistakenly use it in Vue.js 2.x, it will be irreversibly broken. Therefore, it will not be autofix.
+  // '48': '0',
+  // '49': '1',
+  // '50': '2',
+  // '51': '3',
+  // '52': '4',
+  // '53': '5',
+  // '54': '6',
+  // '55': '7',
+  // '56': '8',
+  // '57': '9',
+
+  65: 'a',
+  66: 'b',
+  67: 'c',
+  68: 'd',
+  69: 'e',
+  70: 'f',
+  71: 'g',
+  72: 'h',
+  73: 'i',
+  74: 'j',
+  75: 'k',
+  76: 'l',
+  77: 'm',
+  78: 'n',
+  79: 'o',
+  80: 'p',
+  81: 'q',
+  82: 'r',
+  83: 's',
+  84: 't',
+  85: 'u',
+  86: 'v',
+  87: 'w',
+  88: 'x',
+  89: 'y',
+  90: 'z',
+
+  // The key value may change depending on the OS.
+  // '91': 'meta' ,// Win: 'os'?
+  // '92': 'meta', // Win: 'meta' Mac: ?
+  // '93': 'meta',  // Win: 'context-menu' Mac: 'meta'
+
+  // Cannot determine numpad with key.
+  // '96': 'numpad-0',
+  // '97': 'numpad-1',
+  // '98': 'numpad-2',
+  // '99': 'numpad-3',
+  // '100': 'numpad-4',
+  // '101': 'numpad-5',
+  // '102': 'numpad-6',
+  // '103': 'numpad-7',
+  // '104': 'numpad-8',
+  // '105': 'numpad-9',
+  // '106': 'multiply',
+  // '107': 'add',
+  // '109': 'subtract',
+  // '110': 'decimal',
+  // '111': 'divide',
+  112: 'f1',
+  113: 'f2',
+  114: 'f3',
+  115: 'f4',
+  116: 'f5',
+  117: 'f6',
+  118: 'f7',
+  119: 'f8',
+  120: 'f9',
+  121: 'f10',
+  122: 'f11',
+  123: 'f12',
+  144: 'num-lock',
+  145: 'scroll-lock'
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/utils/regexp.js b/server/node_modules/eslint-plugin-vue/lib/utils/regexp.js
new file mode 100644
index 0000000000000000000000000000000000000000..073a99f80b3007fa270163c0041a14c74009757e
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/utils/regexp.js
@@ -0,0 +1,48 @@
+const RE_REGEXP_CHAR = /[\\^$.*+?()[\]{}|]/gu
+const RE_HAS_REGEXP_CHAR = new RegExp(RE_REGEXP_CHAR.source)
+
+const RE_REGEXP_STR = /^\/(.+)\/(.*)$/u
+
+/**
+ * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
+ * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
+ *
+ * @param {string} string The string to escape.
+ * @returns {string} Returns the escaped string.
+ */
+function escape(string) {
+  return string && RE_HAS_REGEXP_CHAR.test(string)
+    ? string.replace(RE_REGEXP_CHAR, '\\$&')
+    : string
+}
+
+/**
+ * Convert a string to the `RegExp`.
+ * Normal strings (e.g. `"foo"`) is converted to `/^foo$/` of `RegExp`.
+ * Strings like `"/^foo/i"` are converted to `/^foo/i` of `RegExp`.
+ *
+ * @param {string} string The string to convert.
+ * @returns {RegExp} Returns the `RegExp`.
+ */
+function toRegExp(string) {
+  const parts = RE_REGEXP_STR.exec(string)
+  if (parts) {
+    return new RegExp(parts[1], parts[2])
+  }
+  return new RegExp(`^${escape(string)}$`)
+}
+
+/**
+ * Checks whether given string is regexp string
+ * @param {string} string
+ * @returns {boolean}
+ */
+function isRegExp(string) {
+  return Boolean(RE_REGEXP_STR.exec(string))
+}
+
+module.exports = {
+  escape,
+  toRegExp,
+  isRegExp
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/utils/svg-elements.json b/server/node_modules/eslint-plugin-vue/lib/utils/svg-elements.json
new file mode 100644
index 0000000000000000000000000000000000000000..aaee2e6f37f4e89608f3c99bbc8fdf10449c1b26
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/utils/svg-elements.json
@@ -0,0 +1 @@
+["a","animate","animateMotion","animateTransform","audio","canvas","circle","clipPath","defs","desc","discard","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","foreignObject","g","iframe","image","line","linearGradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tspan","unknown","use","video","view"]
diff --git a/server/node_modules/eslint-plugin-vue/lib/utils/void-elements.json b/server/node_modules/eslint-plugin-vue/lib/utils/void-elements.json
new file mode 100644
index 0000000000000000000000000000000000000000..b737cc683f785ca39d585f028a1592ef651f31b7
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/utils/void-elements.json
@@ -0,0 +1 @@
+["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"]
diff --git a/server/node_modules/eslint-plugin-vue/lib/utils/vue-component-options.json b/server/node_modules/eslint-plugin-vue/lib/utils/vue-component-options.json
new file mode 100644
index 0000000000000000000000000000000000000000..1dcce9f5c692785c2237f4804b17065ee70cb172
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/utils/vue-component-options.json
@@ -0,0 +1,54 @@
+{
+  "nuxt": ["asyncData", "fetch", "head", "key", "layout", "loading", "middleware", "scrollToTop", "transition", "validate", "watchQuery"],
+  "vue-router": [
+    "beforeRouteEnter",
+    "beforeRouteUpdate",
+    "beforeRouteLeave"
+  ],
+  "vue": [
+    "data",
+    "props",
+    "propsData",
+    "computed",
+    "methods",
+    "watch",
+    "el",
+    "template",
+    "render",
+    "renderError",
+    "staticRenderFns",
+    "beforeCreate",
+    "created",
+    "beforeDestroy",
+    "destroyed",
+    "beforeMount",
+    "mounted",
+    "beforeUpdate",
+    "updated",
+    "activated",
+    "deactivated",
+    "errorCaptured",
+    "serverPrefetch",
+    "directives",
+    "components",
+    "transitions",
+    "filters",
+    "provide",
+    "inject",
+    "model",
+    "parent",
+    "mixins",
+    "name",
+    "extends",
+    "delimiters",
+    "comments",
+    "inheritAttrs",
+
+    "setup",
+    "emits",
+    "beforeUnmount",
+    "unmounted",
+    "renderTracked",
+    "renderTriggered"
+  ]
+}
diff --git a/server/node_modules/eslint-plugin-vue/lib/utils/vue-reserved.json b/server/node_modules/eslint-plugin-vue/lib/utils/vue-reserved.json
new file mode 100644
index 0000000000000000000000000000000000000000..03bcdcba9d6c694dfc885295673e8deb182efbb3
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/lib/utils/vue-reserved.json
@@ -0,0 +1,4 @@
+[
+  "$data", "$props", "$el", "$options", "$parent", "$root", "$children", "$slots", "$scopedSlots", "$refs", "$isServer", "$attrs", "$listeners",
+  "$watch", "$set", "$delete", "$on", "$once", "$off", "$emit", "$mount", "$forceUpdate", "$nextTick", "$destroy"
+]
diff --git a/server/node_modules/eslint-plugin-vue/package.json b/server/node_modules/eslint-plugin-vue/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..2800fa02057720b12816c4c3d501fbf5da7e72a7
--- /dev/null
+++ b/server/node_modules/eslint-plugin-vue/package.json
@@ -0,0 +1,119 @@
+{
+  "_from": "eslint-plugin-vue@latest",
+  "_id": "eslint-plugin-vue@7.3.0",
+  "_inBundle": false,
+  "_integrity": "sha512-4rc9xrZgwT4aLz3XE6lrHu+FZtDLWennYvtzVvvS81kW9c65U4DUzQQWAFjDCgCFvN6HYWxi7ueEtxZVSB+f0g==",
+  "_location": "/eslint-plugin-vue",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "tag",
+    "registry": true,
+    "raw": "eslint-plugin-vue@latest",
+    "name": "eslint-plugin-vue",
+    "escapedName": "eslint-plugin-vue",
+    "rawSpec": "latest",
+    "saveSpec": null,
+    "fetchSpec": "latest"
+  },
+  "_requiredBy": [
+    "#DEV:/",
+    "#USER"
+  ],
+  "_resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.3.0.tgz",
+  "_shasum": "0faf0fcf0e1b1052bf800d4dee42d64f50679cb0",
+  "_spec": "eslint-plugin-vue@latest",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server",
+  "author": {
+    "name": "Toru Nagashima",
+    "url": "https://github.com/mysticatea"
+  },
+  "bugs": {
+    "url": "https://github.com/vuejs/eslint-plugin-vue/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Michał Sajnóg",
+      "email": "msajnog93@gmail.com",
+      "url": "https://github.com/michalsnik"
+    },
+    {
+      "name": "Yosuke Ota",
+      "url": "https://github.com/ota-meshi"
+    }
+  ],
+  "dependencies": {
+    "eslint-utils": "^2.1.0",
+    "natural-compare": "^1.4.0",
+    "semver": "^7.3.2",
+    "vue-eslint-parser": "^7.3.0"
+  },
+  "deprecated": false,
+  "description": "Official ESLint plugin for Vue.js",
+  "devDependencies": {
+    "@types/eslint": "^7.2.0",
+    "@types/natural-compare": "^1.4.0",
+    "@types/node": "^13.13.5",
+    "@types/semver": "^7.2.0",
+    "@typescript-eslint/parser": "^3.0.2",
+    "@vuepress/plugin-pwa": "^1.4.1",
+    "babel-eslint": "^10.1.0",
+    "eslint": "^7.0.0",
+    "eslint-config-prettier": "^6.11.0",
+    "eslint-plugin-eslint-plugin": "^2.2.1",
+    "eslint-plugin-import": "^2.20.2",
+    "eslint-plugin-prettier": "^3.1.3",
+    "eslint-plugin-vue": "file:.",
+    "eslint4b": "^7.0.0",
+    "lodash": "^4.17.15",
+    "mocha": "^7.1.2",
+    "nyc": "^15.0.1",
+    "prettier": "^2.1.1",
+    "typescript": "^3.9.5",
+    "vue-eslint-editor": "^1.1.0",
+    "vuepress": "^1.4.1"
+  },
+  "engines": {
+    "node": ">=8.10"
+  },
+  "files": [
+    "lib"
+  ],
+  "homepage": "https://eslint.vuejs.org",
+  "keywords": [
+    "eslint",
+    "eslint-plugin",
+    "eslint-config",
+    "vue",
+    "vuejs",
+    "rules"
+  ],
+  "license": "MIT",
+  "main": "lib/index.js",
+  "name": "eslint-plugin-vue",
+  "peerDependencies": {
+    "eslint": "^6.2.0 || ^7.0.0"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vuejs/eslint-plugin-vue.git"
+  },
+  "scripts": {
+    "cover": "npm run cover:test && npm run cover:report",
+    "cover:report": "nyc report --reporter=html",
+    "cover:test": "nyc npm run test:base -- --timeout 60000",
+    "debug": "mocha --inspect \"tests/lib/**/*.js\" --reporter dot --timeout 60000",
+    "docs:build": "vuepress build docs",
+    "docs:watch": "vuepress dev docs",
+    "lint": "eslint . --rulesdir eslint-internal-rules",
+    "lint:fix": "eslint . --rulesdir eslint-internal-rules --fix",
+    "preversion": "npm test && npm run update && git add .",
+    "start": "npm run test:base -- --watch --growl",
+    "test": "nyc npm run test:base -- \"tests/integrations/*.js\" --timeout 60000",
+    "test:base": "mocha \"tests/lib/**/*.js\" --reporter dot",
+    "tsc": "tsc",
+    "update": "node ./tools/update.js",
+    "version": "npm run lint -- --fix && git add ."
+  },
+  "version": "7.3.0"
+}
diff --git a/server/node_modules/eslint/node_modules/ignore/CHANGELOG.md b/server/node_modules/eslint/node_modules/ignore/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..2b250132c08c4d9e60d432e6334ab1246692b5f4
--- /dev/null
+++ b/server/node_modules/eslint/node_modules/ignore/CHANGELOG.md
@@ -0,0 +1,19 @@
+# `node-ignore` 4 ChangeLog
+
+# 4.x
+
+## 2018-06-22, Version 4.0.0
+
+- **SEMVER-MAJOR**: Drop support for node < 6 by default.
+- **FEATURE**: supports the missing character ranges and sets, such as `*.[a-z]` and `*.[jJ][pP][gG]`
+- **FEATURE**: new option: `ignorecase` to make `ignore` case sensitive.
+- **FEATURE**: supports question mark which matches a single character.
+- **PATCH**: fixes typescript declaration.
+
+## ~ 2018-08-09, Version 4.0.1 - 4.0.5
+
+- **PATCH**: updates README.md about frequent asked quesions from github issues.
+
+## 2018-08-12, Version 4.0.6
+
+- **PATCH**: `Object.prototype` methods will not ruin the result any more.
diff --git a/server/node_modules/eslint/node_modules/ignore/LICENSE-MIT b/server/node_modules/eslint/node_modules/ignore/LICENSE-MIT
new file mode 100644
index 0000000000000000000000000000000000000000..825533e337fa1d8e6fccfe70318c4abf52600d25
--- /dev/null
+++ b/server/node_modules/eslint/node_modules/ignore/LICENSE-MIT
@@ -0,0 +1,21 @@
+Copyright (c) 2013 Kael Zhang <i@kael.me>, contributors
+http://kael.me/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/server/node_modules/eslint/node_modules/ignore/README.md b/server/node_modules/eslint/node_modules/ignore/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..c4d8230ccbe5c317105fa115ffd61ec45b45e759
--- /dev/null
+++ b/server/node_modules/eslint/node_modules/ignore/README.md
@@ -0,0 +1,307 @@
+<table><thead>
+  <tr>
+    <th>Linux</th>
+    <th>OS X</th>
+    <th>Windows</th>
+    <th>Coverage</th>
+    <th>Downloads</th>
+  </tr>
+</thead><tbody><tr>
+  <td colspan="2" align="center">
+    <a href="https://travis-ci.org/kaelzhang/node-ignore">
+    <img
+      src="https://travis-ci.org/kaelzhang/node-ignore.svg?branch=master"
+      alt="Build Status" /></a>
+  </td>
+  <td align="center">
+    <a href="https://ci.appveyor.com/project/kaelzhang/node-ignore">
+    <img
+      src="https://ci.appveyor.com/api/projects/status/github/kaelzhang/node-ignore?branch=master&svg=true"
+      alt="Windows Build Status" /></a>
+  </td>
+  <td align="center">
+    <a href="https://codecov.io/gh/kaelzhang/node-ignore">
+    <img
+      src="https://codecov.io/gh/kaelzhang/node-ignore/branch/master/graph/badge.svg"
+      alt="Coverage Status" /></a>
+  </td>
+  <td align="center">
+    <a href="https://www.npmjs.org/package/ignore">
+    <img
+      src="http://img.shields.io/npm/dm/ignore.svg"
+      alt="npm module downloads per month" /></a>
+  </td>
+</tr></tbody></table>
+
+# ignore
+
+`ignore` is a manager, filter and parser which implemented in pure JavaScript according to the .gitignore [spec](http://git-scm.com/docs/gitignore).
+
+Pay attention that [`minimatch`](https://www.npmjs.org/package/minimatch) does not work in the gitignore way. To filter filenames according to .gitignore file, I recommend this module.
+
+##### Tested on
+
+- Linux + Node: `0.8` - `7.x`
+- Windows + Node: `0.10` - `7.x`, node < `0.10` is not tested due to the lack of support of appveyor.
+
+Actually, `ignore` does not rely on any versions of node specially.
+
+Since `4.0.0`, ignore will no longer support `node < 6` by default, to use in node < 6, `require('ignore/legacy')`. For details, see [CHANGELOG](https://github.com/kaelzhang/node-ignore/blob/master/CHANGELOG.md).
+
+## Table Of Main Contents
+
+- [Usage](#usage)
+- [`Pathname` Conventions](#pathname-conventions)
+- [Guide for 2.x -> 3.x](#upgrade-2x---3x)
+- [Guide for 3.x -> 4.x](#upgrade-3x---4x)
+- See Also:
+  - [`glob-gitignore`](https://www.npmjs.com/package/glob-gitignore) matches files using patterns and filters them according to gitignore rules.
+
+## Usage
+
+```js
+import ignore from 'ignore'
+const ig = ignore().add(['.abc/*', '!.abc/d/'])
+```
+
+### Filter the given paths
+
+```js
+const paths = [
+  '.abc/a.js',    // filtered out
+  '.abc/d/e.js'   // included
+]
+
+ig.filter(paths)        // ['.abc/d/e.js']
+ig.ignores('.abc/a.js') // true
+```
+
+### As the filter function
+
+```js
+paths.filter(ig.createFilter()); // ['.abc/d/e.js']
+```
+
+### Win32 paths will be handled
+
+```js
+ig.filter(['.abc\\a.js', '.abc\\d\\e.js'])
+// if the code above runs on windows, the result will be
+// ['.abc\\d\\e.js']
+```
+
+## Why another ignore?
+
+- `ignore` is a standalone module, and is much simpler so that it could easy work with other programs, unlike [isaacs](https://npmjs.org/~isaacs)'s [fstream-ignore](https://npmjs.org/package/fstream-ignore) which must work with the modules of the fstream family.
+
+- `ignore` only contains utility methods to filter paths according to the specified ignore rules, so
+  - `ignore` never try to find out ignore rules by traversing directories or fetching from git configurations.
+  - `ignore` don't cares about sub-modules of git projects.
+
+- Exactly according to [gitignore man page](http://git-scm.com/docs/gitignore), fixes some known matching issues of fstream-ignore, such as:
+  - '`/*.js`' should only match '`a.js`', but not '`abc/a.js`'.
+  - '`**/foo`' should match '`foo`' anywhere.
+  - Prevent re-including a file if a parent directory of that file is excluded.
+  - Handle trailing whitespaces:
+    - `'a '`(one space) should not match `'a  '`(two spaces).
+    - `'a \ '` matches `'a  '`
+  - All test cases are verified with the result of `git check-ignore`.
+
+# Methods
+
+## .add(pattern: string | Ignore): this
+## .add(patterns: Array<string | Ignore>): this
+
+- **pattern** `String | Ignore` An ignore pattern string, or the `Ignore` instance
+- **patterns** `Array<String | Ignore>` Array of ignore patterns.
+
+Adds a rule or several rules to the current manager.
+
+Returns `this`
+
+Notice that a line starting with `'#'`(hash) is treated as a comment. Put a backslash (`'\'`) in front of the first hash for patterns that begin with a hash, if you want to ignore a file with a hash at the beginning of the filename.
+
+```js
+ignore().add('#abc').ignores('#abc')    // false
+ignore().add('\#abc').ignores('#abc')   // true
+```
+
+`pattern` could either be a line of ignore pattern or a string of multiple ignore patterns, which means we could just `ignore().add()` the content of a ignore file:
+
+```js
+ignore()
+.add(fs.readFileSync(filenameOfGitignore).toString())
+.filter(filenames)
+```
+
+`pattern` could also be an `ignore` instance, so that we could easily inherit the rules of another `Ignore` instance.
+
+## <strike>.addIgnoreFile(path)</strike>
+
+REMOVED in `3.x` for now.
+
+To upgrade `ignore@2.x` up to `3.x`, use
+
+```js
+import fs from 'fs'
+
+if (fs.existsSync(filename)) {
+  ignore().add(fs.readFileSync(filename).toString())
+}
+```
+
+instead.
+
+## .filter(paths: Array<Pathname>): Array<Pathname>
+
+```ts
+type Pathname = string
+```
+
+Filters the given array of pathnames, and returns the filtered array.
+
+- **paths** `Array.<Pathname>` The array of `pathname`s to be filtered.
+
+### `Pathname` Conventions:
+
+#### 1. `Pathname` should be a `path.relative()`d pathname
+
+`Pathname` should be a string that have been `path.join()`ed, or the return value of `path.relative()` to the current directory.
+
+```js
+// WRONG
+ig.ignores('./abc')
+
+// WRONG, for it will never happen.
+// If the gitignore rule locates at the root directory,
+// `'/abc'` should be changed to `'abc'`.
+// ```
+// path.relative('/', '/abc')  -> 'abc'
+// ```
+ig.ignores('/abc')
+
+// Right
+ig.ignores('abc')
+
+// Right
+ig.ignores(path.join('./abc'))  // path.join('./abc') -> 'abc'
+```
+
+In other words, each `Pathname` here should be a relative path to the directory of the gitignore rules.
+
+Suppose the dir structure is:
+
+```
+/path/to/your/repo
+    |-- a
+    |   |-- a.js
+    |
+    |-- .b
+    |
+    |-- .c
+         |-- .DS_store
+```
+
+Then the `paths` might be like this:
+
+```js
+[
+  'a/a.js'
+  '.b',
+  '.c/.DS_store'
+]
+```
+
+Usually, you could use [`glob`](http://npmjs.org/package/glob) with `option.mark = true` to fetch the structure of the current directory:
+
+```js
+import glob from 'glob'
+
+glob('**', {
+  // Adds a / character to directory matches.
+  mark: true
+}, (err, files) => {
+  if (err) {
+    return console.error(err)
+  }
+
+  let filtered = ignore().add(patterns).filter(files)
+  console.log(filtered)
+})
+```
+
+#### 2. filenames and dirnames
+
+`node-ignore` does NO `fs.stat` during path matching, so for the example below:
+
+```js
+ig.add('config/')
+
+// `ig` does NOT know if 'config' is a normal file, directory or something
+ig.ignores('config')    // And it returns `false`
+
+ig.ignores('config/')   // returns `true`
+```
+
+Specially for people who develop some library based on `node-ignore`, it is important to understand that.
+
+## .ignores(pathname: Pathname): boolean
+
+> new in 3.2.0
+
+Returns `Boolean` whether `pathname` should be ignored.
+
+```js
+ig.ignores('.abc/a.js')    // true
+```
+
+## .createFilter()
+
+Creates a filter function which could filter an array of paths with `Array.prototype.filter`.
+
+Returns `function(path)` the filter function.
+
+## `options.ignorecase` since 4.0.0
+
+Similar as the `core.ignorecase` option of [git-config](https://git-scm.com/docs/git-config), `node-ignore` will be case insensitive if `options.ignorecase` is set to `true` (default value), otherwise case sensitive.
+
+```js
+const ig = ignore({
+  ignorecase: false
+})
+
+ig.add('*.png')
+
+ig.ignores('*.PNG')  // false
+```
+
+****
+
+# Upgrade Guide
+
+## Upgrade 2.x -> 3.x
+
+- All `options` of 2.x are unnecessary and removed, so just remove them.
+- `ignore()` instance is no longer an [`EventEmitter`](nodejs.org/api/events.html), and all events are unnecessary and removed.
+- `.addIgnoreFile()` is removed, see the [.addIgnoreFile](#addignorefilepath) section for details.
+
+## Upgrade 3.x -> 4.x
+
+Since `4.0.0`, `ignore` will no longer support node < 6, to use `ignore` in node < 6:
+
+```js
+var ignore = require('ignore/legacy')
+```
+
+****
+
+# Collaborators
+
+- [@whitecolor](https://github.com/whitecolor) *Alex*
+- [@SamyPesse](https://github.com/SamyPesse) *Samy Pessé*
+- [@azproduction](https://github.com/azproduction) *Mikhail Davydov*
+- [@TrySound](https://github.com/TrySound) *Bogdan Chadkin*
+- [@JanMattner](https://github.com/JanMattner) *Jan Mattner*
+- [@ntwb](https://github.com/ntwb) *Stephen Edgar*
+- [@kasperisager](https://github.com/kasperisager) *Kasper Isager*
+- [@sandersn](https://github.com/sandersn) *Nathan Shively-Sanders*
diff --git a/server/node_modules/eslint/node_modules/ignore/index.d.ts b/server/node_modules/eslint/node_modules/ignore/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..be9d5f8eacd18a43f53948f7fc76ef7862a3f90f
--- /dev/null
+++ b/server/node_modules/eslint/node_modules/ignore/index.d.ts
@@ -0,0 +1,45 @@
+interface Ignore {
+  /**
+   * Adds a rule rules to the current manager.
+   * @param  {string | Ignore} pattern
+   * @returns IgnoreBase
+   */
+  add(pattern: string | Ignore): Ignore
+  /**
+   * Adds several rules to the current manager.
+   * @param  {string[]} patterns
+   * @returns IgnoreBase
+   */
+  add(patterns: (string | Ignore)[]): Ignore
+
+  /**
+   * Filters the given array of pathnames, and returns the filtered array.
+   * NOTICE that each path here should be a relative path to the root of your repository.
+   * @param paths the array of paths to be filtered.
+   * @returns The filtered array of paths
+   */
+  filter(paths: string[]): string[]
+  /**
+   * Creates a filter function which could filter
+   * an array of paths with Array.prototype.filter.
+   */
+  createFilter(): (path: string) => boolean
+
+  /**
+   * Returns Boolean whether pathname should be ignored.
+   * @param  {string} pathname a path to check
+   * @returns boolean
+   */
+  ignores(pathname: string): boolean
+}
+
+interface Options {
+  ignorecase?: boolean
+}
+
+/**
+ * Creates new ignore manager.
+ */
+declare function ignore(options?: Options): Ignore
+
+export default ignore
diff --git a/server/node_modules/eslint/node_modules/ignore/index.js b/server/node_modules/eslint/node_modules/ignore/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..62c5cf71ec2809f5bc92121eba5ea1ee38257de2
--- /dev/null
+++ b/server/node_modules/eslint/node_modules/ignore/index.js
@@ -0,0 +1,463 @@
+// A simple implementation of make-array
+function make_array (subject) {
+  return Array.isArray(subject)
+    ? subject
+    : [subject]
+}
+
+const REGEX_BLANK_LINE = /^\s+$/
+const REGEX_LEADING_EXCAPED_EXCLAMATION = /^\\!/
+const REGEX_LEADING_EXCAPED_HASH = /^\\#/
+const SLASH = '/'
+const KEY_IGNORE = typeof Symbol !== 'undefined'
+  ? Symbol.for('node-ignore')
+  /* istanbul ignore next */
+  : 'node-ignore'
+
+const define = (object, key, value) =>
+  Object.defineProperty(object, key, {value})
+
+const REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g
+
+// Sanitize the range of a regular expression
+// The cases are complicated, see test cases for details
+const sanitizeRange = range => range.replace(
+  REGEX_REGEXP_RANGE,
+  (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0)
+    ? match
+    // Invalid range (out of order) which is ok for gitignore rules but
+    //   fatal for JavaScript regular expression, so eliminate it.
+    : ''
+)
+
+// > If the pattern ends with a slash,
+// > it is removed for the purpose of the following description,
+// > but it would only find a match with a directory.
+// > In other words, foo/ will match a directory foo and paths underneath it,
+// > but will not match a regular file or a symbolic link foo
+// >  (this is consistent with the way how pathspec works in general in Git).
+// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'
+// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call
+//      you could use option `mark: true` with `glob`
+
+// '`foo/`' should not continue with the '`..`'
+const DEFAULT_REPLACER_PREFIX = [
+
+  // > Trailing spaces are ignored unless they are quoted with backslash ("\")
+  [
+    // (a\ ) -> (a )
+    // (a  ) -> (a)
+    // (a \ ) -> (a  )
+    /\\?\s+$/,
+    match => match.indexOf('\\') === 0
+      ? ' '
+      : ''
+  ],
+
+  // replace (\ ) with ' '
+  [
+    /\\\s/g,
+    () => ' '
+  ],
+
+  // Escape metacharacters
+  // which is written down by users but means special for regular expressions.
+
+  // > There are 12 characters with special meanings:
+  // > - the backslash \,
+  // > - the caret ^,
+  // > - the dollar sign $,
+  // > - the period or dot .,
+  // > - the vertical bar or pipe symbol |,
+  // > - the question mark ?,
+  // > - the asterisk or star *,
+  // > - the plus sign +,
+  // > - the opening parenthesis (,
+  // > - the closing parenthesis ),
+  // > - and the opening square bracket [,
+  // > - the opening curly brace {,
+  // > These special characters are often called "metacharacters".
+  [
+    /[\\^$.|*+(){]/g,
+    match => `\\${match}`
+  ],
+
+  [
+    // > [abc] matches any character inside the brackets
+    // >    (in this case a, b, or c);
+    /\[([^\]/]*)($|\])/g,
+    (match, p1, p2) => p2 === ']'
+      ? `[${sanitizeRange(p1)}]`
+      : `\\${match}`
+  ],
+
+  [
+    // > a question mark (?) matches a single character
+    /(?!\\)\?/g,
+    () => '[^/]'
+  ],
+
+  // leading slash
+  [
+
+    // > A leading slash matches the beginning of the pathname.
+    // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".
+    // A leading slash matches the beginning of the pathname
+    /^\//,
+    () => '^'
+  ],
+
+  // replace special metacharacter slash after the leading slash
+  [
+    /\//g,
+    () => '\\/'
+  ],
+
+  [
+    // > A leading "**" followed by a slash means match in all directories.
+    // > For example, "**/foo" matches file or directory "foo" anywhere,
+    // > the same as pattern "foo".
+    // > "**/foo/bar" matches file or directory "bar" anywhere that is directly
+    // >   under directory "foo".
+    // Notice that the '*'s have been replaced as '\\*'
+    /^\^*\\\*\\\*\\\//,
+
+    // '**/foo' <-> 'foo'
+    () => '^(?:.*\\/)?'
+  ]
+]
+
+const DEFAULT_REPLACER_SUFFIX = [
+  // starting
+  [
+    // there will be no leading '/'
+    //   (which has been replaced by section "leading slash")
+    // If starts with '**', adding a '^' to the regular expression also works
+    /^(?=[^^])/,
+    function startingReplacer () {
+      return !/\/(?!$)/.test(this)
+        // > If the pattern does not contain a slash /,
+        // >   Git treats it as a shell glob pattern
+        // Actually, if there is only a trailing slash,
+        //   git also treats it as a shell glob pattern
+        ? '(?:^|\\/)'
+
+        // > Otherwise, Git treats the pattern as a shell glob suitable for
+        // >   consumption by fnmatch(3)
+        : '^'
+    }
+  ],
+
+  // two globstars
+  [
+    // Use lookahead assertions so that we could match more than one `'/**'`
+    /\\\/\\\*\\\*(?=\\\/|$)/g,
+
+    // Zero, one or several directories
+    // should not use '*', or it will be replaced by the next replacer
+
+    // Check if it is not the last `'/**'`
+    (match, index, str) => index + 6 < str.length
+
+      // case: /**/
+      // > A slash followed by two consecutive asterisks then a slash matches
+      // >   zero or more directories.
+      // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on.
+      // '/**/'
+      ? '(?:\\/[^\\/]+)*'
+
+      // case: /**
+      // > A trailing `"/**"` matches everything inside.
+
+      // #21: everything inside but it should not include the current folder
+      : '\\/.+'
+  ],
+
+  // intermediate wildcards
+  [
+    // Never replace escaped '*'
+    // ignore rule '\*' will match the path '*'
+
+    // 'abc.*/' -> go
+    // 'abc.*'  -> skip this rule
+    /(^|[^\\]+)\\\*(?=.+)/g,
+
+    // '*.js' matches '.js'
+    // '*.js' doesn't match 'abc'
+    (match, p1) => `${p1}[^\\/]*`
+  ],
+
+  // trailing wildcard
+  [
+    /(\^|\\\/)?\\\*$/,
+    (match, p1) => {
+      const prefix = p1
+        // '\^':
+        // '/*' does not match ''
+        // '/*' does not match everything
+
+        // '\\\/':
+        // 'abc/*' does not match 'abc/'
+        ? `${p1}[^/]+`
+
+        // 'a*' matches 'a'
+        // 'a*' matches 'aa'
+        : '[^/]*'
+
+      return `${prefix}(?=$|\\/$)`
+    }
+  ],
+
+  [
+    // unescape
+    /\\\\\\/g,
+    () => '\\'
+  ]
+]
+
+const POSITIVE_REPLACERS = [
+  ...DEFAULT_REPLACER_PREFIX,
+
+  // 'f'
+  // matches
+  // - /f(end)
+  // - /f/
+  // - (start)f(end)
+  // - (start)f/
+  // doesn't match
+  // - oof
+  // - foo
+  // pseudo:
+  // -> (^|/)f(/|$)
+
+  // ending
+  [
+    // 'js' will not match 'js.'
+    // 'ab' will not match 'abc'
+    /(?:[^*/])$/,
+
+    // 'js*' will not match 'a.js'
+    // 'js/' will not match 'a.js'
+    // 'js' will match 'a.js' and 'a.js/'
+    match => `${match}(?=$|\\/)`
+  ],
+
+  ...DEFAULT_REPLACER_SUFFIX
+]
+
+const NEGATIVE_REPLACERS = [
+  ...DEFAULT_REPLACER_PREFIX,
+
+  // #24, #38
+  // The MISSING rule of [gitignore docs](https://git-scm.com/docs/gitignore)
+  // A negative pattern without a trailing wildcard should not
+  // re-include the things inside that directory.
+
+  // eg:
+  // ['node_modules/*', '!node_modules']
+  // should ignore `node_modules/a.js`
+  [
+    /(?:[^*])$/,
+    match => `${match}(?=$|\\/$)`
+  ],
+
+  ...DEFAULT_REPLACER_SUFFIX
+]
+
+// A simple cache, because an ignore rule only has only one certain meaning
+const cache = Object.create(null)
+
+// @param {pattern}
+const make_regex = (pattern, negative, ignorecase) => {
+  const r = cache[pattern]
+  if (r) {
+    return r
+  }
+
+  const replacers = negative
+    ? NEGATIVE_REPLACERS
+    : POSITIVE_REPLACERS
+
+  const source = replacers.reduce(
+    (prev, current) => prev.replace(current[0], current[1].bind(pattern)),
+    pattern
+  )
+
+  return cache[pattern] = ignorecase
+    ? new RegExp(source, 'i')
+    : new RegExp(source)
+}
+
+// > A blank line matches no files, so it can serve as a separator for readability.
+const checkPattern = pattern => pattern
+  && typeof pattern === 'string'
+  && !REGEX_BLANK_LINE.test(pattern)
+
+  // > A line starting with # serves as a comment.
+  && pattern.indexOf('#') !== 0
+
+const createRule = (pattern, ignorecase) => {
+  const origin = pattern
+  let negative = false
+
+  // > An optional prefix "!" which negates the pattern;
+  if (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"`.
+  .replace(REGEX_LEADING_EXCAPED_EXCLAMATION, '!')
+  // > Put a backslash ("\") in front of the first hash for patterns that
+  // >   begin with a hash.
+  .replace(REGEX_LEADING_EXCAPED_HASH, '#')
+
+  const regex = make_regex(pattern, negative, ignorecase)
+
+  return {
+    origin,
+    pattern,
+    negative,
+    regex
+  }
+}
+
+class IgnoreBase {
+  constructor ({
+    ignorecase = true
+  } = {}) {
+    this._rules = []
+    this._ignorecase = ignorecase
+    define(this, KEY_IGNORE, true)
+    this._initCache()
+  }
+
+  _initCache () {
+    this._cache = Object.create(null)
+  }
+
+  // @param {Array.<string>|string|Ignore} pattern
+  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,
+    // making the behavior changed.
+    if (this._added) {
+      this._initCache()
+    }
+
+    return this
+  }
+
+  // legacy
+  addPattern (pattern) {
+    return this.add(pattern)
+  }
+
+  _addPattern (pattern) {
+    // #32
+    if (pattern && pattern[KEY_IGNORE]) {
+      this._rules = this._rules.concat(pattern._rules)
+      this._added = true
+      return
+    }
+
+    if (checkPattern(pattern)) {
+      const rule = createRule(pattern, this._ignorecase)
+      this._added = true
+      this._rules.push(rule)
+    }
+  }
+
+  filter (paths) {
+    return make_array(paths).filter(path => this._filter(path))
+  }
+
+  createFilter () {
+    return path => this._filter(path)
+  }
+
+  ignores (path) {
+    return !this._filter(path)
+  }
+
+  // @returns `Boolean` true if the `path` is NOT ignored
+  _filter (path, slices) {
+    if (!path) {
+      return false
+    }
+
+    if (path in this._cache) {
+      return this._cache[path]
+    }
+
+    if (!slices) {
+      // path/to/a.js
+      // ['path', 'to', 'a.js']
+      slices = path.split(SLASH)
+    }
+
+    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.
+      // If the path contains a parent directory, check the parent first
+      ? this._filter(slices.join(SLASH) + SLASH, slices)
+        && this._test(path)
+
+      // Or only test the path
+      : this._test(path)
+  }
+
+  // @returns {Boolean} true if a file is NOT ignored
+  _test (path) {
+    // Explicitly define variable type by setting matched to `0`
+    let matched = 0
+
+    this._rules.forEach(rule => {
+      // if matched = true, then we only test negative rules
+      // if matched = false, then we test non-negative rules
+      if (!(matched ^ rule.negative)) {
+        matched = rule.negative ^ rule.regex.test(path)
+      }
+    })
+
+    return !matched
+  }
+}
+
+// Windows
+// --------------------------------------------------------------
+/* istanbul ignore if  */
+if (
+  // Detect `process` so that it can run in browsers.
+  typeof process !== 'undefined'
+  && (
+    process.env && process.env.IGNORE_TEST_WIN32
+    || process.platform === 'win32'
+  )
+) {
+  const filter = IgnoreBase.prototype._filter
+
+  /* eslint no-control-regex: "off" */
+  const make_posix = str => /^\\\\\?\\/.test(str)
+  || /[^\x00-\x80]+/.test(str)
+    ? str
+    : str.replace(/\\/g, '/')
+
+  IgnoreBase.prototype._filter = function filterWin32 (path, slices) {
+    path = make_posix(path)
+    return filter.call(this, path, slices)
+  }
+}
+
+module.exports = options => new IgnoreBase(options)
diff --git a/server/node_modules/eslint/node_modules/ignore/legacy.js b/server/node_modules/eslint/node_modules/ignore/legacy.js
new file mode 100644
index 0000000000000000000000000000000000000000..14f377d77fa5a3d429c146607e2ed7473f0eff76
--- /dev/null
+++ b/server/node_modules/eslint/node_modules/ignore/legacy.js
@@ -0,0 +1,466 @@
+'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; Object.defineProperty(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"); } }
+
+// A simple implementation of make-array
+function 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 KEY_IGNORE = typeof Symbol !== 'undefined' ? Symbol.for('node-ignore')
+/* istanbul ignore next */
+: 'node-ignore';
+
+var define = function define(object, key, value) {
+  return Object.defineProperty(object, key, { value });
+};
+
+var REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g;
+
+// Sanitize the range of a regular expression
+// The cases are complicated, see test cases for details
+var sanitizeRange = function sanitizeRange(range) {
+  return range.replace(REGEX_REGEXP_RANGE, function (match, from, to) {
+    return from.charCodeAt(0) <= to.charCodeAt(0) ? match
+    // Invalid range (out of order) which is ok for gitignore rules but
+    //   fatal for JavaScript regular expression, so eliminate it.
+    : '';
+  });
+};
+
+// > If the pattern ends with a slash,
+// > it is removed for the purpose of the following description,
+// > but it would only find a match with a directory.
+// > In other words, foo/ will match a directory foo and paths underneath it,
+// > but will not match a regular file or a symbolic link foo
+// >  (this is consistent with the way how pathspec works in general in Git).
+// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'
+// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call
+//      you could use option `mark: true` with `glob`
+
+// '`foo/`' should not continue with the '`..`'
+var DEFAULT_REPLACER_PREFIX = [
+
+// > Trailing spaces are ignored unless they are quoted with backslash ("\")
+[
+// (a\ ) -> (a )
+// (a  ) -> (a)
+// (a \ ) -> (a  )
+/\\?\s+$/, function (match) {
+  return match.indexOf('\\') === 0 ? ' ' : '';
+}],
+
+// replace (\ ) with ' '
+[/\\\s/g, function () {
+  return ' ';
+}],
+
+// Escape metacharacters
+// which is written down by users but means special for regular expressions.
+
+// > There are 12 characters with special meanings:
+// > - the backslash \,
+// > - the caret ^,
+// > - the dollar sign $,
+// > - the period or dot .,
+// > - the vertical bar or pipe symbol |,
+// > - the question mark ?,
+// > - the asterisk or star *,
+// > - the plus sign +,
+// > - the opening parenthesis (,
+// > - the closing parenthesis ),
+// > - and the opening square bracket [,
+// > - the opening curly brace {,
+// > These special characters are often called "metacharacters".
+[/[\\^$.|*+(){]/g, function (match) {
+  return `\\${match}`;
+}], [
+// > [abc] matches any character inside the brackets
+// >    (in this case a, b, or c);
+/\[([^\]/]*)($|\])/g, function (match, p1, p2) {
+  return p2 === ']' ? `[${sanitizeRange(p1)}]` : `\\${match}`;
+}], [
+// > a question mark (?) matches a single character
+/(?!\\)\?/g, function () {
+  return '[^/]';
+}],
+
+// leading slash
+[
+
+// > A leading slash matches the beginning of the pathname.
+// > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".
+// A leading slash matches the beginning of the pathname
+/^\//, function () {
+  return '^';
+}],
+
+// replace special metacharacter slash after the leading slash
+[/\//g, function () {
+  return '\\/';
+}], [
+// > A leading "**" followed by a slash means match in all directories.
+// > For example, "**/foo" matches file or directory "foo" anywhere,
+// > the same as pattern "foo".
+// > "**/foo/bar" matches file or directory "bar" anywhere that is directly
+// >   under directory "foo".
+// Notice that the '*'s have been replaced as '\\*'
+/^\^*\\\*\\\*\\\//,
+
+// '**/foo' <-> 'foo'
+function () {
+  return '^(?:.*\\/)?';
+}]];
+
+var DEFAULT_REPLACER_SUFFIX = [
+// starting
+[
+// there will be no leading '/'
+//   (which has been replaced by section "leading slash")
+// If starts with '**', adding a '^' to the regular expression also works
+/^(?=[^^])/, function startingReplacer() {
+  return !/\/(?!$)/.test(this)
+  // > If the pattern does not contain a slash /,
+  // >   Git treats it as a shell glob pattern
+  // Actually, if there is only a trailing slash,
+  //   git also treats it as a shell glob pattern
+  ? '(?:^|\\/)'
+
+  // > Otherwise, Git treats the pattern as a shell glob suitable for
+  // >   consumption by fnmatch(3)
+  : '^';
+}],
+
+// two globstars
+[
+// Use lookahead assertions so that we could match more than one `'/**'`
+/\\\/\\\*\\\*(?=\\\/|$)/g,
+
+// Zero, one or several directories
+// should not use '*', or it will be replaced by the next replacer
+
+// Check if it is not the last `'/**'`
+function (match, index, str) {
+  return index + 6 < str.length
+
+  // case: /**/
+  // > A slash followed by two consecutive asterisks then a slash matches
+  // >   zero or more directories.
+  // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on.
+  // '/**/'
+  ? '(?:\\/[^\\/]+)*'
+
+  // case: /**
+  // > A trailing `"/**"` matches everything inside.
+
+  // #21: everything inside but it should not include the current folder
+  : '\\/.+';
+}],
+
+// intermediate wildcards
+[
+// Never replace escaped '*'
+// ignore rule '\*' will match the path '*'
+
+// 'abc.*/' -> go
+// 'abc.*'  -> skip this rule
+/(^|[^\\]+)\\\*(?=.+)/g,
+
+// '*.js' matches '.js'
+// '*.js' doesn't match 'abc'
+function (match, p1) {
+  return `${p1}[^\\/]*`;
+}],
+
+// trailing wildcard
+[/(\^|\\\/)?\\\*$/, function (match, p1) {
+  var prefix = p1
+  // '\^':
+  // '/*' does not match ''
+  // '/*' does not match everything
+
+  // '\\\/':
+  // 'abc/*' does not match 'abc/'
+  ? `${p1}[^/]+`
+
+  // 'a*' matches 'a'
+  // 'a*' matches 'aa'
+  : '[^/]*';
+
+  return `${prefix}(?=$|\\/$)`;
+}], [
+// unescape
+/\\\\\\/g, function () {
+  return '\\';
+}]];
+
+var POSITIVE_REPLACERS = [].concat(DEFAULT_REPLACER_PREFIX, [
+
+// 'f'
+// matches
+// - /f(end)
+// - /f/
+// - (start)f(end)
+// - (start)f/
+// doesn't match
+// - oof
+// - foo
+// pseudo:
+// -> (^|/)f(/|$)
+
+// ending
+[
+// 'js' will not match 'js.'
+// 'ab' will not match 'abc'
+/(?:[^*/])$/,
+
+// 'js*' will not match 'a.js'
+// 'js/' will not match 'a.js'
+// 'js' will match 'a.js' and 'a.js/'
+function (match) {
+  return `${match}(?=$|\\/)`;
+}]], DEFAULT_REPLACER_SUFFIX);
+
+var NEGATIVE_REPLACERS = [].concat(DEFAULT_REPLACER_PREFIX, [
+
+// #24, #38
+// The MISSING rule of [gitignore docs](https://git-scm.com/docs/gitignore)
+// A negative pattern without a trailing wildcard should not
+// re-include the things inside that directory.
+
+// eg:
+// ['node_modules/*', '!node_modules']
+// should ignore `node_modules/a.js`
+[/(?:[^*])$/, function (match) {
+  return `${match}(?=$|\\/$)`;
+}]], DEFAULT_REPLACER_SUFFIX);
+
+// A simple cache, because an ignore rule only has only one certain meaning
+var cache = Object.create(null);
+
+// @param {pattern}
+var make_regex = function make_regex(pattern, negative, ignorecase) {
+  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] = ignorecase ? new RegExp(source, 'i') : new RegExp(source);
+};
+
+// > A blank line matches no files, so it can serve as a separator for readability.
+var checkPattern = function checkPattern(pattern) {
+  return pattern && typeof pattern === 'string' && !REGEX_BLANK_LINE.test(pattern)
+
+  // > A line starting with # serves as a comment.
+  && pattern.indexOf('#') !== 0;
+};
+
+var createRule = function createRule(pattern, ignorecase) {
+  var origin = pattern;
+  var negative = false;
+
+  // > An optional prefix "!" which negates the pattern;
+  if (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"`.
+  .replace(REGEX_LEADING_EXCAPED_EXCLAMATION, '!')
+  // > Put a backslash ("\") in front of the first hash for patterns that
+  // >   begin with a hash.
+  .replace(REGEX_LEADING_EXCAPED_HASH, '#');
+
+  var regex = make_regex(pattern, negative, ignorecase);
+
+  return {
+    origin,
+    pattern,
+    negative,
+    regex
+  };
+};
+
+var IgnoreBase = function () {
+  function IgnoreBase() {
+    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
+        _ref$ignorecase = _ref.ignorecase,
+        ignorecase = _ref$ignorecase === undefined ? true : _ref$ignorecase;
+
+    _classCallCheck(this, IgnoreBase);
+
+    this._rules = [];
+    this._ignorecase = ignorecase;
+    define(this, KEY_IGNORE, true);
+    this._initCache();
+  }
+
+  _createClass(IgnoreBase, [{
+    key: '_initCache',
+    value: function _initCache() {
+      this._cache = Object.create(null);
+    }
+
+    // @param {Array.<string>|string|Ignore} pattern
+
+  }, {
+    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,
+      // making the behavior changed.
+      if (this._added) {
+        this._initCache();
+      }
+
+      return this;
+    }
+
+    // legacy
+
+  }, {
+    key: 'addPattern',
+    value: function addPattern(pattern) {
+      return this.add(pattern);
+    }
+  }, {
+    key: '_addPattern',
+    value: function _addPattern(pattern) {
+      // #32
+      if (pattern && pattern[KEY_IGNORE]) {
+        this._rules = this._rules.concat(pattern._rules);
+        this._added = true;
+        return;
+      }
+
+      if (checkPattern(pattern)) {
+        var rule = createRule(pattern, this._ignorecase);
+        this._added = true;
+        this._rules.push(rule);
+      }
+    }
+  }, {
+    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);
+    }
+
+    // @returns `Boolean` true if the `path` is NOT ignored
+
+  }, {
+    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
+        // ['path', 'to', 'a.js']
+        slices = path.split(SLASH);
+      }
+
+      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.
+      // If the path contains a parent directory, check the parent first
+      ? this._filter(slices.join(SLASH) + SLASH, slices) && this._test(path)
+
+      // Or only test the path
+      : this._test(path);
+    }
+
+    // @returns {Boolean} true if a file is NOT ignored
+
+  }, {
+    key: '_test',
+    value: function _test(path) {
+      // Explicitly define variable type by setting matched to `0`
+      var matched = 0;
+
+      this._rules.forEach(function (rule) {
+        // if matched = true, then we only test negative rules
+        // if matched = false, then we test non-negative rules
+        if (!(matched ^ rule.negative)) {
+          matched = rule.negative ^ rule.regex.test(path);
+        }
+      });
+
+      return !matched;
+    }
+  }]);
+
+  return IgnoreBase;
+}();
+
+// Windows
+// --------------------------------------------------------------
+/* istanbul ignore if  */
+
+
+if (
+// Detect `process` so that it can run in browsers.
+typeof process !== 'undefined' && (process.env && process.env.IGNORE_TEST_WIN32 || process.platform === 'win32')) {
+  var filter = IgnoreBase.prototype._filter;
+
+  /* eslint no-control-regex: "off" */
+  var make_posix = function make_posix(str) {
+    return (/^\\\\\?\\/.test(str) || /[^\x00-\x80]+/.test(str) ? str : str.replace(/\\/g, '/')
+    );
+  };
+
+  IgnoreBase.prototype._filter = function filterWin32(path, slices) {
+    path = make_posix(path);
+    return filter.call(this, path, slices);
+  };
+}
+
+module.exports = function (options) {
+  return new IgnoreBase(options);
+};
diff --git a/server/node_modules/eslint/node_modules/ignore/package.json b/server/node_modules/eslint/node_modules/ignore/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..617b9341c27ff2f82b624fb8df18a81a814f5609
--- /dev/null
+++ b/server/node_modules/eslint/node_modules/ignore/package.json
@@ -0,0 +1,92 @@
+{
+  "_from": "ignore@^4.0.6",
+  "_id": "ignore@4.0.6",
+  "_inBundle": false,
+  "_integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+  "_location": "/eslint/ignore",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "ignore@^4.0.6",
+    "name": "ignore",
+    "escapedName": "ignore",
+    "rawSpec": "^4.0.6",
+    "saveSpec": null,
+    "fetchSpec": "^4.0.6"
+  },
+  "_requiredBy": [
+    "/eslint"
+  ],
+  "_resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+  "_shasum": "750e3db5862087b4737ebac8207ffd1ef27b25fc",
+  "_spec": "ignore@^4.0.6",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\eslint",
+  "author": {
+    "name": "kael"
+  },
+  "bugs": {
+    "url": "https://github.com/kaelzhang/node-ignore/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Ignore is a manager and filter for .gitignore rules.",
+  "devDependencies": {
+    "babel-cli": "^6.26.0",
+    "babel-preset-env": "^1.7.0",
+    "codecov": "^3.0.4",
+    "eslint": "^5.3.0",
+    "eslint-config-ostai": "^1.3.2",
+    "eslint-plugin-import": "^2.13.0",
+    "mkdirp": "^0.5.1",
+    "pre-suf": "^1.1.0",
+    "rimraf": "^2.6.2",
+    "spawn-sync": "^2.0.0",
+    "tap": "^12.0.1",
+    "tmp": "0.0.33",
+    "typescript": "^3.0.1"
+  },
+  "engines": {
+    "node": ">= 4"
+  },
+  "files": [
+    "legacy.js",
+    "index.js",
+    "index.d.ts",
+    "LICENSE-MIT"
+  ],
+  "homepage": "https://github.com/kaelzhang/node-ignore#readme",
+  "keywords": [
+    "ignore",
+    ".gitignore",
+    "gitignore",
+    "npmignore",
+    "rules",
+    "manager",
+    "filter",
+    "regexp",
+    "regex",
+    "fnmatch",
+    "glob",
+    "asterisks",
+    "regular-expression"
+  ],
+  "license": "MIT",
+  "name": "ignore",
+  "repository": {
+    "type": "git",
+    "url": "git+ssh://git@github.com/kaelzhang/node-ignore.git"
+  },
+  "scripts": {
+    "build": "babel -o legacy.js index.js",
+    "posttest": "tap --coverage-report=html && codecov",
+    "prepublish": "npm run build",
+    "test": "npm run test-no-cov",
+    "test-no-cov": "npm run test:lint && npm run test:tsc && tap test/*.js --coverage",
+    "test:git": "tap test/git-check-ignore.js",
+    "test:ignore": "tap test/ignore.js --coverage",
+    "test:lint": "eslint .",
+    "test:tsc": "tsc ./test/ts/simple.ts"
+  },
+  "version": "4.0.6"
+}
diff --git a/server/node_modules/eslint/package.json b/server/node_modules/eslint/package.json
index b7c4253669b6b4a30fdefbc8ddcea9e9bd1356f9..7cd17f8d9a16732b64c3446b8ca76c815468227a 100644
--- a/server/node_modules/eslint/package.json
+++ b/server/node_modules/eslint/package.json
@@ -1,27 +1,27 @@
 {
-  "_from": "eslint",
+  "_from": "eslint@^7.16.0",
   "_id": "eslint@7.16.0",
   "_inBundle": false,
   "_integrity": "sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw==",
   "_location": "/eslint",
   "_phantomChildren": {},
   "_requested": {
-    "type": "tag",
+    "type": "range",
     "registry": true,
-    "raw": "eslint",
+    "raw": "eslint@^7.16.0",
     "name": "eslint",
     "escapedName": "eslint",
-    "rawSpec": "",
+    "rawSpec": "^7.16.0",
     "saveSpec": null,
-    "fetchSpec": "latest"
+    "fetchSpec": "^7.16.0"
   },
   "_requiredBy": [
-    "#USER",
-    "/"
+    "#DEV:/",
+    "#USER"
   ],
   "_resolved": "https://registry.npmjs.org/eslint/-/eslint-7.16.0.tgz",
   "_shasum": "a761605bf9a7b32d24bb7cde59aeb0fd76f06092",
-  "_spec": "eslint",
+  "_spec": "eslint@^7.16.0",
   "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server",
   "author": {
     "name": "Nicholas C. Zakas",
diff --git a/server/node_modules/fast-glob/LICENSE b/server/node_modules/fast-glob/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..65a999460170355f6383b8f122da09e66e485165
--- /dev/null
+++ b/server/node_modules/fast-glob/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Denis Malinochkin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/server/node_modules/fast-glob/README.md b/server/node_modules/fast-glob/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f698d58ac48df7f1152d6a5eb4ae1c87c7bfb325
--- /dev/null
+++ b/server/node_modules/fast-glob/README.md
@@ -0,0 +1,793 @@
+# fast-glob
+
+> It's a very fast and efficient [glob][glob_definition] library for [Node.js][node_js].
+
+This package provides methods for traversing the file system and returning pathnames that matched a defined set of a specified pattern according to the rules used by the Unix Bash shell with some simplifications, meanwhile results are returned in **arbitrary order**. Quick, simple, effective.
+
+## Table of Contents
+
+<details>
+<summary><strong>Details</strong></summary>
+
+* [Highlights](#highlights)
+* [Donation](#donation)
+* [Old and modern mode](#old-and-modern-mode)
+* [Pattern syntax](#pattern-syntax)
+  * [Basic syntax](#basic-syntax)
+  * [Advanced syntax](#advanced-syntax)
+* [Installation](#installation)
+* [API](#api)
+  * [Asynchronous](#asynchronous)
+  * [Synchronous](#synchronous)
+  * [Stream](#stream)
+    * [patterns](#patterns)
+    * [[options]](#options)
+  * [Helpers](#helpers)
+    * [generateTasks](#generatetaskspatterns-options)
+    * [isDynamicPattern](#isdynamicpatternpattern-options)
+    * [escapePath](#escapepathpattern)
+* [Options](#options-3)
+  * [Common](#common)
+    * [concurrency](#concurrency)
+    * [cwd](#cwd)
+    * [deep](#deep)
+    * [followSymbolicLinks](#followsymboliclinks)
+    * [fs](#fs)
+    * [ignore](#ignore)
+    * [suppressErrors](#suppresserrors)
+    * [throwErrorOnBrokenSymbolicLink](#throwerroronbrokensymboliclink)
+  * [Output control](#output-control)
+    * [absolute](#absolute)
+    * [markDirectories](#markdirectories)
+    * [objectMode](#objectmode)
+    * [onlyDirectories](#onlydirectories)
+    * [onlyFiles](#onlyfiles)
+    * [stats](#stats)
+    * [unique](#unique)
+  * [Matching control](#matching-control)
+    * [braceExpansion](#braceexpansion)
+    * [caseSensitiveMatch](#casesensitivematch)
+    * [dot](#dot)
+    * [extglob](#extglob)
+    * [globstar](#globstar)
+    * [baseNameMatch](#basenamematch)
+* [FAQ](#faq)
+  * [What is a static or dynamic pattern?](#what-is-a-static-or-dynamic-pattern)
+  * [How to write patterns on Windows?](#how-to-write-patterns-on-windows)
+  * [Why are parentheses match wrong?](#why-are-parentheses-match-wrong)
+  * [How to exclude directory from reading?](#how-to-exclude-directory-from-reading)
+  * [How to use UNC path?](#how-to-use-unc-path)
+  * [Compatible with `node-glob`?](#compatible-with-node-glob)
+* [Benchmarks](#benchmarks)
+  * [Server](#server)
+  * [Nettop](#nettop)
+* [Changelog](#changelog)
+* [License](#license)
+
+</details>
+
+## Highlights
+
+* Fast. Probably the fastest.
+* Supports multiple and negative patterns.
+* Synchronous, Promise and Stream API.
+* Object mode. Can return more than just strings.
+* Error-tolerant.
+
+## Donation
+
+Do you like this project? Support it by donating, creating an issue or pull request.
+
+[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)][paypal_mrmlnc]
+
+## Old and modern mode
+
+This package works in two modes, depending on the environment in which it is used.
+
+* **Old mode**. Node.js below 10.10 or when the [`stats`](#stats) option is *enabled*.
+* **Modern mode**. Node.js 10.10+ and the [`stats`](#stats) option is *disabled*.
+
+The modern mode is faster. Learn more about the [internal mechanism][nodelib_fs_scandir_old_and_modern_modern].
+
+## Pattern syntax
+
+> :warning: Always use forward-slashes in glob expressions (patterns and [`ignore`](#ignore) option). Use backslashes for escaping characters.
+
+There is more than one form of syntax: basic and advanced. Below is a brief overview of the supported features. Also pay attention to our [FAQ](#faq).
+
+> :book: This package uses a [`micromatch`][micromatch] as a library for pattern matching.
+
+### Basic syntax
+
+* An asterisk (`*`) — matches everything except slashes (path separators), hidden files (names starting with `.`).
+* A double star or globstar (`**`) — matches zero or more directories.
+* Question mark (`?`) – matches any single character except slashes (path separators).
+* Sequence (`[seq]`) — matches any character in sequence.
+
+> :book: A few additional words about the [basic matching behavior][picomatch_matching_behavior].
+
+Some examples:
+
+* `src/**/*.js` — matches all files in the `src` directory (any level of nesting) that have the `.js` extension.
+* `src/*.??` — matches all files in the `src` directory (only first level of nesting) that have a two-character extension.
+* `file-[01].js` — matches files: `file-0.js`, `file-1.js`.
+
+### Advanced syntax
+
+* [Escapes characters][micromatch_backslashes] (`\\`) — matching special characters (`$^*+?()[]`) as literals.
+* [POSIX character classes][picomatch_posix_brackets] (`[[:digit:]]`).
+* [Extended globs][micromatch_extglobs] (`?(pattern-list)`).
+* [Bash style brace expansions][micromatch_braces] (`{}`).
+* [Regexp character classes][micromatch_regex_character_classes] (`[1-5]`).
+* [Regex groups][regular_expressions_brackets] (`(a|b)`).
+
+> :book: A few additional words about the [advanced matching behavior][micromatch_extended_globbing].
+
+Some examples:
+
+* `src/**/*.{css,scss}` — matches all files in the `src` directory (any level of nesting) that have the `.css` or `.scss` extension.
+* `file-[[:digit:]].js` — matches files: `file-0.js`, `file-1.js`, …, `file-9.js`.
+* `file-{1..3}.js` — matches files: `file-1.js`, `file-2.js`, `file-3.js`.
+* `file-(1|2)` — matches files: `file-1.js`, `file-2.js`.
+
+## Installation
+
+```console
+npm install fast-glob
+```
+
+## API
+
+### Asynchronous
+
+```js
+fg(patterns, [options])
+```
+
+Returns a `Promise` with an array of matching entries.
+
+```js
+const fg = require('fast-glob');
+
+const entries = await fg(['.editorconfig', '**/index.js'], { dot: true });
+
+// ['.editorconfig', 'services/index.js']
+```
+
+### Synchronous
+
+```js
+fg.sync(patterns, [options])
+```
+
+Returns an array of matching entries.
+
+```js
+const fg = require('fast-glob');
+
+const entries = fg.sync(['.editorconfig', '**/index.js'], { dot: true });
+
+// ['.editorconfig', 'services/index.js']
+```
+
+### Stream
+
+```js
+fg.stream(patterns, [options])
+```
+
+Returns a [`ReadableStream`][node_js_stream_readable_streams] when the `data` event will be emitted with matching entry.
+
+```js
+const fg = require('fast-glob');
+
+const stream = fg.stream(['.editorconfig', '**/index.js'], { dot: true });
+
+for await (const entry of stream) {
+	// .editorconfig
+	// services/index.js
+}
+```
+
+#### patterns
+
+* Required: `true`
+* Type: `string | string[]`
+
+Any correct pattern(s).
+
+> :1234: [Pattern syntax](#pattern-syntax)
+>
+> :warning: This package does not respect the order of patterns. First, all the negative patterns are applied, and only then the positive patterns. If you want to get a certain order of records, use sorting or split calls.
+
+#### [options]
+
+* Required: `false`
+* Type: [`Options`](#options-3)
+
+See [Options](#options-3) section.
+
+### Helpers
+
+#### `generateTasks(patterns, [options])`
+
+Returns the internal representation of patterns ([`Task`](./src/managers/tasks.ts) is a combining patterns by base directory).
+
+```js
+fg.generateTasks('*');
+
+[{
+    base: '.', // Parent directory for all patterns inside this task
+    dynamic: true, // Dynamic or static patterns are in this task
+    patterns: ['*'],
+    positive: ['*'],
+    negative: []
+}]
+```
+
+##### patterns
+
+* Required: `true`
+* Type: `string | string[]`
+
+Any correct pattern(s).
+
+##### [options]
+
+* Required: `false`
+* Type: [`Options`](#options-3)
+
+See [Options](#options-3) section.
+
+#### `isDynamicPattern(pattern, [options])`
+
+Returns `true` if the passed pattern is a dynamic pattern.
+
+> :1234: [What is a static or dynamic pattern?](#what-is-a-static-or-dynamic-pattern)
+
+```js
+fg.isDynamicPattern('*'); // true
+fg.isDynamicPattern('abc'); // false
+```
+
+##### pattern
+
+* Required: `true`
+* Type: `string`
+
+Any correct pattern.
+
+##### [options]
+
+* Required: `false`
+* Type: [`Options`](#options-3)
+
+See [Options](#options-3) section.
+
+#### `escapePath(pattern)`
+
+Returns a path with escaped special characters (`*?|(){}[]`, `!` at the beginning of line, `@+!` before the opening parenthesis).
+
+```js
+fg.escapePath('!abc'); // \\!abc
+fg.escapePath('C:/Program Files (x86)'); // C:/Program Files \\(x86\\)
+```
+
+##### pattern
+
+* Required: `true`
+* Type: `string`
+
+Any string, for example, a path to a file.
+
+## Options
+
+### Common options
+
+#### concurrency
+
+* Type: `number`
+* Default: `os.cpus().length`
+
+Specifies the maximum number of concurrent requests from a reader to read directories.
+
+> :book: The higher the number, the higher the performance and load on the file system. If you want to read in quiet mode, set the value to a comfortable number or `1`.
+
+#### cwd
+
+* Type: `string`
+* Default: `process.cwd()`
+
+The current working directory in which to search.
+
+#### deep
+
+* Type: `number`
+* Default: `Infinity`
+
+Specifies the maximum depth of a read directory relative to the start directory.
+
+For example, you have the following tree:
+
+```js
+dir/
+└── one/            // 1
+    └── two/        // 2
+        └── file.js // 3
+```
+
+```js
+// With base directory
+fg.sync('dir/**', { onlyFiles: false, deep: 1 }); // ['dir/one']
+fg.sync('dir/**', { onlyFiles: false, deep: 2 }); // ['dir/one', 'dir/one/two']
+
+// With cwd option
+fg.sync('**', { onlyFiles: false, cwd: 'dir', deep: 1 }); // ['one']
+fg.sync('**', { onlyFiles: false, cwd: 'dir', deep: 2 }); // ['one', 'one/two']
+```
+
+> :book: If you specify a pattern with some base directory, this directory will not participate in the calculation of the depth of the found directories. Think of it as a [`cwd`](#cwd) option.
+
+#### followSymbolicLinks
+
+* Type: `boolean`
+* Default: `true`
+
+Indicates whether to traverse descendants of symbolic link directories.
+
+> :book: If the [`stats`](#stats) option is specified, the information about the symbolic link (`fs.lstat`) will be replaced with information about the entry (`fs.stat`) behind it.
+
+#### fs
+
+* Type: `FileSystemAdapter`
+* Default: `fs.*`
+
+Custom implementation of methods for working with the file system.
+
+```ts
+export interface FileSystemAdapter {
+    lstat?: typeof fs.lstat;
+    stat?: typeof fs.stat;
+    lstatSync?: typeof fs.lstatSync;
+    statSync?: typeof fs.statSync;
+    readdir?: typeof fs.readdir;
+    readdirSync?: typeof fs.readdirSync;
+}
+```
+
+#### ignore
+
+* Type: `string[]`
+* Default: `[]`
+
+An array of glob patterns to exclude matches. This is an alternative way to use negative patterns.
+
+```js
+dir/
+├── package-lock.json
+└── package.json
+```
+
+```js
+fg.sync(['*.json', '!package-lock.json']);            // ['package.json']
+fg.sync('*.json', { ignore: ['package-lock.json'] }); // ['package.json']
+```
+
+#### suppressErrors
+
+* Type: `boolean`
+* Default: `false`
+
+By default this package suppress only `ENOENT` errors. Set to `true` to suppress any error.
+
+> :book: Can be useful when the directory has entries with a special level of access.
+
+#### throwErrorOnBrokenSymbolicLink
+
+* Type: `boolean`
+* Default: `false`
+
+Throw an error when symbolic link is broken if `true` or safely return `lstat` call if `false`.
+
+> :book: This option has no effect on errors when reading the symbolic link directory.
+
+### Output control
+
+#### absolute
+
+* Type: `boolean`
+* Default: `false`
+
+Return the absolute path for entries.
+
+```js
+fg.sync('*.js', { absolute: false }); // ['index.js']
+fg.sync('*.js', { absolute: true });  // ['/home/user/index.js']
+```
+
+> :book: This option is required if you want to use negative patterns with absolute path, for example, `!${__dirname}/*.js`.
+
+#### markDirectories
+
+* Type: `boolean`
+* Default: `false`
+
+Mark the directory path with the final slash.
+
+```js
+fs.sync('*', { onlyFiles: false, markDirectories: false }); // ['index.js', 'controllers']
+fs.sync('*', { onlyFiles: false, markDirectories: true });  // ['index.js', 'controllers/']
+```
+
+#### objectMode
+
+* Type: `boolean`
+* Default: `false`
+
+Returns objects (instead of strings) describing entries.
+
+```js
+fg.sync('*', { objectMode: false }); // ['src/index.js']
+fg.sync('*', { objectMode: true });  // [{ name: 'index.js', path: 'src/index.js', dirent: <fs.Dirent> }]
+```
+
+The object has the following fields:
+
+* name (`string`) — the last part of the path (basename)
+* path (`string`) — full path relative to the pattern base directory
+* dirent ([`fs.Dirent`][node_js_fs_class_fs_dirent]) — instance of `fs.Direct`
+
+> :book: An object is an internal representation of entry, so getting it does not affect performance.
+
+#### onlyDirectories
+
+* Type: `boolean`
+* Default: `false`
+
+Return only directories.
+
+```js
+fg.sync('*', { onlyDirectories: false }); // ['index.js', 'src']
+fg.sync('*', { onlyDirectories: true });  // ['src']
+```
+
+> :book: If `true`, the [`onlyFiles`](#onlyfiles) option is automatically `false`.
+
+#### onlyFiles
+
+* Type: `boolean`
+* Default: `true`
+
+Return only files.
+
+```js
+fg.sync('*', { onlyFiles: false }); // ['index.js', 'src']
+fg.sync('*', { onlyFiles: true });  // ['index.js']
+```
+
+#### stats
+
+* Type: `boolean`
+* Default: `false`
+
+Enables an [object mode](#objectmode) with an additional field:
+
+* stats ([`fs.Stats`][node_js_fs_class_fs_stats]) — instance of `fs.Stats`
+
+```js
+fg.sync('*', { stats: false }); // ['src/index.js']
+fg.sync('*', { stats: true });  // [{ name: 'index.js', path: 'src/index.js', dirent: <fs.Dirent>, stats: <fs.Stats> }]
+```
+
+> :book: Returns `fs.stat` instead of `fs.lstat` for symbolic links when the [`followSymbolicLinks`](#followsymboliclinks) option is specified.
+>
+> :warning: Unlike [object mode](#objectmode) this mode requires additional calls to the file system. On average, this mode is slower at least twice. See [old and modern mode](#old-and-modern-mode) for more details.
+
+#### unique
+
+* Type: `boolean`
+* Default: `true`
+
+Ensures that the returned entries are unique.
+
+```js
+fg.sync(['*.json', 'package.json'], { unique: false }); // ['package.json', 'package.json']
+fg.sync(['*.json', 'package.json'], { unique: true });  // ['package.json']
+```
+
+If `true` and similar entries are found, the result is the first found.
+
+### Matching control
+
+#### braceExpansion
+
+* Type: `boolean`
+* Default: `true`
+
+Enables Bash-like brace expansion.
+
+> :1234: [Syntax description][bash_hackers_syntax_expansion_brace] or more [detailed description][micromatch_braces].
+
+```js
+dir/
+├── abd
+├── acd
+└── a{b,c}d
+```
+
+```js
+fg.sync('a{b,c}d', { braceExpansion: false }); // ['a{b,c}d']
+fg.sync('a{b,c}d', { braceExpansion: true });  // ['abd', 'acd']
+```
+
+#### caseSensitiveMatch
+
+* Type: `boolean`
+* Default: `true`
+
+Enables a [case-sensitive][wikipedia_case_sensitivity] mode for matching files.
+
+```js
+dir/
+├── file.txt
+└── File.txt
+```
+
+```js
+fg.sync('file.txt', { caseSensitiveMatch: false }); // ['file.txt', 'File.txt']
+fg.sync('file.txt', { caseSensitiveMatch: true });  // ['file.txt']
+```
+
+#### dot
+
+* Type: `boolean`
+* Default: `false`
+
+Allow patterns to match entries that begin with a period (`.`).
+
+> :book: Note that an explicit dot in a portion of the pattern will always match dot files.
+
+```js
+dir/
+├── .editorconfig
+└── package.json
+```
+
+```js
+fg.sync('*', { dot: false }); // ['package.json']
+fg.sync('*', { dot: true });  // ['.editorconfig', 'package.json']
+```
+
+#### extglob
+
+* Type: `boolean`
+* Default: `true`
+
+Enables Bash-like `extglob` functionality.
+
+> :1234: [Syntax description][micromatch_extglobs].
+
+```js
+dir/
+├── README.md
+└── package.json
+```
+
+```js
+fg.sync('*.+(json|md)', { extglob: false }); // []
+fg.sync('*.+(json|md)', { extglob: true });  // ['README.md', 'package.json']
+```
+
+#### globstar
+
+* Type: `boolean`
+* Default: `true`
+
+Enables recursively repeats a pattern containing `**`. If `false`, `**` behaves exactly like `*`.
+
+```js
+dir/
+└── a
+    └── b
+```
+
+```js
+fg.sync('**', { onlyFiles: false, globstar: false }); // ['a']
+fg.sync('**', { onlyFiles: false, globstar: true });  // ['a', 'a/b']
+```
+
+#### baseNameMatch
+
+* Type: `boolean`
+* Default: `false`
+
+If set to `true`, then patterns without slashes will be matched against the basename of the path if it contains slashes.
+
+```js
+dir/
+└── one/
+    └── file.md
+```
+
+```js
+fg.sync('*.md', { baseNameMatch: false }); // []
+fg.sync('*.md', { baseNameMatch: true });  // ['one/file.md']
+```
+
+## FAQ
+
+## What is a static or dynamic pattern?
+
+All patterns can be divided into two types:
+
+* **static**. A pattern is considered static if it can be used to get an entry on the file system without using matching mechanisms. For example, the `file.js` pattern is a static pattern because we can just verify that it exists on the file system.
+* **dynamic**. A pattern is considered dynamic if it cannot be used directly to find occurrences without using a matching mechanisms. For example, the `*` pattern is a dynamic pattern because we cannot use this pattern directly.
+
+A pattern is considered dynamic if it contains the following characters (`…` — any characters or their absence) or options:
+
+* The [`caseSensitiveMatch`](#casesensitivematch) option is disabled
+* `\\` (the escape character)
+* `*`, `?`, `!` (at the beginning of line)
+* `[…]`
+* `(…|…)`
+* `@(…)`, `!(…)`, `*(…)`, `?(…)`, `+(…)` (respects the [`extglob`](#extglob) option)
+* `{…,…}`, `{…..…}` (respects the [`braceExpansion`](#braceexpansion) option)
+
+## How to write patterns on Windows?
+
+Always use forward-slashes in glob expressions (patterns and [`ignore`](#ignore) option). Use backslashes for escaping characters. With the [`cwd`](#cwd) option use a convenient format.
+
+**Bad**
+
+```ts
+[
+	'directory\\*',
+	path.join(process.cwd(), '**')
+]
+```
+
+**Good**
+
+```ts
+[
+	'directory/*',
+	path.join(process.cwd(), '**').replace(/\\/g, '/')
+]
+```
+
+> :book: Use the [`normalize-path`][npm_normalize_path] or the [`unixify`][npm_unixify] package to convert Windows-style path to a Unix-style path.
+
+Read more about [matching with backslashes][micromatch_backslashes].
+
+## Why are parentheses match wrong?
+
+```js
+dir/
+└── (special-*file).txt
+```
+
+```js
+fg.sync(['(special-*file).txt']) // []
+```
+
+Refers to Bash. You need to escape special characters:
+
+```js
+fg.sync(['\\(special-*file\\).txt']) // ['(special-*file).txt']
+```
+
+Read more about [matching special characters as literals][picomatch_matching_special_characters_as_literals].
+
+## How to exclude directory from reading?
+
+You can use a negative pattern like this: `!**/node_modules` or `!**/node_modules/**`. Also you can use [`ignore`](#ignore) option. Just look at the example below.
+
+```js
+first/
+├── file.md
+└── second/
+    └── file.txt
+```
+
+If you don't want to read the `second` directory, you must write the following pattern: `!**/second` or `!**/second/**`.
+
+```js
+fg.sync(['**/*.md', '!**/second']);                 // ['first/file.md']
+fg.sync(['**/*.md'], { ignore: ['**/second/**'] }); // ['first/file.md']
+```
+
+> :warning: When you write `!**/second/**/*` it means that the directory will be **read**, but all the entries will not be included in the results.
+
+You have to understand that if you write the pattern to exclude directories, then the directory will not be read under any circumstances.
+
+## How to use UNC path?
+
+You cannot use [Uniform Naming Convention (UNC)][unc_path] paths as patterns (due to syntax), but you can use them as [`cwd`](#cwd) directory.
+
+```ts
+fg.sync('*', { cwd: '\\\\?\\C:\\Python27' /* or //?/C:/Python27 */ });
+fg.sync('Python27/*', { cwd: '\\\\?\\C:\\' /* or //?/C:/ */ });
+```
+
+## Compatible with `node-glob`?
+
+| node-glob    | fast-glob |
+| :----------: | :-------: |
+| `cwd`        | [`cwd`](#cwd) |
+| `root`       | – |
+| `dot`        | [`dot`](#dot) |
+| `nomount`    | – |
+| `mark`       | [`markDirectories`](#markdirectories) |
+| `nosort`     | – |
+| `nounique`   | [`unique`](#unique) |
+| `nobrace`    | [`braceExpansion`](#braceexpansion) |
+| `noglobstar` | [`globstar`](#globstar) |
+| `noext`      | [`extglob`](#extglob) |
+| `nocase`     | [`caseSensitiveMatch`](#casesensitivematch) |
+| `matchBase`  | [`baseNameMatch`](#basenamematch) |
+| `nodir`      | [`onlyFiles`](#onlyfiles) |
+| `ignore`     | [`ignore`](#ignore) |
+| `follow`     | [`followSymbolicLinks`](#followsymboliclinks) |
+| `realpath`   | – |
+| `absolute`   | [`absolute`](#absolute) |
+
+## Benchmarks
+
+### Server
+
+Link: [Vultr Bare Metal][vultr_pricing_baremetal]
+
+* Processor: E3-1270v6 (8 CPU)
+* RAM: 32GB
+* Disk: SSD ([Intel DC S3520 SSDSC2BB240G7][intel_ssd])
+
+You can see results [here][github_gist_benchmark_server] for latest release.
+
+### Nettop
+
+Link: [Zotac bi323][zotac_bi323]
+
+* Processor: Intel N3150 (4 CPU)
+* RAM: 8GB
+* Disk: SSD ([Silicon Power SP060GBSS3S55S25][silicon_power_ssd])
+
+You can see results [here][github_gist_benchmark_nettop] for latest release.
+
+## Changelog
+
+See the [Releases section of our GitHub project][github_releases] for changelog for each release version.
+
+## License
+
+This software is released under the terms of the MIT license.
+
+[bash_hackers_syntax_expansion_brace]: https://wiki.bash-hackers.org/syntax/expansion/brace
+[github_gist_benchmark_nettop]: https://gist.github.com/mrmlnc/f06246b197f53c356895fa35355a367c#file-fg-benchmark-nettop-product-txt
+[github_gist_benchmark_server]: https://gist.github.com/mrmlnc/f06246b197f53c356895fa35355a367c#file-fg-benchmark-server-product-txt
+[github_releases]: https://github.com/mrmlnc/fast-glob/releases
+[glob_definition]: https://en.wikipedia.org/wiki/Glob_(programming)
+[glob_linux_man]: http://man7.org/linux/man-pages/man3/glob.3.html
+[intel_ssd]: https://ark.intel.com/content/www/us/en/ark/products/93012/intel-ssd-dc-s3520-series-240gb-2-5in-sata-6gb-s-3d1-mlc.html
+[micromatch_backslashes]: https://github.com/micromatch/micromatch#backslashes
+[micromatch_braces]: https://github.com/micromatch/braces
+[micromatch_extended_globbing]: https://github.com/micromatch/micromatch#extended-globbing
+[micromatch_extglobs]: https://github.com/micromatch/micromatch#extglobs
+[micromatch_regex_character_classes]: https://github.com/micromatch/micromatch#regex-character-classes
+[micromatch]: https://github.com/micromatch/micromatch
+[node_js_fs_class_fs_dirent]: https://nodejs.org/api/fs.html#fs_class_fs_dirent
+[node_js_fs_class_fs_stats]: https://nodejs.org/api/fs.html#fs_class_fs_stats
+[node_js_stream_readable_streams]: https://nodejs.org/api/stream.html#stream_readable_streams
+[node_js]: https://nodejs.org/en
+[nodelib_fs_scandir_old_and_modern_modern]: https://github.com/nodelib/nodelib/blob/master/packages/fs/fs.scandir/README.md#old-and-modern-mode
+[npm_normalize_path]: https://www.npmjs.com/package/normalize-path
+[npm_unixify]: https://www.npmjs.com/package/unixify
+[paypal_mrmlnc]:https://paypal.me/mrmlnc
+[picomatch_matching_behavior]: https://github.com/micromatch/picomatch#matching-behavior-vs-bash
+[picomatch_matching_special_characters_as_literals]: https://github.com/micromatch/picomatch#matching-special-characters-as-literals
+[picomatch_posix_brackets]: https://github.com/micromatch/picomatch#posix-brackets
+[regular_expressions_brackets]: https://www.regular-expressions.info/brackets.html
+[silicon_power_ssd]: https://www.silicon-power.com/web/product-1
+[unc_path]: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/62e862f4-2a51-452e-8eeb-dc4ff5ee33cc
+[vultr_pricing_baremetal]: https://www.vultr.com/pricing/baremetal
+[wikipedia_case_sensitivity]: https://en.wikipedia.org/wiki/Case_sensitivity
+[zotac_bi323]: https://www.zotac.com/ee/product/mini_pcs/zbox-bi323
diff --git a/server/node_modules/fast-glob/out/index.d.ts b/server/node_modules/fast-glob/out/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..553e5144c5dc890b5b52e6a7d33d703808830d73
--- /dev/null
+++ b/server/node_modules/fast-glob/out/index.d.ts
@@ -0,0 +1,27 @@
+/// <reference types="node" />
+import * as taskManager from './managers/tasks';
+import { Options as OptionsInternal } from './settings';
+import { Entry as EntryInternal, FileSystemAdapter as FileSystemAdapterInternal, Pattern as PatternInternal } from './types';
+declare type EntryObjectModePredicate = {
+    [TKey in keyof Pick<OptionsInternal, 'objectMode'>]-?: true;
+};
+declare type EntryStatsPredicate = {
+    [TKey in keyof Pick<OptionsInternal, 'stats'>]-?: true;
+};
+declare type EntryObjectPredicate = EntryObjectModePredicate | EntryStatsPredicate;
+declare function FastGlob(source: PatternInternal | PatternInternal[], options: OptionsInternal & EntryObjectPredicate): Promise<EntryInternal[]>;
+declare function FastGlob(source: PatternInternal | PatternInternal[], options?: OptionsInternal): Promise<string[]>;
+declare namespace FastGlob {
+    type Options = OptionsInternal;
+    type Entry = EntryInternal;
+    type Task = taskManager.Task;
+    type Pattern = PatternInternal;
+    type FileSystemAdapter = FileSystemAdapterInternal;
+    function sync(source: PatternInternal | PatternInternal[], options: OptionsInternal & EntryObjectPredicate): EntryInternal[];
+    function sync(source: PatternInternal | PatternInternal[], options?: OptionsInternal): string[];
+    function stream(source: PatternInternal | PatternInternal[], options?: OptionsInternal): NodeJS.ReadableStream;
+    function generateTasks(source: PatternInternal | PatternInternal[], options?: OptionsInternal): Task[];
+    function isDynamicPattern(source: PatternInternal, options?: OptionsInternal): boolean;
+    function escapePath(source: PatternInternal): PatternInternal;
+}
+export = FastGlob;
diff --git a/server/node_modules/fast-glob/out/index.js b/server/node_modules/fast-glob/out/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf8dea5a7ffb10360f0f05a0bbe3a0689e171878
--- /dev/null
+++ b/server/node_modules/fast-glob/out/index.js
@@ -0,0 +1,67 @@
+"use strict";
+const taskManager = require("./managers/tasks");
+const async_1 = require("./providers/async");
+const stream_1 = require("./providers/stream");
+const sync_1 = require("./providers/sync");
+const settings_1 = require("./settings");
+const utils = require("./utils");
+async function FastGlob(source, options) {
+    assertPatternsInput(source);
+    const works = getWorks(source, async_1.default, options);
+    const result = await Promise.all(works);
+    return utils.array.flatten(result);
+}
+// https://github.com/typescript-eslint/typescript-eslint/issues/60
+// eslint-disable-next-line no-redeclare
+(function (FastGlob) {
+    function sync(source, options) {
+        assertPatternsInput(source);
+        const works = getWorks(source, sync_1.default, options);
+        return utils.array.flatten(works);
+    }
+    FastGlob.sync = sync;
+    function stream(source, options) {
+        assertPatternsInput(source);
+        const works = getWorks(source, stream_1.default, options);
+        /**
+         * The stream returned by the provider cannot work with an asynchronous iterator.
+         * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.
+         * This affects performance (+25%). I don't see best solution right now.
+         */
+        return utils.stream.merge(works);
+    }
+    FastGlob.stream = stream;
+    function generateTasks(source, options) {
+        assertPatternsInput(source);
+        const patterns = [].concat(source);
+        const settings = new settings_1.default(options);
+        return taskManager.generate(patterns, settings);
+    }
+    FastGlob.generateTasks = generateTasks;
+    function isDynamicPattern(source, options) {
+        assertPatternsInput(source);
+        const settings = new settings_1.default(options);
+        return utils.pattern.isDynamicPattern(source, settings);
+    }
+    FastGlob.isDynamicPattern = isDynamicPattern;
+    function escapePath(source) {
+        assertPatternsInput(source);
+        return utils.path.escape(source);
+    }
+    FastGlob.escapePath = escapePath;
+})(FastGlob || (FastGlob = {}));
+function getWorks(source, _Provider, options) {
+    const patterns = [].concat(source);
+    const settings = new settings_1.default(options);
+    const tasks = taskManager.generate(patterns, settings);
+    const provider = new _Provider(settings);
+    return tasks.map(provider.read, provider);
+}
+function assertPatternsInput(input) {
+    const source = [].concat(input);
+    const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));
+    if (!isValidSource) {
+        throw new TypeError('Patterns must be a string (non empty) or an array of strings');
+    }
+}
+module.exports = FastGlob;
diff --git a/server/node_modules/fast-glob/out/managers/tasks.d.ts b/server/node_modules/fast-glob/out/managers/tasks.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ff8e11ea0475be7cbbf95bab53bace71fdef0fb0
--- /dev/null
+++ b/server/node_modules/fast-glob/out/managers/tasks.d.ts
@@ -0,0 +1,16 @@
+import Settings from '../settings';
+import { Pattern, PatternsGroup } from '../types';
+export declare type Task = {
+    base: string;
+    dynamic: boolean;
+    patterns: Pattern[];
+    positive: Pattern[];
+    negative: Pattern[];
+};
+export declare function generate(patterns: Pattern[], settings: Settings): Task[];
+export declare function convertPatternsToTasks(positive: Pattern[], negative: Pattern[], dynamic: boolean): Task[];
+export declare function getPositivePatterns(patterns: Pattern[]): Pattern[];
+export declare function getNegativePatternsAsPositive(patterns: Pattern[], ignore: Pattern[]): Pattern[];
+export declare function groupPatternsByBaseDirectory(patterns: Pattern[]): PatternsGroup;
+export declare function convertPatternGroupsToTasks(positive: PatternsGroup, negative: Pattern[], dynamic: boolean): Task[];
+export declare function convertPatternGroupToTask(base: string, positive: Pattern[], negative: Pattern[], dynamic: boolean): Task;
diff --git a/server/node_modules/fast-glob/out/managers/tasks.js b/server/node_modules/fast-glob/out/managers/tasks.js
new file mode 100644
index 0000000000000000000000000000000000000000..f4f33dafd5365bcfced9c7fdede470ae75d01d2b
--- /dev/null
+++ b/server/node_modules/fast-glob/out/managers/tasks.js
@@ -0,0 +1,65 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;
+const utils = require("../utils");
+function generate(patterns, settings) {
+    const positivePatterns = getPositivePatterns(patterns);
+    const negativePatterns = getNegativePatternsAsPositive(patterns, settings.ignore);
+    const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));
+    const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));
+    const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);
+    const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);
+    return staticTasks.concat(dynamicTasks);
+}
+exports.generate = generate;
+function convertPatternsToTasks(positive, negative, dynamic) {
+    const positivePatternsGroup = groupPatternsByBaseDirectory(positive);
+    // When we have a global group – there is no reason to divide the patterns into independent tasks.
+    // In this case, the global task covers the rest.
+    if ('.' in positivePatternsGroup) {
+        const task = convertPatternGroupToTask('.', positive, negative, dynamic);
+        return [task];
+    }
+    return convertPatternGroupsToTasks(positivePatternsGroup, negative, dynamic);
+}
+exports.convertPatternsToTasks = convertPatternsToTasks;
+function getPositivePatterns(patterns) {
+    return utils.pattern.getPositivePatterns(patterns);
+}
+exports.getPositivePatterns = getPositivePatterns;
+function getNegativePatternsAsPositive(patterns, ignore) {
+    const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);
+    const positive = negative.map(utils.pattern.convertToPositivePattern);
+    return positive;
+}
+exports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;
+function groupPatternsByBaseDirectory(patterns) {
+    const group = {};
+    return patterns.reduce((collection, pattern) => {
+        const base = utils.pattern.getBaseDirectory(pattern);
+        if (base in collection) {
+            collection[base].push(pattern);
+        }
+        else {
+            collection[base] = [pattern];
+        }
+        return collection;
+    }, group);
+}
+exports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;
+function convertPatternGroupsToTasks(positive, negative, dynamic) {
+    return Object.keys(positive).map((base) => {
+        return convertPatternGroupToTask(base, positive[base], negative, dynamic);
+    });
+}
+exports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;
+function convertPatternGroupToTask(base, positive, negative, dynamic) {
+    return {
+        dynamic,
+        positive,
+        negative,
+        base,
+        patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))
+    };
+}
+exports.convertPatternGroupToTask = convertPatternGroupToTask;
diff --git a/server/node_modules/fast-glob/out/providers/async.d.ts b/server/node_modules/fast-glob/out/providers/async.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a2dc7a90d584e9a1a24165ff9165e1912b872a97
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/async.d.ts
@@ -0,0 +1,11 @@
+/// <reference types="node" />
+import { Readable } from 'stream';
+import { Task } from '../managers/tasks';
+import ReaderStream from '../readers/stream';
+import { EntryItem, ReaderOptions } from '../types';
+import Provider from './provider';
+export default class ProviderAsync extends Provider<Promise<EntryItem[]>> {
+    protected _reader: ReaderStream;
+    read(task: Task): Promise<EntryItem[]>;
+    api(root: string, task: Task, options: ReaderOptions): Readable;
+}
diff --git a/server/node_modules/fast-glob/out/providers/async.js b/server/node_modules/fast-glob/out/providers/async.js
new file mode 100644
index 0000000000000000000000000000000000000000..477aae5709b82ee751219d89c81d5da283b09d29
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/async.js
@@ -0,0 +1,28 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const stream_1 = require("../readers/stream");
+const provider_1 = require("./provider");
+class ProviderAsync extends provider_1.default {
+    constructor() {
+        super(...arguments);
+        this._reader = new stream_1.default(this._settings);
+    }
+    read(task) {
+        const root = this._getRootDirectory(task);
+        const options = this._getReaderOptions(task);
+        const entries = [];
+        return new Promise((resolve, reject) => {
+            const stream = this.api(root, task, options);
+            stream.once('error', reject);
+            stream.on('data', (entry) => entries.push(options.transform(entry)));
+            stream.once('end', () => resolve(entries));
+        });
+    }
+    api(root, task, options) {
+        if (task.dynamic) {
+            return this._reader.dynamic(root, options);
+        }
+        return this._reader.static(task.patterns, options);
+    }
+}
+exports.default = ProviderAsync;
diff --git a/server/node_modules/fast-glob/out/providers/filters/deep.d.ts b/server/node_modules/fast-glob/out/providers/filters/deep.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..377fab88978c79658ba958b853c017fdc8cf0d24
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/filters/deep.d.ts
@@ -0,0 +1,16 @@
+import { MicromatchOptions, EntryFilterFunction, Pattern } from '../../types';
+import Settings from '../../settings';
+export default class DeepFilter {
+    private readonly _settings;
+    private readonly _micromatchOptions;
+    constructor(_settings: Settings, _micromatchOptions: MicromatchOptions);
+    getFilter(basePath: string, positive: Pattern[], negative: Pattern[]): EntryFilterFunction;
+    private _getMatcher;
+    private _getNegativePatternsRe;
+    private _filter;
+    private _isSkippedByDeep;
+    private _getEntryLevel;
+    private _isSkippedSymbolicLink;
+    private _isSkippedByPositivePatterns;
+    private _isSkippedByNegativePatterns;
+}
diff --git a/server/node_modules/fast-glob/out/providers/filters/deep.js b/server/node_modules/fast-glob/out/providers/filters/deep.js
new file mode 100644
index 0000000000000000000000000000000000000000..644bf41b5a5e314f3d97c283417cd99ba6826883
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/filters/deep.js
@@ -0,0 +1,62 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const utils = require("../../utils");
+const partial_1 = require("../matchers/partial");
+class DeepFilter {
+    constructor(_settings, _micromatchOptions) {
+        this._settings = _settings;
+        this._micromatchOptions = _micromatchOptions;
+    }
+    getFilter(basePath, positive, negative) {
+        const matcher = this._getMatcher(positive);
+        const negativeRe = this._getNegativePatternsRe(negative);
+        return (entry) => this._filter(basePath, entry, matcher, negativeRe);
+    }
+    _getMatcher(patterns) {
+        return new partial_1.default(patterns, this._settings, this._micromatchOptions);
+    }
+    _getNegativePatternsRe(patterns) {
+        const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);
+        return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);
+    }
+    _filter(basePath, entry, matcher, negativeRe) {
+        if (this._isSkippedByDeep(basePath, entry.path)) {
+            return false;
+        }
+        if (this._isSkippedSymbolicLink(entry)) {
+            return false;
+        }
+        const filepath = utils.path.removeLeadingDotSegment(entry.path);
+        if (this._isSkippedByPositivePatterns(filepath, matcher)) {
+            return false;
+        }
+        return this._isSkippedByNegativePatterns(filepath, negativeRe);
+    }
+    _isSkippedByDeep(basePath, entryPath) {
+        /**
+         * Avoid unnecessary depth calculations when it doesn't matter.
+         */
+        if (this._settings.deep === Infinity) {
+            return false;
+        }
+        return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;
+    }
+    _getEntryLevel(basePath, entryPath) {
+        const entryPathDepth = entryPath.split('/').length;
+        if (basePath === '') {
+            return entryPathDepth;
+        }
+        const basePathDepth = basePath.split('/').length;
+        return entryPathDepth - basePathDepth;
+    }
+    _isSkippedSymbolicLink(entry) {
+        return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();
+    }
+    _isSkippedByPositivePatterns(entryPath, matcher) {
+        return !this._settings.baseNameMatch && !matcher.match(entryPath);
+    }
+    _isSkippedByNegativePatterns(entryPath, patternsRe) {
+        return !utils.pattern.matchAny(entryPath, patternsRe);
+    }
+}
+exports.default = DeepFilter;
diff --git a/server/node_modules/fast-glob/out/providers/filters/entry.d.ts b/server/node_modules/fast-glob/out/providers/filters/entry.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ee7128194be9ed285e4478118b4aa01ca293dab0
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/filters/entry.d.ts
@@ -0,0 +1,16 @@
+import Settings from '../../settings';
+import { EntryFilterFunction, MicromatchOptions, Pattern } from '../../types';
+export default class EntryFilter {
+    private readonly _settings;
+    private readonly _micromatchOptions;
+    readonly index: Map<string, undefined>;
+    constructor(_settings: Settings, _micromatchOptions: MicromatchOptions);
+    getFilter(positive: Pattern[], negative: Pattern[]): EntryFilterFunction;
+    private _filter;
+    private _isDuplicateEntry;
+    private _createIndexRecord;
+    private _onlyFileFilter;
+    private _onlyDirectoryFilter;
+    private _isSkippedByAbsoluteNegativePatterns;
+    private _isMatchToPatterns;
+}
diff --git a/server/node_modules/fast-glob/out/providers/filters/entry.js b/server/node_modules/fast-glob/out/providers/filters/entry.js
new file mode 100644
index 0000000000000000000000000000000000000000..97d3978744d9187bb949ee664e74d16c67b2fdb5
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/filters/entry.js
@@ -0,0 +1,56 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const utils = require("../../utils");
+class EntryFilter {
+    constructor(_settings, _micromatchOptions) {
+        this._settings = _settings;
+        this._micromatchOptions = _micromatchOptions;
+        this.index = new Map();
+    }
+    getFilter(positive, negative) {
+        const positiveRe = utils.pattern.convertPatternsToRe(positive, this._micromatchOptions);
+        const negativeRe = utils.pattern.convertPatternsToRe(negative, this._micromatchOptions);
+        return (entry) => this._filter(entry, positiveRe, negativeRe);
+    }
+    _filter(entry, positiveRe, negativeRe) {
+        if (this._settings.unique && this._isDuplicateEntry(entry)) {
+            return false;
+        }
+        if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {
+            return false;
+        }
+        if (this._isSkippedByAbsoluteNegativePatterns(entry.path, negativeRe)) {
+            return false;
+        }
+        const filepath = this._settings.baseNameMatch ? entry.name : entry.path;
+        const isMatched = this._isMatchToPatterns(filepath, positiveRe) && !this._isMatchToPatterns(entry.path, negativeRe);
+        if (this._settings.unique && isMatched) {
+            this._createIndexRecord(entry);
+        }
+        return isMatched;
+    }
+    _isDuplicateEntry(entry) {
+        return this.index.has(entry.path);
+    }
+    _createIndexRecord(entry) {
+        this.index.set(entry.path, undefined);
+    }
+    _onlyFileFilter(entry) {
+        return this._settings.onlyFiles && !entry.dirent.isFile();
+    }
+    _onlyDirectoryFilter(entry) {
+        return this._settings.onlyDirectories && !entry.dirent.isDirectory();
+    }
+    _isSkippedByAbsoluteNegativePatterns(entryPath, patternsRe) {
+        if (!this._settings.absolute) {
+            return false;
+        }
+        const fullpath = utils.path.makeAbsolute(this._settings.cwd, entryPath);
+        return utils.pattern.matchAny(fullpath, patternsRe);
+    }
+    _isMatchToPatterns(entryPath, patternsRe) {
+        const filepath = utils.path.removeLeadingDotSegment(entryPath);
+        return utils.pattern.matchAny(filepath, patternsRe);
+    }
+}
+exports.default = EntryFilter;
diff --git a/server/node_modules/fast-glob/out/providers/filters/error.d.ts b/server/node_modules/fast-glob/out/providers/filters/error.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..170eb251c91a3a23e8b3267881617652046fc1e7
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/filters/error.d.ts
@@ -0,0 +1,8 @@
+import Settings from '../../settings';
+import { ErrorFilterFunction } from '../../types';
+export default class ErrorFilter {
+    private readonly _settings;
+    constructor(_settings: Settings);
+    getFilter(): ErrorFilterFunction;
+    private _isNonFatalError;
+}
diff --git a/server/node_modules/fast-glob/out/providers/filters/error.js b/server/node_modules/fast-glob/out/providers/filters/error.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c6f24165b8ea45ebb885ecf4f951799a3d20778
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/filters/error.js
@@ -0,0 +1,15 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const utils = require("../../utils");
+class ErrorFilter {
+    constructor(_settings) {
+        this._settings = _settings;
+    }
+    getFilter() {
+        return (error) => this._isNonFatalError(error);
+    }
+    _isNonFatalError(error) {
+        return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;
+    }
+}
+exports.default = ErrorFilter;
diff --git a/server/node_modules/fast-glob/out/providers/matchers/matcher.d.ts b/server/node_modules/fast-glob/out/providers/matchers/matcher.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f3773d464d2cda7b5f0a79a3ff4f2ff354d2e023
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/matchers/matcher.d.ts
@@ -0,0 +1,33 @@
+import { Pattern, MicromatchOptions, PatternRe } from '../../types';
+import Settings from '../../settings';
+export declare type PatternSegment = StaticPatternSegment | DynamicPatternSegment;
+declare type StaticPatternSegment = {
+    dynamic: false;
+    pattern: Pattern;
+};
+declare type DynamicPatternSegment = {
+    dynamic: true;
+    pattern: Pattern;
+    patternRe: PatternRe;
+};
+export declare type PatternSection = PatternSegment[];
+export declare type PatternInfo = {
+    /**
+     * Indicates that the pattern has a globstar (more than a single section).
+     */
+    complete: boolean;
+    pattern: Pattern;
+    segments: PatternSegment[];
+    sections: PatternSection[];
+};
+export default abstract class Matcher {
+    private readonly _patterns;
+    private readonly _settings;
+    private readonly _micromatchOptions;
+    protected readonly _storage: PatternInfo[];
+    constructor(_patterns: Pattern[], _settings: Settings, _micromatchOptions: MicromatchOptions);
+    private _fillStorage;
+    private _getPatternSegments;
+    private _splitSegmentsIntoSections;
+}
+export {};
diff --git a/server/node_modules/fast-glob/out/providers/matchers/matcher.js b/server/node_modules/fast-glob/out/providers/matchers/matcher.js
new file mode 100644
index 0000000000000000000000000000000000000000..752d2c2c0445b88411578807211d97c1e6ee1222
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/matchers/matcher.js
@@ -0,0 +1,50 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const utils = require("../../utils");
+class Matcher {
+    constructor(_patterns, _settings, _micromatchOptions) {
+        this._patterns = _patterns;
+        this._settings = _settings;
+        this._micromatchOptions = _micromatchOptions;
+        this._storage = [];
+        this._fillStorage();
+    }
+    _fillStorage() {
+        /**
+         * The original pattern may include `{,*,**,a/*}`, which will lead to problems with matching (unresolved level).
+         * So, before expand patterns with brace expansion into separated patterns.
+         */
+        const patterns = utils.pattern.expandPatternsWithBraceExpansion(this._patterns);
+        for (const pattern of patterns) {
+            const segments = this._getPatternSegments(pattern);
+            const sections = this._splitSegmentsIntoSections(segments);
+            this._storage.push({
+                complete: sections.length <= 1,
+                pattern,
+                segments,
+                sections
+            });
+        }
+    }
+    _getPatternSegments(pattern) {
+        const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);
+        return parts.map((part) => {
+            const dynamic = utils.pattern.isDynamicPattern(part, this._settings);
+            if (!dynamic) {
+                return {
+                    dynamic: false,
+                    pattern: part
+                };
+            }
+            return {
+                dynamic: true,
+                pattern: part,
+                patternRe: utils.pattern.makeRe(part, this._micromatchOptions)
+            };
+        });
+    }
+    _splitSegmentsIntoSections(segments) {
+        return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));
+    }
+}
+exports.default = Matcher;
diff --git a/server/node_modules/fast-glob/out/providers/matchers/partial.d.ts b/server/node_modules/fast-glob/out/providers/matchers/partial.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..91520f64af8d0b7b68284e085da1a28baa2bbb29
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/matchers/partial.d.ts
@@ -0,0 +1,4 @@
+import Matcher from './matcher';
+export default class PartialMatcher extends Matcher {
+    match(filepath: string): boolean;
+}
diff --git a/server/node_modules/fast-glob/out/providers/matchers/partial.js b/server/node_modules/fast-glob/out/providers/matchers/partial.js
new file mode 100644
index 0000000000000000000000000000000000000000..1dfffeb52ec4e4964f19858516cb777bfd4cc74e
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/matchers/partial.js
@@ -0,0 +1,38 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const matcher_1 = require("./matcher");
+class PartialMatcher extends matcher_1.default {
+    match(filepath) {
+        const parts = filepath.split('/');
+        const levels = parts.length;
+        const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);
+        for (const pattern of patterns) {
+            const section = pattern.sections[0];
+            /**
+             * In this case, the pattern has a globstar and we must read all directories unconditionally,
+             * but only if the level has reached the end of the first group.
+             *
+             * fixtures/{a,b}/**
+             *  ^ true/false  ^ always true
+            */
+            if (!pattern.complete && levels > section.length) {
+                return true;
+            }
+            const match = parts.every((part, index) => {
+                const segment = pattern.segments[index];
+                if (segment.dynamic && segment.patternRe.test(part)) {
+                    return true;
+                }
+                if (!segment.dynamic && segment.pattern === part) {
+                    return true;
+                }
+                return false;
+            });
+            if (match) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
+exports.default = PartialMatcher;
diff --git a/server/node_modules/fast-glob/out/providers/provider.d.ts b/server/node_modules/fast-glob/out/providers/provider.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1053460a8470d921689bb8d8bd313a41532cad3c
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/provider.d.ts
@@ -0,0 +1,19 @@
+import { Task } from '../managers/tasks';
+import Settings from '../settings';
+import { MicromatchOptions, ReaderOptions } from '../types';
+import DeepFilter from './filters/deep';
+import EntryFilter from './filters/entry';
+import ErrorFilter from './filters/error';
+import EntryTransformer from './transformers/entry';
+export default abstract class Provider<T> {
+    protected readonly _settings: Settings;
+    readonly errorFilter: ErrorFilter;
+    readonly entryFilter: EntryFilter;
+    readonly deepFilter: DeepFilter;
+    readonly entryTransformer: EntryTransformer;
+    constructor(_settings: Settings);
+    abstract read(_task: Task): T;
+    protected _getRootDirectory(task: Task): string;
+    protected _getReaderOptions(task: Task): ReaderOptions;
+    protected _getMicromatchOptions(): MicromatchOptions;
+}
diff --git a/server/node_modules/fast-glob/out/providers/provider.js b/server/node_modules/fast-glob/out/providers/provider.js
new file mode 100644
index 0000000000000000000000000000000000000000..da88ee02883241702196433f4be0bd98c69ec7b4
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/provider.js
@@ -0,0 +1,48 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const path = require("path");
+const deep_1 = require("./filters/deep");
+const entry_1 = require("./filters/entry");
+const error_1 = require("./filters/error");
+const entry_2 = require("./transformers/entry");
+class Provider {
+    constructor(_settings) {
+        this._settings = _settings;
+        this.errorFilter = new error_1.default(this._settings);
+        this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());
+        this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());
+        this.entryTransformer = new entry_2.default(this._settings);
+    }
+    _getRootDirectory(task) {
+        return path.resolve(this._settings.cwd, task.base);
+    }
+    _getReaderOptions(task) {
+        const basePath = task.base === '.' ? '' : task.base;
+        return {
+            basePath,
+            pathSegmentSeparator: '/',
+            concurrency: this._settings.concurrency,
+            deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),
+            entryFilter: this.entryFilter.getFilter(task.positive, task.negative),
+            errorFilter: this.errorFilter.getFilter(),
+            followSymbolicLinks: this._settings.followSymbolicLinks,
+            fs: this._settings.fs,
+            stats: this._settings.stats,
+            throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,
+            transform: this.entryTransformer.getTransformer()
+        };
+    }
+    _getMicromatchOptions() {
+        return {
+            dot: this._settings.dot,
+            matchBase: this._settings.baseNameMatch,
+            nobrace: !this._settings.braceExpansion,
+            nocase: !this._settings.caseSensitiveMatch,
+            noext: !this._settings.extglob,
+            noglobstar: !this._settings.globstar,
+            posix: true,
+            strictSlashes: false
+        };
+    }
+}
+exports.default = Provider;
diff --git a/server/node_modules/fast-glob/out/providers/stream.d.ts b/server/node_modules/fast-glob/out/providers/stream.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3d02a1f4449f3bcec071fa8fae106b0723350df3
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/stream.d.ts
@@ -0,0 +1,11 @@
+/// <reference types="node" />
+import { Readable } from 'stream';
+import { Task } from '../managers/tasks';
+import ReaderStream from '../readers/stream';
+import { ReaderOptions } from '../types';
+import Provider from './provider';
+export default class ProviderStream extends Provider<Readable> {
+    protected _reader: ReaderStream;
+    read(task: Task): Readable;
+    api(root: string, task: Task, options: ReaderOptions): Readable;
+}
diff --git a/server/node_modules/fast-glob/out/providers/stream.js b/server/node_modules/fast-glob/out/providers/stream.js
new file mode 100644
index 0000000000000000000000000000000000000000..85da62eba8abdbfba02b60b4beccf2648adffff9
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/stream.js
@@ -0,0 +1,31 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const stream_1 = require("stream");
+const stream_2 = require("../readers/stream");
+const provider_1 = require("./provider");
+class ProviderStream extends provider_1.default {
+    constructor() {
+        super(...arguments);
+        this._reader = new stream_2.default(this._settings);
+    }
+    read(task) {
+        const root = this._getRootDirectory(task);
+        const options = this._getReaderOptions(task);
+        const source = this.api(root, task, options);
+        const destination = new stream_1.Readable({ objectMode: true, read: () => { } });
+        source
+            .once('error', (error) => destination.emit('error', error))
+            .on('data', (entry) => destination.emit('data', options.transform(entry)))
+            .once('end', () => destination.emit('end'));
+        destination
+            .once('close', () => source.destroy());
+        return destination;
+    }
+    api(root, task, options) {
+        if (task.dynamic) {
+            return this._reader.dynamic(root, options);
+        }
+        return this._reader.static(task.patterns, options);
+    }
+}
+exports.default = ProviderStream;
diff --git a/server/node_modules/fast-glob/out/providers/sync.d.ts b/server/node_modules/fast-glob/out/providers/sync.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9c0fe1e1162a719cad56da9e595570293e1c7ad0
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/sync.d.ts
@@ -0,0 +1,9 @@
+import { Task } from '../managers/tasks';
+import ReaderSync from '../readers/sync';
+import { Entry, EntryItem, ReaderOptions } from '../types';
+import Provider from './provider';
+export default class ProviderSync extends Provider<EntryItem[]> {
+    protected _reader: ReaderSync;
+    read(task: Task): EntryItem[];
+    api(root: string, task: Task, options: ReaderOptions): Entry[];
+}
diff --git a/server/node_modules/fast-glob/out/providers/sync.js b/server/node_modules/fast-glob/out/providers/sync.js
new file mode 100644
index 0000000000000000000000000000000000000000..d70aa1b1dd311d5096073889048cc0012e09c46a
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/sync.js
@@ -0,0 +1,23 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const sync_1 = require("../readers/sync");
+const provider_1 = require("./provider");
+class ProviderSync extends provider_1.default {
+    constructor() {
+        super(...arguments);
+        this._reader = new sync_1.default(this._settings);
+    }
+    read(task) {
+        const root = this._getRootDirectory(task);
+        const options = this._getReaderOptions(task);
+        const entries = this.api(root, task, options);
+        return entries.map(options.transform);
+    }
+    api(root, task, options) {
+        if (task.dynamic) {
+            return this._reader.dynamic(root, options);
+        }
+        return this._reader.static(task.patterns, options);
+    }
+}
+exports.default = ProviderSync;
diff --git a/server/node_modules/fast-glob/out/providers/transformers/entry.d.ts b/server/node_modules/fast-glob/out/providers/transformers/entry.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e9b85fa7c39f8d09668573fce70fe937ce67966d
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/transformers/entry.d.ts
@@ -0,0 +1,8 @@
+import Settings from '../../settings';
+import { EntryTransformerFunction } from '../../types';
+export default class EntryTransformer {
+    private readonly _settings;
+    constructor(_settings: Settings);
+    getTransformer(): EntryTransformerFunction;
+    private _transform;
+}
diff --git a/server/node_modules/fast-glob/out/providers/transformers/entry.js b/server/node_modules/fast-glob/out/providers/transformers/entry.js
new file mode 100644
index 0000000000000000000000000000000000000000..d11903c8bcb2d8d8d20c789a417efb069b1615a1
--- /dev/null
+++ b/server/node_modules/fast-glob/out/providers/transformers/entry.js
@@ -0,0 +1,26 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const utils = require("../../utils");
+class EntryTransformer {
+    constructor(_settings) {
+        this._settings = _settings;
+    }
+    getTransformer() {
+        return (entry) => this._transform(entry);
+    }
+    _transform(entry) {
+        let filepath = entry.path;
+        if (this._settings.absolute) {
+            filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);
+            filepath = utils.path.unixify(filepath);
+        }
+        if (this._settings.markDirectories && entry.dirent.isDirectory()) {
+            filepath += '/';
+        }
+        if (!this._settings.objectMode) {
+            return filepath;
+        }
+        return Object.assign(Object.assign({}, entry), { path: filepath });
+    }
+}
+exports.default = EntryTransformer;
diff --git a/server/node_modules/fast-glob/out/readers/reader.d.ts b/server/node_modules/fast-glob/out/readers/reader.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2af16b670160a25810ab235d7a61cb962e10478f
--- /dev/null
+++ b/server/node_modules/fast-glob/out/readers/reader.d.ts
@@ -0,0 +1,15 @@
+/// <reference types="node" />
+import * as fs from 'fs';
+import * as fsStat from '@nodelib/fs.stat';
+import Settings from '../settings';
+import { Entry, ErrnoException, Pattern, ReaderOptions } from '../types';
+export default abstract class Reader<T> {
+    protected readonly _settings: Settings;
+    protected readonly _fsStatSettings: fsStat.Settings;
+    constructor(_settings: Settings);
+    abstract dynamic(root: string, options: ReaderOptions): T;
+    abstract static(patterns: Pattern[], options: ReaderOptions): T;
+    protected _getFullEntryPath(filepath: string): string;
+    protected _makeEntry(stats: fs.Stats, pattern: Pattern): Entry;
+    protected _isFatalError(error: ErrnoException): boolean;
+}
diff --git a/server/node_modules/fast-glob/out/readers/reader.js b/server/node_modules/fast-glob/out/readers/reader.js
new file mode 100644
index 0000000000000000000000000000000000000000..7b40255acc74719933c6b476934af93e5bd30fc2
--- /dev/null
+++ b/server/node_modules/fast-glob/out/readers/reader.js
@@ -0,0 +1,33 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const path = require("path");
+const fsStat = require("@nodelib/fs.stat");
+const utils = require("../utils");
+class Reader {
+    constructor(_settings) {
+        this._settings = _settings;
+        this._fsStatSettings = new fsStat.Settings({
+            followSymbolicLink: this._settings.followSymbolicLinks,
+            fs: this._settings.fs,
+            throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks
+        });
+    }
+    _getFullEntryPath(filepath) {
+        return path.resolve(this._settings.cwd, filepath);
+    }
+    _makeEntry(stats, pattern) {
+        const entry = {
+            name: pattern,
+            path: pattern,
+            dirent: utils.fs.createDirentFromStats(pattern, stats)
+        };
+        if (this._settings.stats) {
+            entry.stats = stats;
+        }
+        return entry;
+    }
+    _isFatalError(error) {
+        return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;
+    }
+}
+exports.default = Reader;
diff --git a/server/node_modules/fast-glob/out/readers/stream.d.ts b/server/node_modules/fast-glob/out/readers/stream.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1c74cac6ed36df0309da97f6c88e21e939bd3a25
--- /dev/null
+++ b/server/node_modules/fast-glob/out/readers/stream.d.ts
@@ -0,0 +1,14 @@
+/// <reference types="node" />
+import { Readable } from 'stream';
+import * as fsStat from '@nodelib/fs.stat';
+import * as fsWalk from '@nodelib/fs.walk';
+import { Pattern, ReaderOptions } from '../types';
+import Reader from './reader';
+export default class ReaderStream extends Reader<Readable> {
+    protected _walkStream: typeof fsWalk.walkStream;
+    protected _stat: typeof fsStat.stat;
+    dynamic(root: string, options: ReaderOptions): Readable;
+    static(patterns: Pattern[], options: ReaderOptions): Readable;
+    private _getEntry;
+    private _getStat;
+}
diff --git a/server/node_modules/fast-glob/out/readers/stream.js b/server/node_modules/fast-glob/out/readers/stream.js
new file mode 100644
index 0000000000000000000000000000000000000000..317c6d5dbdcbd016bf58942e3f4d84c9c8a99997
--- /dev/null
+++ b/server/node_modules/fast-glob/out/readers/stream.js
@@ -0,0 +1,55 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const stream_1 = require("stream");
+const fsStat = require("@nodelib/fs.stat");
+const fsWalk = require("@nodelib/fs.walk");
+const reader_1 = require("./reader");
+class ReaderStream extends reader_1.default {
+    constructor() {
+        super(...arguments);
+        this._walkStream = fsWalk.walkStream;
+        this._stat = fsStat.stat;
+    }
+    dynamic(root, options) {
+        return this._walkStream(root, options);
+    }
+    static(patterns, options) {
+        const filepaths = patterns.map(this._getFullEntryPath, this);
+        const stream = new stream_1.PassThrough({ objectMode: true });
+        stream._write = (index, _enc, done) => {
+            return this._getEntry(filepaths[index], patterns[index], options)
+                .then((entry) => {
+                if (entry !== null && options.entryFilter(entry)) {
+                    stream.push(entry);
+                }
+                if (index === filepaths.length - 1) {
+                    stream.end();
+                }
+                done();
+            })
+                .catch(done);
+        };
+        for (let i = 0; i < filepaths.length; i++) {
+            stream.write(i);
+        }
+        return stream;
+    }
+    _getEntry(filepath, pattern, options) {
+        return this._getStat(filepath)
+            .then((stats) => this._makeEntry(stats, pattern))
+            .catch((error) => {
+            if (options.errorFilter(error)) {
+                return null;
+            }
+            throw error;
+        });
+    }
+    _getStat(filepath) {
+        return new Promise((resolve, reject) => {
+            this._stat(filepath, this._fsStatSettings, (error, stats) => {
+                return error === null ? resolve(stats) : reject(error);
+            });
+        });
+    }
+}
+exports.default = ReaderStream;
diff --git a/server/node_modules/fast-glob/out/readers/sync.d.ts b/server/node_modules/fast-glob/out/readers/sync.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c96ffeed33dab4b06f90e6312ea8043d327f83d0
--- /dev/null
+++ b/server/node_modules/fast-glob/out/readers/sync.d.ts
@@ -0,0 +1,12 @@
+import * as fsStat from '@nodelib/fs.stat';
+import * as fsWalk from '@nodelib/fs.walk';
+import { Entry, Pattern, ReaderOptions } from '../types';
+import Reader from './reader';
+export default class ReaderSync extends Reader<Entry[]> {
+    protected _walkSync: typeof fsWalk.walkSync;
+    protected _statSync: typeof fsStat.statSync;
+    dynamic(root: string, options: ReaderOptions): Entry[];
+    static(patterns: Pattern[], options: ReaderOptions): Entry[];
+    private _getEntry;
+    private _getStat;
+}
diff --git a/server/node_modules/fast-glob/out/readers/sync.js b/server/node_modules/fast-glob/out/readers/sync.js
new file mode 100644
index 0000000000000000000000000000000000000000..4704d65d1056ffeef3ed26d8e8977d87ca1a9ada
--- /dev/null
+++ b/server/node_modules/fast-glob/out/readers/sync.js
@@ -0,0 +1,43 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const fsStat = require("@nodelib/fs.stat");
+const fsWalk = require("@nodelib/fs.walk");
+const reader_1 = require("./reader");
+class ReaderSync extends reader_1.default {
+    constructor() {
+        super(...arguments);
+        this._walkSync = fsWalk.walkSync;
+        this._statSync = fsStat.statSync;
+    }
+    dynamic(root, options) {
+        return this._walkSync(root, options);
+    }
+    static(patterns, options) {
+        const entries = [];
+        for (const pattern of patterns) {
+            const filepath = this._getFullEntryPath(pattern);
+            const entry = this._getEntry(filepath, pattern, options);
+            if (entry === null || !options.entryFilter(entry)) {
+                continue;
+            }
+            entries.push(entry);
+        }
+        return entries;
+    }
+    _getEntry(filepath, pattern, options) {
+        try {
+            const stats = this._getStat(filepath);
+            return this._makeEntry(stats, pattern);
+        }
+        catch (error) {
+            if (options.errorFilter(error)) {
+                return null;
+            }
+            throw error;
+        }
+    }
+    _getStat(filepath) {
+        return this._statSync(filepath, this._fsStatSettings);
+    }
+}
+exports.default = ReaderSync;
diff --git a/server/node_modules/fast-glob/out/settings.d.ts b/server/node_modules/fast-glob/out/settings.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1984854fad086eb27d43947d7389c8555c55b2cc
--- /dev/null
+++ b/server/node_modules/fast-glob/out/settings.d.ts
@@ -0,0 +1,164 @@
+import { FileSystemAdapter, Pattern } from './types';
+export declare const DEFAULT_FILE_SYSTEM_ADAPTER: FileSystemAdapter;
+export declare type Options = {
+    /**
+     * Return the absolute path for entries.
+     *
+     * @default false
+     */
+    absolute?: boolean;
+    /**
+     * If set to `true`, then patterns without slashes will be matched against
+     * the basename of the path if it contains slashes.
+     *
+     * @default false
+     */
+    baseNameMatch?: boolean;
+    /**
+     * Enables Bash-like brace expansion.
+     *
+     * @default true
+     */
+    braceExpansion?: boolean;
+    /**
+     * Enables a case-sensitive mode for matching files.
+     *
+     * @default true
+     */
+    caseSensitiveMatch?: boolean;
+    /**
+     * Specifies the maximum number of concurrent requests from a reader to read
+     * directories.
+     *
+     * @default os.cpus().length
+     */
+    concurrency?: number;
+    /**
+     * The current working directory in which to search.
+     *
+     * @default process.cwd()
+     */
+    cwd?: string;
+    /**
+     * Specifies the maximum depth of a read directory relative to the start
+     * directory.
+     *
+     * @default Infinity
+     */
+    deep?: number;
+    /**
+     * Allow patterns to match entries that begin with a period (`.`).
+     *
+     * @default false
+     */
+    dot?: boolean;
+    /**
+     * Enables Bash-like `extglob` functionality.
+     *
+     * @default true
+     */
+    extglob?: boolean;
+    /**
+     * Indicates whether to traverse descendants of symbolic link directories.
+     *
+     * @default true
+     */
+    followSymbolicLinks?: boolean;
+    /**
+     * Custom implementation of methods for working with the file system.
+     *
+     * @default fs.*
+     */
+    fs?: Partial<FileSystemAdapter>;
+    /**
+     * Enables recursively repeats a pattern containing `**`.
+     * If `false`, `**` behaves exactly like `*`.
+     *
+     * @default true
+     */
+    globstar?: boolean;
+    /**
+     * An array of glob patterns to exclude matches.
+     * This is an alternative way to use negative patterns.
+     *
+     * @default []
+     */
+    ignore?: Pattern[];
+    /**
+     * Mark the directory path with the final slash.
+     *
+     * @default false
+     */
+    markDirectories?: boolean;
+    /**
+     * Returns objects (instead of strings) describing entries.
+     *
+     * @default false
+     */
+    objectMode?: boolean;
+    /**
+     * Return only directories.
+     *
+     * @default false
+     */
+    onlyDirectories?: boolean;
+    /**
+     * Return only files.
+     *
+     * @default true
+     */
+    onlyFiles?: boolean;
+    /**
+     * Enables an object mode (`objectMode`) with an additional `stats` field.
+     *
+     * @default false
+     */
+    stats?: boolean;
+    /**
+     * By default this package suppress only `ENOENT` errors.
+     * Set to `true` to suppress any error.
+     *
+     * @default false
+     */
+    suppressErrors?: boolean;
+    /**
+     * Throw an error when symbolic link is broken if `true` or safely
+     * return `lstat` call if `false`.
+     *
+     * @default false
+     */
+    throwErrorOnBrokenSymbolicLink?: boolean;
+    /**
+     * Ensures that the returned entries are unique.
+     *
+     * @default true
+     */
+    unique?: boolean;
+};
+export default class Settings {
+    private readonly _options;
+    readonly absolute: boolean;
+    readonly baseNameMatch: boolean;
+    readonly braceExpansion: boolean;
+    readonly caseSensitiveMatch: boolean;
+    readonly concurrency: number;
+    readonly cwd: string;
+    readonly deep: number;
+    readonly dot: boolean;
+    readonly extglob: boolean;
+    readonly followSymbolicLinks: boolean;
+    readonly fs: FileSystemAdapter;
+    readonly globstar: boolean;
+    readonly ignore: Pattern[];
+    readonly markDirectories: boolean;
+    readonly objectMode: boolean;
+    readonly onlyDirectories: boolean;
+    readonly onlyFiles: boolean;
+    readonly stats: boolean;
+    readonly suppressErrors: boolean;
+    readonly throwErrorOnBrokenSymbolicLink: boolean;
+    readonly unique: boolean;
+    constructor(_options?: Options);
+    private _getValue;
+    private _getFileSystemMethods;
+}
diff --git a/server/node_modules/fast-glob/out/settings.js b/server/node_modules/fast-glob/out/settings.js
new file mode 100644
index 0000000000000000000000000000000000000000..e91f1e8840d28c7476851ec9b1737ebeab1cbf7d
--- /dev/null
+++ b/server/node_modules/fast-glob/out/settings.js
@@ -0,0 +1,53 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;
+const fs = require("fs");
+const os = require("os");
+const CPU_COUNT = os.cpus().length;
+exports.DEFAULT_FILE_SYSTEM_ADAPTER = {
+    lstat: fs.lstat,
+    lstatSync: fs.lstatSync,
+    stat: fs.stat,
+    statSync: fs.statSync,
+    readdir: fs.readdir,
+    readdirSync: fs.readdirSync
+};
+class Settings {
+    constructor(_options = {}) {
+        this._options = _options;
+        this.absolute = this._getValue(this._options.absolute, false);
+        this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);
+        this.braceExpansion = this._getValue(this._options.braceExpansion, true);
+        this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);
+        this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);
+        this.cwd = this._getValue(this._options.cwd, process.cwd());
+        this.deep = this._getValue(this._options.deep, Infinity);
+        this.dot = this._getValue(this._options.dot, false);
+        this.extglob = this._getValue(this._options.extglob, true);
+        this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);
+        this.fs = this._getFileSystemMethods(this._options.fs);
+        this.globstar = this._getValue(this._options.globstar, true);
+        this.ignore = this._getValue(this._options.ignore, []);
+        this.markDirectories = this._getValue(this._options.markDirectories, false);
+        this.objectMode = this._getValue(this._options.objectMode, false);
+        this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);
+        this.onlyFiles = this._getValue(this._options.onlyFiles, true);
+        this.stats = this._getValue(this._options.stats, false);
+        this.suppressErrors = this._getValue(this._options.suppressErrors, false);
+        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);
+        this.unique = this._getValue(this._options.unique, true);
+        if (this.onlyDirectories) {
+            this.onlyFiles = false;
+        }
+        if (this.stats) {
+            this.objectMode = true;
+        }
+    }
+    _getValue(option, value) {
+        return option === undefined ? value : option;
+    }
+    _getFileSystemMethods(methods = {}) {
+        return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);
+    }
+}
+exports.default = Settings;
diff --git a/server/node_modules/fast-glob/out/types/index.d.ts b/server/node_modules/fast-glob/out/types/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..99503997be735b05355406fff99b289f434153dc
--- /dev/null
+++ b/server/node_modules/fast-glob/out/types/index.d.ts
@@ -0,0 +1,31 @@
+/// <reference types="node" />
+import * as fsWalk from '@nodelib/fs.walk';
+export declare type ErrnoException = NodeJS.ErrnoException;
+export declare type Entry = fsWalk.Entry;
+export declare type EntryItem = string | Entry;
+export declare type Pattern = string;
+export declare type PatternRe = RegExp;
+export declare type PatternsGroup = Record<string, Pattern[]>;
+export declare type ReaderOptions = fsWalk.Options & {
+    transform(entry: Entry): EntryItem;
+    deepFilter: DeepFilterFunction;
+    entryFilter: EntryFilterFunction;
+    errorFilter: ErrorFilterFunction;
+    fs: FileSystemAdapter;
+    stats: boolean;
+};
+export declare type ErrorFilterFunction = fsWalk.ErrorFilterFunction;
+export declare type EntryFilterFunction = fsWalk.EntryFilterFunction;
+export declare type DeepFilterFunction = fsWalk.DeepFilterFunction;
+export declare type EntryTransformerFunction = (entry: Entry) => EntryItem;
+export declare type MicromatchOptions = {
+    dot?: boolean;
+    matchBase?: boolean;
+    nobrace?: boolean;
+    nocase?: boolean;
+    noext?: boolean;
+    noglobstar?: boolean;
+    posix?: boolean;
+    strictSlashes?: boolean;
+};
+export declare type FileSystemAdapter = fsWalk.FileSystemAdapter;
diff --git a/server/node_modules/fast-glob/out/types/index.js b/server/node_modules/fast-glob/out/types/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8ad2e549bdc6801e0d1c80b0308d4b9bd4985ce
--- /dev/null
+++ b/server/node_modules/fast-glob/out/types/index.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/server/node_modules/fast-glob/out/utils/array.d.ts b/server/node_modules/fast-glob/out/utils/array.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..98e73250d9130de4dbe70221aefdc66dfd6d7e48
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/array.d.ts
@@ -0,0 +1,2 @@
+export declare function flatten<T>(items: T[][]): T[];
+export declare function splitWhen<T>(items: T[], predicate: (item: T) => boolean): T[][];
diff --git a/server/node_modules/fast-glob/out/utils/array.js b/server/node_modules/fast-glob/out/utils/array.js
new file mode 100644
index 0000000000000000000000000000000000000000..50c406e86199aa67fb8bef73a5014ff246e6f7da
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/array.js
@@ -0,0 +1,22 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.splitWhen = exports.flatten = void 0;
+function flatten(items) {
+    return items.reduce((collection, item) => [].concat(collection, item), []);
+}
+exports.flatten = flatten;
+function splitWhen(items, predicate) {
+    const result = [[]];
+    let groupIndex = 0;
+    for (const item of items) {
+        if (predicate(item)) {
+            groupIndex++;
+            result[groupIndex] = [];
+        }
+        else {
+            result[groupIndex].push(item);
+        }
+    }
+    return result;
+}
+exports.splitWhen = splitWhen;
diff --git a/server/node_modules/fast-glob/out/utils/errno.d.ts b/server/node_modules/fast-glob/out/utils/errno.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1c08d3ba8415e85573c94e98666ae1e1870a5fcc
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/errno.d.ts
@@ -0,0 +1,2 @@
+import { ErrnoException } from '../types';
+export declare function isEnoentCodeError(error: ErrnoException): boolean;
diff --git a/server/node_modules/fast-glob/out/utils/errno.js b/server/node_modules/fast-glob/out/utils/errno.js
new file mode 100644
index 0000000000000000000000000000000000000000..f0bd8015d842601c4de2993a0f5e02c8812f2efa
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/errno.js
@@ -0,0 +1,7 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isEnoentCodeError = void 0;
+function isEnoentCodeError(error) {
+    return error.code === 'ENOENT';
+}
+exports.isEnoentCodeError = isEnoentCodeError;
diff --git a/server/node_modules/fast-glob/out/utils/fs.d.ts b/server/node_modules/fast-glob/out/utils/fs.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..64c61ce6c80a1c91cc82ba9b16abbf8684ef7a4c
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/fs.d.ts
@@ -0,0 +1,4 @@
+/// <reference types="node" />
+import * as fs from 'fs';
+import { Dirent } from '@nodelib/fs.walk';
+export declare function createDirentFromStats(name: string, stats: fs.Stats): Dirent;
diff --git a/server/node_modules/fast-glob/out/utils/fs.js b/server/node_modules/fast-glob/out/utils/fs.js
new file mode 100644
index 0000000000000000000000000000000000000000..ace7c74d63f6da763b2711a4119d6005f5c3b187
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/fs.js
@@ -0,0 +1,19 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createDirentFromStats = void 0;
+class DirentFromStats {
+    constructor(name, stats) {
+        this.name = name;
+        this.isBlockDevice = stats.isBlockDevice.bind(stats);
+        this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
+        this.isDirectory = stats.isDirectory.bind(stats);
+        this.isFIFO = stats.isFIFO.bind(stats);
+        this.isFile = stats.isFile.bind(stats);
+        this.isSocket = stats.isSocket.bind(stats);
+        this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
+    }
+}
+function createDirentFromStats(name, stats) {
+    return new DirentFromStats(name, stats);
+}
+exports.createDirentFromStats = createDirentFromStats;
diff --git a/server/node_modules/fast-glob/out/utils/index.d.ts b/server/node_modules/fast-glob/out/utils/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f634cad0403c53fd94a2296bbcc037fe17a7a3cd
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/index.d.ts
@@ -0,0 +1,8 @@
+import * as array from './array';
+import * as errno from './errno';
+import * as fs from './fs';
+import * as path from './path';
+import * as pattern from './pattern';
+import * as stream from './stream';
+import * as string from './string';
+export { array, errno, fs, path, pattern, stream, string };
diff --git a/server/node_modules/fast-glob/out/utils/index.js b/server/node_modules/fast-glob/out/utils/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..0f92c1667dbb3beb5de48b258756574f29181645
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/index.js
@@ -0,0 +1,17 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;
+const array = require("./array");
+exports.array = array;
+const errno = require("./errno");
+exports.errno = errno;
+const fs = require("./fs");
+exports.fs = fs;
+const path = require("./path");
+exports.path = path;
+const pattern = require("./pattern");
+exports.pattern = pattern;
+const stream = require("./stream");
+exports.stream = stream;
+const string = require("./string");
+exports.string = string;
diff --git a/server/node_modules/fast-glob/out/utils/path.d.ts b/server/node_modules/fast-glob/out/utils/path.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9606d8b7181568ed35bc7216b1e50283bc4d6636
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/path.d.ts
@@ -0,0 +1,8 @@
+import { Pattern } from '../types';
+/**
+ * Designed to work only with simple paths: `dir\\file`.
+ */
+export declare function unixify(filepath: string): string;
+export declare function makeAbsolute(cwd: string, filepath: string): string;
+export declare function escape(pattern: Pattern): Pattern;
+export declare function removeLeadingDotSegment(entry: string): string;
diff --git a/server/node_modules/fast-glob/out/utils/path.js b/server/node_modules/fast-glob/out/utils/path.js
new file mode 100644
index 0000000000000000000000000000000000000000..254403240fd1bcf975bac2e2b97d085e40d9c17c
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/path.js
@@ -0,0 +1,33 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.removeLeadingDotSegment = exports.escape = exports.makeAbsolute = exports.unixify = void 0;
+const path = require("path");
+const LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\
+const UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;
+/**
+ * Designed to work only with simple paths: `dir\\file`.
+ */
+function unixify(filepath) {
+    return filepath.replace(/\\/g, '/');
+}
+exports.unixify = unixify;
+function makeAbsolute(cwd, filepath) {
+    return path.resolve(cwd, filepath);
+}
+exports.makeAbsolute = makeAbsolute;
+function escape(pattern) {
+    return pattern.replace(UNESCAPED_GLOB_SYMBOLS_RE, '\\$2');
+}
+exports.escape = escape;
+function removeLeadingDotSegment(entry) {
+    // We do not use `startsWith` because this is 10x slower than current implementation for some cases.
+    // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with
+    if (entry.charAt(0) === '.') {
+        const secondCharactery = entry.charAt(1);
+        if (secondCharactery === '/' || secondCharactery === '\\') {
+            return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);
+        }
+    }
+    return entry;
+}
+exports.removeLeadingDotSegment = removeLeadingDotSegment;
diff --git a/server/node_modules/fast-glob/out/utils/pattern.d.ts b/server/node_modules/fast-glob/out/utils/pattern.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f910eb7b649c79a51c3290a5d059f3eee663f005
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/pattern.d.ts
@@ -0,0 +1,25 @@
+import { MicromatchOptions, Pattern, PatternRe } from '../types';
+declare type PatternTypeOptions = {
+    braceExpansion?: boolean;
+    caseSensitiveMatch?: boolean;
+    extglob?: boolean;
+};
+export declare function isStaticPattern(pattern: Pattern, options?: PatternTypeOptions): boolean;
+export declare function isDynamicPattern(pattern: Pattern, options?: PatternTypeOptions): boolean;
+export declare function convertToPositivePattern(pattern: Pattern): Pattern;
+export declare function convertToNegativePattern(pattern: Pattern): Pattern;
+export declare function isNegativePattern(pattern: Pattern): boolean;
+export declare function isPositivePattern(pattern: Pattern): boolean;
+export declare function getNegativePatterns(patterns: Pattern[]): Pattern[];
+export declare function getPositivePatterns(patterns: Pattern[]): Pattern[];
+export declare function getBaseDirectory(pattern: Pattern): string;
+export declare function hasGlobStar(pattern: Pattern): boolean;
+export declare function endsWithSlashGlobStar(pattern: Pattern): boolean;
+export declare function isAffectDepthOfReadingPattern(pattern: Pattern): boolean;
+export declare function expandPatternsWithBraceExpansion(patterns: Pattern[]): Pattern[];
+export declare function expandBraceExpansion(pattern: Pattern): Pattern[];
+export declare function getPatternParts(pattern: Pattern, options: MicromatchOptions): Pattern[];
+export declare function makeRe(pattern: Pattern, options: MicromatchOptions): PatternRe;
+export declare function convertPatternsToRe(patterns: Pattern[], options: MicromatchOptions): PatternRe[];
+export declare function matchAny(entry: string, patternsRe: PatternRe[]): boolean;
+export {};
diff --git a/server/node_modules/fast-glob/out/utils/pattern.js b/server/node_modules/fast-glob/out/utils/pattern.js
new file mode 100644
index 0000000000000000000000000000000000000000..b82ccd0c3ec28cdd096fd949e7e5771b8b6d3352
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/pattern.js
@@ -0,0 +1,132 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;
+const path = require("path");
+const globParent = require("glob-parent");
+const micromatch = require("micromatch");
+const picomatch = require("picomatch");
+const GLOBSTAR = '**';
+const ESCAPE_SYMBOL = '\\';
+const COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;
+const REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\[.*]/;
+const REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\(.*\|.*\)/;
+const GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\(.*\)/;
+const BRACE_EXPANSIONS_SYMBOLS_RE = /{.*(?:,|\.\.).*}/;
+function isStaticPattern(pattern, options = {}) {
+    return !isDynamicPattern(pattern, options);
+}
+exports.isStaticPattern = isStaticPattern;
+function isDynamicPattern(pattern, options = {}) {
+    /**
+     * A special case with an empty string is necessary for matching patterns that start with a forward slash.
+     * An empty string cannot be a dynamic pattern.
+     * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.
+     */
+    if (pattern === '') {
+        return false;
+    }
+    /**
+     * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check
+     * filepath directly (without read directory).
+     */
+    if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {
+        return true;
+    }
+    if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {
+        return true;
+    }
+    if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {
+        return true;
+    }
+    if (options.braceExpansion !== false && BRACE_EXPANSIONS_SYMBOLS_RE.test(pattern)) {
+        return true;
+    }
+    return false;
+}
+exports.isDynamicPattern = isDynamicPattern;
+function convertToPositivePattern(pattern) {
+    return isNegativePattern(pattern) ? pattern.slice(1) : pattern;
+}
+exports.convertToPositivePattern = convertToPositivePattern;
+function convertToNegativePattern(pattern) {
+    return '!' + pattern;
+}
+exports.convertToNegativePattern = convertToNegativePattern;
+function isNegativePattern(pattern) {
+    return pattern.startsWith('!') && pattern[1] !== '(';
+}
+exports.isNegativePattern = isNegativePattern;
+function isPositivePattern(pattern) {
+    return !isNegativePattern(pattern);
+}
+exports.isPositivePattern = isPositivePattern;
+function getNegativePatterns(patterns) {
+    return patterns.filter(isNegativePattern);
+}
+exports.getNegativePatterns = getNegativePatterns;
+function getPositivePatterns(patterns) {
+    return patterns.filter(isPositivePattern);
+}
+exports.getPositivePatterns = getPositivePatterns;
+function getBaseDirectory(pattern) {
+    return globParent(pattern, { flipBackslashes: false });
+}
+exports.getBaseDirectory = getBaseDirectory;
+function hasGlobStar(pattern) {
+    return pattern.includes(GLOBSTAR);
+}
+exports.hasGlobStar = hasGlobStar;
+function endsWithSlashGlobStar(pattern) {
+    return pattern.endsWith('/' + GLOBSTAR);
+}
+exports.endsWithSlashGlobStar = endsWithSlashGlobStar;
+function isAffectDepthOfReadingPattern(pattern) {
+    const basename = path.basename(pattern);
+    return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);
+}
+exports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;
+function expandPatternsWithBraceExpansion(patterns) {
+    return patterns.reduce((collection, pattern) => {
+        return collection.concat(expandBraceExpansion(pattern));
+    }, []);
+}
+exports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;
+function expandBraceExpansion(pattern) {
+    return micromatch.braces(pattern, {
+        expand: true,
+        nodupes: true
+    });
+}
+exports.expandBraceExpansion = expandBraceExpansion;
+function getPatternParts(pattern, options) {
+    let { parts } = picomatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));
+    /**
+     * The scan method returns an empty array in some cases.
+     * See micromatch/picomatch#58 for more details.
+     */
+    if (parts.length === 0) {
+        parts = [pattern];
+    }
+    /**
+     * The scan method does not return an empty part for the pattern with a forward slash.
+     * This is another part of micromatch/picomatch#58.
+     */
+    if (parts[0].startsWith('/')) {
+        parts[0] = parts[0].slice(1);
+        parts.unshift('');
+    }
+    return parts;
+}
+exports.getPatternParts = getPatternParts;
+function makeRe(pattern, options) {
+    return micromatch.makeRe(pattern, options);
+}
+exports.makeRe = makeRe;
+function convertPatternsToRe(patterns, options) {
+    return patterns.map((pattern) => makeRe(pattern, options));
+}
+exports.convertPatternsToRe = convertPatternsToRe;
+function matchAny(entry, patternsRe) {
+    return patternsRe.some((patternRe) => patternRe.test(entry));
+}
+exports.matchAny = matchAny;
diff --git a/server/node_modules/fast-glob/out/utils/stream.d.ts b/server/node_modules/fast-glob/out/utils/stream.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..aafacefaf305353fcf34ea7fb43adca90eb7f628
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/stream.d.ts
@@ -0,0 +1,3 @@
+/// <reference types="node" />
+import { Readable } from 'stream';
+export declare function merge(streams: Readable[]): NodeJS.ReadableStream;
diff --git a/server/node_modules/fast-glob/out/utils/stream.js b/server/node_modules/fast-glob/out/utils/stream.js
new file mode 100644
index 0000000000000000000000000000000000000000..b32028ce4b1cecab0576675d3b6d91bf6d2c4042
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/stream.js
@@ -0,0 +1,17 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.merge = void 0;
+const merge2 = require("merge2");
+function merge(streams) {
+    const mergedStream = merge2(streams);
+    streams.forEach((stream) => {
+        stream.once('error', (error) => mergedStream.emit('error', error));
+    });
+    mergedStream.once('close', () => propagateCloseEventToSources(streams));
+    mergedStream.once('end', () => propagateCloseEventToSources(streams));
+    return mergedStream;
+}
+exports.merge = merge;
+function propagateCloseEventToSources(streams) {
+    streams.forEach((stream) => stream.emit('close'));
+}
diff --git a/server/node_modules/fast-glob/out/utils/string.d.ts b/server/node_modules/fast-glob/out/utils/string.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c8847356cd8d1a9442130d8cf63014f487707f66
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/string.d.ts
@@ -0,0 +1,2 @@
+export declare function isString(input: unknown): input is string;
+export declare function isEmpty(input: string): boolean;
diff --git a/server/node_modules/fast-glob/out/utils/string.js b/server/node_modules/fast-glob/out/utils/string.js
new file mode 100644
index 0000000000000000000000000000000000000000..76e7ea54bcb9798b8d935ec79740e61c7337ea3e
--- /dev/null
+++ b/server/node_modules/fast-glob/out/utils/string.js
@@ -0,0 +1,11 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isEmpty = exports.isString = void 0;
+function isString(input) {
+    return typeof input === 'string';
+}
+exports.isString = isString;
+function isEmpty(input) {
+    return input === '';
+}
+exports.isEmpty = isEmpty;
diff --git a/server/node_modules/fast-glob/package.json b/server/node_modules/fast-glob/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..3d9c9897bc1e8d2213f2db98b86901a88d931636
--- /dev/null
+++ b/server/node_modules/fast-glob/package.json
@@ -0,0 +1,120 @@
+{
+  "_from": "fast-glob@^3.1.1",
+  "_id": "fast-glob@3.2.4",
+  "_inBundle": false,
+  "_integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==",
+  "_location": "/fast-glob",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "fast-glob@^3.1.1",
+    "name": "fast-glob",
+    "escapedName": "fast-glob",
+    "rawSpec": "^3.1.1",
+    "saveSpec": null,
+    "fetchSpec": "^3.1.1"
+  },
+  "_requiredBy": [
+    "/globby"
+  ],
+  "_resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz",
+  "_shasum": "d20aefbf99579383e7f3cc66529158c9b98554d3",
+  "_spec": "fast-glob@^3.1.1",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\globby",
+  "author": {
+    "name": "Denis Malinochkin",
+    "url": "https://mrmlnc.com"
+  },
+  "bugs": {
+    "url": "https://github.com/mrmlnc/fast-glob/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@nodelib/fs.stat": "^2.0.2",
+    "@nodelib/fs.walk": "^1.2.3",
+    "glob-parent": "^5.1.0",
+    "merge2": "^1.3.0",
+    "micromatch": "^4.0.2",
+    "picomatch": "^2.2.1"
+  },
+  "deprecated": false,
+  "description": "It's a very fast and efficient glob library for Node.js",
+  "devDependencies": {
+    "@nodelib/fs.macchiato": "^1.0.1",
+    "@types/compute-stdev": "^1.0.0",
+    "@types/easy-table": "^0.0.32",
+    "@types/glob": "^7.1.1",
+    "@types/glob-parent": "^5.1.0",
+    "@types/is-ci": "^2.0.0",
+    "@types/merge2": "^1.1.4",
+    "@types/micromatch": "^4.0.0",
+    "@types/minimist": "^1.2.0",
+    "@types/mocha": "^5.2.7",
+    "@types/node": "^12.7.8",
+    "@types/rimraf": "^2.0.2",
+    "@types/sinon": "^7.5.0",
+    "compute-stdev": "^1.0.0",
+    "easy-table": "^1.1.1",
+    "eslint": "^6.5.1",
+    "eslint-config-mrmlnc": "^1.1.0",
+    "execa": "^2.0.4",
+    "fast-glob": "^3.0.4",
+    "glob": "^7.1.4",
+    "is-ci": "^2.0.0",
+    "log-update": "^4.0.0",
+    "minimist": "^1.2.0",
+    "mocha": "^6.2.1",
+    "rimraf": "^3.0.0",
+    "sinon": "^7.5.0",
+    "tiny-glob": "^0.2.6",
+    "typescript": "^3.6.3"
+  },
+  "engines": {
+    "node": ">=8"
+  },
+  "homepage": "https://github.com/mrmlnc/fast-glob#readme",
+  "keywords": [
+    "glob",
+    "patterns",
+    "fast",
+    "implementation"
+  ],
+  "license": "MIT",
+  "main": "out/index.js",
+  "name": "fast-glob",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/mrmlnc/fast-glob.git"
+  },
+  "scripts": {
+    "bench": "npm run bench-async && npm run bench-stream && npm run bench-sync",
+    "bench-async": "npm run bench-async-flatten && npm run bench-async-deep && npm run bench-async-partial-flatten && npm run bench-async-partial-deep",
+    "bench-async-deep": "node ./out/benchmark --mode async --pattern \"**\"",
+    "bench-async-flatten": "node ./out/benchmark --mode async --pattern \"*\"",
+    "bench-async-partial-deep": "node ./out/benchmark --mode async --pattern \"{fixtures,out}/**\"",
+    "bench-async-partial-flatten": "node ./out/benchmark --mode async --pattern \"{fixtures,out}/{first,second}/*\"",
+    "bench-stream": "npm run bench-stream-flatten && npm run bench-stream-deep && npm run bench-stream-partial-flatten && npm run bench-stream-partial-deep",
+    "bench-stream-deep": "node ./out/benchmark --mode stream --pattern \"**\"",
+    "bench-stream-flatten": "node ./out/benchmark --mode stream --pattern \"*\"",
+    "bench-stream-partial-deep": "node ./out/benchmark --mode stream --pattern \"{fixtures,out}/**\"",
+    "bench-stream-partial-flatten": "node ./out/benchmark --mode stream --pattern \"{fixtures,out}/{first,second}/*\"",
+    "bench-sync": "npm run bench-sync-flatten && npm run bench-sync-deep && npm run bench-sync-partial-flatten && npm run bench-sync-partial-deep",
+    "bench-sync-deep": "node ./out/benchmark --mode sync --pattern \"**\"",
+    "bench-sync-flatten": "node ./out/benchmark --mode sync --pattern \"*\"",
+    "bench-sync-partial-deep": "node ./out/benchmark --mode sync --pattern \"{fixtures,out}/**\"",
+    "bench-sync-partial-flatten": "node ./out/benchmark --mode sync --pattern \"{fixtures,out}/{first,second}/*\"",
+    "build": "npm run clean && npm run compile && npm run lint && npm test",
+    "clean": "rimraf out",
+    "compile": "tsc",
+    "lint": "eslint \"src/**/*.ts\" --cache",
+    "smoke": "mocha \"out/**/*.smoke.js\" -s 0",
+    "smoke:async": "mocha \"out/**/*.smoke.js\" -s 0 --grep \"\\(async\\)\"",
+    "smoke:stream": "mocha \"out/**/*.smoke.js\" -s 0 --grep \"\\(stream\\)\"",
+    "smoke:sync": "mocha \"out/**/*.smoke.js\" -s 0 --grep \"\\(sync\\)\"",
+    "test": "mocha \"out/**/*.spec.js\" -s 0",
+    "watch": "npm run clean && npm run compile -- --sourceMap --watch"
+  },
+  "typings": "out/index.d.ts",
+  "version": "3.2.4"
+}
diff --git a/server/node_modules/fastq/.github/workflows/ci.yml b/server/node_modules/fastq/.github/workflows/ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d9ee23434ce7c7b05183a10ae30b8b3b02ea00d5
--- /dev/null
+++ b/server/node_modules/fastq/.github/workflows/ci.yml
@@ -0,0 +1,50 @@
+name: ci
+
+on: [push, pull_request]
+
+jobs:
+  legacy:
+    runs-on: ubuntu-latest
+
+    strategy:
+      matrix:
+        node-version: ['0.10', '0.12', 4.x, 6.x, 8.x]
+
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Use Node.js
+        uses: actions/setup-node@v1
+        with:
+          node-version: ${{ matrix.node-version }}
+
+      - name: Install
+        run: |
+          npm install --production && npm install tape
+
+      - name: Run tests
+        run: |
+          npm run legacy
+
+  test:
+    runs-on: ubuntu-latest
+
+    strategy:
+      matrix:
+        node-version: [10.x, 12.x, 13.x, 14.x, 15.x]
+
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Use Node.js
+        uses: actions/setup-node@v1
+        with:
+          node-version: ${{ matrix.node-version }}
+
+      - name: Install
+        run: |
+          npm install
+
+      - name: Run tests
+        run: |
+          npm run test
diff --git a/server/node_modules/fastq/LICENSE b/server/node_modules/fastq/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..27c7bb46236e43d5217e02c1b1af452d860ff1e6
--- /dev/null
+++ b/server/node_modules/fastq/LICENSE
@@ -0,0 +1,13 @@
+Copyright (c) 2015-2020, Matteo Collina <matteo.collina@gmail.com>
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/server/node_modules/fastq/README.md b/server/node_modules/fastq/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f9a9b03803e4647dab9eaf4fa00a6f6bdd1c5f6e
--- /dev/null
+++ b/server/node_modules/fastq/README.md
@@ -0,0 +1,207 @@
+# fastq
+
+![ci][ci-url]
+[![npm version][npm-badge]][npm-url]
+[![Dependency Status][david-badge]][david-url]
+
+Fast, in memory work queue.
+
+Benchmarks (1 million tasks):
+
+* setImmediate: 812ms
+* fastq: 854ms
+* async.queue: 1298ms
+* neoAsync.queue: 1249ms
+
+Obtained on node 12.16.1, on a dedicated server.
+
+If you need zero-overhead series function call, check out
+[fastseries](http://npm.im/fastseries). For zero-overhead parallel
+function call, check out [fastparallel](http://npm.im/fastparallel).
+
+[![js-standard-style](https://raw.githubusercontent.com/feross/standard/master/badge.png)](https://github.com/feross/standard)
+
+  * <a href="#install">Installation</a>
+  * <a href="#usage">Usage</a>
+  * <a href="#api">API</a>
+  * <a href="#license">Licence &amp; copyright</a>
+
+## Install
+
+`npm i fastq --save`
+
+## Usage
+
+```js
+'use strict'
+
+var queue = require('fastq')(worker, 1)
+
+queue.push(42, function (err, result) {
+  if (err) { throw err }
+  console.log('the result is', result)
+})
+
+function worker (arg, cb) {
+  cb(null, 42 * 2)
+}
+```
+
+### Setting this
+
+```js
+'use strict'
+
+var that = { hello: 'world' }
+var queue = require('fastq')(that, worker, 1)
+
+queue.push(42, function (err, result) {
+  if (err) { throw err }
+  console.log(this)
+  console.log('the result is', result)
+})
+
+function worker (arg, cb) {
+  console.log(this)
+  cb(null, 42 * 2)
+}
+```
+
+## API
+
+* <a href="#fastqueue"><code>fastqueue()</code></a>
+* <a href="#push"><code>queue#<b>push()</b></code></a>
+* <a href="#unshift"><code>queue#<b>unshift()</b></code></a>
+* <a href="#pause"><code>queue#<b>pause()</b></code></a>
+* <a href="#resume"><code>queue#<b>resume()</b></code></a>
+* <a href="#idle"><code>queue#<b>idle()</b></code></a>
+* <a href="#length"><code>queue#<b>length()</b></code></a>
+* <a href="#getQueue"><code>queue#<b>getQueue()</b></code></a>
+* <a href="#kill"><code>queue#<b>kill()</b></code></a>
+* <a href="#killAndDrain"><code>queue#<b>killAndDrain()</b></code></a>
+* <a href="#error"><code>queue#<b>error()</b></code></a>
+* <a href="#concurrency"><code>queue#<b>concurrency</b></code></a>
+* <a href="#drain"><code>queue#<b>drain</b></code></a>
+* <a href="#empty"><code>queue#<b>empty</b></code></a>
+* <a href="#saturated"><code>queue#<b>saturated</b></code></a>
+
+-------------------------------------------------------
+<a name="fastqueue"></a>
+### fastqueue([that], worker, concurrency)
+
+Creates a new queue.
+
+Arguments:
+
+* `that`, optional context of the `worker` function.
+* `worker`, worker function, it would be called with `that` as `this`,
+  if that is specified.
+* `concurrency`, number of concurrent tasks that could be executed in
+  parallel.
+
+-------------------------------------------------------
+<a name="push"></a>
+### queue.push(task, done)
+
+Add a task at the end of the queue. `done(err, result)` will be called
+when the task was processed.
+
+-------------------------------------------------------
+<a name="unshift"></a>
+### queue.unshift(task, done)
+
+Add a task at the beginning of the queue. `done(err, result)` will be called
+when the task was processed.
+
+-------------------------------------------------------
+<a name="pause"></a>
+### queue.pause()
+
+Pause the processing of tasks. Currently worked tasks are not
+stopped.
+
+-------------------------------------------------------
+<a name="resume"></a>
+### queue.resume()
+
+Resume the processing of tasks.
+
+-------------------------------------------------------
+<a name="idle"></a>
+### queue.idle()
+
+Returns `false` if there are tasks being processed or waiting to be processed.
+`true` otherwise.
+
+-------------------------------------------------------
+<a name="length"></a>
+### queue.length()
+
+Returns the number of tasks waiting to be processed (in the queue).
+
+-------------------------------------------------------
+<a name="getQueue"></a>
+### queue.getQueue()
+
+Returns all the tasks be processed (in the queue). Returns empty array when there are no tasks
+
+-------------------------------------------------------
+<a name="kill"></a>
+### queue.kill()
+
+Removes all tasks waiting to be processed, and reset `drain` to an empty
+function.
+
+-------------------------------------------------------
+<a name="killAndDrain"></a>
+### queue.killAndDrain()
+
+Same than `kill` but the `drain` function will be called before reset to empty.
+
+-------------------------------------------------------
+<a name="error"></a>
+### queue.error(handler)
+
+Set a global error handler. `handler(err, task)` will be called
+when any of the tasks return an error.
+
+-------------------------------------------------------
+<a name="concurrency"></a>
+### queue.concurrency
+
+Property that returns the number of concurrent tasks that could be executed in
+parallel. It can be altered at runtime.
+
+-------------------------------------------------------
+<a name="drain"></a>
+### queue.drain
+
+Function that will be called when the last
+item from the queue has been processed by a worker.
+It can be altered at runtime.
+
+-------------------------------------------------------
+<a name="empty"></a>
+### queue.empty
+
+Function that will be called when the last
+item from the queue has been assigned to a worker.
+It can be altered at runtime.
+
+-------------------------------------------------------
+<a name="saturated"></a>
+### queue.saturated
+
+Function that will be called when the queue hits the concurrency
+limit.
+It can be altered at runtime.
+
+## License
+
+ISC
+
+[ci-url]: https://github.com/mcollina/fastq/workflows/ci/badge.svg
+[npm-badge]: https://badge.fury.io/js/fastq.svg
+[npm-url]: https://badge.fury.io/js/fastq
+[david-badge]: https://david-dm.org/mcollina/fastq.svg
+[david-url]: https://david-dm.org/mcollina/fastq
diff --git a/server/node_modules/fastq/bench.js b/server/node_modules/fastq/bench.js
new file mode 100644
index 0000000000000000000000000000000000000000..931539dff0293a1a18105ce948df06e65df8fc2b
--- /dev/null
+++ b/server/node_modules/fastq/bench.js
@@ -0,0 +1,58 @@
+'use strict'
+
+var max = 1000000
+var fastqueue = require('./')(worker, 1)
+var async = require('async')
+var neo = require('neo-async')
+var asyncqueue = async.queue(worker, 1)
+var neoqueue = neo.queue(worker, 1)
+
+function bench (func, done) {
+  var key = max + '*' + func.name
+  var count = -1
+
+  console.time(key)
+  end()
+
+  function end () {
+    if (++count < max) {
+      func(end)
+    } else {
+      console.timeEnd(key)
+      if (done) {
+        done()
+      }
+    }
+  }
+}
+
+function benchFastQ (done) {
+  fastqueue.push(42, done)
+}
+
+function benchAsyncQueue (done) {
+  asyncqueue.push(42, done)
+}
+
+function benchNeoQueue (done) {
+  neoqueue.push(42, done)
+}
+
+function worker (arg, cb) {
+  setImmediate(cb)
+}
+
+function benchSetImmediate (cb) {
+  worker(42, cb)
+}
+
+function runBench (done) {
+  async.eachSeries([
+    benchSetImmediate,
+    benchFastQ,
+    benchNeoQueue,
+    benchAsyncQueue
+  ], bench, done)
+}
+
+runBench(runBench)
diff --git a/server/node_modules/fastq/example.js b/server/node_modules/fastq/example.js
new file mode 100644
index 0000000000000000000000000000000000000000..4f834c414d9ce3a5e88651fa289cc92e6a8c412f
--- /dev/null
+++ b/server/node_modules/fastq/example.js
@@ -0,0 +1,12 @@
+'use strict'
+
+var queue = require('./')(worker, 1)
+
+queue.push(42, function (err, result) {
+  if (err) { throw err }
+  console.log('the result is', result)
+})
+
+function worker (arg, cb) {
+  cb(null, 42 * 2)
+}
diff --git a/server/node_modules/fastq/index.d.ts b/server/node_modules/fastq/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..31e7b7980f6711a6074d56734fc09e19ac625b25
--- /dev/null
+++ b/server/node_modules/fastq/index.d.ts
@@ -0,0 +1,27 @@
+declare function fastq<C, T = any, R = any>(context: C, worker: fastq.worker<C, T, R>, concurrency: number): fastq.queue<T, R>
+declare function fastq<C, T = any, R = any>(worker: fastq.worker<C, T, R>, concurrency: number): fastq.queue<T, R>
+
+declare namespace fastq {
+  type worker<C, T = any, R = any> = (this: C, task: T, cb: fastq.done<R>) => void
+  type done<R = any> = (err: Error | null, result?: R) => void
+  type errorHandler<T = any> = (err: Error, task: T) => void
+
+  interface queue<T = any, R = any> {
+    push(task: T, done: done<R>): void
+    unshift(task: T, done: done<R>): void
+    pause(): any
+    resume(): any
+    idle(): boolean
+    length(): number
+    getQueue(): T[]
+    kill(): any
+    killAndDrain(): any
+    error(handler: errorHandler): void
+    concurrency: number
+    drain(): any
+    empty: () => void
+    saturated: () => void
+  }
+}
+
+export = fastq
diff --git a/server/node_modules/fastq/package.json b/server/node_modules/fastq/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e080b718eb20e5e05b03676e3d133c9eee6aa854
--- /dev/null
+++ b/server/node_modules/fastq/package.json
@@ -0,0 +1,75 @@
+{
+  "_from": "fastq@^1.6.0",
+  "_id": "fastq@1.10.0",
+  "_inBundle": false,
+  "_integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==",
+  "_location": "/fastq",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "fastq@^1.6.0",
+    "name": "fastq",
+    "escapedName": "fastq",
+    "rawSpec": "^1.6.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.6.0"
+  },
+  "_requiredBy": [
+    "/@nodelib/fs.walk"
+  ],
+  "_resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz",
+  "_shasum": "74dbefccade964932cdf500473ef302719c652bb",
+  "_spec": "fastq@^1.6.0",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\@nodelib\\fs.walk",
+  "author": {
+    "name": "Matteo Collina",
+    "email": "hello@matteocollina.com"
+  },
+  "bugs": {
+    "url": "https://github.com/mcollina/fastq/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "reusify": "^1.0.4"
+  },
+  "deprecated": false,
+  "description": "Fast, in memory work queue",
+  "devDependencies": {
+    "async": "^3.1.0",
+    "neo-async": "^2.6.1",
+    "nyc": "^15.0.0",
+    "pre-commit": "^1.2.2",
+    "snazzy": "^9.0.0",
+    "standard": "^15.0.0",
+    "tape": "^5.0.0",
+    "typescript": "^4.0.2"
+  },
+  "homepage": "https://github.com/mcollina/fastq#readme",
+  "keywords": [
+    "fast",
+    "queue",
+    "async",
+    "worker"
+  ],
+  "license": "ISC",
+  "main": "queue.js",
+  "name": "fastq",
+  "pre-commit": [
+    "test"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/mcollina/fastq.git"
+  },
+  "scripts": {
+    "coverage": "nyc --reporter=html --reporter=cobertura --reporter=text tape test/test.js",
+    "legacy": "tape test/test.js",
+    "lint": "standard --verbose | snazzy",
+    "test": "npm run lint && npm run unit && npm run typescript",
+    "test:report": "npm run lint && npm run unit:report",
+    "typescript": "tsc --project ./test/tsconfig.json",
+    "unit": "nyc --lines 100 --branches 100 --functions 100 --check-coverage --reporter=text tape test/test.js"
+  },
+  "version": "1.10.0"
+}
diff --git a/server/node_modules/fastq/queue.js b/server/node_modules/fastq/queue.js
new file mode 100644
index 0000000000000000000000000000000000000000..b4550df545f6f698b2a9bfb0d5e59435c171a3c7
--- /dev/null
+++ b/server/node_modules/fastq/queue.js
@@ -0,0 +1,203 @@
+'use strict'
+
+var reusify = require('reusify')
+
+function fastqueue (context, worker, concurrency) {
+  if (typeof context === 'function') {
+    concurrency = worker
+    worker = context
+    context = null
+  }
+
+  if (concurrency < 1) {
+    throw new Error('fastqueue concurrency must be greater than 1')
+  }
+
+  var cache = reusify(Task)
+  var queueHead = null
+  var queueTail = null
+  var _running = 0
+  var errorHandler = null
+
+  var self = {
+    push: push,
+    drain: noop,
+    saturated: noop,
+    pause: pause,
+    paused: false,
+    concurrency: concurrency,
+    running: running,
+    resume: resume,
+    idle: idle,
+    length: length,
+    getQueue: getQueue,
+    unshift: unshift,
+    empty: noop,
+    kill: kill,
+    killAndDrain: killAndDrain,
+    error: error
+  }
+
+  return self
+
+  function running () {
+    return _running
+  }
+
+  function pause () {
+    self.paused = true
+  }
+
+  function length () {
+    var current = queueHead
+    var counter = 0
+
+    while (current) {
+      current = current.next
+      counter++
+    }
+
+    return counter
+  }
+
+  function getQueue () {
+    var current = queueHead
+    var tasks = []
+
+    while (current) {
+      tasks.push(current.value)
+      current = current.next
+    }
+
+    return tasks
+  }
+
+  function resume () {
+    if (!self.paused) return
+    self.paused = false
+    for (var i = 0; i < self.concurrency; i++) {
+      _running++
+      release()
+    }
+  }
+
+  function idle () {
+    return _running === 0 && self.length() === 0
+  }
+
+  function push (value, done) {
+    var current = cache.get()
+
+    current.context = context
+    current.release = release
+    current.value = value
+    current.callback = done || noop
+    current.errorHandler = errorHandler
+
+    if (_running === self.concurrency || self.paused) {
+      if (queueTail) {
+        queueTail.next = current
+        queueTail = current
+      } else {
+        queueHead = current
+        queueTail = current
+        self.saturated()
+      }
+    } else {
+      _running++
+      worker.call(context, current.value, current.worked)
+    }
+  }
+
+  function unshift (value, done) {
+    var current = cache.get()
+
+    current.context = context
+    current.release = release
+    current.value = value
+    current.callback = done || noop
+
+    if (_running === self.concurrency || self.paused) {
+      if (queueHead) {
+        current.next = queueHead
+        queueHead = current
+      } else {
+        queueHead = current
+        queueTail = current
+        self.saturated()
+      }
+    } else {
+      _running++
+      worker.call(context, current.value, current.worked)
+    }
+  }
+
+  function release (holder) {
+    if (holder) {
+      cache.release(holder)
+    }
+    var next = queueHead
+    if (next) {
+      if (!self.paused) {
+        if (queueTail === queueHead) {
+          queueTail = null
+        }
+        queueHead = next.next
+        next.next = null
+        worker.call(context, next.value, next.worked)
+        if (queueTail === null) {
+          self.empty()
+        }
+      } else {
+        _running--
+      }
+    } else if (--_running === 0) {
+      self.drain()
+    }
+  }
+
+  function kill () {
+    queueHead = null
+    queueTail = null
+    self.drain = noop
+  }
+
+  function killAndDrain () {
+    queueHead = null
+    queueTail = null
+    self.drain()
+    self.drain = noop
+  }
+
+  function error (handler) {
+    errorHandler = handler
+  }
+}
+
+function noop () {}
+
+function Task () {
+  this.value = null
+  this.callback = noop
+  this.next = null
+  this.release = noop
+  this.context = null
+  this.errorHandler = null
+
+  var self = this
+
+  this.worked = function worked (err, result) {
+    var callback = self.callback
+    var errorHandler = self.errorHandler
+    var val = self.value
+    self.value = null
+    self.callback = noop
+    if (self.errorHandler) {
+      errorHandler(err, val)
+    }
+    callback.call(self.context, err, result)
+    self.release(self)
+  }
+}
+
+module.exports = fastqueue
diff --git a/server/node_modules/fastq/test/example.ts b/server/node_modules/fastq/test/example.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9e29e476c3c5db40eac1d1c2004a6ee4c1e3bb6a
--- /dev/null
+++ b/server/node_modules/fastq/test/example.ts
@@ -0,0 +1,63 @@
+import * as fastq from '../'
+
+// Basic example
+
+const queue = fastq(worker, 1)
+
+queue.push('world', (err, result) => {
+  if (err) throw err
+  console.log('the result is', result)
+})
+
+queue.concurrency
+
+queue.drain()
+
+queue.empty = () => undefined
+
+console.log('the queue tasks are', queue.getQueue())
+
+queue.idle()
+
+queue.kill()
+
+queue.killAndDrain()
+
+queue.length
+
+queue.pause()
+
+queue.resume()
+
+queue.saturated = () => undefined
+
+queue.unshift('world', (err, result) => {
+  if (err) throw err
+  console.log('the result is', result)
+})
+
+function worker(task: any, cb: fastq.done) {
+  cb(null, 'hello ' + task)
+}
+
+// Generics example
+
+interface GenericsContext {
+  base: number;
+}
+
+const genericsQueue = fastq<GenericsContext, number, string>({ base: 6 }, genericsWorker, 1)
+
+genericsQueue.push(7, (err, done) => {
+  if (err) throw err
+  console.log('the result is', done)
+})
+
+genericsQueue.unshift(7, (err, done) => {
+  if (err) throw err
+  console.log('the result is', done)
+})
+
+function genericsWorker(this: GenericsContext, task: number, cb: fastq.done<string>) {
+  cb(null, 'the meaning of life is ' + (this.base * task))
+}
diff --git a/server/node_modules/fastq/test/test.js b/server/node_modules/fastq/test/test.js
new file mode 100644
index 0000000000000000000000000000000000000000..60b1de76c26eacf4276ab6ccbca2daf86f32aacb
--- /dev/null
+++ b/server/node_modules/fastq/test/test.js
@@ -0,0 +1,564 @@
+'use strict'
+
+var test = require('tape')
+var buildQueue = require('../')
+
+test('concurrency', function (t) {
+  t.plan(2)
+  t.throws(buildQueue.bind(null, worker, 0))
+  t.doesNotThrow(buildQueue.bind(null, worker, 1))
+
+  function worker (arg, cb) {
+    cb(null, true)
+  }
+})
+
+test('worker execution', function (t) {
+  t.plan(3)
+
+  var queue = buildQueue(worker, 1)
+
+  queue.push(42, function (err, result) {
+    t.error(err, 'no error')
+    t.equal(result, true, 'result matches')
+  })
+
+  function worker (arg, cb) {
+    t.equal(arg, 42)
+    cb(null, true)
+  }
+})
+
+test('limit', function (t) {
+  t.plan(4)
+
+  var expected = [10, 0]
+  var queue = buildQueue(worker, 1)
+
+  queue.push(10, result)
+  queue.push(0, result)
+
+  function result (err, arg) {
+    t.error(err, 'no error')
+    t.equal(arg, expected.shift(), 'the result matches')
+  }
+
+  function worker (arg, cb) {
+    setTimeout(cb, arg, null, arg)
+  }
+})
+
+test('multiple executions', function (t) {
+  t.plan(15)
+
+  var queue = buildQueue(worker, 1)
+  var toExec = [1, 2, 3, 4, 5]
+  var count = 0
+
+  toExec.forEach(function (task) {
+    queue.push(task, done)
+  })
+
+  function done (err, result) {
+    t.error(err, 'no error')
+    t.equal(result, toExec[count - 1], 'the result matches')
+  }
+
+  function worker (arg, cb) {
+    t.equal(arg, toExec[count], 'arg matches')
+    count++
+    setImmediate(cb, null, arg)
+  }
+})
+
+test('multiple executions, one after another', function (t) {
+  t.plan(15)
+
+  var queue = buildQueue(worker, 1)
+  var toExec = [1, 2, 3, 4, 5]
+  var count = 0
+
+  queue.push(toExec[0], done)
+
+  function done (err, result) {
+    t.error(err, 'no error')
+    t.equal(result, toExec[count - 1], 'the result matches')
+    if (count < toExec.length) {
+      queue.push(toExec[count], done)
+    }
+  }
+
+  function worker (arg, cb) {
+    t.equal(arg, toExec[count], 'arg matches')
+    count++
+    setImmediate(cb, null, arg)
+  }
+})
+
+test('set this', function (t) {
+  t.plan(3)
+
+  var that = {}
+  var queue = buildQueue(that, worker, 1)
+
+  queue.push(42, function (err, result) {
+    t.error(err, 'no error')
+    t.equal(this, that, 'this matches')
+  })
+
+  function worker (arg, cb) {
+    t.equal(this, that, 'this matches')
+    cb(null, true)
+  }
+})
+
+test('drain', function (t) {
+  t.plan(4)
+
+  var queue = buildQueue(worker, 1)
+  var worked = false
+
+  queue.push(42, function (err, result) {
+    t.error(err, 'no error')
+    t.equal(result, true, 'result matches')
+  })
+
+  queue.drain = function () {
+    t.equal(true, worked, 'drained')
+  }
+
+  function worker (arg, cb) {
+    t.equal(arg, 42)
+    worked = true
+    setImmediate(cb, null, true)
+  }
+})
+
+test('pause && resume', function (t) {
+  t.plan(7)
+
+  var queue = buildQueue(worker, 1)
+  var worked = false
+
+  t.notOk(queue.paused, 'it should not be paused')
+
+  queue.pause()
+
+  queue.push(42, function (err, result) {
+    t.error(err, 'no error')
+    t.equal(result, true, 'result matches')
+  })
+
+  t.notOk(worked, 'it should be paused')
+  t.ok(queue.paused, 'it should be paused')
+
+  queue.resume()
+  queue.resume() // second resume is a no-op
+
+  t.notOk(queue.paused, 'it should not be paused')
+
+  function worker (arg, cb) {
+    t.equal(arg, 42)
+    worked = true
+    cb(null, true)
+  }
+})
+
+test('pause in flight && resume', function (t) {
+  t.plan(9)
+
+  var queue = buildQueue(worker, 1)
+  var expected = [42, 24]
+
+  t.notOk(queue.paused, 'it should not be paused')
+
+  queue.push(42, function (err, result) {
+    t.error(err, 'no error')
+    t.equal(result, true, 'result matches')
+    t.ok(queue.paused, 'it should be paused')
+    process.nextTick(function () { queue.resume() })
+  })
+
+  queue.push(24, function (err, result) {
+    t.error(err, 'no error')
+    t.equal(result, true, 'result matches')
+    t.notOk(queue.paused, 'it should not be paused')
+  })
+
+  queue.pause()
+
+  function worker (arg, cb) {
+    t.equal(arg, expected.shift())
+    process.nextTick(function () { cb(null, true) })
+  }
+})
+
+test('altering concurrency', function (t) {
+  t.plan(7)
+
+  var queue = buildQueue(worker, 1)
+  var count = 0
+
+  queue.pause()
+
+  queue.push(24, workDone)
+  queue.push(24, workDone)
+
+  queue.concurrency = 2
+
+  queue.resume()
+
+  t.equal(queue.running(), 2, '2 jobs running')
+
+  function workDone (err, result) {
+    t.error(err, 'no error')
+    t.equal(result, true, 'result matches')
+  }
+
+  function worker (arg, cb) {
+    t.equal(0, count, 'works in parallel')
+    setImmediate(function () {
+      count++
+      cb(null, true)
+    })
+  }
+})
+
+test('idle()', function (t) {
+  t.plan(12)
+
+  var queue = buildQueue(worker, 1)
+
+  t.ok(queue.idle(), 'queue is idle')
+
+  queue.push(42, function (err, result) {
+    t.error(err, 'no error')
+    t.equal(result, true, 'result matches')
+    t.notOk(queue.idle(), 'queue is not idle')
+  })
+
+  queue.push(42, function (err, result) {
+    t.error(err, 'no error')
+    t.equal(result, true, 'result matches')
+    // it will go idle after executing this function
+    setImmediate(function () {
+      t.ok(queue.idle(), 'queue is now idle')
+    })
+  })
+
+  t.notOk(queue.idle(), 'queue is not idle')
+
+  function worker (arg, cb) {
+    t.notOk(queue.idle(), 'queue is not idle')
+    t.equal(arg, 42)
+    setImmediate(cb, null, true)
+  }
+})
+
+test('saturated', function (t) {
+  t.plan(9)
+
+  var queue = buildQueue(worker, 1)
+  var preworked = 0
+  var worked = 0
+
+  queue.saturated = function () {
+    t.pass('saturated')
+    t.equal(preworked, 1, 'started 1 task')
+    t.equal(worked, 0, 'worked zero task')
+  }
+
+  queue.push(42, done)
+  queue.push(42, done)
+
+  function done (err, result) {
+    t.error(err, 'no error')
+    t.equal(result, true, 'result matches')
+  }
+
+  function worker (arg, cb) {
+    t.equal(arg, 42)
+    preworked++
+    setImmediate(function () {
+      worked++
+      cb(null, true)
+    })
+  }
+})
+
+test('length', function (t) {
+  t.plan(7)
+
+  var queue = buildQueue(worker, 1)
+
+  t.equal(queue.length(), 0, 'nothing waiting')
+  queue.push(42, done)
+  t.equal(queue.length(), 0, 'nothing waiting')
+  queue.push(42, done)
+  t.equal(queue.length(), 1, 'one task waiting')
+  queue.push(42, done)
+  t.equal(queue.length(), 2, 'two tasks waiting')
+
+  function done (err, result) {
+    t.error(err, 'no error')
+  }
+
+  function worker (arg, cb) {
+    setImmediate(function () {
+      cb(null, true)
+    })
+  }
+})
+
+test('getQueue', function (t) {
+  t.plan(10)
+
+  var queue = buildQueue(worker, 1)
+
+  t.equal(queue.getQueue().length, 0, 'nothing waiting')
+  queue.push(42, done)
+  t.equal(queue.getQueue().length, 0, 'nothing waiting')
+  queue.push(42, done)
+  t.equal(queue.getQueue().length, 1, 'one task waiting')
+  t.equal(queue.getQueue()[0], 42, 'should be equal')
+  queue.push(43, done)
+  t.equal(queue.getQueue().length, 2, 'two tasks waiting')
+  t.equal(queue.getQueue()[0], 42, 'should be equal')
+  t.equal(queue.getQueue()[1], 43, 'should be equal')
+
+  function done (err, result) {
+    t.error(err, 'no error')
+  }
+
+  function worker (arg, cb) {
+    setImmediate(function () {
+      cb(null, true)
+    })
+  }
+})
+
+test('unshift', function (t) {
+  t.plan(8)
+
+  var queue = buildQueue(worker, 1)
+  var expected = [1, 2, 3, 4]
+
+  queue.push(1, done)
+  queue.push(4, done)
+  queue.unshift(3, done)
+  queue.unshift(2, done)
+
+  function done (err, result) {
+    t.error(err, 'no error')
+  }
+
+  function worker (arg, cb) {
+    t.equal(expected.shift(), arg, 'tasks come in order')
+    setImmediate(function () {
+      cb(null, true)
+    })
+  }
+})
+
+test('unshift && empty', function (t) {
+  t.plan(2)
+
+  var queue = buildQueue(worker, 1)
+  var completed = false
+
+  queue.pause()
+
+  queue.empty = function () {
+    t.notOk(completed, 'the task has not completed yet')
+  }
+
+  queue.unshift(1, done)
+
+  queue.resume()
+
+  function done (err, result) {
+    completed = true
+    t.error(err, 'no error')
+  }
+
+  function worker (arg, cb) {
+    setImmediate(function () {
+      cb(null, true)
+    })
+  }
+})
+
+test('push && empty', function (t) {
+  t.plan(2)
+
+  var queue = buildQueue(worker, 1)
+  var completed = false
+
+  queue.pause()
+
+  queue.empty = function () {
+    t.notOk(completed, 'the task has not completed yet')
+  }
+
+  queue.push(1, done)
+
+  queue.resume()
+
+  function done (err, result) {
+    completed = true
+    t.error(err, 'no error')
+  }
+
+  function worker (arg, cb) {
+    setImmediate(function () {
+      cb(null, true)
+    })
+  }
+})
+
+test('kill', function (t) {
+  t.plan(5)
+
+  var queue = buildQueue(worker, 1)
+  var expected = [1]
+
+  var predrain = queue.drain
+
+  queue.drain = function drain () {
+    t.fail('drain should never be called')
+  }
+
+  queue.push(1, done)
+  queue.push(4, done)
+  queue.unshift(3, done)
+  queue.unshift(2, done)
+  queue.kill()
+
+  function done (err, result) {
+    t.error(err, 'no error')
+    setImmediate(function () {
+      t.equal(queue.length(), 0, 'no queued tasks')
+      t.equal(queue.running(), 0, 'no running tasks')
+      t.equal(queue.drain, predrain, 'drain is back to default')
+    })
+  }
+
+  function worker (arg, cb) {
+    t.equal(expected.shift(), arg, 'tasks come in order')
+    setImmediate(function () {
+      cb(null, true)
+    })
+  }
+})
+
+test('killAndDrain', function (t) {
+  t.plan(6)
+
+  var queue = buildQueue(worker, 1)
+  var expected = [1]
+
+  var predrain = queue.drain
+
+  queue.drain = function drain () {
+    t.pass('drain has been called')
+  }
+
+  queue.push(1, done)
+  queue.push(4, done)
+  queue.unshift(3, done)
+  queue.unshift(2, done)
+  queue.killAndDrain()
+
+  function done (err, result) {
+    t.error(err, 'no error')
+    setImmediate(function () {
+      t.equal(queue.length(), 0, 'no queued tasks')
+      t.equal(queue.running(), 0, 'no running tasks')
+      t.equal(queue.drain, predrain, 'drain is back to default')
+    })
+  }
+
+  function worker (arg, cb) {
+    t.equal(expected.shift(), arg, 'tasks come in order')
+    setImmediate(function () {
+      cb(null, true)
+    })
+  }
+})
+
+test('pause && idle', function (t) {
+  t.plan(11)
+
+  var queue = buildQueue(worker, 1)
+  var worked = false
+
+  t.notOk(queue.paused, 'it should not be paused')
+  t.ok(queue.idle(), 'should be idle')
+
+  queue.pause()
+
+  queue.push(42, function (err, result) {
+    t.error(err, 'no error')
+    t.equal(result, true, 'result matches')
+  })
+
+  t.notOk(worked, 'it should be paused')
+  t.ok(queue.paused, 'it should be paused')
+  t.notOk(queue.idle(), 'should not be idle')
+
+  queue.resume()
+
+  t.notOk(queue.paused, 'it should not be paused')
+  t.notOk(queue.idle(), 'it should not be idle')
+
+  function worker (arg, cb) {
+    t.equal(arg, 42)
+    worked = true
+    process.nextTick(cb.bind(null, null, true))
+    process.nextTick(function () {
+      t.ok(queue.idle(), 'is should be idle')
+    })
+  }
+})
+
+test('push without cb', function (t) {
+  t.plan(1)
+
+  var queue = buildQueue(worker, 1)
+
+  queue.push(42)
+
+  function worker (arg, cb) {
+    t.equal(arg, 42)
+    cb()
+  }
+})
+
+test('unshift without cb', function (t) {
+  t.plan(1)
+
+  var queue = buildQueue(worker, 1)
+
+  queue.unshift(42)
+
+  function worker (arg, cb) {
+    t.equal(arg, 42)
+    cb()
+  }
+})
+
+test('push with worker throwing error', function (t) {
+  t.plan(5)
+  var q = buildQueue(function (task, cb) {
+    cb(new Error('test error'), null)
+  }, 1)
+  q.error(function (err, task) {
+    t.ok(err instanceof Error, 'global error handler should catch the error')
+    t.match(err.message, /test error/, 'error message should be "test error"')
+    t.equal(task, 42, 'The task executed should be passed')
+  })
+  q.push(42, function (err) {
+    t.ok(err instanceof Error, 'push callback should catch the error')
+    t.match(err.message, /test error/, 'error message should be "test error"')
+  })
+})
diff --git a/server/node_modules/fastq/test/tsconfig.json b/server/node_modules/fastq/test/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..66e16e93052a3411133dcc8cc957ba86eb409b8e
--- /dev/null
+++ b/server/node_modules/fastq/test/tsconfig.json
@@ -0,0 +1,11 @@
+{
+  "compilerOptions": {
+    "target": "es6",
+    "module": "commonjs",
+    "noEmit": true,
+    "strict": true
+  },
+  "files": [
+    "./example.ts"
+  ]
+}
diff --git a/server/node_modules/globby/gitignore.js b/server/node_modules/globby/gitignore.js
new file mode 100644
index 0000000000000000000000000000000000000000..6a1a57afd4d39348d188c1af80ce2af8559ca639
--- /dev/null
+++ b/server/node_modules/globby/gitignore.js
@@ -0,0 +1,118 @@
+'use strict';
+const {promisify} = require('util');
+const fs = require('fs');
+const path = require('path');
+const fastGlob = require('fast-glob');
+const gitIgnore = require('ignore');
+const slash = require('slash');
+
+const DEFAULT_IGNORE = [
+	'**/node_modules/**',
+	'**/flow-typed/**',
+	'**/coverage/**',
+	'**/.git'
+];
+
+const readFileP = promisify(fs.readFile);
+
+const mapGitIgnorePatternTo = base => ignore => {
+	if (ignore.startsWith('!')) {
+		return '!' + path.posix.join(base, ignore.slice(1));
+	}
+
+	return path.posix.join(base, ignore);
+};
+
+const parseGitIgnore = (content, options) => {
+	const base = slash(path.relative(options.cwd, path.dirname(options.fileName)));
+
+	return content
+		.split(/\r?\n/)
+		.filter(Boolean)
+		.filter(line => !line.startsWith('#'))
+		.map(mapGitIgnorePatternTo(base));
+};
+
+const reduceIgnore = files => {
+	return files.reduce((ignores, file) => {
+		ignores.add(parseGitIgnore(file.content, {
+			cwd: file.cwd,
+			fileName: file.filePath
+		}));
+		return ignores;
+	}, gitIgnore());
+};
+
+const ensureAbsolutePathForCwd = (cwd, p) => {
+	cwd = slash(cwd);
+	if (path.isAbsolute(p)) {
+		if (p.startsWith(cwd)) {
+			return p;
+		}
+
+		throw new Error(`Path ${p} is not in cwd ${cwd}`);
+	}
+
+	return path.join(cwd, p);
+};
+
+const getIsIgnoredPredecate = (ignores, cwd) => {
+	return p => ignores.ignores(slash(path.relative(cwd, ensureAbsolutePathForCwd(cwd, p))));
+};
+
+const getFile = async (file, cwd) => {
+	const filePath = path.join(cwd, file);
+	const content = await readFileP(filePath, 'utf8');
+
+	return {
+		cwd,
+		filePath,
+		content
+	};
+};
+
+const getFileSync = (file, cwd) => {
+	const filePath = path.join(cwd, file);
+	const content = fs.readFileSync(filePath, 'utf8');
+
+	return {
+		cwd,
+		filePath,
+		content
+	};
+};
+
+const normalizeOptions = ({
+	ignore = [],
+	cwd = slash(process.cwd())
+} = {}) => {
+	return {ignore, cwd};
+};
+
+module.exports = async options => {
+	options = normalizeOptions(options);
+
+	const paths = await fastGlob('**/.gitignore', {
+		ignore: DEFAULT_IGNORE.concat(options.ignore),
+		cwd: options.cwd
+	});
+
+	const files = await Promise.all(paths.map(file => getFile(file, options.cwd)));
+	const ignores = reduceIgnore(files);
+
+	return getIsIgnoredPredecate(ignores, options.cwd);
+};
+
+module.exports.sync = options => {
+	options = normalizeOptions(options);
+
+	const paths = fastGlob.sync('**/.gitignore', {
+		ignore: DEFAULT_IGNORE.concat(options.ignore),
+		cwd: options.cwd
+	});
+
+	const files = paths.map(file => getFileSync(file, options.cwd));
+	const ignores = reduceIgnore(files);
+
+	return getIsIgnoredPredecate(ignores, options.cwd);
+};
diff --git a/server/node_modules/globby/index.d.ts b/server/node_modules/globby/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c40e4fec481ff5fe3c0d981ef3f2393be1f5f262
--- /dev/null
+++ b/server/node_modules/globby/index.d.ts
@@ -0,0 +1,176 @@
+import {Options as FastGlobOptions} from 'fast-glob';
+
+declare namespace globby {
+	type ExpandDirectoriesOption =
+		| boolean
+		| readonly string[]
+		| {files?: readonly string[]; extensions?: readonly string[]};
+
+	interface GlobbyOptions extends FastGlobOptions {
+		/**
+		If set to `true`, `globby` will automatically glob directories for you. If you define an `Array` it will only glob files that matches the patterns inside the `Array`. You can also define an `Object` with `files` and `extensions` like in the example below.
+
+		Note that if you set this option to `false`, you won't get back matched directories unless you set `onlyFiles: false`.
+
+		@default true
+
+		@example
+		```
+		import globby = require('globby');
+
+		(async () => {
+			const paths = await globby('images', {
+				expandDirectories: {
+					files: ['cat', 'unicorn', '*.jpg'],
+					extensions: ['png']
+				}
+			});
+
+			console.log(paths);
+			//=> ['cat.png', 'unicorn.png', 'cow.jpg', 'rainbow.jpg']
+		})();
+		```
+		*/
+		readonly expandDirectories?: ExpandDirectoriesOption;
+
+		/**
+		Respect ignore patterns in `.gitignore` files that apply to the globbed files.
+
+		@default false
+		*/
+		readonly gitignore?: boolean;
+	}
+
+	interface GlobTask {
+		readonly pattern: string;
+		readonly options: globby.GlobbyOptions;
+	}
+
+	interface GitignoreOptions {
+		readonly cwd?: string;
+		readonly ignore?: readonly string[];
+	}
+
+	type FilterFunction = (path: string) => boolean;
+}
+
+interface Gitignore {
+	/**
+	`.gitignore` files matched by the ignore config are not used for the resulting filter function.
+
+	@returns A filter function indicating whether a given path is ignored via a `.gitignore` file.
+
+	@example
+	```
+	import {gitignore} from 'globby';
+
+	(async () => {
+		const isIgnored = await gitignore();
+		console.log(isIgnored('some/file'));
+	})();
+	```
+	*/
+	(options?: globby.GitignoreOptions): Promise<globby.FilterFunction>;
+
+	/**
+	@returns A filter function indicating whether a given path is ignored via a `.gitignore` file.
+	*/
+	sync(options?: globby.GitignoreOptions): globby.FilterFunction;
+}
+
+declare const globby: {
+	/**
+	Find files and directories using glob patterns.
+
+	Note that glob patterns can only contain forward-slashes, not backward-slashes, so if you want to construct a glob pattern from path components, you need to use `path.posix.join()` instead of `path.join()`.
+
+	@param patterns - See the supported [glob patterns](https://github.com/sindresorhus/globby#globbing-patterns).
+	@param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-3) in addition to the ones in this package.
+	@returns The matching paths.
+
+	@example
+	```
+	import globby = require('globby');
+
+	(async () => {
+		const paths = await globby(['*', '!cake']);
+
+		console.log(paths);
+		//=> ['unicorn', 'rainbow']
+	})();
+	```
+	*/
+	(
+		patterns: string | readonly string[],
+		options?: globby.GlobbyOptions
+	): Promise<string[]>;
+
+	/**
+	Find files and directories using glob patterns.
+
+	Note that glob patterns can only contain forward-slashes, not backward-slashes, so if you want to construct a glob pattern from path components, you need to use `path.posix.join()` instead of `path.join()`.
+
+	@param patterns - See the supported [glob patterns](https://github.com/sindresorhus/globby#globbing-patterns).
+	@param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-3) in addition to the ones in this package.
+	@returns The matching paths.
+	*/
+	sync(
+		patterns: string | readonly string[],
+		options?: globby.GlobbyOptions
+	): string[];
+
+	/**
+	Find files and directories using glob patterns.
+
+	Note that glob patterns can only contain forward-slashes, not backward-slashes, so if you want to construct a glob pattern from path components, you need to use `path.posix.join()` instead of `path.join()`.
+
+	@param patterns - See the supported [glob patterns](https://github.com/sindresorhus/globby#globbing-patterns).
+	@param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-3) in addition to the ones in this package.
+	@returns The stream of matching paths.
+
+	@example
+	```
+	import globby = require('globby');
+
+	(async () => {
+		for await (const path of globby.stream('*.tmp')) {
+			console.log(path);
+		}
+	})();
+	```
+	*/
+	stream(
+		patterns: string | readonly string[],
+		options?: globby.GlobbyOptions
+	): NodeJS.ReadableStream;
+
+	/**
+	Note that you should avoid running the same tasks multiple times as they contain a file system cache. Instead, run this method each time to ensure file system changes are taken into consideration.
+
+	@param patterns - See the supported [glob patterns](https://github.com/sindresorhus/globby#globbing-patterns).
+	@param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-3) in addition to the ones in this package.
+	@returns An object in the format `{pattern: string, options: object}`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages.
+	*/
+	generateGlobTasks(
+		patterns: string | readonly string[],
+		options?: globby.GlobbyOptions
+	): globby.GlobTask[];
+
+	/**
+	Note that the options affect the results.
+
+	This function is backed by [`fast-glob`](https://github.com/mrmlnc/fast-glob#isdynamicpatternpattern-options).
+
+	@param patterns - See the supported [glob patterns](https://github.com/sindresorhus/globby#globbing-patterns).
+	@param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-3).
+	@returns Whether there are any special glob characters in the `patterns`.
+	*/
+	hasMagic(
+		patterns: string | readonly string[],
+		options?: FastGlobOptions
+	): boolean;
+
+	readonly gitignore: Gitignore;
+};
+
+export = globby;
diff --git a/server/node_modules/globby/index.js b/server/node_modules/globby/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..35040571189f872f2316990ff7a4665c46adf113
--- /dev/null
+++ b/server/node_modules/globby/index.js
@@ -0,0 +1,177 @@
+'use strict';
+const fs = require('fs');
+const arrayUnion = require('array-union');
+const merge2 = require('merge2');
+const fastGlob = require('fast-glob');
+const dirGlob = require('dir-glob');
+const gitignore = require('./gitignore');
+const {FilterStream, UniqueStream} = require('./stream-utils');
+
+const DEFAULT_FILTER = () => false;
+
+const isNegative = pattern => pattern[0] === '!';
+
+const assertPatternsInput = patterns => {
+	if (!patterns.every(pattern => typeof pattern === 'string')) {
+		throw new TypeError('Patterns must be a string or an array of strings');
+	}
+};
+
+const checkCwdOption = (options = {}) => {
+	if (!options.cwd) {
+		return;
+	}
+
+	let stat;
+	try {
+		stat = fs.statSync(options.cwd);
+	} catch (_) {
+		return;
+	}
+
+	if (!stat.isDirectory()) {
+		throw new Error('The `cwd` option must be a path to a directory');
+	}
+};
+
+const getPathString = p => p.stats instanceof fs.Stats ? p.path : p;
+
+const generateGlobTasks = (patterns, taskOptions) => {
+	patterns = arrayUnion([].concat(patterns));
+	assertPatternsInput(patterns);
+	checkCwdOption(taskOptions);
+
+	const globTasks = [];
+
+	taskOptions = {
+		ignore: [],
+		expandDirectories: true,
+		...taskOptions
+	};
+
+	for (const [index, pattern] of patterns.entries()) {
+		if (isNegative(pattern)) {
+			continue;
+		}
+
+		const ignore = patterns
+			.slice(index)
+			.filter(isNegative)
+			.map(pattern => pattern.slice(1));
+
+		const options = {
+			...taskOptions,
+			ignore: taskOptions.ignore.concat(ignore)
+		};
+
+		globTasks.push({pattern, options});
+	}
+
+	return globTasks;
+};
+
+const globDirs = (task, fn) => {
+	let options = {};
+	if (task.options.cwd) {
+		options.cwd = task.options.cwd;
+	}
+
+	if (Array.isArray(task.options.expandDirectories)) {
+		options = {
+			...options,
+			files: task.options.expandDirectories
+		};
+	} else if (typeof task.options.expandDirectories === 'object') {
+		options = {
+			...options,
+			...task.options.expandDirectories
+		};
+	}
+
+	return fn(task.pattern, options);
+};
+
+const getPattern = (task, fn) => task.options.expandDirectories ? globDirs(task, fn) : [task.pattern];
+
+const getFilterSync = options => {
+	return options && options.gitignore ?
+		gitignore.sync({cwd: options.cwd, ignore: options.ignore}) :
+		DEFAULT_FILTER;
+};
+
+const globToTask = task => glob => {
+	const {options} = task;
+	if (options.ignore && Array.isArray(options.ignore) && options.expandDirectories) {
+		options.ignore = dirGlob.sync(options.ignore);
+	}
+
+	return {
+		pattern: glob,
+		options
+	};
+};
+
+module.exports = async (patterns, options) => {
+	const globTasks = generateGlobTasks(patterns, options);
+
+	const getFilter = async () => {
+		return options && options.gitignore ?
+			gitignore({cwd: options.cwd, ignore: options.ignore}) :
+			DEFAULT_FILTER;
+	};
+
+	const getTasks = async () => {
+		const tasks = await Promise.all(globTasks.map(async task => {
+			const globs = await getPattern(task, dirGlob);
+			return Promise.all(globs.map(globToTask(task)));
+		}));
+
+		return arrayUnion(...tasks);
+	};
+
+	const [filter, tasks] = await Promise.all([getFilter(), getTasks()]);
+	const paths = await Promise.all(tasks.map(task => fastGlob(task.pattern, task.options)));
+
+	return arrayUnion(...paths).filter(path_ => !filter(getPathString(path_)));
+};
+
+module.exports.sync = (patterns, options) => {
+	const globTasks = generateGlobTasks(patterns, options);
+
+	const tasks = globTasks.reduce((tasks, task) => {
+		const newTask = getPattern(task, dirGlob.sync).map(globToTask(task));
+		return tasks.concat(newTask);
+	}, []);
+
+	const filter = getFilterSync(options);
+
+	return tasks.reduce(
+		(matches, task) => arrayUnion(matches, fastGlob.sync(task.pattern, task.options)),
+		[]
+	).filter(path_ => !filter(path_));
+};
+
+module.exports.stream = (patterns, options) => {
+	const globTasks = generateGlobTasks(patterns, options);
+
+	const tasks = globTasks.reduce((tasks, task) => {
+		const newTask = getPattern(task, dirGlob.sync).map(globToTask(task));
+		return tasks.concat(newTask);
+	}, []);
+
+	const filter = getFilterSync(options);
+	const filterStream = new FilterStream(p => !filter(p));
+	const uniqueStream = new UniqueStream();
+
+	return merge2(tasks.map(task => fastGlob.stream(task.pattern, task.options)))
+		.pipe(filterStream)
+		.pipe(uniqueStream);
+};
+
+module.exports.generateGlobTasks = generateGlobTasks;
+
+module.exports.hasMagic = (patterns, options) => []
+	.concat(patterns)
+	.some(pattern => fastGlob.isDynamicPattern(pattern, options));
+
+module.exports.gitignore = gitignore;
diff --git a/server/node_modules/globby/license b/server/node_modules/globby/license
new file mode 100644
index 0000000000000000000000000000000000000000..e7af2f77107d73046421ef56c4684cbfdd3c1e89
--- /dev/null
+++ b/server/node_modules/globby/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/server/node_modules/globby/package.json b/server/node_modules/globby/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..4218b8d46af095d75ed715a21d3331dd062a6884
--- /dev/null
+++ b/server/node_modules/globby/package.json
@@ -0,0 +1,114 @@
+{
+  "_from": "globby@^11.0.1",
+  "_id": "globby@11.0.1",
+  "_inBundle": false,
+  "_integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==",
+  "_location": "/globby",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "globby@^11.0.1",
+    "name": "globby",
+    "escapedName": "globby",
+    "rawSpec": "^11.0.1",
+    "saveSpec": null,
+    "fetchSpec": "^11.0.1"
+  },
+  "_requiredBy": [
+    "/@typescript-eslint/typescript-estree"
+  ],
+  "_resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz",
+  "_shasum": "9a2bf107a068f3ffeabc49ad702c79ede8cfd357",
+  "_spec": "globby@^11.0.1",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\@typescript-eslint\\typescript-estree",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/globby/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "array-union": "^2.1.0",
+    "dir-glob": "^3.0.1",
+    "fast-glob": "^3.1.1",
+    "ignore": "^5.1.4",
+    "merge2": "^1.3.0",
+    "slash": "^3.0.0"
+  },
+  "deprecated": false,
+  "description": "User-friendly glob matching",
+  "devDependencies": {
+    "ava": "^2.1.0",
+    "get-stream": "^5.1.0",
+    "glob-stream": "^6.1.0",
+    "globby": "github:sindresorhus/globby#master",
+    "matcha": "^0.7.0",
+    "rimraf": "^3.0.0",
+    "tsd": "^0.11.0",
+    "xo": "^0.25.3"
+  },
+  "engines": {
+    "node": ">=10"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts",
+    "gitignore.js",
+    "stream-utils.js"
+  ],
+  "funding": "https://github.com/sponsors/sindresorhus",
+  "homepage": "https://github.com/sindresorhus/globby#readme",
+  "keywords": [
+    "all",
+    "array",
+    "directories",
+    "expand",
+    "files",
+    "filesystem",
+    "filter",
+    "find",
+    "fnmatch",
+    "folders",
+    "fs",
+    "glob",
+    "globbing",
+    "globs",
+    "gulpfriendly",
+    "match",
+    "matcher",
+    "minimatch",
+    "multi",
+    "multiple",
+    "paths",
+    "pattern",
+    "patterns",
+    "traverse",
+    "util",
+    "utility",
+    "wildcard",
+    "wildcards",
+    "promise",
+    "gitignore",
+    "git"
+  ],
+  "license": "MIT",
+  "name": "globby",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/globby.git"
+  },
+  "scripts": {
+    "bench": "npm update glob-stream fast-glob && matcha bench.js",
+    "test": "xo && ava && tsd"
+  },
+  "version": "11.0.1",
+  "xo": {
+    "ignores": [
+      "fixtures"
+    ]
+  }
+}
diff --git a/server/node_modules/globby/readme.md b/server/node_modules/globby/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..709e5aa8c8d72ce7876ac5899acf363ee9d89329
--- /dev/null
+++ b/server/node_modules/globby/readme.md
@@ -0,0 +1,170 @@
+# globby [![Build Status](https://travis-ci.org/sindresorhus/globby.svg?branch=master)](https://travis-ci.org/sindresorhus/globby)
+
+> User-friendly glob matching
+
+Based on [`fast-glob`](https://github.com/mrmlnc/fast-glob) but adds a bunch of useful features.
+
+## Features
+
+- Promise API
+- Multiple patterns
+- Negated patterns: `['foo*', '!foobar']`
+- Expands directories: `foo` → `foo/**/*`
+- Supports `.gitignore`
+
+## Install
+
+```
+$ npm install globby
+```
+
+## Usage
+
+```
+├── unicorn
+├── cake
+└── rainbow
+```
+
+```js
+const globby = require('globby');
+
+(async () => {
+	const paths = await globby(['*', '!cake']);
+
+	console.log(paths);
+	//=> ['unicorn', 'rainbow']
+})();
+```
+
+## API
+
+Note that glob patterns can only contain forward-slashes, not backward-slashes, so if you want to construct a glob pattern from path components, you need to use `path.posix.join()` instead of `path.join()`.
+
+### globby(patterns, options?)
+
+Returns a `Promise<string[]>` of matching paths.
+
+#### patterns
+
+Type: `string | string[]`
+
+See supported `minimatch` [patterns](https://github.com/isaacs/minimatch#usage).
+
+#### options
+
+Type: `object`
+
+See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-3) in addition to the ones below.
+
+##### expandDirectories
+
+Type: `boolean | string[] | object`\
+Default: `true`
+
+If set to `true`, `globby` will automatically glob directories for you. If you define an `Array` it will only glob files that matches the patterns inside the `Array`. You can also define an `object` with `files` and `extensions` like below:
+
+```js
+const globby = require('globby');
+
+(async () => {
+	const paths = await globby('images', {
+		expandDirectories: {
+			files: ['cat', 'unicorn', '*.jpg'],
+			extensions: ['png']
+		}
+	});
+
+	console.log(paths);
+	//=> ['cat.png', 'unicorn.png', 'cow.jpg', 'rainbow.jpg']
+})();
+```
+
+Note that if you set this option to `false`, you won't get back matched directories unless you set `onlyFiles: false`.
+
+##### gitignore
+
+Type: `boolean`\
+Default: `false`
+
+Respect ignore patterns in `.gitignore` files that apply to the globbed files.
+
+### globby.sync(patterns, options?)
+
+Returns `string[]` of matching paths.
+
+### globby.stream(patterns, options?)
+
+Returns a [`stream.Readable`](https://nodejs.org/api/stream.html#stream_readable_streams) of matching paths.
+
+Since Node.js 10, [readable streams are iterable](https://nodejs.org/api/stream.html#stream_readable_symbol_asynciterator), so you can loop over glob matches in a [`for await...of` loop](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of) like this:
+
+```js
+const globby = require('globby');
+
+(async () => {
+	for await (const path of globby.stream('*.tmp')) {
+		console.log(path);
+	}
+})();
+```
+
+### globby.generateGlobTasks(patterns, options?)
+
+Returns an `object[]` in the format `{pattern: string, options: Object}`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages.
+
+Note that you should avoid running the same tasks multiple times as they contain a file system cache. Instead, run this method each time to ensure file system changes are taken into consideration.
+
+### globby.hasMagic(patterns, options?)
+
+Returns a `boolean` of whether there are any special glob characters in the `patterns`.
+
+Note that the options affect the results.
+
+This function is backed by [`fast-glob`](https://github.com/mrmlnc/fast-glob#isdynamicpatternpattern-options).
+
+### globby.gitignore(options?)
+
+Returns a `Promise<(path: string) => boolean>` indicating whether a given path is ignored via a `.gitignore` file.
+
+Takes `cwd?: string` and `ignore?: string[]` as options. `.gitignore` files matched by the ignore config are not used for the resulting filter function.
+
+```js
+const {gitignore} = require('globby');
+
+(async () => {
+	const isIgnored = await gitignore();
+	console.log(isIgnored('some/file'));
+})();
+```
+
+### globby.gitignore.sync(options?)
+
+Returns a `(path: string) => boolean` indicating whether a given path is ignored via a `.gitignore` file.
+
+Takes the same options as `globby.gitignore`.
+
+## Globbing patterns
+
+Just a quick overview.
+
+- `*` matches any number of characters, but not `/`
+- `?` matches a single character, but not `/`
+- `**` matches any number of characters, including `/`, as long as it's the only thing in a path part
+- `{}` allows for a comma-separated list of "or" expressions
+- `!` at the beginning of a pattern will negate the match
+
+[Various patterns and expected matches.](https://github.com/sindresorhus/multimatch/blob/master/test/test.js)
+
+## globby for enterprise
+
+Available as part of the Tidelift Subscription.
+
+The maintainers of globby and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-globby?utm_source=npm-globby&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
+
+## Related
+
+- [multimatch](https://github.com/sindresorhus/multimatch) - Match against a list instead of the filesystem
+- [matcher](https://github.com/sindresorhus/matcher) - Simple wildcard matching
+- [del](https://github.com/sindresorhus/del) - Delete files and directories
+- [make-dir](https://github.com/sindresorhus/make-dir) - Make a directory and its parents if needed
diff --git a/server/node_modules/globby/stream-utils.js b/server/node_modules/globby/stream-utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..98aedc896fd281076600ccd39409328a45447260
--- /dev/null
+++ b/server/node_modules/globby/stream-utils.js
@@ -0,0 +1,46 @@
+'use strict';
+const {Transform} = require('stream');
+
+class ObjectTransform extends Transform {
+	constructor() {
+		super({
+			objectMode: true
+		});
+	}
+}
+
+class FilterStream extends ObjectTransform {
+	constructor(filter) {
+		super();
+		this._filter = filter;
+	}
+
+	_transform(data, encoding, callback) {
+		if (this._filter(data)) {
+			this.push(data);
+		}
+
+		callback();
+	}
+}
+
+class UniqueStream extends ObjectTransform {
+	constructor() {
+		super();
+		this._pushed = new Set();
+	}
+
+	_transform(data, encoding, callback) {
+		if (!this._pushed.has(data)) {
+			this.push(data);
+			this._pushed.add(data);
+		}
+
+		callback();
+	}
+}
+
+module.exports = {
+	FilterStream,
+	UniqueStream
+};
diff --git a/server/node_modules/ignore/CHANGELOG.md b/server/node_modules/ignore/CHANGELOG.md
index 2b250132c08c4d9e60d432e6334ab1246692b5f4..dc38d633aa2dddca6d10336d104a9fbb721c5582 100644
--- a/server/node_modules/ignore/CHANGELOG.md
+++ b/server/node_modules/ignore/CHANGELOG.md
@@ -1,19 +1,32 @@
-# `node-ignore` 4 ChangeLog
+# `node-ignore` 5 ChangeLog
+
+# 5.x
+
+## 2018-08-14, Version 5.0.1
+
+- **PATCH**: fixes for windows.
+- **PATCH**: improves tests for typescript and windows.
+
+## 2018-08-13, Version 5.0.0
+
+- **SEMVER-MAJOR**: [#20](https://github.com/kaelzhang/node-ignore/issues/20): it will throw if an invalid pathname passes into `.ignores(pathname)`, see [Upgrade 4.x -> 5.x](https://github.com/kaelzhang/node-ignore#upgrade-4x---5x).
+- **FEATURE**: [#31](https://github.com/kaelzhang/node-ignore/issues/31): adds a new method [`.test(pathname)`](https://github.com/kaelzhang/node-ignore#testpathname-pathname-since-500).
+- **BENCHMARK**: improves performance by 26%.
 
 # 4.x
 
-## 2018-06-22, Version 4.0.0
+## 2018-08-12, Version 4.0.6
 
-- **SEMVER-MAJOR**: Drop support for node < 6 by default.
-- **FEATURE**: supports the missing character ranges and sets, such as `*.[a-z]` and `*.[jJ][pP][gG]`
-- **FEATURE**: new option: `ignorecase` to make `ignore` case sensitive.
-- **FEATURE**: supports question mark which matches a single character.
-- **PATCH**: fixes typescript declaration.
+- **PATCH**: `Object.prototype` methods will not ruin the result any more.
 
 ## ~ 2018-08-09, Version 4.0.1 - 4.0.5
 
 - **PATCH**: updates README.md about frequent asked quesions from github issues.
 
-## 2018-08-12, Version 4.0.6
+## 2018-06-22, Version 4.0.0
 
-- **PATCH**: `Object.prototype` methods will not ruin the result any more.
+- **SEMVER-MAJOR**: Drop support for node < 6 by default.
+- **FEATURE**: supports the missing character ranges and sets, such as `*.[a-z]` and `*.[jJ][pP][gG]`
+- **FEATURE**: new option: `ignorecase` to make `ignore` case insensitive.
+- **FEATURE**: supports question mark which matches a single character.
+- **PATCH**: fixes typescript declaration.
diff --git a/server/node_modules/ignore/README.md b/server/node_modules/ignore/README.md
index c4d8230ccbe5c317105fa115ffd61ec45b45e759..4bdac9da33aa20aadc45dc384d22a73213e9f551 100644
--- a/server/node_modules/ignore/README.md
+++ b/server/node_modules/ignore/README.md
@@ -35,11 +35,19 @@
 
 # ignore
 
-`ignore` is a manager, filter and parser which implemented in pure JavaScript according to the .gitignore [spec](http://git-scm.com/docs/gitignore).
+`ignore` is a manager, filter and parser which implemented in pure JavaScript according to the [.gitignore spec 2.22.1](http://git-scm.com/docs/gitignore).
 
-Pay attention that [`minimatch`](https://www.npmjs.org/package/minimatch) does not work in the gitignore way. To filter filenames according to .gitignore file, I recommend this module.
+`ignore` is used by eslint, gitbook and [many others](https://www.npmjs.com/browse/depended/ignore).
 
-##### Tested on
+Pay **ATTENTION** that [`minimatch`](https://www.npmjs.org/package/minimatch) (which used by `fstream-ignore`) does not follow the gitignore spec.
+
+To filter filenames according to a .gitignore file, I recommend this npm package, `ignore`.
+
+To parse an `.npmignore` file, you should use `minimatch`, because an `.npmignore` file is parsed by npm using `minimatch` and it does not work in the .gitignore way.
+
+### Tested on
+
+`ignore` is fully tested, and has more than **five hundreds** of unit tests.
 
 - Linux + Node: `0.8` - `7.x`
 - Windows + Node: `0.10` - `7.x`, node < `0.10` is not tested due to the lack of support of appveyor.
@@ -52,10 +60,15 @@ Since `4.0.0`, ignore will no longer support `node < 6` by default, to use in no
 
 - [Usage](#usage)
 - [`Pathname` Conventions](#pathname-conventions)
-- [Guide for 2.x -> 3.x](#upgrade-2x---3x)
-- [Guide for 3.x -> 4.x](#upgrade-3x---4x)
 - See Also:
   - [`glob-gitignore`](https://www.npmjs.com/package/glob-gitignore) matches files using patterns and filters them according to gitignore rules.
+- [Upgrade Guide](#upgrade-guide)
+
+## Install
+
+```sh
+npm i ignore
+```
 
 ## Usage
 
@@ -152,7 +165,7 @@ if (fs.existsSync(filename)) {
 
 instead.
 
-## .filter(paths: Array<Pathname>): Array<Pathname>
+## .filter(paths: Array&lt;Pathname&gt;): Array&lt;Pathname&gt;
 
 ```ts
 type Pathname = string
@@ -166,13 +179,13 @@ Filters the given array of pathnames, and returns the filtered array.
 
 #### 1. `Pathname` should be a `path.relative()`d pathname
 
-`Pathname` should be a string that have been `path.join()`ed, or the return value of `path.relative()` to the current directory.
+`Pathname` should be a string that have been `path.join()`ed, or the return value of `path.relative()` to the current directory,
 
 ```js
-// WRONG
+// WRONG, an error will be thrown
 ig.ignores('./abc')
 
-// WRONG, for it will never happen.
+// WRONG, for it will never happen, and an error will be thrown
 // If the gitignore rule locates at the root directory,
 // `'/abc'` should be changed to `'abc'`.
 // ```
@@ -180,6 +193,9 @@ ig.ignores('./abc')
 // ```
 ig.ignores('/abc')
 
+// WRONG, that it is an absolute path on Windows, an error will be thrown
+ig.ignores('C:\\abc')
+
 // Right
 ig.ignores('abc')
 
@@ -212,6 +228,26 @@ Then the `paths` might be like this:
 ]
 ```
 
+#### 2. filenames and dirnames
+
+`node-ignore` does NO `fs.stat` during path matching, so for the example below:
+
+```js
+// First, we add a ignore pattern to ignore a directory
+ig.add('config/')
+
+// `ig` does NOT know if 'config', in the real world,
+//   is a normal file, directory or something.
+
+ig.ignores('config')
+// `ig` treats `config` as a file, so it returns `false`
+
+ig.ignores('config/')
+// returns `true`
+```
+
+Specially for people who develop some library based on `node-ignore`, it is important to understand that.
+
 Usually, you could use [`glob`](http://npmjs.org/package/glob) with `option.mark = true` to fetch the structure of the current directory:
 
 ```js
@@ -230,21 +266,6 @@ glob('**', {
 })
 ```
 
-#### 2. filenames and dirnames
-
-`node-ignore` does NO `fs.stat` during path matching, so for the example below:
-
-```js
-ig.add('config/')
-
-// `ig` does NOT know if 'config' is a normal file, directory or something
-ig.ignores('config')    // And it returns `false`
-
-ig.ignores('config/')   // returns `true`
-```
-
-Specially for people who develop some library based on `node-ignore`, it is important to understand that.
-
 ## .ignores(pathname: Pathname): boolean
 
 > new in 3.2.0
@@ -261,9 +282,25 @@ Creates a filter function which could filter an array of paths with `Array.proto
 
 Returns `function(path)` the filter function.
 
+## .test(pathname: Pathname) since 5.0.0
+
+Returns `TestResult`
+
+```ts
+interface TestResult {
+  ignored: boolean
+  // true if the `pathname` is finally unignored by some negative pattern
+  unignored: boolean
+}
+```
+
+- `{ignored: true, unignored: false}`: the `pathname` is ignored
+- `{ignored: false, unignored: true}`: the `pathname` is unignored
+- `{ignored: false, unignored: false}`: the `pathname` is never matched by any ignore rules.
+
 ## `options.ignorecase` since 4.0.0
 
-Similar as the `core.ignorecase` option of [git-config](https://git-scm.com/docs/git-config), `node-ignore` will be case insensitive if `options.ignorecase` is set to `true` (default value), otherwise case sensitive.
+Similar as the `core.ignorecase` option of [git-config](https://git-scm.com/docs/git-config), `node-ignore` will be case insensitive if `options.ignorecase` is set to `true` (the default value), otherwise case sensitive.
 
 ```js
 const ig = ignore({
@@ -275,15 +312,57 @@ ig.add('*.png')
 ig.ignores('*.PNG')  // false
 ```
 
+## static `ignore.isPathValid(pathname): boolean` since 5.0.0
+
+Check whether the `pathname` is an valid `path.relative()`d path according to the [convention](#1-pathname-should-be-a-pathrelatived-pathname).
+
+This method is **NOT** used to check if an ignore pattern is valid.
+
+```js
+ignore.isPathValid('./foo')  // false
+```
+
 ****
 
 # Upgrade Guide
 
-## Upgrade 2.x -> 3.x
+## Upgrade 4.x -> 5.x
 
-- All `options` of 2.x are unnecessary and removed, so just remove them.
-- `ignore()` instance is no longer an [`EventEmitter`](nodejs.org/api/events.html), and all events are unnecessary and removed.
-- `.addIgnoreFile()` is removed, see the [.addIgnoreFile](#addignorefilepath) section for details.
+Since `5.0.0`, if an invalid `Pathname` passed into `ig.ignores()`, an error will be thrown, while `ignore < 5.0.0` did not make sure what the return value was, as well as
+
+```ts
+.ignores(pathname: Pathname): boolean
+
+.filter(pathnames: Array<Pathname>): Array<Pathname>
+
+.createFilter(): (pathname: Pathname) => boolean
+
+.test(pathname: Pathname): {ignored: boolean, unignored: boolean}
+```
+
+See the convention [here](#1-pathname-should-be-a-pathrelatived-pathname) for details.
+
+If there are invalid pathnames, the conversion and filtration should be done by users.
+
+```js
+import {isPathValid} from 'ignore' // introduced in 5.0.0
+
+const paths = [
+  // invalid
+  //////////////////
+  '',
+  false,
+  '../foo',
+  '.',
+  //////////////////
+
+  // valid
+  'foo'
+]
+.filter(isValidPath)
+
+ig.filter(paths)
+```
 
 ## Upgrade 3.x -> 4.x
 
@@ -293,6 +372,12 @@ Since `4.0.0`, `ignore` will no longer support node < 6, to use `ignore` in node
 var ignore = require('ignore/legacy')
 ```
 
+## Upgrade 2.x -> 3.x
+
+- All `options` of 2.x are unnecessary and removed, so just remove them.
+- `ignore()` instance is no longer an [`EventEmitter`](nodejs.org/api/events.html), and all events are unnecessary and removed.
+- `.addIgnoreFile()` is removed, see the [.addIgnoreFile](#addignorefilepath) section for details.
+
 ****
 
 # Collaborators
diff --git a/server/node_modules/ignore/index.d.ts b/server/node_modules/ignore/index.d.ts
index be9d5f8eacd18a43f53948f7fc76ef7862a3f90f..66657af5e71c3bd01ff3a30b6d70a373466a2f1d 100644
--- a/server/node_modules/ignore/index.d.ts
+++ b/server/node_modules/ignore/index.d.ts
@@ -1,16 +1,23 @@
-interface Ignore {
+type Pathname = string
+
+interface TestResult {
+  ignored: boolean
+  unignored: boolean
+}
+
+export interface Ignore {
   /**
    * Adds a rule rules to the current manager.
    * @param  {string | Ignore} pattern
    * @returns IgnoreBase
    */
-  add(pattern: string | Ignore): Ignore
+  add(pattern: string | Ignore): this
   /**
    * Adds several rules to the current manager.
    * @param  {string[]} patterns
    * @returns IgnoreBase
    */
-  add(patterns: (string | Ignore)[]): Ignore
+  add(patterns: (string | Ignore)[]): this
 
   /**
    * Filters the given array of pathnames, and returns the filtered array.
@@ -18,19 +25,26 @@ interface Ignore {
    * @param paths the array of paths to be filtered.
    * @returns The filtered array of paths
    */
-  filter(paths: string[]): string[]
+  filter(pathnames: Pathname[]): Pathname[]
   /**
    * Creates a filter function which could filter
    * an array of paths with Array.prototype.filter.
    */
-  createFilter(): (path: string) => boolean
+  createFilter(): (pathname: Pathname) => boolean
 
   /**
    * Returns Boolean whether pathname should be ignored.
    * @param  {string} pathname a path to check
    * @returns boolean
    */
-  ignores(pathname: string): boolean
+  ignores(pathname: Pathname): boolean
+
+  /**
+   * Returns whether pathname should be ignored or unignored
+   * @param  {string} pathname a path to check
+   * @returns TestResult
+   */
+  test(pathname: Pathname): TestResult
 }
 
 interface Options {
@@ -42,4 +56,8 @@ interface Options {
  */
 declare function ignore(options?: Options): Ignore
 
+declare namespace ignore {
+  export function isPathValid (pathname: string): boolean
+}
+
 export default ignore
diff --git a/server/node_modules/ignore/index.js b/server/node_modules/ignore/index.js
index 62c5cf71ec2809f5bc92121eba5ea1ee38257de2..9dcee20d94ba9c029a0abafa0c3aaa69cb83401b 100644
--- a/server/node_modules/ignore/index.js
+++ b/server/node_modules/ignore/index.js
@@ -1,13 +1,24 @@
 // A simple implementation of make-array
-function make_array (subject) {
+function makeArray (subject) {
   return Array.isArray(subject)
     ? subject
     : [subject]
 }
 
-const REGEX_BLANK_LINE = /^\s+$/
-const REGEX_LEADING_EXCAPED_EXCLAMATION = /^\\!/
-const REGEX_LEADING_EXCAPED_HASH = /^\\#/
+const EMPTY = ''
+const SPACE = ' '
+const ESCAPE = '\\'
+const REGEX_TEST_BLANK_LINE = /^\s+$/
+const REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/
+const REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/
+const REGEX_SPLITALL_CRLF = /\r?\n/g
+// /foo,
+// ./foo,
+// ../foo,
+// .
+// ..
+const REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/
+
 const SLASH = '/'
 const KEY_IGNORE = typeof Symbol !== 'undefined'
   ? Symbol.for('node-ignore')
@@ -27,9 +38,15 @@ const sanitizeRange = range => range.replace(
     ? match
     // Invalid range (out of order) which is ok for gitignore rules but
     //   fatal for JavaScript regular expression, so eliminate it.
-    : ''
+    : EMPTY
 )
 
+// See fixtures #59
+const cleanRangeBackSlash = slashes => {
+  const {length} = slashes
+  return slashes.slice(0, length - length % 2)
+}
+
 // > If the pattern ends with a slash,
 // > it is removed for the purpose of the following description,
 // > but it would only find a match with a directory.
@@ -41,7 +58,7 @@ const sanitizeRange = range => range.replace(
 //      you could use option `mark: true` with `glob`
 
 // '`foo/`' should not continue with the '`..`'
-const DEFAULT_REPLACER_PREFIX = [
+const REPLACERS = [
 
   // > Trailing spaces are ignored unless they are quoted with backslash ("\")
   [
@@ -50,14 +67,14 @@ const DEFAULT_REPLACER_PREFIX = [
     // (a \ ) -> (a  )
     /\\?\s+$/,
     match => match.indexOf('\\') === 0
-      ? ' '
-      : ''
+      ? SPACE
+      : EMPTY
   ],
 
   // replace (\ ) with ' '
   [
     /\\\s/g,
-    () => ' '
+    () => SPACE
   ],
 
   // Escape metacharacters
@@ -78,19 +95,10 @@ const DEFAULT_REPLACER_PREFIX = [
   // > - the opening curly brace {,
   // > These special characters are often called "metacharacters".
   [
-    /[\\^$.|*+(){]/g,
+    /[\\$.|*+(){^]/g,
     match => `\\${match}`
   ],
 
-  [
-    // > [abc] matches any character inside the brackets
-    // >    (in this case a, b, or c);
-    /\[([^\]/]*)($|\])/g,
-    (match, p1, p2) => p2 === ']'
-      ? `[${sanitizeRange(p1)}]`
-      : `\\${match}`
-  ],
-
   [
     // > a question mark (?) matches a single character
     /(?!\\)\?/g,
@@ -124,10 +132,8 @@ const DEFAULT_REPLACER_PREFIX = [
 
     // '**/foo' <-> 'foo'
     () => '^(?:.*\\/)?'
-  ]
-]
+  ],
 
-const DEFAULT_REPLACER_SUFFIX = [
   // starting
   [
     // there will be no leading '/'
@@ -135,11 +141,20 @@ const DEFAULT_REPLACER_SUFFIX = [
     // If starts with '**', adding a '^' to the regular expression also works
     /^(?=[^^])/,
     function startingReplacer () {
+      // If has a slash `/` at the beginning or middle
       return !/\/(?!$)/.test(this)
+        // > Prior to 2.22.1
         // > If the pattern does not contain a slash /,
         // >   Git treats it as a shell glob pattern
         // Actually, if there is only a trailing slash,
         //   git also treats it as a shell glob pattern
+
+        // After 2.22.1 (compatible but clearer)
+        // > If there is a separator at the beginning or middle (or both)
+        // > of the pattern, then the pattern is relative to the directory
+        // > level of the particular .gitignore file itself.
+        // > Otherwise the pattern may also match at any level below
+        // > the .gitignore level.
         ? '(?:^|\\/)'
 
         // > Otherwise, Git treats the pattern as a shell glob suitable for
@@ -157,7 +172,7 @@ const DEFAULT_REPLACER_SUFFIX = [
     // should not use '*', or it will be replaced by the next replacer
 
     // Check if it is not the last `'/**'`
-    (match, index, str) => index + 6 < str.length
+    (_, index, str) => index + 6 < str.length
 
       // case: /**/
       // > A slash followed by two consecutive asterisks then a slash matches
@@ -184,118 +199,141 @@ const DEFAULT_REPLACER_SUFFIX = [
 
     // '*.js' matches '.js'
     // '*.js' doesn't match 'abc'
-    (match, p1) => `${p1}[^\\/]*`
+    (_, p1) => `${p1}[^\\/]*`
   ],
 
-  // trailing wildcard
   [
-    /(\^|\\\/)?\\\*$/,
-    (match, p1) => {
-      const prefix = p1
-        // '\^':
-        // '/*' does not match ''
-        // '/*' does not match everything
-
-        // '\\\/':
-        // 'abc/*' does not match 'abc/'
-        ? `${p1}[^/]+`
-
-        // 'a*' matches 'a'
-        // 'a*' matches 'aa'
-        : '[^/]*'
-
-      return `${prefix}(?=$|\\/$)`
-    }
+    // unescape, revert step 3 except for back slash
+    // For example, if a user escape a '\\*',
+    // after step 3, the result will be '\\\\\\*'
+    /\\\\\\(?=[$.|*+(){^])/g,
+    () => ESCAPE
   ],
 
   [
-    // unescape
-    /\\\\\\/g,
-    () => '\\'
-  ]
-]
+    // '\\\\' -> '\\'
+    /\\\\/g,
+    () => ESCAPE
+  ],
 
-const POSITIVE_REPLACERS = [
-  ...DEFAULT_REPLACER_PREFIX,
-
-  // 'f'
-  // matches
-  // - /f(end)
-  // - /f/
-  // - (start)f(end)
-  // - (start)f/
-  // doesn't match
-  // - oof
-  // - foo
-  // pseudo:
-  // -> (^|/)f(/|$)
+  [
+    // > The range notation, e.g. [a-zA-Z],
+    // > can be used to match one of the characters in a range.
+
+    // `\` is escaped by step 3
+    /(\\)?\[([^\]/]*?)(\\*)($|\])/g,
+    (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE
+      // '\\[bar]' -> '\\\\[bar\\]'
+      ? `\\[${range}${cleanRangeBackSlash(endEscape)}${close}`
+      : close === ']'
+        ? endEscape.length % 2 === 0
+          // A normal case, and it is a range notation
+          // '[bar]'
+          // '[bar\\\\]'
+          ? `[${sanitizeRange(range)}${endEscape}]`
+          // Invalid range notaton
+          // '[bar\\]' -> '[bar\\\\]'
+          : '[]'
+        : '[]'
+  ],
 
   // ending
   [
     // 'js' will not match 'js.'
     // 'ab' will not match 'abc'
-    /(?:[^*/])$/,
+    /(?:[^*])$/,
+
+    // WTF!
+    // https://git-scm.com/docs/gitignore
+    // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)
+    // which re-fixes #24, #38
+
+    // > If there is a separator at the end of the pattern then the pattern
+    // > will only match directories, otherwise the pattern can match both
+    // > files and directories.
 
     // 'js*' will not match 'a.js'
     // 'js/' will not match 'a.js'
     // 'js' will match 'a.js' and 'a.js/'
-    match => `${match}(?=$|\\/)`
+    match => /\/$/.test(match)
+      // foo/ will not match 'foo'
+      ? `${match}$`
+      // foo matches 'foo' and 'foo/'
+      : `${match}(?=$|\\/$)`
   ],
 
-  ...DEFAULT_REPLACER_SUFFIX
-]
+  // trailing wildcard
+  [
+    /(\^|\\\/)?\\\*$/,
+    (_, p1) => {
+      const prefix = p1
+        // '\^':
+        // '/*' does not match EMPTY
+        // '/*' does not match everything
 
-const NEGATIVE_REPLACERS = [
-  ...DEFAULT_REPLACER_PREFIX,
+        // '\\\/':
+        // 'abc/*' does not match 'abc/'
+        ? `${p1}[^/]+`
 
-  // #24, #38
-  // The MISSING rule of [gitignore docs](https://git-scm.com/docs/gitignore)
-  // A negative pattern without a trailing wildcard should not
-  // re-include the things inside that directory.
+        // 'a*' matches 'a'
+        // 'a*' matches 'aa'
+        : '[^/]*'
 
-  // eg:
-  // ['node_modules/*', '!node_modules']
-  // should ignore `node_modules/a.js`
-  [
-    /(?:[^*])$/,
-    match => `${match}(?=$|\\/$)`
+      return `${prefix}(?=$|\\/$)`
+    }
   ],
-
-  ...DEFAULT_REPLACER_SUFFIX
 ]
 
 // A simple cache, because an ignore rule only has only one certain meaning
-const cache = Object.create(null)
+const regexCache = Object.create(null)
 
 // @param {pattern}
-const make_regex = (pattern, negative, ignorecase) => {
-  const r = cache[pattern]
+const makeRegex = (pattern, negative, ignorecase) => {
+  const r = regexCache[pattern]
   if (r) {
     return r
   }
 
-  const replacers = negative
-    ? NEGATIVE_REPLACERS
-    : POSITIVE_REPLACERS
+  // const replacers = negative
+  //   ? NEGATIVE_REPLACERS
+  //   : POSITIVE_REPLACERS
 
-  const source = replacers.reduce(
+  const source = REPLACERS.reduce(
     (prev, current) => prev.replace(current[0], current[1].bind(pattern)),
     pattern
   )
 
-  return cache[pattern] = ignorecase
+  return regexCache[pattern] = ignorecase
     ? new RegExp(source, 'i')
     : new RegExp(source)
 }
 
+const isString = subject => typeof subject === 'string'
+
 // > A blank line matches no files, so it can serve as a separator for readability.
 const checkPattern = pattern => pattern
-  && typeof pattern === 'string'
-  && !REGEX_BLANK_LINE.test(pattern)
+  && isString(pattern)
+  && !REGEX_TEST_BLANK_LINE.test(pattern)
 
   // > A line starting with # serves as a comment.
   && pattern.indexOf('#') !== 0
 
+const splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF)
+
+class IgnoreRule {
+  constructor (
+    origin,
+    pattern,
+    negative,
+    regex
+  ) {
+    this.origin = origin
+    this.pattern = pattern
+    this.negative = negative
+    this.regex = regex
+  }
+}
+
 const createRule = (pattern, ignorecase) => {
   const origin = pattern
   let negative = false
@@ -309,22 +347,56 @@ const createRule = (pattern, ignorecase) => {
   pattern = pattern
   // > Put a backslash ("\") in front of the first "!" for patterns that
   // >   begin with a literal "!", for example, `"\!important!.txt"`.
-  .replace(REGEX_LEADING_EXCAPED_EXCLAMATION, '!')
+  .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!')
   // > Put a backslash ("\") in front of the first hash for patterns that
   // >   begin with a hash.
-  .replace(REGEX_LEADING_EXCAPED_HASH, '#')
+  .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#')
 
-  const regex = make_regex(pattern, negative, ignorecase)
+  const regex = makeRegex(pattern, negative, ignorecase)
 
-  return {
+  return new IgnoreRule(
     origin,
     pattern,
     negative,
     regex
+  )
+}
+
+const throwError = (message, Ctor) => {
+  throw new Ctor(message)
+}
+
+const checkPath = (path, originalPath, doThrow) => {
+  if (!isString(path)) {
+    return doThrow(
+      `path must be a string, but got \`${originalPath}\``,
+      TypeError
+    )
+  }
+
+  // We don't know if we should ignore EMPTY, so throw
+  if (!path) {
+    return doThrow(`path must not be empty`, TypeError)
+  }
+
+  // Check if it is a relative path
+  if (checkPath.isNotRelative(path)) {
+    const r = '`path.relative()`d'
+    return doThrow(
+      `path should be a ${r} string, but got "${originalPath}"`,
+      RangeError
+    )
   }
+
+  return true
 }
 
-class IgnoreBase {
+const isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path)
+
+checkPath.isNotRelative = isNotRelative
+checkPath.convert = p => p
+
+class Ignore {
   constructor ({
     ignorecase = true
   } = {}) {
@@ -335,18 +407,34 @@ class IgnoreBase {
   }
 
   _initCache () {
-    this._cache = Object.create(null)
+    this._ignoreCache = Object.create(null)
+    this._testCache = Object.create(null)
   }
 
-  // @param {Array.<string>|string|Ignore} pattern
-  add (pattern) {
-    this._added = false
+  _addPattern (pattern) {
+    // #32
+    if (pattern && pattern[KEY_IGNORE]) {
+      this._rules = this._rules.concat(pattern._rules)
+      this._added = true
+      return
+    }
 
-    if (typeof pattern === 'string') {
-      pattern = pattern.split(/\r?\n/g)
+    if (checkPattern(pattern)) {
+      const rule = createRule(pattern, this._ignorecase)
+      this._added = true
+      this._rules.push(rule)
     }
+  }
 
-    make_array(pattern).forEach(this._addPattern, this)
+  // @param {Array<string> | string | Ignore} pattern
+  add (pattern) {
+    this._added = false
+
+    makeArray(
+      isString(pattern)
+        ? splitPattern(pattern)
+        : pattern
+    ).forEach(this._addPattern, this)
 
     // Some rules have just added to the ignore,
     // making the behavior changed.
@@ -362,41 +450,63 @@ class IgnoreBase {
     return this.add(pattern)
   }
 
-  _addPattern (pattern) {
-    // #32
-    if (pattern && pattern[KEY_IGNORE]) {
-      this._rules = this._rules.concat(pattern._rules)
-      this._added = true
-      return
-    }
+  //          |           ignored : unignored
+  // negative |   0:0   |   0:1   |   1:0   |   1:1
+  // -------- | ------- | ------- | ------- | --------
+  //     0    |  TEST   |  TEST   |  SKIP   |    X
+  //     1    |  TESTIF |  SKIP   |  TEST   |    X
 
-    if (checkPattern(pattern)) {
-      const rule = createRule(pattern, this._ignorecase)
-      this._added = true
-      this._rules.push(rule)
+  // - SKIP: always skip
+  // - TEST: always test
+  // - TESTIF: only test if checkUnignored
+  // - X: that never happen
+
+  // @param {boolean} whether should check if the path is unignored,
+  //   setting `checkUnignored` to `false` could reduce additional
+  //   path matching.
+
+  // @returns {TestResult} true if a file is ignored
+  _testOne (path, checkUnignored) {
+    let ignored = false
+    let unignored = false
+
+    this._rules.forEach(rule => {
+      const {negative} = rule
+      if (
+        unignored === negative && ignored !== unignored
+        || negative && !ignored && !unignored && !checkUnignored
+      ) {
+        return
+      }
+
+      const matched = rule.regex.test(path)
+
+      if (matched) {
+        ignored = !negative
+        unignored = negative
+      }
+    })
+
+    return {
+      ignored,
+      unignored
     }
   }
 
-  filter (paths) {
-    return make_array(paths).filter(path => this._filter(path))
-  }
+  // @returns {TestResult}
+  _test (originalPath, cache, checkUnignored, slices) {
+    const path = originalPath
+      // Supports nullable path
+      && checkPath.convert(originalPath)
 
-  createFilter () {
-    return path => this._filter(path)
-  }
+    checkPath(path, originalPath, throwError)
 
-  ignores (path) {
-    return !this._filter(path)
+    return this._t(path, cache, checkUnignored, slices)
   }
 
-  // @returns `Boolean` true if the `path` is NOT ignored
-  _filter (path, slices) {
-    if (!path) {
-      return false
-    }
-
-    if (path in this._cache) {
-      return this._cache[path]
+  _t (path, cache, checkUnignored, slices) {
+    if (path in cache) {
+      return cache[path]
     }
 
     if (!slices) {
@@ -407,34 +517,58 @@ class IgnoreBase {
 
     slices.pop()
 
-    return this._cache[path] = slices.length
+    // If the path has no parent directory, just test it
+    if (!slices.length) {
+      return cache[path] = this._testOne(path, checkUnignored)
+    }
+
+    const parent = this._t(
+      slices.join(SLASH) + SLASH,
+      cache,
+      checkUnignored,
+      slices
+    )
+
+    // If the path contains a parent directory, check the parent first
+    return cache[path] = parent.ignored
       // > It is not possible to re-include a file if a parent directory of
       // >   that file is excluded.
-      // If the path contains a parent directory, check the parent first
-      ? this._filter(slices.join(SLASH) + SLASH, slices)
-        && this._test(path)
+      ? parent
+      : this._testOne(path, checkUnignored)
+  }
 
-      // Or only test the path
-      : this._test(path)
+  ignores (path) {
+    return this._test(path, this._ignoreCache, false).ignored
   }
 
-  // @returns {Boolean} true if a file is NOT ignored
-  _test (path) {
-    // Explicitly define variable type by setting matched to `0`
-    let matched = 0
+  createFilter () {
+    return path => !this.ignores(path)
+  }
 
-    this._rules.forEach(rule => {
-      // if matched = true, then we only test negative rules
-      // if matched = false, then we test non-negative rules
-      if (!(matched ^ rule.negative)) {
-        matched = rule.negative ^ rule.regex.test(path)
-      }
-    })
+  filter (paths) {
+    return makeArray(paths).filter(this.createFilter())
+  }
 
-    return !matched
+  // @returns {TestResult}
+  test (path) {
+    return this._test(path, this._testCache, true)
   }
 }
 
+const factory = options => new Ignore(options)
+
+const returnFalse = () => false
+
+const isPathValid = path =>
+  checkPath(path && checkPath.convert(path), path, returnFalse)
+
+factory.isPathValid = isPathValid
+
+// Fixes typescript
+factory.default = factory
+
+module.exports = factory
+
 // Windows
 // --------------------------------------------------------------
 /* istanbul ignore if  */
@@ -446,18 +580,18 @@ if (
     || process.platform === 'win32'
   )
 ) {
-  const filter = IgnoreBase.prototype._filter
-
   /* eslint no-control-regex: "off" */
-  const make_posix = str => /^\\\\\?\\/.test(str)
-  || /[^\x00-\x80]+/.test(str)
+  const makePosix = str => /^\\\\\?\\/.test(str)
+  || /["<>|\u0000-\u001F]+/u.test(str)
     ? str
     : str.replace(/\\/g, '/')
 
-  IgnoreBase.prototype._filter = function filterWin32 (path, slices) {
-    path = make_posix(path)
-    return filter.call(this, path, slices)
-  }
-}
+  checkPath.convert = makePosix
 
-module.exports = options => new IgnoreBase(options)
+  // 'C:\\foo'     <- 'C:\\foo' has been converted to 'C:/'
+  // 'd:\\foo'
+  const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i
+  checkPath.isNotRelative = path =>
+    REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path)
+    || isNotRelative(path)
+}
diff --git a/server/node_modules/ignore/legacy.js b/server/node_modules/ignore/legacy.js
index 14f377d77fa5a3d429c146607e2ed7473f0eff76..176bf62de0dda60e6fd603c33a78792ed9241e1d 100644
--- a/server/node_modules/ignore/legacy.js
+++ b/server/node_modules/ignore/legacy.js
@@ -1,40 +1,56 @@
-'use strict';
+"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; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(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"); } }
 
 // A simple implementation of make-array
-function make_array(subject) {
+function makeArray(subject) {
   return Array.isArray(subject) ? subject : [subject];
 }
 
-var REGEX_BLANK_LINE = /^\s+$/;
-var REGEX_LEADING_EXCAPED_EXCLAMATION = /^\\!/;
-var REGEX_LEADING_EXCAPED_HASH = /^\\#/;
+var EMPTY = '';
+var SPACE = ' ';
+var ESCAPE = '\\';
+var REGEX_TEST_BLANK_LINE = /^\s+$/;
+var REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/;
+var REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/;
+var REGEX_SPLITALL_CRLF = /\r?\n/g; // /foo,
+// ./foo,
+// ../foo,
+// .
+// ..
+
+var REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/;
 var SLASH = '/';
-var KEY_IGNORE = typeof Symbol !== 'undefined' ? Symbol.for('node-ignore')
+var KEY_IGNORE = typeof Symbol !== 'undefined' ? Symbol["for"]('node-ignore')
 /* istanbul ignore next */
 : 'node-ignore';
 
 var define = function define(object, key, value) {
-  return Object.defineProperty(object, key, { value });
+  return Object.defineProperty(object, key, {
+    value: value
+  });
 };
 
-var REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g;
-
-// Sanitize the range of a regular expression
+var REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g; // Sanitize the range of a regular expression
 // The cases are complicated, see test cases for details
+
 var sanitizeRange = function sanitizeRange(range) {
   return range.replace(REGEX_REGEXP_RANGE, function (match, from, to) {
-    return from.charCodeAt(0) <= to.charCodeAt(0) ? match
-    // Invalid range (out of order) which is ok for gitignore rules but
+    return from.charCodeAt(0) <= to.charCodeAt(0) ? match // Invalid range (out of order) which is ok for gitignore rules but
     //   fatal for JavaScript regular expression, so eliminate it.
-    : '';
+    : EMPTY;
   });
-};
+}; // See fixtures #59
 
-// > If the pattern ends with a slash,
+
+var cleanRangeBackSlash = function cleanRangeBackSlash(slashes) {
+  var length = slashes.length;
+  return slashes.slice(0, length - length % 2);
+}; // > If the pattern ends with a slash,
 // > it is removed for the purpose of the following description,
 // > but it would only find a match with a directory.
 // > In other words, foo/ will match a directory foo and paths underneath it,
@@ -43,27 +59,20 @@ var sanitizeRange = function sanitizeRange(range) {
 // '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'
 // -> ignore-rules will not deal with it, because it costs extra `fs.stat` call
 //      you could use option `mark: true` with `glob`
-
 // '`foo/`' should not continue with the '`..`'
-var DEFAULT_REPLACER_PREFIX = [
 
-// > Trailing spaces are ignored unless they are quoted with backslash ("\")
-[
-// (a\ ) -> (a )
+
+var REPLACERS = [// > Trailing spaces are ignored unless they are quoted with backslash ("\")
+[// (a\ ) -> (a )
 // (a  ) -> (a)
 // (a \ ) -> (a  )
 /\\?\s+$/, function (match) {
-  return match.indexOf('\\') === 0 ? ' ' : '';
-}],
-
-// replace (\ ) with ' '
+  return match.indexOf('\\') === 0 ? SPACE : EMPTY;
+}], // replace (\ ) with ' '
 [/\\\s/g, function () {
-  return ' ';
-}],
-
-// Escape metacharacters
+  return SPACE;
+}], // Escape metacharacters
 // which is written down by users but means special for regular expressions.
-
 // > There are 12 characters with special meanings:
 // > - the backslash \,
 // > - the caret ^,
@@ -78,324 +87,325 @@ var DEFAULT_REPLACER_PREFIX = [
 // > - and the opening square bracket [,
 // > - the opening curly brace {,
 // > These special characters are often called "metacharacters".
-[/[\\^$.|*+(){]/g, function (match) {
-  return `\\${match}`;
-}], [
-// > [abc] matches any character inside the brackets
-// >    (in this case a, b, or c);
-/\[([^\]/]*)($|\])/g, function (match, p1, p2) {
-  return p2 === ']' ? `[${sanitizeRange(p1)}]` : `\\${match}`;
-}], [
-// > a question mark (?) matches a single character
+[/[\\$.|*+(){^]/g, function (match) {
+  return "\\".concat(match);
+}], [// > a question mark (?) matches a single character
 /(?!\\)\?/g, function () {
   return '[^/]';
-}],
-
-// leading slash
-[
-
-// > A leading slash matches the beginning of the pathname.
+}], // leading slash
+[// > A leading slash matches the beginning of the pathname.
 // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".
 // A leading slash matches the beginning of the pathname
 /^\//, function () {
   return '^';
-}],
-
-// replace special metacharacter slash after the leading slash
+}], // replace special metacharacter slash after the leading slash
 [/\//g, function () {
   return '\\/';
-}], [
-// > A leading "**" followed by a slash means match in all directories.
+}], [// > A leading "**" followed by a slash means match in all directories.
 // > For example, "**/foo" matches file or directory "foo" anywhere,
 // > the same as pattern "foo".
 // > "**/foo/bar" matches file or directory "bar" anywhere that is directly
 // >   under directory "foo".
 // Notice that the '*'s have been replaced as '\\*'
-/^\^*\\\*\\\*\\\//,
-
-// '**/foo' <-> 'foo'
+/^\^*\\\*\\\*\\\//, // '**/foo' <-> 'foo'
 function () {
   return '^(?:.*\\/)?';
-}]];
-
-var DEFAULT_REPLACER_SUFFIX = [
-// starting
-[
-// there will be no leading '/'
+}], // starting
+[// there will be no leading '/'
 //   (which has been replaced by section "leading slash")
 // If starts with '**', adding a '^' to the regular expression also works
 /^(?=[^^])/, function startingReplacer() {
-  return !/\/(?!$)/.test(this)
+  // If has a slash `/` at the beginning or middle
+  return !/\/(?!$)/.test(this) // > Prior to 2.22.1
   // > If the pattern does not contain a slash /,
   // >   Git treats it as a shell glob pattern
   // Actually, if there is only a trailing slash,
   //   git also treats it as a shell glob pattern
-  ? '(?:^|\\/)'
-
-  // > Otherwise, Git treats the pattern as a shell glob suitable for
+  // After 2.22.1 (compatible but clearer)
+  // > If there is a separator at the beginning or middle (or both)
+  // > of the pattern, then the pattern is relative to the directory
+  // > level of the particular .gitignore file itself.
+  // > Otherwise the pattern may also match at any level below
+  // > the .gitignore level.
+  ? '(?:^|\\/)' // > Otherwise, Git treats the pattern as a shell glob suitable for
   // >   consumption by fnmatch(3)
   : '^';
-}],
-
-// two globstars
-[
-// Use lookahead assertions so that we could match more than one `'/**'`
-/\\\/\\\*\\\*(?=\\\/|$)/g,
-
-// Zero, one or several directories
+}], // two globstars
+[// Use lookahead assertions so that we could match more than one `'/**'`
+/\\\/\\\*\\\*(?=\\\/|$)/g, // Zero, one or several directories
 // should not use '*', or it will be replaced by the next replacer
-
 // Check if it is not the last `'/**'`
-function (match, index, str) {
-  return index + 6 < str.length
-
-  // case: /**/
+function (_, index, str) {
+  return index + 6 < str.length // case: /**/
   // > A slash followed by two consecutive asterisks then a slash matches
   // >   zero or more directories.
   // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on.
   // '/**/'
-  ? '(?:\\/[^\\/]+)*'
-
-  // case: /**
+  ? '(?:\\/[^\\/]+)*' // case: /**
   // > A trailing `"/**"` matches everything inside.
-
   // #21: everything inside but it should not include the current folder
   : '\\/.+';
-}],
-
-// intermediate wildcards
-[
-// Never replace escaped '*'
+}], // intermediate wildcards
+[// Never replace escaped '*'
 // ignore rule '\*' will match the path '*'
-
 // 'abc.*/' -> go
 // 'abc.*'  -> skip this rule
-/(^|[^\\]+)\\\*(?=.+)/g,
-
-// '*.js' matches '.js'
+/(^|[^\\]+)\\\*(?=.+)/g, // '*.js' matches '.js'
 // '*.js' doesn't match 'abc'
-function (match, p1) {
-  return `${p1}[^\\/]*`;
-}],
-
-// trailing wildcard
-[/(\^|\\\/)?\\\*$/, function (match, p1) {
-  var prefix = p1
-  // '\^':
-  // '/*' does not match ''
-  // '/*' does not match everything
-
-  // '\\\/':
-  // 'abc/*' does not match 'abc/'
-  ? `${p1}[^/]+`
-
-  // 'a*' matches 'a'
-  // 'a*' matches 'aa'
-  : '[^/]*';
-
-  return `${prefix}(?=$|\\/$)`;
-}], [
-// unescape
-/\\\\\\/g, function () {
-  return '\\';
-}]];
-
-var POSITIVE_REPLACERS = [].concat(DEFAULT_REPLACER_PREFIX, [
-
-// 'f'
-// matches
-// - /f(end)
-// - /f/
-// - (start)f(end)
-// - (start)f/
-// doesn't match
-// - oof
-// - foo
-// pseudo:
-// -> (^|/)f(/|$)
-
-// ending
-[
-// 'js' will not match 'js.'
+function (_, p1) {
+  return "".concat(p1, "[^\\/]*");
+}], [// unescape, revert step 3 except for back slash
+// For example, if a user escape a '\\*',
+// after step 3, the result will be '\\\\\\*'
+/\\\\\\(?=[$.|*+(){^])/g, function () {
+  return ESCAPE;
+}], [// '\\\\' -> '\\'
+/\\\\/g, function () {
+  return ESCAPE;
+}], [// > The range notation, e.g. [a-zA-Z],
+// > can be used to match one of the characters in a range.
+// `\` is escaped by step 3
+/(\\)?\[([^\]/]*?)(\\*)($|\])/g, function (match, leadEscape, range, endEscape, close) {
+  return leadEscape === ESCAPE // '\\[bar]' -> '\\\\[bar\\]'
+  ? "\\[".concat(range).concat(cleanRangeBackSlash(endEscape)).concat(close) : close === ']' ? endEscape.length % 2 === 0 // A normal case, and it is a range notation
+  // '[bar]'
+  // '[bar\\\\]'
+  ? "[".concat(sanitizeRange(range)).concat(endEscape, "]") // Invalid range notaton
+  // '[bar\\]' -> '[bar\\\\]'
+  : '[]' : '[]';
+}], // ending
+[// 'js' will not match 'js.'
 // 'ab' will not match 'abc'
-/(?:[^*/])$/,
-
+/(?:[^*])$/, // WTF!
+// https://git-scm.com/docs/gitignore
+// changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)
+// which re-fixes #24, #38
+// > If there is a separator at the end of the pattern then the pattern
+// > will only match directories, otherwise the pattern can match both
+// > files and directories.
 // 'js*' will not match 'a.js'
 // 'js/' will not match 'a.js'
 // 'js' will match 'a.js' and 'a.js/'
 function (match) {
-  return `${match}(?=$|\\/)`;
-}]], DEFAULT_REPLACER_SUFFIX);
-
-var NEGATIVE_REPLACERS = [].concat(DEFAULT_REPLACER_PREFIX, [
-
-// #24, #38
-// The MISSING rule of [gitignore docs](https://git-scm.com/docs/gitignore)
-// A negative pattern without a trailing wildcard should not
-// re-include the things inside that directory.
+  return /\/$/.test(match) // foo/ will not match 'foo'
+  ? "".concat(match, "$") // foo matches 'foo' and 'foo/'
+  : "".concat(match, "(?=$|\\/$)");
+}], // trailing wildcard
+[/(\^|\\\/)?\\\*$/, function (_, p1) {
+  var prefix = p1 // '\^':
+  // '/*' does not match EMPTY
+  // '/*' does not match everything
+  // '\\\/':
+  // 'abc/*' does not match 'abc/'
+  ? "".concat(p1, "[^/]+") // 'a*' matches 'a'
+  // 'a*' matches 'aa'
+  : '[^/]*';
+  return "".concat(prefix, "(?=$|\\/$)");
+}]]; // A simple cache, because an ignore rule only has only one certain meaning
 
-// eg:
-// ['node_modules/*', '!node_modules']
-// should ignore `node_modules/a.js`
-[/(?:[^*])$/, function (match) {
-  return `${match}(?=$|\\/$)`;
-}]], DEFAULT_REPLACER_SUFFIX);
+var regexCache = Object.create(null); // @param {pattern}
 
-// A simple cache, because an ignore rule only has only one certain meaning
-var cache = Object.create(null);
+var makeRegex = function makeRegex(pattern, negative, ignorecase) {
+  var r = regexCache[pattern];
 
-// @param {pattern}
-var make_regex = function make_regex(pattern, negative, ignorecase) {
-  var r = cache[pattern];
   if (r) {
     return r;
-  }
+  } // const replacers = negative
+  //   ? NEGATIVE_REPLACERS
+  //   : POSITIVE_REPLACERS
 
-  var replacers = negative ? NEGATIVE_REPLACERS : POSITIVE_REPLACERS;
 
-  var source = replacers.reduce(function (prev, current) {
+  var source = REPLACERS.reduce(function (prev, current) {
     return prev.replace(current[0], current[1].bind(pattern));
   }, pattern);
-
-  return cache[pattern] = ignorecase ? new RegExp(source, 'i') : new RegExp(source);
+  return regexCache[pattern] = ignorecase ? new RegExp(source, 'i') : new RegExp(source);
 };
 
-// > A blank line matches no files, so it can serve as a separator for readability.
-var checkPattern = function checkPattern(pattern) {
-  return pattern && typeof pattern === 'string' && !REGEX_BLANK_LINE.test(pattern)
+var isString = function isString(subject) {
+  return typeof subject === 'string';
+}; // > A blank line matches no files, so it can serve as a separator for readability.
+
 
-  // > A line starting with # serves as a comment.
+var checkPattern = function checkPattern(pattern) {
+  return pattern && isString(pattern) && !REGEX_TEST_BLANK_LINE.test(pattern) // > A line starting with # serves as a comment.
   && pattern.indexOf('#') !== 0;
 };
 
+var splitPattern = function splitPattern(pattern) {
+  return pattern.split(REGEX_SPLITALL_CRLF);
+};
+
+var IgnoreRule = function IgnoreRule(origin, pattern, negative, regex) {
+  _classCallCheck(this, IgnoreRule);
+
+  this.origin = origin;
+  this.pattern = pattern;
+  this.negative = negative;
+  this.regex = regex;
+};
+
 var createRule = function createRule(pattern, ignorecase) {
   var origin = pattern;
-  var negative = false;
+  var negative = false; // > An optional prefix "!" which negates the pattern;
 
-  // > An optional prefix "!" which negates the pattern;
   if (pattern.indexOf('!') === 0) {
     negative = true;
     pattern = pattern.substr(1);
   }
 
-  pattern = pattern
-  // > Put a backslash ("\") in front of the first "!" for patterns that
+  pattern = pattern // > Put a backslash ("\") in front of the first "!" for patterns that
   // >   begin with a literal "!", for example, `"\!important!.txt"`.
-  .replace(REGEX_LEADING_EXCAPED_EXCLAMATION, '!')
-  // > Put a backslash ("\") in front of the first hash for patterns that
+  .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!') // > Put a backslash ("\") in front of the first hash for patterns that
   // >   begin with a hash.
-  .replace(REGEX_LEADING_EXCAPED_HASH, '#');
+  .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#');
+  var regex = makeRegex(pattern, negative, ignorecase);
+  return new IgnoreRule(origin, pattern, negative, regex);
+};
+
+var throwError = function throwError(message, Ctor) {
+  throw new Ctor(message);
+};
 
-  var regex = make_regex(pattern, negative, ignorecase);
+var checkPath = function checkPath(path, originalPath, doThrow) {
+  if (!isString(path)) {
+    return doThrow("path must be a string, but got `".concat(originalPath, "`"), TypeError);
+  } // We don't know if we should ignore EMPTY, so throw
 
-  return {
-    origin,
-    pattern,
-    negative,
-    regex
-  };
+
+  if (!path) {
+    return doThrow("path must not be empty", TypeError);
+  } // Check if it is a relative path
+
+
+  if (checkPath.isNotRelative(path)) {
+    var r = '`path.relative()`d';
+    return doThrow("path should be a ".concat(r, " string, but got \"").concat(originalPath, "\""), RangeError);
+  }
+
+  return true;
+};
+
+var isNotRelative = function isNotRelative(path) {
+  return REGEX_TEST_INVALID_PATH.test(path);
+};
+
+checkPath.isNotRelative = isNotRelative;
+
+checkPath.convert = function (p) {
+  return p;
 };
 
-var IgnoreBase = function () {
-  function IgnoreBase() {
+var Ignore = /*#__PURE__*/function () {
+  function Ignore() {
     var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
         _ref$ignorecase = _ref.ignorecase,
-        ignorecase = _ref$ignorecase === undefined ? true : _ref$ignorecase;
+        ignorecase = _ref$ignorecase === void 0 ? true : _ref$ignorecase;
 
-    _classCallCheck(this, IgnoreBase);
+    _classCallCheck(this, Ignore);
 
     this._rules = [];
     this._ignorecase = ignorecase;
     define(this, KEY_IGNORE, true);
+
     this._initCache();
   }
 
-  _createClass(IgnoreBase, [{
-    key: '_initCache',
+  _createClass(Ignore, [{
+    key: "_initCache",
     value: function _initCache() {
-      this._cache = Object.create(null);
+      this._ignoreCache = Object.create(null);
+      this._testCache = Object.create(null);
     }
+  }, {
+    key: "_addPattern",
+    value: function _addPattern(pattern) {
+      // #32
+      if (pattern && pattern[KEY_IGNORE]) {
+        this._rules = this._rules.concat(pattern._rules);
+        this._added = true;
+        return;
+      }
 
-    // @param {Array.<string>|string|Ignore} pattern
+      if (checkPattern(pattern)) {
+        var rule = createRule(pattern, this._ignorecase);
+        this._added = true;
+
+        this._rules.push(rule);
+      }
+    } // @param {Array<string> | string | Ignore} pattern
 
   }, {
-    key: 'add',
+    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,
+      makeArray(isString(pattern) ? splitPattern(pattern) : pattern).forEach(this._addPattern, this); // Some rules have just added to the ignore,
       // making the behavior changed.
+
       if (this._added) {
         this._initCache();
       }
 
       return this;
-    }
-
-    // legacy
+    } // legacy
 
   }, {
-    key: 'addPattern',
+    key: "addPattern",
     value: function addPattern(pattern) {
       return this.add(pattern);
-    }
-  }, {
-    key: '_addPattern',
-    value: function _addPattern(pattern) {
-      // #32
-      if (pattern && pattern[KEY_IGNORE]) {
-        this._rules = this._rules.concat(pattern._rules);
-        this._added = true;
-        return;
-      }
+    } //          |           ignored : unignored
+    // negative |   0:0   |   0:1   |   1:0   |   1:1
+    // -------- | ------- | ------- | ------- | --------
+    //     0    |  TEST   |  TEST   |  SKIP   |    X
+    //     1    |  TESTIF |  SKIP   |  TEST   |    X
+    // - SKIP: always skip
+    // - TEST: always test
+    // - TESTIF: only test if checkUnignored
+    // - X: that never happen
+    // @param {boolean} whether should check if the path is unignored,
+    //   setting `checkUnignored` to `false` could reduce additional
+    //   path matching.
+    // @returns {TestResult} true if a file is ignored
 
-      if (checkPattern(pattern)) {
-        var rule = createRule(pattern, this._ignorecase);
-        this._added = true;
-        this._rules.push(rule);
-      }
-    }
   }, {
-    key: 'filter',
-    value: function filter(paths) {
-      var _this = this;
+    key: "_testOne",
+    value: function _testOne(path, checkUnignored) {
+      var ignored = false;
+      var unignored = false;
 
-      return make_array(paths).filter(function (path) {
-        return _this._filter(path);
+      this._rules.forEach(function (rule) {
+        var negative = rule.negative;
+
+        if (unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored) {
+          return;
+        }
+
+        var matched = rule.regex.test(path);
+
+        if (matched) {
+          ignored = !negative;
+          unignored = negative;
+        }
       });
-    }
-  }, {
-    key: 'createFilter',
-    value: function createFilter() {
-      var _this2 = this;
 
-      return function (path) {
-        return _this2._filter(path);
+      return {
+        ignored: ignored,
+        unignored: unignored
       };
-    }
+    } // @returns {TestResult}
+
   }, {
-    key: 'ignores',
-    value: function ignores(path) {
-      return !this._filter(path);
+    key: "_test",
+    value: function _test(originalPath, cache, checkUnignored, slices) {
+      var path = originalPath // Supports nullable path
+      && checkPath.convert(originalPath);
+      checkPath(path, originalPath, throwError);
+      return this._t(path, cache, checkUnignored, slices);
     }
-
-    // @returns `Boolean` true if the `path` is NOT ignored
-
   }, {
-    key: '_filter',
-    value: function _filter(path, slices) {
-      if (!path) {
-        return false;
-      }
-
-      if (path in this._cache) {
-        return this._cache[path];
+    key: "_t",
+    value: function _t(path, cache, checkUnignored, slices) {
+      if (path in cache) {
+        return cache[path];
       }
 
       if (!slices) {
@@ -404,63 +414,82 @@ var IgnoreBase = function () {
         slices = path.split(SLASH);
       }
 
-      slices.pop();
+      slices.pop(); // If the path has no parent directory, just test it
 
-      return this._cache[path] = slices.length
-      // > It is not possible to re-include a file if a parent directory of
-      // >   that file is excluded.
-      // If the path contains a parent directory, check the parent first
-      ? this._filter(slices.join(SLASH) + SLASH, slices) && this._test(path)
+      if (!slices.length) {
+        return cache[path] = this._testOne(path, checkUnignored);
+      }
 
-      // Or only test the path
-      : this._test(path);
-    }
+      var parent = this._t(slices.join(SLASH) + SLASH, cache, checkUnignored, slices); // If the path contains a parent directory, check the parent first
 
-    // @returns {Boolean} true if a file is NOT ignored
 
+      return cache[path] = parent.ignored // > It is not possible to re-include a file if a parent directory of
+      // >   that file is excluded.
+      ? parent : this._testOne(path, checkUnignored);
+    }
   }, {
-    key: '_test',
-    value: function _test(path) {
-      // Explicitly define variable type by setting matched to `0`
-      var matched = 0;
+    key: "ignores",
+    value: function ignores(path) {
+      return this._test(path, this._ignoreCache, false).ignored;
+    }
+  }, {
+    key: "createFilter",
+    value: function createFilter() {
+      var _this = this;
 
-      this._rules.forEach(function (rule) {
-        // if matched = true, then we only test negative rules
-        // if matched = false, then we test non-negative rules
-        if (!(matched ^ rule.negative)) {
-          matched = rule.negative ^ rule.regex.test(path);
-        }
-      });
+      return function (path) {
+        return !_this.ignores(path);
+      };
+    }
+  }, {
+    key: "filter",
+    value: function filter(paths) {
+      return makeArray(paths).filter(this.createFilter());
+    } // @returns {TestResult}
 
-      return !matched;
+  }, {
+    key: "test",
+    value: function test(path) {
+      return this._test(path, this._testCache, true);
     }
   }]);
 
-  return IgnoreBase;
+  return Ignore;
 }();
 
-// Windows
+var factory = function factory(options) {
+  return new Ignore(options);
+};
+
+var returnFalse = function returnFalse() {
+  return false;
+};
+
+var isPathValid = function isPathValid(path) {
+  return checkPath(path && checkPath.convert(path), path, returnFalse);
+};
+
+factory.isPathValid = isPathValid; // Fixes typescript
+
+factory["default"] = factory;
+module.exports = factory; // Windows
 // --------------------------------------------------------------
-/* istanbul ignore if  */
 
+/* istanbul ignore if  */
 
-if (
-// Detect `process` so that it can run in browsers.
+if ( // Detect `process` so that it can run in browsers.
 typeof process !== 'undefined' && (process.env && process.env.IGNORE_TEST_WIN32 || process.platform === 'win32')) {
-  var filter = IgnoreBase.prototype._filter;
-
   /* eslint no-control-regex: "off" */
-  var make_posix = function make_posix(str) {
-    return (/^\\\\\?\\/.test(str) || /[^\x00-\x80]+/.test(str) ? str : str.replace(/\\/g, '/')
-    );
+  var makePosix = function makePosix(str) {
+    return /^\\\\\?\\/.test(str) || /[\0-\x1F"<>\|]+/.test(str) ? str : str.replace(/\\/g, '/');
   };
 
-  IgnoreBase.prototype._filter = function filterWin32(path, slices) {
-    path = make_posix(path);
-    return filter.call(this, path, slices);
+  checkPath.convert = makePosix; // 'C:\\foo'     <- 'C:\\foo' has been converted to 'C:/'
+  // 'd:\\foo'
+
+  var REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i;
+
+  checkPath.isNotRelative = function (path) {
+    return REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path) || isNotRelative(path);
   };
 }
-
-module.exports = function (options) {
-  return new IgnoreBase(options);
-};
diff --git a/server/node_modules/ignore/package.json b/server/node_modules/ignore/package.json
index f3f74781114d0092536f5b1d4530ef39b11d3016..65138076df89be36b3833d67c6b6f52ca4619145 100644
--- a/server/node_modules/ignore/package.json
+++ b/server/node_modules/ignore/package.json
@@ -1,28 +1,27 @@
 {
-  "_from": "ignore@^4.0.6",
-  "_id": "ignore@4.0.6",
+  "_from": "ignore@^5.1.4",
+  "_id": "ignore@5.1.8",
   "_inBundle": false,
-  "_integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+  "_integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
   "_location": "/ignore",
   "_phantomChildren": {},
   "_requested": {
     "type": "range",
     "registry": true,
-    "raw": "ignore@^4.0.6",
+    "raw": "ignore@^5.1.4",
     "name": "ignore",
     "escapedName": "ignore",
-    "rawSpec": "^4.0.6",
+    "rawSpec": "^5.1.4",
     "saveSpec": null,
-    "fetchSpec": "^4.0.6"
+    "fetchSpec": "^5.1.4"
   },
   "_requiredBy": [
-    "/@eslint/eslintrc",
-    "/eslint"
+    "/globby"
   ],
-  "_resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
-  "_shasum": "750e3db5862087b4737ebac8207ffd1ef27b25fc",
-  "_spec": "ignore@^4.0.6",
-  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\eslint",
+  "_resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
+  "_shasum": "f150a8b50a34289b33e22f5889abd4d8016f0e57",
+  "_spec": "ignore@^5.1.4",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\globby",
   "author": {
     "name": "kael"
   },
@@ -31,21 +30,23 @@
   },
   "bundleDependencies": false,
   "deprecated": false,
-  "description": "Ignore is a manager and filter for .gitignore rules.",
+  "description": "Ignore is a manager and filter for .gitignore rules, the one used by eslint, gitbook and many others.",
   "devDependencies": {
-    "babel-cli": "^6.26.0",
-    "babel-preset-env": "^1.7.0",
-    "codecov": "^3.0.4",
-    "eslint": "^5.3.0",
-    "eslint-config-ostai": "^1.3.2",
-    "eslint-plugin-import": "^2.13.0",
-    "mkdirp": "^0.5.1",
-    "pre-suf": "^1.1.0",
-    "rimraf": "^2.6.2",
+    "@babel/cli": "^7.8.4",
+    "@babel/core": "^7.9.6",
+    "@babel/preset-env": "^7.9.6",
+    "codecov": "^3.7.0",
+    "debug": "^4.1.1",
+    "eslint": "^7.0.0",
+    "eslint-config-ostai": "^3.0.0",
+    "eslint-plugin-import": "^2.20.2",
+    "mkdirp": "^1.0.4",
+    "pre-suf": "^1.1.1",
+    "rimraf": "^3.0.2",
     "spawn-sync": "^2.0.0",
-    "tap": "^12.0.1",
-    "tmp": "0.0.33",
-    "typescript": "^3.0.1"
+    "tap": "^14.10.7",
+    "tmp": "0.2.1",
+    "typescript": "^3.9.3"
   },
   "engines": {
     "node": ">= 4"
@@ -81,13 +82,17 @@
   "scripts": {
     "build": "babel -o legacy.js index.js",
     "posttest": "tap --coverage-report=html && codecov",
-    "prepublish": "npm run build",
-    "test": "npm run test-no-cov",
-    "test-no-cov": "npm run test:lint && npm run test:tsc && tap test/*.js --coverage",
+    "prepublishOnly": "npm run build",
+    "test": "npm run test:only",
+    "test:cases": "tap test/*.js --coverage",
     "test:git": "tap test/git-check-ignore.js",
-    "test:ignore": "tap test/ignore.js --coverage",
+    "test:ignore": "tap test/ignore.js",
     "test:lint": "eslint .",
-    "test:tsc": "tsc ./test/ts/simple.ts"
+    "test:only": "npm run test:lint && npm run test:tsc && npm run test:ts && npm run test:cases",
+    "test:others": "tap test/others.js",
+    "test:ts": "node ./test/ts/simple.js",
+    "test:tsc": "tsc ./test/ts/simple.ts --lib ES6",
+    "test:win32": "IGNORE_TEST_WIN32=1 npm run test"
   },
-  "version": "4.0.6"
+  "version": "5.1.8"
 }
diff --git a/server/node_modules/merge2/LICENSE b/server/node_modules/merge2/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..31dd9c722739b8facf4c9c8935ffb1cda06b8c84
--- /dev/null
+++ b/server/node_modules/merge2/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2020 Teambition
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/server/node_modules/merge2/README.md b/server/node_modules/merge2/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..27f8eb99a4d4130da2486130c1205021d47d90c0
--- /dev/null
+++ b/server/node_modules/merge2/README.md
@@ -0,0 +1,144 @@
+# merge2
+
+Merge multiple streams into one stream in sequence or parallel.
+
+[![NPM version][npm-image]][npm-url]
+[![Build Status][travis-image]][travis-url]
+[![Downloads][downloads-image]][downloads-url]
+
+## Install
+
+Install with [npm](https://npmjs.org/package/merge2)
+
+```sh
+npm install merge2
+```
+
+## Usage
+
+```js
+const gulp = require('gulp')
+const merge2 = require('merge2')
+const concat = require('gulp-concat')
+const minifyHtml = require('gulp-minify-html')
+const ngtemplate = require('gulp-ngtemplate')
+
+gulp.task('app-js', function () {
+  return merge2(
+      gulp.src('static/src/tpl/*.html')
+        .pipe(minifyHtml({empty: true}))
+        .pipe(ngtemplate({
+          module: 'genTemplates',
+          standalone: true
+        })
+      ), gulp.src([
+        'static/src/js/app.js',
+        'static/src/js/locale_zh-cn.js',
+        'static/src/js/router.js',
+        'static/src/js/tools.js',
+        'static/src/js/services.js',
+        'static/src/js/filters.js',
+        'static/src/js/directives.js',
+        'static/src/js/controllers.js'
+      ])
+    )
+    .pipe(concat('app.js'))
+    .pipe(gulp.dest('static/dist/js/'))
+})
+```
+
+```js
+const stream = merge2([stream1, stream2], stream3, {end: false})
+//...
+stream.add(stream4, stream5)
+//..
+stream.end()
+```
+
+```js
+// equal to merge2([stream1, stream2], stream3)
+const stream = merge2()
+stream.add([stream1, stream2])
+stream.add(stream3)
+```
+
+```js
+// merge order:
+//   1. merge `stream1`;
+//   2. merge `stream2` and `stream3` in parallel after `stream1` merged;
+//   3. merge 'stream4' after `stream2` and `stream3` merged;
+const stream = merge2(stream1, [stream2, stream3], stream4)
+
+// merge order:
+//   1. merge `stream5` and `stream6` in parallel after `stream4` merged;
+//   2. merge 'stream7' after `stream5` and `stream6` merged;
+stream.add([stream5, stream6], stream7)
+```
+
+```js
+// nest merge
+// equal to merge2(stream1, stream2, stream6, stream3, [stream4, stream5]);
+const streamA = merge2(stream1, stream2)
+const streamB = merge2(stream3, [stream4, stream5])
+const stream = merge2(streamA, streamB)
+streamA.add(stream6)
+```
+
+## API
+
+```js
+const merge2 = require('merge2')
+```
+
+### merge2()
+
+### merge2(options)
+
+### merge2(stream1, stream2, ..., streamN)
+
+### merge2(stream1, stream2, ..., streamN, options)
+
+### merge2(stream1, [stream2, stream3, ...], streamN, options)
+
+return a duplex stream (mergedStream). streams in array will be merged in parallel.
+
+### mergedStream.add(stream)
+
+### mergedStream.add(stream1, [stream2, stream3, ...], ...)
+
+return the mergedStream.
+
+### mergedStream.on('queueDrain', function() {})
+
+It will emit 'queueDrain' when all streams merged. If you set `end === false` in options, this event give you a notice that should add more streams to merge or end the mergedStream.
+
+#### stream
+
+*option*
+Type: `Readable` or `Duplex` or `Transform` stream.
+
+#### options
+
+*option*
+Type: `Object`.
+
+* **end** - `Boolean` - if `end === false` then mergedStream will not be auto ended, you should end by yourself. **Default:** `undefined`
+
+* **pipeError** - `Boolean` - if `pipeError === true` then mergedStream will emit `error` event from source streams. **Default:** `undefined`
+
+* **objectMode** - `Boolean` . **Default:** `true`
+
+`objectMode` and other options(`highWaterMark`, `defaultEncoding` ...) is same as Node.js `Stream`.
+
+## License
+
+MIT © [Teambition](https://www.teambition.com)
+
+[npm-url]: https://npmjs.org/package/merge2
+[npm-image]: http://img.shields.io/npm/v/merge2.svg
+
+[travis-url]: https://travis-ci.org/teambition/merge2
+[travis-image]: http://img.shields.io/travis/teambition/merge2.svg
+
+[downloads-url]: https://npmjs.org/package/merge2
+[downloads-image]: http://img.shields.io/npm/dm/merge2.svg?style=flat-square
diff --git a/server/node_modules/merge2/index.js b/server/node_modules/merge2/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..78a61edf0b2eef538732c89dbced53c82010a191
--- /dev/null
+++ b/server/node_modules/merge2/index.js
@@ -0,0 +1,144 @@
+'use strict'
+/*
+ * merge2
+ * https://github.com/teambition/merge2
+ *
+ * Copyright (c) 2014-2020 Teambition
+ * Licensed under the MIT license.
+ */
+const Stream = require('stream')
+const PassThrough = Stream.PassThrough
+const slice = Array.prototype.slice
+
+module.exports = merge2
+
+function merge2 () {
+  const streamsQueue = []
+  const args = slice.call(arguments)
+  let merging = false
+  let options = args[args.length - 1]
+
+  if (options && !Array.isArray(options) && options.pipe == null) {
+    args.pop()
+  } else {
+    options = {}
+  }
+
+  const doEnd = options.end !== false
+  const doPipeError = options.pipeError === true
+  if (options.objectMode == null) {
+    options.objectMode = true
+  }
+  if (options.highWaterMark == null) {
+    options.highWaterMark = 64 * 1024
+  }
+  const mergedStream = PassThrough(options)
+
+  function addStream () {
+    for (let i = 0, len = arguments.length; i < len; i++) {
+      streamsQueue.push(pauseStreams(arguments[i], options))
+    }
+    mergeStream()
+    return this
+  }
+
+  function mergeStream () {
+    if (merging) {
+      return
+    }
+    merging = true
+
+    let streams = streamsQueue.shift()
+    if (!streams) {
+      process.nextTick(endStream)
+      return
+    }
+    if (!Array.isArray(streams)) {
+      streams = [streams]
+    }
+
+    let pipesCount = streams.length + 1
+
+    function next () {
+      if (--pipesCount > 0) {
+        return
+      }
+      merging = false
+      mergeStream()
+    }
+
+    function pipe (stream) {
+      function onend () {
+        stream.removeListener('merge2UnpipeEnd', onend)
+        stream.removeListener('end', onend)
+        if (doPipeError) {
+          stream.removeListener('error', onerror)
+        }
+        next()
+      }
+      function onerror (err) {
+        mergedStream.emit('error', err)
+      }
+      // skip ended stream
+      if (stream._readableState.endEmitted) {
+        return next()
+      }
+
+      stream.on('merge2UnpipeEnd', onend)
+      stream.on('end', onend)
+
+      if (doPipeError) {
+        stream.on('error', onerror)
+      }
+
+      stream.pipe(mergedStream, { end: false })
+      // compatible for old stream
+      stream.resume()
+    }
+
+    for (let i = 0; i < streams.length; i++) {
+      pipe(streams[i])
+    }
+
+    next()
+  }
+
+  function endStream () {
+    merging = false
+    // emit 'queueDrain' when all streams merged.
+    mergedStream.emit('queueDrain')
+    if (doEnd) {
+      mergedStream.end()
+    }
+  }
+
+  mergedStream.setMaxListeners(0)
+  mergedStream.add = addStream
+  mergedStream.on('unpipe', function (stream) {
+    stream.emit('merge2UnpipeEnd')
+  })
+
+  if (args.length) {
+    addStream.apply(null, args)
+  }
+  return mergedStream
+}
+
+// check and pause streams for pipe.
+function pauseStreams (streams, options) {
+  if (!Array.isArray(streams)) {
+    // Backwards-compat with old-style streams
+    if (!streams._readableState && streams.pipe) {
+      streams = streams.pipe(PassThrough(options))
+    }
+    if (!streams._readableState || !streams.pause || !streams.pipe) {
+      throw new Error('Only readable stream can be merged.')
+    }
+    streams.pause()
+  } else {
+    for (let i = 0, len = streams.length; i < len; i++) {
+      streams[i] = pauseStreams(streams[i], options)
+    }
+  }
+  return streams
+}
diff --git a/server/node_modules/merge2/package.json b/server/node_modules/merge2/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..5629a67e78e8463eac8e68ea14c05959903fc562
--- /dev/null
+++ b/server/node_modules/merge2/package.json
@@ -0,0 +1,72 @@
+{
+  "_from": "merge2@^1.3.0",
+  "_id": "merge2@1.4.1",
+  "_inBundle": false,
+  "_integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+  "_location": "/merge2",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "merge2@^1.3.0",
+    "name": "merge2",
+    "escapedName": "merge2",
+    "rawSpec": "^1.3.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.3.0"
+  },
+  "_requiredBy": [
+    "/fast-glob",
+    "/globby"
+  ],
+  "_resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+  "_shasum": "4368892f885e907455a6fd7dc55c0c9d404990ae",
+  "_spec": "merge2@^1.3.0",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\globby",
+  "authors": [
+    "Yan Qing <admin@zensh.com>"
+  ],
+  "bugs": {
+    "url": "https://github.com/teambition/merge2/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Merge multiple streams into one stream in sequence or parallel.",
+  "devDependencies": {
+    "standard": "^14.3.4",
+    "through2": "^3.0.1",
+    "thunks": "^4.9.6",
+    "tman": "^1.10.0",
+    "to-through": "^2.0.0"
+  },
+  "engines": {
+    "node": ">= 8"
+  },
+  "files": [
+    "README.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/teambition/merge2",
+  "keywords": [
+    "merge2",
+    "multiple",
+    "sequence",
+    "parallel",
+    "merge",
+    "stream",
+    "merge stream",
+    "sync"
+  ],
+  "license": "MIT",
+  "main": "./index.js",
+  "name": "merge2",
+  "repository": {
+    "type": "git",
+    "url": "git+ssh://git@github.com/teambition/merge2.git"
+  },
+  "scripts": {
+    "test": "standard && tman"
+  },
+  "version": "1.4.1"
+}
diff --git a/server/node_modules/micromatch/CHANGELOG.md b/server/node_modules/micromatch/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..25fa58c505398c9a7db476b885f757bb9231fcb2
--- /dev/null
+++ b/server/node_modules/micromatch/CHANGELOG.md
@@ -0,0 +1,108 @@
+# Release history
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+
+<details>
+  <summary><strong>Guiding Principles</strong></summary>
+
+- Changelogs are for humans, not machines.
+- There should be an entry for every single version.
+- The same types of changes should be grouped.
+- Versions and sections should be linkable.
+- The latest version comes first.
+- The release date of each versions is displayed.
+- Mention whether you follow Semantic Versioning.
+
+</details>
+
+<details>
+  <summary><strong>Types of changes</strong></summary>
+
+Changelog entries are classified using the following labels _(from [keep-a-changelog](http://keepachangelog.com/)_):
+
+- `Added` for new features.
+- `Changed` for changes in existing functionality.
+- `Deprecated` for soon-to-be removed features.
+- `Removed` for now removed features.
+- `Fixed` for any bug fixes.
+- `Security` in case of vulnerabilities.
+
+</details>
+
+## [4.0.0] - 2019-03-20
+
+### Added
+
+- Adds support for `options.onMatch`. See the readme for details
+- Adds support for `options.onIgnore`. See the readme for details
+- Adds support for `options.onResult`. See the readme for details
+
+
+### Breaking changes
+
+- Removed support for passing an array of brace patterns to `micromatch.braces()`.
+- To strictly enforce closing brackets (for `{`, `[`, and `(`), you must now use `strictBrackets=true` instead of `strictErrors`.   
+- `cache` - caching and all related options and methods have been removed
+- `options.unixify` was renamed to `options.windows`
+- `options.nodupes` Was removed. Duplicates are always removed by default. You can override this with custom behavior by using the `onMatch`, `onResult` and `onIgnore` functions.
+- `options.snapdragon` was removed, as snapdragon is no longer used.
+- `options.sourcemap` was removed, as snapdragon is no longer used, which provided sourcemap support.
+
+## [3.0.0] - 2017-04-11
+
+Complete overhaul, with 36,000+ new unit tests validated against actual output generated by Bash and minimatch. More specifically, 35,000+ of the tests:
+
+ - micromatch results are directly compared to bash results
+ - in rare cases, when micromatch and bash disagree, micromatch's results are compared to minimatch's results
+ - micromatch is much more accurate than minimatch, so there were cases where I had to make assumptions. I'll try to document these.
+
+This refactor introduces a parser and compiler that are supersets of more granular parsers and compilers from other sub-modules. Each of these sub-modules has a singular responsibility and focuses on a certain type of matching that aligns with a specific part of the Bash "expansion" API.
+
+These sub-modules work like plugins to seamlessly create the micromatch parser/compiler, so that strings are parsed in one pass, an [AST is created](https://gist.github.com/jonschlinkert/099c8914f56529f75bc757cc9e5e8e2a), then a new string is generated by the compiler.
+
+Here are those sub-modules with links to related prs on those modules if you want to see how they contribute to this code:
+
+[nanomatch](https://github.com/jonschlinkert/nanomatch) (new library) - glob expansion (`*`, `**`, `?` and `[...]`))
+[braces](https://github.com/jonschlinkert/braces/pull/10) - brace expansion (`{1..10}`, `{a,b,c}`, etc)
+[extglob](https://github.com/jonschlinkert/extglob/pull/5) - extended globs (`!(a|b)`, `@(!(foo|bar))`, etc)
+[expand-brackets](https://github.com/jonschlinkert/expand-brackets/pull/5) - POSIX character classes `[[:alpha:][:digit:]]`
+
+**Added**
+
+ - source map support (optionally created when using parse or compile - I have no idea what the use case is yet, but they come for free) (note that source maps are not generated for brace expansion at present, since the braces compiler uses a different strategy. I'll update if/when this changes). 
+ - parser is exposed, so that implementors can customize or override specific micromatch parsers if necessary
+ - compiler is exposed, so that implementors can customize or override specific micromatch compilers if necessary
+
+**Fixed**
+
+ - more accurate matching (passes 100% of Bash 4.3 of the brace expansion and extglob unit tests, as well as all Bash glob tests that are relevant to node.js usage, all minimatch tests, all brace-expansion tests, and also passes a couple of tests that bash fails)
+ - even safer - micromatch has always generated optimized patterns so it's not subject to DoS exploits like minimatch (completely different than the regex DoS issue, minimatch and multimatch are still openly exposed to being used for DoS attacks), but more safeguards were built into this refactor
+
+**Changed**
+
+ - the public API of this library did not change in this version and should be safe to upgrade without changing implentor code. However, we have released this as a major version for the following reasons:
+   - out of an abundance of caution due to the large amount of code changed in this release
+   - we have improved parser accuracy to such a degree that some implementors using invalid globs have noted change in behavior. If this is the case for you, please check that you are using a valid glob expression before logging a bug with this library
+
+## [1.0.1] - 2016-12-12
+
+**Added**
+
+- Support for windows path edge cases where backslashes are used in brackets or other unusual combinations.
+
+## [1.0.0] - 2016-12-12
+
+Stable release.
+
+## [0.1.0] - 2016-10-08
+
+First release.
+
+
+[Unreleased]: https://github.com/jonschlinkert/micromatch/compare/0.1.0...HEAD
+[0.2.0]: https://github.com/jonschlinkert/micromatch/compare/0.1.0...0.2.0
+
+[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog
diff --git a/server/node_modules/micromatch/LICENSE b/server/node_modules/micromatch/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..9af4a67d206f24ecdbb5fdff2839041ca0bbd346
--- /dev/null
+++ b/server/node_modules/micromatch/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-present, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/server/node_modules/micromatch/README.md b/server/node_modules/micromatch/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e38f7ca2ac9d8b9714c79abe9e64ae89bbb2bde5
--- /dev/null
+++ b/server/node_modules/micromatch/README.md
@@ -0,0 +1,1000 @@
+# micromatch [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W8YFZ425KND68) [![NPM version](https://img.shields.io/npm/v/micromatch.svg?style=flat)](https://www.npmjs.com/package/micromatch) [![NPM monthly downloads](https://img.shields.io/npm/dm/micromatch.svg?style=flat)](https://npmjs.org/package/micromatch) [![NPM total downloads](https://img.shields.io/npm/dt/micromatch.svg?style=flat)](https://npmjs.org/package/micromatch) [![Linux Build Status](https://img.shields.io/travis/micromatch/micromatch.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/micromatch)
+
+> Glob matching for javascript/node.js. A replacement and faster alternative to minimatch and multimatch.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Table of Contents
+
+<details>
+<summary><strong>Details</strong></summary>
+
+- [Install](#install)
+- [Quickstart](#quickstart)
+- [Why use micromatch?](#why-use-micromatch)
+  * [Matching features](#matching-features)
+- [Switching to micromatch](#switching-to-micromatch)
+  * [From minimatch](#from-minimatch)
+  * [From multimatch](#from-multimatch)
+- [API](#api)
+- [Options](#options)
+- [Options Examples](#options-examples)
+  * [options.basename](#optionsbasename)
+  * [options.bash](#optionsbash)
+  * [options.expandRange](#optionsexpandrange)
+  * [options.format](#optionsformat)
+  * [options.ignore](#optionsignore)
+  * [options.matchBase](#optionsmatchbase)
+  * [options.noextglob](#optionsnoextglob)
+  * [options.nonegate](#optionsnonegate)
+  * [options.noglobstar](#optionsnoglobstar)
+  * [options.nonull](#optionsnonull)
+  * [options.nullglob](#optionsnullglob)
+  * [options.onIgnore](#optionsonignore)
+  * [options.onMatch](#optionsonmatch)
+  * [options.onResult](#optionsonresult)
+  * [options.posixSlashes](#optionsposixslashes)
+  * [options.unescape](#optionsunescape)
+- [Extended globbing](#extended-globbing)
+  * [Extglobs](#extglobs)
+  * [Braces](#braces)
+  * [Regex character classes](#regex-character-classes)
+  * [Regex groups](#regex-groups)
+  * [POSIX bracket expressions](#posix-bracket-expressions)
+- [Notes](#notes)
+  * [Bash 4.3 parity](#bash-43-parity)
+  * [Backslashes](#backslashes)
+- [Benchmarks](#benchmarks)
+  * [Running benchmarks](#running-benchmarks)
+  * [Latest results](#latest-results)
+- [Contributing](#contributing)
+- [About](#about)
+
+</details>
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save micromatch
+```
+
+## Quickstart
+
+```js
+const micromatch = require('micromatch');
+// micromatch(list, patterns[, options]);
+```
+
+The [main export](#micromatch) takes a list of strings and one or more glob patterns:
+
+```js
+console.log(micromatch(['foo', 'bar', 'baz', 'qux'], ['f*', 'b*'])) //=> ['foo', 'bar', 'baz']
+console.log(micromatch(['foo', 'bar', 'baz', 'qux'], ['*', '!b*'])) //=> ['foo', 'qux']
+```
+
+Use [.isMatch()](#ismatch) to for boolean matching:
+
+```js
+console.log(micromatch.isMatch('foo', 'f*')) //=> true
+console.log(micromatch.isMatch('foo', ['b*', 'f*'])) //=> true
+```
+
+[Switching](#switching-to-micromatch) from minimatch and multimatch is easy!
+
+<br>
+
+## Why use micromatch?
+
+> micromatch is a [replacement](#switching-to-micromatch) for minimatch and multimatch
+
+* Supports all of the same matching features as [minimatch](https://github.com/isaacs/minimatch) and [multimatch](https://github.com/sindresorhus/multimatch)
+* More complete support for the Bash 4.3 specification than minimatch and multimatch. Micromatch passes _all of the spec tests_ from bash, including some that bash still fails.
+* **Fast & Performant** - Loads in about 5ms and performs [fast matches](#benchmarks).
+* **Glob matching** - Using wildcards (`*` and `?`), globstars (`**`) for nested directories
+* **[Advanced globbing](#advanced-globbing)** - Supports [extglobs](#extglobs), [braces](#braces), and [POSIX brackets](#posix-bracket-expressions), and support for escaping special characters with `\` or quotes.
+* **Accurate** - Covers more scenarios [than minimatch](https://github.com/yarnpkg/yarn/pull/3339)
+* **Well tested** - More than 5,000 [test assertions](./test)
+* **Windows support** - More reliable windows support than minimatch and multimatch.
+* **[Safe](https://github.com/micromatch/braces#braces-is-safe)** - Micromatch is not subject to DoS with brace patterns like minimatch and multimatch.
+
+### Matching features
+
+* Support for multiple glob patterns (no need for wrappers like multimatch)
+* Wildcards (`**`, `*.js`)
+* Negation (`'!a/*.js'`, `'*!(b).js']`)
+* [extglobs](#extglobs) (`+(x|y)`, `!(a|b)`)
+* [POSIX character classes](#posix-bracket-expressions) (`[[:alpha:][:digit:]]`)
+* [brace expansion](https://github.com/micromatch/braces) (`foo/{1..5}.md`, `bar/{a,b,c}.js`)
+* regex character classes (`foo-[1-5].js`)
+* regex logical "or" (`foo/(abc|xyz).js`)
+
+You can mix and match these features to create whatever patterns you need!
+
+## Switching to micromatch
+
+_(There is one notable difference between micromatch and minimatch in regards to how backslashes are handled. See [the notes about backslashes](#backslashes) for more information.)_
+
+### From minimatch
+
+Use [micromatch.isMatch()](#ismatch) instead of `minimatch()`:
+
+```js
+console.log(micromatch.isMatch('foo', 'b*')); //=> false
+```
+
+Use [micromatch.match()](#match) instead of `minimatch.match()`:
+
+```js
+console.log(micromatch.match(['foo', 'bar'], 'b*')); //=> 'bar'
+```
+
+### From multimatch
+
+Same signature:
+
+```js
+console.log(micromatch(['foo', 'bar', 'baz'], ['f*', '*z'])); //=> ['foo', 'baz']
+```
+
+## API
+
+**Params**
+
+* **{String|Array<string>}**: list List of strings to match.
+* **{String|Array<string>}**: patterns One or more glob patterns to use for matching.
+* **{Object}**: options See available [options](#options)
+* `returns` **{Array}**: Returns an array of matches
+
+**Example**
+
+```js
+const mm = require('micromatch');
+// mm(list, patterns[, options]);
+
+console.log(mm(['a.js', 'a.txt'], ['*.js']));
+//=> [ 'a.js' ]
+```
+
+### [.matcher](index.js#L98)
+
+Returns a matcher function from the given glob `pattern` and `options`. The returned function takes a string to match as its only argument and returns true if the string is a match.
+
+**Params**
+
+* `pattern` **{String}**: Glob pattern
+* `options` **{Object}**
+* `returns` **{Function}**: Returns a matcher function.
+
+**Example**
+
+```js
+const mm = require('micromatch');
+// mm.matcher(pattern[, options]);
+
+const isMatch = mm.matcher('*.!(*a)');
+console.log(isMatch('a.a')); //=> false
+console.log(isMatch('a.b')); //=> true
+```
+
+### [.isMatch](index.js#L117)
+
+Returns true if **any** of the given glob `patterns` match the specified `string`.
+
+**Params**
+
+* **{String}**: str The string to test.
+* **{String|Array}**: patterns One or more glob patterns to use for matching.
+* **{Object}**: See available [options](#options).
+* `returns` **{Boolean}**: Returns true if any patterns match `str`
+
+**Example**
+
+```js
+const mm = require('micromatch');
+// mm.isMatch(string, patterns[, options]);
+
+console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true
+console.log(mm.isMatch('a.a', 'b.*')); //=> false
+```
+
+### [.not](index.js#L136)
+
+Returns a list of strings that _**do not match any**_ of the given `patterns`.
+
+**Params**
+
+* `list` **{Array}**: Array of strings to match.
+* `patterns` **{String|Array}**: One or more glob pattern to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Array}**: Returns an array of strings that **do not match** the given patterns.
+
+**Example**
+
+```js
+const mm = require('micromatch');
+// mm.not(list, patterns[, options]);
+
+console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));
+//=> ['b.b', 'c.c']
+```
+
+### [.contains](index.js#L176)
+
+Returns true if the given `string` contains the given pattern. Similar to [.isMatch](#isMatch) but the pattern can match any part of the string.
+
+**Params**
+
+* `str` **{String}**: The string to match.
+* `patterns` **{String|Array}**: Glob pattern to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Boolean}**: Returns true if the patter matches any part of `str`.
+
+**Example**
+
+```js
+var mm = require('micromatch');
+// mm.contains(string, pattern[, options]);
+
+console.log(mm.contains('aa/bb/cc', '*b'));
+//=> true
+console.log(mm.contains('aa/bb/cc', '*d'));
+//=> false
+```
+
+### [.matchKeys](index.js#L218)
+
+Filter the keys of the given object with the given `glob` pattern and `options`. Does not attempt to match nested keys. If you need this feature, use [glob-object](https://github.com/jonschlinkert/glob-object) instead.
+
+**Params**
+
+* `object` **{Object}**: The object with keys to filter.
+* `patterns` **{String|Array}**: One or more glob patterns to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Object}**: Returns an object with only keys that match the given patterns.
+
+**Example**
+
+```js
+const mm = require('micromatch');
+// mm.matchKeys(object, patterns[, options]);
+
+const obj = { aa: 'a', ab: 'b', ac: 'c' };
+console.log(mm.matchKeys(obj, '*b'));
+//=> { ab: 'b' }
+```
+
+### [.some](index.js#L247)
+
+Returns true if some of the strings in the given `list` match any of the given glob `patterns`.
+
+**Params**
+
+* `list` **{String|Array}**: The string or array of strings to test. Returns as soon as the first match is found.
+* `patterns` **{String|Array}**: One or more glob patterns to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Boolean}**: Returns true if any patterns match `str`
+
+**Example**
+
+```js
+const mm = require('micromatch');
+// mm.some(list, patterns[, options]);
+
+console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
+// true
+console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));
+// false
+```
+
+### [.every](index.js#L283)
+
+Returns true if every string in the given `list` matches any of the given glob `patterns`.
+
+**Params**
+
+* `list` **{String|Array}**: The string or array of strings to test.
+* `patterns` **{String|Array}**: One or more glob patterns to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Boolean}**: Returns true if any patterns match `str`
+
+**Example**
+
+```js
+const mm = require('micromatch');
+// mm.every(list, patterns[, options]);
+
+console.log(mm.every('foo.js', ['foo.js']));
+// true
+console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));
+// true
+console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
+// false
+console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));
+// false
+```
+
+### [.all](index.js#L322)
+
+Returns true if **all** of the given `patterns` match the specified string.
+
+**Params**
+
+* `str` **{String|Array}**: The string to test.
+* `patterns` **{String|Array}**: One or more glob patterns to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Boolean}**: Returns true if any patterns match `str`
+
+**Example**
+
+```js
+const mm = require('micromatch');
+// mm.all(string, patterns[, options]);
+
+console.log(mm.all('foo.js', ['foo.js']));
+// true
+
+console.log(mm.all('foo.js', ['*.js', '!foo.js']));
+// false
+
+console.log(mm.all('foo.js', ['*.js', 'foo.js']));
+// true
+
+console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));
+// true
+```
+
+### [.capture](index.js#L349)
+
+Returns an array of matches captured by `pattern` in `string, or`null` if the pattern did not match.
+
+**Params**
+
+* `glob` **{String}**: Glob pattern to use for matching.
+* `input` **{String}**: String to match
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Boolean}**: Returns an array of captures if the input matches the glob pattern, otherwise `null`.
+
+**Example**
+
+```js
+const mm = require('micromatch');
+// mm.capture(pattern, string[, options]);
+
+console.log(mm.capture('test/*.js', 'test/foo.js'));
+//=> ['foo']
+console.log(mm.capture('test/*.js', 'foo/bar.css'));
+//=> null
+```
+
+### [.makeRe](index.js#L375)
+
+Create a regular expression from the given glob `pattern`.
+
+**Params**
+
+* `pattern` **{String}**: A glob pattern to convert to regex.
+* `options` **{Object}**
+* `returns` **{RegExp}**: Returns a regex created from the given pattern.
+
+**Example**
+
+```js
+const mm = require('micromatch');
+// mm.makeRe(pattern[, options]);
+
+console.log(mm.makeRe('*.js'));
+//=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/
+```
+
+### [.scan](index.js#L391)
+
+Scan a glob pattern to separate the pattern into segments. Used by the [split](#split) method.
+
+**Params**
+
+* `pattern` **{String}**
+* `options` **{Object}**
+* `returns` **{Object}**: Returns an object with
+
+**Example**
+
+```js
+const mm = require('micromatch');
+const state = mm.scan(pattern[, options]);
+```
+
+### [.parse](index.js#L407)
+
+Parse a glob pattern to create the source string for a regular expression.
+
+**Params**
+
+* `glob` **{String}**
+* `options` **{Object}**
+* `returns` **{Object}**: Returns an object with useful properties and output to be used as regex source string.
+
+**Example**
+
+```js
+const mm = require('micromatch');
+const state = mm(pattern[, options]);
+```
+
+### [.braces](index.js#L434)
+
+Process the given brace `pattern`.
+
+**Params**
+
+* `pattern` **{String}**: String with brace pattern to process.
+* `options` **{Object}**: Any [options](#options) to change how expansion is performed. See the [braces](https://github.com/micromatch/braces) library for all available options.
+* `returns` **{Array}**
+
+**Example**
+
+```js
+const { braces } = require('micromatch');
+console.log(braces('foo/{a,b,c}/bar'));
+//=> [ 'foo/(a|b|c)/bar' ]
+
+console.log(braces('foo/{a,b,c}/bar', { expand: true }));
+//=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]
+```
+
+## Options
+
+| **Option** | **Type** | **Default value** | **Description** |
+| --- | --- | --- | --- |
+| `basename`            | `boolean`      | `false`     | If set, then patterns without slashes will be matched against the basename of the path if it contains slashes.  For example, `a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. |
+| `bash`                | `boolean`      | `false`     | Follow bash matching rules more strictly - disallows backslashes as escape characters, and treats single stars as globstars (`**`). |
+| `capture`             | `boolean`      | `undefined` | Return regex matches in supporting methods. |
+| `contains`            | `boolean`      | `undefined` | Allows glob to match any part of the given string(s). |
+| `cwd`                 | `string`       | `process.cwd()` | Current working directory. Used by `picomatch.split()` |
+| `debug`               | `boolean`      | `undefined` | Debug regular expressions when an error is thrown. |
+| `dot`                 | `boolean`      | `false`     | Match dotfiles. Otherwise dotfiles are ignored unless a `.` is explicitly defined in the pattern. |
+| `expandRange`         | `function`     | `undefined` | Custom function for expanding ranges in brace patterns, such as `{a..z}`. The function receives the range values as two arguments, and it must return a string to be used in the generated regex. It's recommended that returned strings be wrapped in parentheses. This option is overridden by the `expandBrace` option. |
+| `failglob`            | `boolean`      | `false`     | Similar to the `failglob` behavior in Bash, throws an error when no matches are found. Based on the bash option of the same name. |
+| `fastpaths`           | `boolean`      | `true`      | To speed up processing, full parsing is skipped for a handful common glob patterns. Disable this behavior by setting this option to `false`. |
+| `flags`               | `boolean`      | `undefined` | Regex flags to use in the generated regex. If defined, the `nocase` option will be overridden. |
+| [format](#optionsformat) | `function` | `undefined` | Custom function for formatting the returned string. This is useful for removing leading slashes, converting Windows paths to Posix paths, etc. |
+| `ignore`              | `array\|string` | `undefined` | One or more glob patterns for excluding strings that should not be matched from the result. |
+| `keepQuotes`          | `boolean`      | `false`     | Retain quotes in the generated regex, since quotes may also be used as an alternative to backslashes.  |
+| `literalBrackets`     | `boolean`      | `undefined` | When `true`, brackets in the glob pattern will be escaped so that only literal brackets will be matched. |
+| `lookbehinds`         | `boolean`      | `true`      | Support regex positive and negative lookbehinds. Note that you must be using Node 8.1.10 or higher to enable regex lookbehinds. |
+| `matchBase`           | `boolean`      | `false`     | Alias for `basename` |
+| `maxLength`           | `boolean`      | `65536`     | Limit the max length of the input string. An error is thrown if the input string is longer than this value. |
+| `nobrace`             | `boolean`      | `false`     | Disable brace matching, so that `{a,b}` and `{1..3}` would be treated as literal characters. |
+| `nobracket`           | `boolean`      | `undefined` | Disable matching with regex brackets. |
+| `nocase`              | `boolean`      | `false`     | Perform case-insensitive matching. Equivalent to the regex `i` flag. Note that this option is ignored when the `flags` option is defined. |
+| `nodupes`             | `boolean`      | `true`      | Deprecated, use `nounique` instead. This option will be removed in a future major release. By default duplicates are removed. Disable uniquification by setting this option to false. |
+| `noext`               | `boolean`      | `false`     | Alias for `noextglob` |
+| `noextglob`           | `boolean`      | `false`     | Disable support for matching with [extglobs](#extglobs) (like `+(a\|b)`) |
+| `noglobstar`          | `boolean`      | `false`     | Disable support for matching nested directories with globstars (`**`) |
+| `nonegate`            | `boolean`      | `false`     | Disable support for negating with leading `!` |
+| `noquantifiers`       | `boolean`      | `false`     | Disable support for regex quantifiers (like `a{1,2}`) and treat them as brace patterns to be expanded. |
+| [onIgnore](#optionsonIgnore) | `function` | `undefined` | Function to be called on ignored items. |
+| [onMatch](#optionsonMatch) | `function` | `undefined` | Function to be called on matched items. |
+| [onResult](#optionsonResult) | `function` | `undefined` | Function to be called on all items, regardless of whether or not they are matched or ignored. |
+| `posix`               | `boolean`      | `false`     | Support [POSIX character classes](#posix-bracket-expressions) ("posix brackets"). |
+| `posixSlashes`        | `boolean`      | `undefined` | Convert all slashes in file paths to forward slashes. This does not convert slashes in the glob pattern itself |
+| `prepend`             | `boolean`      | `undefined` | String to prepend to the generated regex used for matching. |
+| `regex`               | `boolean`      | `false`     | Use regular expression rules for `+` (instead of matching literal `+`), and for stars that follow closing parentheses or brackets (as in `)*` and `]*`). |
+| `strictBrackets`      | `boolean`      | `undefined` | Throw an error if brackets, braces, or parens are imbalanced. |
+| `strictSlashes`       | `boolean`      | `undefined` | When true, picomatch won't match trailing slashes with single stars. |
+| `unescape`            | `boolean`      | `undefined` | Remove preceding backslashes from escaped glob characters before creating the regular expression to perform matches. |
+| `unixify`             | `boolean`      | `undefined` | Alias for `posixSlashes`, for backwards compatitibility. |
+
+## Options Examples
+
+### options.basename
+
+Allow glob patterns without slashes to match a file path based on its basename. Same behavior as [minimatch](https://github.com/isaacs/minimatch) option `matchBase`.
+
+**Type**: `Boolean`
+
+**Default**: `false`
+
+**Example**
+
+```js
+micromatch(['a/b.js', 'a/c.md'], '*.js');
+//=> []
+
+micromatch(['a/b.js', 'a/c.md'], '*.js', { basename: true });
+//=> ['a/b.js']
+```
+
+### options.bash
+
+Enabled by default, this option enforces bash-like behavior with stars immediately following a bracket expression. Bash bracket expressions are similar to regex character classes, but unlike regex, a star following a bracket expression **does not repeat the bracketed characters**. Instead, the star is treated the same as any other star.
+
+**Type**: `Boolean`
+
+**Default**: `true`
+
+**Example**
+
+```js
+const files = ['abc', 'ajz'];
+console.log(micromatch(files, '[a-c]*'));
+//=> ['abc', 'ajz']
+
+console.log(micromatch(files, '[a-c]*', { bash: false }));
+```
+
+### options.expandRange
+
+**Type**: `function`
+
+**Default**: `undefined`
+
+Custom function for expanding ranges in brace patterns. The [fill-range](https://github.com/jonschlinkert/fill-range) library is ideal for this purpose, or you can use custom code to do whatever you need.
+
+**Example**
+
+The following example shows how to create a glob that matches a numeric folder name between `01` and `25`, with leading zeros.
+
+```js
+const fill = require('fill-range');
+const regex = micromatch.makeRe('foo/{01..25}/bar', {
+  expandRange(a, b) {
+    return `(${fill(a, b, { toRegex: true })})`;
+  }
+});
+
+console.log(regex)
+//=> /^(?:foo\/((?:0[1-9]|1[0-9]|2[0-5]))\/bar)$/
+
+console.log(regex.test('foo/00/bar')) // false
+console.log(regex.test('foo/01/bar')) // true
+console.log(regex.test('foo/10/bar')) // true
+console.log(regex.test('foo/22/bar')) // true
+console.log(regex.test('foo/25/bar')) // true
+console.log(regex.test('foo/26/bar')) // false
+```
+
+### options.format
+
+**Type**: `function`
+
+**Default**: `undefined`
+
+Custom function for formatting strings before they're matched.
+
+**Example**
+
+```js
+// strip leading './' from strings
+const format = str => str.replace(/^\.\//, '');
+const isMatch = picomatch('foo/*.js', { format });
+console.log(isMatch('./foo/bar.js')) //=> true
+```
+
+### options.ignore
+
+String or array of glob patterns to match files to ignore.
+
+**Type**: `String|Array`
+
+**Default**: `undefined`
+
+```js
+const isMatch = micromatch.matcher('*', { ignore: 'f*' });
+console.log(isMatch('foo')) //=> false
+console.log(isMatch('bar')) //=> true
+console.log(isMatch('baz')) //=> true
+```
+
+### options.matchBase
+
+Alias for [options.basename](#options-basename).
+
+### options.noextglob
+
+Disable extglob support, so that [extglobs](#extglobs) are regarded as literal characters.
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+**Examples**
+
+```js
+console.log(micromatch(['a/z', 'a/b', 'a/!(z)'], 'a/!(z)'));
+//=> ['a/b', 'a/!(z)']
+
+console.log(micromatch(['a/z', 'a/b', 'a/!(z)'], 'a/!(z)', { noextglob: true }));
+//=> ['a/!(z)'] (matches only as literal characters)
+```
+
+### options.nonegate
+
+Disallow negation (`!`) patterns, and treat leading `!` as a literal character to match.
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+### options.noglobstar
+
+Disable matching with globstars (`**`).
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+```js
+micromatch(['a/b', 'a/b/c', 'a/b/c/d'], 'a/**');
+//=> ['a/b', 'a/b/c', 'a/b/c/d']
+
+micromatch(['a/b', 'a/b/c', 'a/b/c/d'], 'a/**', {noglobstar: true});
+//=> ['a/b']
+```
+
+### options.nonull
+
+Alias for [options.nullglob](#options-nullglob).
+
+### options.nullglob
+
+If `true`, when no matches are found the actual (arrayified) glob pattern is returned instead of an empty array. Same behavior as [minimatch](https://github.com/isaacs/minimatch) option `nonull`.
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+### options.onIgnore
+
+```js
+const onIgnore = ({ glob, regex, input, output }) => {
+  console.log({ glob, regex, input, output });
+  // { glob: '*', regex: /^(?:(?!\.)(?=.)[^\/]*?\/?)$/, input: 'foo', output: 'foo' }
+};
+
+const isMatch = micromatch.matcher('*', { onIgnore, ignore: 'f*' });
+isMatch('foo');
+isMatch('bar');
+isMatch('baz');
+```
+
+### options.onMatch
+
+```js
+const onMatch = ({ glob, regex, input, output }) => {
+  console.log({ input, output });
+  // { input: 'some\\path', output: 'some/path' }
+  // { input: 'some\\path', output: 'some/path' }
+  // { input: 'some\\path', output: 'some/path' }
+};
+
+const isMatch = micromatch.matcher('**', { onMatch, posixSlashes: true });
+isMatch('some\\path');
+isMatch('some\\path');
+isMatch('some\\path');
+```
+
+### options.onResult
+
+```js
+const onResult = ({ glob, regex, input, output }) => {
+  console.log({ glob, regex, input, output });
+};
+
+const isMatch = micromatch('*', { onResult, ignore: 'f*' });
+isMatch('foo');
+isMatch('bar');
+isMatch('baz');
+```
+
+### options.posixSlashes
+
+Convert path separators on returned files to posix/unix-style forward slashes. Aliased as `unixify` for backwards compatibility.
+
+**Type**: `Boolean`
+
+**Default**: `true` on windows, `false` everywhere else.
+
+**Example**
+
+```js
+console.log(micromatch.match(['a\\b\\c'], 'a/**'));
+//=> ['a/b/c']
+
+console.log(micromatch.match(['a\\b\\c'], { posixSlashes: false }));
+//=> ['a\\b\\c']
+```
+
+### options.unescape
+
+Remove backslashes from escaped glob characters before creating the regular expression to perform matches.
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+**Example**
+
+In this example we want to match a literal `*`:
+
+```js
+console.log(micromatch.match(['abc', 'a\\*c'], 'a\\*c'));
+//=> ['a\\*c']
+
+console.log(micromatch.match(['abc', 'a\\*c'], 'a\\*c', { unescape: true }));
+//=> ['a*c']
+```
+
+<br>
+<br>
+
+## Extended globbing
+
+Micromatch supports the following extended globbing features.
+
+### Extglobs
+
+Extended globbing, as described by the bash man page:
+
+| **pattern** | **regex equivalent** | **description** |
+| --- | --- | --- |
+| `?(pattern)` | `(pattern)?` | Matches zero or one occurrence of the given patterns |
+| `*(pattern)` | `(pattern)*` | Matches zero or more occurrences of the given patterns |
+| `+(pattern)` | `(pattern)+` | Matches one or more occurrences of the given patterns |
+| `@(pattern)` | `(pattern)` <sup>*</sup> | Matches one of the given patterns |
+| `!(pattern)` | N/A (equivalent regex is much more complicated) | Matches anything except one of the given patterns |
+
+<sup><strong>*</strong></sup> Note that `@` isn't a regex character.
+
+### Braces
+
+Brace patterns can be used to match specific ranges or sets of characters.
+
+**Example**
+
+The pattern `{f,b}*/{1..3}/{b,q}*` would match any of following strings:
+
+```
+foo/1/bar
+foo/2/bar
+foo/3/bar
+baz/1/qux
+baz/2/qux
+baz/3/qux
+```
+
+Visit [braces](https://github.com/micromatch/braces) to see the full range of features and options related to brace expansion, or to create brace matching or expansion related issues.
+
+### Regex character classes
+
+Given the list: `['a.js', 'b.js', 'c.js', 'd.js', 'E.js']`:
+
+* `[ac].js`: matches both `a` and `c`, returning `['a.js', 'c.js']`
+* `[b-d].js`: matches from `b` to `d`, returning `['b.js', 'c.js', 'd.js']`
+* `[b-d].js`: matches from `b` to `d`, returning `['b.js', 'c.js', 'd.js']`
+* `a/[A-Z].js`: matches and uppercase letter, returning `['a/E.md']`
+
+Learn about [regex character classes](http://www.regular-expressions.info/charclass.html).
+
+### Regex groups
+
+Given `['a.js', 'b.js', 'c.js', 'd.js', 'E.js']`:
+
+* `(a|c).js`: would match either `a` or `c`, returning `['a.js', 'c.js']`
+* `(b|d).js`: would match either `b` or `d`, returning `['b.js', 'd.js']`
+* `(b|[A-Z]).js`: would match either `b` or an uppercase letter, returning `['b.js', 'E.js']`
+
+As with regex, parens can be nested, so patterns like `((a|b)|c)/b` will work. Although brace expansion might be friendlier to use, depending on preference.
+
+### POSIX bracket expressions
+
+POSIX brackets are intended to be more user-friendly than regex character classes. This of course is in the eye of the beholder.
+
+**Example**
+
+```js
+console.log(micromatch.isMatch('a1', '[[:alpha:][:digit:]]')) //=> true
+console.log(micromatch.isMatch('a1', '[[:alpha:][:alpha:]]')) //=> false
+```
+
+***
+
+## Notes
+
+### Bash 4.3 parity
+
+Whenever possible matching behavior is based on behavior Bash 4.3, which is mostly consistent with minimatch.
+
+However, it's suprising how many edge cases and rabbit holes there are with glob matching, and since there is no real glob specification, and micromatch is more accurate than both Bash and minimatch, there are cases where best-guesses were made for behavior. In a few cases where Bash had no answers, we used wildmatch (used by git) as a fallback.
+
+### Backslashes
+
+There is an important, notable difference between minimatch and micromatch _in regards to how backslashes are handled_ in glob patterns.
+
+* Micromatch exclusively and explicitly reserves backslashes for escaping characters in a glob pattern, even on windows, which is consistent with bash behavior. _More importantly, unescaping globs can result in unsafe regular expressions_.
+* Minimatch converts all backslashes to forward slashes, which means you can't use backslashes to escape any characters in your glob patterns.
+
+We made this decision for micromatch for a couple of reasons:
+
+* Consistency with bash conventions.
+* Glob patterns are not filepaths. They are a type of [regular language](https://en.wikipedia.org/wiki/Regular_language) that is converted to a JavaScript regular expression. Thus, when forward slashes are defined in a glob pattern, the resulting regular expression will match windows or POSIX path separators just fine.
+
+**A note about joining paths to globs**
+
+Note that when you pass something like `path.join('foo', '*')` to micromatch, you are creating a filepath and expecting it to still work as a glob pattern. This causes problems on windows, since the `path.sep` is `\\`.
+
+In other words, since `\\` is reserved as an escape character in globs, on windows `path.join('foo', '*')` would result in `foo\\*`, which tells micromatch to match `*` as a literal character. This is the same behavior as bash.
+
+To solve this, you might be inspired to do something like `'foo\\*'.replace(/\\/g, '/')`, but this causes another, potentially much more serious, problem.
+
+## Benchmarks
+
+### Running benchmarks
+
+Install dependencies for running benchmarks:
+
+```sh
+$ cd bench && npm install 
+```
+
+Run the benchmarks:
+
+```sh
+$ npm run bench
+```
+
+### Latest results
+
+As of April 10, 2019 (longer bars are better):
+
+```sh
+# .makeRe star
+  micromatch x 1,724,735 ops/sec ±1.69% (87 runs sampled))
+  minimatch x 649,565 ops/sec ±1.93% (91 runs sampled)
+
+# .makeRe star; dot=true
+  micromatch x 1,302,127 ops/sec ±1.43% (92 runs sampled)
+  minimatch x 556,242 ops/sec ±0.71% (86 runs sampled)
+
+# .makeRe globstar
+  micromatch x 1,393,992 ops/sec ±0.71% (89 runs sampled)
+  minimatch x 1,112,801 ops/sec ±2.02% (91 runs sampled)
+
+# .makeRe globstars
+  micromatch x 1,419,097 ops/sec ±0.34% (94 runs sampled)
+  minimatch x 541,207 ops/sec ±1.66% (93 runs sampled)
+
+# .makeRe with leading star
+  micromatch x 1,247,825 ops/sec ±0.97% (94 runs sampled)
+  minimatch x 489,660 ops/sec ±0.63% (94 runs sampled)
+
+# .makeRe - braces
+  micromatch x 206,301 ops/sec ±1.62% (81 runs sampled))
+  minimatch x 115,986 ops/sec ±0.59% (94 runs sampled)
+
+# .makeRe braces - range (expanded)
+  micromatch x 27,782 ops/sec ±0.79% (88 runs sampled)
+  minimatch x 4,683 ops/sec ±1.20% (92 runs sampled)
+
+# .makeRe braces - range (compiled)
+  micromatch x 134,056 ops/sec ±2.73% (77 runs sampled))
+  minimatch x 977 ops/sec ±0.85% (91 runs sampled)d)
+
+# .makeRe braces - nested ranges (expanded)
+  micromatch x 18,353 ops/sec ±0.95% (91 runs sampled)
+  minimatch x 4,514 ops/sec ±1.04% (93 runs sampled)
+
+# .makeRe braces - nested ranges (compiled)
+  micromatch x 38,916 ops/sec ±1.85% (82 runs sampled)
+  minimatch x 980 ops/sec ±0.54% (93 runs sampled)d)
+
+# .makeRe braces - set (compiled)
+  micromatch x 141,088 ops/sec ±1.70% (70 runs sampled))
+  minimatch x 43,385 ops/sec ±0.87% (93 runs sampled)
+
+# .makeRe braces - nested sets (compiled)
+  micromatch x 87,272 ops/sec ±2.85% (71 runs sampled))
+  minimatch x 25,327 ops/sec ±1.59% (86 runs sampled)
+```
+
+## Contributing
+
+All contributions are welcome! Please read [the contributing guide](.github/contributing.md) to get started.
+
+**Bug reports**
+
+Please create an issue if you encounter a bug or matching behavior that doesn't seem correct. If you find a matching-related issue, please:
+
+* [research existing issues first](../../issues) (open and closed)
+* visit the [GNU Bash documentation](https://www.gnu.org/software/bash/manual/) to see how Bash deals with the pattern
+* visit the [minimatch](https://github.com/isaacs/minimatch) documentation to cross-check expected behavior in node.js
+* if all else fails, since there is no real specification for globs we will probably need to discuss expected behavior and decide how to resolve it. which means any detail you can provide to help with this discussion would be greatly appreciated.
+
+**Platform issues**
+
+It's important to us that micromatch work consistently on all platforms. If you encounter any platform-specific matching or path related issues, please let us know (pull requests are also greatly appreciated).
+
+## About
+
+<details>
+<summary><strong>Contributing</strong></summary>
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+Please read the [contributing guide](.github/contributing.md) for advice on opening issues, pull requests, and coding standards.
+
+</details>
+
+<details>
+<summary><strong>Running Tests</strong></summary>
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+</details>
+
+<details>
+<summary><strong>Building docs</strong></summary>
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+</details>
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [braces](https://www.npmjs.com/package/braces): Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support… [more](https://github.com/micromatch/braces) | [homepage](https://github.com/micromatch/braces "Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.")
+* [expand-brackets](https://www.npmjs.com/package/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. | [homepage](https://github.com/micromatch/expand-brackets "Expand POSIX bracket expressions (character classes) in glob patterns.")
+* [extglob](https://www.npmjs.com/package/extglob): Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob… [more](https://github.com/micromatch/extglob) | [homepage](https://github.com/micromatch/extglob "Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob patterns.")
+* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or `step` to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`")
+* [nanomatch](https://www.npmjs.com/package/nanomatch): Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash… [more](https://github.com/micromatch/nanomatch) | [homepage](https://github.com/micromatch/nanomatch "Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash 4.3 wildcard support only (no support for exglobs, posix brackets or braces)")
+
+### Contributors
+
+| **Commits** | **Contributor** |  
+| --- | --- |  
+| 475 | [jonschlinkert](https://github.com/jonschlinkert) |  
+| 12  | [es128](https://github.com/es128) |  
+| 8   | [doowb](https://github.com/doowb) |  
+| 3   | [paulmillr](https://github.com/paulmillr) |  
+| 2   | [TrySound](https://github.com/TrySound) |  
+| 2   | [MartinKolarik](https://github.com/MartinKolarik) |  
+| 2   | [Tvrqvoise](https://github.com/Tvrqvoise) |  
+| 2   | [tunnckoCore](https://github.com/tunnckoCore) |  
+| 1   | [amilajack](https://github.com/amilajack) |  
+| 1   | [mrmlnc](https://github.com/mrmlnc) |  
+| 1   | [devongovett](https://github.com/devongovett) |  
+| 1   | [DianeLooney](https://github.com/DianeLooney) |  
+| 1   | [UltCombo](https://github.com/UltCombo) |  
+| 1   | [tomByrer](https://github.com/tomByrer) |  
+| 1   | [fidian](https://github.com/fidian) |  
+| 1   | [simlu](https://github.com/simlu) |  
+| 1   | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |  
+
+### Author
+
+**Jon Schlinkert**
+
+* [GitHub Profile](https://github.com/jonschlinkert)
+* [Twitter Profile](https://twitter.com/jonschlinkert)
+* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)
+
+### License
+
+Copyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on April 10, 2019._
\ No newline at end of file
diff --git a/server/node_modules/micromatch/index.js b/server/node_modules/micromatch/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..1d5b3d1cb26d3132ecbbc4265c045116484dbe11
--- /dev/null
+++ b/server/node_modules/micromatch/index.js
@@ -0,0 +1,467 @@
+'use strict';
+
+const util = require('util');
+const braces = require('braces');
+const picomatch = require('picomatch');
+const utils = require('picomatch/lib/utils');
+const isEmptyString = val => typeof val === 'string' && (val === '' || val === './');
+
+/**
+ * Returns an array of strings that match one or more glob patterns.
+ *
+ * ```js
+ * const mm = require('micromatch');
+ * // mm(list, patterns[, options]);
+ *
+ * console.log(mm(['a.js', 'a.txt'], ['*.js']));
+ * //=> [ 'a.js' ]
+ * ```
+ * @param {String|Array<string>} list List of strings to match.
+ * @param {String|Array<string>} patterns One or more glob patterns to use for matching.
+ * @param {Object} options See available [options](#options)
+ * @return {Array} Returns an array of matches
+ * @summary false
+ * @api public
+ */
+
+const micromatch = (list, patterns, options) => {
+  patterns = [].concat(patterns);
+  list = [].concat(list);
+
+  let omit = new Set();
+  let keep = new Set();
+  let items = new Set();
+  let negatives = 0;
+
+  let onResult = state => {
+    items.add(state.output);
+    if (options && options.onResult) {
+      options.onResult(state);
+    }
+  };
+
+  for (let i = 0; i < patterns.length; i++) {
+    let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);
+    let negated = isMatch.state.negated || isMatch.state.negatedExtglob;
+    if (negated) negatives++;
+
+    for (let item of list) {
+      let matched = isMatch(item, true);
+
+      let match = negated ? !matched.isMatch : matched.isMatch;
+      if (!match) continue;
+
+      if (negated) {
+        omit.add(matched.output);
+      } else {
+        omit.delete(matched.output);
+        keep.add(matched.output);
+      }
+    }
+  }
+
+  let result = negatives === patterns.length ? [...items] : [...keep];
+  let matches = result.filter(item => !omit.has(item));
+
+  if (options && matches.length === 0) {
+    if (options.failglob === true) {
+      throw new Error(`No matches found for "${patterns.join(', ')}"`);
+    }
+
+    if (options.nonull === true || options.nullglob === true) {
+      return options.unescape ? patterns.map(p => p.replace(/\\/g, '')) : patterns;
+    }
+  }
+
+  return matches;
+};
+
+/**
+ * Backwards compatibility
+ */
+
+micromatch.match = micromatch;
+
+/**
+ * Returns a matcher function from the given glob `pattern` and `options`.
+ * The returned function takes a string to match as its only argument and returns
+ * true if the string is a match.
+ *
+ * ```js
+ * const mm = require('micromatch');
+ * // mm.matcher(pattern[, options]);
+ *
+ * const isMatch = mm.matcher('*.!(*a)');
+ * console.log(isMatch('a.a')); //=> false
+ * console.log(isMatch('a.b')); //=> true
+ * ```
+ * @param {String} `pattern` Glob pattern
+ * @param {Object} `options`
+ * @return {Function} Returns a matcher function.
+ * @api public
+ */
+
+micromatch.matcher = (pattern, options) => picomatch(pattern, options);
+
+/**
+ * Returns true if **any** of the given glob `patterns` match the specified `string`.
+ *
+ * ```js
+ * const mm = require('micromatch');
+ * // mm.isMatch(string, patterns[, options]);
+ *
+ * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true
+ * console.log(mm.isMatch('a.a', 'b.*')); //=> false
+ * ```
+ * @param {String} str The string to test.
+ * @param {String|Array} patterns One or more glob patterns to use for matching.
+ * @param {Object} [options] See available [options](#options).
+ * @return {Boolean} Returns true if any patterns match `str`
+ * @api public
+ */
+
+micromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
+
+/**
+ * Backwards compatibility
+ */
+
+micromatch.any = micromatch.isMatch;
+
+/**
+ * Returns a list of strings that _**do not match any**_ of the given `patterns`.
+ *
+ * ```js
+ * const mm = require('micromatch');
+ * // mm.not(list, patterns[, options]);
+ *
+ * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));
+ * //=> ['b.b', 'c.c']
+ * ```
+ * @param {Array} `list` Array of strings to match.
+ * @param {String|Array} `patterns` One or more glob pattern to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Array} Returns an array of strings that **do not match** the given patterns.
+ * @api public
+ */
+
+micromatch.not = (list, patterns, options = {}) => {
+  patterns = [].concat(patterns).map(String);
+  let result = new Set();
+  let items = [];
+
+  let onResult = state => {
+    if (options.onResult) options.onResult(state);
+    items.push(state.output);
+  };
+
+  let matches = micromatch(list, patterns, { ...options, onResult });
+
+  for (let item of items) {
+    if (!matches.includes(item)) {
+      result.add(item);
+    }
+  }
+  return [...result];
+};
+
+/**
+ * Returns true if the given `string` contains the given pattern. Similar
+ * to [.isMatch](#isMatch) but the pattern can match any part of the string.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * // mm.contains(string, pattern[, options]);
+ *
+ * console.log(mm.contains('aa/bb/cc', '*b'));
+ * //=> true
+ * console.log(mm.contains('aa/bb/cc', '*d'));
+ * //=> false
+ * ```
+ * @param {String} `str` The string to match.
+ * @param {String|Array} `patterns` Glob pattern to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Boolean} Returns true if the patter matches any part of `str`.
+ * @api public
+ */
+
+micromatch.contains = (str, pattern, options) => {
+  if (typeof str !== 'string') {
+    throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
+  }
+
+  if (Array.isArray(pattern)) {
+    return pattern.some(p => micromatch.contains(str, p, options));
+  }
+
+  if (typeof pattern === 'string') {
+    if (isEmptyString(str) || isEmptyString(pattern)) {
+      return false;
+    }
+
+    if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {
+      return true;
+    }
+  }
+
+  return micromatch.isMatch(str, pattern, { ...options, contains: true });
+};
+
+/**
+ * Filter the keys of the given object with the given `glob` pattern
+ * and `options`. Does not attempt to match nested keys. If you need this feature,
+ * use [glob-object][] instead.
+ *
+ * ```js
+ * const mm = require('micromatch');
+ * // mm.matchKeys(object, patterns[, options]);
+ *
+ * const obj = { aa: 'a', ab: 'b', ac: 'c' };
+ * console.log(mm.matchKeys(obj, '*b'));
+ * //=> { ab: 'b' }
+ * ```
+ * @param {Object} `object` The object with keys to filter.
+ * @param {String|Array} `patterns` One or more glob patterns to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Object} Returns an object with only keys that match the given patterns.
+ * @api public
+ */
+
+micromatch.matchKeys = (obj, patterns, options) => {
+  if (!utils.isObject(obj)) {
+    throw new TypeError('Expected the first argument to be an object');
+  }
+  let keys = micromatch(Object.keys(obj), patterns, options);
+  let res = {};
+  for (let key of keys) res[key] = obj[key];
+  return res;
+};
+
+/**
+ * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.
+ *
+ * ```js
+ * const mm = require('micromatch');
+ * // mm.some(list, patterns[, options]);
+ *
+ * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
+ * // true
+ * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));
+ * // false
+ * ```
+ * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.
+ * @param {String|Array} `patterns` One or more glob patterns to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Boolean} Returns true if any patterns match `str`
+ * @api public
+ */
+
+micromatch.some = (list, patterns, options) => {
+  let items = [].concat(list);
+
+  for (let pattern of [].concat(patterns)) {
+    let isMatch = picomatch(String(pattern), options);
+    if (items.some(item => isMatch(item))) {
+      return true;
+    }
+  }
+  return false;
+};
+
+/**
+ * Returns true if every string in the given `list` matches
+ * any of the given glob `patterns`.
+ *
+ * ```js
+ * const mm = require('micromatch');
+ * // mm.every(list, patterns[, options]);
+ *
+ * console.log(mm.every('foo.js', ['foo.js']));
+ * // true
+ * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));
+ * // true
+ * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
+ * // false
+ * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));
+ * // false
+ * ```
+ * @param {String|Array} `list` The string or array of strings to test.
+ * @param {String|Array} `patterns` One or more glob patterns to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Boolean} Returns true if any patterns match `str`
+ * @api public
+ */
+
+micromatch.every = (list, patterns, options) => {
+  let items = [].concat(list);
+
+  for (let pattern of [].concat(patterns)) {
+    let isMatch = picomatch(String(pattern), options);
+    if (!items.every(item => isMatch(item))) {
+      return false;
+    }
+  }
+  return true;
+};
+
+/**
+ * Returns true if **all** of the given `patterns` match
+ * the specified string.
+ *
+ * ```js
+ * const mm = require('micromatch');
+ * // mm.all(string, patterns[, options]);
+ *
+ * console.log(mm.all('foo.js', ['foo.js']));
+ * // true
+ *
+ * console.log(mm.all('foo.js', ['*.js', '!foo.js']));
+ * // false
+ *
+ * console.log(mm.all('foo.js', ['*.js', 'foo.js']));
+ * // true
+ *
+ * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));
+ * // true
+ * ```
+ * @param {String|Array} `str` The string to test.
+ * @param {String|Array} `patterns` One or more glob patterns to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Boolean} Returns true if any patterns match `str`
+ * @api public
+ */
+
+micromatch.all = (str, patterns, options) => {
+  if (typeof str !== 'string') {
+    throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
+  }
+
+  return [].concat(patterns).every(p => picomatch(p, options)(str));
+};
+
+/**
+ * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.
+ *
+ * ```js
+ * const mm = require('micromatch');
+ * // mm.capture(pattern, string[, options]);
+ *
+ * console.log(mm.capture('test/*.js', 'test/foo.js'));
+ * //=> ['foo']
+ * console.log(mm.capture('test/*.js', 'foo/bar.css'));
+ * //=> null
+ * ```
+ * @param {String} `glob` Glob pattern to use for matching.
+ * @param {String} `input` String to match
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Boolean} Returns an array of captures if the input matches the glob pattern, otherwise `null`.
+ * @api public
+ */
+
+micromatch.capture = (glob, input, options) => {
+  let posix = utils.isWindows(options);
+  let regex = picomatch.makeRe(String(glob), { ...options, capture: true });
+  let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);
+
+  if (match) {
+    return match.slice(1).map(v => v === void 0 ? '' : v);
+  }
+};
+
+/**
+ * Create a regular expression from the given glob `pattern`.
+ *
+ * ```js
+ * const mm = require('micromatch');
+ * // mm.makeRe(pattern[, options]);
+ *
+ * console.log(mm.makeRe('*.js'));
+ * //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/
+ * ```
+ * @param {String} `pattern` A glob pattern to convert to regex.
+ * @param {Object} `options`
+ * @return {RegExp} Returns a regex created from the given pattern.
+ * @api public
+ */
+
+micromatch.makeRe = (...args) => picomatch.makeRe(...args);
+
+/**
+ * Scan a glob pattern to separate the pattern into segments. Used
+ * by the [split](#split) method.
+ *
+ * ```js
+ * const mm = require('micromatch');
+ * const state = mm.scan(pattern[, options]);
+ * ```
+ * @param {String} `pattern`
+ * @param {Object} `options`
+ * @return {Object} Returns an object with
+ * @api public
+ */
+
+micromatch.scan = (...args) => picomatch.scan(...args);
+
+/**
+ * Parse a glob pattern to create the source string for a regular
+ * expression.
+ *
+ * ```js
+ * const mm = require('micromatch');
+ * const state = mm(pattern[, options]);
+ * ```
+ * @param {String} `glob`
+ * @param {Object} `options`
+ * @return {Object} Returns an object with useful properties and output to be used as regex source string.
+ * @api public
+ */
+
+micromatch.parse = (patterns, options) => {
+  let res = [];
+  for (let pattern of [].concat(patterns || [])) {
+    for (let str of braces(String(pattern), options)) {
+      res.push(picomatch.parse(str, options));
+    }
+  }
+  return res;
+};
+
+/**
+ * Process the given brace `pattern`.
+ *
+ * ```js
+ * const { braces } = require('micromatch');
+ * console.log(braces('foo/{a,b,c}/bar'));
+ * //=> [ 'foo/(a|b|c)/bar' ]
+ *
+ * console.log(braces('foo/{a,b,c}/bar', { expand: true }));
+ * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]
+ * ```
+ * @param {String} `pattern` String with brace pattern to process.
+ * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.
+ * @return {Array}
+ * @api public
+ */
+
+micromatch.braces = (pattern, options) => {
+  if (typeof pattern !== 'string') throw new TypeError('Expected a string');
+  if ((options && options.nobrace === true) || !/\{.*\}/.test(pattern)) {
+    return [pattern];
+  }
+  return braces(pattern, options);
+};
+
+/**
+ * Expand braces
+ */
+
+micromatch.braceExpand = (pattern, options) => {
+  if (typeof pattern !== 'string') throw new TypeError('Expected a string');
+  return micromatch.braces(pattern, { ...options, expand: true });
+};
+
+/**
+ * Expose micromatch
+ */
+
+module.exports = micromatch;
diff --git a/server/node_modules/micromatch/package.json b/server/node_modules/micromatch/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e9290baa82c30eb1e45df4241f0f43a9c9263b8e
--- /dev/null
+++ b/server/node_modules/micromatch/package.json
@@ -0,0 +1,191 @@
+{
+  "_from": "micromatch@^4.0.2",
+  "_id": "micromatch@4.0.2",
+  "_inBundle": false,
+  "_integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+  "_location": "/micromatch",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "micromatch@^4.0.2",
+    "name": "micromatch",
+    "escapedName": "micromatch",
+    "rawSpec": "^4.0.2",
+    "saveSpec": null,
+    "fetchSpec": "^4.0.2"
+  },
+  "_requiredBy": [
+    "/fast-glob"
+  ],
+  "_resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+  "_shasum": "4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259",
+  "_spec": "micromatch@^4.0.2",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\fast-glob",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/micromatch/micromatch/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "url": "https://github.com/DianeLooney"
+    },
+    {
+      "name": "Amila Welihinda",
+      "url": "amilajack.com"
+    },
+    {
+      "name": "Bogdan Chadkin",
+      "url": "https://github.com/TrySound"
+    },
+    {
+      "name": "Brian Woodward",
+      "url": "https://twitter.com/doowb"
+    },
+    {
+      "name": "Devon Govett",
+      "url": "http://badassjs.com"
+    },
+    {
+      "name": "Elan Shanker",
+      "url": "https://github.com/es128"
+    },
+    {
+      "name": "Fabrício Matté",
+      "url": "https://ultcombo.js.org"
+    },
+    {
+      "name": "Jon Schlinkert",
+      "url": "http://twitter.com/jonschlinkert"
+    },
+    {
+      "name": "Martin Kolárik",
+      "url": "https://kolarik.sk"
+    },
+    {
+      "name": "Olsten Larck",
+      "url": "https://i.am.charlike.online"
+    },
+    {
+      "name": "Paul Miller",
+      "url": "paulmillr.com"
+    },
+    {
+      "name": "Tom Byrer",
+      "url": "https://github.com/tomByrer"
+    },
+    {
+      "name": "Tyler Akins",
+      "url": "http://rumkin.com"
+    },
+    {
+      "name": "Peter Bright",
+      "email": "drpizza@quiscalusmexicanus.org",
+      "url": "https://github.com/drpizza"
+    }
+  ],
+  "dependencies": {
+    "braces": "^3.0.1",
+    "picomatch": "^2.0.5"
+  },
+  "deprecated": false,
+  "description": "Glob matching for javascript/node.js. A replacement and faster alternative to minimatch and multimatch.",
+  "devDependencies": {
+    "fill-range": "^7.0.1",
+    "gulp-format-md": "^2.0.0",
+    "minimatch": "^3.0.4",
+    "mocha": "^5.2.0",
+    "time-require": "github:jonschlinkert/time-require"
+  },
+  "engines": {
+    "node": ">=8"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/micromatch/micromatch",
+  "keywords": [
+    "bash",
+    "bracket",
+    "character-class",
+    "expand",
+    "expansion",
+    "expression",
+    "extglob",
+    "extglobs",
+    "file",
+    "files",
+    "filter",
+    "find",
+    "glob",
+    "globbing",
+    "globs",
+    "globstar",
+    "lookahead",
+    "lookaround",
+    "lookbehind",
+    "match",
+    "matcher",
+    "matches",
+    "matching",
+    "micromatch",
+    "minimatch",
+    "multimatch",
+    "negate",
+    "negation",
+    "path",
+    "pattern",
+    "patterns",
+    "posix",
+    "regex",
+    "regexp",
+    "regular",
+    "shell",
+    "star",
+    "wildcard"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "micromatch",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/micromatch/micromatch.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "verb": {
+    "toc": "collapsible",
+    "layout": "default",
+    "tasks": [
+      "readme"
+    ],
+    "plugins": [
+      "gulp-format-md"
+    ],
+    "lint": {
+      "reflinks": true
+    },
+    "related": {
+      "list": [
+        "braces",
+        "expand-brackets",
+        "extglob",
+        "fill-range",
+        "nanomatch"
+      ]
+    },
+    "reflinks": [
+      "extglob",
+      "fill-range",
+      "glob-object",
+      "minimatch",
+      "multimatch"
+    ]
+  },
+  "version": "4.0.2"
+}
diff --git a/server/node_modules/path-type/index.d.ts b/server/node_modules/path-type/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..910a50a54618ae8d8a57c550d04d615f79981869
--- /dev/null
+++ b/server/node_modules/path-type/index.d.ts
@@ -0,0 +1,51 @@
+export type PathTypeFunction = (path: string) => Promise<boolean>;
+
+/**
+ * Check whether the passed `path` is a file.
+ *
+ * @param path - The path to check.
+ * @returns Whether the `path` is a file.
+ */
+export const isFile: PathTypeFunction;
+
+/**
+ * Check whether the passed `path` is a directory.
+ *
+ * @param path - The path to check.
+ * @returns Whether the `path` is a directory.
+ */
+export const isDirectory: PathTypeFunction;
+
+/**
+ * Check whether the passed `path` is a symlink.
+ *
+ * @param path - The path to check.
+ * @returns Whether the `path` is a symlink.
+ */
+export const isSymlink: PathTypeFunction;
+
+export type PathTypeSyncFunction = (path: string) => boolean;
+
+/**
+ * Synchronously check whether the passed `path` is a file.
+ *
+ * @param path - The path to check.
+ * @returns Whether the `path` is a file.
+ */
+export const isFileSync: PathTypeSyncFunction;
+
+/**
+ * Synchronously check whether the passed `path` is a directory.
+ *
+ * @param path - The path to check.
+ * @returns Whether the `path` is a directory.
+ */
+export const isDirectorySync: PathTypeSyncFunction;
+
+/**
+ * Synchronously check whether the passed `path` is a symlink.
+ *
+ * @param path - The path to check.
+ * @returns Whether the `path` is a directory.
+ */
+export const isSymlinkSync: PathTypeSyncFunction;
diff --git a/server/node_modules/path-type/index.js b/server/node_modules/path-type/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..b8f34b24ef010719a0d1ec194bae0494a0289f49
--- /dev/null
+++ b/server/node_modules/path-type/index.js
@@ -0,0 +1,43 @@
+'use strict';
+const {promisify} = require('util');
+const fs = require('fs');
+
+async function isType(fsStatType, statsMethodName, filePath) {
+	if (typeof filePath !== 'string') {
+		throw new TypeError(`Expected a string, got ${typeof filePath}`);
+	}
+
+	try {
+		const stats = await promisify(fs[fsStatType])(filePath);
+		return stats[statsMethodName]();
+	} catch (error) {
+		if (error.code === 'ENOENT') {
+			return false;
+		}
+
+		throw error;
+	}
+}
+
+function isTypeSync(fsStatType, statsMethodName, filePath) {
+	if (typeof filePath !== 'string') {
+		throw new TypeError(`Expected a string, got ${typeof filePath}`);
+	}
+
+	try {
+		return fs[fsStatType](filePath)[statsMethodName]();
+	} catch (error) {
+		if (error.code === 'ENOENT') {
+			return false;
+		}
+
+		throw error;
+	}
+}
+
+exports.isFile = isType.bind(null, 'stat', 'isFile');
+exports.isDirectory = isType.bind(null, 'stat', 'isDirectory');
+exports.isSymlink = isType.bind(null, 'lstat', 'isSymbolicLink');
+exports.isFileSync = isTypeSync.bind(null, 'statSync', 'isFile');
+exports.isDirectorySync = isTypeSync.bind(null, 'statSync', 'isDirectory');
+exports.isSymlinkSync = isTypeSync.bind(null, 'lstatSync', 'isSymbolicLink');
diff --git a/server/node_modules/path-type/license b/server/node_modules/path-type/license
new file mode 100644
index 0000000000000000000000000000000000000000..e7af2f77107d73046421ef56c4684cbfdd3c1e89
--- /dev/null
+++ b/server/node_modules/path-type/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/server/node_modules/path-type/package.json b/server/node_modules/path-type/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..a01e67dafc3c62e3666147eb4bf961446084f232
--- /dev/null
+++ b/server/node_modules/path-type/package.json
@@ -0,0 +1,77 @@
+{
+  "_from": "path-type@^4.0.0",
+  "_id": "path-type@4.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+  "_location": "/path-type",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "path-type@^4.0.0",
+    "name": "path-type",
+    "escapedName": "path-type",
+    "rawSpec": "^4.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^4.0.0"
+  },
+  "_requiredBy": [
+    "/dir-glob"
+  ],
+  "_resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+  "_shasum": "84ed01c0a7ba380afe09d90a8c180dcd9d03043b",
+  "_spec": "path-type@^4.0.0",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\dir-glob",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/path-type/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Check if a path is a file, directory, or symlink",
+  "devDependencies": {
+    "ava": "^1.3.1",
+    "nyc": "^13.3.0",
+    "tsd-check": "^0.3.0",
+    "xo": "^0.24.0"
+  },
+  "engines": {
+    "node": ">=8"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts"
+  ],
+  "homepage": "https://github.com/sindresorhus/path-type#readme",
+  "keywords": [
+    "path",
+    "fs",
+    "type",
+    "is",
+    "check",
+    "directory",
+    "dir",
+    "file",
+    "filepath",
+    "symlink",
+    "symbolic",
+    "link",
+    "stat",
+    "stats",
+    "filesystem"
+  ],
+  "license": "MIT",
+  "name": "path-type",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/path-type.git"
+  },
+  "scripts": {
+    "test": "xo && nyc ava && tsd-check"
+  },
+  "version": "4.0.0"
+}
diff --git a/server/node_modules/path-type/readme.md b/server/node_modules/path-type/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..4c972fa56a2a2d06fde8788143ad57f9b7f0fccd
--- /dev/null
+++ b/server/node_modules/path-type/readme.md
@@ -0,0 +1,72 @@
+# path-type [![Build Status](https://travis-ci.org/sindresorhus/path-type.svg?branch=master)](https://travis-ci.org/sindresorhus/path-type)
+
+> Check if a path is a file, directory, or symlink
+
+
+## Install
+
+```
+$ npm install path-type
+```
+
+
+## Usage
+
+```js
+const {isFile} = require('path-type');
+
+(async () => {
+	console.log(await isFile('package.json'));
+	//=> true
+})();
+```
+
+
+## API
+
+### isFile(path)
+
+Check whether the passed `path` is a file.
+
+Returns a `Promise<boolean>`.
+
+#### path
+
+Type: `string`
+
+The path to check.
+
+### isDirectory(path)
+
+Check whether the passed `path` is a directory.
+
+Returns a `Promise<boolean>`.
+
+### isSymlink(path)
+
+Check whether the passed `path` is a symlink.
+
+Returns a `Promise<boolean>`.
+
+### isFileSync(path)
+
+Synchronously check whether the passed `path` is a file.
+
+Returns a `boolean`.
+
+### isDirectorySync(path)
+
+Synchronously check whether the passed `path` is a directory.
+
+Returns a `boolean`.
+
+### isSymlinkSync(path)
+
+Synchronously check whether the passed `path` is a symlink.
+
+Returns a `boolean`.
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/server/node_modules/reusify/.coveralls.yml b/server/node_modules/reusify/.coveralls.yml
new file mode 100644
index 0000000000000000000000000000000000000000..359f68349d7f771cb7d1f349efe22fc00e836782
--- /dev/null
+++ b/server/node_modules/reusify/.coveralls.yml
@@ -0,0 +1 @@
+repo_token: yIxhFqtaaz5iGVYfie9mODehFYogm8S8L
diff --git a/server/node_modules/reusify/.travis.yml b/server/node_modules/reusify/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1970476817b18f62db3e24c93164e3b87cffbb57
--- /dev/null
+++ b/server/node_modules/reusify/.travis.yml
@@ -0,0 +1,28 @@
+language: node_js
+sudo: false
+
+node_js:
+  - 9
+  - 8
+  - 7
+  - 6
+  - 5
+  - 4
+  - 4.0
+  - iojs-v3
+  - iojs-v2
+  - iojs-v1
+  - 0.12
+  - 0.10
+
+cache:
+  directories:
+    - node_modules
+
+after_script:
+- npm run coverage
+
+notifications:
+  email:
+    on_success: never
+    on_failure: always
diff --git a/server/node_modules/reusify/LICENSE b/server/node_modules/reusify/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..fbf3a01d8c7558bf611480e7a38b3abb48f76b42
--- /dev/null
+++ b/server/node_modules/reusify/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Matteo Collina
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/server/node_modules/reusify/README.md b/server/node_modules/reusify/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..badcb7ccfec55d05947f74adf94616ef83e8e0d5
--- /dev/null
+++ b/server/node_modules/reusify/README.md
@@ -0,0 +1,145 @@
+# reusify
+
+[![npm version][npm-badge]][npm-url]
+[![Build Status][travis-badge]][travis-url]
+[![Coverage Status][coveralls-badge]][coveralls-url]
+
+Reuse your objects and functions for maximum speed. This technique will
+make any function run ~10% faster. You call your functions a
+lot, and it adds up quickly in hot code paths.
+
+```
+$ node benchmarks/createNoCodeFunction.js
+Total time 53133
+Total iterations 100000000
+Iteration/s 1882069.5236482036
+
+$ node benchmarks/reuseNoCodeFunction.js
+Total time 50617
+Total iterations 100000000
+Iteration/s 1975620.838848608
+```
+
+The above benchmark uses fibonacci to simulate a real high-cpu load.
+The actual numbers might differ for your use case, but the difference
+should not.
+
+The benchmark was taken using Node v6.10.0.
+
+This library was extracted from
+[fastparallel](http://npm.im/fastparallel).
+
+## Example
+
+```js
+var reusify = require('reusify')
+var fib = require('reusify/benchmarks/fib')
+var instance = reusify(MyObject)
+
+// get an object from the cache,
+// or creates a new one when cache is empty
+var obj = instance.get()
+
+// set the state
+obj.num = 100
+obj.func()
+
+// reset the state.
+// if the state contains any external object
+// do not use delete operator (it is slow)
+// prefer set them to null
+obj.num = 0
+
+// store an object in the cache
+instance.release(obj)
+
+function MyObject () {
+  // you need to define this property
+  // so V8 can compile MyObject into an
+  // hidden class
+  this.next = null
+  this.num = 0
+
+  var that = this
+
+  // this function is never reallocated,
+  // so it can be optimized by V8
+  this.func = function () {
+    if (null) {
+      // do nothing
+    } else {
+      // calculates fibonacci
+      fib(that.num)
+    }
+  }
+}
+```
+
+The above example was intended for synchronous code, let's see async:
+```js
+var reusify = require('reusify')
+var instance = reusify(MyObject)
+
+for (var i = 0; i < 100; i++) {
+  getData(i, console.log)
+}
+
+function getData (value, cb) {
+  var obj = instance.get()
+
+  obj.value = value
+  obj.cb = cb
+  obj.run()
+}
+
+function MyObject () {
+  this.next = null
+  this.value = null
+
+  var that = this
+
+  this.run = function () {
+    asyncOperation(that.value, that.handle)
+  }
+
+  this.handle = function (err, result) {
+    that.cb(err, result)
+    that.value = null
+    that.cb = null
+    instance.release(that)
+  }
+}
+```
+
+Also note how in the above examples, the code, that consumes an istance of `MyObject`,
+reset the state to initial condition, just before storing it in the cache.
+That's needed so that every subsequent request for an instance from the cache,
+could get a clean instance.
+
+## Why
+
+It is faster because V8 doesn't have to collect all the functions you
+create. On a short-lived benchmark, it is as fast as creating the
+nested function, but on a longer time frame it creates less
+pressure on the garbage collector.
+
+## Other examples
+If you want to see some complex example, checkout [middie](https://github.com/fastify/middie) and [steed](https://github.com/mcollina/steed).
+
+## Acknowledgements
+
+Thanks to [Trevor Norris](https://github.com/trevnorris) for
+getting me down the rabbit hole of performance, and thanks to [Mathias
+Buss](http://github.com/mafintosh) for suggesting me to share this
+trick.
+
+## License
+
+MIT
+
+[npm-badge]: https://badge.fury.io/js/reusify.svg
+[npm-url]: https://badge.fury.io/js/reusify
+[travis-badge]: https://api.travis-ci.org/mcollina/reusify.svg
+[travis-url]: https://travis-ci.org/mcollina/reusify
+[coveralls-badge]: https://coveralls.io/repos/mcollina/reusify/badge.svg?branch=master&service=github
+[coveralls-url]:  https://coveralls.io/github/mcollina/reusify?branch=master
diff --git a/server/node_modules/reusify/benchmarks/createNoCodeFunction.js b/server/node_modules/reusify/benchmarks/createNoCodeFunction.js
new file mode 100644
index 0000000000000000000000000000000000000000..ce1aac7b7a6968b0377eac9c4fd9dcc4836a8bac
--- /dev/null
+++ b/server/node_modules/reusify/benchmarks/createNoCodeFunction.js
@@ -0,0 +1,30 @@
+'use strict'
+
+var fib = require('./fib')
+var max = 100000000
+var start = Date.now()
+
+// create a funcion with the typical error
+// pattern, that delegates the heavy load
+// to something else
+function createNoCodeFunction () {
+  /* eslint no-constant-condition: "off" */
+  var num = 100
+
+  ;(function () {
+    if (null) {
+      // do nothing
+    } else {
+      fib(num)
+    }
+  })()
+}
+
+for (var i = 0; i < max; i++) {
+  createNoCodeFunction()
+}
+
+var time = Date.now() - start
+console.log('Total time', time)
+console.log('Total iterations', max)
+console.log('Iteration/s', max / time * 1000)
diff --git a/server/node_modules/reusify/benchmarks/fib.js b/server/node_modules/reusify/benchmarks/fib.js
new file mode 100644
index 0000000000000000000000000000000000000000..e22cc48dec9efa13644385c395272f16a9e45462
--- /dev/null
+++ b/server/node_modules/reusify/benchmarks/fib.js
@@ -0,0 +1,13 @@
+'use strict'
+
+function fib (num) {
+  var fib = []
+
+  fib[0] = 0
+  fib[1] = 1
+  for (var i = 2; i <= num; i++) {
+    fib[i] = fib[i - 2] + fib[i - 1]
+  }
+}
+
+module.exports = fib
diff --git a/server/node_modules/reusify/benchmarks/reuseNoCodeFunction.js b/server/node_modules/reusify/benchmarks/reuseNoCodeFunction.js
new file mode 100644
index 0000000000000000000000000000000000000000..3358d6e50d8ffbf1ce1559213ba63ffc50c5f752
--- /dev/null
+++ b/server/node_modules/reusify/benchmarks/reuseNoCodeFunction.js
@@ -0,0 +1,38 @@
+'use strict'
+
+var reusify = require('../')
+var fib = require('./fib')
+var instance = reusify(MyObject)
+var max = 100000000
+var start = Date.now()
+
+function reuseNoCodeFunction () {
+  var obj = instance.get()
+  obj.num = 100
+  obj.func()
+  obj.num = 0
+  instance.release(obj)
+}
+
+function MyObject () {
+  this.next = null
+  var that = this
+  this.num = 0
+  this.func = function () {
+    /* eslint no-constant-condition: "off" */
+    if (null) {
+      // do nothing
+    } else {
+      fib(that.num)
+    }
+  }
+}
+
+for (var i = 0; i < max; i++) {
+  reuseNoCodeFunction()
+}
+
+var time = Date.now() - start
+console.log('Total time', time)
+console.log('Total iterations', max)
+console.log('Iteration/s', max / time * 1000)
diff --git a/server/node_modules/reusify/package.json b/server/node_modules/reusify/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..2c314f50225dea175bcaccae08fae76ae9aa3839
--- /dev/null
+++ b/server/node_modules/reusify/package.json
@@ -0,0 +1,73 @@
+{
+  "_from": "reusify@^1.0.4",
+  "_id": "reusify@1.0.4",
+  "_inBundle": false,
+  "_integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+  "_location": "/reusify",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "reusify@^1.0.4",
+    "name": "reusify",
+    "escapedName": "reusify",
+    "rawSpec": "^1.0.4",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.4"
+  },
+  "_requiredBy": [
+    "/fastq"
+  ],
+  "_resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+  "_shasum": "90da382b1e126efc02146e90845a88db12925d76",
+  "_spec": "reusify@^1.0.4",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\fastq",
+  "author": {
+    "name": "Matteo Collina",
+    "email": "hello@matteocollina.com"
+  },
+  "bugs": {
+    "url": "https://github.com/mcollina/reusify/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Reuse objects and functions with style",
+  "devDependencies": {
+    "coveralls": "^2.13.3",
+    "faucet": "0.0.1",
+    "istanbul": "^0.4.5",
+    "pre-commit": "^1.2.2",
+    "standard": "^10.0.3",
+    "tape": "^4.8.0"
+  },
+  "engines": {
+    "iojs": ">=1.0.0",
+    "node": ">=0.10.0"
+  },
+  "homepage": "https://github.com/mcollina/reusify#readme",
+  "keywords": [
+    "reuse",
+    "object",
+    "performance",
+    "function",
+    "fast"
+  ],
+  "license": "MIT",
+  "main": "reusify.js",
+  "name": "reusify",
+  "pre-commit": [
+    "lint",
+    "test"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/mcollina/reusify.git"
+  },
+  "scripts": {
+    "coverage": "npm run istanbul; cat coverage/lcov.info | coveralls",
+    "istanbul": "istanbul cover tape test.js",
+    "lint": "standard",
+    "test": "tape test.js | faucet"
+  },
+  "version": "1.0.4"
+}
diff --git a/server/node_modules/reusify/reusify.js b/server/node_modules/reusify/reusify.js
new file mode 100644
index 0000000000000000000000000000000000000000..e6f36f3a83688ef6945cc9f7624c4e37539bd132
--- /dev/null
+++ b/server/node_modules/reusify/reusify.js
@@ -0,0 +1,33 @@
+'use strict'
+
+function reusify (Constructor) {
+  var head = new Constructor()
+  var tail = head
+
+  function get () {
+    var current = head
+
+    if (current.next) {
+      head = current.next
+    } else {
+      head = new Constructor()
+      tail = head
+    }
+
+    current.next = null
+
+    return current
+  }
+
+  function release (obj) {
+    tail.next = obj
+    tail = obj
+  }
+
+  return {
+    get: get,
+    release: release
+  }
+}
+
+module.exports = reusify
diff --git a/server/node_modules/reusify/test.js b/server/node_modules/reusify/test.js
new file mode 100644
index 0000000000000000000000000000000000000000..929cfd71980d81ea9899bddeb8551b0e881c460b
--- /dev/null
+++ b/server/node_modules/reusify/test.js
@@ -0,0 +1,66 @@
+'use strict'
+
+var test = require('tape')
+var reusify = require('./')
+
+test('reuse objects', function (t) {
+  t.plan(6)
+
+  function MyObject () {
+    t.pass('constructor called')
+    this.next = null
+  }
+
+  var instance = reusify(MyObject)
+  var obj = instance.get()
+
+  t.notEqual(obj, instance.get(), 'two instance created')
+  t.notOk(obj.next, 'next must be null')
+
+  instance.release(obj)
+
+  // the internals keeps a hot copy ready for reuse
+  // putting this one back in the queue
+  instance.release(instance.get())
+
+  // comparing the old one with the one we got
+  // never do this in real code, after release you
+  // should never reuse that instance
+  t.equal(obj, instance.get(), 'instance must be reused')
+})
+
+test('reuse more than 2 objects', function (t) {
+  function MyObject () {
+    t.pass('constructor called')
+    this.next = null
+  }
+
+  var instance = reusify(MyObject)
+  var obj = instance.get()
+  var obj2 = instance.get()
+  var obj3 = instance.get()
+
+  t.notOk(obj.next, 'next must be null')
+  t.notOk(obj2.next, 'next must be null')
+  t.notOk(obj3.next, 'next must be null')
+
+  t.notEqual(obj, obj2)
+  t.notEqual(obj, obj3)
+  t.notEqual(obj3, obj2)
+
+  instance.release(obj)
+  instance.release(obj2)
+  instance.release(obj3)
+
+  // skip one
+  instance.get()
+
+  var obj4 = instance.get()
+  var obj5 = instance.get()
+  var obj6 = instance.get()
+
+  t.equal(obj4, obj)
+  t.equal(obj5, obj2)
+  t.equal(obj6, obj3)
+  t.end()
+})
diff --git a/server/node_modules/run-parallel/LICENSE b/server/node_modules/run-parallel/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..c7e6852752b72edbf0eb6b2adef53f0863ae5876
--- /dev/null
+++ b/server/node_modules/run-parallel/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) Feross Aboukhadijeh
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/server/node_modules/run-parallel/README.md b/server/node_modules/run-parallel/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..edc3da452c67ee8c442593f8cf668809fb0fd615
--- /dev/null
+++ b/server/node_modules/run-parallel/README.md
@@ -0,0 +1,85 @@
+# run-parallel [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url]
+
+[travis-image]: https://img.shields.io/travis/feross/run-parallel/master.svg
+[travis-url]: https://travis-ci.org/feross/run-parallel
+[npm-image]: https://img.shields.io/npm/v/run-parallel.svg
+[npm-url]: https://npmjs.org/package/run-parallel
+[downloads-image]: https://img.shields.io/npm/dm/run-parallel.svg
+[downloads-url]: https://npmjs.org/package/run-parallel
+[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg
+[standard-url]: https://standardjs.com
+
+### Run an array of functions in parallel
+
+![parallel](https://raw.githubusercontent.com/feross/run-parallel/master/img.png) [![Sauce Test Status](https://saucelabs.com/browser-matrix/run-parallel.svg)](https://saucelabs.com/u/run-parallel)
+
+### install
+
+```
+npm install run-parallel
+```
+
+### usage
+
+#### parallel(tasks, [callback])
+
+Run the `tasks` array of functions in parallel, without waiting until the previous
+function has completed. If any of the functions pass an error to its callback, the main
+`callback` is immediately called with the value of the error. Once the `tasks` have
+completed, the results are passed to the final `callback` as an array.
+
+It is also possible to use an object instead of an array. Each property will be run as a
+function and the results will be passed to the final `callback` as an object instead of
+an array. This can be a more readable way of handling the results.
+
+##### arguments
+
+- `tasks` - An array or object containing functions to run. Each function is passed a
+`callback(err, result)` which it must call on completion with an error `err` (which can
+be `null`) and an optional `result` value.
+- `callback(err, results)` - An optional callback to run once all the functions have
+completed. This function gets a results array (or object) containing all the result
+arguments passed to the task callbacks.
+
+##### example
+
+```js
+var parallel = require('run-parallel')
+
+parallel([
+  function (callback) {
+    setTimeout(function () {
+      callback(null, 'one')
+    }, 200)
+  },
+  function (callback) {
+    setTimeout(function () {
+      callback(null, 'two')
+    }, 100)
+  }
+],
+// optional callback
+function (err, results) {
+  // the results array will equal ['one','two'] even though
+  // the second function had a shorter timeout.
+})
+```
+
+This module is basically equavalent to
+[`async.parallel`](https://github.com/caolan/async#paralleltasks-callback), but it's
+handy to just have the one function you need instead of the kitchen sink. Modularity!
+Especially handy if you're serving to the browser and need to reduce your javascript
+bundle size.
+
+Works great in the browser with [browserify](http://browserify.org/)!
+
+### see also
+
+- [run-auto](https://github.com/feross/run-auto)
+- [run-parallel-limit](https://github.com/feross/run-parallel-limit)
+- [run-series](https://github.com/feross/run-series)
+- [run-waterfall](https://github.com/feross/run-waterfall)
+
+### license
+
+MIT. Copyright (c) [Feross Aboukhadijeh](http://feross.org).
diff --git a/server/node_modules/run-parallel/index.js b/server/node_modules/run-parallel/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..66cbb441f3e16086ffa536f9d3108b0675f8380d
--- /dev/null
+++ b/server/node_modules/run-parallel/index.js
@@ -0,0 +1,49 @@
+/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
+module.exports = runParallel
+
+function runParallel (tasks, cb) {
+  var results, pending, keys
+  var isSync = true
+
+  if (Array.isArray(tasks)) {
+    results = []
+    pending = tasks.length
+  } else {
+    keys = Object.keys(tasks)
+    results = {}
+    pending = keys.length
+  }
+
+  function done (err) {
+    function end () {
+      if (cb) cb(err, results)
+      cb = null
+    }
+    if (isSync) process.nextTick(end)
+    else end()
+  }
+
+  function each (i, err, result) {
+    results[i] = result
+    if (--pending === 0 || err) {
+      done(err)
+    }
+  }
+
+  if (!pending) {
+    // empty
+    done(null)
+  } else if (keys) {
+    // object
+    keys.forEach(function (key) {
+      tasks[key](function (err, result) { each(key, err, result) })
+    })
+  } else {
+    // array
+    tasks.forEach(function (task, i) {
+      task(function (err, result) { each(i, err, result) })
+    })
+  }
+
+  isSync = false
+}
diff --git a/server/node_modules/run-parallel/package.json b/server/node_modules/run-parallel/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..5f3bf9272f373d14f7ff17dceae5f9321bfd232f
--- /dev/null
+++ b/server/node_modules/run-parallel/package.json
@@ -0,0 +1,81 @@
+{
+  "_from": "run-parallel@^1.1.9",
+  "_id": "run-parallel@1.1.10",
+  "_inBundle": false,
+  "_integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==",
+  "_location": "/run-parallel",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "run-parallel@^1.1.9",
+    "name": "run-parallel",
+    "escapedName": "run-parallel",
+    "rawSpec": "^1.1.9",
+    "saveSpec": null,
+    "fetchSpec": "^1.1.9"
+  },
+  "_requiredBy": [
+    "/@nodelib/fs.scandir"
+  ],
+  "_resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz",
+  "_shasum": "60a51b2ae836636c81377df16cb107351bcd13ef",
+  "_spec": "run-parallel@^1.1.9",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\@nodelib\\fs.scandir",
+  "author": {
+    "name": "Feross Aboukhadijeh",
+    "email": "feross@feross.org",
+    "url": "https://feross.org"
+  },
+  "bugs": {
+    "url": "https://github.com/feross/run-parallel/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Run an array of functions in parallel",
+  "devDependencies": {
+    "airtap": "^3.0.0",
+    "standard": "*",
+    "tape": "^5.0.1"
+  },
+  "funding": [
+    {
+      "type": "github",
+      "url": "https://github.com/sponsors/feross"
+    },
+    {
+      "type": "patreon",
+      "url": "https://www.patreon.com/feross"
+    },
+    {
+      "type": "consulting",
+      "url": "https://feross.org/support"
+    }
+  ],
+  "homepage": "https://github.com/feross/run-parallel",
+  "keywords": [
+    "parallel",
+    "async",
+    "function",
+    "callback",
+    "asynchronous",
+    "run",
+    "array",
+    "run parallel"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "run-parallel",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/feross/run-parallel.git"
+  },
+  "scripts": {
+    "test": "standard && npm run test-node && npm run test-browser",
+    "test-browser": "airtap -- test/*.js",
+    "test-browser-local": "airtap --local -- test/*.js",
+    "test-node": "tape test/*.js"
+  },
+  "version": "1.1.10"
+}
diff --git a/server/node_modules/slash/index.d.ts b/server/node_modules/slash/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f9d07d11e882520f78bcb3473a7de3c610a29708
--- /dev/null
+++ b/server/node_modules/slash/index.d.ts
@@ -0,0 +1,25 @@
+/**
+Convert Windows backslash paths to slash paths: `foo\\bar` ➔ `foo/bar`.
+
+[Forward-slash paths can be used in Windows](http://superuser.com/a/176395/6877) as long as they're not extended-length paths and don't contain any non-ascii characters.
+
+@param path - A Windows backslash path.
+@returns A path with forward slashes.
+
+@example
+```
+import * as path from 'path';
+import slash = require('slash');
+
+const string = path.join('foo', 'bar');
+// Unix    => foo/bar
+// Windows => foo\\bar
+
+slash(string);
+// Unix    => foo/bar
+// Windows => foo/bar
+```
+*/
+declare function slash(path: string): string;
+
+export = slash;
diff --git a/server/node_modules/slash/index.js b/server/node_modules/slash/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..103fbea97f92b5fc4ad99584e45cb2a099dca44f
--- /dev/null
+++ b/server/node_modules/slash/index.js
@@ -0,0 +1,11 @@
+'use strict';
+module.exports = path => {
+	const isExtendedLengthPath = /^\\\\\?\\/.test(path);
+	const hasNonAscii = /[^\u0000-\u0080]+/.test(path); // eslint-disable-line no-control-regex
+
+	if (isExtendedLengthPath || hasNonAscii) {
+		return path;
+	}
+
+	return path.replace(/\\/g, '/');
+};
diff --git a/server/node_modules/slash/license b/server/node_modules/slash/license
new file mode 100644
index 0000000000000000000000000000000000000000..e7af2f77107d73046421ef56c4684cbfdd3c1e89
--- /dev/null
+++ b/server/node_modules/slash/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/server/node_modules/slash/package.json b/server/node_modules/slash/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..37ba4ce0510753b9f35de8f12d75fee2064122a2
--- /dev/null
+++ b/server/node_modules/slash/package.json
@@ -0,0 +1,67 @@
+{
+  "_from": "slash@^3.0.0",
+  "_id": "slash@3.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+  "_location": "/slash",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "slash@^3.0.0",
+    "name": "slash",
+    "escapedName": "slash",
+    "rawSpec": "^3.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^3.0.0"
+  },
+  "_requiredBy": [
+    "/globby"
+  ],
+  "_resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+  "_shasum": "6539be870c165adbd5240220dbe361f1bc4d4634",
+  "_spec": "slash@^3.0.0",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\globby",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/slash/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Convert Windows backslash paths to slash paths",
+  "devDependencies": {
+    "ava": "^1.4.1",
+    "tsd": "^0.7.2",
+    "xo": "^0.24.0"
+  },
+  "engines": {
+    "node": ">=8"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts"
+  ],
+  "homepage": "https://github.com/sindresorhus/slash#readme",
+  "keywords": [
+    "path",
+    "seperator",
+    "slash",
+    "backslash",
+    "windows",
+    "convert"
+  ],
+  "license": "MIT",
+  "name": "slash",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/slash.git"
+  },
+  "scripts": {
+    "test": "xo && ava && tsd"
+  },
+  "version": "3.0.0"
+}
diff --git a/server/node_modules/slash/readme.md b/server/node_modules/slash/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..f0ef4acbde7b34dcfd3199fb16ae156b384b2d58
--- /dev/null
+++ b/server/node_modules/slash/readme.md
@@ -0,0 +1,44 @@
+# slash [![Build Status](https://travis-ci.org/sindresorhus/slash.svg?branch=master)](https://travis-ci.org/sindresorhus/slash)
+
+> Convert Windows backslash paths to slash paths: `foo\\bar` ➔ `foo/bar`
+
+[Forward-slash paths can be used in Windows](http://superuser.com/a/176395/6877) as long as they're not extended-length paths and don't contain any non-ascii characters.
+
+This was created since the `path` methods in Node.js outputs `\\` paths on Windows.
+
+
+## Install
+
+```
+$ npm install slash
+```
+
+
+## Usage
+
+```js
+const path = require('path');
+const slash = require('slash');
+
+const string = path.join('foo', 'bar');
+// Unix    => foo/bar
+// Windows => foo\\bar
+
+slash(string);
+// Unix    => foo/bar
+// Windows => foo/bar
+```
+
+
+## API
+
+### slash(path)
+
+Type: `string`
+
+Accepts a Windows backslash path and returns a path with forward slashes.
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/server/node_modules/tslib/CopyrightNotice.txt b/server/node_modules/tslib/CopyrightNotice.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2e4a05cf504edf931377cf8ed73204097ce94dda
--- /dev/null
+++ b/server/node_modules/tslib/CopyrightNotice.txt
@@ -0,0 +1,15 @@
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+
diff --git a/server/node_modules/tslib/LICENSE.txt b/server/node_modules/tslib/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..fa7d1bdf94d541b1754132c52ec3868d1fe4cdaf
--- /dev/null
+++ b/server/node_modules/tslib/LICENSE.txt
@@ -0,0 +1,12 @@
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
\ No newline at end of file
diff --git a/server/node_modules/tslib/README.md b/server/node_modules/tslib/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..a7ee5aa2ca9517cc853a44eb2ba6b7be17a0da25
--- /dev/null
+++ b/server/node_modules/tslib/README.md
@@ -0,0 +1,142 @@
+# tslib
+
+This is a runtime library for [TypeScript](http://www.typescriptlang.org/) that contains all of the TypeScript helper functions.
+
+This library is primarily used by the `--importHelpers` flag in TypeScript.
+When using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file:
+
+```ts
+var __assign = (this && this.__assign) || Object.assign || function(t) {
+    for (var s, i = 1, n = arguments.length; i < n; i++) {
+        s = arguments[i];
+        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+            t[p] = s[p];
+    }
+    return t;
+};
+exports.x = {};
+exports.y = __assign({}, exports.x);
+
+```
+
+will instead be emitted as something like the following:
+
+```ts
+var tslib_1 = require("tslib");
+exports.x = {};
+exports.y = tslib_1.__assign({}, exports.x);
+```
+
+Because this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead.
+For optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`.
+
+# Installing
+
+For the latest stable version, run:
+
+## npm
+
+```sh
+# TypeScript 2.3.3 or later
+npm install tslib
+
+# TypeScript 2.3.2 or earlier
+npm install tslib@1.6.1
+```
+
+## yarn
+
+```sh
+# TypeScript 2.3.3 or later
+yarn add tslib
+
+# TypeScript 2.3.2 or earlier
+yarn add tslib@1.6.1
+```
+
+## bower
+
+```sh
+# TypeScript 2.3.3 or later
+bower install tslib
+
+# TypeScript 2.3.2 or earlier
+bower install tslib@1.6.1
+```
+
+## JSPM
+
+```sh
+# TypeScript 2.3.3 or later
+jspm install tslib
+
+# TypeScript 2.3.2 or earlier
+jspm install tslib@1.6.1
+```
+
+# Usage
+
+Set the `importHelpers` compiler option on the command line:
+
+```
+tsc --importHelpers file.ts
+```
+
+or in your tsconfig.json:
+
+```json
+{
+    "compilerOptions": {
+        "importHelpers": true
+    }
+}
+```
+
+#### For bower and JSPM users
+
+You will need to add a `paths` mapping for `tslib`, e.g. For Bower users:
+
+```json
+{
+    "compilerOptions": {
+        "module": "amd",
+        "importHelpers": true,
+        "baseUrl": "./",
+        "paths": {
+            "tslib" : ["bower_components/tslib/tslib.d.ts"]
+        }
+    }
+}
+```
+
+For JSPM users:
+
+```json
+{
+    "compilerOptions": {
+        "module": "system",
+        "importHelpers": true,
+        "baseUrl": "./",
+        "paths": {
+            "tslib" : ["jspm_packages/npm/tslib@1.[version].0/tslib.d.ts"]
+        }
+    }
+}
+```
+
+
+# Contribute
+
+There are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.
+
+* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in.
+* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls).
+* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript).
+* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter.
+* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md).
+
+# Documentation
+
+* [Quick tutorial](http://www.typescriptlang.org/Tutorial)
+* [Programming handbook](http://www.typescriptlang.org/Handbook)
+* [Homepage](http://www.typescriptlang.org/)
diff --git a/server/node_modules/tslib/modules/index.js b/server/node_modules/tslib/modules/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c2b6149867edd56494f5aec2f37c6b9cfa9a8c36
--- /dev/null
+++ b/server/node_modules/tslib/modules/index.js
@@ -0,0 +1,51 @@
+import tslib from '../tslib.js';
+const {
+    __extends,
+    __assign,
+    __rest,
+    __decorate,
+    __param,
+    __metadata,
+    __awaiter,
+    __generator,
+    __exportStar,
+    __createBinding,
+    __values,
+    __read,
+    __spread,
+    __spreadArrays,
+    __await,
+    __asyncGenerator,
+    __asyncDelegator,
+    __asyncValues,
+    __makeTemplateObject,
+    __importStar,
+    __importDefault,
+    __classPrivateFieldGet,
+    __classPrivateFieldSet,
+} = tslib;
+export {
+    __extends,
+    __assign,
+    __rest,
+    __decorate,
+    __param,
+    __metadata,
+    __awaiter,
+    __generator,
+    __exportStar,
+    __createBinding,
+    __values,
+    __read,
+    __spread,
+    __spreadArrays,
+    __await,
+    __asyncGenerator,
+    __asyncDelegator,
+    __asyncValues,
+    __makeTemplateObject,
+    __importStar,
+    __importDefault,
+    __classPrivateFieldGet,
+    __classPrivateFieldSet,
+};
diff --git a/server/node_modules/tslib/modules/package.json b/server/node_modules/tslib/modules/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..96ae6e57eb3980436bae7749ddbdca84b4978cc2
--- /dev/null
+++ b/server/node_modules/tslib/modules/package.json
@@ -0,0 +1,3 @@
+{
+    "type": "module"
+}
\ No newline at end of file
diff --git a/server/node_modules/tslib/package.json b/server/node_modules/tslib/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8b82992a6eae1eafbcad4489bd3873921354d176
--- /dev/null
+++ b/server/node_modules/tslib/package.json
@@ -0,0 +1,64 @@
+{
+  "_from": "tslib@^1.8.1",
+  "_id": "tslib@1.14.1",
+  "_inBundle": false,
+  "_integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+  "_location": "/tslib",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "tslib@^1.8.1",
+    "name": "tslib",
+    "escapedName": "tslib",
+    "rawSpec": "^1.8.1",
+    "saveSpec": null,
+    "fetchSpec": "^1.8.1"
+  },
+  "_requiredBy": [
+    "/tsutils"
+  ],
+  "_resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+  "_shasum": "cf2d38bdc34a134bcaf1091c41f6619e2f672d00",
+  "_spec": "tslib@^1.8.1",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\tsutils",
+  "author": {
+    "name": "Microsoft Corp."
+  },
+  "bugs": {
+    "url": "https://github.com/Microsoft/TypeScript/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Runtime library for TypeScript helper functions",
+  "exports": {
+    ".": {
+      "module": "./tslib.es6.js",
+      "import": "./modules/index.js",
+      "default": "./tslib.js"
+    },
+    "./": "./"
+  },
+  "homepage": "https://www.typescriptlang.org/",
+  "jsnext:main": "tslib.es6.js",
+  "keywords": [
+    "TypeScript",
+    "Microsoft",
+    "compiler",
+    "language",
+    "javascript",
+    "tslib",
+    "runtime"
+  ],
+  "license": "0BSD",
+  "main": "tslib.js",
+  "module": "tslib.es6.js",
+  "name": "tslib",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/Microsoft/tslib.git"
+  },
+  "sideEffects": false,
+  "typings": "tslib.d.ts",
+  "version": "1.14.1"
+}
diff --git a/server/node_modules/tslib/test/validateModuleExportsMatchCommonJS/index.js b/server/node_modules/tslib/test/validateModuleExportsMatchCommonJS/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c1b613d8bddbd17b319c4093757e545f31b0a45
--- /dev/null
+++ b/server/node_modules/tslib/test/validateModuleExportsMatchCommonJS/index.js
@@ -0,0 +1,23 @@
+// When on node 14, it validates that all of the commonjs exports
+// are correctly re-exported for es modules importers.
+
+const nodeMajor = Number(process.version.split(".")[0].slice(1))
+if (nodeMajor < 14) {
+  console.log("Skipping because node does not support module exports.")
+  process.exit(0)
+}
+
+// ES Modules import via the ./modules folder
+import * as esTSLib from "../../modules/index.js"
+
+// Force a commonjs resolve
+import { createRequire } from "module";
+const commonJSTSLib = createRequire(import.meta.url)("../../tslib.js");
+
+for (const key in commonJSTSLib) {
+  if (commonJSTSLib.hasOwnProperty(key)) {
+    if(!esTSLib[key]) throw new Error(`ESModules is missing ${key} - it needs to be re-exported in  ./modules/index.js`)
+  }
+}
+
+console.log("All exports in commonjs are available for es module consumers.")
diff --git a/server/node_modules/tslib/test/validateModuleExportsMatchCommonJS/package.json b/server/node_modules/tslib/test/validateModuleExportsMatchCommonJS/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..166e5095e43943a7473562a0ce40e29181573625
--- /dev/null
+++ b/server/node_modules/tslib/test/validateModuleExportsMatchCommonJS/package.json
@@ -0,0 +1,6 @@
+{
+  "type": "module",
+  "scripts": {
+    "test": "node index.js"
+  }
+}
diff --git a/server/node_modules/tslib/tslib.d.ts b/server/node_modules/tslib/tslib.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4d7f724cb4df81479b2c632774317310698f71a2
--- /dev/null
+++ b/server/node_modules/tslib/tslib.d.ts
@@ -0,0 +1,37 @@
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+export declare function __extends(d: Function, b: Function): void;
+export declare function __assign(t: any, ...sources: any[]): any;
+export declare function __rest(t: any, propertyNames: (string | symbol)[]): any;
+export declare function __decorate(decorators: Function[], target: any, key?: string | symbol, desc?: any): any;
+export declare function __param(paramIndex: number, decorator: Function): Function;
+export declare function __metadata(metadataKey: any, metadataValue: any): Function;
+export declare function __awaiter(thisArg: any, _arguments: any, P: Function, generator: Function): any;
+export declare function __generator(thisArg: any, body: Function): any;
+export declare function __exportStar(m: any, exports: any): void;
+export declare function __values(o: any): any;
+export declare function __read(o: any, n?: number): any[];
+export declare function __spread(...args: any[][]): any[];
+export declare function __spreadArrays(...args: any[][]): any[];
+export declare function __await(v: any): any;
+export declare function __asyncGenerator(thisArg: any, _arguments: any, generator: Function): any;
+export declare function __asyncDelegator(o: any): any;
+export declare function __asyncValues(o: any): any;
+export declare function __makeTemplateObject(cooked: string[], raw: string[]): TemplateStringsArray;
+export declare function __importStar<T>(mod: T): T;
+export declare function __importDefault<T>(mod: T): T | { default: T };
+export declare function __classPrivateFieldGet<T extends object, V>(receiver: T, privateMap: { has(o: T): boolean, get(o: T): V | undefined }): V;
+export declare function __classPrivateFieldSet<T extends object, V>(receiver: T, privateMap: { has(o: T): boolean, set(o: T, value: V): any }, value: V): V;
+export declare function __createBinding(object: object, target: object, key: PropertyKey, objectKey?: PropertyKey): void;
\ No newline at end of file
diff --git a/server/node_modules/tslib/tslib.es6.html b/server/node_modules/tslib/tslib.es6.html
new file mode 100644
index 0000000000000000000000000000000000000000..b122e41b06af8034aca824c9563053cf501eba2a
--- /dev/null
+++ b/server/node_modules/tslib/tslib.es6.html
@@ -0,0 +1 @@
+<script src="tslib.es6.js"></script>
\ No newline at end of file
diff --git a/server/node_modules/tslib/tslib.es6.js b/server/node_modules/tslib/tslib.es6.js
new file mode 100644
index 0000000000000000000000000000000000000000..7fdec025453847d8198104e9b7a422b648c17ed4
--- /dev/null
+++ b/server/node_modules/tslib/tslib.es6.js
@@ -0,0 +1,218 @@
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+/* global Reflect, Promise */
+
+var extendStatics = function(d, b) {
+    extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return extendStatics(d, b);
+};
+
+export function __extends(d, b) {
+    extendStatics(d, b);
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+}
+
+export var __assign = function() {
+    __assign = Object.assign || function __assign(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+        }
+        return t;
+    }
+    return __assign.apply(this, arguments);
+}
+
+export function __rest(s, e) {
+    var t = {};
+    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+        t[p] = s[p];
+    if (s != null && typeof Object.getOwnPropertySymbols === "function")
+        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                t[p[i]] = s[p[i]];
+        }
+    return t;
+}
+
+export function __decorate(decorators, target, key, desc) {
+    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
+    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
+    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
+    return c > 3 && r && Object.defineProperty(target, key, r), r;
+}
+
+export function __param(paramIndex, decorator) {
+    return function (target, key) { decorator(target, key, paramIndex); }
+}
+
+export function __metadata(metadataKey, metadataValue) {
+    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
+}
+
+export function __awaiter(thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+}
+
+export function __generator(thisArg, body) {
+    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+    function verb(n) { return function (v) { return step([n, v]); }; }
+    function step(op) {
+        if (f) throw new TypeError("Generator is already executing.");
+        while (_) try {
+            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+            if (y = 0, t) op = [op[0] & 2, t.value];
+            switch (op[0]) {
+                case 0: case 1: t = op; break;
+                case 4: _.label++; return { value: op[1], done: false };
+                case 5: _.label++; y = op[1]; op = [0]; continue;
+                case 7: op = _.ops.pop(); _.trys.pop(); continue;
+                default:
+                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+                    if (t[2]) _.ops.pop();
+                    _.trys.pop(); continue;
+            }
+            op = body.call(thisArg, _);
+        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+    }
+}
+
+export function __createBinding(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}
+
+export function __exportStar(m, exports) {
+    for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p];
+}
+
+export function __values(o) {
+    var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
+    if (m) return m.call(o);
+    if (o && typeof o.length === "number") return {
+        next: function () {
+            if (o && i >= o.length) o = void 0;
+            return { value: o && o[i++], done: !o };
+        }
+    };
+    throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
+}
+
+export function __read(o, n) {
+    var m = typeof Symbol === "function" && o[Symbol.iterator];
+    if (!m) return o;
+    var i = m.call(o), r, ar = [], e;
+    try {
+        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+    }
+    catch (error) { e = { error: error }; }
+    finally {
+        try {
+            if (r && !r.done && (m = i["return"])) m.call(i);
+        }
+        finally { if (e) throw e.error; }
+    }
+    return ar;
+}
+
+export function __spread() {
+    for (var ar = [], i = 0; i < arguments.length; i++)
+        ar = ar.concat(__read(arguments[i]));
+    return ar;
+}
+
+export function __spreadArrays() {
+    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
+    for (var r = Array(s), k = 0, i = 0; i < il; i++)
+        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+            r[k] = a[j];
+    return r;
+};
+
+export function __await(v) {
+    return this instanceof __await ? (this.v = v, this) : new __await(v);
+}
+
+export function __asyncGenerator(thisArg, _arguments, generator) {
+    if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+    var g = generator.apply(thisArg, _arguments || []), i, q = [];
+    return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
+    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
+    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
+    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
+    function fulfill(value) { resume("next", value); }
+    function reject(value) { resume("throw", value); }
+    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
+}
+
+export function __asyncDelegator(o) {
+    var i, p;
+    return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
+    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
+}
+
+export function __asyncValues(o) {
+    if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+    var m = o[Symbol.asyncIterator], i;
+    return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
+    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
+    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
+}
+
+export function __makeTemplateObject(cooked, raw) {
+    if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
+    return cooked;
+};
+
+export function __importStar(mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result.default = mod;
+    return result;
+}
+
+export function __importDefault(mod) {
+    return (mod && mod.__esModule) ? mod : { default: mod };
+}
+
+export function __classPrivateFieldGet(receiver, privateMap) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to get private field on non-instance");
+    }
+    return privateMap.get(receiver);
+}
+
+export function __classPrivateFieldSet(receiver, privateMap, value) {
+    if (!privateMap.has(receiver)) {
+        throw new TypeError("attempted to set private field on non-instance");
+    }
+    privateMap.set(receiver, value);
+    return value;
+}
diff --git a/server/node_modules/tslib/tslib.html b/server/node_modules/tslib/tslib.html
new file mode 100644
index 0000000000000000000000000000000000000000..44c9ba51e3547ad1b7a9244f14703ab681519619
--- /dev/null
+++ b/server/node_modules/tslib/tslib.html
@@ -0,0 +1 @@
+<script src="tslib.js"></script>
\ No newline at end of file
diff --git a/server/node_modules/tslib/tslib.js b/server/node_modules/tslib/tslib.js
new file mode 100644
index 0000000000000000000000000000000000000000..fbce0186f246229c9ecc0f6fa6c080770abfc346
--- /dev/null
+++ b/server/node_modules/tslib/tslib.js
@@ -0,0 +1,284 @@
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+
+/* global global, define, System, Reflect, Promise */
+var __extends;
+var __assign;
+var __rest;
+var __decorate;
+var __param;
+var __metadata;
+var __awaiter;
+var __generator;
+var __exportStar;
+var __values;
+var __read;
+var __spread;
+var __spreadArrays;
+var __await;
+var __asyncGenerator;
+var __asyncDelegator;
+var __asyncValues;
+var __makeTemplateObject;
+var __importStar;
+var __importDefault;
+var __classPrivateFieldGet;
+var __classPrivateFieldSet;
+var __createBinding;
+(function (factory) {
+    var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {};
+    if (typeof define === "function" && define.amd) {
+        define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); });
+    }
+    else if (typeof module === "object" && typeof module.exports === "object") {
+        factory(createExporter(root, createExporter(module.exports)));
+    }
+    else {
+        factory(createExporter(root));
+    }
+    function createExporter(exports, previous) {
+        if (exports !== root) {
+            if (typeof Object.create === "function") {
+                Object.defineProperty(exports, "__esModule", { value: true });
+            }
+            else {
+                exports.__esModule = true;
+            }
+        }
+        return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };
+    }
+})
+(function (exporter) {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+
+    __extends = function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+
+    __assign = Object.assign || function (t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+        }
+        return t;
+    };
+
+    __rest = function (s, e) {
+        var t = {};
+        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+            t[p] = s[p];
+        if (s != null && typeof Object.getOwnPropertySymbols === "function")
+            for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+                if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                    t[p[i]] = s[p[i]];
+            }
+        return t;
+    };
+
+    __decorate = function (decorators, target, key, desc) {
+        var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
+        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
+        else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
+        return c > 3 && r && Object.defineProperty(target, key, r), r;
+    };
+
+    __param = function (paramIndex, decorator) {
+        return function (target, key) { decorator(target, key, paramIndex); }
+    };
+
+    __metadata = function (metadataKey, metadataValue) {
+        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
+    };
+
+    __awaiter = function (thisArg, _arguments, P, generator) {
+        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+        return new (P || (P = Promise))(function (resolve, reject) {
+            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+            function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+            step((generator = generator.apply(thisArg, _arguments || [])).next());
+        });
+    };
+
+    __generator = function (thisArg, body) {
+        var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+        return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+        function verb(n) { return function (v) { return step([n, v]); }; }
+        function step(op) {
+            if (f) throw new TypeError("Generator is already executing.");
+            while (_) try {
+                if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+                if (y = 0, t) op = [op[0] & 2, t.value];
+                switch (op[0]) {
+                    case 0: case 1: t = op; break;
+                    case 4: _.label++; return { value: op[1], done: false };
+                    case 5: _.label++; y = op[1]; op = [0]; continue;
+                    case 7: op = _.ops.pop(); _.trys.pop(); continue;
+                    default:
+                        if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+                        if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+                        if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+                        if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+                        if (t[2]) _.ops.pop();
+                        _.trys.pop(); continue;
+                }
+                op = body.call(thisArg, _);
+            } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+            if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+        }
+    };
+
+    __createBinding = function(o, m, k, k2) {
+        if (k2 === undefined) k2 = k;
+        o[k2] = m[k];
+    };
+
+    __exportStar = function (m, exports) {
+        for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p];
+    };
+
+    __values = function (o) {
+        var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
+        if (m) return m.call(o);
+        if (o && typeof o.length === "number") return {
+            next: function () {
+                if (o && i >= o.length) o = void 0;
+                return { value: o && o[i++], done: !o };
+            }
+        };
+        throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
+    };
+
+    __read = function (o, n) {
+        var m = typeof Symbol === "function" && o[Symbol.iterator];
+        if (!m) return o;
+        var i = m.call(o), r, ar = [], e;
+        try {
+            while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+        }
+        catch (error) { e = { error: error }; }
+        finally {
+            try {
+                if (r && !r.done && (m = i["return"])) m.call(i);
+            }
+            finally { if (e) throw e.error; }
+        }
+        return ar;
+    };
+
+    __spread = function () {
+        for (var ar = [], i = 0; i < arguments.length; i++)
+            ar = ar.concat(__read(arguments[i]));
+        return ar;
+    };
+
+    __spreadArrays = function () {
+        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
+        for (var r = Array(s), k = 0, i = 0; i < il; i++)
+            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+                r[k] = a[j];
+        return r;
+    };
+
+    __await = function (v) {
+        return this instanceof __await ? (this.v = v, this) : new __await(v);
+    };
+
+    __asyncGenerator = function (thisArg, _arguments, generator) {
+        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+        var g = generator.apply(thisArg, _arguments || []), i, q = [];
+        return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
+        function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
+        function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
+        function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);  }
+        function fulfill(value) { resume("next", value); }
+        function reject(value) { resume("throw", value); }
+        function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
+    };
+
+    __asyncDelegator = function (o) {
+        var i, p;
+        return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
+        function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
+    };
+
+    __asyncValues = function (o) {
+        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+        var m = o[Symbol.asyncIterator], i;
+        return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
+        function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
+        function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
+    };
+
+    __makeTemplateObject = function (cooked, raw) {
+        if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
+        return cooked;
+    };
+
+    __importStar = function (mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+        result["default"] = mod;
+        return result;
+    };
+
+    __importDefault = function (mod) {
+        return (mod && mod.__esModule) ? mod : { "default": mod };
+    };
+
+    __classPrivateFieldGet = function (receiver, privateMap) {
+        if (!privateMap.has(receiver)) {
+            throw new TypeError("attempted to get private field on non-instance");
+        }
+        return privateMap.get(receiver);
+    };
+
+    __classPrivateFieldSet = function (receiver, privateMap, value) {
+        if (!privateMap.has(receiver)) {
+            throw new TypeError("attempted to set private field on non-instance");
+        }
+        privateMap.set(receiver, value);
+        return value;
+    };
+
+    exporter("__extends", __extends);
+    exporter("__assign", __assign);
+    exporter("__rest", __rest);
+    exporter("__decorate", __decorate);
+    exporter("__param", __param);
+    exporter("__metadata", __metadata);
+    exporter("__awaiter", __awaiter);
+    exporter("__generator", __generator);
+    exporter("__exportStar", __exportStar);
+    exporter("__createBinding", __createBinding);
+    exporter("__values", __values);
+    exporter("__read", __read);
+    exporter("__spread", __spread);
+    exporter("__spreadArrays", __spreadArrays);
+    exporter("__await", __await);
+    exporter("__asyncGenerator", __asyncGenerator);
+    exporter("__asyncDelegator", __asyncDelegator);
+    exporter("__asyncValues", __asyncValues);
+    exporter("__makeTemplateObject", __makeTemplateObject);
+    exporter("__importStar", __importStar);
+    exporter("__importDefault", __importDefault);
+    exporter("__classPrivateFieldGet", __classPrivateFieldGet);
+    exporter("__classPrivateFieldSet", __classPrivateFieldSet);
+});
diff --git a/server/node_modules/tsutils/.editorconfig b/server/node_modules/tsutils/.editorconfig
new file mode 100644
index 0000000000000000000000000000000000000000..4818afd6b7ad8f05c134c04f5b9f74d37175aebd
--- /dev/null
+++ b/server/node_modules/tsutils/.editorconfig
@@ -0,0 +1,12 @@
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = true
+charset = utf-8
+indent_size = 4
+indent_style = space
+trim_trailing_whitespace = true
+
+[*.{json,yml,md}]
+indent_size = 2
diff --git a/server/node_modules/tsutils/.fimbullinter.yaml b/server/node_modules/tsutils/.fimbullinter.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..74e903e76c059e5b2909d964de17291f3e73c58e
--- /dev/null
+++ b/server/node_modules/tsutils/.fimbullinter.yaml
@@ -0,0 +1,2 @@
+exclude:
+  - test/rules/**
diff --git a/server/node_modules/tsutils/.wotanrc.yaml b/server/node_modules/tsutils/.wotanrc.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..46153ecb73e664a0e6a80b2564c458009f0f814e
--- /dev/null
+++ b/server/node_modules/tsutils/.wotanrc.yaml
@@ -0,0 +1,5 @@
+extends: wotan:recommended
+rules:
+    # TODO enable once https://github.com/Microsoft/TypeScript/issues/24706 is resolved
+    no-useless-assertion: off
+    no-useless-predicate: off
diff --git a/server/node_modules/tsutils/CHANGELOG.md b/server/node_modules/tsutils/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..0d01e793b156030e6accd67b177577f1bf29ae24
--- /dev/null
+++ b/server/node_modules/tsutils/CHANGELOG.md
@@ -0,0 +1,741 @@
+# 3.17.1
+
+**Bugfixes:**
+
+* `isValidJsxIdentifier`, `isValidPropertyAccess`, `isValidPropertyName`: fix unicode character width handling
+
+# 3.17.0
+
+**Features:**
+
+* `isValidJsxIdentifier` added an optional parameter to specify the target ECMAScript version
+
+**Bugfixes:**
+
+* `isValidJsxIdentifier` now handles astral plane characters
+
+# 3.16.0
+
+**Features:**
+
+* added `getIteratorYieldResultFromIteratorResult` to extract the `yield`ed type from `IteratorResult<TYield, TReturn, TNext>`
+
+# 3.15.0
+
+**Features:**
+
+* `isValidIdentifier`, `isValidPropertyName`, `isValidPropertyAccess`, `isValidNumericLiteral` added an optional parameter to specify the target ECMAScript version
+
+**Bugfixes:**
+
+* `isValidPropertyName`, `isValidPropertyAccess` now handle astral plane characters
+
+# 3.14.1
+
+**Bugfixes:**
+
+* `findImports`: fixed crash on nested namespaces
+
+# 3.14.0
+
+**Features:**
+
+* added `getInstanceTypeOfClassLikeDeclaration` and `getConstructorTypeOfClassLikeDeclaration`
+* added `AccessKind.Delete` to `getAccessKind`: `getAccessKind(node) & AccessKind.Modification` can now be used to restore the old behavior of `isReassignmentTarget(node)`
+
+# 3.13.0
+
+**Features:**
+
+* `getAccessKind` determines whether an expression is read from, written to or both
+* optimized `getPropertyOfType` for unambiguous property names to partially work around https://github.com/microsoft/TypeScript/issues/31565
+
+**Bugfixes:**
+
+* `isReassignmentTarget` no longer returns `true` for `DeleteExpression` as it doesn't **assign** a value to the operand
+
+# 3.12.0
+
+**Features:**
+
+* `getLateBoundPropertyNamesOfPropertyName` returns all statically analyzable names of a property, method, ...
+* `getSingleLateBoundPropertyNameOfPropertyName` returns the literal name of a property, method, ... if statically analyzable
+
+**Bugfixes:**
+
+* fixed circular import
+
+# 3.11.0
+
+**Features:**
+
+* typeguards: `isNumericOrStringLikeLiteral`, `isTupleTypeReference`
+* `intersectionTypeParts` as counterpart to `unionTypeParts`
+* `someTypePart` to execute a callback for each union or intersection constituent until the callback returns true
+* `getPropertyOfType` looks up a property by its escaped name
+* `isPropertyReadonlyInType` determines whether a property in a given type cannot be written to
+* `symbolHasReadonlyDeclaration` determines if a Symbol has any readonly or constant declaration
+* `isNumericPropertyName` determines whether a property name would match an index signature
+* `isBindableObjectDefinePropertyCall` returns true for statically analyzable forms of `Object.defineProperty(o, 'p', {value, writable})`
+* `isReadonlyAssignmentDeclaration` determines whether an `Object.defineProperty` call is known to result in a readonly property
+* `getLateBoundPropertyNames` returns all known property names of an expression
+* `getPropertyNameFromType` extracts the property name of literal types
+* `isWellKnownSymbolLiterally` to recognize expressions in the form of `Symbol.<name>`
+* `getPropertyNameOfWellKnownSymbol` returns the escaped name for a well known symbol literal
+* `unwrapParentheses` returns the first child expression that is not a `ParenthesizedExpression`
+
+# 3.10.0
+
+**Features:**
+
+* `isCompilerOptionEnabled`: `incremental` is implicitly enabled by `composite`
+
+**Bugfixes:**
+
+* `collectVariableUsage`/`getUsageDomain`: no longer treat `as const` as type usage
+
+# 3.9.1
+
+**Bugfixes:**
+
+* reverted invalid deprecation of `canHaveJsdoc`
+* fixed condition in `parseJsdocOfNode`
+
+# 3.9.0
+
+**Features:**
+
+* added typeguards: `isNullLiteral` and `isBooleanLiteral`
+
+# 3.8.0
+
+**Features:**
+
+* exposes typeguards for typescript@3.2 by default
+* added utilities: `isConstAssertion` and `isInConstContext`
+
+# 3.7.0
+
+**Features:**
+
+* added `isBlockScopedDeclarationStatement`
+* added `isInSingleStatementContext`
+
+# 3.6.0
+
+**Features:**
+
+* added `getCheckJsDirective` utility to parse `// @ts-check` and `// @ts-nocheck` pragmas
+
+# 3.5.2
+
+**Bugfixes:**
+
+* Published declaration files no longer contain `const enum`. They are now declared as regular enums instead.
+
+# 3.5.1
+
+**Bugfixes:**
+
+* `isThenableType` allows `Node` instead of `Expression` as parameter
+* `isBlockScopeBoundary` and `isScopeBoundary` consider `WithStatement` as scope boundary
+
+# 3.5.0
+
+**Features:**
+
+* correctly handle BigInt literals
+  * added typeguard `isBigIntLiteral`
+  * `isLiteralType` recognises BigInt
+  * `getPropertyName` adds special handling for BigInt
+
+# 3.4.0
+
+**Features:**
+
+* added utility `commentText` to get the actual text content of a comment excluding the characters needed to start and end the comment
+
+# 3.3.1
+
+**Bugfixes:**
+
+* `findImports`: fixed handling of ImportEqualsDeclaration
+
+# 3.3.0
+
+**Features:**
+
+* `isCompilerOptionEnabled`: recognizes `strictBindCallApply`
+* `getTokenAtPosition`: optionally includes JSDoc during lookup
+
+**Bugfixes:**
+
+* `isCompilerOptionEnabled`: correctly implements logic for `allowSyntheticDefaultImports`
+* `findImportLikeNodes`: correctly finds imports in namespaces
+* `findImportLikeNodes` / `findImports`: finds import types in JSDoc of JS files
+
+# 3.2.0
+
+**Features:**
+
+* added utility `findImportLikeNodes` that works similar to `findImports` but returns the import statement or expression instead of the module specifier and doesn't filter non-string module specifiers
+
+# 3.1.0
+
+**Features:**
+
+* added utilities: `isKeywordKind` and `isValidJsxIdentifier`
+* exposes typeguards for typescript@3.0 by default
+
+# 3.0.0
+
+:warning: **Breaking Changes:**
+
+* Dropped support for `typescript@<2.8.0`
+* Dropped support for Node.js 4
+* Removed deprecated APIs:
+  * `getIdentifierText`, `isJsxFramgment`, `ImportOptions`
+  * deprected overloads of `isModifierFlagSet`, `findImports` and `getControlFlowEnd`
+* control flow related symbols can no longer be imported from `'tsutils/util/util'`, import directly from `'tsutils/util/control-flow'` or `'tsutils/util'`
+* `isFunctionScopeBoundary` and `isBlockScopeBoundary` now return a enum member of `ScopeBoundary` instead of a boolean
+* `isFunctionScopeBoundary` no longer returns a truthy value for `InterfaceDeclaration`, `TypeAliasDeclaration`
+
+**Features:**
+
+* added utility `isTypeScopeBoundary` returning `ScopeBoundary.Type` or `ScopeBoundary.ConditionalType`
+* added enum `ScopeBoundarySelector` whose members can be used to determine if a declaration belongs to a given `ScopeBoundary` by using bitwise AND
+
+**Bugfixes:**
+
+* `collectVariableUsage` now correctly handles `infer T` nested inside function signatures or mapped types
+* `isCompilerOptionEnabled` correctly handles `skipDefaultLibCHeck` and `suppressImplicitAnyIndexErrors`
+
+# 2.29.0
+
+**Features:**
+
+* added utility `isCompilerOptionEnabled`
+
+# 2.28.0
+
+Typeguards are now split into multiple submodules for each version of TypeScript (starting with 2.8.0).
+That means you can now import directly from `"tsutils/typeguard/2.8"` to get compatible declaraton files for TypeScript@2.8.
+For more information please read the relevant section in [README.md](README.md).
+
+**Features:**
+
+* added typeguards: `isTupleType`, `isOptionalTypeNode`, `isRestTypeNode`, `isSyntheticExpression` (currently available from `"tsutils/typeguard/3.0"`)
+* added utility `isStrictCompilerOptionEnabled`
+
+# 2.27.2
+
+Avoid crash caused by removed function in `typescript@3.0.0`.
+
+# 2.27.1
+
+Added support for TypeScript@3.0.0 nightly builds.
+
+# 2.27.0
+
+**Features:**
+
+* added `getIIFE` utility
+
+# 2.26.2
+
+**Bugfixes:**
+
+* `forEachComment` and `forEachTokenWithTrivia` no longer duplicate comments around missing nodes
+
+# 2.26.1
+
+**Bugfixes:**
+
+* fixed crash in `hasSideEffects` with tagged template literal without substitution: ``tag`template` ``
+
+# 2.26.0
+
+**Features:**
+
+* added typeguard `isLiteralTypeNode`
+* added support for type imports (`type T = import('foo')`) to `findImports` via `ImportKind.ImportType`
+
+# 2.25.1
+
+**Bugfixes:**
+
+* `collectVariableUsage`: fixed name lookup in function signatures to match runtime behavior. Note that this is not completely fixed in TypeScript, yet. See: [Microsoft/TypeScript#22825](https://github.com/Microsoft/TypeScript/issues/22825) and [Microsoft/TypeScript#22769](https://github.com/Microsoft/TypeScript/issues/22769)
+
+# 2.25.0
+
+**Features:**
+
+* added utilities: `isStatementInAmbientContext` and `isAmbientModuleBlock`
+
+# 2.24.0
+
+**Features:**
+
+* added typeguards for typescript@2.8: `isConditionalTypeNode`, `isInferTypeNode`, `isConditionalType`, `isInstantiableType`, `isSubstitutionType`
+
+# 2.23.0
+
+**Features:**
+
+* added typeguard `isForInOrOfStatement`
+
+**Bugfixes:**
+
+* correctly handle comments in generic JSX elements: `<MyComponent<string>/*comment*/></MyComponent>`
+* fixed a bug with false positive trailing comments at the end of JSX self closing element: `<div><br/>/*no comment*/</div>`
+
+# 2.22.2
+
+**Bugfixes:**
+
+* `collectVariableUsage`: handle ConditionalTypes and `infer T`, which will be introduced in TypeScript@2.8.0 and are already available in nightly builds
+* `isLiteralType` no longer returns true for `ts.TypeFlags.BooleanLiteral` as this is not a `ts.LiteralType`
+
+# 2.22.1
+
+**Bugfixes:**
+
+* `endsControlFlow`:
+  * handle loops that might not even run a single iteration
+  * handle constant boolean conditions in loops and if
+
+# 2.22.0
+
+**Features:**
+
+* added `isFalsyType` utility
+
+# 2.21.2
+
+**Bugfixes:**
+
+* fixed compile error with `typescript@2.8.0-dev`
+
+# 2.21.1
+
+**Bugfixes:**
+
+* `isReassignmentTarget`: handle type assertions and non-null assertion
+
+# 2.21.0
+
+**Bugfixes:**
+
+* `forEachDeclaredVariable` uses a more precise type for the callback parameter to make it useable again with typescript@2.7.1
+
+**Features:**
+
+* added `isUniqueESSymbolType` typeguard
+
+# 2.20.0
+
+**Features:**
+
+* added `isThenableType` utility
+* added `unionTypeParts` utility
+
+# 2.19.1
+
+**Bugfixes:**
+
+* `forEachComment`, `getCommentAtPosition` and `isPositionInComment`: skip shebang (`#! something`) to not miss following comments at the start of the file
+
+# 2.19.0
+
+**Features:**
+
+* added `WrappedAst` interface that models the type of a wrapped SourceFile more accurate
+* added `getWrappedNodeAtPosition` utiltiy that takes a `NodeWrap` and returns the most deeply nested NodeWrap that contains the given position
+
+# 2.18.0
+
+**Features:**
+
+* `getControlFlowEnd` accepts BlockLike as argument
+
+**Bugfixes:**
+
+* `getControlFlowEnd` and `endsControlFlow`: correctly handle nested LabeledStatements
+* `endsControlFlow` removed erroneous special case when an IterationStatement is passed as argument whose parent is a LabeledStatement.
+  * if you want labels of an IterationStatement (or SwitchStatement) to be handled, you need to pass the LabeledStatement as argument.
+  * :warning: this fix may change the returned value if you relied on the buggy behavior
+
+**Deprecations:**
+
+* deprecated overload of `getControlFlowEnd` that contains the `label` parameter. This parameter is no longer used and should no longer be passed to the function.
+
+# 2.17.1
+
+**Bugfixes:**
+
+* `getControlFlowEnd` and `endsControlFlow` (#22)
+  * ThrowStatements inside `try` are filtered out if there is a `catch` clause
+  * TryStatements with `catch` only end control flow if `try` AND `catch` definitely end control flow
+
+# 2.17.0
+
+**Features:**
+
+* added `kind` property to `NodeWrap`
+* added `getControlFlowEnd` to public API
+
+# 2.16.0
+
+**Features:**
+
+* added `isDecorator` and `isCallLikeExpression` typeguards
+
+# 2.15.0
+
+**Features:**
+
+* added `convertAst` utility to produce a flattened and wrapped version of the AST
+
+# 2.14.0
+
+**Features:**
+
+* added `isDeleteExpression`
+* added `getLineBreakStyle`
+
+# 2.13.1
+
+**Bugfixes:**
+
+* fixed name of `isJsxFragment`
+
+# 2.13.0
+
+**Features:**
+
+* added support for `JsxFragment` introduced in typescript@2.6.2
+* added corresponding typeguard functions
+
+# 2.12.2
+
+**Bugfixes:**
+
+* `endsControlFlow`
+  * added missing logic for labeled statement, iteration statements and try-catch
+  * added missing logic for `break` and `continue` with labels
+  * take all jump statements into account, not only the last statement
+* `isValidIdentifier` and `isValidNumericLiteral` handle irregular whitespace
+* `findImports` searches in ambient modules inside regular `.ts` files (not only `.d.ts`)
+* `canHaveJsDoc` is now a typeguard
+
+# 2.12.1
+
+**Bugfixes:**
+
+* `forEachTokenWithTrivia`
+  * handles irregular whitespace and no longer visits some tokens twice
+  * correctly calculates the range of JsxText
+
+# 2.12.0
+
+**API-Changes:**
+
+* deprecated `ImportOptions` if favor of the new `ImportKind` enum
+
+# 2.11.2
+
+**Bugfixes:**
+
+* `parseJsDocOfNode`: set correct `pos`, `end` and `parent` properties. Also affects `getJsDoc` of `EndOfFileToken`
+
+# 2.11.1
+
+**Bugfixes:**
+
+* `collectVariableUsage`: correctly consider catch binding as block scoped declaration inside catch block
+
+# 2.11.0
+
+**Bugfixes:**
+
+* `getJsDoc` now correctly returns JsDoc for `EndOfFileToken`
+
+**Features:**
+
+* added utility `parseJsDocOfNode`
+
+# 2.10.0
+
+**Features:**
+
+* added utility `findImports` to find all kinds of imports in a source file
+
+# 2.9.0
+
+**Features:**
+
+* added typeguard `isMappedTypeNode`
+* added utilities `canHaveJsDoc` and `getJsDoc`
+
+# 2.8.2
+
+**Bugfixes:**
+
+* `collectVariableUsage`: handle global augmentation like other module augmentations
+
+# 2.8.1
+
+**Bugfixes:**
+
+* Support `typescript@2.5.1` with optional catch binding
+* `collectVariableUsage` fixed a bug where method decorator had method's parameters in scope
+
+# 2.8.0
+
+* Compatibility with the latest typescript nightly
+* Added `getIdentifierText` to unescape identifiers across typescript versions
+
+# 2.7.1
+
+**Bugfixes:**
+
+* `isReassignmentTarget` don't return `true` for right side of assignment
+
+# 2.7.0
+
+**Features:**
+
+* Added `isReassignmentTarget` utility
+
+# 2.6.1
+
+**Bugfixes:**
+
+* `getDeclarationDomain` now returns `undefined` for Parameter in IndexSignature
+* `collectVariableUsage` ignores Parameter in IndexSignature
+
+# 2.6.0
+
+**Bugfixes:**
+
+* `collectVariableUsage`:
+  * don't merge imports with global declarations
+  * treat everything in a declaration file as exported if there is no explicit `export {};`
+* `isExpressionValueUsed`: handle destructuring in `for...of`
+
+**Features:**
+
+* Added `getModifier` utility
+* Added `DeclarationDomain.Import` to distinguish imports from other declarations
+
+# 2.5.1
+
+**Bugfixes:**
+
+* `collectVariableUsage` ignore jump labels as in `break label;`
+
+# 2.5.0
+
+**Bugfixes:**
+
+* `isFunctionWithBody` handles constructor overload correctly.
+
+**Features:**
+
+* Implemented `isExpressionValueUsed` to check whether the result of an expression is actually used.
+* Implemented `getDeclarationDomain` to determine if a given declaration introduces a new symbol in the value or type domain.
+
+**`collectVariableUses` is now usable**
+
+* no longer ignores signatures and its parameters
+* don't merge declarations and uses across domains
+* no longer marks exceptions in catch clause or parameter properties as exported
+* fixed exports of namespaces
+* fixed scoping of ClassExpression name
+* correcly handle ambient namespaces and module augmentations
+* fixed how `: typeof foo` is handled for parameters and function return type
+* **still WIP**: `export {Foo as Bar}` inside ambient namespaces and modules
+
+# 2.4.0
+
+**Bugfixes:**
+
+* `getLineRanges`: `contentLength` now contains the correct line length when there are multiple consecutive line break characters
+* `getTokenAtPosition`: don't match tokens that end at the specified position (because that's already outside of their range)
+* deprecated the misnamed `isModfierFlagSet`, use the new `isModifierFlagSet` instead
+
+**Features:**
+
+* Added typeguard: `isJsDoc`
+* Added experimental scope and usage analysis (`getUsageDomain` and `collectVariableUsage`)
+
+# 2.3.0
+
+**Bugfixes:**
+
+* `forEachComment` no longer omits some comments when callback returns a truthy value
+* `isPositionInComment` fixed false positive inside JSXText
+
+**Features:**
+
+* Added utility: `getCommentAtPosition`
+
+# 2.2.0
+
+**Bugfixes:**
+
+* Fixed bit value of `SideEffectOptions.JsxElement` to be a power of 2
+
+**Features:**
+
+* Added utilities: `getTokenAtPosition` and `isPositionInComment`
+
+# 2.1.0
+
+**Features:**
+
+* Added typeguard `isExpression`
+* Added utilities: `hasSideEffects`, `getDeclarationOfBindingElement`
+
+# 2.0.0
+
+**Breaking Changes:**
+
+* Dropped compatibility with `typescript@<2.1.0`
+* Removed misnamed `isNumericliteral`, use `isNumericLiteral` instead (notice the uppercase L)
+* Removed `isEnumLiteralType` which will cause compile errors with typescript@2.4.0
+* Refactored directory structure: all imports that referenced subdirectories (e.g. `require('tsutils/src/typeguard')` will be broken
+
+**Features:**
+
+* New directory structure allows imports of typeguards or utils independently, e.g. (`require('tsutils/typeguard')`)
+
+# 1.9.1
+
+**Bugfixes:**
+
+* `isObjectFlagSet` now uses the correct `objectFlags` property
+
+# 1.9.0
+
+**Bugfixes:**
+
+* `getNextToken` no longer omits `EndOfFileToken` when there is no trivia before EOF. That means the only inputs where `getNextToken` returns `undefined` are `SourceFile` and `EndOfFileToken`
+
+**Features**:
+
+* Added typeguards for types
+* Added utilities for flag checking: `isNodeFlagSet`, `isTypeFlagSet`, `isSymbolFlagSet`,`isObjectFlagSet`, `isModifierFlagSet`
+
+# 1.8.0
+
+**Features:**
+
+* Support peer dependency of typescript nightlies of 2.4.0
+* Added typeguards: `isJsxAttributes`, `isIntersectionTypeNode`, `isTypeOperatorNode`, `isTypePredicateNode`, `isTypeQueryNode`, `isUnionTypeNode`
+
+# 1.7.0
+
+**Bugfixes:**
+
+* `isFunctionScopeBoundary` now handles Interfaces, TypeAliases, FunctionSignatures, etc
+
+**Features:**
+
+* Added utilities: `isThisParameter`, `isSameLine` and `isFunctionWithBody`
+
+# 1.6.0
+
+**Features:**
+
+* Add `isValidPropertyAccess`, `isValidNumericLiteral` and `isValidPropertyName`
+
+# 1.5.0
+
+**Features:**
+
+* Add `isValidIdentifier`
+
+# 1.4.0
+
+**Features:**
+
+* Add `contentLength` property to the result of `getLineRanges`
+
+# 1.3.0
+
+**Bugfixes:**
+
+* `canHaveLeadingTrivia`:
+  * Fix property access on undefined parent reference
+  * Fixes: [palantir/tslint#2330](https://github.com/palantir/tslint/issues/2330)
+* `hasOwnThisReference`: now includes accessors on object literals
+
+**Features:**
+
+* Typeguards:
+  * isTypeParameterDeclaration
+  * isEnitityName
+
+# 1.2.2
+
+**Bugfixes:**
+
+* `hasOwnThisReference`:
+  * exclude overload signatures of function declarations
+  * add method declarations on object literals
+
+# 1.2.1
+
+**Bugfixes:**
+
+* Fix name of `isNumericLiteral`
+
+# 1.2.0
+
+**Features:**
+
+* Typeguards:
+  * isEnumMember
+  * isExpressionWithTypeArguments
+  * isImportSpecifier
+* Utilities:
+  * isJsDocKind, isTypeNodeKind
+* Allow typescript@next in peerDependencies
+
+# 1.1.0
+
+**Bugfixes:**
+
+* Fix isBlockScopeBoundary: Remove WithStatement, IfStatment, DoStatement and WhileStatement because they are no scope boundary whitout a block.
+
+**Features:**
+
+* Added more typeguards:
+  * isAssertionExpression
+  * isEmptyStatement
+  * isJsxAttributeLike
+  * isJsxOpeningLikeElement
+  * isNonNullExpression
+  * isSyntaxList
+* Utilities:
+  * getNextToken, getPreviousToken
+  * hasOwnThisReference
+  * getLineRanges
+
+# 1.0.0
+
+**Features:**
+
+* Initial implementation of typeguards
+* Utilities:
+  * getChildOfKind
+  * isNodeKind, isAssignmentKind
+  * hasModifier, isParameterProperty, hasAccessModifier
+  * getPreviousStatement, getNextStatement
+  * getPropertyName
+  * forEachDestructuringIdentifier, forEachDeclaredVariable
+  * getVariableDeclarationKind, isBlockScopedVariableDeclarationList, isBlockScopedVariableDeclaration
+  * isScopeBoundary, isFunctionScopeBoundary, isBlockScopeBoundary
+  * forEachToken, forEachTokenWithTrivia, forEachComment
+  * endsControlFlow
diff --git a/server/node_modules/tsutils/LICENSE b/server/node_modules/tsutils/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..3a990ff4054f34735863d1aa663661e01df07fb6
--- /dev/null
+++ b/server/node_modules/tsutils/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 Klaus Meinhardt
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/server/node_modules/tsutils/README.md b/server/node_modules/tsutils/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..a2363e6acabfed8d9aa3f2e07764510ad4a1b560
--- /dev/null
+++ b/server/node_modules/tsutils/README.md
@@ -0,0 +1,61 @@
+# Utility functions for working with typescript's AST
+
+[![Greenkeeper badge](https://badges.greenkeeper.io/ajafff/tsutils.svg)](https://greenkeeper.io/)
+
+## Usage
+
+This package consists of two major parts: utilities and typeguard functions.
+By importing the project you will get both of them.
+```js
+import * as utils from "tsutils";
+utils.isIdentifier(node); // typeguard
+utils.getLineRanges(sourceFile); // utilities
+```
+
+If you don't need everything offered by this package, you can select what should be imported. The parts that are not imported are never read from disk and may save some startup time and reduce memory consumtion.
+
+If you only need typeguards you can explicitly import them:
+```js
+import { isIdentifier } from "tsutils/typeguard";
+// You can even distiguish between typeguards for nodes and types
+import { isUnionTypeNode } from "tsutils/typeguard/node";
+import { isUnionType } from "tsutils/typeguard/type";
+```
+
+If you only need the utilities you can also explicitly import them:
+```js
+import { forEachComment, forEachToken } from "tsutils/util";
+```
+
+### Typescript version dependency
+
+This package is backwards compatible with typescript 2.8.0 at runtime although compiling might need a newer version of typescript installed.
+
+Using `typescript@next` might work, but it's not officially supported. If you encounter any bugs, please open an issue.
+
+For compatibility with older versions of TypeScript typeguard functions are separated by TypeScript version. If you are stuck on `typescript@2.8`, you should import directly from the submodule for that version:
+
+```js
+// all typeguards compatible with typescript@2.8
+import { isIdentifier } from "tsutils/typeguard/2.8";
+// you can even use nested submodules
+import { isIdentifier } from "tsutils/typeguard/2.8/node";
+
+// all typeguards compatible with typescript@2.9 (includes those of 2.8)
+import { isIdentifier } from "tsutils/typeguard/2.9";
+
+// always points to the latest stable version (2.9 as of writing this)
+import { isIdentifier } from "tsutils/typeguard";
+import { isIdentifier } from "tsutils";
+
+// always points to the typeguards for the next TypeScript version (3.0 as of writing this)
+import { isIdentifier } from "tsutils/typeguard/next";
+```
+
+Note that if you are also using utility functions, you should prefer the relevant submodule:
+
+```js
+// importing directly from 'tsutils' would pull in the latest typeguards
+import { forEachToken } from 'tsutils/util';
+import { isIdentifier } from 'tsutils/typeguard/2.8';
+```
diff --git a/server/node_modules/tsutils/index.d.ts b/server/node_modules/tsutils/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..26b9ee17cfa6462a65df7942d3f3ea4034120480
--- /dev/null
+++ b/server/node_modules/tsutils/index.d.ts
@@ -0,0 +1,2 @@
+export * from './typeguard';
+export * from './util';
diff --git a/server/node_modules/tsutils/index.js b/server/node_modules/tsutils/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..4ee8dc264b95f561af772e993e6ff457c6443669
--- /dev/null
+++ b/server/node_modules/tsutils/index.js
@@ -0,0 +1,5 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("./typeguard"), exports);
+tslib_1.__exportStar(require("./util"), exports);
diff --git a/server/node_modules/tsutils/package.json b/server/node_modules/tsutils/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..6034c2d77c9852dd7f2407a2e218dd6642115f49
--- /dev/null
+++ b/server/node_modules/tsutils/package.json
@@ -0,0 +1,93 @@
+{
+  "_from": "tsutils@^3.17.1",
+  "_id": "tsutils@3.17.1",
+  "_inBundle": false,
+  "_integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
+  "_location": "/tsutils",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "tsutils@^3.17.1",
+    "name": "tsutils",
+    "escapedName": "tsutils",
+    "rawSpec": "^3.17.1",
+    "saveSpec": null,
+    "fetchSpec": "^3.17.1"
+  },
+  "_requiredBy": [
+    "/@typescript-eslint/eslint-plugin",
+    "/@typescript-eslint/typescript-estree"
+  ],
+  "_resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
+  "_shasum": "ed719917f11ca0dee586272b2ac49e015a2dd759",
+  "_spec": "tsutils@^3.17.1",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\@typescript-eslint\\eslint-plugin",
+  "author": {
+    "name": "Klaus Meinhardt"
+  },
+  "bugs": {
+    "url": "https://github.com/ajafff/tsutils/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "tslib": "^1.8.1"
+  },
+  "deprecated": false,
+  "description": "utilities for working with typescript's AST",
+  "devDependencies": {
+    "@fimbul/mithotyn": "^0.17.0",
+    "@fimbul/valtyr": "^0.20.0",
+    "@fimbul/wotan": "^0.20.0",
+    "@types/chai": "^4.0.10",
+    "@types/mocha": "^5.0.0",
+    "@types/node": "^11.13.0",
+    "chai": "^4.1.2",
+    "coveralls": "^3.0.0",
+    "github-release-from-changelog": "^1.3.0",
+    "mocha": "^6.0.2",
+    "npm-run-all": "^4.1.2",
+    "nyc": "^13.3.0",
+    "ts-transform-const-enum": "^0.0.1",
+    "tslint": "^5.8.0",
+    "tslint-consistent-codestyle": "^1.11.0",
+    "ttypescript": "^1.5.5",
+    "typescript": "^3.6.0-dev.20190804"
+  },
+  "engines": {
+    "node": ">= 6"
+  },
+  "homepage": "https://github.com/ajafff/tsutils#readme",
+  "keywords": [
+    "typescript",
+    "ts",
+    "ast",
+    "typeguard",
+    "utils",
+    "helper",
+    "node"
+  ],
+  "license": "MIT",
+  "name": "tsutils",
+  "peerDependencies": {
+    "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/ajafff/tsutils.git"
+  },
+  "scripts": {
+    "compile": "rm -rf {,util,typeguard,test/**}/*.js; ttsc -p .",
+    "coverage": "nyc run-s test",
+    "github-release": "GITHUB_TOKEN=$(cat ~/github_token.txt) github-release-from-changelog",
+    "lint": "run-p lint:*",
+    "lint:tslint": "wotan -m @fimbul/valtyr",
+    "lint:wotan": "wotan",
+    "postpublish": "git push origin master --tags; run-s github-release",
+    "prepublishOnly": "run-s verify",
+    "report-coverage": "cat ./coverage/lcov.info | coveralls",
+    "test": "mocha test/*Tests.js && tslint --test 'test/rules/**/tslint.json'",
+    "verify": "run-s compile lint coverage"
+  },
+  "version": "3.17.1"
+}
diff --git a/server/node_modules/tsutils/typeguard/2.8/index.d.ts b/server/node_modules/tsutils/typeguard/2.8/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..71762921c4a7a2e6ac6281890e4c1433cdd6dd66
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/2.8/index.d.ts
@@ -0,0 +1,2 @@
+export * from './node';
+export * from './type';
diff --git a/server/node_modules/tsutils/typeguard/2.8/index.js b/server/node_modules/tsutils/typeguard/2.8/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c381e79a0046eb8a3708a62612a903389eff457
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/2.8/index.js
@@ -0,0 +1,5 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("./node"), exports);
+tslib_1.__exportStar(require("./type"), exports);
diff --git a/server/node_modules/tsutils/typeguard/2.8/node.d.ts b/server/node_modules/tsutils/typeguard/2.8/node.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c5aa5a9d1060b979e0e8de9aed1275cf8dea30c8
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/2.8/node.d.ts
@@ -0,0 +1,155 @@
+import * as ts from 'typescript';
+export declare function isAccessorDeclaration(node: ts.Node): node is ts.AccessorDeclaration;
+export declare function isArrayBindingPattern(node: ts.Node): node is ts.ArrayBindingPattern;
+export declare function isArrayLiteralExpression(node: ts.Node): node is ts.ArrayLiteralExpression;
+export declare function isArrayTypeNode(node: ts.Node): node is ts.ArrayTypeNode;
+export declare function isArrowFunction(node: ts.Node): node is ts.ArrowFunction;
+export declare function isAsExpression(node: ts.Node): node is ts.AsExpression;
+export declare function isAssertionExpression(node: ts.Node): node is ts.AssertionExpression;
+export declare function isAwaitExpression(node: ts.Node): node is ts.AwaitExpression;
+export declare function isBinaryExpression(node: ts.Node): node is ts.BinaryExpression;
+export declare function isBindingElement(node: ts.Node): node is ts.BindingElement;
+export declare function isBindingPattern(node: ts.Node): node is ts.BindingPattern;
+export declare function isBlock(node: ts.Node): node is ts.Block;
+export declare function isBlockLike(node: ts.Node): node is ts.BlockLike;
+export declare function isBooleanLiteral(node: ts.Node): node is ts.BooleanLiteral;
+export declare function isBreakOrContinueStatement(node: ts.Node): node is ts.BreakOrContinueStatement;
+export declare function isBreakStatement(node: ts.Node): node is ts.BreakStatement;
+export declare function isCallExpression(node: ts.Node): node is ts.CallExpression;
+export declare function isCallLikeExpression(node: ts.Node): node is ts.CallLikeExpression;
+export declare function isCallSignatureDeclaration(node: ts.Node): node is ts.CallSignatureDeclaration;
+export declare function isCaseBlock(node: ts.Node): node is ts.CaseBlock;
+export declare function isCaseClause(node: ts.Node): node is ts.CaseClause;
+export declare function isCaseOrDefaultClause(node: ts.Node): node is ts.CaseOrDefaultClause;
+export declare function isCatchClause(node: ts.Node): node is ts.CatchClause;
+export declare function isClassDeclaration(node: ts.Node): node is ts.ClassDeclaration;
+export declare function isClassExpression(node: ts.Node): node is ts.ClassExpression;
+export declare function isClassLikeDeclaration(node: ts.Node): node is ts.ClassLikeDeclaration;
+export declare function isCommaListExpression(node: ts.Node): node is ts.CommaListExpression;
+export declare function isConditionalExpression(node: ts.Node): node is ts.ConditionalExpression;
+export declare function isConditionalTypeNode(node: ts.Node): node is ts.ConditionalTypeNode;
+export declare function isConstructorDeclaration(node: ts.Node): node is ts.ConstructorDeclaration;
+export declare function isConstructorTypeNode(node: ts.Node): node is ts.ConstructorTypeNode;
+export declare function isConstructSignatureDeclaration(node: ts.Node): node is ts.ConstructSignatureDeclaration;
+export declare function isContinueStatement(node: ts.Node): node is ts.ContinueStatement;
+export declare function isComputedPropertyName(node: ts.Node): node is ts.ComputedPropertyName;
+export declare function isDebuggerStatement(node: ts.Node): node is ts.DebuggerStatement;
+export declare function isDecorator(node: ts.Node): node is ts.Decorator;
+export declare function isDefaultClause(node: ts.Node): node is ts.DefaultClause;
+export declare function isDeleteExpression(node: ts.Node): node is ts.DeleteExpression;
+export declare function isDoStatement(node: ts.Node): node is ts.DoStatement;
+export declare function isElementAccessExpression(node: ts.Node): node is ts.ElementAccessExpression;
+export declare function isEmptyStatement(node: ts.Node): node is ts.EmptyStatement;
+export declare function isEntityName(node: ts.Node): node is ts.EntityName;
+export declare function isEntityNameExpression(node: ts.Node): node is ts.EntityNameExpression;
+export declare function isEnumDeclaration(node: ts.Node): node is ts.EnumDeclaration;
+export declare function isEnumMember(node: ts.Node): node is ts.EnumMember;
+export declare function isExportAssignment(node: ts.Node): node is ts.ExportAssignment;
+export declare function isExportDeclaration(node: ts.Node): node is ts.ExportDeclaration;
+export declare function isExportSpecifier(node: ts.Node): node is ts.ExportSpecifier;
+export declare function isExpression(node: ts.Node): node is ts.Expression;
+export declare function isExpressionStatement(node: ts.Node): node is ts.ExpressionStatement;
+export declare function isExpressionWithTypeArguments(node: ts.Node): node is ts.ExpressionWithTypeArguments;
+export declare function isExternalModuleReference(node: ts.Node): node is ts.ExternalModuleReference;
+export declare function isForInStatement(node: ts.Node): node is ts.ForInStatement;
+export declare function isForInOrOfStatement(node: ts.Node): node is ts.ForInOrOfStatement;
+export declare function isForOfStatement(node: ts.Node): node is ts.ForOfStatement;
+export declare function isForStatement(node: ts.Node): node is ts.ForStatement;
+export declare function isFunctionDeclaration(node: ts.Node): node is ts.FunctionDeclaration;
+export declare function isFunctionExpression(node: ts.Node): node is ts.FunctionExpression;
+export declare function isFunctionTypeNode(node: ts.Node): node is ts.FunctionTypeNode;
+export declare function isGetAccessorDeclaration(node: ts.Node): node is ts.GetAccessorDeclaration;
+export declare function isIdentifier(node: ts.Node): node is ts.Identifier;
+export declare function isIfStatement(node: ts.Node): node is ts.IfStatement;
+export declare function isImportClause(node: ts.Node): node is ts.ImportClause;
+export declare function isImportDeclaration(node: ts.Node): node is ts.ImportDeclaration;
+export declare function isImportEqualsDeclaration(node: ts.Node): node is ts.ImportEqualsDeclaration;
+export declare function isImportSpecifier(node: ts.Node): node is ts.ImportSpecifier;
+export declare function isIndexedAccessTypeNode(node: ts.Node): node is ts.IndexedAccessTypeNode;
+export declare function isIndexSignatureDeclaration(node: ts.Node): node is ts.IndexSignatureDeclaration;
+export declare function isInferTypeNode(node: ts.Node): node is ts.InferTypeNode;
+export declare function isInterfaceDeclaration(node: ts.Node): node is ts.InterfaceDeclaration;
+export declare function isIntersectionTypeNode(node: ts.Node): node is ts.IntersectionTypeNode;
+export declare function isIterationStatement(node: ts.Node): node is ts.IterationStatement;
+export declare function isJsDoc(node: ts.Node): node is ts.JSDoc;
+export declare function isJsxAttribute(node: ts.Node): node is ts.JsxAttribute;
+export declare function isJsxAttributeLike(node: ts.Node): node is ts.JsxAttributeLike;
+export declare function isJsxAttributes(node: ts.Node): node is ts.JsxAttributes;
+export declare function isJsxClosingElement(node: ts.Node): node is ts.JsxClosingElement;
+export declare function isJsxClosingFragment(node: ts.Node): node is ts.JsxClosingFragment;
+export declare function isJsxElement(node: ts.Node): node is ts.JsxElement;
+export declare function isJsxExpression(node: ts.Node): node is ts.JsxExpression;
+export declare function isJsxFragment(node: ts.Node): node is ts.JsxFragment;
+export declare function isJsxOpeningElement(node: ts.Node): node is ts.JsxOpeningElement;
+export declare function isJsxOpeningFragment(node: ts.Node): node is ts.JsxOpeningFragment;
+export declare function isJsxOpeningLikeElement(node: ts.Node): node is ts.JsxOpeningLikeElement;
+export declare function isJsxSelfClosingElement(node: ts.Node): node is ts.JsxSelfClosingElement;
+export declare function isJsxSpreadAttribute(node: ts.Node): node is ts.JsxSpreadAttribute;
+export declare function isJsxText(node: ts.Node): node is ts.JsxText;
+export declare function isLabeledStatement(node: ts.Node): node is ts.LabeledStatement;
+export declare function isLiteralExpression(node: ts.Node): node is ts.LiteralExpression;
+export declare function isLiteralTypeNode(node: ts.Node): node is ts.LiteralTypeNode;
+export declare function isMappedTypeNode(node: ts.Node): node is ts.MappedTypeNode;
+export declare function isMetaProperty(node: ts.Node): node is ts.MetaProperty;
+export declare function isMethodDeclaration(node: ts.Node): node is ts.MethodDeclaration;
+export declare function isMethodSignature(node: ts.Node): node is ts.MethodSignature;
+export declare function isModuleBlock(node: ts.Node): node is ts.ModuleBlock;
+export declare function isModuleDeclaration(node: ts.Node): node is ts.ModuleDeclaration;
+export declare function isNamedExports(node: ts.Node): node is ts.NamedExports;
+export declare function isNamedImports(node: ts.Node): node is ts.NamedImports;
+export declare function isNamespaceDeclaration(node: ts.Node): node is ts.NamespaceDeclaration;
+export declare function isNamespaceImport(node: ts.Node): node is ts.NamespaceImport;
+export declare function isNamespaceExportDeclaration(node: ts.Node): node is ts.NamespaceExportDeclaration;
+export declare function isNewExpression(node: ts.Node): node is ts.NewExpression;
+export declare function isNonNullExpression(node: ts.Node): node is ts.NonNullExpression;
+export declare function isNoSubstitutionTemplateLiteral(node: ts.Node): node is ts.NoSubstitutionTemplateLiteral;
+export declare function isNullLiteral(node: ts.Node): node is ts.NullLiteral;
+export declare function isNumericLiteral(node: ts.Node): node is ts.NumericLiteral;
+export declare function isNumericOrStringLikeLiteral(node: ts.Node): node is ts.NumericLiteral | ts.StringLiteral | ts.NoSubstitutionTemplateLiteral;
+export declare function isObjectBindingPattern(node: ts.Node): node is ts.ObjectBindingPattern;
+export declare function isObjectLiteralExpression(node: ts.Node): node is ts.ObjectLiteralExpression;
+export declare function isOmittedExpression(node: ts.Node): node is ts.OmittedExpression;
+export declare function isParameterDeclaration(node: ts.Node): node is ts.ParameterDeclaration;
+export declare function isParenthesizedExpression(node: ts.Node): node is ts.ParenthesizedExpression;
+export declare function isParenthesizedTypeNode(node: ts.Node): node is ts.ParenthesizedTypeNode;
+export declare function isPostfixUnaryExpression(node: ts.Node): node is ts.PostfixUnaryExpression;
+export declare function isPrefixUnaryExpression(node: ts.Node): node is ts.PrefixUnaryExpression;
+export declare function isPropertyAccessExpression(node: ts.Node): node is ts.PropertyAccessExpression;
+export declare function isPropertyAssignment(node: ts.Node): node is ts.PropertyAssignment;
+export declare function isPropertyDeclaration(node: ts.Node): node is ts.PropertyDeclaration;
+export declare function isPropertySignature(node: ts.Node): node is ts.PropertySignature;
+export declare function isQualifiedName(node: ts.Node): node is ts.QualifiedName;
+export declare function isRegularExpressionLiteral(node: ts.Node): node is ts.RegularExpressionLiteral;
+export declare function isReturnStatement(node: ts.Node): node is ts.ReturnStatement;
+export declare function isSetAccessorDeclaration(node: ts.Node): node is ts.SetAccessorDeclaration;
+export declare function isShorthandPropertyAssignment(node: ts.Node): node is ts.ShorthandPropertyAssignment;
+export declare function isSignatureDeclaration(node: ts.Node): node is ts.SignatureDeclaration;
+export declare function isSourceFile(node: ts.Node): node is ts.SourceFile;
+export declare function isSpreadAssignment(node: ts.Node): node is ts.SpreadAssignment;
+export declare function isSpreadElement(node: ts.Node): node is ts.SpreadElement;
+export declare function isStringLiteral(node: ts.Node): node is ts.StringLiteral;
+export declare function isSwitchStatement(node: ts.Node): node is ts.SwitchStatement;
+export declare function isSyntaxList(node: ts.Node): node is ts.SyntaxList;
+export declare function isTaggedTemplateExpression(node: ts.Node): node is ts.TaggedTemplateExpression;
+export declare function isTemplateExpression(node: ts.Node): node is ts.TemplateExpression;
+export declare function isTemplateLiteral(node: ts.Node): node is ts.TemplateLiteral;
+export declare function isTextualLiteral(node: ts.Node): node is ts.StringLiteral | ts.NoSubstitutionTemplateLiteral;
+export declare function isThrowStatement(node: ts.Node): node is ts.ThrowStatement;
+export declare function isTryStatement(node: ts.Node): node is ts.TryStatement;
+export declare function isTupleTypeNode(node: ts.Node): node is ts.TupleTypeNode;
+export declare function isTypeAliasDeclaration(node: ts.Node): node is ts.TypeAliasDeclaration;
+export declare function isTypeAssertion(node: ts.Node): node is ts.TypeAssertion;
+export declare function isTypeLiteralNode(node: ts.Node): node is ts.TypeLiteralNode;
+export declare function isTypeOfExpression(node: ts.Node): node is ts.TypeOfExpression;
+export declare function isTypeOperatorNode(node: ts.Node): node is ts.TypeOperatorNode;
+export declare function isTypeParameterDeclaration(node: ts.Node): node is ts.TypeParameterDeclaration;
+export declare function isTypePredicateNode(node: ts.Node): node is ts.TypePredicateNode;
+export declare function isTypeReferenceNode(node: ts.Node): node is ts.TypeReferenceNode;
+export declare function isTypeQueryNode(node: ts.Node): node is ts.TypeQueryNode;
+export declare function isUnionTypeNode(node: ts.Node): node is ts.UnionTypeNode;
+export declare function isVariableDeclaration(node: ts.Node): node is ts.VariableDeclaration;
+export declare function isVariableStatement(node: ts.Node): node is ts.VariableStatement;
+export declare function isVariableDeclarationList(node: ts.Node): node is ts.VariableDeclarationList;
+export declare function isVoidExpression(node: ts.Node): node is ts.VoidExpression;
+export declare function isWhileStatement(node: ts.Node): node is ts.WhileStatement;
+export declare function isWithStatement(node: ts.Node): node is ts.WithStatement;
diff --git a/server/node_modules/tsutils/typeguard/2.8/node.js b/server/node_modules/tsutils/typeguard/2.8/node.js
new file mode 100644
index 0000000000000000000000000000000000000000..b63a09be9179fb916ec60dcf6fb3ae515e24e9b3
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/2.8/node.js
@@ -0,0 +1,709 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const ts = require("typescript");
+function isAccessorDeclaration(node) {
+    return node.kind === ts.SyntaxKind.GetAccessor ||
+        node.kind === ts.SyntaxKind.SetAccessor;
+}
+exports.isAccessorDeclaration = isAccessorDeclaration;
+function isArrayBindingPattern(node) {
+    return node.kind === ts.SyntaxKind.ArrayBindingPattern;
+}
+exports.isArrayBindingPattern = isArrayBindingPattern;
+function isArrayLiteralExpression(node) {
+    return node.kind === ts.SyntaxKind.ArrayLiteralExpression;
+}
+exports.isArrayLiteralExpression = isArrayLiteralExpression;
+function isArrayTypeNode(node) {
+    return node.kind === ts.SyntaxKind.ArrayType;
+}
+exports.isArrayTypeNode = isArrayTypeNode;
+function isArrowFunction(node) {
+    return node.kind === ts.SyntaxKind.ArrowFunction;
+}
+exports.isArrowFunction = isArrowFunction;
+function isAsExpression(node) {
+    return node.kind === ts.SyntaxKind.AsExpression;
+}
+exports.isAsExpression = isAsExpression;
+function isAssertionExpression(node) {
+    return node.kind === ts.SyntaxKind.AsExpression ||
+        node.kind === ts.SyntaxKind.TypeAssertionExpression;
+}
+exports.isAssertionExpression = isAssertionExpression;
+function isAwaitExpression(node) {
+    return node.kind === ts.SyntaxKind.AwaitExpression;
+}
+exports.isAwaitExpression = isAwaitExpression;
+function isBinaryExpression(node) {
+    return node.kind === ts.SyntaxKind.BinaryExpression;
+}
+exports.isBinaryExpression = isBinaryExpression;
+function isBindingElement(node) {
+    return node.kind === ts.SyntaxKind.BindingElement;
+}
+exports.isBindingElement = isBindingElement;
+function isBindingPattern(node) {
+    return node.kind === ts.SyntaxKind.ArrayBindingPattern ||
+        node.kind === ts.SyntaxKind.ObjectBindingPattern;
+}
+exports.isBindingPattern = isBindingPattern;
+function isBlock(node) {
+    return node.kind === ts.SyntaxKind.Block;
+}
+exports.isBlock = isBlock;
+function isBlockLike(node) {
+    return node.statements !== undefined;
+}
+exports.isBlockLike = isBlockLike;
+function isBooleanLiteral(node) {
+    return node.kind === ts.SyntaxKind.TrueKeyword || node.kind === ts.SyntaxKind.FalseKeyword;
+}
+exports.isBooleanLiteral = isBooleanLiteral;
+function isBreakOrContinueStatement(node) {
+    return node.kind === ts.SyntaxKind.BreakStatement ||
+        node.kind === ts.SyntaxKind.ContinueStatement;
+}
+exports.isBreakOrContinueStatement = isBreakOrContinueStatement;
+function isBreakStatement(node) {
+    return node.kind === ts.SyntaxKind.BreakStatement;
+}
+exports.isBreakStatement = isBreakStatement;
+function isCallExpression(node) {
+    return node.kind === ts.SyntaxKind.CallExpression;
+}
+exports.isCallExpression = isCallExpression;
+function isCallLikeExpression(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.CallExpression:
+        case ts.SyntaxKind.Decorator:
+        case ts.SyntaxKind.JsxOpeningElement:
+        case ts.SyntaxKind.JsxSelfClosingElement:
+        case ts.SyntaxKind.NewExpression:
+        case ts.SyntaxKind.TaggedTemplateExpression:
+            return true;
+        default:
+            return false;
+    }
+}
+exports.isCallLikeExpression = isCallLikeExpression;
+function isCallSignatureDeclaration(node) {
+    return node.kind === ts.SyntaxKind.CallSignature;
+}
+exports.isCallSignatureDeclaration = isCallSignatureDeclaration;
+function isCaseBlock(node) {
+    return node.kind === ts.SyntaxKind.CaseBlock;
+}
+exports.isCaseBlock = isCaseBlock;
+function isCaseClause(node) {
+    return node.kind === ts.SyntaxKind.CaseClause;
+}
+exports.isCaseClause = isCaseClause;
+function isCaseOrDefaultClause(node) {
+    return node.kind === ts.SyntaxKind.CaseClause ||
+        node.kind === ts.SyntaxKind.DefaultClause;
+}
+exports.isCaseOrDefaultClause = isCaseOrDefaultClause;
+function isCatchClause(node) {
+    return node.kind === ts.SyntaxKind.CatchClause;
+}
+exports.isCatchClause = isCatchClause;
+function isClassDeclaration(node) {
+    return node.kind === ts.SyntaxKind.ClassDeclaration;
+}
+exports.isClassDeclaration = isClassDeclaration;
+function isClassExpression(node) {
+    return node.kind === ts.SyntaxKind.ClassExpression;
+}
+exports.isClassExpression = isClassExpression;
+function isClassLikeDeclaration(node) {
+    return node.kind === ts.SyntaxKind.ClassDeclaration ||
+        node.kind === ts.SyntaxKind.ClassExpression;
+}
+exports.isClassLikeDeclaration = isClassLikeDeclaration;
+function isCommaListExpression(node) {
+    return node.kind === ts.SyntaxKind.CommaListExpression;
+}
+exports.isCommaListExpression = isCommaListExpression;
+function isConditionalExpression(node) {
+    return node.kind === ts.SyntaxKind.ConditionalExpression;
+}
+exports.isConditionalExpression = isConditionalExpression;
+function isConditionalTypeNode(node) {
+    return node.kind === ts.SyntaxKind.ConditionalType;
+}
+exports.isConditionalTypeNode = isConditionalTypeNode;
+function isConstructorDeclaration(node) {
+    return node.kind === ts.SyntaxKind.Constructor;
+}
+exports.isConstructorDeclaration = isConstructorDeclaration;
+function isConstructorTypeNode(node) {
+    return node.kind === ts.SyntaxKind.ConstructorType;
+}
+exports.isConstructorTypeNode = isConstructorTypeNode;
+function isConstructSignatureDeclaration(node) {
+    return node.kind === ts.SyntaxKind.ConstructSignature;
+}
+exports.isConstructSignatureDeclaration = isConstructSignatureDeclaration;
+function isContinueStatement(node) {
+    return node.kind === ts.SyntaxKind.ContinueStatement;
+}
+exports.isContinueStatement = isContinueStatement;
+function isComputedPropertyName(node) {
+    return node.kind === ts.SyntaxKind.ComputedPropertyName;
+}
+exports.isComputedPropertyName = isComputedPropertyName;
+function isDebuggerStatement(node) {
+    return node.kind === ts.SyntaxKind.DebuggerStatement;
+}
+exports.isDebuggerStatement = isDebuggerStatement;
+function isDecorator(node) {
+    return node.kind === ts.SyntaxKind.Decorator;
+}
+exports.isDecorator = isDecorator;
+function isDefaultClause(node) {
+    return node.kind === ts.SyntaxKind.DefaultClause;
+}
+exports.isDefaultClause = isDefaultClause;
+function isDeleteExpression(node) {
+    return node.kind === ts.SyntaxKind.DeleteExpression;
+}
+exports.isDeleteExpression = isDeleteExpression;
+function isDoStatement(node) {
+    return node.kind === ts.SyntaxKind.DoStatement;
+}
+exports.isDoStatement = isDoStatement;
+function isElementAccessExpression(node) {
+    return node.kind === ts.SyntaxKind.ElementAccessExpression;
+}
+exports.isElementAccessExpression = isElementAccessExpression;
+function isEmptyStatement(node) {
+    return node.kind === ts.SyntaxKind.EmptyStatement;
+}
+exports.isEmptyStatement = isEmptyStatement;
+function isEntityName(node) {
+    return node.kind === ts.SyntaxKind.Identifier || isQualifiedName(node);
+}
+exports.isEntityName = isEntityName;
+function isEntityNameExpression(node) {
+    return node.kind === ts.SyntaxKind.Identifier ||
+        isPropertyAccessExpression(node) && isEntityNameExpression(node.expression);
+}
+exports.isEntityNameExpression = isEntityNameExpression;
+function isEnumDeclaration(node) {
+    return node.kind === ts.SyntaxKind.EnumDeclaration;
+}
+exports.isEnumDeclaration = isEnumDeclaration;
+function isEnumMember(node) {
+    return node.kind === ts.SyntaxKind.EnumMember;
+}
+exports.isEnumMember = isEnumMember;
+function isExportAssignment(node) {
+    return node.kind === ts.SyntaxKind.ExportAssignment;
+}
+exports.isExportAssignment = isExportAssignment;
+function isExportDeclaration(node) {
+    return node.kind === ts.SyntaxKind.ExportDeclaration;
+}
+exports.isExportDeclaration = isExportDeclaration;
+function isExportSpecifier(node) {
+    return node.kind === ts.SyntaxKind.ExportSpecifier;
+}
+exports.isExportSpecifier = isExportSpecifier;
+function isExpression(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.ArrayLiteralExpression:
+        case ts.SyntaxKind.ArrowFunction:
+        case ts.SyntaxKind.AsExpression:
+        case ts.SyntaxKind.AwaitExpression:
+        case ts.SyntaxKind.BinaryExpression:
+        case ts.SyntaxKind.CallExpression:
+        case ts.SyntaxKind.ClassExpression:
+        case ts.SyntaxKind.CommaListExpression:
+        case ts.SyntaxKind.ConditionalExpression:
+        case ts.SyntaxKind.DeleteExpression:
+        case ts.SyntaxKind.ElementAccessExpression:
+        case ts.SyntaxKind.FalseKeyword:
+        case ts.SyntaxKind.FunctionExpression:
+        case ts.SyntaxKind.Identifier:
+        case ts.SyntaxKind.JsxElement:
+        case ts.SyntaxKind.JsxFragment:
+        case ts.SyntaxKind.JsxExpression:
+        case ts.SyntaxKind.JsxOpeningElement:
+        case ts.SyntaxKind.JsxOpeningFragment:
+        case ts.SyntaxKind.JsxSelfClosingElement:
+        case ts.SyntaxKind.MetaProperty:
+        case ts.SyntaxKind.NewExpression:
+        case ts.SyntaxKind.NonNullExpression:
+        case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
+        case ts.SyntaxKind.NullKeyword:
+        case ts.SyntaxKind.NumericLiteral:
+        case ts.SyntaxKind.ObjectLiteralExpression:
+        case ts.SyntaxKind.OmittedExpression:
+        case ts.SyntaxKind.ParenthesizedExpression:
+        case ts.SyntaxKind.PostfixUnaryExpression:
+        case ts.SyntaxKind.PrefixUnaryExpression:
+        case ts.SyntaxKind.PropertyAccessExpression:
+        case ts.SyntaxKind.RegularExpressionLiteral:
+        case ts.SyntaxKind.SpreadElement:
+        case ts.SyntaxKind.StringLiteral:
+        case ts.SyntaxKind.SuperKeyword:
+        case ts.SyntaxKind.TaggedTemplateExpression:
+        case ts.SyntaxKind.TemplateExpression:
+        case ts.SyntaxKind.ThisKeyword:
+        case ts.SyntaxKind.TrueKeyword:
+        case ts.SyntaxKind.TypeAssertionExpression:
+        case ts.SyntaxKind.TypeOfExpression:
+        case ts.SyntaxKind.VoidExpression:
+        case ts.SyntaxKind.YieldExpression:
+            return true;
+        default:
+            return false;
+    }
+}
+exports.isExpression = isExpression;
+function isExpressionStatement(node) {
+    return node.kind === ts.SyntaxKind.ExpressionStatement;
+}
+exports.isExpressionStatement = isExpressionStatement;
+function isExpressionWithTypeArguments(node) {
+    return node.kind === ts.SyntaxKind.ExpressionWithTypeArguments;
+}
+exports.isExpressionWithTypeArguments = isExpressionWithTypeArguments;
+function isExternalModuleReference(node) {
+    return node.kind === ts.SyntaxKind.ExternalModuleReference;
+}
+exports.isExternalModuleReference = isExternalModuleReference;
+function isForInStatement(node) {
+    return node.kind === ts.SyntaxKind.ForInStatement;
+}
+exports.isForInStatement = isForInStatement;
+function isForInOrOfStatement(node) {
+    return node.kind === ts.SyntaxKind.ForOfStatement || node.kind === ts.SyntaxKind.ForInStatement;
+}
+exports.isForInOrOfStatement = isForInOrOfStatement;
+function isForOfStatement(node) {
+    return node.kind === ts.SyntaxKind.ForOfStatement;
+}
+exports.isForOfStatement = isForOfStatement;
+function isForStatement(node) {
+    return node.kind === ts.SyntaxKind.ForStatement;
+}
+exports.isForStatement = isForStatement;
+function isFunctionDeclaration(node) {
+    return node.kind === ts.SyntaxKind.FunctionDeclaration;
+}
+exports.isFunctionDeclaration = isFunctionDeclaration;
+function isFunctionExpression(node) {
+    return node.kind === ts.SyntaxKind.FunctionExpression;
+}
+exports.isFunctionExpression = isFunctionExpression;
+function isFunctionTypeNode(node) {
+    return node.kind === ts.SyntaxKind.FunctionType;
+}
+exports.isFunctionTypeNode = isFunctionTypeNode;
+function isGetAccessorDeclaration(node) {
+    return node.kind === ts.SyntaxKind.GetAccessor;
+}
+exports.isGetAccessorDeclaration = isGetAccessorDeclaration;
+function isIdentifier(node) {
+    return node.kind === ts.SyntaxKind.Identifier;
+}
+exports.isIdentifier = isIdentifier;
+function isIfStatement(node) {
+    return node.kind === ts.SyntaxKind.IfStatement;
+}
+exports.isIfStatement = isIfStatement;
+function isImportClause(node) {
+    return node.kind === ts.SyntaxKind.ImportClause;
+}
+exports.isImportClause = isImportClause;
+function isImportDeclaration(node) {
+    return node.kind === ts.SyntaxKind.ImportDeclaration;
+}
+exports.isImportDeclaration = isImportDeclaration;
+function isImportEqualsDeclaration(node) {
+    return node.kind === ts.SyntaxKind.ImportEqualsDeclaration;
+}
+exports.isImportEqualsDeclaration = isImportEqualsDeclaration;
+function isImportSpecifier(node) {
+    return node.kind === ts.SyntaxKind.ImportSpecifier;
+}
+exports.isImportSpecifier = isImportSpecifier;
+function isIndexedAccessTypeNode(node) {
+    return node.kind === ts.SyntaxKind.IndexedAccessType;
+}
+exports.isIndexedAccessTypeNode = isIndexedAccessTypeNode;
+function isIndexSignatureDeclaration(node) {
+    return node.kind === ts.SyntaxKind.IndexSignature;
+}
+exports.isIndexSignatureDeclaration = isIndexSignatureDeclaration;
+function isInferTypeNode(node) {
+    return node.kind === ts.SyntaxKind.InferType;
+}
+exports.isInferTypeNode = isInferTypeNode;
+function isInterfaceDeclaration(node) {
+    return node.kind === ts.SyntaxKind.InterfaceDeclaration;
+}
+exports.isInterfaceDeclaration = isInterfaceDeclaration;
+function isIntersectionTypeNode(node) {
+    return node.kind === ts.SyntaxKind.IntersectionType;
+}
+exports.isIntersectionTypeNode = isIntersectionTypeNode;
+function isIterationStatement(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.ForStatement:
+        case ts.SyntaxKind.ForOfStatement:
+        case ts.SyntaxKind.ForInStatement:
+        case ts.SyntaxKind.WhileStatement:
+        case ts.SyntaxKind.DoStatement:
+            return true;
+        default:
+            return false;
+    }
+}
+exports.isIterationStatement = isIterationStatement;
+function isJsDoc(node) {
+    return node.kind === ts.SyntaxKind.JSDocComment;
+}
+exports.isJsDoc = isJsDoc;
+function isJsxAttribute(node) {
+    return node.kind === ts.SyntaxKind.JsxAttribute;
+}
+exports.isJsxAttribute = isJsxAttribute;
+function isJsxAttributeLike(node) {
+    return node.kind === ts.SyntaxKind.JsxAttribute ||
+        node.kind === ts.SyntaxKind.JsxSpreadAttribute;
+}
+exports.isJsxAttributeLike = isJsxAttributeLike;
+function isJsxAttributes(node) {
+    return node.kind === ts.SyntaxKind.JsxAttributes;
+}
+exports.isJsxAttributes = isJsxAttributes;
+function isJsxClosingElement(node) {
+    return node.kind === ts.SyntaxKind.JsxClosingElement;
+}
+exports.isJsxClosingElement = isJsxClosingElement;
+function isJsxClosingFragment(node) {
+    return node.kind === ts.SyntaxKind.JsxClosingFragment;
+}
+exports.isJsxClosingFragment = isJsxClosingFragment;
+function isJsxElement(node) {
+    return node.kind === ts.SyntaxKind.JsxElement;
+}
+exports.isJsxElement = isJsxElement;
+function isJsxExpression(node) {
+    return node.kind === ts.SyntaxKind.JsxExpression;
+}
+exports.isJsxExpression = isJsxExpression;
+function isJsxFragment(node) {
+    return node.kind === ts.SyntaxKind.JsxFragment;
+}
+exports.isJsxFragment = isJsxFragment;
+function isJsxOpeningElement(node) {
+    return node.kind === ts.SyntaxKind.JsxOpeningElement;
+}
+exports.isJsxOpeningElement = isJsxOpeningElement;
+function isJsxOpeningFragment(node) {
+    return node.kind === ts.SyntaxKind.JsxOpeningFragment;
+}
+exports.isJsxOpeningFragment = isJsxOpeningFragment;
+function isJsxOpeningLikeElement(node) {
+    return node.kind === ts.SyntaxKind.JsxOpeningElement ||
+        node.kind === ts.SyntaxKind.JsxSelfClosingElement;
+}
+exports.isJsxOpeningLikeElement = isJsxOpeningLikeElement;
+function isJsxSelfClosingElement(node) {
+    return node.kind === ts.SyntaxKind.JsxSelfClosingElement;
+}
+exports.isJsxSelfClosingElement = isJsxSelfClosingElement;
+function isJsxSpreadAttribute(node) {
+    return node.kind === ts.SyntaxKind.JsxSpreadAttribute;
+}
+exports.isJsxSpreadAttribute = isJsxSpreadAttribute;
+function isJsxText(node) {
+    return node.kind === ts.SyntaxKind.JsxText;
+}
+exports.isJsxText = isJsxText;
+function isLabeledStatement(node) {
+    return node.kind === ts.SyntaxKind.LabeledStatement;
+}
+exports.isLabeledStatement = isLabeledStatement;
+function isLiteralExpression(node) {
+    return node.kind >= ts.SyntaxKind.FirstLiteralToken &&
+        node.kind <= ts.SyntaxKind.LastLiteralToken;
+}
+exports.isLiteralExpression = isLiteralExpression;
+function isLiteralTypeNode(node) {
+    return node.kind === ts.SyntaxKind.LiteralType;
+}
+exports.isLiteralTypeNode = isLiteralTypeNode;
+function isMappedTypeNode(node) {
+    return node.kind === ts.SyntaxKind.MappedType;
+}
+exports.isMappedTypeNode = isMappedTypeNode;
+function isMetaProperty(node) {
+    return node.kind === ts.SyntaxKind.MetaProperty;
+}
+exports.isMetaProperty = isMetaProperty;
+function isMethodDeclaration(node) {
+    return node.kind === ts.SyntaxKind.MethodDeclaration;
+}
+exports.isMethodDeclaration = isMethodDeclaration;
+function isMethodSignature(node) {
+    return node.kind === ts.SyntaxKind.MethodSignature;
+}
+exports.isMethodSignature = isMethodSignature;
+function isModuleBlock(node) {
+    return node.kind === ts.SyntaxKind.ModuleBlock;
+}
+exports.isModuleBlock = isModuleBlock;
+function isModuleDeclaration(node) {
+    return node.kind === ts.SyntaxKind.ModuleDeclaration;
+}
+exports.isModuleDeclaration = isModuleDeclaration;
+function isNamedExports(node) {
+    return node.kind === ts.SyntaxKind.NamedExports;
+}
+exports.isNamedExports = isNamedExports;
+function isNamedImports(node) {
+    return node.kind === ts.SyntaxKind.NamedImports;
+}
+exports.isNamedImports = isNamedImports;
+function isNamespaceDeclaration(node) {
+    return isModuleDeclaration(node) &&
+        node.name.kind === ts.SyntaxKind.Identifier &&
+        node.body !== undefined &&
+        (node.body.kind === ts.SyntaxKind.ModuleBlock ||
+            isNamespaceDeclaration(node.body));
+}
+exports.isNamespaceDeclaration = isNamespaceDeclaration;
+function isNamespaceImport(node) {
+    return node.kind === ts.SyntaxKind.NamespaceImport;
+}
+exports.isNamespaceImport = isNamespaceImport;
+function isNamespaceExportDeclaration(node) {
+    return node.kind === ts.SyntaxKind.NamespaceExportDeclaration;
+}
+exports.isNamespaceExportDeclaration = isNamespaceExportDeclaration;
+function isNewExpression(node) {
+    return node.kind === ts.SyntaxKind.NewExpression;
+}
+exports.isNewExpression = isNewExpression;
+function isNonNullExpression(node) {
+    return node.kind === ts.SyntaxKind.NonNullExpression;
+}
+exports.isNonNullExpression = isNonNullExpression;
+function isNoSubstitutionTemplateLiteral(node) {
+    return node.kind === ts.SyntaxKind.NoSubstitutionTemplateLiteral;
+}
+exports.isNoSubstitutionTemplateLiteral = isNoSubstitutionTemplateLiteral;
+function isNullLiteral(node) {
+    return node.kind === ts.SyntaxKind.NullKeyword;
+}
+exports.isNullLiteral = isNullLiteral;
+function isNumericLiteral(node) {
+    return node.kind === ts.SyntaxKind.NumericLiteral;
+}
+exports.isNumericLiteral = isNumericLiteral;
+function isNumericOrStringLikeLiteral(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.StringLiteral:
+        case ts.SyntaxKind.NumericLiteral:
+        case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
+            return true;
+        default:
+            return false;
+    }
+}
+exports.isNumericOrStringLikeLiteral = isNumericOrStringLikeLiteral;
+function isObjectBindingPattern(node) {
+    return node.kind === ts.SyntaxKind.ObjectBindingPattern;
+}
+exports.isObjectBindingPattern = isObjectBindingPattern;
+function isObjectLiteralExpression(node) {
+    return node.kind === ts.SyntaxKind.ObjectLiteralExpression;
+}
+exports.isObjectLiteralExpression = isObjectLiteralExpression;
+function isOmittedExpression(node) {
+    return node.kind === ts.SyntaxKind.OmittedExpression;
+}
+exports.isOmittedExpression = isOmittedExpression;
+function isParameterDeclaration(node) {
+    return node.kind === ts.SyntaxKind.Parameter;
+}
+exports.isParameterDeclaration = isParameterDeclaration;
+function isParenthesizedExpression(node) {
+    return node.kind === ts.SyntaxKind.ParenthesizedExpression;
+}
+exports.isParenthesizedExpression = isParenthesizedExpression;
+function isParenthesizedTypeNode(node) {
+    return node.kind === ts.SyntaxKind.ParenthesizedType;
+}
+exports.isParenthesizedTypeNode = isParenthesizedTypeNode;
+function isPostfixUnaryExpression(node) {
+    return node.kind === ts.SyntaxKind.PostfixUnaryExpression;
+}
+exports.isPostfixUnaryExpression = isPostfixUnaryExpression;
+function isPrefixUnaryExpression(node) {
+    return node.kind === ts.SyntaxKind.PrefixUnaryExpression;
+}
+exports.isPrefixUnaryExpression = isPrefixUnaryExpression;
+function isPropertyAccessExpression(node) {
+    return node.kind === ts.SyntaxKind.PropertyAccessExpression;
+}
+exports.isPropertyAccessExpression = isPropertyAccessExpression;
+function isPropertyAssignment(node) {
+    return node.kind === ts.SyntaxKind.PropertyAssignment;
+}
+exports.isPropertyAssignment = isPropertyAssignment;
+function isPropertyDeclaration(node) {
+    return node.kind === ts.SyntaxKind.PropertyDeclaration;
+}
+exports.isPropertyDeclaration = isPropertyDeclaration;
+function isPropertySignature(node) {
+    return node.kind === ts.SyntaxKind.PropertySignature;
+}
+exports.isPropertySignature = isPropertySignature;
+function isQualifiedName(node) {
+    return node.kind === ts.SyntaxKind.QualifiedName;
+}
+exports.isQualifiedName = isQualifiedName;
+function isRegularExpressionLiteral(node) {
+    return node.kind === ts.SyntaxKind.RegularExpressionLiteral;
+}
+exports.isRegularExpressionLiteral = isRegularExpressionLiteral;
+function isReturnStatement(node) {
+    return node.kind === ts.SyntaxKind.ReturnStatement;
+}
+exports.isReturnStatement = isReturnStatement;
+function isSetAccessorDeclaration(node) {
+    return node.kind === ts.SyntaxKind.SetAccessor;
+}
+exports.isSetAccessorDeclaration = isSetAccessorDeclaration;
+function isShorthandPropertyAssignment(node) {
+    return node.kind === ts.SyntaxKind.ShorthandPropertyAssignment;
+}
+exports.isShorthandPropertyAssignment = isShorthandPropertyAssignment;
+function isSignatureDeclaration(node) {
+    return node.parameters !== undefined;
+}
+exports.isSignatureDeclaration = isSignatureDeclaration;
+function isSourceFile(node) {
+    return node.kind === ts.SyntaxKind.SourceFile;
+}
+exports.isSourceFile = isSourceFile;
+function isSpreadAssignment(node) {
+    return node.kind === ts.SyntaxKind.SpreadAssignment;
+}
+exports.isSpreadAssignment = isSpreadAssignment;
+function isSpreadElement(node) {
+    return node.kind === ts.SyntaxKind.SpreadElement;
+}
+exports.isSpreadElement = isSpreadElement;
+function isStringLiteral(node) {
+    return node.kind === ts.SyntaxKind.StringLiteral;
+}
+exports.isStringLiteral = isStringLiteral;
+function isSwitchStatement(node) {
+    return node.kind === ts.SyntaxKind.SwitchStatement;
+}
+exports.isSwitchStatement = isSwitchStatement;
+function isSyntaxList(node) {
+    return node.kind === ts.SyntaxKind.SyntaxList;
+}
+exports.isSyntaxList = isSyntaxList;
+function isTaggedTemplateExpression(node) {
+    return node.kind === ts.SyntaxKind.TaggedTemplateExpression;
+}
+exports.isTaggedTemplateExpression = isTaggedTemplateExpression;
+function isTemplateExpression(node) {
+    return node.kind === ts.SyntaxKind.TemplateExpression;
+}
+exports.isTemplateExpression = isTemplateExpression;
+function isTemplateLiteral(node) {
+    return node.kind === ts.SyntaxKind.TemplateExpression ||
+        node.kind === ts.SyntaxKind.NoSubstitutionTemplateLiteral;
+}
+exports.isTemplateLiteral = isTemplateLiteral;
+function isTextualLiteral(node) {
+    return node.kind === ts.SyntaxKind.StringLiteral ||
+        node.kind === ts.SyntaxKind.NoSubstitutionTemplateLiteral;
+}
+exports.isTextualLiteral = isTextualLiteral;
+function isThrowStatement(node) {
+    return node.kind === ts.SyntaxKind.ThrowStatement;
+}
+exports.isThrowStatement = isThrowStatement;
+function isTryStatement(node) {
+    return node.kind === ts.SyntaxKind.TryStatement;
+}
+exports.isTryStatement = isTryStatement;
+function isTupleTypeNode(node) {
+    return node.kind === ts.SyntaxKind.TupleType;
+}
+exports.isTupleTypeNode = isTupleTypeNode;
+function isTypeAliasDeclaration(node) {
+    return node.kind === ts.SyntaxKind.TypeAliasDeclaration;
+}
+exports.isTypeAliasDeclaration = isTypeAliasDeclaration;
+function isTypeAssertion(node) {
+    return node.kind === ts.SyntaxKind.TypeAssertionExpression;
+}
+exports.isTypeAssertion = isTypeAssertion;
+function isTypeLiteralNode(node) {
+    return node.kind === ts.SyntaxKind.TypeLiteral;
+}
+exports.isTypeLiteralNode = isTypeLiteralNode;
+function isTypeOfExpression(node) {
+    return node.kind === ts.SyntaxKind.TypeOfExpression;
+}
+exports.isTypeOfExpression = isTypeOfExpression;
+function isTypeOperatorNode(node) {
+    return node.kind === ts.SyntaxKind.TypeOperator;
+}
+exports.isTypeOperatorNode = isTypeOperatorNode;
+function isTypeParameterDeclaration(node) {
+    return node.kind === ts.SyntaxKind.TypeParameter;
+}
+exports.isTypeParameterDeclaration = isTypeParameterDeclaration;
+function isTypePredicateNode(node) {
+    return node.kind === ts.SyntaxKind.TypePredicate;
+}
+exports.isTypePredicateNode = isTypePredicateNode;
+function isTypeReferenceNode(node) {
+    return node.kind === ts.SyntaxKind.TypeReference;
+}
+exports.isTypeReferenceNode = isTypeReferenceNode;
+function isTypeQueryNode(node) {
+    return node.kind === ts.SyntaxKind.TypeQuery;
+}
+exports.isTypeQueryNode = isTypeQueryNode;
+function isUnionTypeNode(node) {
+    return node.kind === ts.SyntaxKind.UnionType;
+}
+exports.isUnionTypeNode = isUnionTypeNode;
+function isVariableDeclaration(node) {
+    return node.kind === ts.SyntaxKind.VariableDeclaration;
+}
+exports.isVariableDeclaration = isVariableDeclaration;
+function isVariableStatement(node) {
+    return node.kind === ts.SyntaxKind.VariableStatement;
+}
+exports.isVariableStatement = isVariableStatement;
+function isVariableDeclarationList(node) {
+    return node.kind === ts.SyntaxKind.VariableDeclarationList;
+}
+exports.isVariableDeclarationList = isVariableDeclarationList;
+function isVoidExpression(node) {
+    return node.kind === ts.SyntaxKind.VoidExpression;
+}
+exports.isVoidExpression = isVoidExpression;
+function isWhileStatement(node) {
+    return node.kind === ts.SyntaxKind.WhileStatement;
+}
+exports.isWhileStatement = isWhileStatement;
+function isWithStatement(node) {
+    return node.kind === ts.SyntaxKind.WithStatement;
+}
+exports.isWithStatement = isWithStatement;
diff --git a/server/node_modules/tsutils/typeguard/2.8/type.d.ts b/server/node_modules/tsutils/typeguard/2.8/type.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..45b6bc3d32183edd783111b8a56cfe7006aff41a
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/2.8/type.d.ts
@@ -0,0 +1,18 @@
+import * as ts from 'typescript';
+export declare function isConditionalType(type: ts.Type): type is ts.ConditionalType;
+export declare function isEnumType(type: ts.Type): type is ts.EnumType;
+export declare function isGenericType(type: ts.Type): type is ts.GenericType;
+export declare function isIndexedAccessType(type: ts.Type): type is ts.IndexedAccessType;
+export declare function isIndexedAccessype(type: ts.Type): type is ts.IndexType;
+export declare function isInstantiableType(type: ts.Type): type is ts.InstantiableType;
+export declare function isInterfaceType(type: ts.Type): type is ts.InterfaceType;
+export declare function isIntersectionType(type: ts.Type): type is ts.IntersectionType;
+export declare function isLiteralType(type: ts.Type): type is ts.LiteralType;
+export declare function isObjectType(type: ts.Type): type is ts.ObjectType;
+export declare function isSubstitutionType(type: ts.Type): type is ts.SubstitutionType;
+export declare function isTypeParameter(type: ts.Type): type is ts.TypeParameter;
+export declare function isTypeReference(type: ts.Type): type is ts.TypeReference;
+export declare function isTypeVariable(type: ts.Type): type is ts.TypeParameter | ts.IndexedAccessType;
+export declare function isUnionOrIntersectionType(type: ts.Type): type is ts.UnionOrIntersectionType;
+export declare function isUnionType(type: ts.Type): type is ts.UnionType;
+export declare function isUniqueESSymbolType(type: ts.Type): type is ts.UniqueESSymbolType;
diff --git a/server/node_modules/tsutils/typeguard/2.8/type.js b/server/node_modules/tsutils/typeguard/2.8/type.js
new file mode 100644
index 0000000000000000000000000000000000000000..01fc06ead79659ca962c7d9d041577aaf432fef9
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/2.8/type.js
@@ -0,0 +1,75 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const ts = require("typescript");
+function isConditionalType(type) {
+    return (type.flags & ts.TypeFlags.Conditional) !== 0;
+}
+exports.isConditionalType = isConditionalType;
+function isEnumType(type) {
+    return (type.flags & ts.TypeFlags.Enum) !== 0;
+}
+exports.isEnumType = isEnumType;
+function isGenericType(type) {
+    return (type.flags & ts.TypeFlags.Object) !== 0 &&
+        (type.objectFlags & ts.ObjectFlags.ClassOrInterface) !== 0 &&
+        (type.objectFlags & ts.ObjectFlags.Reference) !== 0;
+}
+exports.isGenericType = isGenericType;
+function isIndexedAccessType(type) {
+    return (type.flags & ts.TypeFlags.IndexedAccess) !== 0;
+}
+exports.isIndexedAccessType = isIndexedAccessType;
+function isIndexedAccessype(type) {
+    return (type.flags & ts.TypeFlags.Index) !== 0;
+}
+exports.isIndexedAccessype = isIndexedAccessype;
+function isInstantiableType(type) {
+    return (type.flags & ts.TypeFlags.Instantiable) !== 0;
+}
+exports.isInstantiableType = isInstantiableType;
+function isInterfaceType(type) {
+    return (type.flags & ts.TypeFlags.Object) !== 0 &&
+        (type.objectFlags & ts.ObjectFlags.ClassOrInterface) !== 0;
+}
+exports.isInterfaceType = isInterfaceType;
+function isIntersectionType(type) {
+    return (type.flags & ts.TypeFlags.Intersection) !== 0;
+}
+exports.isIntersectionType = isIntersectionType;
+function isLiteralType(type) {
+    return (type.flags & (ts.TypeFlags.StringOrNumberLiteral | ts.TypeFlags.BigIntLiteral)) !== 0;
+}
+exports.isLiteralType = isLiteralType;
+function isObjectType(type) {
+    return (type.flags & ts.TypeFlags.Object) !== 0;
+}
+exports.isObjectType = isObjectType;
+function isSubstitutionType(type) {
+    return (type.flags & ts.TypeFlags.Substitution) !== 0;
+}
+exports.isSubstitutionType = isSubstitutionType;
+function isTypeParameter(type) {
+    return (type.flags & ts.TypeFlags.TypeParameter) !== 0;
+}
+exports.isTypeParameter = isTypeParameter;
+function isTypeReference(type) {
+    return (type.flags & ts.TypeFlags.Object) !== 0 &&
+        (type.objectFlags & ts.ObjectFlags.Reference) !== 0;
+}
+exports.isTypeReference = isTypeReference;
+function isTypeVariable(type) {
+    return (type.flags & ts.TypeFlags.TypeVariable) !== 0;
+}
+exports.isTypeVariable = isTypeVariable;
+function isUnionOrIntersectionType(type) {
+    return (type.flags & ts.TypeFlags.UnionOrIntersection) !== 0;
+}
+exports.isUnionOrIntersectionType = isUnionOrIntersectionType;
+function isUnionType(type) {
+    return (type.flags & ts.TypeFlags.Union) !== 0;
+}
+exports.isUnionType = isUnionType;
+function isUniqueESSymbolType(type) {
+    return (type.flags & ts.TypeFlags.UniqueESSymbol) !== 0;
+}
+exports.isUniqueESSymbolType = isUniqueESSymbolType;
diff --git a/server/node_modules/tsutils/typeguard/2.9/index.d.ts b/server/node_modules/tsutils/typeguard/2.9/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..71762921c4a7a2e6ac6281890e4c1433cdd6dd66
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/2.9/index.d.ts
@@ -0,0 +1,2 @@
+export * from './node';
+export * from './type';
diff --git a/server/node_modules/tsutils/typeguard/2.9/index.js b/server/node_modules/tsutils/typeguard/2.9/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c381e79a0046eb8a3708a62612a903389eff457
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/2.9/index.js
@@ -0,0 +1,5 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("./node"), exports);
+tslib_1.__exportStar(require("./type"), exports);
diff --git a/server/node_modules/tsutils/typeguard/2.9/node.d.ts b/server/node_modules/tsutils/typeguard/2.9/node.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bf2ec1d1f2aeb3583518dd80b5cacf89afb89cb3
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/2.9/node.d.ts
@@ -0,0 +1,3 @@
+export * from '../2.8/node';
+import * as ts from 'typescript';
+export declare function isImportTypeNode(node: ts.Node): node is ts.ImportTypeNode;
diff --git a/server/node_modules/tsutils/typeguard/2.9/node.js b/server/node_modules/tsutils/typeguard/2.9/node.js
new file mode 100644
index 0000000000000000000000000000000000000000..e24159778a27abc8d6817b2ed1bd315da4d4ea50
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/2.9/node.js
@@ -0,0 +1,9 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("../2.8/node"), exports);
+const ts = require("typescript");
+function isImportTypeNode(node) {
+    return node.kind === ts.SyntaxKind.ImportType;
+}
+exports.isImportTypeNode = isImportTypeNode;
diff --git a/server/node_modules/tsutils/typeguard/2.9/type.d.ts b/server/node_modules/tsutils/typeguard/2.9/type.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ec83ac3f480235ad4eca04d434c703b36d0db25c
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/2.9/type.d.ts
@@ -0,0 +1 @@
+export * from '../2.8/type';
diff --git a/server/node_modules/tsutils/typeguard/2.9/type.js b/server/node_modules/tsutils/typeguard/2.9/type.js
new file mode 100644
index 0000000000000000000000000000000000000000..9315cac2b96ea115136297c5386f51bb0ddde679
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/2.9/type.js
@@ -0,0 +1,4 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("../2.8/type"), exports);
diff --git a/server/node_modules/tsutils/typeguard/3.0/index.d.ts b/server/node_modules/tsutils/typeguard/3.0/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..71762921c4a7a2e6ac6281890e4c1433cdd6dd66
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/3.0/index.d.ts
@@ -0,0 +1,2 @@
+export * from './node';
+export * from './type';
diff --git a/server/node_modules/tsutils/typeguard/3.0/index.js b/server/node_modules/tsutils/typeguard/3.0/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c381e79a0046eb8a3708a62612a903389eff457
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/3.0/index.js
@@ -0,0 +1,5 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("./node"), exports);
+tslib_1.__exportStar(require("./type"), exports);
diff --git a/server/node_modules/tsutils/typeguard/3.0/node.d.ts b/server/node_modules/tsutils/typeguard/3.0/node.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..305991140bc4d960d6b30ac711466dbad711235d
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/3.0/node.d.ts
@@ -0,0 +1,5 @@
+export * from '../2.9/node';
+import * as ts from 'typescript';
+export declare function isOptionalTypeNode(node: ts.Node): node is ts.OptionalTypeNode;
+export declare function isRestTypeNode(node: ts.Node): node is ts.RestTypeNode;
+export declare function isSyntheticExpression(node: ts.Node): node is ts.SyntheticExpression;
diff --git a/server/node_modules/tsutils/typeguard/3.0/node.js b/server/node_modules/tsutils/typeguard/3.0/node.js
new file mode 100644
index 0000000000000000000000000000000000000000..943bb36e8a86d5a433b7a3a02387726ab666e4c1
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/3.0/node.js
@@ -0,0 +1,17 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("../2.9/node"), exports);
+const ts = require("typescript");
+function isOptionalTypeNode(node) {
+    return node.kind === ts.SyntaxKind.OptionalType;
+}
+exports.isOptionalTypeNode = isOptionalTypeNode;
+function isRestTypeNode(node) {
+    return node.kind === ts.SyntaxKind.RestType;
+}
+exports.isRestTypeNode = isRestTypeNode;
+function isSyntheticExpression(node) {
+    return node.kind === ts.SyntaxKind.SyntheticExpression;
+}
+exports.isSyntheticExpression = isSyntheticExpression;
diff --git a/server/node_modules/tsutils/typeguard/3.0/type.d.ts b/server/node_modules/tsutils/typeguard/3.0/type.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5cf0df95a2f1646338318f5aa8de1f8f95d75c10
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/3.0/type.d.ts
@@ -0,0 +1,6 @@
+export * from '../2.9/type';
+import * as ts from 'typescript';
+export declare function isTupleType(type: ts.Type): type is ts.TupleType;
+export declare function isTupleTypeReference(type: ts.Type): type is ts.TypeReference & {
+    target: ts.TupleType;
+};
diff --git a/server/node_modules/tsutils/typeguard/3.0/type.js b/server/node_modules/tsutils/typeguard/3.0/type.js
new file mode 100644
index 0000000000000000000000000000000000000000..7ec876f8f4d34f2bc4a66e0868364e95f258524b
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/3.0/type.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("../2.9/type"), exports);
+const ts = require("typescript");
+const type_1 = require("../2.9/type");
+function isTupleType(type) {
+    return (type.flags & ts.TypeFlags.Object && type.objectFlags & ts.ObjectFlags.Tuple) !== 0;
+}
+exports.isTupleType = isTupleType;
+function isTupleTypeReference(type) {
+    return type_1.isTypeReference(type) && isTupleType(type.target);
+}
+exports.isTupleTypeReference = isTupleTypeReference;
diff --git a/server/node_modules/tsutils/typeguard/3.2/index.d.ts b/server/node_modules/tsutils/typeguard/3.2/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..71762921c4a7a2e6ac6281890e4c1433cdd6dd66
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/3.2/index.d.ts
@@ -0,0 +1,2 @@
+export * from './node';
+export * from './type';
diff --git a/server/node_modules/tsutils/typeguard/3.2/index.js b/server/node_modules/tsutils/typeguard/3.2/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c381e79a0046eb8a3708a62612a903389eff457
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/3.2/index.js
@@ -0,0 +1,5 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("./node"), exports);
+tslib_1.__exportStar(require("./type"), exports);
diff --git a/server/node_modules/tsutils/typeguard/3.2/node.d.ts b/server/node_modules/tsutils/typeguard/3.2/node.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cf88ae114f6850677f5445d6dd0f2314e1255305
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/3.2/node.d.ts
@@ -0,0 +1,3 @@
+export * from '../3.0/node';
+import * as ts from 'typescript';
+export declare function isBigIntLiteral(node: ts.Node): node is ts.BigIntLiteral;
diff --git a/server/node_modules/tsutils/typeguard/3.2/node.js b/server/node_modules/tsutils/typeguard/3.2/node.js
new file mode 100644
index 0000000000000000000000000000000000000000..26e8c1a749d8f6b54422cda2e744fd3e8a151b80
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/3.2/node.js
@@ -0,0 +1,9 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("../3.0/node"), exports);
+const ts = require("typescript");
+function isBigIntLiteral(node) {
+    return node.kind === ts.SyntaxKind.BigIntLiteral;
+}
+exports.isBigIntLiteral = isBigIntLiteral;
diff --git a/server/node_modules/tsutils/typeguard/3.2/type.d.ts b/server/node_modules/tsutils/typeguard/3.2/type.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fee77fb1839bd330c6d3d1087dd798352a9257f0
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/3.2/type.d.ts
@@ -0,0 +1 @@
+export * from '../3.0/type';
diff --git a/server/node_modules/tsutils/typeguard/3.2/type.js b/server/node_modules/tsutils/typeguard/3.2/type.js
new file mode 100644
index 0000000000000000000000000000000000000000..d800ef8412932d541142a081d6bb30b976bfd924
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/3.2/type.js
@@ -0,0 +1,4 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("../3.0/type"), exports);
diff --git a/server/node_modules/tsutils/typeguard/index.d.ts b/server/node_modules/tsutils/typeguard/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..71762921c4a7a2e6ac6281890e4c1433cdd6dd66
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/index.d.ts
@@ -0,0 +1,2 @@
+export * from './node';
+export * from './type';
diff --git a/server/node_modules/tsutils/typeguard/index.js b/server/node_modules/tsutils/typeguard/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c381e79a0046eb8a3708a62612a903389eff457
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/index.js
@@ -0,0 +1,5 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("./node"), exports);
+tslib_1.__exportStar(require("./type"), exports);
diff --git a/server/node_modules/tsutils/typeguard/next/index.d.ts b/server/node_modules/tsutils/typeguard/next/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..71762921c4a7a2e6ac6281890e4c1433cdd6dd66
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/next/index.d.ts
@@ -0,0 +1,2 @@
+export * from './node';
+export * from './type';
diff --git a/server/node_modules/tsutils/typeguard/next/index.js b/server/node_modules/tsutils/typeguard/next/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c381e79a0046eb8a3708a62612a903389eff457
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/next/index.js
@@ -0,0 +1,5 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("./node"), exports);
+tslib_1.__exportStar(require("./type"), exports);
diff --git a/server/node_modules/tsutils/typeguard/next/node.d.ts b/server/node_modules/tsutils/typeguard/next/node.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d64678a349560345c9471327d29e9ddc649c9977
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/next/node.d.ts
@@ -0,0 +1 @@
+export * from '../3.2/node';
diff --git a/server/node_modules/tsutils/typeguard/next/node.js b/server/node_modules/tsutils/typeguard/next/node.js
new file mode 100644
index 0000000000000000000000000000000000000000..e2c022f1228bc4e64baed58973b6452b261ec5cd
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/next/node.js
@@ -0,0 +1,4 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("../3.2/node"), exports);
diff --git a/server/node_modules/tsutils/typeguard/next/type.d.ts b/server/node_modules/tsutils/typeguard/next/type.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6cd4408ace0d99049a5c601bd5add784693adca7
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/next/type.d.ts
@@ -0,0 +1 @@
+export * from '../3.2/type';
diff --git a/server/node_modules/tsutils/typeguard/next/type.js b/server/node_modules/tsutils/typeguard/next/type.js
new file mode 100644
index 0000000000000000000000000000000000000000..ef88473b66e97b53cb40178785f1892fda7e2fd6
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/next/type.js
@@ -0,0 +1,4 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("../3.2/type"), exports);
diff --git a/server/node_modules/tsutils/typeguard/node.d.ts b/server/node_modules/tsutils/typeguard/node.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f6a9f8b7de8df9363661a7b3a6a291f36ad3a2f0
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/node.d.ts
@@ -0,0 +1 @@
+export * from './3.2/node';
diff --git a/server/node_modules/tsutils/typeguard/node.js b/server/node_modules/tsutils/typeguard/node.js
new file mode 100644
index 0000000000000000000000000000000000000000..3d8e376089a4adce1dd5fb5b5170046bcebee1b7
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/node.js
@@ -0,0 +1,4 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("./3.2/node"), exports);
diff --git a/server/node_modules/tsutils/typeguard/type.d.ts b/server/node_modules/tsutils/typeguard/type.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8a20aeb1f03043f3c7ea99438eff31b0d3e2c8c4
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/type.d.ts
@@ -0,0 +1 @@
+export * from './3.2/type';
diff --git a/server/node_modules/tsutils/typeguard/type.js b/server/node_modules/tsutils/typeguard/type.js
new file mode 100644
index 0000000000000000000000000000000000000000..cecc6fd6c3fab839d185adfd9644cf7832c5e680
--- /dev/null
+++ b/server/node_modules/tsutils/typeguard/type.js
@@ -0,0 +1,4 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("./3.2/type"), exports);
diff --git a/server/node_modules/tsutils/util/control-flow.d.ts b/server/node_modules/tsutils/util/control-flow.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..528155c1b9075a86da481e630c46f9df929e6784
--- /dev/null
+++ b/server/node_modules/tsutils/util/control-flow.d.ts
@@ -0,0 +1,8 @@
+import * as ts from 'typescript';
+export declare function endsControlFlow(statement: ts.Statement | ts.BlockLike): boolean;
+export declare type ControlFlowStatement = ts.BreakStatement | ts.ContinueStatement | ts.ReturnStatement | ts.ThrowStatement;
+export interface ControlFlowEnd {
+    readonly statements: ReadonlyArray<ControlFlowStatement>;
+    readonly end: boolean;
+}
+export declare function getControlFlowEnd(statement: ts.Statement | ts.BlockLike): ControlFlowEnd;
diff --git a/server/node_modules/tsutils/util/control-flow.js b/server/node_modules/tsutils/util/control-flow.js
new file mode 100644
index 0000000000000000000000000000000000000000..7e83773f05c319dc61147566f107b26d9881623b
--- /dev/null
+++ b/server/node_modules/tsutils/util/control-flow.js
@@ -0,0 +1,171 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const ts = require("typescript");
+const node_1 = require("../typeguard/node");
+function endsControlFlow(statement) {
+    return getControlFlowEnd(statement).end;
+}
+exports.endsControlFlow = endsControlFlow;
+const defaultControlFlowEnd = { statements: [], end: false };
+function getControlFlowEnd(statement) {
+    return node_1.isBlockLike(statement) ? handleBlock(statement) : getControlFlowEndWorker(statement);
+}
+exports.getControlFlowEnd = getControlFlowEnd;
+function getControlFlowEndWorker(statement) {
+    switch (statement.kind) {
+        case ts.SyntaxKind.ReturnStatement:
+        case ts.SyntaxKind.ThrowStatement:
+        case ts.SyntaxKind.ContinueStatement:
+        case ts.SyntaxKind.BreakStatement:
+            return { statements: [statement], end: true };
+        case ts.SyntaxKind.Block:
+            return handleBlock(statement);
+        case ts.SyntaxKind.ForStatement:
+        case ts.SyntaxKind.WhileStatement:
+            return handleForAndWhileStatement(statement);
+        case ts.SyntaxKind.ForOfStatement:
+        case ts.SyntaxKind.ForInStatement:
+            return handleForInOrOfStatement(statement);
+        case ts.SyntaxKind.DoStatement:
+            return matchBreakOrContinue(getControlFlowEndWorker(statement.statement), node_1.isBreakOrContinueStatement);
+        case ts.SyntaxKind.IfStatement:
+            return handleIfStatement(statement);
+        case ts.SyntaxKind.SwitchStatement:
+            return matchBreakOrContinue(handleSwitchStatement(statement), node_1.isBreakStatement);
+        case ts.SyntaxKind.TryStatement:
+            return handleTryStatement(statement);
+        case ts.SyntaxKind.LabeledStatement:
+            return matchLabel(getControlFlowEndWorker(statement.statement), statement.label);
+        case ts.SyntaxKind.WithStatement:
+            return getControlFlowEndWorker(statement.statement);
+        default:
+            return defaultControlFlowEnd;
+    }
+}
+function handleBlock(statement) {
+    const result = { statements: [], end: false };
+    for (const s of statement.statements) {
+        const current = getControlFlowEndWorker(s);
+        result.statements.push(...current.statements);
+        if (current.end) {
+            result.end = true;
+            break;
+        }
+    }
+    return result;
+}
+function handleForInOrOfStatement(statement) {
+    const end = matchBreakOrContinue(getControlFlowEndWorker(statement.statement), node_1.isBreakOrContinueStatement);
+    end.end = false;
+    return end;
+}
+function handleForAndWhileStatement(statement) {
+    const constantCondition = statement.kind === ts.SyntaxKind.WhileStatement
+        ? getConstantCondition(statement.expression)
+        : statement.condition === undefined || getConstantCondition(statement.condition);
+    if (constantCondition === false)
+        return defaultControlFlowEnd;
+    const end = matchBreakOrContinue(getControlFlowEndWorker(statement.statement), node_1.isBreakOrContinueStatement);
+    if (constantCondition === undefined)
+        end.end = false;
+    return end;
+}
+function getConstantCondition(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.TrueKeyword:
+            return true;
+        case ts.SyntaxKind.FalseKeyword:
+            return false;
+        default:
+            return;
+    }
+}
+function handleIfStatement(node) {
+    switch (getConstantCondition(node.expression)) {
+        case true:
+            return getControlFlowEndWorker(node.thenStatement);
+        case false:
+            return node.elseStatement === undefined
+                ? defaultControlFlowEnd
+                : getControlFlowEndWorker(node.elseStatement);
+    }
+    const then = getControlFlowEndWorker(node.thenStatement);
+    if (node.elseStatement === undefined)
+        return {
+            statements: then.statements,
+            end: false,
+        };
+    const elze = getControlFlowEndWorker(node.elseStatement);
+    return {
+        statements: [...then.statements, ...elze.statements],
+        end: then.end && elze.end,
+    };
+}
+function handleSwitchStatement(node) {
+    let hasDefault = false;
+    const result = {
+        statements: [],
+        end: false,
+    };
+    for (const clause of node.caseBlock.clauses) {
+        if (clause.kind === ts.SyntaxKind.DefaultClause)
+            hasDefault = true;
+        const current = handleBlock(clause);
+        result.end = current.end;
+        result.statements.push(...current.statements);
+    }
+    if (!hasDefault)
+        result.end = false;
+    return result;
+}
+function handleTryStatement(node) {
+    let finallyResult;
+    if (node.finallyBlock !== undefined) {
+        finallyResult = handleBlock(node.finallyBlock);
+        if (finallyResult.end)
+            return finallyResult;
+    }
+    const tryResult = handleBlock(node.tryBlock);
+    if (node.catchClause === undefined)
+        return { statements: finallyResult.statements.concat(tryResult.statements), end: tryResult.end };
+    const catchResult = handleBlock(node.catchClause.block);
+    return {
+        statements: tryResult.statements
+            .filter((s) => s.kind !== ts.SyntaxKind.ThrowStatement)
+            .concat(catchResult.statements, finallyResult === undefined ? [] : finallyResult.statements),
+        end: tryResult.end && catchResult.end,
+    };
+}
+function matchBreakOrContinue(current, pred) {
+    const result = {
+        statements: [],
+        end: current.end,
+    };
+    for (const statement of current.statements) {
+        if (pred(statement) && statement.label === undefined) {
+            result.end = false;
+            continue;
+        }
+        result.statements.push(statement);
+    }
+    return result;
+}
+function matchLabel(current, label) {
+    const result = {
+        statements: [],
+        end: current.end,
+    };
+    const labelText = label.text;
+    for (const statement of current.statements) {
+        switch (statement.kind) {
+            case ts.SyntaxKind.BreakStatement:
+            case ts.SyntaxKind.ContinueStatement:
+                if (statement.label !== undefined && statement.label.text === labelText) {
+                    result.end = false;
+                    continue;
+                }
+        }
+        result.statements.push(statement);
+    }
+    return result;
+}
diff --git a/server/node_modules/tsutils/util/convert-ast.d.ts b/server/node_modules/tsutils/util/convert-ast.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7e95feaf0f814e5ea0d54a94dbe313c6bff311eb
--- /dev/null
+++ b/server/node_modules/tsutils/util/convert-ast.d.ts
@@ -0,0 +1,20 @@
+import * as ts from 'typescript';
+export interface NodeWrap {
+    node: ts.Node;
+    kind: ts.SyntaxKind;
+    children: NodeWrap[];
+    next?: NodeWrap;
+    skip?: NodeWrap;
+    parent?: NodeWrap;
+}
+export interface WrappedAst extends NodeWrap {
+    node: ts.SourceFile;
+    next: NodeWrap;
+    skip: undefined;
+    parent: undefined;
+}
+export interface ConvertedAst {
+    wrapped: WrappedAst;
+    flat: ReadonlyArray<ts.Node>;
+}
+export declare function convertAst(sourceFile: ts.SourceFile): ConvertedAst;
diff --git a/server/node_modules/tsutils/util/convert-ast.js b/server/node_modules/tsutils/util/convert-ast.js
new file mode 100644
index 0000000000000000000000000000000000000000..bfdb0282c1b175d7e4cb2cac021fe6ec6235c118
--- /dev/null
+++ b/server/node_modules/tsutils/util/convert-ast.js
@@ -0,0 +1,47 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const ts = require("typescript");
+const util_1 = require("./util");
+function convertAst(sourceFile) {
+    const wrapped = {
+        node: sourceFile,
+        parent: undefined,
+        kind: ts.SyntaxKind.SourceFile,
+        children: [],
+        next: undefined,
+        skip: undefined,
+    };
+    const flat = [];
+    let current = wrapped;
+    let previous = current;
+    ts.forEachChild(sourceFile, function wrap(node) {
+        flat.push(node);
+        const parent = current;
+        previous.next = current = {
+            node,
+            parent,
+            kind: node.kind,
+            children: [],
+            next: undefined,
+            skip: undefined,
+        };
+        if (previous !== parent)
+            setSkip(previous, current);
+        previous = current;
+        parent.children.push(current);
+        if (util_1.isNodeKind(node.kind))
+            ts.forEachChild(node, wrap);
+        current = parent;
+    });
+    return {
+        wrapped,
+        flat,
+    };
+}
+exports.convertAst = convertAst;
+function setSkip(node, skip) {
+    do {
+        node.skip = skip;
+        node = node.parent;
+    } while (node !== skip.parent);
+}
diff --git a/server/node_modules/tsutils/util/index.d.ts b/server/node_modules/tsutils/util/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9e93ff6f1e0460d0020d0db6b6ef8a961360ad15
--- /dev/null
+++ b/server/node_modules/tsutils/util/index.d.ts
@@ -0,0 +1,5 @@
+export * from './util';
+export * from './usage';
+export * from './control-flow';
+export * from './type';
+export * from './convert-ast';
diff --git a/server/node_modules/tsutils/util/index.js b/server/node_modules/tsutils/util/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..2087d2a37e402c50c4d010924d87749df0d5bf90
--- /dev/null
+++ b/server/node_modules/tsutils/util/index.js
@@ -0,0 +1,8 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("./util"), exports);
+tslib_1.__exportStar(require("./usage"), exports);
+tslib_1.__exportStar(require("./control-flow"), exports);
+tslib_1.__exportStar(require("./type"), exports);
+tslib_1.__exportStar(require("./convert-ast"), exports);
diff --git a/server/node_modules/tsutils/util/type.d.ts b/server/node_modules/tsutils/util/type.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f4343a458400d48a1353c39afcdd2a34084e77ea
--- /dev/null
+++ b/server/node_modules/tsutils/util/type.d.ts
@@ -0,0 +1,21 @@
+import * as ts from 'typescript';
+import { PropertyName } from './util';
+export declare function isEmptyObjectType(type: ts.Type): type is ts.ObjectType;
+export declare function removeOptionalityFromType(checker: ts.TypeChecker, type: ts.Type): ts.Type;
+export declare function isTypeAssignableToNumber(checker: ts.TypeChecker, type: ts.Type): boolean;
+export declare function isTypeAssignableToString(checker: ts.TypeChecker, type: ts.Type): boolean;
+export declare function getCallSignaturesOfType(type: ts.Type): ReadonlyArray<ts.Signature>;
+export declare function unionTypeParts(type: ts.Type): ts.Type[];
+export declare function intersectionTypeParts(type: ts.Type): ts.Type[];
+export declare function someTypePart(type: ts.Type, predicate: (t: ts.Type) => t is ts.UnionOrIntersectionType, cb: (t: ts.Type) => boolean): boolean;
+export declare function isThenableType(checker: ts.TypeChecker, node: ts.Node, type: ts.Type): boolean;
+export declare function isThenableType(checker: ts.TypeChecker, node: ts.Expression, type?: ts.Type): boolean;
+export declare function isFalsyType(type: ts.Type): boolean;
+export declare function isBooleanLiteralType(type: ts.Type, literal: boolean): boolean;
+export declare function getPropertyOfType(type: ts.Type, name: ts.__String): ts.Symbol | undefined;
+export declare function isPropertyReadonlyInType(type: ts.Type, name: ts.__String, checker: ts.TypeChecker): boolean;
+export declare function symbolHasReadonlyDeclaration(symbol: ts.Symbol, checker: ts.TypeChecker): boolean;
+export declare function getPropertyNameFromType(type: ts.Type): PropertyName | undefined;
+export declare function getConstructorTypeOfClassLikeDeclaration(node: ts.ClassLikeDeclaration, checker: ts.TypeChecker): ts.Type;
+export declare function getInstanceTypeOfClassLikeDeclaration(node: ts.ClassLikeDeclaration, checker: ts.TypeChecker): ts.Type;
+export declare function getIteratorYieldResultFromIteratorResult(type: ts.Type, node: ts.Node, checker: ts.TypeChecker): ts.Type;
diff --git a/server/node_modules/tsutils/util/type.js b/server/node_modules/tsutils/util/type.js
new file mode 100644
index 0000000000000000000000000000000000000000..7a530d9fd7a76c99fcb11506234b60c9245eba74
--- /dev/null
+++ b/server/node_modules/tsutils/util/type.js
@@ -0,0 +1,238 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const ts = require("typescript");
+const type_1 = require("../typeguard/type");
+const util_1 = require("./util");
+const node_1 = require("../typeguard/node");
+function isEmptyObjectType(type) {
+    if (type_1.isObjectType(type) &&
+        type.objectFlags & ts.ObjectFlags.Anonymous &&
+        type.getProperties().length === 0 &&
+        type.getCallSignatures().length === 0 &&
+        type.getConstructSignatures().length === 0 &&
+        type.getStringIndexType() === undefined &&
+        type.getNumberIndexType() === undefined) {
+        const baseTypes = type.getBaseTypes();
+        return baseTypes === undefined || baseTypes.every(isEmptyObjectType);
+    }
+    return false;
+}
+exports.isEmptyObjectType = isEmptyObjectType;
+function removeOptionalityFromType(checker, type) {
+    if (!containsTypeWithFlag(type, ts.TypeFlags.Undefined))
+        return type;
+    const allowsNull = containsTypeWithFlag(type, ts.TypeFlags.Null);
+    type = checker.getNonNullableType(type);
+    return allowsNull ? checker.getNullableType(type, ts.TypeFlags.Null) : type;
+}
+exports.removeOptionalityFromType = removeOptionalityFromType;
+function containsTypeWithFlag(type, flag) {
+    for (const t of unionTypeParts(type))
+        if (util_1.isTypeFlagSet(t, flag))
+            return true;
+    return false;
+}
+function isTypeAssignableToNumber(checker, type) {
+    return isTypeAssignableTo(checker, type, ts.TypeFlags.NumberLike);
+}
+exports.isTypeAssignableToNumber = isTypeAssignableToNumber;
+function isTypeAssignableToString(checker, type) {
+    return isTypeAssignableTo(checker, type, ts.TypeFlags.StringLike);
+}
+exports.isTypeAssignableToString = isTypeAssignableToString;
+function isTypeAssignableTo(checker, type, flags) {
+    flags |= ts.TypeFlags.Any;
+    let typeParametersSeen;
+    return (function check(t) {
+        if (type_1.isTypeParameter(t) && t.symbol !== undefined && t.symbol.declarations !== undefined) {
+            if (typeParametersSeen === undefined) {
+                typeParametersSeen = new Set([t]);
+            }
+            else if (!typeParametersSeen.has(t)) {
+                typeParametersSeen.add(t);
+            }
+            else {
+                return false;
+            }
+            const declaration = t.symbol.declarations[0];
+            if (declaration.constraint === undefined)
+                return true;
+            return check(checker.getTypeFromTypeNode(declaration.constraint));
+        }
+        if (type_1.isUnionType(t))
+            return t.types.every(check);
+        if (type_1.isIntersectionType(t))
+            return t.types.some(check);
+        return util_1.isTypeFlagSet(t, flags);
+    })(type);
+}
+function getCallSignaturesOfType(type) {
+    if (type_1.isUnionType(type)) {
+        const signatures = [];
+        for (const t of type.types)
+            signatures.push(...getCallSignaturesOfType(t));
+        return signatures;
+    }
+    if (type_1.isIntersectionType(type)) {
+        let signatures;
+        for (const t of type.types) {
+            const sig = getCallSignaturesOfType(t);
+            if (sig.length !== 0) {
+                if (signatures !== undefined)
+                    return [];
+                signatures = sig;
+            }
+        }
+        return signatures === undefined ? [] : signatures;
+    }
+    return type.getCallSignatures();
+}
+exports.getCallSignaturesOfType = getCallSignaturesOfType;
+function unionTypeParts(type) {
+    return type_1.isUnionType(type) ? type.types : [type];
+}
+exports.unionTypeParts = unionTypeParts;
+function intersectionTypeParts(type) {
+    return type_1.isIntersectionType(type) ? type.types : [type];
+}
+exports.intersectionTypeParts = intersectionTypeParts;
+function someTypePart(type, predicate, cb) {
+    return predicate(type) ? type.types.some(cb) : cb(type);
+}
+exports.someTypePart = someTypePart;
+function isThenableType(checker, node, type = checker.getTypeAtLocation(node)) {
+    for (const ty of unionTypeParts(checker.getApparentType(type))) {
+        const then = ty.getProperty('then');
+        if (then === undefined)
+            continue;
+        const thenType = checker.getTypeOfSymbolAtLocation(then, node);
+        for (const t of unionTypeParts(thenType))
+            for (const signature of t.getCallSignatures())
+                if (signature.parameters.length !== 0 && isCallback(checker, signature.parameters[0], node))
+                    return true;
+    }
+    return false;
+}
+exports.isThenableType = isThenableType;
+function isCallback(checker, param, node) {
+    let type = checker.getApparentType(checker.getTypeOfSymbolAtLocation(param, node));
+    if (param.valueDeclaration.dotDotDotToken) {
+        type = type.getNumberIndexType();
+        if (type === undefined)
+            return false;
+    }
+    for (const t of unionTypeParts(type))
+        if (t.getCallSignatures().length !== 0)
+            return true;
+    return false;
+}
+function isFalsyType(type) {
+    if (type.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Null | ts.TypeFlags.Void))
+        return true;
+    if (type_1.isLiteralType(type))
+        return !type.value;
+    return isBooleanLiteralType(type, false);
+}
+exports.isFalsyType = isFalsyType;
+function isBooleanLiteralType(type, literal) {
+    return util_1.isTypeFlagSet(type, ts.TypeFlags.BooleanLiteral) &&
+        type.intrinsicName === (literal ? 'true' : 'false');
+}
+exports.isBooleanLiteralType = isBooleanLiteralType;
+function getPropertyOfType(type, name) {
+    if (!name.startsWith('__'))
+        return type.getProperty(name);
+    return type.getProperties().find((s) => s.escapedName === name);
+}
+exports.getPropertyOfType = getPropertyOfType;
+function isPropertyReadonlyInType(type, name, checker) {
+    let seenProperty = false;
+    let seenReadonlySignature = false;
+    for (const t of unionTypeParts(type)) {
+        if (getPropertyOfType(t, name) === undefined) {
+            const index = (util_1.isNumericPropertyName(name) ? checker.getIndexInfoOfType(t, ts.IndexKind.Number) : undefined) ||
+                checker.getIndexInfoOfType(t, ts.IndexKind.String);
+            if (index !== undefined && index.isReadonly) {
+                if (seenProperty)
+                    return true;
+                seenReadonlySignature = true;
+            }
+        }
+        else if (seenReadonlySignature || isReadonlyPropertyIntersection(t, name, checker)) {
+            return true;
+        }
+        else {
+            seenProperty = true;
+        }
+    }
+    return false;
+}
+exports.isPropertyReadonlyInType = isPropertyReadonlyInType;
+function isReadonlyPropertyIntersection(type, name, checker) {
+    return someTypePart(type, type_1.isIntersectionType, (t) => {
+        const prop = getPropertyOfType(t, name);
+        if (prop === undefined)
+            return false;
+        if (prop.flags & ts.SymbolFlags.Transient) {
+            if (/^(?:[1-9]\d*|0)$/.test(name) && type_1.isTupleTypeReference(t))
+                return t.target.readonly;
+            switch (isReadonlyPropertyFromMappedType(t, name, checker)) {
+                case true:
+                    return true;
+                case false:
+                    return false;
+                default:
+            }
+        }
+        return (util_1.isSymbolFlagSet(prop, ts.SymbolFlags.ValueModule) ||
+            symbolHasReadonlyDeclaration(prop, checker));
+    });
+}
+function isReadonlyPropertyFromMappedType(type, name, checker) {
+    if (!type_1.isObjectType(type) || !util_1.isObjectFlagSet(type, ts.ObjectFlags.Mapped))
+        return;
+    const declaration = type.symbol.declarations[0];
+    if (declaration.readonlyToken !== undefined && !/^__@[^@]+$/.test(name))
+        return declaration.readonlyToken.kind !== ts.SyntaxKind.MinusToken;
+    return isPropertyReadonlyInType(type.modifiersType, name, checker);
+}
+function symbolHasReadonlyDeclaration(symbol, checker) {
+    return (symbol.flags & ts.SymbolFlags.Accessor) === ts.SymbolFlags.GetAccessor ||
+        symbol.declarations !== undefined &&
+            symbol.declarations.some((node) => util_1.isModifierFlagSet(node, ts.ModifierFlags.Readonly) ||
+                node_1.isVariableDeclaration(node) && util_1.isNodeFlagSet(node.parent, ts.NodeFlags.Const) ||
+                node_1.isCallExpression(node) && util_1.isReadonlyAssignmentDeclaration(node, checker) ||
+                node_1.isEnumMember(node) ||
+                (node_1.isPropertyAssignment(node) || node_1.isShorthandPropertyAssignment(node)) && util_1.isInConstContext(node.parent));
+}
+exports.symbolHasReadonlyDeclaration = symbolHasReadonlyDeclaration;
+function getPropertyNameFromType(type) {
+    if (type.flags & (ts.TypeFlags.StringLiteral | ts.TypeFlags.NumberLiteral)) {
+        const value = String(type.value);
+        return { displayName: value, symbolName: ts.escapeLeadingUnderscores(value) };
+    }
+    if (type_1.isUniqueESSymbolType(type))
+        return {
+            displayName: `[${type.symbol ? type.symbol.name : type.escapedName.replace(/^__@|@\d+$/g, '')}]`,
+            symbolName: type.escapedName,
+        };
+}
+exports.getPropertyNameFromType = getPropertyNameFromType;
+function getConstructorTypeOfClassLikeDeclaration(node, checker) {
+    return checker.getDeclaredTypeOfSymbol(node.name !== undefined ? checker.getSymbolAtLocation(node.name) : checker.getTypeAtLocation(node).symbol);
+}
+exports.getConstructorTypeOfClassLikeDeclaration = getConstructorTypeOfClassLikeDeclaration;
+function getInstanceTypeOfClassLikeDeclaration(node, checker) {
+    return node.kind === ts.SyntaxKind.ClassDeclaration
+        ? checker.getTypeAtLocation(node)
+        : checker.getTypeOfSymbolAtLocation(checker.getTypeAtLocation(node).getProperty('prototype'), node);
+}
+exports.getInstanceTypeOfClassLikeDeclaration = getInstanceTypeOfClassLikeDeclaration;
+function getIteratorYieldResultFromIteratorResult(type, node, checker) {
+    return type_1.isUnionType(type) && type.types.find((t) => {
+        const done = t.getProperty('done');
+        return done !== undefined &&
+            isBooleanLiteralType(removeOptionalityFromType(checker, checker.getTypeOfSymbolAtLocation(done, node)), false);
+    }) || type;
+}
+exports.getIteratorYieldResultFromIteratorResult = getIteratorYieldResultFromIteratorResult;
diff --git a/server/node_modules/tsutils/util/usage.d.ts b/server/node_modules/tsutils/util/usage.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a4c022c9d108d4b44d72bda0e9c246057142fe55
--- /dev/null
+++ b/server/node_modules/tsutils/util/usage.d.ts
@@ -0,0 +1,30 @@
+import * as ts from 'typescript';
+export interface VariableInfo {
+    domain: DeclarationDomain;
+    exported: boolean;
+    uses: VariableUse[];
+    inGlobalScope: boolean;
+    declarations: ts.Identifier[];
+}
+export interface VariableUse {
+    domain: UsageDomain;
+    location: ts.Identifier;
+}
+export declare enum DeclarationDomain {
+    Namespace = 1,
+    Type = 2,
+    Value = 4,
+    Import = 8,
+    Any = 7
+}
+export declare enum UsageDomain {
+    Namespace = 1,
+    Type = 2,
+    Value = 4,
+    ValueOrNamespace = 5,
+    Any = 7,
+    TypeQuery = 8
+}
+export declare function getUsageDomain(node: ts.Identifier): UsageDomain | undefined;
+export declare function getDeclarationDomain(node: ts.Identifier): DeclarationDomain | undefined;
+export declare function collectVariableUsage(sourceFile: ts.SourceFile): Map<ts.Identifier, VariableInfo>;
diff --git a/server/node_modules/tsutils/util/usage.js b/server/node_modules/tsutils/util/usage.js
new file mode 100644
index 0000000000000000000000000000000000000000..372d38a69f18d99fdca69e6caba0093b3b28a774
--- /dev/null
+++ b/server/node_modules/tsutils/util/usage.js
@@ -0,0 +1,645 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const util_1 = require("./util");
+const ts = require("typescript");
+var DeclarationDomain;
+(function (DeclarationDomain) {
+    DeclarationDomain[DeclarationDomain["Namespace"] = 1] = "Namespace";
+    DeclarationDomain[DeclarationDomain["Type"] = 2] = "Type";
+    DeclarationDomain[DeclarationDomain["Value"] = 4] = "Value";
+    DeclarationDomain[DeclarationDomain["Import"] = 8] = "Import";
+    DeclarationDomain[DeclarationDomain["Any"] = 7] = "Any";
+})(DeclarationDomain = exports.DeclarationDomain || (exports.DeclarationDomain = {}));
+var UsageDomain;
+(function (UsageDomain) {
+    UsageDomain[UsageDomain["Namespace"] = 1] = "Namespace";
+    UsageDomain[UsageDomain["Type"] = 2] = "Type";
+    UsageDomain[UsageDomain["Value"] = 4] = "Value";
+    UsageDomain[UsageDomain["ValueOrNamespace"] = 5] = "ValueOrNamespace";
+    UsageDomain[UsageDomain["Any"] = 7] = "Any";
+    UsageDomain[UsageDomain["TypeQuery"] = 8] = "TypeQuery";
+})(UsageDomain = exports.UsageDomain || (exports.UsageDomain = {}));
+function getUsageDomain(node) {
+    const parent = node.parent;
+    switch (parent.kind) {
+        case ts.SyntaxKind.TypeReference:
+            return node.originalKeywordKind !== ts.SyntaxKind.ConstKeyword ? 2 : undefined;
+        case ts.SyntaxKind.ExpressionWithTypeArguments:
+            return parent.parent.token === ts.SyntaxKind.ImplementsKeyword ||
+                parent.parent.parent.kind === ts.SyntaxKind.InterfaceDeclaration
+                ? 2
+                : 4;
+        case ts.SyntaxKind.TypeQuery:
+            return 5 | 8;
+        case ts.SyntaxKind.QualifiedName:
+            if (parent.left === node) {
+                if (getEntityNameParent(parent).kind === ts.SyntaxKind.TypeQuery)
+                    return 1 | 8;
+                return 1;
+            }
+            break;
+        case ts.SyntaxKind.ExportSpecifier:
+            if (parent.propertyName === undefined ||
+                parent.propertyName === node)
+                return 7;
+            break;
+        case ts.SyntaxKind.ExportAssignment:
+            return 7;
+        case ts.SyntaxKind.BindingElement:
+            if (parent.initializer === node)
+                return 5;
+            break;
+        case ts.SyntaxKind.Parameter:
+        case ts.SyntaxKind.EnumMember:
+        case ts.SyntaxKind.PropertyDeclaration:
+        case ts.SyntaxKind.VariableDeclaration:
+        case ts.SyntaxKind.PropertyAssignment:
+        case ts.SyntaxKind.PropertyAccessExpression:
+        case ts.SyntaxKind.ImportEqualsDeclaration:
+            if (parent.name !== node)
+                return 5;
+            break;
+        case ts.SyntaxKind.JsxAttribute:
+        case ts.SyntaxKind.FunctionDeclaration:
+        case ts.SyntaxKind.FunctionExpression:
+        case ts.SyntaxKind.NamespaceImport:
+        case ts.SyntaxKind.ClassDeclaration:
+        case ts.SyntaxKind.ClassExpression:
+        case ts.SyntaxKind.ModuleDeclaration:
+        case ts.SyntaxKind.MethodDeclaration:
+        case ts.SyntaxKind.EnumDeclaration:
+        case ts.SyntaxKind.GetAccessor:
+        case ts.SyntaxKind.SetAccessor:
+        case ts.SyntaxKind.LabeledStatement:
+        case ts.SyntaxKind.BreakStatement:
+        case ts.SyntaxKind.ContinueStatement:
+        case ts.SyntaxKind.ImportClause:
+        case ts.SyntaxKind.ImportSpecifier:
+        case ts.SyntaxKind.TypePredicate:
+        case ts.SyntaxKind.MethodSignature:
+        case ts.SyntaxKind.PropertySignature:
+        case ts.SyntaxKind.NamespaceExportDeclaration:
+        case ts.SyntaxKind.InterfaceDeclaration:
+        case ts.SyntaxKind.TypeAliasDeclaration:
+        case ts.SyntaxKind.TypeParameter:
+            break;
+        default:
+            return 5;
+    }
+}
+exports.getUsageDomain = getUsageDomain;
+function getDeclarationDomain(node) {
+    switch (node.parent.kind) {
+        case ts.SyntaxKind.TypeParameter:
+        case ts.SyntaxKind.InterfaceDeclaration:
+        case ts.SyntaxKind.TypeAliasDeclaration:
+            return 2;
+        case ts.SyntaxKind.ClassDeclaration:
+        case ts.SyntaxKind.ClassExpression:
+            return 2 | 4;
+        case ts.SyntaxKind.EnumDeclaration:
+            return 7;
+        case ts.SyntaxKind.NamespaceImport:
+        case ts.SyntaxKind.ImportClause:
+            return 7 | 8;
+        case ts.SyntaxKind.ImportEqualsDeclaration:
+        case ts.SyntaxKind.ImportSpecifier:
+            return node.parent.name === node
+                ? 7 | 8
+                : undefined;
+        case ts.SyntaxKind.ModuleDeclaration:
+            return 1;
+        case ts.SyntaxKind.Parameter:
+            if (node.parent.parent.kind === ts.SyntaxKind.IndexSignature || node.originalKeywordKind === ts.SyntaxKind.ThisKeyword)
+                return;
+        case ts.SyntaxKind.BindingElement:
+        case ts.SyntaxKind.VariableDeclaration:
+            return node.parent.name === node ? 4 : undefined;
+        case ts.SyntaxKind.FunctionDeclaration:
+        case ts.SyntaxKind.FunctionExpression:
+            return 4;
+    }
+}
+exports.getDeclarationDomain = getDeclarationDomain;
+function collectVariableUsage(sourceFile) {
+    return new UsageWalker().getUsage(sourceFile);
+}
+exports.collectVariableUsage = collectVariableUsage;
+class AbstractScope {
+    constructor(_global) {
+        this._global = _global;
+        this._variables = new Map();
+        this._uses = [];
+        this._namespaceScopes = undefined;
+        this._enumScopes = undefined;
+    }
+    addVariable(identifier, name, selector, exported, domain) {
+        const variables = this.getDestinationScope(selector).getVariables();
+        const declaration = {
+            domain,
+            exported,
+            declaration: name,
+        };
+        const variable = variables.get(identifier);
+        if (variable === undefined) {
+            variables.set(identifier, {
+                domain,
+                declarations: [declaration],
+                uses: [],
+            });
+        }
+        else {
+            variable.domain |= domain;
+            variable.declarations.push(declaration);
+        }
+    }
+    addUse(use) {
+        this._uses.push(use);
+    }
+    getVariables() {
+        return this._variables;
+    }
+    getFunctionScope() {
+        return this;
+    }
+    end(cb) {
+        if (this._namespaceScopes !== undefined)
+            this._namespaceScopes.forEach((value) => value.finish(cb));
+        this._namespaceScopes = this._enumScopes = undefined;
+        this._applyUses();
+        this._variables.forEach((variable) => {
+            for (const declaration of variable.declarations) {
+                const result = {
+                    declarations: [],
+                    domain: declaration.domain,
+                    exported: declaration.exported,
+                    inGlobalScope: this._global,
+                    uses: [],
+                };
+                for (const other of variable.declarations)
+                    if (other.domain & declaration.domain)
+                        result.declarations.push(other.declaration);
+                for (const use of variable.uses)
+                    if (use.domain & declaration.domain)
+                        result.uses.push(use);
+                cb(result, declaration.declaration, this);
+            }
+        });
+    }
+    markExported(_name) { }
+    createOrReuseNamespaceScope(name, _exported, ambient, hasExportStatement) {
+        let scope;
+        if (this._namespaceScopes === undefined) {
+            this._namespaceScopes = new Map();
+        }
+        else {
+            scope = this._namespaceScopes.get(name);
+        }
+        if (scope === undefined) {
+            scope = new NamespaceScope(ambient, hasExportStatement, this);
+            this._namespaceScopes.set(name, scope);
+        }
+        else {
+            scope.refresh(ambient, hasExportStatement);
+        }
+        return scope;
+    }
+    createOrReuseEnumScope(name, _exported) {
+        let scope;
+        if (this._enumScopes === undefined) {
+            this._enumScopes = new Map();
+        }
+        else {
+            scope = this._enumScopes.get(name);
+        }
+        if (scope === undefined) {
+            scope = new EnumScope(this);
+            this._enumScopes.set(name, scope);
+        }
+        return scope;
+    }
+    _applyUses() {
+        for (const use of this._uses)
+            if (!this._applyUse(use))
+                this._addUseToParent(use);
+        this._uses = [];
+    }
+    _applyUse(use, variables = this._variables) {
+        const variable = variables.get(use.location.text);
+        if (variable === undefined || (variable.domain & use.domain) === 0)
+            return false;
+        variable.uses.push(use);
+        return true;
+    }
+    _addUseToParent(_use) { }
+}
+class RootScope extends AbstractScope {
+    constructor(_exportAll, global) {
+        super(global);
+        this._exportAll = _exportAll;
+        this._exports = undefined;
+        this._innerScope = new NonRootScope(this, 1);
+    }
+    addVariable(identifier, name, selector, exported, domain) {
+        if (domain & 8)
+            return super.addVariable(identifier, name, selector, exported, domain);
+        return this._innerScope.addVariable(identifier, name, selector, exported, domain);
+    }
+    addUse(use, origin) {
+        if (origin === this._innerScope)
+            return super.addUse(use);
+        return this._innerScope.addUse(use);
+    }
+    markExported(id) {
+        if (this._exports === undefined) {
+            this._exports = [id.text];
+        }
+        else {
+            this._exports.push(id.text);
+        }
+    }
+    end(cb) {
+        this._innerScope.end((value, key) => {
+            value.exported = value.exported || this._exportAll
+                || this._exports !== undefined && this._exports.includes(key.text);
+            value.inGlobalScope = this._global;
+            return cb(value, key, this);
+        });
+        return super.end((value, key, scope) => {
+            value.exported = value.exported || scope === this
+                && this._exports !== undefined && this._exports.includes(key.text);
+            return cb(value, key, scope);
+        });
+    }
+    getDestinationScope() {
+        return this;
+    }
+}
+class NonRootScope extends AbstractScope {
+    constructor(_parent, _boundary) {
+        super(false);
+        this._parent = _parent;
+        this._boundary = _boundary;
+    }
+    _addUseToParent(use) {
+        return this._parent.addUse(use, this);
+    }
+    getDestinationScope(selector) {
+        return this._boundary & selector
+            ? this
+            : this._parent.getDestinationScope(selector);
+    }
+}
+class EnumScope extends NonRootScope {
+    constructor(parent) {
+        super(parent, 1);
+    }
+    end() {
+        this._applyUses();
+    }
+}
+class ConditionalTypeScope extends NonRootScope {
+    constructor(parent) {
+        super(parent, 8);
+        this._state = 0;
+    }
+    updateState(newState) {
+        this._state = newState;
+    }
+    addUse(use) {
+        if (this._state === 2)
+            return void this._uses.push(use);
+        return this._parent.addUse(use, this);
+    }
+}
+class FunctionScope extends NonRootScope {
+    constructor(parent) {
+        super(parent, 1);
+    }
+    beginBody() {
+        this._applyUses();
+    }
+}
+class AbstractNamedExpressionScope extends NonRootScope {
+    constructor(_name, _domain, parent) {
+        super(parent, 1);
+        this._name = _name;
+        this._domain = _domain;
+    }
+    end(cb) {
+        this._innerScope.end(cb);
+        return cb({
+            declarations: [this._name],
+            domain: this._domain,
+            exported: false,
+            uses: this._uses,
+            inGlobalScope: false,
+        }, this._name, this);
+    }
+    addUse(use, source) {
+        if (source !== this._innerScope)
+            return this._innerScope.addUse(use);
+        if (use.domain & this._domain && use.location.text === this._name.text) {
+            this._uses.push(use);
+        }
+        else {
+            return this._parent.addUse(use, this);
+        }
+    }
+    getFunctionScope() {
+        return this._innerScope;
+    }
+    getDestinationScope() {
+        return this._innerScope;
+    }
+}
+class FunctionExpressionScope extends AbstractNamedExpressionScope {
+    constructor(name, parent) {
+        super(name, 4, parent);
+        this._innerScope = new FunctionScope(this);
+    }
+    beginBody() {
+        return this._innerScope.beginBody();
+    }
+}
+class ClassExpressionScope extends AbstractNamedExpressionScope {
+    constructor(name, parent) {
+        super(name, 4 | 2, parent);
+        this._innerScope = new NonRootScope(this, 1);
+    }
+}
+class BlockScope extends NonRootScope {
+    constructor(_functionScope, parent) {
+        super(parent, 2);
+        this._functionScope = _functionScope;
+    }
+    getFunctionScope() {
+        return this._functionScope;
+    }
+}
+function mapDeclaration(declaration) {
+    return {
+        declaration,
+        exported: true,
+        domain: getDeclarationDomain(declaration),
+    };
+}
+class NamespaceScope extends NonRootScope {
+    constructor(_ambient, _hasExport, parent) {
+        super(parent, 1);
+        this._ambient = _ambient;
+        this._hasExport = _hasExport;
+        this._innerScope = new NonRootScope(this, 1);
+        this._exports = undefined;
+    }
+    finish(cb) {
+        return super.end(cb);
+    }
+    end(cb) {
+        this._innerScope.end((variable, key, scope) => {
+            if (scope !== this._innerScope ||
+                !variable.exported && (!this._ambient || this._exports !== undefined && !this._exports.has(key.text)))
+                return cb(variable, key, scope);
+            const namespaceVar = this._variables.get(key.text);
+            if (namespaceVar === undefined) {
+                this._variables.set(key.text, {
+                    declarations: variable.declarations.map(mapDeclaration),
+                    domain: variable.domain,
+                    uses: [...variable.uses],
+                });
+            }
+            else {
+                outer: for (const declaration of variable.declarations) {
+                    for (const existing of namespaceVar.declarations)
+                        if (existing.declaration === declaration)
+                            continue outer;
+                    namespaceVar.declarations.push(mapDeclaration(declaration));
+                }
+                namespaceVar.domain |= variable.domain;
+                for (const use of variable.uses) {
+                    if (namespaceVar.uses.includes(use))
+                        continue;
+                    namespaceVar.uses.push(use);
+                }
+            }
+        });
+        this._applyUses();
+        this._innerScope = new NonRootScope(this, 1);
+    }
+    createOrReuseNamespaceScope(name, exported, ambient, hasExportStatement) {
+        if (!exported && (!this._ambient || this._hasExport))
+            return this._innerScope.createOrReuseNamespaceScope(name, exported, ambient || this._ambient, hasExportStatement);
+        return super.createOrReuseNamespaceScope(name, exported, ambient || this._ambient, hasExportStatement);
+    }
+    createOrReuseEnumScope(name, exported) {
+        if (!exported && (!this._ambient || this._hasExport))
+            return this._innerScope.createOrReuseEnumScope(name, exported);
+        return super.createOrReuseEnumScope(name, exported);
+    }
+    addUse(use, source) {
+        if (source !== this._innerScope)
+            return this._innerScope.addUse(use);
+        this._uses.push(use);
+    }
+    refresh(ambient, hasExport) {
+        this._ambient = ambient;
+        this._hasExport = hasExport;
+    }
+    markExported(name, _as) {
+        if (this._exports === undefined)
+            this._exports = new Set();
+        this._exports.add(name.text);
+    }
+    getDestinationScope() {
+        return this._innerScope;
+    }
+}
+function getEntityNameParent(name) {
+    let parent = name.parent;
+    while (parent.kind === ts.SyntaxKind.QualifiedName)
+        parent = parent.parent;
+    return parent;
+}
+class UsageWalker {
+    constructor() {
+        this._result = new Map();
+    }
+    getUsage(sourceFile) {
+        const variableCallback = (variable, key) => {
+            this._result.set(key, variable);
+        };
+        const isModule = ts.isExternalModule(sourceFile);
+        this._scope = new RootScope(sourceFile.isDeclarationFile && isModule && !containsExportStatement(sourceFile), !isModule);
+        const cb = (node) => {
+            if (util_1.isBlockScopeBoundary(node))
+                return continueWithScope(node, new BlockScope(this._scope.getFunctionScope(), this._scope), handleBlockScope);
+            switch (node.kind) {
+                case ts.SyntaxKind.ClassExpression:
+                    return continueWithScope(node, node.name !== undefined
+                        ? new ClassExpressionScope(node.name, this._scope)
+                        : new NonRootScope(this._scope, 1));
+                case ts.SyntaxKind.ClassDeclaration:
+                    this._handleDeclaration(node, true, 4 | 2);
+                    return continueWithScope(node, new NonRootScope(this._scope, 1));
+                case ts.SyntaxKind.InterfaceDeclaration:
+                case ts.SyntaxKind.TypeAliasDeclaration:
+                    this._handleDeclaration(node, true, 2);
+                    return continueWithScope(node, new NonRootScope(this._scope, 4));
+                case ts.SyntaxKind.EnumDeclaration:
+                    this._handleDeclaration(node, true, 7);
+                    return continueWithScope(node, this._scope.createOrReuseEnumScope(node.name.text, util_1.hasModifier(node.modifiers, ts.SyntaxKind.ExportKeyword)));
+                case ts.SyntaxKind.ModuleDeclaration:
+                    return this._handleModule(node, continueWithScope);
+                case ts.SyntaxKind.MappedType:
+                    return continueWithScope(node, new NonRootScope(this._scope, 4));
+                case ts.SyntaxKind.FunctionExpression:
+                case ts.SyntaxKind.ArrowFunction:
+                case ts.SyntaxKind.Constructor:
+                case ts.SyntaxKind.MethodDeclaration:
+                case ts.SyntaxKind.FunctionDeclaration:
+                case ts.SyntaxKind.GetAccessor:
+                case ts.SyntaxKind.SetAccessor:
+                case ts.SyntaxKind.MethodSignature:
+                case ts.SyntaxKind.CallSignature:
+                case ts.SyntaxKind.ConstructSignature:
+                case ts.SyntaxKind.ConstructorType:
+                case ts.SyntaxKind.FunctionType:
+                    return this._handleFunctionLikeDeclaration(node, cb, variableCallback);
+                case ts.SyntaxKind.ConditionalType:
+                    return this._handleConditionalType(node, cb, variableCallback);
+                case ts.SyntaxKind.VariableDeclarationList:
+                    this._handleVariableDeclaration(node);
+                    break;
+                case ts.SyntaxKind.Parameter:
+                    if (node.parent.kind !== ts.SyntaxKind.IndexSignature &&
+                        (node.name.kind !== ts.SyntaxKind.Identifier ||
+                            node.name.originalKeywordKind !== ts.SyntaxKind.ThisKeyword))
+                        this._handleBindingName(node.name, false, false);
+                    break;
+                case ts.SyntaxKind.EnumMember:
+                    this._scope.addVariable(util_1.getPropertyName(node.name), node.name, 1, true, 4);
+                    break;
+                case ts.SyntaxKind.ImportClause:
+                case ts.SyntaxKind.ImportSpecifier:
+                case ts.SyntaxKind.NamespaceImport:
+                case ts.SyntaxKind.ImportEqualsDeclaration:
+                    this._handleDeclaration(node, false, 7 | 8);
+                    break;
+                case ts.SyntaxKind.TypeParameter:
+                    this._scope.addVariable(node.name.text, node.name, node.parent.kind === ts.SyntaxKind.InferType ? 8 : 7, false, 2);
+                    break;
+                case ts.SyntaxKind.ExportSpecifier:
+                    if (node.propertyName !== undefined)
+                        return this._scope.markExported(node.propertyName, node.name);
+                    return this._scope.markExported(node.name);
+                case ts.SyntaxKind.ExportAssignment:
+                    if (node.expression.kind === ts.SyntaxKind.Identifier)
+                        return this._scope.markExported(node.expression);
+                    break;
+                case ts.SyntaxKind.Identifier:
+                    const domain = getUsageDomain(node);
+                    if (domain !== undefined)
+                        this._scope.addUse({ domain, location: node });
+                    return;
+            }
+            return ts.forEachChild(node, cb);
+        };
+        const continueWithScope = (node, scope, next = forEachChild) => {
+            const savedScope = this._scope;
+            this._scope = scope;
+            next(node);
+            this._scope.end(variableCallback);
+            this._scope = savedScope;
+        };
+        const handleBlockScope = (node) => {
+            if (node.kind === ts.SyntaxKind.CatchClause && node.variableDeclaration !== undefined)
+                this._handleBindingName(node.variableDeclaration.name, true, false);
+            return ts.forEachChild(node, cb);
+        };
+        ts.forEachChild(sourceFile, cb);
+        this._scope.end(variableCallback);
+        return this._result;
+        function forEachChild(node) {
+            return ts.forEachChild(node, cb);
+        }
+    }
+    _handleConditionalType(node, cb, varCb) {
+        const savedScope = this._scope;
+        const scope = this._scope = new ConditionalTypeScope(savedScope);
+        cb(node.checkType);
+        scope.updateState(1);
+        cb(node.extendsType);
+        scope.updateState(2);
+        cb(node.trueType);
+        scope.updateState(3);
+        cb(node.falseType);
+        scope.end(varCb);
+        this._scope = savedScope;
+    }
+    _handleFunctionLikeDeclaration(node, cb, varCb) {
+        if (node.decorators !== undefined)
+            node.decorators.forEach(cb);
+        const savedScope = this._scope;
+        if (node.kind === ts.SyntaxKind.FunctionDeclaration)
+            this._handleDeclaration(node, false, 4);
+        const scope = this._scope = node.kind === ts.SyntaxKind.FunctionExpression && node.name !== undefined
+            ? new FunctionExpressionScope(node.name, savedScope)
+            : new FunctionScope(savedScope);
+        if (node.name !== undefined)
+            cb(node.name);
+        if (node.typeParameters !== undefined)
+            node.typeParameters.forEach(cb);
+        node.parameters.forEach(cb);
+        if (node.type !== undefined)
+            cb(node.type);
+        if (node.body !== undefined) {
+            scope.beginBody();
+            cb(node.body);
+        }
+        scope.end(varCb);
+        this._scope = savedScope;
+    }
+    _handleModule(node, next) {
+        if (node.flags & ts.NodeFlags.GlobalAugmentation)
+            return next(node, this._scope.createOrReuseNamespaceScope('-global', false, true, false));
+        if (node.name.kind === ts.SyntaxKind.Identifier) {
+            const exported = isNamespaceExported(node);
+            this._scope.addVariable(node.name.text, node.name, 1, exported, 1 | 4);
+            const ambient = util_1.hasModifier(node.modifiers, ts.SyntaxKind.DeclareKeyword);
+            return next(node, this._scope.createOrReuseNamespaceScope(node.name.text, exported, ambient, ambient && namespaceHasExportStatement(node)));
+        }
+        return next(node, this._scope.createOrReuseNamespaceScope(`"${node.name.text}"`, false, true, namespaceHasExportStatement(node)));
+    }
+    _handleDeclaration(node, blockScoped, domain) {
+        if (node.name !== undefined)
+            this._scope.addVariable(node.name.text, node.name, blockScoped ? 3 : 1, util_1.hasModifier(node.modifiers, ts.SyntaxKind.ExportKeyword), domain);
+    }
+    _handleBindingName(name, blockScoped, exported) {
+        if (name.kind === ts.SyntaxKind.Identifier)
+            return this._scope.addVariable(name.text, name, blockScoped ? 3 : 1, exported, 4);
+        util_1.forEachDestructuringIdentifier(name, (declaration) => {
+            this._scope.addVariable(declaration.name.text, declaration.name, blockScoped ? 3 : 1, exported, 4);
+        });
+    }
+    _handleVariableDeclaration(declarationList) {
+        const blockScoped = util_1.isBlockScopedVariableDeclarationList(declarationList);
+        const exported = declarationList.parent.kind === ts.SyntaxKind.VariableStatement &&
+            util_1.hasModifier(declarationList.parent.modifiers, ts.SyntaxKind.ExportKeyword);
+        for (const declaration of declarationList.declarations)
+            this._handleBindingName(declaration.name, blockScoped, exported);
+    }
+}
+function isNamespaceExported(node) {
+    return node.parent.kind === ts.SyntaxKind.ModuleDeclaration || util_1.hasModifier(node.modifiers, ts.SyntaxKind.ExportKeyword);
+}
+function namespaceHasExportStatement(ns) {
+    if (ns.body === undefined || ns.body.kind !== ts.SyntaxKind.ModuleBlock)
+        return false;
+    return containsExportStatement(ns.body);
+}
+function containsExportStatement(block) {
+    for (const statement of block.statements)
+        if (statement.kind === ts.SyntaxKind.ExportDeclaration || statement.kind === ts.SyntaxKind.ExportAssignment)
+            return true;
+    return false;
+}
diff --git a/server/node_modules/tsutils/util/util.d.ts b/server/node_modules/tsutils/util/util.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1ae3299a8cabba5d5c0e59168cc1dc75d1cf5577
--- /dev/null
+++ b/server/node_modules/tsutils/util/util.d.ts
@@ -0,0 +1,167 @@
+import * as ts from 'typescript';
+import { NodeWrap } from './convert-ast';
+export declare function getChildOfKind<T extends ts.SyntaxKind>(node: ts.Node, kind: T, sourceFile?: ts.SourceFile): ts.Token<T> | undefined;
+export declare function isTokenKind(kind: ts.SyntaxKind): boolean;
+export declare function isNodeKind(kind: ts.SyntaxKind): boolean;
+export declare function isAssignmentKind(kind: ts.SyntaxKind): boolean;
+export declare function isTypeNodeKind(kind: ts.SyntaxKind): boolean;
+export declare function isJsDocKind(kind: ts.SyntaxKind): boolean;
+export declare function isKeywordKind(kind: ts.SyntaxKind): boolean;
+export declare function isThisParameter(parameter: ts.ParameterDeclaration): boolean;
+export declare function getModifier(node: ts.Node, kind: ts.Modifier['kind']): ts.Modifier | undefined;
+export declare function hasModifier(modifiers: ts.ModifiersArray | undefined, ...kinds: Array<ts.Modifier['kind']>): boolean;
+export declare function isParameterProperty(node: ts.ParameterDeclaration): boolean;
+export declare function hasAccessModifier(node: ts.ClassElement | ts.ParameterDeclaration): boolean;
+export declare const isNodeFlagSet: (node: ts.Node, flag: ts.NodeFlags) => boolean;
+export declare const isTypeFlagSet: (type: ts.Type, flag: ts.TypeFlags) => boolean;
+export declare const isSymbolFlagSet: (symbol: ts.Symbol, flag: ts.SymbolFlags) => boolean;
+export declare function isObjectFlagSet(objectType: ts.ObjectType, flag: ts.ObjectFlags): boolean;
+export declare function isModifierFlagSet(node: ts.Node, flag: ts.ModifierFlags): boolean;
+export declare function getPreviousStatement(statement: ts.Statement): ts.Statement | undefined;
+export declare function getNextStatement(statement: ts.Statement): ts.Statement | undefined;
+export declare function getPreviousToken(node: ts.Node, sourceFile?: ts.SourceFile): ts.Node | undefined;
+export declare function getNextToken(node: ts.Node, sourceFile?: ts.SourceFile): ts.Node | undefined;
+export declare function getTokenAtPosition(parent: ts.Node, pos: number, sourceFile?: ts.SourceFile, allowJsDoc?: boolean): ts.Node | undefined;
+export declare function getCommentAtPosition(sourceFile: ts.SourceFile, pos: number, parent?: ts.Node): ts.CommentRange | undefined;
+export declare function isPositionInComment(sourceFile: ts.SourceFile, pos: number, parent?: ts.Node): boolean;
+export declare function commentText(sourceText: string, comment: ts.CommentRange): string;
+export declare function getWrappedNodeAtPosition(wrap: NodeWrap, pos: number): NodeWrap | undefined;
+export declare function getPropertyName(propertyName: ts.PropertyName): string | undefined;
+export declare function forEachDestructuringIdentifier<T>(pattern: ts.BindingPattern, fn: (element: ts.BindingElement & {
+    name: ts.Identifier;
+}) => T): T | undefined;
+export declare function forEachDeclaredVariable<T>(declarationList: ts.VariableDeclarationList, cb: (element: (ts.VariableDeclaration | ts.BindingElement) & {
+    name: ts.Identifier;
+}) => T): T | undefined;
+export declare enum VariableDeclarationKind {
+    Var = 0,
+    Let = 1,
+    Const = 2
+}
+export declare function getVariableDeclarationKind(declarationList: ts.VariableDeclarationList): VariableDeclarationKind;
+export declare function isBlockScopedVariableDeclarationList(declarationList: ts.VariableDeclarationList): boolean;
+export declare function isBlockScopedVariableDeclaration(declaration: ts.VariableDeclaration): boolean;
+export declare function isBlockScopedDeclarationStatement(statement: ts.Statement): statement is ts.DeclarationStatement;
+export declare function isInSingleStatementContext(statement: ts.Statement): boolean;
+export declare enum ScopeBoundary {
+    None = 0,
+    Function = 1,
+    Block = 2,
+    Type = 4,
+    ConditionalType = 8
+}
+export declare enum ScopeBoundarySelector {
+    Function = 1,
+    Block = 3,
+    Type = 7,
+    InferType = 8
+}
+export declare function isScopeBoundary(node: ts.Node): ScopeBoundary;
+export declare function isTypeScopeBoundary(node: ts.Node): ScopeBoundary;
+export declare function isFunctionScopeBoundary(node: ts.Node): ScopeBoundary;
+export declare function isBlockScopeBoundary(node: ts.Node): ScopeBoundary;
+export declare function hasOwnThisReference(node: ts.Node): boolean;
+export declare function isFunctionWithBody(node: ts.Node): node is ts.FunctionLikeDeclaration & {
+    body: {};
+};
+export declare function forEachToken(node: ts.Node, cb: (node: ts.Node) => void, sourceFile?: ts.SourceFile): void;
+export declare type ForEachTokenCallback = (fullText: string, kind: ts.SyntaxKind, range: ts.TextRange, parent: ts.Node) => void;
+export declare function forEachTokenWithTrivia(node: ts.Node, cb: ForEachTokenCallback, sourceFile?: ts.SourceFile): void;
+export declare type ForEachCommentCallback = (fullText: string, comment: ts.CommentRange) => void;
+export declare function forEachComment(node: ts.Node, cb: ForEachCommentCallback, sourceFile?: ts.SourceFile): void;
+export interface LineRange extends ts.TextRange {
+    contentLength: number;
+}
+export declare function getLineRanges(sourceFile: ts.SourceFile): LineRange[];
+export declare function getLineBreakStyle(sourceFile: ts.SourceFile): "\n" | "\r\n";
+export declare function isValidIdentifier(text: string, languageVersion?: ts.ScriptTarget): boolean;
+export declare function isValidPropertyAccess(text: string, languageVersion?: ts.ScriptTarget): boolean;
+export declare function isValidPropertyName(text: string, languageVersion?: ts.ScriptTarget): boolean;
+export declare function isValidNumericLiteral(text: string, languageVersion?: ts.ScriptTarget): boolean;
+export declare function isValidJsxIdentifier(text: string, languageVersion?: ts.ScriptTarget): boolean;
+export declare function isNumericPropertyName(name: string | ts.__String): boolean;
+export declare function isSameLine(sourceFile: ts.SourceFile, pos1: number, pos2: number): boolean;
+export declare enum SideEffectOptions {
+    None = 0,
+    TaggedTemplate = 1,
+    Constructor = 2,
+    JsxElement = 4
+}
+export declare function hasSideEffects(node: ts.Expression, options?: SideEffectOptions): boolean;
+export declare function getDeclarationOfBindingElement(node: ts.BindingElement): ts.VariableDeclaration | ts.ParameterDeclaration;
+export declare function isExpressionValueUsed(node: ts.Expression): boolean;
+export declare enum AccessKind {
+    None = 0,
+    Read = 1,
+    Write = 2,
+    Delete = 4,
+    ReadWrite = 3,
+    Modification = 6
+}
+export declare function getAccessKind(node: ts.Node): AccessKind;
+export declare function isReassignmentTarget(node: ts.Expression): boolean;
+export declare function canHaveJsDoc(node: ts.Node): node is ts.HasJSDoc;
+export declare function getJsDoc(node: ts.Node, sourceFile?: ts.SourceFile): ts.JSDoc[];
+export declare function parseJsDocOfNode(node: ts.Node, considerTrailingComments?: boolean, sourceFile?: ts.SourceFile): ts.JSDoc[];
+export declare enum ImportKind {
+    ImportDeclaration = 1,
+    ImportEquals = 2,
+    ExportFrom = 4,
+    DynamicImport = 8,
+    Require = 16,
+    ImportType = 32,
+    All = 63,
+    AllImports = 59,
+    AllStaticImports = 3,
+    AllImportExpressions = 24,
+    AllRequireLike = 18
+}
+export declare function findImports(sourceFile: ts.SourceFile, kinds: ImportKind): (ts.StringLiteral | ts.NoSubstitutionTemplateLiteral)[];
+export declare type ImportLike = ts.ImportDeclaration | (ts.ImportEqualsDeclaration & {
+    moduleReference: ts.ExternalModuleReference;
+}) | (ts.ExportDeclaration & {
+    moduleSpecifier: {};
+}) | (ts.CallExpression & {
+    expression: ts.Token<ts.SyntaxKind.ImportKeyword> | (ts.Identifier & {
+        text: 'require';
+    });
+    arguments: [ts.Expression];
+}) | ts.ImportTypeNode;
+export declare function findImportLikeNodes(sourceFile: ts.SourceFile, kinds: ImportKind): ImportLike[];
+export declare function isStatementInAmbientContext(node: ts.Statement): boolean;
+export declare function isAmbientModuleBlock(node: ts.Node): node is ts.ModuleBlock;
+export declare function getIIFE(func: ts.FunctionExpression | ts.ArrowFunction): ts.CallExpression | undefined;
+export declare type StrictCompilerOption = 'noImplicitAny' | 'noImplicitThis' | 'strictNullChecks' | 'strictFunctionTypes' | 'strictPropertyInitialization' | 'alwaysStrict' | 'strictBindCallApply';
+export declare function isStrictCompilerOptionEnabled(options: ts.CompilerOptions, option: StrictCompilerOption): boolean;
+export declare type BooleanCompilerOptions = {
+    [K in keyof ts.CompilerOptions]: NonNullable<ts.CompilerOptions[K]> extends boolean ? K : never;
+} extends {
+    [_ in keyof ts.CompilerOptions]: infer U;
+} ? U : never;
+export declare function isCompilerOptionEnabled(options: ts.CompilerOptions, option: BooleanCompilerOptions | 'stripInternal'): boolean;
+export declare function isAmbientModule(node: ts.ModuleDeclaration): boolean;
+export declare function getCheckJsDirective(source: string): ts.CheckJsDirective | undefined;
+export declare function isConstAssertion(node: ts.AssertionExpression): boolean;
+export declare function isInConstContext(node: ts.Expression): boolean;
+export declare function isReadonlyAssignmentDeclaration(node: ts.CallExpression, checker: ts.TypeChecker): boolean;
+export declare function isBindableObjectDefinePropertyCall(node: ts.CallExpression): boolean;
+export interface WellKnownSymbolLiteral extends ts.PropertyAccessExpression {
+    expression: ts.Identifier & {
+        text: 'Symbol';
+        escapedText: 'symbol';
+    };
+}
+export declare function isWellKnownSymbolLiterally(node: ts.Expression): node is WellKnownSymbolLiteral;
+export interface PropertyName {
+    displayName: string;
+    symbolName: ts.__String;
+}
+export declare function getPropertyNameOfWellKnownSymbol(node: WellKnownSymbolLiteral): PropertyName;
+export interface LateBoundPropertyNames {
+    known: boolean;
+    names: PropertyName[];
+}
+export declare function getLateBoundPropertyNames(node: ts.Expression, checker: ts.TypeChecker): LateBoundPropertyNames;
+export declare function getLateBoundPropertyNamesOfPropertyName(node: ts.PropertyName, checker: ts.TypeChecker): LateBoundPropertyNames;
+export declare function getSingleLateBoundPropertyNameOfPropertyName(node: ts.PropertyName, checker: ts.TypeChecker): PropertyName | undefined;
+export declare function unwrapParentheses(node: ts.Expression): ts.Expression;
diff --git a/server/node_modules/tsutils/util/util.js b/server/node_modules/tsutils/util/util.js
new file mode 100644
index 0000000000000000000000000000000000000000..07b469a496d38747041a3177010dc000538a6440
--- /dev/null
+++ b/server/node_modules/tsutils/util/util.js
@@ -0,0 +1,1422 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const ts = require("typescript");
+const node_1 = require("../typeguard/node");
+const _3_2_1 = require("../typeguard/3.2");
+const type_1 = require("./type");
+function getChildOfKind(node, kind, sourceFile) {
+    for (const child of node.getChildren(sourceFile))
+        if (child.kind === kind)
+            return child;
+}
+exports.getChildOfKind = getChildOfKind;
+function isTokenKind(kind) {
+    return kind >= ts.SyntaxKind.FirstToken && kind <= ts.SyntaxKind.LastToken;
+}
+exports.isTokenKind = isTokenKind;
+function isNodeKind(kind) {
+    return kind >= ts.SyntaxKind.FirstNode;
+}
+exports.isNodeKind = isNodeKind;
+function isAssignmentKind(kind) {
+    return kind >= ts.SyntaxKind.FirstAssignment && kind <= ts.SyntaxKind.LastAssignment;
+}
+exports.isAssignmentKind = isAssignmentKind;
+function isTypeNodeKind(kind) {
+    return kind >= ts.SyntaxKind.FirstTypeNode && kind <= ts.SyntaxKind.LastTypeNode;
+}
+exports.isTypeNodeKind = isTypeNodeKind;
+function isJsDocKind(kind) {
+    return kind >= ts.SyntaxKind.FirstJSDocNode && kind <= ts.SyntaxKind.LastJSDocNode;
+}
+exports.isJsDocKind = isJsDocKind;
+function isKeywordKind(kind) {
+    return kind >= ts.SyntaxKind.FirstKeyword && kind <= ts.SyntaxKind.LastKeyword;
+}
+exports.isKeywordKind = isKeywordKind;
+function isThisParameter(parameter) {
+    return parameter.name.kind === ts.SyntaxKind.Identifier && parameter.name.originalKeywordKind === ts.SyntaxKind.ThisKeyword;
+}
+exports.isThisParameter = isThisParameter;
+function getModifier(node, kind) {
+    if (node.modifiers !== undefined)
+        for (const modifier of node.modifiers)
+            if (modifier.kind === kind)
+                return modifier;
+}
+exports.getModifier = getModifier;
+function hasModifier(modifiers, ...kinds) {
+    if (modifiers === undefined)
+        return false;
+    for (const modifier of modifiers)
+        if (kinds.includes(modifier.kind))
+            return true;
+    return false;
+}
+exports.hasModifier = hasModifier;
+function isParameterProperty(node) {
+    return hasModifier(node.modifiers, ts.SyntaxKind.PublicKeyword, ts.SyntaxKind.ProtectedKeyword, ts.SyntaxKind.PrivateKeyword, ts.SyntaxKind.ReadonlyKeyword);
+}
+exports.isParameterProperty = isParameterProperty;
+function hasAccessModifier(node) {
+    return hasModifier(node.modifiers, ts.SyntaxKind.PublicKeyword, ts.SyntaxKind.ProtectedKeyword, ts.SyntaxKind.PrivateKeyword);
+}
+exports.hasAccessModifier = hasAccessModifier;
+function isFlagSet(obj, flag) {
+    return (obj.flags & flag) !== 0;
+}
+exports.isNodeFlagSet = isFlagSet;
+exports.isTypeFlagSet = isFlagSet;
+exports.isSymbolFlagSet = isFlagSet;
+function isObjectFlagSet(objectType, flag) {
+    return (objectType.objectFlags & flag) !== 0;
+}
+exports.isObjectFlagSet = isObjectFlagSet;
+function isModifierFlagSet(node, flag) {
+    return (ts.getCombinedModifierFlags(node) & flag) !== 0;
+}
+exports.isModifierFlagSet = isModifierFlagSet;
+function getPreviousStatement(statement) {
+    const parent = statement.parent;
+    if (node_1.isBlockLike(parent)) {
+        const index = parent.statements.indexOf(statement);
+        if (index > 0)
+            return parent.statements[index - 1];
+    }
+}
+exports.getPreviousStatement = getPreviousStatement;
+function getNextStatement(statement) {
+    const parent = statement.parent;
+    if (node_1.isBlockLike(parent)) {
+        const index = parent.statements.indexOf(statement);
+        if (index < parent.statements.length)
+            return parent.statements[index + 1];
+    }
+}
+exports.getNextStatement = getNextStatement;
+function getPreviousToken(node, sourceFile) {
+    let parent = node.parent;
+    while (parent !== undefined && parent.pos === node.pos)
+        parent = parent.parent;
+    if (parent === undefined)
+        return;
+    outer: while (true) {
+        const children = parent.getChildren(sourceFile);
+        for (let i = children.length - 1; i >= 0; --i) {
+            const child = children[i];
+            if (child.pos < node.pos && child.kind !== ts.SyntaxKind.JSDocComment) {
+                if (isTokenKind(child.kind))
+                    return child;
+                parent = child;
+                continue outer;
+            }
+        }
+        return;
+    }
+}
+exports.getPreviousToken = getPreviousToken;
+function getNextToken(node, sourceFile = node.getSourceFile()) {
+    if (node.kind === ts.SyntaxKind.SourceFile || node.kind === ts.SyntaxKind.EndOfFileToken)
+        return;
+    const end = node.end;
+    node = node.parent;
+    while (node.end === end) {
+        if (node.parent === undefined)
+            return node.endOfFileToken;
+        node = node.parent;
+    }
+    return getTokenAtPositionWorker(node, end, sourceFile, false);
+}
+exports.getNextToken = getNextToken;
+function getTokenAtPosition(parent, pos, sourceFile, allowJsDoc) {
+    if (pos < parent.pos || pos >= parent.end)
+        return;
+    if (isTokenKind(parent.kind))
+        return parent;
+    if (sourceFile === undefined)
+        sourceFile = parent.getSourceFile();
+    return getTokenAtPositionWorker(parent, pos, sourceFile, allowJsDoc === true);
+}
+exports.getTokenAtPosition = getTokenAtPosition;
+function getTokenAtPositionWorker(node, pos, sourceFile, allowJsDoc) {
+    outer: while (true) {
+        for (const child of node.getChildren(sourceFile)) {
+            if (child.end > pos && (allowJsDoc || child.kind !== ts.SyntaxKind.JSDocComment)) {
+                if (isTokenKind(child.kind))
+                    return child;
+                node = child;
+                continue outer;
+            }
+        }
+        return;
+    }
+}
+function getCommentAtPosition(sourceFile, pos, parent = sourceFile) {
+    const token = getTokenAtPosition(parent, pos, sourceFile);
+    if (token === undefined || token.kind === ts.SyntaxKind.JsxText || pos >= token.end - (ts.tokenToString(token.kind) || '').length)
+        return;
+    const startPos = token.pos === 0
+        ? (ts.getShebang(sourceFile.text) || '').length
+        : token.pos;
+    return startPos !== 0 && ts.forEachTrailingCommentRange(sourceFile.text, startPos, commentAtPositionCallback, pos) ||
+        ts.forEachLeadingCommentRange(sourceFile.text, startPos, commentAtPositionCallback, pos);
+}
+exports.getCommentAtPosition = getCommentAtPosition;
+function commentAtPositionCallback(pos, end, kind, _nl, at) {
+    return at >= pos && at < end ? { pos, end, kind } : undefined;
+}
+function isPositionInComment(sourceFile, pos, parent) {
+    return getCommentAtPosition(sourceFile, pos, parent) !== undefined;
+}
+exports.isPositionInComment = isPositionInComment;
+function commentText(sourceText, comment) {
+    return sourceText.substring(comment.pos + 2, comment.kind === ts.SyntaxKind.SingleLineCommentTrivia ? comment.end : comment.end - 2);
+}
+exports.commentText = commentText;
+function getWrappedNodeAtPosition(wrap, pos) {
+    if (wrap.node.pos > pos || wrap.node.end <= pos)
+        return;
+    outer: while (true) {
+        for (const child of wrap.children) {
+            if (child.node.pos > pos)
+                return wrap;
+            if (child.node.end > pos) {
+                wrap = child;
+                continue outer;
+            }
+        }
+        return wrap;
+    }
+}
+exports.getWrappedNodeAtPosition = getWrappedNodeAtPosition;
+function getPropertyName(propertyName) {
+    if (propertyName.kind === ts.SyntaxKind.ComputedPropertyName) {
+        if (!node_1.isLiteralExpression(propertyName.expression))
+            return;
+        if (_3_2_1.isBigIntLiteral(propertyName.expression))
+            return propertyName.expression.text.slice(0, -1);
+        return propertyName.expression.text;
+    }
+    return propertyName.text;
+}
+exports.getPropertyName = getPropertyName;
+function forEachDestructuringIdentifier(pattern, fn) {
+    for (const element of pattern.elements) {
+        if (element.kind !== ts.SyntaxKind.BindingElement)
+            continue;
+        let result;
+        if (element.name.kind === ts.SyntaxKind.Identifier) {
+            result = fn(element);
+        }
+        else {
+            result = forEachDestructuringIdentifier(element.name, fn);
+        }
+        if (result)
+            return result;
+    }
+}
+exports.forEachDestructuringIdentifier = forEachDestructuringIdentifier;
+function forEachDeclaredVariable(declarationList, cb) {
+    for (const declaration of declarationList.declarations) {
+        let result;
+        if (declaration.name.kind === ts.SyntaxKind.Identifier) {
+            result = cb(declaration);
+        }
+        else {
+            result = forEachDestructuringIdentifier(declaration.name, cb);
+        }
+        if (result)
+            return result;
+    }
+}
+exports.forEachDeclaredVariable = forEachDeclaredVariable;
+var VariableDeclarationKind;
+(function (VariableDeclarationKind) {
+    VariableDeclarationKind[VariableDeclarationKind["Var"] = 0] = "Var";
+    VariableDeclarationKind[VariableDeclarationKind["Let"] = 1] = "Let";
+    VariableDeclarationKind[VariableDeclarationKind["Const"] = 2] = "Const";
+})(VariableDeclarationKind = exports.VariableDeclarationKind || (exports.VariableDeclarationKind = {}));
+function getVariableDeclarationKind(declarationList) {
+    if (declarationList.flags & ts.NodeFlags.Let)
+        return 1;
+    if (declarationList.flags & ts.NodeFlags.Const)
+        return 2;
+    return 0;
+}
+exports.getVariableDeclarationKind = getVariableDeclarationKind;
+function isBlockScopedVariableDeclarationList(declarationList) {
+    return (declarationList.flags & ts.NodeFlags.BlockScoped) !== 0;
+}
+exports.isBlockScopedVariableDeclarationList = isBlockScopedVariableDeclarationList;
+function isBlockScopedVariableDeclaration(declaration) {
+    const parent = declaration.parent;
+    return parent.kind === ts.SyntaxKind.CatchClause ||
+        isBlockScopedVariableDeclarationList(parent);
+}
+exports.isBlockScopedVariableDeclaration = isBlockScopedVariableDeclaration;
+function isBlockScopedDeclarationStatement(statement) {
+    switch (statement.kind) {
+        case ts.SyntaxKind.VariableStatement:
+            return isBlockScopedVariableDeclarationList(statement.declarationList);
+        case ts.SyntaxKind.ClassDeclaration:
+        case ts.SyntaxKind.EnumDeclaration:
+        case ts.SyntaxKind.InterfaceDeclaration:
+        case ts.SyntaxKind.TypeAliasDeclaration:
+            return true;
+        default:
+            return false;
+    }
+}
+exports.isBlockScopedDeclarationStatement = isBlockScopedDeclarationStatement;
+function isInSingleStatementContext(statement) {
+    switch (statement.parent.kind) {
+        case ts.SyntaxKind.ForStatement:
+        case ts.SyntaxKind.ForInStatement:
+        case ts.SyntaxKind.ForOfStatement:
+        case ts.SyntaxKind.WhileStatement:
+        case ts.SyntaxKind.DoStatement:
+        case ts.SyntaxKind.IfStatement:
+        case ts.SyntaxKind.WithStatement:
+        case ts.SyntaxKind.LabeledStatement:
+            return true;
+        default:
+            return false;
+    }
+}
+exports.isInSingleStatementContext = isInSingleStatementContext;
+var ScopeBoundary;
+(function (ScopeBoundary) {
+    ScopeBoundary[ScopeBoundary["None"] = 0] = "None";
+    ScopeBoundary[ScopeBoundary["Function"] = 1] = "Function";
+    ScopeBoundary[ScopeBoundary["Block"] = 2] = "Block";
+    ScopeBoundary[ScopeBoundary["Type"] = 4] = "Type";
+    ScopeBoundary[ScopeBoundary["ConditionalType"] = 8] = "ConditionalType";
+})(ScopeBoundary = exports.ScopeBoundary || (exports.ScopeBoundary = {}));
+var ScopeBoundarySelector;
+(function (ScopeBoundarySelector) {
+    ScopeBoundarySelector[ScopeBoundarySelector["Function"] = 1] = "Function";
+    ScopeBoundarySelector[ScopeBoundarySelector["Block"] = 3] = "Block";
+    ScopeBoundarySelector[ScopeBoundarySelector["Type"] = 7] = "Type";
+    ScopeBoundarySelector[ScopeBoundarySelector["InferType"] = 8] = "InferType";
+})(ScopeBoundarySelector = exports.ScopeBoundarySelector || (exports.ScopeBoundarySelector = {}));
+function isScopeBoundary(node) {
+    return isFunctionScopeBoundary(node) || isBlockScopeBoundary(node) || isTypeScopeBoundary(node);
+}
+exports.isScopeBoundary = isScopeBoundary;
+function isTypeScopeBoundary(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.InterfaceDeclaration:
+        case ts.SyntaxKind.TypeAliasDeclaration:
+        case ts.SyntaxKind.MappedType:
+            return 4;
+        case ts.SyntaxKind.ConditionalType:
+            return 8;
+        default:
+            return 0;
+    }
+}
+exports.isTypeScopeBoundary = isTypeScopeBoundary;
+function isFunctionScopeBoundary(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.FunctionExpression:
+        case ts.SyntaxKind.ArrowFunction:
+        case ts.SyntaxKind.Constructor:
+        case ts.SyntaxKind.ModuleDeclaration:
+        case ts.SyntaxKind.ClassDeclaration:
+        case ts.SyntaxKind.ClassExpression:
+        case ts.SyntaxKind.EnumDeclaration:
+        case ts.SyntaxKind.MethodDeclaration:
+        case ts.SyntaxKind.FunctionDeclaration:
+        case ts.SyntaxKind.GetAccessor:
+        case ts.SyntaxKind.SetAccessor:
+        case ts.SyntaxKind.MethodSignature:
+        case ts.SyntaxKind.CallSignature:
+        case ts.SyntaxKind.ConstructSignature:
+        case ts.SyntaxKind.ConstructorType:
+        case ts.SyntaxKind.FunctionType:
+            return 1;
+        case ts.SyntaxKind.SourceFile:
+            return ts.isExternalModule(node) ? 1 : 0;
+        default:
+            return 0;
+    }
+}
+exports.isFunctionScopeBoundary = isFunctionScopeBoundary;
+function isBlockScopeBoundary(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.Block:
+            const parent = node.parent;
+            return parent.kind !== ts.SyntaxKind.CatchClause &&
+                (parent.kind === ts.SyntaxKind.SourceFile ||
+                    !isFunctionScopeBoundary(parent))
+                ? 2
+                : 0;
+        case ts.SyntaxKind.ForStatement:
+        case ts.SyntaxKind.ForInStatement:
+        case ts.SyntaxKind.ForOfStatement:
+        case ts.SyntaxKind.CaseBlock:
+        case ts.SyntaxKind.CatchClause:
+        case ts.SyntaxKind.WithStatement:
+            return 2;
+        default:
+            return 0;
+    }
+}
+exports.isBlockScopeBoundary = isBlockScopeBoundary;
+function hasOwnThisReference(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.ClassDeclaration:
+        case ts.SyntaxKind.ClassExpression:
+        case ts.SyntaxKind.FunctionExpression:
+            return true;
+        case ts.SyntaxKind.FunctionDeclaration:
+            return node.body !== undefined;
+        case ts.SyntaxKind.MethodDeclaration:
+        case ts.SyntaxKind.GetAccessor:
+        case ts.SyntaxKind.SetAccessor:
+            return node.parent.kind === ts.SyntaxKind.ObjectLiteralExpression;
+        default:
+            return false;
+    }
+}
+exports.hasOwnThisReference = hasOwnThisReference;
+function isFunctionWithBody(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.GetAccessor:
+        case ts.SyntaxKind.SetAccessor:
+        case ts.SyntaxKind.FunctionDeclaration:
+        case ts.SyntaxKind.MethodDeclaration:
+        case ts.SyntaxKind.Constructor:
+            return node.body !== undefined;
+        case ts.SyntaxKind.FunctionExpression:
+        case ts.SyntaxKind.ArrowFunction:
+            return true;
+        default:
+            return false;
+    }
+}
+exports.isFunctionWithBody = isFunctionWithBody;
+function forEachToken(node, cb, sourceFile = node.getSourceFile()) {
+    return (function iterate(child) {
+        if (isTokenKind(child.kind))
+            return cb(child);
+        if (child.kind !== ts.SyntaxKind.JSDocComment)
+            return child.getChildren(sourceFile).forEach(iterate);
+    })(node);
+}
+exports.forEachToken = forEachToken;
+function forEachTokenWithTrivia(node, cb, sourceFile = node.getSourceFile()) {
+    const fullText = sourceFile.text;
+    const scanner = ts.createScanner(sourceFile.languageVersion, false, sourceFile.languageVariant, fullText);
+    return forEachToken(node, (token) => {
+        const tokenStart = token.kind === ts.SyntaxKind.JsxText || token.pos === token.end ? token.pos : token.getStart(sourceFile);
+        if (tokenStart !== token.pos) {
+            scanner.setTextPos(token.pos);
+            let kind = scanner.scan();
+            let pos = scanner.getTokenPos();
+            while (pos < tokenStart) {
+                const textPos = scanner.getTextPos();
+                cb(fullText, kind, { pos, end: textPos }, token.parent);
+                if (textPos === tokenStart)
+                    break;
+                kind = scanner.scan();
+                pos = scanner.getTokenPos();
+            }
+        }
+        return cb(fullText, token.kind, { end: token.end, pos: tokenStart }, token.parent);
+    }, sourceFile);
+}
+exports.forEachTokenWithTrivia = forEachTokenWithTrivia;
+function forEachComment(node, cb, sourceFile = node.getSourceFile()) {
+    const fullText = sourceFile.text;
+    const notJsx = sourceFile.languageVariant !== ts.LanguageVariant.JSX;
+    return forEachToken(node, (token) => {
+        if (token.pos === token.end)
+            return;
+        if (token.kind !== ts.SyntaxKind.JsxText)
+            ts.forEachLeadingCommentRange(fullText, token.pos === 0 ? (ts.getShebang(fullText) || '').length : token.pos, commentCallback);
+        if (notJsx || canHaveTrailingTrivia(token))
+            return ts.forEachTrailingCommentRange(fullText, token.end, commentCallback);
+    }, sourceFile);
+    function commentCallback(pos, end, kind) {
+        cb(fullText, { pos, end, kind });
+    }
+}
+exports.forEachComment = forEachComment;
+function canHaveTrailingTrivia(token) {
+    switch (token.kind) {
+        case ts.SyntaxKind.CloseBraceToken:
+            return token.parent.kind !== ts.SyntaxKind.JsxExpression || !isJsxElementOrFragment(token.parent.parent);
+        case ts.SyntaxKind.GreaterThanToken:
+            switch (token.parent.kind) {
+                case ts.SyntaxKind.JsxOpeningElement:
+                    return token.end !== token.parent.end;
+                case ts.SyntaxKind.JsxOpeningFragment:
+                    return false;
+                case ts.SyntaxKind.JsxSelfClosingElement:
+                    return token.end !== token.parent.end ||
+                        !isJsxElementOrFragment(token.parent.parent);
+                case ts.SyntaxKind.JsxClosingElement:
+                case ts.SyntaxKind.JsxClosingFragment:
+                    return !isJsxElementOrFragment(token.parent.parent.parent);
+            }
+    }
+    return true;
+}
+function isJsxElementOrFragment(node) {
+    return node.kind === ts.SyntaxKind.JsxElement || node.kind === ts.SyntaxKind.JsxFragment;
+}
+function getLineRanges(sourceFile) {
+    const lineStarts = sourceFile.getLineStarts();
+    const result = [];
+    const length = lineStarts.length;
+    const sourceText = sourceFile.text;
+    let pos = 0;
+    for (let i = 1; i < length; ++i) {
+        const end = lineStarts[i];
+        let lineEnd = end;
+        for (; lineEnd > pos; --lineEnd)
+            if (!ts.isLineBreak(sourceText.charCodeAt(lineEnd - 1)))
+                break;
+        result.push({
+            pos,
+            end,
+            contentLength: lineEnd - pos,
+        });
+        pos = end;
+    }
+    result.push({
+        pos,
+        end: sourceFile.end,
+        contentLength: sourceFile.end - pos,
+    });
+    return result;
+}
+exports.getLineRanges = getLineRanges;
+function getLineBreakStyle(sourceFile) {
+    const lineStarts = sourceFile.getLineStarts();
+    return lineStarts.length === 1 || lineStarts[1] < 2 || sourceFile.text[lineStarts[1] - 2] !== '\r'
+        ? '\n'
+        : '\r\n';
+}
+exports.getLineBreakStyle = getLineBreakStyle;
+let cachedScanner;
+function scanToken(text, languageVersion) {
+    if (cachedScanner === undefined) {
+        cachedScanner = ts.createScanner(languageVersion, false, undefined, text);
+    }
+    else {
+        cachedScanner.setScriptTarget(languageVersion);
+        cachedScanner.setText(text);
+    }
+    cachedScanner.scan();
+    return cachedScanner;
+}
+function isValidIdentifier(text, languageVersion = ts.ScriptTarget.Latest) {
+    const scan = scanToken(text, languageVersion);
+    return scan.isIdentifier() && scan.getTextPos() === text.length && scan.getTokenPos() === 0;
+}
+exports.isValidIdentifier = isValidIdentifier;
+function charSize(ch) {
+    return ch >= 0x10000 ? 2 : 1;
+}
+function isValidPropertyAccess(text, languageVersion = ts.ScriptTarget.Latest) {
+    if (text.length === 0)
+        return false;
+    let ch = text.codePointAt(0);
+    if (!ts.isIdentifierStart(ch, languageVersion))
+        return false;
+    for (let i = charSize(ch); i < text.length; i += charSize(ch)) {
+        ch = text.codePointAt(i);
+        if (!ts.isIdentifierPart(ch, languageVersion))
+            return false;
+    }
+    return true;
+}
+exports.isValidPropertyAccess = isValidPropertyAccess;
+function isValidPropertyName(text, languageVersion = ts.ScriptTarget.Latest) {
+    if (isValidPropertyAccess(text, languageVersion))
+        return true;
+    const scan = scanToken(text, languageVersion);
+    return scan.getTextPos() === text.length &&
+        scan.getToken() === ts.SyntaxKind.NumericLiteral && scan.getTokenValue() === text;
+}
+exports.isValidPropertyName = isValidPropertyName;
+function isValidNumericLiteral(text, languageVersion = ts.ScriptTarget.Latest) {
+    const scan = scanToken(text, languageVersion);
+    return scan.getToken() === ts.SyntaxKind.NumericLiteral && scan.getTextPos() === text.length && scan.getTokenPos() === 0;
+}
+exports.isValidNumericLiteral = isValidNumericLiteral;
+function isValidJsxIdentifier(text, languageVersion = ts.ScriptTarget.Latest) {
+    if (text.length === 0)
+        return false;
+    let ch = text.codePointAt(0);
+    if (!ts.isIdentifierStart(ch, languageVersion))
+        return false;
+    for (let i = charSize(ch); i < text.length; i += charSize(ch)) {
+        ch = text.codePointAt(i);
+        if (!ts.isIdentifierPart(ch, languageVersion) && ch !== 45)
+            return false;
+    }
+    return true;
+}
+exports.isValidJsxIdentifier = isValidJsxIdentifier;
+function isNumericPropertyName(name) {
+    return String(+name) === name;
+}
+exports.isNumericPropertyName = isNumericPropertyName;
+function isSameLine(sourceFile, pos1, pos2) {
+    return ts.getLineAndCharacterOfPosition(sourceFile, pos1).line === ts.getLineAndCharacterOfPosition(sourceFile, pos2).line;
+}
+exports.isSameLine = isSameLine;
+var SideEffectOptions;
+(function (SideEffectOptions) {
+    SideEffectOptions[SideEffectOptions["None"] = 0] = "None";
+    SideEffectOptions[SideEffectOptions["TaggedTemplate"] = 1] = "TaggedTemplate";
+    SideEffectOptions[SideEffectOptions["Constructor"] = 2] = "Constructor";
+    SideEffectOptions[SideEffectOptions["JsxElement"] = 4] = "JsxElement";
+})(SideEffectOptions = exports.SideEffectOptions || (exports.SideEffectOptions = {}));
+function hasSideEffects(node, options) {
+    switch (node.kind) {
+        case ts.SyntaxKind.CallExpression:
+        case ts.SyntaxKind.PostfixUnaryExpression:
+        case ts.SyntaxKind.AwaitExpression:
+        case ts.SyntaxKind.YieldExpression:
+        case ts.SyntaxKind.DeleteExpression:
+            return true;
+        case ts.SyntaxKind.TypeAssertionExpression:
+        case ts.SyntaxKind.AsExpression:
+        case ts.SyntaxKind.ParenthesizedExpression:
+        case ts.SyntaxKind.NonNullExpression:
+        case ts.SyntaxKind.VoidExpression:
+        case ts.SyntaxKind.TypeOfExpression:
+        case ts.SyntaxKind.PropertyAccessExpression:
+        case ts.SyntaxKind.SpreadElement:
+        case ts.SyntaxKind.PartiallyEmittedExpression:
+            return hasSideEffects(node.expression, options);
+        case ts.SyntaxKind.BinaryExpression:
+            return isAssignmentKind(node.operatorToken.kind) ||
+                hasSideEffects(node.left, options) ||
+                hasSideEffects(node.right, options);
+        case ts.SyntaxKind.PrefixUnaryExpression:
+            switch (node.operator) {
+                case ts.SyntaxKind.PlusPlusToken:
+                case ts.SyntaxKind.MinusMinusToken:
+                    return true;
+                default:
+                    return hasSideEffects(node.operand, options);
+            }
+        case ts.SyntaxKind.ElementAccessExpression:
+            return hasSideEffects(node.expression, options) ||
+                node.argumentExpression !== undefined &&
+                    hasSideEffects(node.argumentExpression, options);
+        case ts.SyntaxKind.ConditionalExpression:
+            return hasSideEffects(node.condition, options) ||
+                hasSideEffects(node.whenTrue, options) ||
+                hasSideEffects(node.whenFalse, options);
+        case ts.SyntaxKind.NewExpression:
+            if (options & 2 || hasSideEffects(node.expression, options))
+                return true;
+            if (node.arguments !== undefined)
+                for (const child of node.arguments)
+                    if (hasSideEffects(child, options))
+                        return true;
+            return false;
+        case ts.SyntaxKind.TaggedTemplateExpression:
+            if (options & 1 || hasSideEffects(node.tag, options))
+                return true;
+            if (node.template.kind === ts.SyntaxKind.NoSubstitutionTemplateLiteral)
+                return false;
+            node = node.template;
+        case ts.SyntaxKind.TemplateExpression:
+            for (const child of node.templateSpans)
+                if (hasSideEffects(child.expression, options))
+                    return true;
+            return false;
+        case ts.SyntaxKind.ClassExpression:
+            return classExpressionHasSideEffects(node, options);
+        case ts.SyntaxKind.ArrayLiteralExpression:
+            for (const child of node.elements)
+                if (hasSideEffects(child, options))
+                    return true;
+            return false;
+        case ts.SyntaxKind.ObjectLiteralExpression:
+            for (const child of node.properties) {
+                if (child.name !== undefined && child.name.kind === ts.SyntaxKind.ComputedPropertyName &&
+                    hasSideEffects(child.name.expression, options))
+                    return true;
+                switch (child.kind) {
+                    case ts.SyntaxKind.PropertyAssignment:
+                        if (hasSideEffects(child.initializer, options))
+                            return true;
+                        break;
+                    case ts.SyntaxKind.SpreadAssignment:
+                        if (hasSideEffects(child.expression, options))
+                            return true;
+                }
+            }
+            return false;
+        case ts.SyntaxKind.JsxExpression:
+            return node.expression !== undefined && hasSideEffects(node.expression, options);
+        case ts.SyntaxKind.JsxElement:
+        case ts.SyntaxKind.JsxFragment:
+            for (const child of node.children)
+                if (child.kind !== ts.SyntaxKind.JsxText && hasSideEffects(child, options))
+                    return true;
+            if (node.kind === ts.SyntaxKind.JsxFragment)
+                return false;
+            node = node.openingElement;
+        case ts.SyntaxKind.JsxSelfClosingElement:
+        case ts.SyntaxKind.JsxOpeningElement:
+            if (options & 4)
+                return true;
+            for (const child of node.attributes.properties) {
+                if (child.kind === ts.SyntaxKind.JsxSpreadAttribute) {
+                    if (hasSideEffects(child.expression, options))
+                        return true;
+                }
+                else if (child.initializer !== undefined && hasSideEffects(child.initializer, options)) {
+                    return true;
+                }
+            }
+            return false;
+        case ts.SyntaxKind.CommaListExpression:
+            for (const child of node.elements)
+                if (hasSideEffects(child, options))
+                    return true;
+            return false;
+        default:
+            return false;
+    }
+}
+exports.hasSideEffects = hasSideEffects;
+function classExpressionHasSideEffects(node, options) {
+    if (node.heritageClauses !== undefined && node.heritageClauses[0].token === ts.SyntaxKind.ExtendsKeyword)
+        for (const base of node.heritageClauses[0].types)
+            if (hasSideEffects(base.expression, options))
+                return true;
+    for (const child of node.members)
+        if (child.name !== undefined && child.name.kind === ts.SyntaxKind.ComputedPropertyName &&
+            hasSideEffects(child.name.expression, options) ||
+            node_1.isPropertyDeclaration(child) && child.initializer !== undefined &&
+                hasSideEffects(child.initializer, options))
+            return true;
+    return false;
+}
+function getDeclarationOfBindingElement(node) {
+    let parent = node.parent.parent;
+    while (parent.kind === ts.SyntaxKind.BindingElement)
+        parent = parent.parent.parent;
+    return parent;
+}
+exports.getDeclarationOfBindingElement = getDeclarationOfBindingElement;
+function isExpressionValueUsed(node) {
+    while (true) {
+        const parent = node.parent;
+        switch (parent.kind) {
+            case ts.SyntaxKind.CallExpression:
+            case ts.SyntaxKind.NewExpression:
+            case ts.SyntaxKind.ElementAccessExpression:
+            case ts.SyntaxKind.WhileStatement:
+            case ts.SyntaxKind.DoStatement:
+            case ts.SyntaxKind.WithStatement:
+            case ts.SyntaxKind.ThrowStatement:
+            case ts.SyntaxKind.ReturnStatement:
+            case ts.SyntaxKind.JsxExpression:
+            case ts.SyntaxKind.JsxSpreadAttribute:
+            case ts.SyntaxKind.JsxElement:
+            case ts.SyntaxKind.JsxFragment:
+            case ts.SyntaxKind.JsxSelfClosingElement:
+            case ts.SyntaxKind.ComputedPropertyName:
+            case ts.SyntaxKind.ArrowFunction:
+            case ts.SyntaxKind.ExportSpecifier:
+            case ts.SyntaxKind.ExportAssignment:
+            case ts.SyntaxKind.ImportDeclaration:
+            case ts.SyntaxKind.ExternalModuleReference:
+            case ts.SyntaxKind.Decorator:
+            case ts.SyntaxKind.TaggedTemplateExpression:
+            case ts.SyntaxKind.TemplateSpan:
+            case ts.SyntaxKind.ExpressionWithTypeArguments:
+            case ts.SyntaxKind.TypeOfExpression:
+            case ts.SyntaxKind.AwaitExpression:
+            case ts.SyntaxKind.YieldExpression:
+            case ts.SyntaxKind.LiteralType:
+            case ts.SyntaxKind.JsxAttributes:
+            case ts.SyntaxKind.JsxOpeningElement:
+            case ts.SyntaxKind.JsxClosingElement:
+            case ts.SyntaxKind.IfStatement:
+            case ts.SyntaxKind.CaseClause:
+            case ts.SyntaxKind.SwitchStatement:
+                return true;
+            case ts.SyntaxKind.PropertyAccessExpression:
+                return parent.expression === node;
+            case ts.SyntaxKind.QualifiedName:
+                return parent.left === node;
+            case ts.SyntaxKind.ShorthandPropertyAssignment:
+                return parent.objectAssignmentInitializer === node ||
+                    !isInDestructuringAssignment(parent);
+            case ts.SyntaxKind.PropertyAssignment:
+                return parent.initializer === node && !isInDestructuringAssignment(parent);
+            case ts.SyntaxKind.SpreadAssignment:
+            case ts.SyntaxKind.SpreadElement:
+            case ts.SyntaxKind.ArrayLiteralExpression:
+                return !isInDestructuringAssignment(parent);
+            case ts.SyntaxKind.ParenthesizedExpression:
+            case ts.SyntaxKind.AsExpression:
+            case ts.SyntaxKind.TypeAssertionExpression:
+            case ts.SyntaxKind.PostfixUnaryExpression:
+            case ts.SyntaxKind.PrefixUnaryExpression:
+            case ts.SyntaxKind.NonNullExpression:
+                node = parent;
+                break;
+            case ts.SyntaxKind.ForStatement:
+                return parent.condition === node;
+            case ts.SyntaxKind.ForInStatement:
+            case ts.SyntaxKind.ForOfStatement:
+                return parent.expression === node;
+            case ts.SyntaxKind.ConditionalExpression:
+                if (parent.condition === node)
+                    return true;
+                node = parent;
+                break;
+            case ts.SyntaxKind.PropertyDeclaration:
+            case ts.SyntaxKind.BindingElement:
+            case ts.SyntaxKind.VariableDeclaration:
+            case ts.SyntaxKind.Parameter:
+            case ts.SyntaxKind.EnumMember:
+                return parent.initializer === node;
+            case ts.SyntaxKind.ImportEqualsDeclaration:
+                return parent.moduleReference === node;
+            case ts.SyntaxKind.CommaListExpression:
+                if (parent.elements[parent.elements.length - 1] !== node)
+                    return false;
+                node = parent;
+                break;
+            case ts.SyntaxKind.BinaryExpression:
+                if (parent.right === node) {
+                    if (parent.operatorToken.kind === ts.SyntaxKind.CommaToken) {
+                        node = parent;
+                        break;
+                    }
+                    return true;
+                }
+                switch (parent.operatorToken.kind) {
+                    case ts.SyntaxKind.CommaToken:
+                    case ts.SyntaxKind.EqualsToken:
+                        return false;
+                    case ts.SyntaxKind.EqualsEqualsEqualsToken:
+                    case ts.SyntaxKind.EqualsEqualsToken:
+                    case ts.SyntaxKind.ExclamationEqualsEqualsToken:
+                    case ts.SyntaxKind.ExclamationEqualsToken:
+                    case ts.SyntaxKind.InstanceOfKeyword:
+                    case ts.SyntaxKind.PlusToken:
+                    case ts.SyntaxKind.MinusToken:
+                    case ts.SyntaxKind.AsteriskToken:
+                    case ts.SyntaxKind.SlashToken:
+                    case ts.SyntaxKind.PercentToken:
+                    case ts.SyntaxKind.AsteriskAsteriskToken:
+                    case ts.SyntaxKind.GreaterThanToken:
+                    case ts.SyntaxKind.GreaterThanGreaterThanToken:
+                    case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken:
+                    case ts.SyntaxKind.GreaterThanEqualsToken:
+                    case ts.SyntaxKind.LessThanToken:
+                    case ts.SyntaxKind.LessThanLessThanToken:
+                    case ts.SyntaxKind.LessThanEqualsToken:
+                    case ts.SyntaxKind.AmpersandToken:
+                    case ts.SyntaxKind.BarToken:
+                    case ts.SyntaxKind.CaretToken:
+                    case ts.SyntaxKind.BarBarToken:
+                    case ts.SyntaxKind.AmpersandAmpersandToken:
+                    case ts.SyntaxKind.InKeyword:
+                        return true;
+                    default:
+                        node = parent;
+                }
+                break;
+            default:
+                return false;
+        }
+    }
+}
+exports.isExpressionValueUsed = isExpressionValueUsed;
+function isInDestructuringAssignment(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.ShorthandPropertyAssignment:
+            if (node.objectAssignmentInitializer !== undefined)
+                return true;
+        case ts.SyntaxKind.PropertyAssignment:
+        case ts.SyntaxKind.SpreadAssignment:
+            node = node.parent;
+            break;
+        case ts.SyntaxKind.SpreadElement:
+            if (node.parent.kind !== ts.SyntaxKind.ArrayLiteralExpression)
+                return false;
+            node = node.parent;
+    }
+    while (true) {
+        switch (node.parent.kind) {
+            case ts.SyntaxKind.BinaryExpression:
+                return node.parent.left === node &&
+                    node.parent.operatorToken.kind === ts.SyntaxKind.EqualsToken;
+            case ts.SyntaxKind.ForOfStatement:
+                return node.parent.initializer === node;
+            case ts.SyntaxKind.ArrayLiteralExpression:
+            case ts.SyntaxKind.ObjectLiteralExpression:
+                node = node.parent;
+                break;
+            case ts.SyntaxKind.SpreadAssignment:
+            case ts.SyntaxKind.PropertyAssignment:
+                node = node.parent.parent;
+                break;
+            case ts.SyntaxKind.SpreadElement:
+                if (node.parent.parent.kind !== ts.SyntaxKind.ArrayLiteralExpression)
+                    return false;
+                node = node.parent.parent;
+                break;
+            default:
+                return false;
+        }
+    }
+}
+var AccessKind;
+(function (AccessKind) {
+    AccessKind[AccessKind["None"] = 0] = "None";
+    AccessKind[AccessKind["Read"] = 1] = "Read";
+    AccessKind[AccessKind["Write"] = 2] = "Write";
+    AccessKind[AccessKind["Delete"] = 4] = "Delete";
+    AccessKind[AccessKind["ReadWrite"] = 3] = "ReadWrite";
+    AccessKind[AccessKind["Modification"] = 6] = "Modification";
+})(AccessKind = exports.AccessKind || (exports.AccessKind = {}));
+function getAccessKind(node) {
+    const parent = node.parent;
+    switch (parent.kind) {
+        case ts.SyntaxKind.DeleteExpression:
+            return 4;
+        case ts.SyntaxKind.PostfixUnaryExpression:
+            return 3;
+        case ts.SyntaxKind.PrefixUnaryExpression:
+            return parent.operator === ts.SyntaxKind.PlusPlusToken ||
+                parent.operator === ts.SyntaxKind.MinusMinusToken
+                ? 3
+                : 1;
+        case ts.SyntaxKind.BinaryExpression:
+            return parent.right === node
+                ? 1
+                : !isAssignmentKind(parent.operatorToken.kind)
+                    ? 1
+                    : parent.operatorToken.kind === ts.SyntaxKind.EqualsToken
+                        ? 2
+                        : 3;
+        case ts.SyntaxKind.ShorthandPropertyAssignment:
+            return parent.objectAssignmentInitializer === node
+                ? 1
+                : isInDestructuringAssignment(parent)
+                    ? 2
+                    : 1;
+        case ts.SyntaxKind.PropertyAssignment:
+            return parent.name === node
+                ? 0
+                : isInDestructuringAssignment(parent)
+                    ? 2
+                    : 1;
+        case ts.SyntaxKind.ArrayLiteralExpression:
+        case ts.SyntaxKind.SpreadElement:
+        case ts.SyntaxKind.SpreadAssignment:
+            return isInDestructuringAssignment(parent)
+                ? 2
+                : 1;
+        case ts.SyntaxKind.ParenthesizedExpression:
+        case ts.SyntaxKind.NonNullExpression:
+        case ts.SyntaxKind.TypeAssertionExpression:
+        case ts.SyntaxKind.AsExpression:
+            return getAccessKind(parent);
+        case ts.SyntaxKind.ForOfStatement:
+        case ts.SyntaxKind.ForInStatement:
+            return parent.initializer === node
+                ? 2
+                : 1;
+        case ts.SyntaxKind.ExpressionWithTypeArguments:
+            return parent.parent.token === ts.SyntaxKind.ExtendsKeyword &&
+                parent.parent.parent.kind !== ts.SyntaxKind.InterfaceDeclaration
+                ? 1
+                : 0;
+        case ts.SyntaxKind.ComputedPropertyName:
+        case ts.SyntaxKind.ExpressionStatement:
+        case ts.SyntaxKind.TypeOfExpression:
+        case ts.SyntaxKind.ElementAccessExpression:
+        case ts.SyntaxKind.ForStatement:
+        case ts.SyntaxKind.IfStatement:
+        case ts.SyntaxKind.DoStatement:
+        case ts.SyntaxKind.WhileStatement:
+        case ts.SyntaxKind.SwitchStatement:
+        case ts.SyntaxKind.WithStatement:
+        case ts.SyntaxKind.ThrowStatement:
+        case ts.SyntaxKind.CallExpression:
+        case ts.SyntaxKind.NewExpression:
+        case ts.SyntaxKind.TaggedTemplateExpression:
+        case ts.SyntaxKind.JsxExpression:
+        case ts.SyntaxKind.Decorator:
+        case ts.SyntaxKind.TemplateSpan:
+        case ts.SyntaxKind.JsxOpeningElement:
+        case ts.SyntaxKind.JsxSelfClosingElement:
+        case ts.SyntaxKind.JsxSpreadAttribute:
+        case ts.SyntaxKind.VoidExpression:
+        case ts.SyntaxKind.ReturnStatement:
+        case ts.SyntaxKind.AwaitExpression:
+        case ts.SyntaxKind.YieldExpression:
+        case ts.SyntaxKind.ConditionalExpression:
+        case ts.SyntaxKind.CaseClause:
+        case ts.SyntaxKind.JsxElement:
+            return 1;
+        case ts.SyntaxKind.ArrowFunction:
+            return parent.body === node
+                ? 1
+                : 2;
+        case ts.SyntaxKind.PropertyDeclaration:
+        case ts.SyntaxKind.VariableDeclaration:
+        case ts.SyntaxKind.Parameter:
+        case ts.SyntaxKind.EnumMember:
+        case ts.SyntaxKind.BindingElement:
+        case ts.SyntaxKind.JsxAttribute:
+            return parent.initializer === node
+                ? 1
+                : 0;
+        case ts.SyntaxKind.PropertyAccessExpression:
+            return parent.expression === node
+                ? 1
+                : 0;
+        case ts.SyntaxKind.ExportAssignment:
+            return parent.isExportEquals
+                ? 1
+                : 0;
+    }
+    return 0;
+}
+exports.getAccessKind = getAccessKind;
+function isReassignmentTarget(node) {
+    return (getAccessKind(node) & 2) !== 0;
+}
+exports.isReassignmentTarget = isReassignmentTarget;
+function canHaveJsDoc(node) {
+    const kind = node.kind;
+    switch (kind) {
+        case ts.SyntaxKind.Parameter:
+        case ts.SyntaxKind.CallSignature:
+        case ts.SyntaxKind.ConstructSignature:
+        case ts.SyntaxKind.MethodSignature:
+        case ts.SyntaxKind.PropertySignature:
+        case ts.SyntaxKind.ArrowFunction:
+        case ts.SyntaxKind.ParenthesizedExpression:
+        case ts.SyntaxKind.SpreadAssignment:
+        case ts.SyntaxKind.ShorthandPropertyAssignment:
+        case ts.SyntaxKind.PropertyAssignment:
+        case ts.SyntaxKind.FunctionExpression:
+        case ts.SyntaxKind.FunctionDeclaration:
+        case ts.SyntaxKind.LabeledStatement:
+        case ts.SyntaxKind.ExpressionStatement:
+        case ts.SyntaxKind.VariableStatement:
+        case ts.SyntaxKind.Constructor:
+        case ts.SyntaxKind.MethodDeclaration:
+        case ts.SyntaxKind.PropertyDeclaration:
+        case ts.SyntaxKind.GetAccessor:
+        case ts.SyntaxKind.SetAccessor:
+        case ts.SyntaxKind.ClassDeclaration:
+        case ts.SyntaxKind.ClassExpression:
+        case ts.SyntaxKind.InterfaceDeclaration:
+        case ts.SyntaxKind.TypeAliasDeclaration:
+        case ts.SyntaxKind.EnumMember:
+        case ts.SyntaxKind.EnumDeclaration:
+        case ts.SyntaxKind.ModuleDeclaration:
+        case ts.SyntaxKind.ImportEqualsDeclaration:
+        case ts.SyntaxKind.IndexSignature:
+        case ts.SyntaxKind.FunctionType:
+        case ts.SyntaxKind.ConstructorType:
+        case ts.SyntaxKind.JSDocFunctionType:
+        case ts.SyntaxKind.EndOfFileToken:
+        case ts.SyntaxKind.ExportDeclaration:
+            return true;
+        default:
+            return false;
+    }
+}
+exports.canHaveJsDoc = canHaveJsDoc;
+function getJsDoc(node, sourceFile) {
+    if (node.kind === ts.SyntaxKind.EndOfFileToken)
+        return parseJsDocWorker(node, sourceFile || node.parent);
+    const result = [];
+    for (const child of node.getChildren(sourceFile)) {
+        if (!node_1.isJsDoc(child))
+            break;
+        result.push(child);
+    }
+    return result;
+}
+exports.getJsDoc = getJsDoc;
+function parseJsDocOfNode(node, considerTrailingComments, sourceFile = node.getSourceFile()) {
+    if (canHaveJsDoc(node) && node.kind !== ts.SyntaxKind.EndOfFileToken) {
+        const result = getJsDoc(node, sourceFile);
+        if (result.length !== 0 || !considerTrailingComments)
+            return result;
+    }
+    return parseJsDocWorker(node, sourceFile, considerTrailingComments);
+}
+exports.parseJsDocOfNode = parseJsDocOfNode;
+function parseJsDocWorker(node, sourceFile, considerTrailingComments) {
+    const nodeStart = node.getStart(sourceFile);
+    const start = ts[considerTrailingComments && isSameLine(sourceFile, node.pos, nodeStart)
+        ? 'forEachTrailingCommentRange'
+        : 'forEachLeadingCommentRange'](sourceFile.text, node.pos, (pos, _end, kind) => kind === ts.SyntaxKind.MultiLineCommentTrivia && sourceFile.text[pos + 2] === '*' ? { pos } : undefined);
+    if (start === undefined)
+        return [];
+    const startPos = start.pos;
+    const text = sourceFile.text.slice(startPos, nodeStart);
+    const newSourceFile = ts.createSourceFile('jsdoc.ts', `${text}var a;`, sourceFile.languageVersion);
+    const result = getJsDoc(newSourceFile.statements[0], newSourceFile);
+    for (const doc of result)
+        updateNode(doc, node);
+    return result;
+    function updateNode(n, parent) {
+        n.pos += startPos;
+        n.end += startPos;
+        n.parent = parent;
+        return ts.forEachChild(n, (child) => updateNode(child, n), (children) => {
+            children.pos += startPos;
+            children.end += startPos;
+            for (const child of children)
+                updateNode(child, n);
+        });
+    }
+}
+var ImportKind;
+(function (ImportKind) {
+    ImportKind[ImportKind["ImportDeclaration"] = 1] = "ImportDeclaration";
+    ImportKind[ImportKind["ImportEquals"] = 2] = "ImportEquals";
+    ImportKind[ImportKind["ExportFrom"] = 4] = "ExportFrom";
+    ImportKind[ImportKind["DynamicImport"] = 8] = "DynamicImport";
+    ImportKind[ImportKind["Require"] = 16] = "Require";
+    ImportKind[ImportKind["ImportType"] = 32] = "ImportType";
+    ImportKind[ImportKind["All"] = 63] = "All";
+    ImportKind[ImportKind["AllImports"] = 59] = "AllImports";
+    ImportKind[ImportKind["AllStaticImports"] = 3] = "AllStaticImports";
+    ImportKind[ImportKind["AllImportExpressions"] = 24] = "AllImportExpressions";
+    ImportKind[ImportKind["AllRequireLike"] = 18] = "AllRequireLike";
+    ImportKind[ImportKind["AllNestedImports"] = 56] = "AllNestedImports";
+    ImportKind[ImportKind["AllTopLevelImports"] = 7] = "AllTopLevelImports";
+})(ImportKind = exports.ImportKind || (exports.ImportKind = {}));
+function findImports(sourceFile, kinds) {
+    const result = [];
+    for (const node of findImportLikeNodes(sourceFile, kinds)) {
+        switch (node.kind) {
+            case ts.SyntaxKind.ImportDeclaration:
+                addIfTextualLiteral(node.moduleSpecifier);
+                break;
+            case ts.SyntaxKind.ImportEqualsDeclaration:
+                addIfTextualLiteral(node.moduleReference.expression);
+                break;
+            case ts.SyntaxKind.ExportDeclaration:
+                addIfTextualLiteral(node.moduleSpecifier);
+                break;
+            case ts.SyntaxKind.CallExpression:
+                addIfTextualLiteral(node.arguments[0]);
+                break;
+            case ts.SyntaxKind.ImportType:
+                if (node_1.isLiteralTypeNode(node.argument))
+                    addIfTextualLiteral(node.argument.literal);
+                break;
+            default:
+                throw new Error('unexpected node');
+        }
+    }
+    return result;
+    function addIfTextualLiteral(node) {
+        if (node_1.isTextualLiteral(node))
+            result.push(node);
+    }
+}
+exports.findImports = findImports;
+function findImportLikeNodes(sourceFile, kinds) {
+    return new ImportFinder(sourceFile, kinds).find();
+}
+exports.findImportLikeNodes = findImportLikeNodes;
+class ImportFinder {
+    constructor(_sourceFile, _options) {
+        this._sourceFile = _sourceFile;
+        this._options = _options;
+        this._result = [];
+    }
+    find() {
+        if (this._sourceFile.isDeclarationFile)
+            this._options &= ~24;
+        if (this._options & 7)
+            this._findImports(this._sourceFile.statements);
+        if (this._options & 56)
+            this._findNestedImports();
+        return this._result;
+    }
+    _findImports(statements) {
+        for (const statement of statements) {
+            if (node_1.isImportDeclaration(statement)) {
+                if (this._options & 1)
+                    this._result.push(statement);
+            }
+            else if (node_1.isImportEqualsDeclaration(statement)) {
+                if (this._options & 2 &&
+                    statement.moduleReference.kind === ts.SyntaxKind.ExternalModuleReference)
+                    this._result.push(statement);
+            }
+            else if (node_1.isExportDeclaration(statement)) {
+                if (statement.moduleSpecifier !== undefined && this._options & 4)
+                    this._result.push(statement);
+            }
+            else if (node_1.isModuleDeclaration(statement)) {
+                this._findImportsInModule(statement);
+            }
+        }
+    }
+    _findImportsInModule(declaration) {
+        if (declaration.body === undefined)
+            return;
+        if (declaration.body.kind === ts.SyntaxKind.ModuleDeclaration)
+            return this._findImportsInModule(declaration.body);
+        this._findImports(declaration.body.statements);
+    }
+    _findNestedImports() {
+        let re;
+        if ((this._options & 56) === 16) {
+            re = /\brequire\s*[</(]/g;
+        }
+        else if (this._options & 16) {
+            re = /\b(?:import|require)\s*[</(]/g;
+        }
+        else {
+            re = /\bimport\s*[</(]/g;
+        }
+        const isJavaScriptFile = (this._sourceFile.flags & ts.NodeFlags.JavaScriptFile) !== 0;
+        for (let match = re.exec(this._sourceFile.text); match !== null; match = re.exec(this._sourceFile.text)) {
+            const token = getTokenAtPositionWorker(this._sourceFile, match.index, this._sourceFile, match[0][0] === 'i' && isJavaScriptFile);
+            if (token.kind === ts.SyntaxKind.ImportKeyword) {
+                if (token.end - 'import'.length !== match.index)
+                    continue;
+                switch (token.parent.kind) {
+                    case ts.SyntaxKind.ImportType:
+                        this._result.push(token.parent);
+                        break;
+                    case ts.SyntaxKind.CallExpression:
+                        if (token.parent.arguments.length === 1)
+                            this._result.push(token.parent);
+                }
+            }
+            else if (token.kind === ts.SyntaxKind.Identifier &&
+                token.end - 'require'.length === match.index &&
+                token.parent.kind === ts.SyntaxKind.CallExpression &&
+                token.parent.expression === token &&
+                token.parent.arguments.length === 1) {
+                this._result.push(token.parent);
+            }
+        }
+    }
+}
+function isStatementInAmbientContext(node) {
+    while (node.flags & ts.NodeFlags.NestedNamespace)
+        node = node.parent;
+    return hasModifier(node.modifiers, ts.SyntaxKind.DeclareKeyword) || isAmbientModuleBlock(node.parent);
+}
+exports.isStatementInAmbientContext = isStatementInAmbientContext;
+function isAmbientModuleBlock(node) {
+    while (node.kind === ts.SyntaxKind.ModuleBlock) {
+        do
+            node = node.parent;
+        while (node.flags & ts.NodeFlags.NestedNamespace);
+        if (hasModifier(node.modifiers, ts.SyntaxKind.DeclareKeyword))
+            return true;
+        node = node.parent;
+    }
+    return false;
+}
+exports.isAmbientModuleBlock = isAmbientModuleBlock;
+function getIIFE(func) {
+    let node = func.parent;
+    while (node.kind === ts.SyntaxKind.ParenthesizedExpression)
+        node = node.parent;
+    return node_1.isCallExpression(node) && func.end <= node.expression.end ? node : undefined;
+}
+exports.getIIFE = getIIFE;
+function isStrictCompilerOptionEnabled(options, option) {
+    return (options.strict ? options[option] !== false : options[option] === true) &&
+        (option !== 'strictPropertyInitialization' || isStrictCompilerOptionEnabled(options, 'strictNullChecks'));
+}
+exports.isStrictCompilerOptionEnabled = isStrictCompilerOptionEnabled;
+function isCompilerOptionEnabled(options, option) {
+    switch (option) {
+        case 'stripInternal':
+            return options.stripInternal === true && isCompilerOptionEnabled(options, 'declaration');
+        case 'declaration':
+            return options.declaration || isCompilerOptionEnabled(options, 'composite');
+        case 'incremental':
+            return options.incremental === undefined ? isCompilerOptionEnabled(options, 'composite') : options.incremental;
+        case 'skipDefaultLibCheck':
+            return options.skipDefaultLibCheck || isCompilerOptionEnabled(options, 'skipLibCheck');
+        case 'suppressImplicitAnyIndexErrors':
+            return options.suppressImplicitAnyIndexErrors === true && isCompilerOptionEnabled(options, 'noImplicitAny');
+        case 'allowSyntheticDefaultImports':
+            return options.allowSyntheticDefaultImports !== undefined
+                ? options.allowSyntheticDefaultImports
+                : isCompilerOptionEnabled(options, 'esModuleInterop') || options.module === ts.ModuleKind.System;
+        case 'noImplicitAny':
+        case 'noImplicitThis':
+        case 'strictNullChecks':
+        case 'strictFunctionTypes':
+        case 'strictPropertyInitialization':
+        case 'alwaysStrict':
+        case 'strictBindCallApply':
+            return isStrictCompilerOptionEnabled(options, option);
+    }
+    return options[option] === true;
+}
+exports.isCompilerOptionEnabled = isCompilerOptionEnabled;
+function isAmbientModule(node) {
+    return node.name.kind === ts.SyntaxKind.StringLiteral || (node.flags & ts.NodeFlags.GlobalAugmentation) !== 0;
+}
+exports.isAmbientModule = isAmbientModule;
+function getCheckJsDirective(source) {
+    let directive;
+    ts.forEachLeadingCommentRange(source, (ts.getShebang(source) || '').length, (pos, end, kind) => {
+        if (kind === ts.SyntaxKind.SingleLineCommentTrivia) {
+            const text = source.slice(pos, end);
+            const match = /^\/{2,3}\s*@ts-(no)?check(?:\s|$)/i.exec(text);
+            if (match !== null)
+                directive = { pos, end, enabled: match[1] === undefined };
+        }
+    });
+    return directive;
+}
+exports.getCheckJsDirective = getCheckJsDirective;
+function isConstAssertion(node) {
+    return node_1.isTypeReferenceNode(node.type) &&
+        node.type.typeName.kind === ts.SyntaxKind.Identifier &&
+        node.type.typeName.escapedText === 'const';
+}
+exports.isConstAssertion = isConstAssertion;
+function isInConstContext(node) {
+    let current = node;
+    while (true) {
+        const parent = current.parent;
+        outer: switch (parent.kind) {
+            case ts.SyntaxKind.TypeAssertionExpression:
+            case ts.SyntaxKind.AsExpression:
+                return isConstAssertion(parent);
+            case ts.SyntaxKind.PrefixUnaryExpression:
+                if (current.kind !== ts.SyntaxKind.NumericLiteral)
+                    return false;
+                switch (parent.operator) {
+                    case ts.SyntaxKind.PlusToken:
+                    case ts.SyntaxKind.MinusToken:
+                        current = parent;
+                        break outer;
+                    default:
+                        return false;
+                }
+            case ts.SyntaxKind.PropertyAssignment:
+                if (parent.initializer !== current)
+                    return false;
+                current = parent.parent;
+                break;
+            case ts.SyntaxKind.ShorthandPropertyAssignment:
+                current = parent.parent;
+                break;
+            case ts.SyntaxKind.ParenthesizedExpression:
+            case ts.SyntaxKind.ArrayLiteralExpression:
+            case ts.SyntaxKind.ObjectLiteralExpression:
+                current = parent;
+                break;
+            default:
+                return false;
+        }
+    }
+}
+exports.isInConstContext = isInConstContext;
+function isReadonlyAssignmentDeclaration(node, checker) {
+    if (!isBindableObjectDefinePropertyCall(node))
+        return false;
+    const descriptorType = checker.getTypeAtLocation(node.arguments[2]);
+    if (descriptorType.getProperty('value') === undefined)
+        return descriptorType.getProperty('set') === undefined;
+    const writableProp = descriptorType.getProperty('writable');
+    if (writableProp === undefined)
+        return false;
+    const writableType = writableProp.valueDeclaration !== undefined && node_1.isPropertyAssignment(writableProp.valueDeclaration)
+        ? checker.getTypeAtLocation(writableProp.valueDeclaration.initializer)
+        : checker.getTypeOfSymbolAtLocation(writableProp, node.arguments[2]);
+    return type_1.isBooleanLiteralType(writableType, false);
+}
+exports.isReadonlyAssignmentDeclaration = isReadonlyAssignmentDeclaration;
+function isBindableObjectDefinePropertyCall(node) {
+    return node.arguments.length === 3 &&
+        node_1.isEntityNameExpression(node.arguments[0]) &&
+        node_1.isNumericOrStringLikeLiteral(node.arguments[1]) &&
+        node_1.isPropertyAccessExpression(node.expression) &&
+        node.expression.name.escapedText === 'defineProperty' &&
+        node_1.isIdentifier(node.expression.expression) &&
+        node.expression.expression.escapedText === 'Object';
+}
+exports.isBindableObjectDefinePropertyCall = isBindableObjectDefinePropertyCall;
+function isWellKnownSymbolLiterally(node) {
+    return ts.isPropertyAccessExpression(node) &&
+        ts.isIdentifier(node.expression) &&
+        node.expression.escapedText === 'Symbol';
+}
+exports.isWellKnownSymbolLiterally = isWellKnownSymbolLiterally;
+function getPropertyNameOfWellKnownSymbol(node) {
+    return {
+        displayName: `[Symbol.${node.name.text}]`,
+        symbolName: ('__@' + node.name.text),
+    };
+}
+exports.getPropertyNameOfWellKnownSymbol = getPropertyNameOfWellKnownSymbol;
+function getLateBoundPropertyNames(node, checker) {
+    const result = {
+        known: true,
+        names: [],
+    };
+    node = unwrapParentheses(node);
+    if (isWellKnownSymbolLiterally(node)) {
+        result.names.push(getPropertyNameOfWellKnownSymbol(node));
+    }
+    else {
+        const type = checker.getTypeAtLocation(node);
+        for (const key of type_1.unionTypeParts(checker.getBaseConstraintOfType(type) || type)) {
+            const propertyName = type_1.getPropertyNameFromType(key);
+            if (propertyName) {
+                result.names.push(propertyName);
+            }
+            else {
+                result.known = false;
+            }
+        }
+    }
+    return result;
+}
+exports.getLateBoundPropertyNames = getLateBoundPropertyNames;
+function getLateBoundPropertyNamesOfPropertyName(node, checker) {
+    const staticName = getPropertyName(node);
+    return staticName !== undefined
+        ? { known: true, names: [{ displayName: staticName, symbolName: ts.escapeLeadingUnderscores(staticName) }] }
+        : getLateBoundPropertyNames(node.expression, checker);
+}
+exports.getLateBoundPropertyNamesOfPropertyName = getLateBoundPropertyNamesOfPropertyName;
+function getSingleLateBoundPropertyNameOfPropertyName(node, checker) {
+    const staticName = getPropertyName(node);
+    if (staticName !== undefined)
+        return { displayName: staticName, symbolName: ts.escapeLeadingUnderscores(staticName) };
+    const { expression } = node;
+    return isWellKnownSymbolLiterally(expression)
+        ? getPropertyNameOfWellKnownSymbol(expression)
+        : type_1.getPropertyNameFromType(checker.getTypeAtLocation(expression));
+}
+exports.getSingleLateBoundPropertyNameOfPropertyName = getSingleLateBoundPropertyNameOfPropertyName;
+function unwrapParentheses(node) {
+    while (node.kind === ts.SyntaxKind.ParenthesizedExpression)
+        node = node.expression;
+    return node;
+}
+exports.unwrapParentheses = unwrapParentheses;
diff --git a/server/node_modules/vue-eslint-parser/LICENSE b/server/node_modules/vue-eslint-parser/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..19def00a83d177d11ba4872712ebd6faa51777ed
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 Toru Nagashima
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/server/node_modules/vue-eslint-parser/README.md b/server/node_modules/vue-eslint-parser/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..c2e06a24b8b693974dcf0990e0194e8f78082654
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/README.md
@@ -0,0 +1,216 @@
+# vue-eslint-parser
+
+[![npm version](https://img.shields.io/npm/v/vue-eslint-parser.svg)](https://www.npmjs.com/package/vue-eslint-parser)
+[![Downloads/month](https://img.shields.io/npm/dm/vue-eslint-parser.svg)](http://www.npmtrends.com/vue-eslint-parser)
+[![Build Status](https://github.com/vuejs/vue-eslint-parser/workflows/CI/badge.svg)](https://github.com/vuejs/vue-eslint-parser/actions)
+[![Coverage Status](https://codecov.io/gh/vuejs/vue-eslint-parser/branch/master/graph/badge.svg)](https://codecov.io/gh/vuejs/vue-eslint-parser)
+[![Dependency Status](https://david-dm.org/vuejs/vue-eslint-parser.svg)](https://david-dm.org/vuejs/vue-eslint-parser)
+
+The ESLint custom parser for `.vue` files.
+
+## ⤴️ Motivation
+
+This parser allows us to lint the `<template>` of `.vue` files. We can make mistakes easily on `<template>` if we use complex directives and expressions in the template. This parser and the rules of [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue) would catch some of the mistakes.
+
+## 💿 Installation
+
+```bash
+$ npm install --save-dev eslint vue-eslint-parser
+```
+
+- Requires Node.js 6.5.0 or later.
+- Requires ESLint 5.0.0 or later.
+- Requires `babel-eslint` 8.1.1 or later if you want it. (optional)
+- Requires `@typescript-eslint/parser` 1.0.0 or later if you want it. (optional)
+
+## 📖 Usage
+
+1. Write `parser` option into your `.eslintrc.*` file.
+2. Use glob patterns or `--ext .vue` CLI option.
+
+```json
+{
+    "extends": "eslint:recommended",
+    "parser": "vue-eslint-parser"
+}
+```
+
+```console
+$ eslint "src/**/*.{js,vue}"
+# or
+$ eslint src --ext .vue
+```
+
+## 🔧 Options
+
+`parserOptions` has the same properties as what [espree](https://github.com/eslint/espree#usage), the default parser of ESLint, is supporting.
+For example:
+
+```json
+{
+    "parser": "vue-eslint-parser",
+    "parserOptions": {
+        "sourceType": "module",
+        "ecmaVersion": 2018,
+        "ecmaFeatures": {
+            "globalReturn": false,
+            "impliedStrict": false,
+            "jsx": false
+        }
+    }
+}
+```
+
+### parserOptions.parser
+
+You can use `parserOptions.parser` property to specify a custom parser to parse `<script>` tags.
+Other properties than parser would be given to the specified parser.
+For example:
+
+```json
+{
+    "parser": "vue-eslint-parser",
+    "parserOptions": {
+        "parser": "babel-eslint",
+        "sourceType": "module",
+        "allowImportExportEverywhere": false
+    }
+}
+```
+
+```json
+{
+    "parser": "vue-eslint-parser",
+    "parserOptions": {
+        "parser": "@typescript-eslint/parser"
+    }
+}
+```
+
+If the `parserOptions.parser` is `false`, the `vue-eslint-parser` skips parsing `<script>` tags completely.
+This is useful for people who use the language ESLint community doesn't provide custom parser implementation.
+
+### parserOptions.vueFeatures
+
+You can use `parserOptions.vueFeatures` property to specify how to parse related to Vue features.
+For example:
+
+```json
+{
+    "parser": "vue-eslint-parser",
+    "parserOptions": {
+        "vueFeatures": {
+            "filter": true,
+            "interpolationAsNonHTML": false,
+        }
+    }
+}
+```
+
+### parserOptions.vueFeatures.filter
+
+You can use `parserOptions.vueFeatures.filter` property to specify whether to parse the Vue2 filter. If you specify `false`, the parser does not parse `|` as a filter.
+For example:
+
+```json
+{
+    "parser": "vue-eslint-parser",
+    "parserOptions": {
+        "vueFeatures": {
+            "filter": false
+        }
+    }
+}
+```
+
+If you specify `false`, it can be parsed in the same way as Vue 3.
+The following template parses as a bitwise operation.
+
+```vue
+<template>
+  <div>{{ a | b }}</div>
+</template>
+```
+
+However, the following template that are valid in Vue 2 cannot be parsed.
+
+```vue
+<template>
+  <div>{{ a | valid:filter }}</div>
+</template>
+```
+
+### parserOptions.vueFeatures.interpolationAsNonHTML
+
+You can use `parserOptions.vueFeatures.interpolationAsNonHTML` property to specify whether to parse the interpolation as HTML. If you specify `true`, the parser handles the interpolation as non-HTML (However, you can use HTML escaping in the interpolation).
+For example:
+
+```json
+{
+    "parser": "vue-eslint-parser",
+    "parserOptions": {
+        "vueFeatures": {
+            "interpolationAsNonHTML": true
+        }
+    }
+}
+```
+
+If you specify `true`, it can be parsed in the same way as Vue 3.
+The following template can be parsed well.
+
+```vue
+<template>
+  <div>{{a<b}}</div>
+</template>
+```
+
+But, it cannot be parsed with Vue 2.
+
+## 🎇 Usage for custom rules / plugins
+
+- This parser provides `parserServices` to traverse `<template>`.
+    - `defineTemplateBodyVisitor(templateVisitor, scriptVisitor)` ... returns ESLint visitor to traverse `<template>`.
+    - `getTemplateBodyTokenStore()` ... returns ESLint `TokenStore` to get the tokens of `<template>`.
+    - `getDocumentFragment()` ... returns the root `VDocumentFragment`.
+    - `defineCustomBlocksVisitor(context, customParser, rule, scriptVisitor)` ... returns ESLint visitor that parses and traverses the contents of the custom block.
+- [ast.md](./docs/ast.md) is `<template>` AST specification.
+- [mustache-interpolation-spacing.js](https://github.com/vuejs/eslint-plugin-vue/blob/b434ff99d37f35570fa351681e43ba2cf5746db3/lib/rules/mustache-interpolation-spacing.js) is an example.
+
+## ⚠️ Known Limitations
+
+Some rules make warnings due to the outside of `<script>` tags.
+Please disable those rules for `.vue` files as necessary.
+
+- [eol-last](http://eslint.org/docs/rules/eol-last)
+- [linebreak-style](http://eslint.org/docs/rules/linebreak-style)
+- [max-len](http://eslint.org/docs/rules/max-len)
+- [max-lines](http://eslint.org/docs/rules/max-lines)
+- [no-trailing-spaces](http://eslint.org/docs/rules/no-trailing-spaces)
+- [unicode-bom](http://eslint.org/docs/rules/unicode-bom)
+- Other rules which are using the source code text instead of AST might be confused as well.
+
+## 📰 Changelog
+
+- [GitHub Releases](https://github.com/vuejs/vue-eslint-parser/releases)
+
+## 🍻 Contributing
+
+Welcome contributing!
+
+Please use GitHub's Issues/PRs.
+
+If you want to write code, please execute `npm install && npm run setup` after you cloned this repository.
+The `npm install` command installs dependencies.
+The `npm run setup` command initializes ESLint as git submodules for tests.
+
+### Development Tools
+
+- `npm test` runs tests and measures coverage.
+- `npm run build` compiles TypeScript source code to `index.js`, `index.js.map`, and `index.d.ts`.
+- `npm run coverage` shows the coverage result of `npm test` command with the default browser.
+- `npm run clean` removes the temporary files which are created by `npm test` and `npm run build`.
+- `npm run lint` runs ESLint.
+- `npm run setup` setups submodules to develop.
+- `npm run update-fixtures` updates files in `test/fixtures/ast` directory based on `test/fixtures/ast/*/source.vue` files.
+- `npm run watch` runs `build`, `update-fixtures`, and tests with `--watch` option.
diff --git a/server/node_modules/vue-eslint-parser/index.d.ts b/server/node_modules/vue-eslint-parser/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0864e7fe8d01143a65804c6efa4aaa0b973ff5c1
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/index.d.ts
@@ -0,0 +1,578 @@
+// Generated by dts-bundle v0.7.3
+// Dependencies for this module:
+//   ../eslint-scope
+//   ../eslint-visitor-keys
+
+declare module 'vue-eslint-parser' {
+    import * as AST from "vue-eslint-parser/ast";
+    export function parseForESLint(code: string, options: any): AST.ESLintExtendedProgram;
+    export function parse(code: string, options: any): AST.ESLintProgram;
+    export { AST };
+}
+
+declare module 'vue-eslint-parser/ast' {
+    export * from "vue-eslint-parser/ast/errors";
+    export * from "vue-eslint-parser/ast/locations";
+    export * from "vue-eslint-parser/ast/nodes";
+    export * from "vue-eslint-parser/ast/tokens";
+    export * from "vue-eslint-parser/ast/traverse";
+}
+
+declare module 'vue-eslint-parser/ast/errors' {
+    export class ParseError extends SyntaxError {
+        code?: ErrorCode;
+        index: number;
+        lineNumber: number;
+        column: number;
+        static fromCode(code: ErrorCode, offset: number, line: number, column: number): ParseError;
+        static normalize(x: any): ParseError | null;
+        constructor(message: string, code: ErrorCode | undefined, offset: number, line: number, column: number);
+        static isParseError(x: any): x is ParseError;
+    }
+    export type ErrorCode = "abrupt-closing-of-empty-comment" | "absence-of-digits-in-numeric-character-reference" | "cdata-in-html-content" | "character-reference-outside-unicode-range" | "control-character-in-input-stream" | "control-character-reference" | "eof-before-tag-name" | "eof-in-cdata" | "eof-in-comment" | "eof-in-tag" | "incorrectly-closed-comment" | "incorrectly-opened-comment" | "invalid-first-character-of-tag-name" | "missing-attribute-value" | "missing-end-tag-name" | "missing-semicolon-after-character-reference" | "missing-whitespace-between-attributes" | "nested-comment" | "noncharacter-character-reference" | "noncharacter-in-input-stream" | "null-character-reference" | "surrogate-character-reference" | "surrogate-in-input-stream" | "unexpected-character-in-attribute-name" | "unexpected-character-in-unquoted-attribute-value" | "unexpected-equals-sign-before-attribute-name" | "unexpected-null-character" | "unexpected-question-mark-instead-of-tag-name" | "unexpected-solidus-in-tag" | "unknown-named-character-reference" | "end-tag-with-attributes" | "duplicate-attribute" | "end-tag-with-trailing-solidus" | "non-void-html-element-start-tag-with-trailing-solidus" | "x-invalid-end-tag" | "x-invalid-namespace" | "x-missing-interpolation-end";
+}
+
+declare module 'vue-eslint-parser/ast/locations' {
+    export interface Location {
+        line: number;
+        column: number;
+    }
+    export interface LocationRange {
+        start: Location;
+        end: Location;
+    }
+    export type Offset = number;
+    export type OffsetRange = [Offset, Offset];
+    export interface HasLocation {
+        range: OffsetRange;
+        loc: LocationRange;
+        start?: number;
+        end?: number;
+    }
+}
+
+declare module 'vue-eslint-parser/ast/nodes' {
+    import type { ScopeManager } from "eslint-scope";
+    import type { ParseError } from "vue-eslint-parser/ast/errors";
+    import type { HasLocation } from "vue-eslint-parser/ast/locations";
+    import type { Token } from "vue-eslint-parser/ast/tokens";
+    export interface HasParent {
+        parent?: Node | null;
+    }
+    export type Node = ESLintNode | VNode | VForExpression | VOnExpression | VSlotScopeExpression | VFilterSequenceExpression | VFilter;
+    export type ESLintNode = ESLintIdentifier | ESLintLiteral | ESLintProgram | ESLintSwitchCase | ESLintCatchClause | ESLintVariableDeclarator | ESLintStatement | ESLintExpression | ESLintProperty | ESLintAssignmentProperty | ESLintSuper | ESLintTemplateElement | ESLintSpreadElement | ESLintPattern | ESLintClassBody | ESLintMethodDefinition | ESLintModuleDeclaration | ESLintModuleSpecifier | ESLintLegacyRestProperty;
+    export interface ESLintExtendedProgram {
+        ast: ESLintProgram;
+        services?: {};
+        visitorKeys?: {
+            [type: string]: string[];
+        };
+        scopeManager?: ScopeManager;
+    }
+    export interface ESLintProgram extends HasLocation, HasParent {
+        type: "Program";
+        sourceType: "script" | "module";
+        body: (ESLintStatement | ESLintModuleDeclaration)[];
+        templateBody?: VElement & HasConcreteInfo;
+        tokens?: Token[];
+        comments?: Token[];
+        errors?: ParseError[];
+    }
+    export type ESLintStatement = ESLintExpressionStatement | ESLintBlockStatement | ESLintEmptyStatement | ESLintDebuggerStatement | ESLintWithStatement | ESLintReturnStatement | ESLintLabeledStatement | ESLintBreakStatement | ESLintContinueStatement | ESLintIfStatement | ESLintSwitchStatement | ESLintThrowStatement | ESLintTryStatement | ESLintWhileStatement | ESLintDoWhileStatement | ESLintForStatement | ESLintForInStatement | ESLintForOfStatement | ESLintDeclaration;
+    export interface ESLintEmptyStatement extends HasLocation, HasParent {
+        type: "EmptyStatement";
+    }
+    export interface ESLintBlockStatement extends HasLocation, HasParent {
+        type: "BlockStatement";
+        body: ESLintStatement[];
+    }
+    export interface ESLintExpressionStatement extends HasLocation, HasParent {
+        type: "ExpressionStatement";
+        expression: ESLintExpression;
+    }
+    export interface ESLintIfStatement extends HasLocation, HasParent {
+        type: "IfStatement";
+        test: ESLintExpression;
+        consequent: ESLintStatement;
+        alternate: ESLintStatement | null;
+    }
+    export interface ESLintSwitchStatement extends HasLocation, HasParent {
+        type: "SwitchStatement";
+        discriminant: ESLintExpression;
+        cases: ESLintSwitchCase[];
+    }
+    export interface ESLintSwitchCase extends HasLocation, HasParent {
+        type: "SwitchCase";
+        test: ESLintExpression | null;
+        consequent: ESLintStatement[];
+    }
+    export interface ESLintWhileStatement extends HasLocation, HasParent {
+        type: "WhileStatement";
+        test: ESLintExpression;
+        body: ESLintStatement;
+    }
+    export interface ESLintDoWhileStatement extends HasLocation, HasParent {
+        type: "DoWhileStatement";
+        body: ESLintStatement;
+        test: ESLintExpression;
+    }
+    export interface ESLintForStatement extends HasLocation, HasParent {
+        type: "ForStatement";
+        init: ESLintVariableDeclaration | ESLintExpression | null;
+        test: ESLintExpression | null;
+        update: ESLintExpression | null;
+        body: ESLintStatement;
+    }
+    export interface ESLintForInStatement extends HasLocation, HasParent {
+        type: "ForInStatement";
+        left: ESLintVariableDeclaration | ESLintPattern;
+        right: ESLintExpression;
+        body: ESLintStatement;
+    }
+    export interface ESLintForOfStatement extends HasLocation, HasParent {
+        type: "ForOfStatement";
+        left: ESLintVariableDeclaration | ESLintPattern;
+        right: ESLintExpression;
+        body: ESLintStatement;
+    }
+    export interface ESLintLabeledStatement extends HasLocation, HasParent {
+        type: "LabeledStatement";
+        label: ESLintIdentifier;
+        body: ESLintStatement;
+    }
+    export interface ESLintBreakStatement extends HasLocation, HasParent {
+        type: "BreakStatement";
+        label: ESLintIdentifier | null;
+    }
+    export interface ESLintContinueStatement extends HasLocation, HasParent {
+        type: "ContinueStatement";
+        label: ESLintIdentifier | null;
+    }
+    export interface ESLintReturnStatement extends HasLocation, HasParent {
+        type: "ReturnStatement";
+        argument: ESLintExpression | null;
+    }
+    export interface ESLintThrowStatement extends HasLocation, HasParent {
+        type: "ThrowStatement";
+        argument: ESLintExpression;
+    }
+    export interface ESLintTryStatement extends HasLocation, HasParent {
+        type: "TryStatement";
+        block: ESLintBlockStatement;
+        handler: ESLintCatchClause | null;
+        finalizer: ESLintBlockStatement | null;
+    }
+    export interface ESLintCatchClause extends HasLocation, HasParent {
+        type: "CatchClause";
+        param: ESLintPattern;
+        body: ESLintBlockStatement;
+    }
+    export interface ESLintWithStatement extends HasLocation, HasParent {
+        type: "WithStatement";
+        object: ESLintExpression;
+        body: ESLintStatement;
+    }
+    export interface ESLintDebuggerStatement extends HasLocation, HasParent {
+        type: "DebuggerStatement";
+    }
+    export type ESLintDeclaration = ESLintFunctionDeclaration | ESLintVariableDeclaration | ESLintClassDeclaration;
+    export interface ESLintFunctionDeclaration extends HasLocation, HasParent {
+        type: "FunctionDeclaration";
+        async: boolean;
+        generator: boolean;
+        id: ESLintIdentifier | null;
+        params: ESLintPattern[];
+        body: ESLintBlockStatement;
+    }
+    export interface ESLintVariableDeclaration extends HasLocation, HasParent {
+        type: "VariableDeclaration";
+        kind: "var" | "let" | "const";
+        declarations: ESLintVariableDeclarator[];
+    }
+    export interface ESLintVariableDeclarator extends HasLocation, HasParent {
+        type: "VariableDeclarator";
+        id: ESLintPattern;
+        init: ESLintExpression | null;
+    }
+    export interface ESLintClassDeclaration extends HasLocation, HasParent {
+        type: "ClassDeclaration";
+        id: ESLintIdentifier | null;
+        superClass: ESLintExpression | null;
+        body: ESLintClassBody;
+    }
+    export interface ESLintClassBody extends HasLocation, HasParent {
+        type: "ClassBody";
+        body: ESLintMethodDefinition[];
+    }
+    export interface ESLintMethodDefinition extends HasLocation, HasParent {
+        type: "MethodDefinition";
+        kind: "constructor" | "method" | "get" | "set";
+        computed: boolean;
+        static: boolean;
+        key: ESLintExpression;
+        value: ESLintFunctionExpression;
+    }
+    export type ESLintModuleDeclaration = ESLintImportDeclaration | ESLintExportNamedDeclaration | ESLintExportDefaultDeclaration | ESLintExportAllDeclaration;
+    export type ESLintModuleSpecifier = ESLintImportSpecifier | ESLintImportDefaultSpecifier | ESLintImportNamespaceSpecifier | ESLintExportSpecifier;
+    export interface ESLintImportDeclaration extends HasLocation, HasParent {
+        type: "ImportDeclaration";
+        specifiers: (ESLintImportSpecifier | ESLintImportDefaultSpecifier | ESLintImportNamespaceSpecifier)[];
+        source: ESLintLiteral;
+    }
+    export interface ESLintImportSpecifier extends HasLocation, HasParent {
+        type: "ImportSpecifier";
+        imported: ESLintIdentifier;
+        local: ESLintIdentifier;
+    }
+    export interface ESLintImportDefaultSpecifier extends HasLocation, HasParent {
+        type: "ImportDefaultSpecifier";
+        local: ESLintIdentifier;
+    }
+    export interface ESLintImportNamespaceSpecifier extends HasLocation, HasParent {
+        type: "ImportNamespaceSpecifier";
+        local: ESLintIdentifier;
+    }
+    export interface ESLintExportNamedDeclaration extends HasLocation, HasParent {
+        type: "ExportNamedDeclaration";
+        declaration?: ESLintDeclaration | null;
+        specifiers: ESLintExportSpecifier[];
+        source?: ESLintLiteral | null;
+    }
+    export interface ESLintExportSpecifier extends HasLocation, HasParent {
+        type: "ExportSpecifier";
+        exported: ESLintIdentifier;
+    }
+    export interface ESLintExportDefaultDeclaration extends HasLocation, HasParent {
+        type: "ExportDefaultDeclaration";
+        declaration: ESLintDeclaration | ESLintExpression;
+    }
+    export interface ESLintExportAllDeclaration extends HasLocation, HasParent {
+        type: "ExportAllDeclaration";
+        source: ESLintLiteral;
+    }
+    export type ESLintExpression = ESLintThisExpression | ESLintArrayExpression | ESLintObjectExpression | ESLintFunctionExpression | ESLintArrowFunctionExpression | ESLintYieldExpression | ESLintLiteral | ESLintUnaryExpression | ESLintUpdateExpression | ESLintBinaryExpression | ESLintAssignmentExpression | ESLintLogicalExpression | ESLintMemberExpression | ESLintConditionalExpression | ESLintCallExpression | ESLintNewExpression | ESLintSequenceExpression | ESLintTemplateLiteral | ESLintTaggedTemplateExpression | ESLintClassExpression | ESLintMetaProperty | ESLintIdentifier | ESLintAwaitExpression;
+    export interface ESLintIdentifier extends HasLocation, HasParent {
+        type: "Identifier";
+        name: string;
+    }
+    export interface ESLintLiteral extends HasLocation, HasParent {
+        type: "Literal";
+        value: string | boolean | null | number | RegExp;
+        regex?: {
+            pattern: string;
+            flags: string;
+        };
+    }
+    export interface ESLintThisExpression extends HasLocation, HasParent {
+        type: "ThisExpression";
+    }
+    export interface ESLintArrayExpression extends HasLocation, HasParent {
+        type: "ArrayExpression";
+        elements: (ESLintExpression | ESLintSpreadElement)[];
+    }
+    export interface ESLintObjectExpression extends HasLocation, HasParent {
+        type: "ObjectExpression";
+        properties: (ESLintProperty | ESLintSpreadElement | ESLintLegacySpreadProperty)[];
+    }
+    export interface ESLintProperty extends HasLocation, HasParent {
+        type: "Property";
+        kind: "init" | "get" | "set";
+        method: boolean;
+        shorthand: boolean;
+        computed: boolean;
+        key: ESLintExpression;
+        value: ESLintExpression | ESLintPattern;
+    }
+    export interface ESLintFunctionExpression extends HasLocation, HasParent {
+        type: "FunctionExpression";
+        async: boolean;
+        generator: boolean;
+        id: ESLintIdentifier | null;
+        params: ESLintPattern[];
+        body: ESLintBlockStatement;
+    }
+    export interface ESLintArrowFunctionExpression extends HasLocation, HasParent {
+        type: "ArrowFunctionExpression";
+        async: boolean;
+        generator: boolean;
+        id: ESLintIdentifier | null;
+        params: ESLintPattern[];
+        body: ESLintBlockStatement;
+    }
+    export interface ESLintSequenceExpression extends HasLocation, HasParent {
+        type: "SequenceExpression";
+        expressions: ESLintExpression[];
+    }
+    export interface ESLintUnaryExpression extends HasLocation, HasParent {
+        type: "UnaryExpression";
+        operator: "-" | "+" | "!" | "~" | "typeof" | "void" | "delete";
+        prefix: boolean;
+        argument: ESLintExpression;
+    }
+    export interface ESLintBinaryExpression extends HasLocation, HasParent {
+        type: "BinaryExpression";
+        operator: "==" | "!=" | "===" | "!==" | "<" | "<=" | ">" | ">=" | "<<" | ">>" | ">>>" | "+" | "-" | "*" | "/" | "%" | "**" | "|" | "^" | "&" | "in" | "instanceof";
+        left: ESLintExpression;
+        right: ESLintExpression;
+    }
+    export interface ESLintAssignmentExpression extends HasLocation, HasParent {
+        type: "AssignmentExpression";
+        operator: "=" | "+=" | "-=" | "*=" | "/=" | "%=" | "**=" | "<<=" | ">>=" | ">>>=" | "|=" | "^=" | "&=";
+        left: ESLintPattern;
+        right: ESLintExpression;
+    }
+    export interface ESLintUpdateExpression extends HasLocation, HasParent {
+        type: "UpdateExpression";
+        operator: "++" | "--";
+        argument: ESLintExpression;
+        prefix: boolean;
+    }
+    export interface ESLintLogicalExpression extends HasLocation, HasParent {
+        type: "LogicalExpression";
+        operator: "||" | "&&";
+        left: ESLintExpression;
+        right: ESLintExpression;
+    }
+    export interface ESLintConditionalExpression extends HasLocation, HasParent {
+        type: "ConditionalExpression";
+        test: ESLintExpression;
+        alternate: ESLintExpression;
+        consequent: ESLintExpression;
+    }
+    export interface ESLintCallExpression extends HasLocation, HasParent {
+        type: "CallExpression";
+        callee: ESLintExpression | ESLintSuper;
+        arguments: (ESLintExpression | ESLintSpreadElement)[];
+    }
+    export interface ESLintSuper extends HasLocation, HasParent {
+        type: "Super";
+    }
+    export interface ESLintNewExpression extends HasLocation, HasParent {
+        type: "NewExpression";
+        callee: ESLintExpression;
+        arguments: (ESLintExpression | ESLintSpreadElement)[];
+    }
+    export interface ESLintMemberExpression extends HasLocation, HasParent {
+        type: "MemberExpression";
+        computed: boolean;
+        object: ESLintExpression | ESLintSuper;
+        property: ESLintExpression;
+    }
+    export interface ESLintYieldExpression extends HasLocation, HasParent {
+        type: "YieldExpression";
+        delegate: boolean;
+        argument: ESLintExpression | null;
+    }
+    export interface ESLintAwaitExpression extends HasLocation, HasParent {
+        type: "AwaitExpression";
+        argument: ESLintExpression;
+    }
+    export interface ESLintTemplateLiteral extends HasLocation, HasParent {
+        type: "TemplateLiteral";
+        quasis: ESLintTemplateElement[];
+        expressions: ESLintExpression[];
+    }
+    export interface ESLintTaggedTemplateExpression extends HasLocation, HasParent {
+        type: "TaggedTemplateExpression";
+        tag: ESLintExpression;
+        quasi: ESLintTemplateLiteral;
+    }
+    export interface ESLintTemplateElement extends HasLocation, HasParent {
+        type: "TemplateElement";
+        tail: boolean;
+        value: {
+            cooked: string;
+            raw: string;
+        };
+    }
+    export interface ESLintClassExpression extends HasLocation, HasParent {
+        type: "ClassExpression";
+        id: ESLintIdentifier | null;
+        superClass: ESLintExpression | null;
+        body: ESLintClassBody;
+    }
+    export interface ESLintMetaProperty extends HasLocation, HasParent {
+        type: "MetaProperty";
+        meta: ESLintIdentifier;
+        property: ESLintIdentifier;
+    }
+    export type ESLintPattern = ESLintIdentifier | ESLintObjectPattern | ESLintArrayPattern | ESLintRestElement | ESLintAssignmentPattern | ESLintMemberExpression | ESLintLegacyRestProperty;
+    export interface ESLintObjectPattern extends HasLocation, HasParent {
+        type: "ObjectPattern";
+        properties: (ESLintAssignmentProperty | ESLintRestElement | ESLintLegacyRestProperty)[];
+    }
+    export interface ESLintAssignmentProperty extends ESLintProperty {
+        value: ESLintPattern;
+        kind: "init";
+        method: false;
+    }
+    export interface ESLintArrayPattern extends HasLocation, HasParent {
+        type: "ArrayPattern";
+        elements: ESLintPattern[];
+    }
+    export interface ESLintRestElement extends HasLocation, HasParent {
+        type: "RestElement";
+        argument: ESLintPattern;
+    }
+    export interface ESLintSpreadElement extends HasLocation, HasParent {
+        type: "SpreadElement";
+        argument: ESLintExpression;
+    }
+    export interface ESLintAssignmentPattern extends HasLocation, HasParent {
+        type: "AssignmentPattern";
+        left: ESLintPattern;
+        right: ESLintExpression;
+    }
+    export interface ESLintLegacyRestProperty extends HasLocation, HasParent {
+        type: "RestProperty" | "ExperimentalRestProperty";
+        argument: ESLintPattern;
+    }
+    export interface ESLintLegacySpreadProperty extends HasLocation, HasParent {
+        type: "SpreadProperty" | "ExperimentalSpreadProperty";
+        argument: ESLintExpression;
+    }
+    export const NS: Readonly<{
+        HTML: "http://www.w3.org/1999/xhtml";
+        MathML: "http://www.w3.org/1998/Math/MathML";
+        SVG: "http://www.w3.org/2000/svg";
+        XLink: "http://www.w3.org/1999/xlink";
+        XML: "http://www.w3.org/XML/1998/namespace";
+        XMLNS: "http://www.w3.org/2000/xmlns/";
+    }>;
+    export type Namespace = typeof NS.HTML | typeof NS.MathML | typeof NS.SVG | typeof NS.XLink | typeof NS.XML | typeof NS.XMLNS;
+    export interface Variable {
+        id: ESLintIdentifier;
+        kind: "v-for" | "scope";
+        references: Reference[];
+    }
+    export interface Reference {
+        id: ESLintIdentifier;
+        mode: "rw" | "r" | "w";
+        variable: Variable | null;
+    }
+    export interface VForExpression extends HasLocation, HasParent {
+        type: "VForExpression";
+        parent: VExpressionContainer;
+        left: ESLintPattern[];
+        right: ESLintExpression;
+    }
+    export interface VOnExpression extends HasLocation, HasParent {
+        type: "VOnExpression";
+        parent: VExpressionContainer;
+        body: ESLintStatement[];
+    }
+    export interface VSlotScopeExpression extends HasLocation, HasParent {
+        type: "VSlotScopeExpression";
+        parent: VExpressionContainer;
+        params: ESLintPattern[];
+    }
+    export interface VFilterSequenceExpression extends HasLocation, HasParent {
+        type: "VFilterSequenceExpression";
+        parent: VExpressionContainer;
+        expression: ESLintExpression;
+        filters: VFilter[];
+    }
+    export interface VFilter extends HasLocation, HasParent {
+        type: "VFilter";
+        parent: VFilterSequenceExpression;
+        callee: ESLintIdentifier;
+        arguments: (ESLintExpression | ESLintSpreadElement)[];
+    }
+    export type VNode = VAttribute | VDirective | VDirectiveKey | VDocumentFragment | VElement | VEndTag | VExpressionContainer | VIdentifier | VLiteral | VStartTag | VText;
+    export interface VText extends HasLocation, HasParent {
+        type: "VText";
+        parent: VDocumentFragment | VElement;
+        value: string;
+    }
+    export interface VExpressionContainer extends HasLocation, HasParent {
+        type: "VExpressionContainer";
+        parent: VDocumentFragment | VElement | VDirective | VDirectiveKey;
+        expression: ESLintExpression | VFilterSequenceExpression | VForExpression | VOnExpression | VSlotScopeExpression | null;
+        references: Reference[];
+    }
+    export interface VIdentifier extends HasLocation, HasParent {
+        type: "VIdentifier";
+        parent: VAttribute | VDirectiveKey;
+        name: string;
+        rawName: string;
+    }
+    export interface VDirectiveKey extends HasLocation, HasParent {
+        type: "VDirectiveKey";
+        parent: VDirective;
+        name: VIdentifier;
+        argument: VExpressionContainer | VIdentifier | null;
+        modifiers: VIdentifier[];
+    }
+    export interface VLiteral extends HasLocation, HasParent {
+        type: "VLiteral";
+        parent: VAttribute;
+        value: string;
+    }
+    export interface VAttribute extends HasLocation, HasParent {
+        type: "VAttribute";
+        parent: VStartTag;
+        directive: false;
+        key: VIdentifier;
+        value: VLiteral | null;
+    }
+    export interface VDirective extends HasLocation, HasParent {
+        type: "VAttribute";
+        parent: VStartTag;
+        directive: true;
+        key: VDirectiveKey;
+        value: VExpressionContainer | null;
+    }
+    export interface VStartTag extends HasLocation, HasParent {
+        type: "VStartTag";
+        parent: VElement;
+        selfClosing: boolean;
+        attributes: (VAttribute | VDirective)[];
+    }
+    export interface VEndTag extends HasLocation, HasParent {
+        type: "VEndTag";
+        parent: VElement;
+    }
+    export interface HasConcreteInfo {
+        tokens: Token[];
+        comments: Token[];
+        errors: ParseError[];
+    }
+    export interface VElement extends HasLocation, HasParent {
+        type: "VElement";
+        parent: VDocumentFragment | VElement;
+        namespace: Namespace;
+        name: string;
+        rawName: string;
+        startTag: VStartTag;
+        children: (VElement | VText | VExpressionContainer)[];
+        endTag: VEndTag | null;
+        variables: Variable[];
+    }
+    export interface VDocumentFragment extends HasLocation, HasParent, HasConcreteInfo {
+        type: "VDocumentFragment";
+        parent: null;
+        children: (VElement | VText | VExpressionContainer)[];
+    }
+}
+
+declare module 'vue-eslint-parser/ast/tokens' {
+    import type { HasLocation } from "vue-eslint-parser/ast/locations";
+    export interface Token extends HasLocation {
+        type: string;
+        value: string;
+    }
+}
+
+declare module 'vue-eslint-parser/ast/traverse' {
+    import type { VisitorKeys } from "eslint-visitor-keys";
+    import type { Node } from "vue-eslint-parser/ast/nodes";
+    function getFallbackKeys(node: Node): string[];
+    export interface Visitor {
+        visitorKeys?: VisitorKeys;
+        enterNode(node: Node, parent: Node | null): void;
+        leaveNode(node: Node, parent: Node | null): void;
+    }
+    export function traverseNodes(node: Node, visitor: Visitor): void;
+    export { getFallbackKeys };
+}
+
diff --git a/server/node_modules/vue-eslint-parser/index.js b/server/node_modules/vue-eslint-parser/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..d3863193e7d28343f6d03fe5aeaff1e8df9cf3d8
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/index.js
@@ -0,0 +1,4235 @@
+/**
+ * @author Toru Nagashima <https://github.com/mysticatea>
+ * See LICENSE file in root directory for full license.
+ */
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+
+var path = require('path');
+var path__default = _interopDefault(path);
+var Evk = _interopDefault(require('eslint-visitor-keys'));
+var sortedLastIndex = _interopDefault(require('lodash/sortedLastIndex'));
+var assert = _interopDefault(require('assert'));
+var last = _interopDefault(require('lodash/last'));
+var findLastIndex = _interopDefault(require('lodash/findLastIndex'));
+var debugFactory = _interopDefault(require('debug'));
+var sortedIndexBy = _interopDefault(require('lodash/sortedIndexBy'));
+var sortedLastIndexBy = _interopDefault(require('lodash/sortedLastIndexBy'));
+var first = _interopDefault(require('lodash/first'));
+var escope = _interopDefault(require('eslint-scope'));
+var Module = _interopDefault(require('module'));
+var EventEmitter = _interopDefault(require('events'));
+var esquery = _interopDefault(require('esquery'));
+var union = _interopDefault(require('lodash/union'));
+var intersection = _interopDefault(require('lodash/intersection'));
+var memoize = _interopDefault(require('lodash/memoize'));
+
+function isAcornStyleParseError(x) {
+    return (typeof x.message === "string" &&
+        typeof x.pos === "number" &&
+        typeof x.loc === "object" &&
+        x.loc !== null &&
+        typeof x.loc.line === "number" &&
+        typeof x.loc.column === "number");
+}
+class ParseError extends SyntaxError {
+    constructor(message, code, offset, line, column) {
+        super(message);
+        this.code = code;
+        this.index = offset;
+        this.lineNumber = line;
+        this.column = column;
+    }
+    static fromCode(code, offset, line, column) {
+        return new ParseError(code, code, offset, line, column);
+    }
+    static normalize(x) {
+        if (ParseError.isParseError(x)) {
+            return x;
+        }
+        if (isAcornStyleParseError(x)) {
+            return new ParseError(x.message, undefined, x.pos, x.loc.line, x.loc.column);
+        }
+        return null;
+    }
+    static isParseError(x) {
+        return (x instanceof ParseError ||
+            (typeof x.message === "string" &&
+                typeof x.index === "number" &&
+                typeof x.lineNumber === "number" &&
+                typeof x.column === "number"));
+    }
+}
+
+const NS = Object.freeze({
+    HTML: "http://www.w3.org/1999/xhtml",
+    MathML: "http://www.w3.org/1998/Math/MathML",
+    SVG: "http://www.w3.org/2000/svg",
+    XLink: "http://www.w3.org/1999/xlink",
+    XML: "http://www.w3.org/XML/1998/namespace",
+    XMLNS: "http://www.w3.org/2000/xmlns/",
+});
+
+const KEYS = Evk.unionWith({
+    VAttribute: ["key", "value"],
+    VDirectiveKey: ["name", "argument", "modifiers"],
+    VDocumentFragment: ["children"],
+    VElement: ["startTag", "children", "endTag"],
+    VEndTag: [],
+    VExpressionContainer: ["expression"],
+    VFilter: ["callee", "arguments"],
+    VFilterSequenceExpression: ["expression", "filters"],
+    VForExpression: ["left", "right"],
+    VIdentifier: [],
+    VLiteral: [],
+    VOnExpression: ["body"],
+    VSlotScopeExpression: ["params"],
+    VStartTag: ["attributes"],
+    VText: [],
+});
+function fallbackKeysFilter(key) {
+    let value = null;
+    return (key !== "comments" &&
+        key !== "leadingComments" &&
+        key !== "loc" &&
+        key !== "parent" &&
+        key !== "range" &&
+        key !== "tokens" &&
+        key !== "trailingComments" &&
+        (value = this[key]) !== null &&
+        typeof value === "object" &&
+        (typeof value.type === "string" || Array.isArray(value)));
+}
+function getFallbackKeys(node) {
+    return Object.keys(node).filter(fallbackKeysFilter, node);
+}
+function isNode(x) {
+    return x !== null && typeof x === "object" && typeof x.type === "string";
+}
+function traverse(node, parent, visitor) {
+    let i = 0;
+    let j = 0;
+    visitor.enterNode(node, parent);
+    const keys = (visitor.visitorKeys || KEYS)[node.type] || getFallbackKeys(node);
+    for (i = 0; i < keys.length; ++i) {
+        const child = node[keys[i]];
+        if (Array.isArray(child)) {
+            for (j = 0; j < child.length; ++j) {
+                if (isNode(child[j])) {
+                    traverse(child[j], node, visitor);
+                }
+            }
+        }
+        else if (isNode(child)) {
+            traverse(child, node, visitor);
+        }
+    }
+    visitor.leaveNode(node, parent);
+}
+function traverseNodes(node, visitor) {
+    traverse(node, null, visitor);
+}
+
+
+
+var index = /*#__PURE__*/Object.freeze({
+    __proto__: null,
+    ParseError: ParseError,
+    NS: NS,
+    traverseNodes: traverseNodes,
+    getFallbackKeys: getFallbackKeys
+});
+
+class LocationCalculator {
+    constructor(gapOffsets, ltOffsets, baseOffset, shiftOffset = 0) {
+        this.gapOffsets = gapOffsets;
+        this.ltOffsets = ltOffsets;
+        this.baseOffset = baseOffset || 0;
+        this.baseIndexOfGap =
+            this.baseOffset === 0
+                ? 0
+                : sortedLastIndex(gapOffsets, this.baseOffset);
+        this.shiftOffset = shiftOffset;
+    }
+    getSubCalculatorAfter(offset) {
+        return new LocationCalculator(this.gapOffsets, this.ltOffsets, this.baseOffset + offset, this.shiftOffset);
+    }
+    getSubCalculatorShift(offset) {
+        return new LocationCalculator(this.gapOffsets, this.ltOffsets, this.baseOffset, this.shiftOffset + offset);
+    }
+    getLocFromIndex(index) {
+        return this._getLocation(index);
+    }
+    _getLocation(offset) {
+        const line = sortedLastIndex(this.ltOffsets, offset) + 1;
+        const column = offset - (line === 1 ? 0 : this.ltOffsets[line - 2]);
+        return { line, column };
+    }
+    _getGap(index) {
+        const offsets = this.gapOffsets;
+        let g0 = sortedLastIndex(offsets, index + this.baseOffset);
+        let pos = index + this.baseOffset + g0 - this.baseIndexOfGap;
+        while (g0 < offsets.length && offsets[g0] <= pos) {
+            g0 += 1;
+            pos += 1;
+        }
+        return g0 - this.baseIndexOfGap;
+    }
+    getLocation(index) {
+        return this._getLocation(this.baseOffset + index + this.shiftOffset);
+    }
+    getOffsetWithGap(index) {
+        const shiftOffset = this.shiftOffset;
+        return (this.baseOffset +
+            index +
+            shiftOffset +
+            this._getGap(index + shiftOffset));
+    }
+    fixLocation(node) {
+        const shiftOffset = this.shiftOffset;
+        const range = node.range;
+        const loc = node.loc;
+        const gap0 = this._getGap(range[0] + shiftOffset);
+        const gap1 = this._getGap(range[1] + shiftOffset);
+        const d0 = this.baseOffset + Math.max(0, gap0) + shiftOffset;
+        const d1 = this.baseOffset + Math.max(0, gap1) + shiftOffset;
+        if (d0 !== 0) {
+            range[0] += d0;
+            if (node.start != null) {
+                node.start += d0;
+            }
+            loc.start = this._getLocation(range[0]);
+        }
+        if (d1 !== 0) {
+            range[1] += d1;
+            if (node.end != null) {
+                node.end += d0;
+            }
+            loc.end = this._getLocation(range[1]);
+        }
+        return node;
+    }
+    fixErrorLocation(error) {
+        const shiftOffset = this.shiftOffset;
+        const gap = this._getGap(error.index + shiftOffset);
+        const diff = this.baseOffset + Math.max(0, gap) + shiftOffset;
+        error.index += diff;
+        const loc = this._getLocation(error.index);
+        error.lineNumber = loc.line;
+        error.column = loc.column;
+    }
+}
+
+const debug = debugFactory("vue-eslint-parser");
+
+function isUnique(reference, index, references) {
+    return (index === 0 || reference.identifier !== references[index - 1].identifier);
+}
+function hasDefinition(variable) {
+    return variable.defs.length >= 1;
+}
+function transformReference(reference) {
+    const ret = {
+        id: reference.identifier,
+        mode: reference.isReadOnly()
+            ? "r"
+            : reference.isWriteOnly()
+                ? "w"
+                : "rw",
+        variable: null,
+    };
+    Object.defineProperty(ret, "variable", { enumerable: false });
+    return ret;
+}
+function transformVariable(variable) {
+    const ret = {
+        id: variable.defs[0].name,
+        kind: variable.scope.type === "for" ? "v-for" : "scope",
+        references: [],
+    };
+    Object.defineProperty(ret, "references", { enumerable: false });
+    return ret;
+}
+function getForScope(scope) {
+    const child = scope.childScopes[0];
+    return child.block === scope.block ? child.childScopes[0] : child;
+}
+function analyze(ast, parserOptions) {
+    const ecmaVersion = parserOptions.ecmaVersion || 2017;
+    const ecmaFeatures = parserOptions.ecmaFeatures || {};
+    const sourceType = parserOptions.sourceType || "script";
+    const result = escope.analyze(ast, {
+        ignoreEval: true,
+        nodejsScope: false,
+        impliedStrict: ecmaFeatures.impliedStrict,
+        ecmaVersion,
+        sourceType,
+        fallback: getFallbackKeys,
+    });
+    return result.globalScope;
+}
+function analyzeExternalReferences(ast, parserOptions) {
+    const scope = analyze(ast, parserOptions);
+    return scope.through.filter(isUnique).map(transformReference);
+}
+function analyzeVariablesAndExternalReferences(ast, parserOptions) {
+    const scope = analyze(ast, parserOptions);
+    return {
+        variables: getForScope(scope)
+            .variables.filter(hasDefinition)
+            .map(transformVariable),
+        references: scope.through.filter(isUnique).map(transformReference),
+    };
+}
+
+const createRequire = Module.createRequire ||
+    Module.createRequireFromPath ||
+    ((modname) => {
+        const mod = new Module(modname);
+        mod.filename = modname;
+        mod.paths = Module._nodeModulePaths(path__default.dirname(modname));
+        mod._compile("module.exports = require;", modname);
+        return mod.exports;
+    });
+let espreeCache = null;
+function isLinterPath(p) {
+    return (p.includes(`eslint${path__default.sep}lib${path__default.sep}linter${path__default.sep}linter.js`) ||
+        p.includes(`eslint${path__default.sep}lib${path__default.sep}linter.js`));
+}
+function getEspree() {
+    if (!espreeCache) {
+        const linterPath = Object.keys(require.cache).find(isLinterPath);
+        if (linterPath) {
+            try {
+                espreeCache = createRequire(linterPath)("espree");
+            }
+            catch (_a) {
+            }
+        }
+        if (!espreeCache) {
+            espreeCache = require("espree");
+        }
+    }
+    return espreeCache;
+}
+
+function fixLocations(result, locationCalculator) {
+    const traversed = new Set();
+    traverseNodes(result.ast, {
+        visitorKeys: result.visitorKeys,
+        enterNode(node, parent) {
+            if (!traversed.has(node)) {
+                traversed.add(node);
+                node.parent = parent;
+                if (traversed.has(node.range)) {
+                    if (!traversed.has(node.loc)) {
+                        node.loc.start = locationCalculator.getLocFromIndex(node.range[0]);
+                        node.loc.end = locationCalculator.getLocFromIndex(node.range[1]);
+                        traversed.add(node.loc);
+                    }
+                }
+                else {
+                    locationCalculator.fixLocation(node);
+                    traversed.add(node.range);
+                    traversed.add(node.loc);
+                }
+            }
+        },
+        leaveNode() {
+        },
+    });
+    for (const token of result.ast.tokens || []) {
+        locationCalculator.fixLocation(token);
+    }
+    for (const comment of result.ast.comments || []) {
+        locationCalculator.fixLocation(comment);
+    }
+}
+
+const ALIAS_PARENS = /^(\s*)\(([\s\S]+)\)(\s*(?:in|of)\b[\s\S]+)$/u;
+const DUMMY_PARENT = {};
+const IS_FUNCTION_EXPRESSION = /^\s*([\w$_]+|\([^)]*?\))\s*=>|^function\s*\(/u;
+const IS_SIMPLE_PATH = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?'\]|\["[^"]*?"\]|\[\d+\]|\[[A-Za-z_$][\w$]*\])*$/u;
+function replaceAliasParens(code) {
+    const match = ALIAS_PARENS.exec(code);
+    if (match != null) {
+        return `${match[1]}[${match[2]}]${match[3]}`;
+    }
+    return code;
+}
+function normalizeLeft(left, replaced) {
+    if (left.type !== "VariableDeclaration") {
+        throw new Error("unreachable");
+    }
+    const id = left.declarations[0].id;
+    if (replaced) {
+        return id.elements;
+    }
+    return [id];
+}
+function getCommaTokenBeforeNode(tokens, node) {
+    let tokenIndex = sortedIndexBy(tokens, { range: node.range }, (t) => t.range[0]);
+    while (tokenIndex >= 0) {
+        const token = tokens[tokenIndex];
+        if (token.type === "Punctuator" && token.value === ",") {
+            return token;
+        }
+        tokenIndex -= 1;
+    }
+    return null;
+}
+function throwEmptyError(locationCalculator, expected) {
+    const loc = locationCalculator.getLocation(0);
+    const err = new ParseError(`Expected to be ${expected}, but got empty.`, undefined, 0, loc.line, loc.column);
+    locationCalculator.fixErrorLocation(err);
+    throw err;
+}
+function throwUnexpectedTokenError(name, token) {
+    const err = new ParseError(`Unexpected token '${name}'.`, undefined, token.range[0], token.loc.start.line, token.loc.start.column);
+    throw err;
+}
+function throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator) {
+    if (ParseError.isParseError(err)) {
+        const endOffset = locationCalculator.getOffsetWithGap(code.length);
+        if (err.index >= endOffset) {
+            err.message = "Unexpected end of expression.";
+        }
+    }
+    throw err;
+}
+function parseScriptFragment(code, locationCalculator, parserOptions) {
+    try {
+        const result = parseScript(code, parserOptions);
+        fixLocations(result, locationCalculator);
+        return result;
+    }
+    catch (err) {
+        const perr = ParseError.normalize(err);
+        if (perr) {
+            locationCalculator.fixErrorLocation(perr);
+            throw perr;
+        }
+        throw err;
+    }
+}
+const validDivisionCharRE = /[\w).+\-_$\]]/u;
+function splitFilters(exp) {
+    const result = [];
+    let inSingle = false;
+    let inDouble = false;
+    let inTemplateString = false;
+    let inRegex = false;
+    let curly = 0;
+    let square = 0;
+    let paren = 0;
+    let lastFilterIndex = 0;
+    let c = 0;
+    let prev = 0;
+    for (let i = 0; i < exp.length; i++) {
+        prev = c;
+        c = exp.charCodeAt(i);
+        if (inSingle) {
+            if (c === 0x27 && prev !== 0x5c) {
+                inSingle = false;
+            }
+        }
+        else if (inDouble) {
+            if (c === 0x22 && prev !== 0x5c) {
+                inDouble = false;
+            }
+        }
+        else if (inTemplateString) {
+            if (c === 0x60 && prev !== 0x5c) {
+                inTemplateString = false;
+            }
+        }
+        else if (inRegex) {
+            if (c === 0x2f && prev !== 0x5c) {
+                inRegex = false;
+            }
+        }
+        else if (c === 0x7c &&
+            exp.charCodeAt(i + 1) !== 0x7c &&
+            exp.charCodeAt(i - 1) !== 0x7c &&
+            !curly &&
+            !square &&
+            !paren) {
+            result.push(exp.slice(lastFilterIndex, i));
+            lastFilterIndex = i + 1;
+        }
+        else {
+            switch (c) {
+                case 0x22:
+                    inDouble = true;
+                    break;
+                case 0x27:
+                    inSingle = true;
+                    break;
+                case 0x60:
+                    inTemplateString = true;
+                    break;
+                case 0x28:
+                    paren++;
+                    break;
+                case 0x29:
+                    paren--;
+                    break;
+                case 0x5b:
+                    square++;
+                    break;
+                case 0x5d:
+                    square--;
+                    break;
+                case 0x7b:
+                    curly++;
+                    break;
+                case 0x7d:
+                    curly--;
+                    break;
+            }
+            if (c === 0x2f) {
+                let j = i - 1;
+                let p;
+                for (; j >= 0; j--) {
+                    p = exp.charAt(j);
+                    if (p !== " ") {
+                        break;
+                    }
+                }
+                if (!p || !validDivisionCharRE.test(p)) {
+                    inRegex = true;
+                }
+            }
+        }
+    }
+    result.push(exp.slice(lastFilterIndex));
+    return result;
+}
+function parseExpressionBody(code, locationCalculator, parserOptions, allowEmpty = false) {
+    debug('[script] parse expression: "0(%s)"', code);
+    try {
+        const ast = parseScriptFragment(`0(${code})`, locationCalculator.getSubCalculatorShift(-2), parserOptions).ast;
+        const tokens = ast.tokens || [];
+        const comments = ast.comments || [];
+        const references = analyzeExternalReferences(ast, parserOptions);
+        const statement = ast.body[0];
+        const callExpression = statement.expression;
+        const expression = callExpression.arguments[0];
+        if (!allowEmpty && !expression) {
+            return throwEmptyError(locationCalculator, "an expression");
+        }
+        if (expression && expression.type === "SpreadElement") {
+            return throwUnexpectedTokenError("...", expression);
+        }
+        if (callExpression.arguments[1]) {
+            const node = callExpression.arguments[1];
+            return throwUnexpectedTokenError(",", getCommaTokenBeforeNode(tokens, node) || node);
+        }
+        tokens.shift();
+        tokens.shift();
+        tokens.pop();
+        return { expression, tokens, comments, references, variables: [] };
+    }
+    catch (err) {
+        return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator);
+    }
+}
+function parseFilter(code, locationCalculator, parserOptions) {
+    debug('[script] parse filter: "%s"', code);
+    try {
+        const expression = {
+            type: "VFilter",
+            parent: null,
+            range: [0, 0],
+            loc: {},
+            callee: null,
+            arguments: [],
+        };
+        const tokens = [];
+        const comments = [];
+        const references = [];
+        const paren = code.indexOf("(");
+        const calleeCode = paren === -1 ? code : code.slice(0, paren);
+        const argsCode = paren === -1 ? null : code.slice(paren);
+        if (calleeCode.trim()) {
+            const spaces = /^\s*/u.exec(calleeCode)[0];
+            const subCalculator = locationCalculator.getSubCalculatorShift(spaces.length);
+            const { ast } = parseScriptFragment(`"${calleeCode.trim()}"`, subCalculator, parserOptions);
+            const statement = ast.body[0];
+            const callee = statement.expression;
+            if (callee.type !== "Literal") {
+                const { loc, range } = ast.tokens[0];
+                return throwUnexpectedTokenError('"', {
+                    range: [range[1] - 1, range[1]],
+                    loc: {
+                        start: {
+                            line: loc.end.line,
+                            column: loc.end.column - 1,
+                        },
+                        end: loc.end,
+                    },
+                });
+            }
+            expression.callee = {
+                type: "Identifier",
+                parent: expression,
+                range: [
+                    callee.range[0],
+                    subCalculator.getOffsetWithGap(calleeCode.trim().length),
+                ],
+                loc: {
+                    start: callee.loc.start,
+                    end: subCalculator.getLocation(calleeCode.trim().length),
+                },
+                name: String(callee.value),
+            };
+            tokens.push({
+                type: "Identifier",
+                value: calleeCode.trim(),
+                range: expression.callee.range,
+                loc: expression.callee.loc,
+            });
+        }
+        else {
+            return throwEmptyError(locationCalculator, "a filter name");
+        }
+        if (argsCode != null) {
+            const { ast } = parseScriptFragment(`0${argsCode}`, locationCalculator
+                .getSubCalculatorAfter(paren)
+                .getSubCalculatorShift(-1), parserOptions);
+            const statement = ast.body[0];
+            const callExpression = statement.expression;
+            ast.tokens.shift();
+            if (callExpression.type !== "CallExpression" ||
+                callExpression.callee.type !== "Literal") {
+                let nestCount = 1;
+                for (const token of ast.tokens.slice(1)) {
+                    if (nestCount === 0) {
+                        return throwUnexpectedTokenError(token.value, token);
+                    }
+                    if (token.type === "Punctuator" && token.value === "(") {
+                        nestCount += 1;
+                    }
+                    if (token.type === "Punctuator" && token.value === ")") {
+                        nestCount -= 1;
+                    }
+                }
+                const token = last(ast.tokens);
+                return throwUnexpectedTokenError(token.value, token);
+            }
+            for (const argument of callExpression.arguments) {
+                argument.parent = expression;
+                expression.arguments.push(argument);
+            }
+            tokens.push(...ast.tokens);
+            comments.push(...ast.comments);
+            references.push(...analyzeExternalReferences(ast, parserOptions));
+        }
+        const firstToken = tokens[0];
+        const lastToken = last(tokens);
+        expression.range = [firstToken.range[0], lastToken.range[1]];
+        expression.loc = { start: firstToken.loc.start, end: lastToken.loc.end };
+        return { expression, tokens, comments, references, variables: [] };
+    }
+    catch (err) {
+        return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator);
+    }
+}
+function parseScript(code, parserOptions) {
+    const parser = typeof parserOptions.parser === "string"
+        ?
+            require(parserOptions.parser)
+        : getEspree();
+    const result = typeof parser.parseForESLint === "function"
+        ? parser.parseForESLint(code, parserOptions)
+        : parser.parse(code, parserOptions);
+    if (result.ast != null) {
+        return result;
+    }
+    return { ast: result };
+}
+function parseScriptElement(node, globalLocationCalculator, parserOptions) {
+    const text = node.children[0];
+    const offset = text != null && text.type === "VText"
+        ? text.range[0]
+        : node.startTag.range[1];
+    const code = text != null && text.type === "VText" ? text.value : "";
+    const locationCalculator = globalLocationCalculator.getSubCalculatorAfter(offset);
+    const result = parseScriptFragment(code, locationCalculator, parserOptions);
+    if (result.ast.tokens != null) {
+        const startTag = node.startTag;
+        const endTag = node.endTag;
+        if (startTag != null) {
+            result.ast.tokens.unshift({
+                type: "Punctuator",
+                range: startTag.range,
+                loc: startTag.loc,
+                value: "<script>",
+            });
+        }
+        if (endTag != null) {
+            result.ast.tokens.push({
+                type: "Punctuator",
+                range: endTag.range,
+                loc: endTag.loc,
+                value: "</script>",
+            });
+        }
+    }
+    return result;
+}
+function parseExpression(code, locationCalculator, parserOptions, { allowEmpty = false, allowFilters = false } = {}) {
+    var _a, _b;
+    debug('[script] parse expression: "%s"', code);
+    const [mainCode, ...filterCodes] = allowFilters && ((_b = (_a = parserOptions.vueFeatures) === null || _a === void 0 ? void 0 : _a.filter) !== null && _b !== void 0 ? _b : true)
+        ? splitFilters(code)
+        : [code];
+    if (filterCodes.length === 0) {
+        return parseExpressionBody(code, locationCalculator, parserOptions, allowEmpty);
+    }
+    const retB = parseExpressionBody(mainCode, locationCalculator, parserOptions);
+    if (!retB.expression) {
+        return retB;
+    }
+    const ret = retB;
+    ret.expression = {
+        type: "VFilterSequenceExpression",
+        parent: null,
+        expression: retB.expression,
+        filters: [],
+        range: retB.expression.range.slice(0),
+        loc: Object.assign({}, retB.expression.loc),
+    };
+    ret.expression.expression.parent = ret.expression;
+    let prevLoc = mainCode.length;
+    for (const filterCode of filterCodes) {
+        ret.tokens.push(locationCalculator.fixLocation({
+            type: "Punctuator",
+            value: "|",
+            range: [prevLoc, prevLoc + 1],
+            loc: {},
+        }));
+        const retF = parseFilter(filterCode, locationCalculator.getSubCalculatorShift(prevLoc + 1), parserOptions);
+        if (retF) {
+            if (retF.expression) {
+                ret.expression.filters.push(retF.expression);
+                retF.expression.parent = ret.expression;
+            }
+            ret.tokens.push(...retF.tokens);
+            ret.comments.push(...retF.comments);
+            ret.references.push(...retF.references);
+        }
+        prevLoc += 1 + filterCode.length;
+    }
+    const lastToken = last(ret.tokens);
+    ret.expression.range[1] = lastToken.range[1];
+    ret.expression.loc.end = lastToken.loc.end;
+    return ret;
+}
+function parseVForExpression(code, locationCalculator, parserOptions) {
+    const processedCode = replaceAliasParens(code);
+    debug('[script] parse v-for expression: "for(%s);"', processedCode);
+    if (code.trim() === "") {
+        throwEmptyError(locationCalculator, "'<alias> in <expression>'");
+    }
+    try {
+        const replaced = processedCode !== code;
+        const ast = parseScriptFragment(`for(let ${processedCode});`, locationCalculator.getSubCalculatorShift(-8), parserOptions).ast;
+        const tokens = ast.tokens || [];
+        const comments = ast.comments || [];
+        const scope = analyzeVariablesAndExternalReferences(ast, parserOptions);
+        const references = scope.references;
+        const variables = scope.variables;
+        const statement = ast.body[0];
+        const left = normalizeLeft(statement.left, replaced);
+        const right = statement.right;
+        const firstToken = tokens[3] || statement.left;
+        const lastToken = tokens[tokens.length - 3] || statement.right;
+        const expression = {
+            type: "VForExpression",
+            range: [firstToken.range[0], lastToken.range[1]],
+            loc: { start: firstToken.loc.start, end: lastToken.loc.end },
+            parent: DUMMY_PARENT,
+            left,
+            right,
+        };
+        for (const l of left) {
+            if (l != null) {
+                l.parent = expression;
+            }
+        }
+        right.parent = expression;
+        tokens.shift();
+        tokens.shift();
+        tokens.shift();
+        tokens.pop();
+        tokens.pop();
+        if (replaced) {
+            const closeOffset = statement.left.range[1] - 1;
+            const open = tokens[0];
+            const close = tokens.find((t) => t.range[0] === closeOffset);
+            if (open != null) {
+                open.value = "(";
+            }
+            if (close != null) {
+                close.value = ")";
+            }
+        }
+        return { expression, tokens, comments, references, variables };
+    }
+    catch (err) {
+        return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator);
+    }
+}
+function parseVOnExpression(code, locationCalculator, parserOptions) {
+    if (IS_FUNCTION_EXPRESSION.test(code) || IS_SIMPLE_PATH.test(code)) {
+        return parseExpressionBody(code, locationCalculator, parserOptions);
+    }
+    return parseVOnExpressionBody(code, locationCalculator, parserOptions);
+}
+function parseVOnExpressionBody(code, locationCalculator, parserOptions) {
+    debug('[script] parse v-on expression: "void function($event){%s}"', code);
+    if (code.trim() === "") {
+        throwEmptyError(locationCalculator, "statements");
+    }
+    try {
+        const ast = parseScriptFragment(`void function($event){${code}}`, locationCalculator.getSubCalculatorShift(-22), parserOptions).ast;
+        const references = analyzeExternalReferences(ast, parserOptions);
+        const outermostStatement = ast.body[0];
+        const functionDecl = outermostStatement.expression
+            .argument;
+        const block = functionDecl.body;
+        const body = block.body;
+        const firstStatement = first(body);
+        const lastStatement = last(body);
+        const expression = {
+            type: "VOnExpression",
+            range: [
+                firstStatement != null
+                    ? firstStatement.range[0]
+                    : block.range[0] + 1,
+                lastStatement != null
+                    ? lastStatement.range[1]
+                    : block.range[1] - 1,
+            ],
+            loc: {
+                start: firstStatement != null
+                    ? firstStatement.loc.start
+                    : locationCalculator.getLocation(1),
+                end: lastStatement != null
+                    ? lastStatement.loc.end
+                    : locationCalculator.getLocation(code.length + 1),
+            },
+            parent: DUMMY_PARENT,
+            body,
+        };
+        const tokens = ast.tokens || [];
+        const comments = ast.comments || [];
+        for (const b of body) {
+            b.parent = expression;
+        }
+        tokens.splice(0, 6);
+        tokens.pop();
+        return { expression, tokens, comments, references, variables: [] };
+    }
+    catch (err) {
+        return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator);
+    }
+}
+function parseSlotScopeExpression(code, locationCalculator, parserOptions) {
+    debug('[script] parse slot-scope expression: "void function(%s) {}"', code);
+    if (code.trim() === "") {
+        throwEmptyError(locationCalculator, "an identifier or an array/object pattern");
+    }
+    try {
+        const ast = parseScriptFragment(`void function(${code}) {}`, locationCalculator.getSubCalculatorShift(-14), parserOptions).ast;
+        const statement = ast.body[0];
+        const rawExpression = statement.expression;
+        const functionDecl = rawExpression.argument;
+        const params = functionDecl.params;
+        if (params.length === 0) {
+            return {
+                expression: null,
+                tokens: [],
+                comments: [],
+                references: [],
+                variables: [],
+            };
+        }
+        const tokens = ast.tokens || [];
+        const comments = ast.comments || [];
+        const scope = analyzeVariablesAndExternalReferences(ast, parserOptions);
+        const references = scope.references;
+        const variables = scope.variables;
+        const firstParam = first(params);
+        const lastParam = last(params);
+        const expression = {
+            type: "VSlotScopeExpression",
+            range: [firstParam.range[0], lastParam.range[1]],
+            loc: { start: firstParam.loc.start, end: lastParam.loc.end },
+            parent: DUMMY_PARENT,
+            params: functionDecl.params,
+        };
+        for (const param of params) {
+            param.parent = expression;
+        }
+        tokens.shift();
+        tokens.shift();
+        tokens.shift();
+        tokens.pop();
+        tokens.pop();
+        tokens.pop();
+        return { expression, tokens, comments, references, variables };
+    }
+    catch (err) {
+        return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator);
+    }
+}
+
+const shorthandSign = /^[.:@#]/u;
+const shorthandNameMap = { ":": "bind", ".": "bind", "@": "on", "#": "slot" };
+const invalidDynamicArgumentNextChar = /^[\s\r\n=/>]$/u;
+function getOwnerDocument(leafNode) {
+    let node = leafNode;
+    while (node != null && node.type !== "VDocumentFragment") {
+        node = node.parent;
+    }
+    return node;
+}
+function createSimpleToken(type, start, end, value, globalLocationCalculator) {
+    return {
+        type,
+        range: [start, end],
+        loc: {
+            start: globalLocationCalculator.getLocation(start),
+            end: globalLocationCalculator.getLocation(end),
+        },
+        value,
+    };
+}
+function parseDirectiveKeyStatically(node, document) {
+    const { name: text, rawName: rawText, range: [offset], loc: { start: { column, line }, }, } = node;
+    const directiveKey = {
+        type: "VDirectiveKey",
+        range: node.range,
+        loc: node.loc,
+        parent: node.parent,
+        name: null,
+        argument: null,
+        modifiers: [],
+    };
+    let i = 0;
+    function createIdentifier(start, end, name) {
+        return {
+            type: "VIdentifier",
+            parent: directiveKey,
+            range: [offset + start, offset + end],
+            loc: {
+                start: { column: column + start, line },
+                end: { column: column + end, line },
+            },
+            name: name || text.slice(start, end),
+            rawName: rawText.slice(start, end),
+        };
+    }
+    if (shorthandSign.test(text)) {
+        const sign = text[0];
+        directiveKey.name = createIdentifier(0, 1, shorthandNameMap[sign]);
+        i = 1;
+    }
+    else {
+        const colon = text.indexOf(":");
+        if (colon !== -1) {
+            directiveKey.name = createIdentifier(0, colon);
+            i = colon + 1;
+        }
+    }
+    if (directiveKey.name != null && text[i] === "[") {
+        const len = text.slice(i).lastIndexOf("]");
+        if (len !== -1) {
+            directiveKey.argument = createIdentifier(i, i + len + 1);
+            i = i + len + 1 + (text[i + len + 1] === "." ? 1 : 0);
+        }
+    }
+    const modifiers = text
+        .slice(i)
+        .split(".")
+        .map((modifierName) => {
+        const modifier = createIdentifier(i, i + modifierName.length);
+        if (modifierName === "" && i < text.length) {
+            insertError(document, new ParseError(`Unexpected token '${text[i]}'`, undefined, offset + i, line, column + i));
+        }
+        i += modifierName.length + 1;
+        return modifier;
+    });
+    if (directiveKey.name == null) {
+        directiveKey.name = modifiers.shift();
+    }
+    else if (directiveKey.argument == null && modifiers[0].name !== "") {
+        directiveKey.argument = modifiers.shift() || null;
+    }
+    directiveKey.modifiers = modifiers.filter(isNotEmptyModifier);
+    if (directiveKey.name.name === "v-") {
+        insertError(document, new ParseError(`Unexpected token '${text[directiveKey.name.range[1] - offset]}'`, undefined, directiveKey.name.range[1], directiveKey.name.loc.end.line, directiveKey.name.loc.end.column));
+    }
+    if (directiveKey.name.rawName === "." &&
+        !directiveKey.modifiers.some(isPropModifier)) {
+        const pos = (directiveKey.argument || directiveKey.name).range[1] - offset;
+        const propModifier = createIdentifier(pos, pos, "prop");
+        directiveKey.modifiers.unshift(propModifier);
+    }
+    return directiveKey;
+}
+function isPropModifier(node) {
+    return node.name === "prop";
+}
+function isNotEmptyModifier(node) {
+    return node.name !== "";
+}
+function parseDirectiveKeyTokens(node) {
+    const { name, argument, modifiers } = node;
+    const shorthand = name.range[1] - name.range[0] === 1;
+    const tokens = [];
+    if (shorthand) {
+        tokens.push({
+            type: "Punctuator",
+            range: name.range,
+            loc: name.loc,
+            value: name.rawName,
+        });
+    }
+    else {
+        tokens.push({
+            type: "HTMLIdentifier",
+            range: name.range,
+            loc: name.loc,
+            value: name.rawName,
+        });
+        if (argument) {
+            tokens.push({
+                type: "Punctuator",
+                range: [name.range[1], argument.range[0]],
+                loc: { start: name.loc.end, end: argument.loc.start },
+                value: ":",
+            });
+        }
+    }
+    if (argument) {
+        tokens.push({
+            type: "HTMLIdentifier",
+            range: argument.range,
+            loc: argument.loc,
+            value: argument.rawName,
+        });
+    }
+    let lastNode = argument || name;
+    for (const modifier of modifiers) {
+        if (modifier.rawName === "") {
+            continue;
+        }
+        tokens.push({
+            type: "Punctuator",
+            range: [lastNode.range[1], modifier.range[0]],
+            loc: { start: lastNode.loc.end, end: modifier.loc.start },
+            value: ".",
+        }, {
+            type: "HTMLIdentifier",
+            range: modifier.range,
+            loc: modifier.loc,
+            value: modifier.rawName,
+        });
+        lastNode = modifier;
+    }
+    return tokens;
+}
+function convertDynamicArgument(node, document, parserOptions, locationCalculator) {
+    const { argument } = node;
+    if (!(argument != null &&
+        argument.type === "VIdentifier" &&
+        argument.name.startsWith("[") &&
+        argument.name.endsWith("]"))) {
+        return;
+    }
+    const { rawName, range, loc } = argument;
+    try {
+        const { comments, expression, references, tokens } = parseExpression(rawName.slice(1, -1), locationCalculator.getSubCalculatorAfter(range[0] + 1), parserOptions);
+        node.argument = {
+            type: "VExpressionContainer",
+            range,
+            loc,
+            parent: node,
+            expression,
+            references,
+        };
+        if (expression != null) {
+            expression.parent = node.argument;
+        }
+        tokens.unshift(createSimpleToken("Punctuator", range[0], range[0] + 1, "[", locationCalculator));
+        tokens.push(createSimpleToken("Punctuator", range[1] - 1, range[1], "]", locationCalculator));
+        replaceTokens(document, node.argument, tokens);
+        insertComments(document, comments);
+    }
+    catch (error) {
+        debug("[template] Parse error: %s", error);
+        if (ParseError.isParseError(error)) {
+            node.argument = {
+                type: "VExpressionContainer",
+                range,
+                loc,
+                parent: node,
+                expression: null,
+                references: [],
+            };
+            insertError(document, error);
+        }
+        else {
+            throw error;
+        }
+    }
+}
+function createDirectiveKey(node, document, parserOptions, locationCalculator) {
+    const directiveKey = parseDirectiveKeyStatically(node, document);
+    const tokens = parseDirectiveKeyTokens(directiveKey);
+    replaceTokens(document, directiveKey, tokens);
+    if (directiveKey.name.name.startsWith("v-")) {
+        directiveKey.name.name = directiveKey.name.name.slice(2);
+    }
+    if (directiveKey.name.rawName.startsWith("v-")) {
+        directiveKey.name.rawName = directiveKey.name.rawName.slice(2);
+    }
+    convertDynamicArgument(directiveKey, document, parserOptions, locationCalculator);
+    return directiveKey;
+}
+function byRange0(x) {
+    return x.range[0];
+}
+function byRange1(x) {
+    return x.range[1];
+}
+function byIndex(x) {
+    return x.index;
+}
+function replaceTokens(document, node, newTokens) {
+    if (document == null) {
+        return;
+    }
+    const index = sortedIndexBy(document.tokens, node, byRange0);
+    const count = sortedLastIndexBy(document.tokens, node, byRange1) - index;
+    document.tokens.splice(index, count, ...newTokens);
+}
+function insertComments(document, newComments) {
+    if (document == null || newComments.length === 0) {
+        return;
+    }
+    const index = sortedIndexBy(document.comments, newComments[0], byRange0);
+    document.comments.splice(index, 0, ...newComments);
+}
+function insertError(document, error) {
+    if (document == null) {
+        return;
+    }
+    const index = sortedIndexBy(document.errors, error, byIndex);
+    document.errors.splice(index, 0, error);
+}
+function parseAttributeValue(code, parserOptions, globalLocationCalculator, node, tagName, directiveKey) {
+    const firstChar = code[node.range[0]];
+    const quoted = firstChar === '"' || firstChar === "'";
+    const locationCalculator = globalLocationCalculator.getSubCalculatorAfter(node.range[0] + (quoted ? 1 : 0));
+    const directiveName = directiveKey.name.name;
+    let result;
+    if (quoted && node.value === "") {
+        result = {
+            expression: null,
+            tokens: [],
+            comments: [],
+            variables: [],
+            references: [],
+        };
+    }
+    else if (directiveName === "for") {
+        result = parseVForExpression(node.value, locationCalculator, parserOptions);
+    }
+    else if (directiveName === "on" && directiveKey.argument != null) {
+        result = parseVOnExpression(node.value, locationCalculator, parserOptions);
+    }
+    else if (directiveName === "slot" ||
+        directiveName === "slot-scope" ||
+        (tagName === "template" && directiveName === "scope")) {
+        result = parseSlotScopeExpression(node.value, locationCalculator, parserOptions);
+    }
+    else if (directiveName === "bind") {
+        result = parseExpression(node.value, locationCalculator, parserOptions, { allowFilters: true });
+    }
+    else {
+        result = parseExpression(node.value, locationCalculator, parserOptions);
+    }
+    if (quoted) {
+        result.tokens.unshift(createSimpleToken("Punctuator", node.range[0], node.range[0] + 1, firstChar, globalLocationCalculator));
+        result.tokens.push(createSimpleToken("Punctuator", node.range[1] - 1, node.range[1], firstChar, globalLocationCalculator));
+    }
+    return result;
+}
+function resolveReference(referene, element) {
+    let node = element;
+    while (node != null && node.type === "VElement") {
+        for (const variable of node.variables) {
+            if (variable.id.name === referene.id.name) {
+                referene.variable = variable;
+                variable.references.push(referene);
+                return;
+            }
+        }
+        node = node.parent;
+    }
+}
+function convertToDirective(code, parserOptions, locationCalculator, node) {
+    debug('[template] convert to directive: %s="%s" %j', node.key.name, node.value && node.value.value, node.range);
+    const document = getOwnerDocument(node);
+    const directive = node;
+    directive.directive = true;
+    directive.key = createDirectiveKey(node.key, document, parserOptions, locationCalculator);
+    const { argument } = directive.key;
+    if (argument &&
+        argument.type === "VIdentifier" &&
+        argument.name.startsWith("[")) {
+        const nextChar = code[argument.range[1]];
+        if (nextChar == null || invalidDynamicArgumentNextChar.test(nextChar)) {
+            const char = nextChar == null ? "EOF" : JSON.stringify(nextChar).slice(1, -1);
+            insertError(document, new ParseError(`Dynamic argument cannot contain the '${char}' character.`, undefined, argument.range[1], argument.loc.end.line, argument.loc.end.column));
+        }
+    }
+    if (node.value == null) {
+        return;
+    }
+    try {
+        const ret = parseAttributeValue(code, parserOptions, locationCalculator, node.value, node.parent.parent.name, directive.key);
+        directive.value = {
+            type: "VExpressionContainer",
+            range: node.value.range,
+            loc: node.value.loc,
+            parent: directive,
+            expression: ret.expression,
+            references: ret.references,
+        };
+        if (ret.expression != null) {
+            ret.expression.parent = directive.value;
+        }
+        for (const variable of ret.variables) {
+            node.parent.parent.variables.push(variable);
+        }
+        replaceTokens(document, node.value, ret.tokens);
+        insertComments(document, ret.comments);
+    }
+    catch (err) {
+        debug("[template] Parse error: %s", err);
+        if (ParseError.isParseError(err)) {
+            directive.value = {
+                type: "VExpressionContainer",
+                range: node.value.range,
+                loc: node.value.loc,
+                parent: directive,
+                expression: null,
+                references: [],
+            };
+            insertError(document, err);
+        }
+        else {
+            throw err;
+        }
+    }
+}
+function processMustache(parserOptions, globalLocationCalculator, node, mustache) {
+    const range = [
+        mustache.startToken.range[1],
+        mustache.endToken.range[0],
+    ];
+    debug("[template] convert mustache {{%s}} %j", mustache.value, range);
+    const document = getOwnerDocument(node);
+    try {
+        const locationCalculator = globalLocationCalculator.getSubCalculatorAfter(range[0]);
+        const ret = parseExpression(mustache.value, locationCalculator, parserOptions, { allowEmpty: true, allowFilters: true });
+        node.expression = ret.expression || null;
+        node.references = ret.references;
+        if (ret.expression != null) {
+            ret.expression.parent = node;
+        }
+        replaceTokens(document, { range }, ret.tokens);
+        insertComments(document, ret.comments);
+    }
+    catch (err) {
+        debug("[template] Parse error: %s", err);
+        if (ParseError.isParseError(err)) {
+            insertError(document, err);
+        }
+        else {
+            throw err;
+        }
+    }
+}
+function resolveReferences(container) {
+    let element = container.parent;
+    while (element != null && element.type !== "VElement") {
+        element = element.parent;
+    }
+    if (element != null) {
+        for (const reference of container.references) {
+            resolveReference(reference, element);
+        }
+    }
+}
+
+const SVG_ATTRIBUTE_NAME_MAP = new Map([
+    ["attributename", "attributeName"],
+    ["attributetype", "attributeType"],
+    ["basefrequency", "baseFrequency"],
+    ["baseprofile", "baseProfile"],
+    ["calcmode", "calcMode"],
+    ["clippathunits", "clipPathUnits"],
+    ["diffuseconstant", "diffuseConstant"],
+    ["edgemode", "edgeMode"],
+    ["filterunits", "filterUnits"],
+    ["glyphref", "glyphRef"],
+    ["gradienttransform", "gradientTransform"],
+    ["gradientunits", "gradientUnits"],
+    ["kernelmatrix", "kernelMatrix"],
+    ["kernelunitlength", "kernelUnitLength"],
+    ["keypoints", "keyPoints"],
+    ["keysplines", "keySplines"],
+    ["keytimes", "keyTimes"],
+    ["lengthadjust", "lengthAdjust"],
+    ["limitingconeangle", "limitingConeAngle"],
+    ["markerheight", "markerHeight"],
+    ["markerunits", "markerUnits"],
+    ["markerwidth", "markerWidth"],
+    ["maskcontentunits", "maskContentUnits"],
+    ["maskunits", "maskUnits"],
+    ["numoctaves", "numOctaves"],
+    ["pathlength", "pathLength"],
+    ["patterncontentunits", "patternContentUnits"],
+    ["patterntransform", "patternTransform"],
+    ["patternunits", "patternUnits"],
+    ["pointsatx", "pointsAtX"],
+    ["pointsaty", "pointsAtY"],
+    ["pointsatz", "pointsAtZ"],
+    ["preservealpha", "preserveAlpha"],
+    ["preserveaspectratio", "preserveAspectRatio"],
+    ["primitiveunits", "primitiveUnits"],
+    ["refx", "refX"],
+    ["refy", "refY"],
+    ["repeatcount", "repeatCount"],
+    ["repeatdur", "repeatDur"],
+    ["requiredextensions", "requiredExtensions"],
+    ["requiredfeatures", "requiredFeatures"],
+    ["specularconstant", "specularConstant"],
+    ["specularexponent", "specularExponent"],
+    ["spreadmethod", "spreadMethod"],
+    ["startoffset", "startOffset"],
+    ["stddeviation", "stdDeviation"],
+    ["stitchtiles", "stitchTiles"],
+    ["surfacescale", "surfaceScale"],
+    ["systemlanguage", "systemLanguage"],
+    ["tablevalues", "tableValues"],
+    ["targetx", "targetX"],
+    ["targety", "targetY"],
+    ["textlength", "textLength"],
+    ["viewbox", "viewBox"],
+    ["viewtarget", "viewTarget"],
+    ["xchannelselector", "xChannelSelector"],
+    ["ychannelselector", "yChannelSelector"],
+    ["zoomandpan", "zoomAndPan"],
+]);
+const MATHML_ATTRIBUTE_NAME_MAP = new Map([
+    ["definitionurl", "definitionUrl"]
+]);
+
+const HTML_VOID_ELEMENT_TAGS = new Set([
+    "area", "base", "br", "col", "embed", "hr", "img", "input", "link", "meta",
+    "param", "source", "track", "wbr",
+]);
+const HTML_CAN_BE_LEFT_OPEN_TAGS = new Set([
+    "colgroup", "li", "options", "p", "td", "tfoot", "th", "thead",
+    "tr", "source",
+]);
+const HTML_NON_FHRASING_TAGS = new Set([
+    "address", "article", "aside", "base", "blockquote", "body", "caption",
+    "col", "colgroup", "dd", "details", "dialog", "div", "dl", "dt", "fieldset",
+    "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5",
+    "h6", "head", "header", "hgroup", "hr", "html", "legend", "li", "menuitem",
+    "meta", "optgroup", "option", "param", "rp", "rt", "source", "style",
+    "summary", "tbody", "td", "tfoot", "th", "thead", "title", "tr", "track",
+]);
+const HTML_RCDATA_TAGS = new Set([
+    "title", "textarea",
+]);
+const HTML_RAWTEXT_TAGS = new Set([
+    "style", "xmp", "iframe", "noembed", "noframes", "noscript", "script",
+]);
+const SVG_TAGS = new Set([
+    "a", "altGlyph", "altGlyphDef", "altGlyphItem", "animate", "animateColor",
+    "animateMotion", "animateTransform", "animation", "audio", "canvas",
+    "circle", "clipPath", "color-profile", "cursor", "defs", "desc", "discard",
+    "ellipse", "feBlend", "feColorMatrix", "feComponentTransfer", "feComposite",
+    "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap",
+    "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB",
+    "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode",
+    "feMorphology", "feOffset", "fePointLight", "feSpecularLighting",
+    "feSpotLight", "feTile", "feTurbulence", "filter", "font", "font-face",
+    "font-face-format", "font-face-name", "font-face-src", "font-face-uri",
+    "foreignObject", "g", "glyph", "glyphRef", "handler", "hatch", "hatchpath",
+    "hkern", "iframe", "image", "line", "linearGradient", "listener", "marker",
+    "mask", "mesh", "meshgradient", "meshpatch", "meshrow", "metadata",
+    "missing-glyph", "mpath", "path", "pattern", "polygon", "polyline",
+    "prefetch", "radialGradient", "rect", "script", "set", "solidColor",
+    "solidcolor", "stop", "style", "svg", "switch", "symbol", "tbreak", "text",
+    "textArea", "textPath", "title", "tref", "tspan", "unknown", "use", "video",
+    "view", "vkern",
+]);
+const SVG_ELEMENT_NAME_MAP = new Map();
+for (const name of SVG_TAGS) {
+    if (/[A-Z]/.test(name)) {
+        SVG_ELEMENT_NAME_MAP.set(name.toLowerCase(), name);
+    }
+}
+
+const DUMMY_PARENT$1 = Object.freeze({});
+function concat(text, token) {
+    return text + token.value;
+}
+class IntermediateTokenizer {
+    constructor(tokenizer) {
+        this.tokenizer = tokenizer;
+        this.currentToken = null;
+        this.attribute = null;
+        this.attributeNames = new Set();
+        this.expressionStartToken = null;
+        this.expressionTokens = [];
+        this.tokens = [];
+        this.comments = [];
+    }
+    get text() {
+        return this.tokenizer.text;
+    }
+    get errors() {
+        return this.tokenizer.errors;
+    }
+    get state() {
+        return this.tokenizer.state;
+    }
+    set state(value) {
+        this.tokenizer.state = value;
+    }
+    get namespace() {
+        return this.tokenizer.namespace;
+    }
+    set namespace(value) {
+        this.tokenizer.namespace = value;
+    }
+    get expressionEnabled() {
+        return this.tokenizer.expressionEnabled;
+    }
+    set expressionEnabled(value) {
+        this.tokenizer.expressionEnabled = value;
+    }
+    nextToken() {
+        let token = null;
+        let result = null;
+        while (result == null && (token = this.tokenizer.nextToken()) != null) {
+            result = this[token.type](token);
+        }
+        if (result == null && token == null && this.currentToken != null) {
+            result = this.commit();
+        }
+        return result;
+    }
+    commit() {
+        assert(this.currentToken != null || this.expressionStartToken != null);
+        let token = this.currentToken;
+        this.currentToken = null;
+        this.attribute = null;
+        if (this.expressionStartToken != null) {
+            const start = this.expressionStartToken;
+            const end = last(this.expressionTokens) || start;
+            const value = this.expressionTokens.reduce(concat, start.value);
+            this.expressionStartToken = null;
+            this.expressionTokens = [];
+            if (token == null) {
+                token = {
+                    type: "Text",
+                    range: [start.range[0], end.range[1]],
+                    loc: { start: start.loc.start, end: end.loc.end },
+                    value,
+                };
+            }
+            else if (token.type === "Text") {
+                token.range[1] = end.range[1];
+                token.loc.end = end.loc.end;
+                token.value += value;
+            }
+            else {
+                throw new Error("unreachable");
+            }
+        }
+        return token;
+    }
+    reportParseError(token, code) {
+        const error = ParseError.fromCode(code, token.range[0], token.loc.start.line, token.loc.start.column);
+        this.errors.push(error);
+        debug("[html] syntax error:", error.message);
+    }
+    processComment(token) {
+        this.comments.push(token);
+        if (this.currentToken != null && this.currentToken.type === "Text") {
+            return this.commit();
+        }
+        return null;
+    }
+    processText(token) {
+        this.tokens.push(token);
+        let result = null;
+        if (this.expressionStartToken != null) {
+            const lastToken = last(this.expressionTokens) || this.expressionStartToken;
+            if (lastToken.range[1] === token.range[0]) {
+                this.expressionTokens.push(token);
+                return null;
+            }
+            result = this.commit();
+        }
+        else if (this.currentToken != null) {
+            if (this.currentToken.type === "Text" &&
+                this.currentToken.range[1] === token.range[0]) {
+                this.currentToken.value += token.value;
+                this.currentToken.range[1] = token.range[1];
+                this.currentToken.loc.end = token.loc.end;
+                return null;
+            }
+            result = this.commit();
+        }
+        assert(this.currentToken == null);
+        this.currentToken = {
+            type: "Text",
+            range: [token.range[0], token.range[1]],
+            loc: { start: token.loc.start, end: token.loc.end },
+            value: token.value,
+        };
+        return result;
+    }
+    HTMLAssociation(token) {
+        this.tokens.push(token);
+        if (this.attribute != null) {
+            this.attribute.range[1] = token.range[1];
+            this.attribute.loc.end = token.loc.end;
+            if (this.currentToken == null ||
+                this.currentToken.type !== "StartTag") {
+                throw new Error("unreachable");
+            }
+            this.currentToken.range[1] = token.range[1];
+            this.currentToken.loc.end = token.loc.end;
+        }
+        return null;
+    }
+    HTMLBogusComment(token) {
+        return this.processComment(token);
+    }
+    HTMLCDataText(token) {
+        return this.processText(token);
+    }
+    HTMLComment(token) {
+        return this.processComment(token);
+    }
+    HTMLEndTagOpen(token) {
+        this.tokens.push(token);
+        let result = null;
+        if (this.currentToken != null || this.expressionStartToken != null) {
+            result = this.commit();
+        }
+        this.currentToken = {
+            type: "EndTag",
+            range: [token.range[0], token.range[1]],
+            loc: { start: token.loc.start, end: token.loc.end },
+            name: token.value,
+        };
+        return result;
+    }
+    HTMLIdentifier(token) {
+        this.tokens.push(token);
+        if (this.currentToken == null ||
+            this.currentToken.type === "Text" ||
+            this.currentToken.type === "Mustache") {
+            throw new Error("unreachable");
+        }
+        if (this.currentToken.type === "EndTag") {
+            this.reportParseError(token, "end-tag-with-attributes");
+            return null;
+        }
+        if (this.attributeNames.has(token.value)) {
+            this.reportParseError(token, "duplicate-attribute");
+        }
+        this.attributeNames.add(token.value);
+        this.attribute = {
+            type: "VAttribute",
+            range: [token.range[0], token.range[1]],
+            loc: { start: token.loc.start, end: token.loc.end },
+            parent: DUMMY_PARENT$1,
+            directive: false,
+            key: {
+                type: "VIdentifier",
+                range: [token.range[0], token.range[1]],
+                loc: { start: token.loc.start, end: token.loc.end },
+                parent: DUMMY_PARENT$1,
+                name: token.value,
+                rawName: this.text.slice(token.range[0], token.range[1]),
+            },
+            value: null,
+        };
+        this.attribute.key.parent = this.attribute;
+        this.currentToken.range[1] = token.range[1];
+        this.currentToken.loc.end = token.loc.end;
+        this.currentToken.attributes.push(this.attribute);
+        return null;
+    }
+    HTMLLiteral(token) {
+        this.tokens.push(token);
+        if (this.attribute != null) {
+            this.attribute.range[1] = token.range[1];
+            this.attribute.loc.end = token.loc.end;
+            this.attribute.value = {
+                type: "VLiteral",
+                range: [token.range[0], token.range[1]],
+                loc: { start: token.loc.start, end: token.loc.end },
+                parent: this.attribute,
+                value: token.value,
+            };
+            if (this.currentToken == null ||
+                this.currentToken.type !== "StartTag") {
+                throw new Error("unreachable");
+            }
+            this.currentToken.range[1] = token.range[1];
+            this.currentToken.loc.end = token.loc.end;
+        }
+        return null;
+    }
+    HTMLRCDataText(token) {
+        return this.processText(token);
+    }
+    HTMLRawText(token) {
+        return this.processText(token);
+    }
+    HTMLSelfClosingTagClose(token) {
+        this.tokens.push(token);
+        if (this.currentToken == null || this.currentToken.type === "Text") {
+            throw new Error("unreachable");
+        }
+        if (this.currentToken.type === "StartTag") {
+            this.currentToken.selfClosing = true;
+        }
+        else {
+            this.reportParseError(token, "end-tag-with-trailing-solidus");
+        }
+        this.currentToken.range[1] = token.range[1];
+        this.currentToken.loc.end = token.loc.end;
+        return this.commit();
+    }
+    HTMLTagClose(token) {
+        this.tokens.push(token);
+        if (this.currentToken == null || this.currentToken.type === "Text") {
+            throw new Error("unreachable");
+        }
+        this.currentToken.range[1] = token.range[1];
+        this.currentToken.loc.end = token.loc.end;
+        return this.commit();
+    }
+    HTMLTagOpen(token) {
+        this.tokens.push(token);
+        let result = null;
+        if (this.currentToken != null || this.expressionStartToken != null) {
+            result = this.commit();
+        }
+        this.currentToken = {
+            type: "StartTag",
+            range: [token.range[0], token.range[1]],
+            loc: { start: token.loc.start, end: token.loc.end },
+            name: token.value,
+            rawName: this.text.slice(token.range[0] + 1, token.range[1]),
+            selfClosing: false,
+            attributes: [],
+        };
+        this.attribute = null;
+        this.attributeNames.clear();
+        return result;
+    }
+    HTMLText(token) {
+        return this.processText(token);
+    }
+    HTMLWhitespace(token) {
+        return this.processText(token);
+    }
+    VExpressionStart(token) {
+        if (this.expressionStartToken != null) {
+            return this.processText(token);
+        }
+        const separated = this.currentToken != null &&
+            this.currentToken.range[1] !== token.range[0];
+        const result = separated ? this.commit() : null;
+        this.tokens.push(token);
+        this.expressionStartToken = token;
+        return result;
+    }
+    VExpressionEnd(token) {
+        if (this.expressionStartToken == null) {
+            return this.processText(token);
+        }
+        const start = this.expressionStartToken;
+        const end = last(this.expressionTokens) || start;
+        if (token.range[0] === start.range[1]) {
+            this.tokens.pop();
+            this.expressionStartToken = null;
+            const result = this.processText(start);
+            this.processText(token);
+            return result;
+        }
+        if (end.range[1] !== token.range[0]) {
+            const result = this.commit();
+            this.processText(token);
+            return result;
+        }
+        const value = this.expressionTokens.reduce(concat, "");
+        this.tokens.push(token);
+        this.expressionStartToken = null;
+        this.expressionTokens = [];
+        const result = this.currentToken != null ? this.commit() : null;
+        this.currentToken = {
+            type: "Mustache",
+            range: [start.range[0], token.range[1]],
+            loc: { start: start.loc.start, end: token.loc.end },
+            value,
+            startToken: start,
+            endToken: token,
+        };
+        return result || this.commit();
+    }
+}
+
+function isSFCFile(parserOptions) {
+    if (parserOptions.filePath === "<input>") {
+        return true;
+    }
+    return path.extname(parserOptions.filePath || "unknown.vue") === ".vue";
+}
+
+const DIRECTIVE_NAME = /^(?:v-|[.:@#]).*[^.:@#]$/u;
+const DT_DD = /^d[dt]$/u;
+const DUMMY_PARENT$2 = Object.freeze({});
+function isMathMLIntegrationPoint(element) {
+    if (element.namespace === NS.MathML) {
+        const name = element.name;
+        return (name === "mi" ||
+            name === "mo" ||
+            name === "mn" ||
+            name === "ms" ||
+            name === "mtext");
+    }
+    return false;
+}
+function isHTMLIntegrationPoint(element) {
+    if (element.namespace === NS.MathML) {
+        return (element.name === "annotation-xml" &&
+            element.startTag.attributes.some((a) => a.directive === false &&
+                a.key.name === "encoding" &&
+                a.value != null &&
+                (a.value.value === "text/html" ||
+                    a.value.value === "application/xhtml+xml")));
+    }
+    if (element.namespace === NS.SVG) {
+        const name = element.name;
+        return name === "foreignObject" || name === "desc" || name === "title";
+    }
+    return false;
+}
+function adjustElementName(name, namespace) {
+    if (namespace === NS.SVG) {
+        return SVG_ELEMENT_NAME_MAP.get(name) || name;
+    }
+    return name;
+}
+function adjustAttributeName(name, namespace) {
+    if (namespace === NS.SVG) {
+        return SVG_ATTRIBUTE_NAME_MAP.get(name) || name;
+    }
+    if (namespace === NS.MathML) {
+        return MATHML_ATTRIBUTE_NAME_MAP.get(name) || name;
+    }
+    return name;
+}
+function propagateEndLocation(node) {
+    const lastChild = (node.type === "VElement" ? node.endTag : null) || last(node.children);
+    if (lastChild != null) {
+        node.range[1] = lastChild.range[1];
+        node.loc.end = lastChild.loc.end;
+    }
+}
+class Parser {
+    constructor(tokenizer, parserOptions) {
+        this.tokenizer = new IntermediateTokenizer(tokenizer);
+        this.locationCalculator = new LocationCalculator(tokenizer.gaps, tokenizer.lineTerminators);
+        this.parserOptions = parserOptions;
+        this.isSFC = isSFCFile(parserOptions);
+        this.document = {
+            type: "VDocumentFragment",
+            range: [0, 0],
+            loc: {
+                start: { line: 1, column: 0 },
+                end: { line: 1, column: 0 },
+            },
+            parent: null,
+            children: [],
+            tokens: this.tokens,
+            comments: this.comments,
+            errors: this.errors,
+        };
+        this.elementStack = [];
+        this.vPreElement = null;
+    }
+    get text() {
+        return this.tokenizer.text;
+    }
+    get tokens() {
+        return this.tokenizer.tokens;
+    }
+    get comments() {
+        return this.tokenizer.comments;
+    }
+    get errors() {
+        return this.tokenizer.errors;
+    }
+    get namespace() {
+        return this.tokenizer.namespace;
+    }
+    set namespace(value) {
+        this.tokenizer.namespace = value;
+    }
+    get expressionEnabled() {
+        return this.tokenizer.expressionEnabled;
+    }
+    set expressionEnabled(value) {
+        this.tokenizer.expressionEnabled = value;
+    }
+    get currentNode() {
+        return last(this.elementStack) || this.document;
+    }
+    get isInVPreElement() {
+        return this.vPreElement != null;
+    }
+    parse() {
+        let token = null;
+        while ((token = this.tokenizer.nextToken()) != null) {
+            this[token.type](token);
+        }
+        this.popElementStackUntil(0);
+        propagateEndLocation(this.document);
+        return this.document;
+    }
+    reportParseError(token, code) {
+        const error = ParseError.fromCode(code, token.range[0], token.loc.start.line, token.loc.start.column);
+        this.errors.push(error);
+        debug("[html] syntax error:", error.message);
+    }
+    popElementStack() {
+        assert(this.elementStack.length >= 1);
+        const element = this.elementStack.pop();
+        propagateEndLocation(element);
+        const current = this.currentNode;
+        this.namespace =
+            current.type === "VElement" ? current.namespace : NS.HTML;
+        if (this.vPreElement === element) {
+            this.vPreElement = null;
+            this.expressionEnabled = true;
+        }
+        if (this.elementStack.length === 0) {
+            this.expressionEnabled = false;
+        }
+    }
+    popElementStackUntil(index) {
+        while (this.elementStack.length > index) {
+            this.popElementStack();
+        }
+    }
+    detectNamespace(token) {
+        const name = token.name;
+        let ns = this.namespace;
+        if (ns === NS.MathML || ns === NS.SVG) {
+            const element = this.currentNode;
+            if (element.type === "VElement") {
+                if (element.namespace === NS.MathML &&
+                    element.name === "annotation-xml" &&
+                    name === "svg") {
+                    return NS.SVG;
+                }
+                if (isHTMLIntegrationPoint(element) ||
+                    (isMathMLIntegrationPoint(element) &&
+                        name !== "mglyph" &&
+                        name !== "malignmark")) {
+                    ns = NS.HTML;
+                }
+            }
+        }
+        if (ns === NS.HTML) {
+            if (name === "svg") {
+                return NS.SVG;
+            }
+            if (name === "math") {
+                return NS.MathML;
+            }
+        }
+        if (name === "template") {
+            const xmlns = token.attributes.find((a) => a.key.name === "xmlns");
+            const value = xmlns && xmlns.value && xmlns.value.value;
+            if (value === NS.HTML || value === NS.MathML || value === NS.SVG) {
+                return value;
+            }
+        }
+        return ns;
+    }
+    closeCurrentElementIfNecessary(name) {
+        const element = this.currentNode;
+        if (element.type !== "VElement") {
+            return;
+        }
+        if (element.name === "p" && HTML_NON_FHRASING_TAGS.has(name)) {
+            this.popElementStack();
+        }
+        if (element.name === name && HTML_CAN_BE_LEFT_OPEN_TAGS.has(name)) {
+            this.popElementStack();
+        }
+        if (DT_DD.test(element.name) && DT_DD.test(name)) {
+            this.popElementStack();
+        }
+    }
+    processAttribute(node, namespace) {
+        const tagName = node.parent.parent.name;
+        const attrName = node.key.name;
+        if ((this.expressionEnabled ||
+            (attrName === "v-pre" && !this.isInVPreElement)) &&
+            (DIRECTIVE_NAME.test(attrName) ||
+                attrName === "slot-scope" ||
+                (tagName === "template" && attrName === "scope"))) {
+            convertToDirective(this.text, this.parserOptions, this.locationCalculator, node);
+            return;
+        }
+        const key = (node.key.name = adjustAttributeName(node.key.name, namespace));
+        const value = node.value && node.value.value;
+        if (key === "xmlns" && value !== namespace) {
+            this.reportParseError(node, "x-invalid-namespace");
+        }
+        else if (key === "xmlns:xlink" && value !== NS.XLink) {
+            this.reportParseError(node, "x-invalid-namespace");
+        }
+    }
+    StartTag(token) {
+        var _a;
+        debug("[html] StartTag %j", token);
+        this.closeCurrentElementIfNecessary(token.name);
+        const parent = this.currentNode;
+        const namespace = this.detectNamespace(token);
+        const element = {
+            type: "VElement",
+            range: [token.range[0], token.range[1]],
+            loc: { start: token.loc.start, end: token.loc.end },
+            parent,
+            name: adjustElementName(token.name, namespace),
+            rawName: token.rawName,
+            namespace,
+            startTag: {
+                type: "VStartTag",
+                range: token.range,
+                loc: token.loc,
+                parent: DUMMY_PARENT$2,
+                selfClosing: token.selfClosing,
+                attributes: token.attributes,
+            },
+            children: [],
+            endTag: null,
+            variables: [],
+        };
+        const hasVPre = !this.isInVPreElement &&
+            token.attributes.some((a) => a.key.name === "v-pre");
+        if (hasVPre) {
+            this.expressionEnabled = false;
+        }
+        parent.children.push(element);
+        element.startTag.parent = element;
+        for (const attribute of token.attributes) {
+            attribute.parent = element.startTag;
+            this.processAttribute(attribute, namespace);
+        }
+        for (const attribute of element.startTag.attributes) {
+            if (attribute.directive) {
+                if (attribute.key.argument != null &&
+                    attribute.key.argument.type === "VExpressionContainer") {
+                    resolveReferences(attribute.key.argument);
+                }
+                if (attribute.value != null) {
+                    resolveReferences(attribute.value);
+                }
+            }
+        }
+        const isVoid = namespace === NS.HTML && HTML_VOID_ELEMENT_TAGS.has(element.name);
+        if (token.selfClosing && !isVoid && namespace === NS.HTML) {
+            this.reportParseError(token, "non-void-html-element-start-tag-with-trailing-solidus");
+        }
+        if (token.selfClosing || isVoid) {
+            this.expressionEnabled = !this.isInVPreElement;
+            return;
+        }
+        this.elementStack.push(element);
+        if (hasVPre) {
+            assert(this.vPreElement === null);
+            this.vPreElement = element;
+        }
+        this.namespace = namespace;
+        if (namespace === NS.HTML) {
+            if (element.parent.type === "VDocumentFragment") {
+                const langAttr = element.startTag.attributes.find((a) => !a.directive && a.key.name === "lang");
+                const lang = (_a = langAttr === null || langAttr === void 0 ? void 0 : langAttr.value) === null || _a === void 0 ? void 0 : _a.value;
+                if (element.name === "template") {
+                    if (lang && lang !== "html") {
+                        this.tokenizer.state = "RAWTEXT";
+                    }
+                    this.expressionEnabled = true;
+                }
+                else if (this.isSFC) {
+                    if (!lang || lang !== "html") {
+                        this.tokenizer.state = "RAWTEXT";
+                    }
+                }
+                else {
+                    if (HTML_RCDATA_TAGS.has(element.name)) {
+                        this.tokenizer.state = "RCDATA";
+                    }
+                    if (HTML_RAWTEXT_TAGS.has(element.name)) {
+                        this.tokenizer.state = "RAWTEXT";
+                    }
+                }
+            }
+            else {
+                if (HTML_RCDATA_TAGS.has(element.name)) {
+                    this.tokenizer.state = "RCDATA";
+                }
+                if (HTML_RAWTEXT_TAGS.has(element.name)) {
+                    this.tokenizer.state = "RAWTEXT";
+                }
+            }
+        }
+    }
+    EndTag(token) {
+        debug("[html] EndTag %j", token);
+        const i = findLastIndex(this.elementStack, (el) => el.name.toLowerCase() === token.name);
+        if (i === -1) {
+            this.reportParseError(token, "x-invalid-end-tag");
+            return;
+        }
+        const element = this.elementStack[i];
+        element.endTag = {
+            type: "VEndTag",
+            range: token.range,
+            loc: token.loc,
+            parent: element,
+        };
+        this.popElementStackUntil(i);
+    }
+    Text(token) {
+        debug("[html] Text %j", token);
+        const parent = this.currentNode;
+        parent.children.push({
+            type: "VText",
+            range: token.range,
+            loc: token.loc,
+            parent,
+            value: token.value,
+        });
+    }
+    Mustache(token) {
+        debug("[html] Mustache %j", token);
+        const parent = this.currentNode;
+        const container = {
+            type: "VExpressionContainer",
+            range: token.range,
+            loc: token.loc,
+            parent,
+            expression: null,
+            references: [],
+        };
+        processMustache(this.parserOptions, this.locationCalculator, container, token);
+        parent.children.push(container);
+        resolveReferences(container);
+    }
+}
+
+const alternativeCR = new Map([[128, 8364], [130, 8218], [131, 402], [132, 8222], [133, 8230], [134, 8224], [135, 8225], [136, 710], [137, 8240], [138, 352], [139, 8249], [140, 338], [142, 381], [145, 8216], [146, 8217], [147, 8220], [148, 8221], [149, 8226], [150, 8211], [151, 8212], [152, 732], [153, 8482], [154, 353], [155, 8250], [156, 339], [158, 382], [159, 376]]);
+
+const entitySets = [{ "length": 32, "entities": { "CounterClockwiseContourIntegral;": [8755] } }, { "length": 25, "entities": { "ClockwiseContourIntegral;": [8754], "DoubleLongLeftRightArrow;": [10234] } }, { "length": 24, "entities": { "NotNestedGreaterGreater;": [10914, 824] } }, { "length": 23, "entities": { "DiacriticalDoubleAcute;": [733], "NotSquareSupersetEqual;": [8931] } }, { "length": 22, "entities": { "CloseCurlyDoubleQuote;": [8221], "DoubleContourIntegral;": [8751], "FilledVerySmallSquare;": [9642], "NegativeVeryThinSpace;": [8203], "NotPrecedesSlantEqual;": [8928], "NotRightTriangleEqual;": [8941], "NotSucceedsSlantEqual;": [8929] } }, { "length": 21, "entities": { "CapitalDifferentialD;": [8517], "DoubleLeftRightArrow;": [8660], "DoubleLongRightArrow;": [10233], "EmptyVerySmallSquare;": [9643], "NestedGreaterGreater;": [8811], "NotDoubleVerticalBar;": [8742], "NotGreaterSlantEqual;": [10878, 824], "NotLeftTriangleEqual;": [8940], "NotSquareSubsetEqual;": [8930], "OpenCurlyDoubleQuote;": [8220], "ReverseUpEquilibrium;": [10607] } }, { "length": 20, "entities": { "DoubleLongLeftArrow;": [10232], "DownLeftRightVector;": [10576], "LeftArrowRightArrow;": [8646], "NegativeMediumSpace;": [8203], "NotGreaterFullEqual;": [8807, 824], "NotRightTriangleBar;": [10704, 824], "RightArrowLeftArrow;": [8644], "SquareSupersetEqual;": [8850], "leftrightsquigarrow;": [8621] } }, { "length": 19, "entities": { "DownRightTeeVector;": [10591], "DownRightVectorBar;": [10583], "LongLeftRightArrow;": [10231], "Longleftrightarrow;": [10234], "NegativeThickSpace;": [8203], "NotLeftTriangleBar;": [10703, 824], "PrecedesSlantEqual;": [8828], "ReverseEquilibrium;": [8651], "RightDoubleBracket;": [10215], "RightDownTeeVector;": [10589], "RightDownVectorBar;": [10581], "RightTriangleEqual;": [8885], "SquareIntersection;": [8851], "SucceedsSlantEqual;": [8829], "blacktriangleright;": [9656], "longleftrightarrow;": [10231] } }, { "length": 18, "entities": { "DoubleUpDownArrow;": [8661], "DoubleVerticalBar;": [8741], "DownLeftTeeVector;": [10590], "DownLeftVectorBar;": [10582], "FilledSmallSquare;": [9724], "GreaterSlantEqual;": [10878], "LeftDoubleBracket;": [10214], "LeftDownTeeVector;": [10593], "LeftDownVectorBar;": [10585], "LeftTriangleEqual;": [8884], "NegativeThinSpace;": [8203], "NotGreaterGreater;": [8811, 824], "NotLessSlantEqual;": [10877, 824], "NotNestedLessLess;": [10913, 824], "NotReverseElement;": [8716], "NotSquareSuperset;": [8848, 824], "NotTildeFullEqual;": [8775], "RightAngleBracket;": [10217], "RightUpDownVector;": [10575], "SquareSubsetEqual;": [8849], "VerticalSeparator;": [10072], "blacktriangledown;": [9662], "blacktriangleleft;": [9666], "leftrightharpoons;": [8651], "rightleftharpoons;": [8652], "twoheadrightarrow;": [8608] } }, { "length": 17, "entities": { "DiacriticalAcute;": [180], "DiacriticalGrave;": [96], "DiacriticalTilde;": [732], "DoubleRightArrow;": [8658], "DownArrowUpArrow;": [8693], "EmptySmallSquare;": [9723], "GreaterEqualLess;": [8923], "GreaterFullEqual;": [8807], "LeftAngleBracket;": [10216], "LeftUpDownVector;": [10577], "LessEqualGreater;": [8922], "NonBreakingSpace;": [160], "NotPrecedesEqual;": [10927, 824], "NotRightTriangle;": [8939], "NotSucceedsEqual;": [10928, 824], "NotSucceedsTilde;": [8831, 824], "NotSupersetEqual;": [8841], "RightTriangleBar;": [10704], "RightUpTeeVector;": [10588], "RightUpVectorBar;": [10580], "UnderParenthesis;": [9181], "UpArrowDownArrow;": [8645], "circlearrowright;": [8635], "downharpoonright;": [8642], "ntrianglerighteq;": [8941], "rightharpoondown;": [8641], "rightrightarrows;": [8649], "twoheadleftarrow;": [8606], "vartriangleright;": [8883] } }, { "length": 16, "entities": { "CloseCurlyQuote;": [8217], "ContourIntegral;": [8750], "DoubleDownArrow;": [8659], "DoubleLeftArrow;": [8656], "DownRightVector;": [8641], "LeftRightVector;": [10574], "LeftTriangleBar;": [10703], "LeftUpTeeVector;": [10592], "LeftUpVectorBar;": [10584], "LowerRightArrow;": [8600], "NotGreaterEqual;": [8817], "NotGreaterTilde;": [8821], "NotHumpDownHump;": [8782, 824], "NotLeftTriangle;": [8938], "NotSquareSubset;": [8847, 824], "OverParenthesis;": [9180], "RightDownVector;": [8642], "ShortRightArrow;": [8594], "UpperRightArrow;": [8599], "bigtriangledown;": [9661], "circlearrowleft;": [8634], "curvearrowright;": [8631], "downharpoonleft;": [8643], "leftharpoondown;": [8637], "leftrightarrows;": [8646], "nLeftrightarrow;": [8654], "nleftrightarrow;": [8622], "ntrianglelefteq;": [8940], "rightleftarrows;": [8644], "rightsquigarrow;": [8605], "rightthreetimes;": [8908], "straightepsilon;": [1013], "trianglerighteq;": [8885], "vartriangleleft;": [8882] } }, { "length": 15, "entities": { "DiacriticalDot;": [729], "DoubleRightTee;": [8872], "DownLeftVector;": [8637], "GreaterGreater;": [10914], "HorizontalLine;": [9472], "InvisibleComma;": [8291], "InvisibleTimes;": [8290], "LeftDownVector;": [8643], "LeftRightArrow;": [8596], "Leftrightarrow;": [8660], "LessSlantEqual;": [10877], "LongRightArrow;": [10230], "Longrightarrow;": [10233], "LowerLeftArrow;": [8601], "NestedLessLess;": [8810], "NotGreaterLess;": [8825], "NotLessGreater;": [8824], "NotSubsetEqual;": [8840], "NotVerticalBar;": [8740], "OpenCurlyQuote;": [8216], "ReverseElement;": [8715], "RightTeeVector;": [10587], "RightVectorBar;": [10579], "ShortDownArrow;": [8595], "ShortLeftArrow;": [8592], "SquareSuperset;": [8848], "TildeFullEqual;": [8773], "UpperLeftArrow;": [8598], "ZeroWidthSpace;": [8203], "curvearrowleft;": [8630], "doublebarwedge;": [8966], "downdownarrows;": [8650], "hookrightarrow;": [8618], "leftleftarrows;": [8647], "leftrightarrow;": [8596], "leftthreetimes;": [8907], "longrightarrow;": [10230], "looparrowright;": [8620], "nshortparallel;": [8742], "ntriangleright;": [8939], "rightarrowtail;": [8611], "rightharpoonup;": [8640], "trianglelefteq;": [8884], "upharpoonright;": [8638] } }, { "length": 14, "entities": { "ApplyFunction;": [8289], "DifferentialD;": [8518], "DoubleLeftTee;": [10980], "DoubleUpArrow;": [8657], "LeftTeeVector;": [10586], "LeftVectorBar;": [10578], "LessFullEqual;": [8806], "LongLeftArrow;": [10229], "Longleftarrow;": [10232], "NotEqualTilde;": [8770, 824], "NotTildeEqual;": [8772], "NotTildeTilde;": [8777], "Poincareplane;": [8460], "PrecedesEqual;": [10927], "PrecedesTilde;": [8830], "RightArrowBar;": [8677], "RightTeeArrow;": [8614], "RightTriangle;": [8883], "RightUpVector;": [8638], "SucceedsEqual;": [10928], "SucceedsTilde;": [8831], "SupersetEqual;": [8839], "UpEquilibrium;": [10606], "VerticalTilde;": [8768], "VeryThinSpace;": [8202], "bigtriangleup;": [9651], "blacktriangle;": [9652], "divideontimes;": [8903], "fallingdotseq;": [8786], "hookleftarrow;": [8617], "leftarrowtail;": [8610], "leftharpoonup;": [8636], "longleftarrow;": [10229], "looparrowleft;": [8619], "measuredangle;": [8737], "ntriangleleft;": [8938], "shortparallel;": [8741], "smallsetminus;": [8726], "triangleright;": [9657], "upharpoonleft;": [8639], "varsubsetneqq;": [10955, 65024], "varsupsetneqq;": [10956, 65024] } }, { "length": 13, "entities": { "DownArrowBar;": [10515], "DownTeeArrow;": [8615], "ExponentialE;": [8519], "GreaterEqual;": [8805], "GreaterTilde;": [8819], "HilbertSpace;": [8459], "HumpDownHump;": [8782], "Intersection;": [8898], "LeftArrowBar;": [8676], "LeftTeeArrow;": [8612], "LeftTriangle;": [8882], "LeftUpVector;": [8639], "NotCongruent;": [8802], "NotHumpEqual;": [8783, 824], "NotLessEqual;": [8816], "NotLessTilde;": [8820], "Proportional;": [8733], "RightCeiling;": [8969], "RoundImplies;": [10608], "ShortUpArrow;": [8593], "SquareSubset;": [8847], "UnderBracket;": [9141], "VerticalLine;": [124], "blacklozenge;": [10731], "exponentiale;": [8519], "risingdotseq;": [8787], "triangledown;": [9663], "triangleleft;": [9667], "varsubsetneq;": [8842, 65024], "varsupsetneq;": [8843, 65024] } }, { "length": 12, "entities": { "CircleMinus;": [8854], "CircleTimes;": [8855], "Equilibrium;": [8652], "GreaterLess;": [8823], "LeftCeiling;": [8968], "LessGreater;": [8822], "MediumSpace;": [8287], "NotLessLess;": [8810, 824], "NotPrecedes;": [8832], "NotSucceeds;": [8833], "NotSuperset;": [8835, 8402], "OverBracket;": [9140], "RightVector;": [8640], "Rrightarrow;": [8667], "RuleDelayed;": [10740], "SmallCircle;": [8728], "SquareUnion;": [8852], "SubsetEqual;": [8838], "UpDownArrow;": [8597], "Updownarrow;": [8661], "VerticalBar;": [8739], "backepsilon;": [1014], "blacksquare;": [9642], "circledcirc;": [8858], "circleddash;": [8861], "curlyeqprec;": [8926], "curlyeqsucc;": [8927], "diamondsuit;": [9830], "eqslantless;": [10901], "expectation;": [8496], "nRightarrow;": [8655], "nrightarrow;": [8603], "preccurlyeq;": [8828], "precnapprox;": [10937], "quaternions;": [8461], "straightphi;": [981], "succcurlyeq;": [8829], "succnapprox;": [10938], "thickapprox;": [8776], "updownarrow;": [8597] } }, { "length": 11, "entities": { "Bernoullis;": [8492], "CirclePlus;": [8853], "EqualTilde;": [8770], "Fouriertrf;": [8497], "ImaginaryI;": [8520], "Laplacetrf;": [8466], "LeftVector;": [8636], "Lleftarrow;": [8666], "NotElement;": [8713], "NotGreater;": [8815], "Proportion;": [8759], "RightArrow;": [8594], "RightFloor;": [8971], "Rightarrow;": [8658], "ThickSpace;": [8287, 8202], "TildeEqual;": [8771], "TildeTilde;": [8776], "UnderBrace;": [9183], "UpArrowBar;": [10514], "UpTeeArrow;": [8613], "circledast;": [8859], "complement;": [8705], "curlywedge;": [8911], "eqslantgtr;": [10902], "gtreqqless;": [10892], "lessapprox;": [10885], "lesseqqgtr;": [10891], "lmoustache;": [9136], "longmapsto;": [10236], "mapstodown;": [8615], "mapstoleft;": [8612], "nLeftarrow;": [8653], "nleftarrow;": [8602], "nsubseteqq;": [10949, 824], "nsupseteqq;": [10950, 824], "precapprox;": [10935], "rightarrow;": [8594], "rmoustache;": [9137], "sqsubseteq;": [8849], "sqsupseteq;": [8850], "subsetneqq;": [10955], "succapprox;": [10936], "supsetneqq;": [10956], "upuparrows;": [8648], "varepsilon;": [1013], "varnothing;": [8709] } }, { "length": 10, "entities": { "Backslash;": [8726], "CenterDot;": [183], "CircleDot;": [8857], "Congruent;": [8801], "Coproduct;": [8720], "DoubleDot;": [168], "DownArrow;": [8595], "DownBreve;": [785], "Downarrow;": [8659], "HumpEqual;": [8783], "LeftArrow;": [8592], "LeftFloor;": [8970], "Leftarrow;": [8656], "LessTilde;": [8818], "Mellintrf;": [8499], "MinusPlus;": [8723], "NotCupCap;": [8813], "NotExists;": [8708], "NotSubset;": [8834, 8402], "OverBrace;": [9182], "PlusMinus;": [177], "Therefore;": [8756], "ThinSpace;": [8201], "TripleDot;": [8411], "UnionPlus;": [8846], "backprime;": [8245], "backsimeq;": [8909], "bigotimes;": [10754], "centerdot;": [183], "checkmark;": [10003], "complexes;": [8450], "dotsquare;": [8865], "downarrow;": [8595], "gtrapprox;": [10886], "gtreqless;": [8923], "gvertneqq;": [8809, 65024], "heartsuit;": [9829], "leftarrow;": [8592], "lesseqgtr;": [8922], "lvertneqq;": [8808, 65024], "ngeqslant;": [10878, 824], "nleqslant;": [10877, 824], "nparallel;": [8742], "nshortmid;": [8740], "nsubseteq;": [8840], "nsupseteq;": [8841], "pitchfork;": [8916], "rationals;": [8474], "spadesuit;": [9824], "subseteqq;": [10949], "subsetneq;": [8842], "supseteqq;": [10950], "supsetneq;": [8843], "therefore;": [8756], "triangleq;": [8796], "varpropto;": [8733] } }, { "length": 9, "entities": { "DDotrahd;": [10513], "DotEqual;": [8784], "Integral;": [8747], "LessLess;": [10913], "NotEqual;": [8800], "NotTilde;": [8769], "PartialD;": [8706], "Precedes;": [8826], "RightTee;": [8866], "Succeeds;": [8827], "SuchThat;": [8715], "Superset;": [8835], "Uarrocir;": [10569], "UnderBar;": [95], "andslope;": [10840], "angmsdaa;": [10664], "angmsdab;": [10665], "angmsdac;": [10666], "angmsdad;": [10667], "angmsdae;": [10668], "angmsdaf;": [10669], "angmsdag;": [10670], "angmsdah;": [10671], "angrtvbd;": [10653], "approxeq;": [8778], "awconint;": [8755], "backcong;": [8780], "barwedge;": [8965], "bbrktbrk;": [9142], "bigoplus;": [10753], "bigsqcup;": [10758], "biguplus;": [10756], "bigwedge;": [8896], "boxminus;": [8863], "boxtimes;": [8864], "bsolhsub;": [10184], "capbrcup;": [10825], "circledR;": [174], "circledS;": [9416], "cirfnint;": [10768], "clubsuit;": [9827], "cupbrcap;": [10824], "curlyvee;": [8910], "cwconint;": [8754], "doteqdot;": [8785], "dotminus;": [8760], "drbkarow;": [10512], "dzigrarr;": [10239], "elinters;": [9191], "emptyset;": [8709], "eqvparsl;": [10725], "fpartint;": [10765], "geqslant;": [10878], "gesdotol;": [10884], "gnapprox;": [10890], "hksearow;": [10533], "hkswarow;": [10534], "imagline;": [8464], "imagpart;": [8465], "infintie;": [10717], "integers;": [8484], "intercal;": [8890], "intlarhk;": [10775], "laemptyv;": [10676], "ldrushar;": [10571], "leqslant;": [10877], "lesdotor;": [10883], "llcorner;": [8990], "lnapprox;": [10889], "lrcorner;": [8991], "lurdshar;": [10570], "mapstoup;": [8613], "multimap;": [8888], "naturals;": [8469], "ncongdot;": [10861, 824], "notindot;": [8949, 824], "otimesas;": [10806], "parallel;": [8741], "plusacir;": [10787], "pointint;": [10773], "precneqq;": [10933], "precnsim;": [8936], "profalar;": [9006], "profline;": [8978], "profsurf;": [8979], "raemptyv;": [10675], "realpart;": [8476], "rppolint;": [10770], "rtriltri;": [10702], "scpolint;": [10771], "setminus;": [8726], "shortmid;": [8739], "smeparsl;": [10724], "sqsubset;": [8847], "sqsupset;": [8848], "subseteq;": [8838], "succneqq;": [10934], "succnsim;": [8937], "supseteq;": [8839], "thetasym;": [977], "thicksim;": [8764], "timesbar;": [10801], "triangle;": [9653], "triminus;": [10810], "trpezium;": [9186], "ulcorner;": [8988], "urcorner;": [8989], "varkappa;": [1008], "varsigma;": [962], "vartheta;": [977] } }, { "length": 8, "entities": { "Because;": [8757], "Cayleys;": [8493], "Cconint;": [8752], "Cedilla;": [184], "Diamond;": [8900], "DownTee;": [8868], "Element;": [8712], "Epsilon;": [917], "Implies;": [8658], "LeftTee;": [8867], "NewLine;": [10], "NoBreak;": [8288], "NotLess;": [8814], "Omicron;": [927], "OverBar;": [8254], "Product;": [8719], "UpArrow;": [8593], "Uparrow;": [8657], "Upsilon;": [933], "alefsym;": [8501], "angrtvb;": [8894], "angzarr;": [9084], "asympeq;": [8781], "backsim;": [8765], "because;": [8757], "bemptyv;": [10672], "between;": [8812], "bigcirc;": [9711], "bigodot;": [10752], "bigstar;": [9733], "bnequiv;": [8801, 8421], "boxplus;": [8862], "ccupssm;": [10832], "cemptyv;": [10674], "cirscir;": [10690], "coloneq;": [8788], "congdot;": [10861], "cudarrl;": [10552], "cudarrr;": [10549], "cularrp;": [10557], "curarrm;": [10556], "dbkarow;": [10511], "ddagger;": [8225], "ddotseq;": [10871], "demptyv;": [10673], "diamond;": [8900], "digamma;": [989], "dotplus;": [8724], "dwangle;": [10662], "epsilon;": [949], "eqcolon;": [8789], "equivDD;": [10872], "gesdoto;": [10882], "gtquest;": [10876], "gtrless;": [8823], "harrcir;": [10568], "intprod;": [10812], "isindot;": [8949], "larrbfs;": [10527], "larrsim;": [10611], "lbrksld;": [10639], "lbrkslu;": [10637], "ldrdhar;": [10599], "lesdoto;": [10881], "lessdot;": [8918], "lessgtr;": [8822], "lesssim;": [8818], "lotimes;": [10804], "lozenge;": [9674], "ltquest;": [10875], "luruhar;": [10598], "maltese;": [10016], "minusdu;": [10794], "napprox;": [8777], "natural;": [9838], "nearrow;": [8599], "nexists;": [8708], "notinva;": [8713], "notinvb;": [8951], "notinvc;": [8950], "notniva;": [8716], "notnivb;": [8958], "notnivc;": [8957], "npolint;": [10772], "npreceq;": [10927, 824], "nsqsube;": [8930], "nsqsupe;": [8931], "nsubset;": [8834, 8402], "nsucceq;": [10928, 824], "nsupset;": [8835, 8402], "nvinfin;": [10718], "nvltrie;": [8884, 8402], "nvrtrie;": [8885, 8402], "nwarrow;": [8598], "olcross;": [10683], "omicron;": [959], "orderof;": [8500], "orslope;": [10839], "pertenk;": [8241], "planckh;": [8462], "pluscir;": [10786], "plussim;": [10790], "plustwo;": [10791], "precsim;": [8830], "quatint;": [10774], "questeq;": [8799], "rarrbfs;": [10528], "rarrsim;": [10612], "rbrksld;": [10638], "rbrkslu;": [10640], "rdldhar;": [10601], "realine;": [8475], "rotimes;": [10805], "ruluhar;": [10600], "searrow;": [8600], "simplus;": [10788], "simrarr;": [10610], "subedot;": [10947], "submult;": [10945], "subplus;": [10943], "subrarr;": [10617], "succsim;": [8831], "supdsub;": [10968], "supedot;": [10948], "suphsol;": [10185], "suphsub;": [10967], "suplarr;": [10619], "supmult;": [10946], "supplus;": [10944], "swarrow;": [8601], "topfork;": [10970], "triplus;": [10809], "tritime;": [10811], "uparrow;": [8593], "upsilon;": [965], "uwangle;": [10663], "vzigzag;": [10650], "zigrarr;": [8669] } }, { "length": 7, "entities": { "Aacute;": [193], "Abreve;": [258], "Agrave;": [192], "Assign;": [8788], "Atilde;": [195], "Barwed;": [8966], "Bumpeq;": [8782], "Cacute;": [262], "Ccaron;": [268], "Ccedil;": [199], "Colone;": [10868], "Conint;": [8751], "CupCap;": [8781], "Dagger;": [8225], "Dcaron;": [270], "DotDot;": [8412], "Dstrok;": [272], "Eacute;": [201], "Ecaron;": [282], "Egrave;": [200], "Exists;": [8707], "ForAll;": [8704], "Gammad;": [988], "Gbreve;": [286], "Gcedil;": [290], "HARDcy;": [1066], "Hstrok;": [294], "Iacute;": [205], "Igrave;": [204], "Itilde;": [296], "Jsercy;": [1032], "Kcedil;": [310], "Lacute;": [313], "Lambda;": [923], "Lcaron;": [317], "Lcedil;": [315], "Lmidot;": [319], "Lstrok;": [321], "Nacute;": [323], "Ncaron;": [327], "Ncedil;": [325], "Ntilde;": [209], "Oacute;": [211], "Odblac;": [336], "Ograve;": [210], "Oslash;": [216], "Otilde;": [213], "Otimes;": [10807], "Racute;": [340], "Rarrtl;": [10518], "Rcaron;": [344], "Rcedil;": [342], "SHCHcy;": [1065], "SOFTcy;": [1068], "Sacute;": [346], "Scaron;": [352], "Scedil;": [350], "Square;": [9633], "Subset;": [8912], "Supset;": [8913], "Tcaron;": [356], "Tcedil;": [354], "Tstrok;": [358], "Uacute;": [218], "Ubreve;": [364], "Udblac;": [368], "Ugrave;": [217], "Utilde;": [360], "Vdashl;": [10982], "Verbar;": [8214], "Vvdash;": [8874], "Yacute;": [221], "Zacute;": [377], "Zcaron;": [381], "aacute;": [225], "abreve;": [259], "agrave;": [224], "andand;": [10837], "angmsd;": [8737], "angsph;": [8738], "apacir;": [10863], "approx;": [8776], "atilde;": [227], "barvee;": [8893], "barwed;": [8965], "becaus;": [8757], "bernou;": [8492], "bigcap;": [8898], "bigcup;": [8899], "bigvee;": [8897], "bkarow;": [10509], "bottom;": [8869], "bowtie;": [8904], "boxbox;": [10697], "bprime;": [8245], "brvbar;": [166], "bullet;": [8226], "bumpeq;": [8783], "cacute;": [263], "capand;": [10820], "capcap;": [10827], "capcup;": [10823], "capdot;": [10816], "ccaron;": [269], "ccedil;": [231], "circeq;": [8791], "cirmid;": [10991], "colone;": [8788], "commat;": [64], "compfn;": [8728], "conint;": [8750], "coprod;": [8720], "copysr;": [8471], "cularr;": [8630], "cupcap;": [10822], "cupcup;": [10826], "cupdot;": [8845], "curarr;": [8631], "curren;": [164], "cylcty;": [9005], "dagger;": [8224], "daleth;": [8504], "dcaron;": [271], "dfisht;": [10623], "divide;": [247], "divonx;": [8903], "dlcorn;": [8990], "dlcrop;": [8973], "dollar;": [36], "drcorn;": [8991], "drcrop;": [8972], "dstrok;": [273], "eacute;": [233], "easter;": [10862], "ecaron;": [283], "ecolon;": [8789], "egrave;": [232], "egsdot;": [10904], "elsdot;": [10903], "emptyv;": [8709], "emsp13;": [8196], "emsp14;": [8197], "eparsl;": [10723], "eqcirc;": [8790], "equals;": [61], "equest;": [8799], "female;": [9792], "ffilig;": [64259], "ffllig;": [64260], "forall;": [8704], "frac12;": [189], "frac13;": [8531], "frac14;": [188], "frac15;": [8533], "frac16;": [8537], "frac18;": [8539], "frac23;": [8532], "frac25;": [8534], "frac34;": [190], "frac35;": [8535], "frac38;": [8540], "frac45;": [8536], "frac56;": [8538], "frac58;": [8541], "frac78;": [8542], "gacute;": [501], "gammad;": [989], "gbreve;": [287], "gesdot;": [10880], "gesles;": [10900], "gtlPar;": [10645], "gtrarr;": [10616], "gtrdot;": [8919], "gtrsim;": [8819], "hairsp;": [8202], "hamilt;": [8459], "hardcy;": [1098], "hearts;": [9829], "hellip;": [8230], "hercon;": [8889], "homtht;": [8763], "horbar;": [8213], "hslash;": [8463], "hstrok;": [295], "hybull;": [8259], "hyphen;": [8208], "iacute;": [237], "igrave;": [236], "iiiint;": [10764], "iinfin;": [10716], "incare;": [8453], "inodot;": [305], "intcal;": [8890], "iquest;": [191], "isinsv;": [8947], "itilde;": [297], "jsercy;": [1112], "kappav;": [1008], "kcedil;": [311], "kgreen;": [312], "lAtail;": [10523], "lacute;": [314], "lagran;": [8466], "lambda;": [955], "langle;": [10216], "larrfs;": [10525], "larrhk;": [8617], "larrlp;": [8619], "larrpl;": [10553], "larrtl;": [8610], "latail;": [10521], "lbrace;": [123], "lbrack;": [91], "lcaron;": [318], "lcedil;": [316], "ldquor;": [8222], "lesdot;": [10879], "lesges;": [10899], "lfisht;": [10620], "lfloor;": [8970], "lharul;": [10602], "llhard;": [10603], "lmidot;": [320], "lmoust;": [9136], "loplus;": [10797], "lowast;": [8727], "lowbar;": [95], "lparlt;": [10643], "lrhard;": [10605], "lsaquo;": [8249], "lsquor;": [8218], "lstrok;": [322], "lthree;": [8907], "ltimes;": [8905], "ltlarr;": [10614], "ltrPar;": [10646], "mapsto;": [8614], "marker;": [9646], "mcomma;": [10793], "midast;": [42], "midcir;": [10992], "middot;": [183], "minusb;": [8863], "minusd;": [8760], "mnplus;": [8723], "models;": [8871], "mstpos;": [8766], "nVDash;": [8879], "nVdash;": [8878], "nacute;": [324], "nbumpe;": [8783, 824], "ncaron;": [328], "ncedil;": [326], "nearhk;": [10532], "nequiv;": [8802], "nesear;": [10536], "nexist;": [8708], "nltrie;": [8940], "notinE;": [8953, 824], "nparsl;": [11005, 8421], "nprcue;": [8928], "nrarrc;": [10547, 824], "nrarrw;": [8605, 824], "nrtrie;": [8941], "nsccue;": [8929], "nsimeq;": [8772], "ntilde;": [241], "numero;": [8470], "nvDash;": [8877], "nvHarr;": [10500], "nvdash;": [8876], "nvlArr;": [10498], "nvrArr;": [10499], "nwarhk;": [10531], "nwnear;": [10535], "oacute;": [243], "odblac;": [337], "odsold;": [10684], "ograve;": [242], "ominus;": [8854], "origof;": [8886], "oslash;": [248], "otilde;": [245], "otimes;": [8855], "parsim;": [10995], "percnt;": [37], "period;": [46], "permil;": [8240], "phmmat;": [8499], "planck;": [8463], "plankv;": [8463], "plusdo;": [8724], "plusdu;": [10789], "plusmn;": [177], "preceq;": [10927], "primes;": [8473], "prnsim;": [8936], "propto;": [8733], "prurel;": [8880], "puncsp;": [8200], "qprime;": [8279], "rAtail;": [10524], "racute;": [341], "rangle;": [10217], "rarrap;": [10613], "rarrfs;": [10526], "rarrhk;": [8618], "rarrlp;": [8620], "rarrpl;": [10565], "rarrtl;": [8611], "ratail;": [10522], "rbrace;": [125], "rbrack;": [93], "rcaron;": [345], "rcedil;": [343], "rdquor;": [8221], "rfisht;": [10621], "rfloor;": [8971], "rharul;": [10604], "rmoust;": [9137], "roplus;": [10798], "rpargt;": [10644], "rsaquo;": [8250], "rsquor;": [8217], "rthree;": [8908], "rtimes;": [8906], "sacute;": [347], "scaron;": [353], "scedil;": [351], "scnsim;": [8937], "searhk;": [10533], "seswar;": [10537], "sfrown;": [8994], "shchcy;": [1097], "sigmaf;": [962], "sigmav;": [962], "simdot;": [10858], "smashp;": [10803], "softcy;": [1100], "solbar;": [9023], "spades;": [9824], "sqcaps;": [8851, 65024], "sqcups;": [8852, 65024], "sqsube;": [8849], "sqsupe;": [8850], "square;": [9633], "squarf;": [9642], "ssetmn;": [8726], "ssmile;": [8995], "sstarf;": [8902], "subdot;": [10941], "subset;": [8834], "subsim;": [10951], "subsub;": [10965], "subsup;": [10963], "succeq;": [10928], "supdot;": [10942], "supset;": [8835], "supsim;": [10952], "supsub;": [10964], "supsup;": [10966], "swarhk;": [10534], "swnwar;": [10538], "target;": [8982], "tcaron;": [357], "tcedil;": [355], "telrec;": [8981], "there4;": [8756], "thetav;": [977], "thinsp;": [8201], "thksim;": [8764], "timesb;": [8864], "timesd;": [10800], "topbot;": [9014], "topcir;": [10993], "tprime;": [8244], "tridot;": [9708], "tstrok;": [359], "uacute;": [250], "ubreve;": [365], "udblac;": [369], "ufisht;": [10622], "ugrave;": [249], "ulcorn;": [8988], "ulcrop;": [8975], "urcorn;": [8989], "urcrop;": [8974], "utilde;": [361], "vangrt;": [10652], "varphi;": [981], "varrho;": [1009], "veebar;": [8891], "vellip;": [8942], "verbar;": [124], "vsubnE;": [10955, 65024], "vsubne;": [8842, 65024], "vsupnE;": [10956, 65024], "vsupne;": [8843, 65024], "wedbar;": [10847], "wedgeq;": [8793], "weierp;": [8472], "wreath;": [8768], "xoplus;": [10753], "xotime;": [10754], "xsqcup;": [10758], "xuplus;": [10756], "xwedge;": [8896], "yacute;": [253], "zacute;": [378], "zcaron;": [382], "zeetrf;": [8488] } }, { "length": 6, "entities": { "AElig;": [198], "Aacute": [193], "Acirc;": [194], "Agrave": [192], "Alpha;": [913], "Amacr;": [256], "Aogon;": [260], "Aring;": [197], "Atilde": [195], "Breve;": [728], "Ccedil": [199], "Ccirc;": [264], "Colon;": [8759], "Cross;": [10799], "Dashv;": [10980], "Delta;": [916], "Eacute": [201], "Ecirc;": [202], "Egrave": [200], "Emacr;": [274], "Eogon;": [280], "Equal;": [10869], "Gamma;": [915], "Gcirc;": [284], "Hacek;": [711], "Hcirc;": [292], "IJlig;": [306], "Iacute": [205], "Icirc;": [206], "Igrave": [204], "Imacr;": [298], "Iogon;": [302], "Iukcy;": [1030], "Jcirc;": [308], "Jukcy;": [1028], "Kappa;": [922], "Ntilde": [209], "OElig;": [338], "Oacute": [211], "Ocirc;": [212], "Ograve": [210], "Omacr;": [332], "Omega;": [937], "Oslash": [216], "Otilde": [213], "Prime;": [8243], "RBarr;": [10512], "Scirc;": [348], "Sigma;": [931], "THORN;": [222], "TRADE;": [8482], "TSHcy;": [1035], "Theta;": [920], "Tilde;": [8764], "Uacute": [218], "Ubrcy;": [1038], "Ucirc;": [219], "Ugrave": [217], "Umacr;": [362], "Union;": [8899], "Uogon;": [370], "UpTee;": [8869], "Uring;": [366], "VDash;": [8875], "Vdash;": [8873], "Wcirc;": [372], "Wedge;": [8896], "Yacute": [221], "Ycirc;": [374], "aacute": [225], "acirc;": [226], "acute;": [180], "aelig;": [230], "agrave": [224], "aleph;": [8501], "alpha;": [945], "amacr;": [257], "amalg;": [10815], "angle;": [8736], "angrt;": [8735], "angst;": [197], "aogon;": [261], "aring;": [229], "asymp;": [8776], "atilde": [227], "awint;": [10769], "bcong;": [8780], "bdquo;": [8222], "bepsi;": [1014], "blank;": [9251], "blk12;": [9618], "blk14;": [9617], "blk34;": [9619], "block;": [9608], "boxDL;": [9559], "boxDR;": [9556], "boxDl;": [9558], "boxDr;": [9555], "boxHD;": [9574], "boxHU;": [9577], "boxHd;": [9572], "boxHu;": [9575], "boxUL;": [9565], "boxUR;": [9562], "boxUl;": [9564], "boxUr;": [9561], "boxVH;": [9580], "boxVL;": [9571], "boxVR;": [9568], "boxVh;": [9579], "boxVl;": [9570], "boxVr;": [9567], "boxdL;": [9557], "boxdR;": [9554], "boxdl;": [9488], "boxdr;": [9484], "boxhD;": [9573], "boxhU;": [9576], "boxhd;": [9516], "boxhu;": [9524], "boxuL;": [9563], "boxuR;": [9560], "boxul;": [9496], "boxur;": [9492], "boxvH;": [9578], "boxvL;": [9569], "boxvR;": [9566], "boxvh;": [9532], "boxvl;": [9508], "boxvr;": [9500], "breve;": [728], "brvbar": [166], "bsemi;": [8271], "bsime;": [8909], "bsolb;": [10693], "bumpE;": [10926], "bumpe;": [8783], "caret;": [8257], "caron;": [711], "ccaps;": [10829], "ccedil": [231], "ccirc;": [265], "ccups;": [10828], "cedil;": [184], "check;": [10003], "clubs;": [9827], "colon;": [58], "comma;": [44], "crarr;": [8629], "cross;": [10007], "csube;": [10961], "csupe;": [10962], "ctdot;": [8943], "cuepr;": [8926], "cuesc;": [8927], "cupor;": [10821], "curren": [164], "cuvee;": [8910], "cuwed;": [8911], "cwint;": [8753], "dashv;": [8867], "dblac;": [733], "ddarr;": [8650], "delta;": [948], "dharl;": [8643], "dharr;": [8642], "diams;": [9830], "disin;": [8946], "divide": [247], "doteq;": [8784], "dtdot;": [8945], "dtrif;": [9662], "duarr;": [8693], "duhar;": [10607], "eDDot;": [10871], "eacute": [233], "ecirc;": [234], "efDot;": [8786], "egrave": [232], "emacr;": [275], "empty;": [8709], "eogon;": [281], "eplus;": [10865], "epsiv;": [1013], "eqsim;": [8770], "equiv;": [8801], "erDot;": [8787], "erarr;": [10609], "esdot;": [8784], "exist;": [8707], "fflig;": [64256], "filig;": [64257], "fjlig;": [102, 106], "fllig;": [64258], "fltns;": [9649], "forkv;": [10969], "frac12": [189], "frac14": [188], "frac34": [190], "frasl;": [8260], "frown;": [8994], "gamma;": [947], "gcirc;": [285], "gescc;": [10921], "gimel;": [8503], "gneqq;": [8809], "gnsim;": [8935], "grave;": [96], "gsime;": [10894], "gsiml;": [10896], "gtcir;": [10874], "gtdot;": [8919], "harrw;": [8621], "hcirc;": [293], "hoarr;": [8703], "iacute": [237], "icirc;": [238], "iexcl;": [161], "igrave": [236], "iiint;": [8749], "iiota;": [8489], "ijlig;": [307], "imacr;": [299], "image;": [8465], "imath;": [305], "imped;": [437], "infin;": [8734], "iogon;": [303], "iprod;": [10812], "iquest": [191], "isinE;": [8953], "isins;": [8948], "isinv;": [8712], "iukcy;": [1110], "jcirc;": [309], "jmath;": [567], "jukcy;": [1108], "kappa;": [954], "lAarr;": [8666], "lBarr;": [10510], "langd;": [10641], "laquo;": [171], "larrb;": [8676], "lates;": [10925, 65024], "lbarr;": [10508], "lbbrk;": [10098], "lbrke;": [10635], "lceil;": [8968], "ldquo;": [8220], "lescc;": [10920], "lhard;": [8637], "lharu;": [8636], "lhblk;": [9604], "llarr;": [8647], "lltri;": [9722], "lneqq;": [8808], "lnsim;": [8934], "loang;": [10220], "loarr;": [8701], "lobrk;": [10214], "lopar;": [10629], "lrarr;": [8646], "lrhar;": [8651], "lrtri;": [8895], "lsime;": [10893], "lsimg;": [10895], "lsquo;": [8216], "ltcir;": [10873], "ltdot;": [8918], "ltrie;": [8884], "ltrif;": [9666], "mDDot;": [8762], "mdash;": [8212], "micro;": [181], "middot": [183], "minus;": [8722], "mumap;": [8888], "nabla;": [8711], "napid;": [8779, 824], "napos;": [329], "natur;": [9838], "nbump;": [8782, 824], "ncong;": [8775], "ndash;": [8211], "neArr;": [8663], "nearr;": [8599], "nedot;": [8784, 824], "nesim;": [8770, 824], "ngeqq;": [8807, 824], "ngsim;": [8821], "nhArr;": [8654], "nharr;": [8622], "nhpar;": [10994], "nlArr;": [8653], "nlarr;": [8602], "nleqq;": [8806, 824], "nless;": [8814], "nlsim;": [8820], "nltri;": [8938], "notin;": [8713], "notni;": [8716], "npart;": [8706, 824], "nprec;": [8832], "nrArr;": [8655], "nrarr;": [8603], "nrtri;": [8939], "nsime;": [8772], "nsmid;": [8740], "nspar;": [8742], "nsubE;": [10949, 824], "nsube;": [8840], "nsucc;": [8833], "nsupE;": [10950, 824], "nsupe;": [8841], "ntilde": [241], "numsp;": [8199], "nvsim;": [8764, 8402], "nwArr;": [8662], "nwarr;": [8598], "oacute": [243], "ocirc;": [244], "odash;": [8861], "oelig;": [339], "ofcir;": [10687], "ograve": [242], "ohbar;": [10677], "olarr;": [8634], "olcir;": [10686], "oline;": [8254], "omacr;": [333], "omega;": [969], "operp;": [10681], "oplus;": [8853], "orarr;": [8635], "order;": [8500], "oslash": [248], "otilde": [245], "ovbar;": [9021], "parsl;": [11005], "phone;": [9742], "plusb;": [8862], "pluse;": [10866], "plusmn": [177], "pound;": [163], "prcue;": [8828], "prime;": [8242], "prnap;": [10937], "prsim;": [8830], "quest;": [63], "rAarr;": [8667], "rBarr;": [10511], "radic;": [8730], "rangd;": [10642], "range;": [10661], "raquo;": [187], "rarrb;": [8677], "rarrc;": [10547], "rarrw;": [8605], "ratio;": [8758], "rbarr;": [10509], "rbbrk;": [10099], "rbrke;": [10636], "rceil;": [8969], "rdquo;": [8221], "reals;": [8477], "rhard;": [8641], "rharu;": [8640], "rlarr;": [8644], "rlhar;": [8652], "rnmid;": [10990], "roang;": [10221], "roarr;": [8702], "robrk;": [10215], "ropar;": [10630], "rrarr;": [8649], "rsquo;": [8217], "rtrie;": [8885], "rtrif;": [9656], "sbquo;": [8218], "sccue;": [8829], "scirc;": [349], "scnap;": [10938], "scsim;": [8831], "sdotb;": [8865], "sdote;": [10854], "seArr;": [8664], "searr;": [8600], "setmn;": [8726], "sharp;": [9839], "sigma;": [963], "simeq;": [8771], "simgE;": [10912], "simlE;": [10911], "simne;": [8774], "slarr;": [8592], "smile;": [8995], "smtes;": [10924, 65024], "sqcap;": [8851], "sqcup;": [8852], "sqsub;": [8847], "sqsup;": [8848], "srarr;": [8594], "starf;": [9733], "strns;": [175], "subnE;": [10955], "subne;": [8842], "supnE;": [10956], "supne;": [8843], "swArr;": [8665], "swarr;": [8601], "szlig;": [223], "theta;": [952], "thkap;": [8776], "thorn;": [254], "tilde;": [732], "times;": [215], "trade;": [8482], "trisb;": [10701], "tshcy;": [1115], "twixt;": [8812], "uacute": [250], "ubrcy;": [1118], "ucirc;": [251], "udarr;": [8645], "udhar;": [10606], "ugrave": [249], "uharl;": [8639], "uharr;": [8638], "uhblk;": [9600], "ultri;": [9720], "umacr;": [363], "uogon;": [371], "uplus;": [8846], "upsih;": [978], "uring;": [367], "urtri;": [9721], "utdot;": [8944], "utrif;": [9652], "uuarr;": [8648], "vBarv;": [10985], "vDash;": [8872], "varpi;": [982], "vdash;": [8866], "veeeq;": [8794], "vltri;": [8882], "vnsub;": [8834, 8402], "vnsup;": [8835, 8402], "vprop;": [8733], "vrtri;": [8883], "wcirc;": [373], "wedge;": [8743], "xcirc;": [9711], "xdtri;": [9661], "xhArr;": [10234], "xharr;": [10231], "xlArr;": [10232], "xlarr;": [10229], "xodot;": [10752], "xrArr;": [10233], "xrarr;": [10230], "xutri;": [9651], "yacute": [253], "ycirc;": [375] } }, { "length": 5, "entities": { "AElig": [198], "Acirc": [194], "Aopf;": [120120], "Aring": [197], "Ascr;": [119964], "Auml;": [196], "Barv;": [10983], "Beta;": [914], "Bopf;": [120121], "Bscr;": [8492], "CHcy;": [1063], "COPY;": [169], "Cdot;": [266], "Copf;": [8450], "Cscr;": [119966], "DJcy;": [1026], "DScy;": [1029], "DZcy;": [1039], "Darr;": [8609], "Dopf;": [120123], "Dscr;": [119967], "Ecirc": [202], "Edot;": [278], "Eopf;": [120124], "Escr;": [8496], "Esim;": [10867], "Euml;": [203], "Fopf;": [120125], "Fscr;": [8497], "GJcy;": [1027], "Gdot;": [288], "Gopf;": [120126], "Gscr;": [119970], "Hopf;": [8461], "Hscr;": [8459], "IEcy;": [1045], "IOcy;": [1025], "Icirc": [206], "Idot;": [304], "Iopf;": [120128], "Iota;": [921], "Iscr;": [8464], "Iuml;": [207], "Jopf;": [120129], "Jscr;": [119973], "KHcy;": [1061], "KJcy;": [1036], "Kopf;": [120130], "Kscr;": [119974], "LJcy;": [1033], "Lang;": [10218], "Larr;": [8606], "Lopf;": [120131], "Lscr;": [8466], "Mopf;": [120132], "Mscr;": [8499], "NJcy;": [1034], "Nopf;": [8469], "Nscr;": [119977], "Ocirc": [212], "Oopf;": [120134], "Oscr;": [119978], "Ouml;": [214], "Popf;": [8473], "Pscr;": [119979], "QUOT;": [34], "Qopf;": [8474], "Qscr;": [119980], "Rang;": [10219], "Rarr;": [8608], "Ropf;": [8477], "Rscr;": [8475], "SHcy;": [1064], "Sopf;": [120138], "Sqrt;": [8730], "Sscr;": [119982], "Star;": [8902], "THORN": [222], "TScy;": [1062], "Topf;": [120139], "Tscr;": [119983], "Uarr;": [8607], "Ucirc": [219], "Uopf;": [120140], "Upsi;": [978], "Uscr;": [119984], "Uuml;": [220], "Vbar;": [10987], "Vert;": [8214], "Vopf;": [120141], "Vscr;": [119985], "Wopf;": [120142], "Wscr;": [119986], "Xopf;": [120143], "Xscr;": [119987], "YAcy;": [1071], "YIcy;": [1031], "YUcy;": [1070], "Yopf;": [120144], "Yscr;": [119988], "Yuml;": [376], "ZHcy;": [1046], "Zdot;": [379], "Zeta;": [918], "Zopf;": [8484], "Zscr;": [119989], "acirc": [226], "acute": [180], "aelig": [230], "andd;": [10844], "andv;": [10842], "ange;": [10660], "aopf;": [120146], "apid;": [8779], "apos;": [39], "aring": [229], "ascr;": [119990], "auml;": [228], "bNot;": [10989], "bbrk;": [9141], "beta;": [946], "beth;": [8502], "bnot;": [8976], "bopf;": [120147], "boxH;": [9552], "boxV;": [9553], "boxh;": [9472], "boxv;": [9474], "bscr;": [119991], "bsim;": [8765], "bsol;": [92], "bull;": [8226], "bump;": [8782], "caps;": [8745, 65024], "cdot;": [267], "cedil": [184], "cent;": [162], "chcy;": [1095], "cirE;": [10691], "circ;": [710], "cire;": [8791], "comp;": [8705], "cong;": [8773], "copf;": [120148], "copy;": [169], "cscr;": [119992], "csub;": [10959], "csup;": [10960], "cups;": [8746, 65024], "dArr;": [8659], "dHar;": [10597], "darr;": [8595], "dash;": [8208], "diam;": [8900], "djcy;": [1106], "dopf;": [120149], "dscr;": [119993], "dscy;": [1109], "dsol;": [10742], "dtri;": [9663], "dzcy;": [1119], "eDot;": [8785], "ecir;": [8790], "ecirc": [234], "edot;": [279], "emsp;": [8195], "ensp;": [8194], "eopf;": [120150], "epar;": [8917], "epsi;": [949], "escr;": [8495], "esim;": [8770], "euml;": [235], "euro;": [8364], "excl;": [33], "flat;": [9837], "fnof;": [402], "fopf;": [120151], "fork;": [8916], "fscr;": [119995], "gdot;": [289], "geqq;": [8807], "gesl;": [8923, 65024], "gjcy;": [1107], "gnap;": [10890], "gneq;": [10888], "gopf;": [120152], "gscr;": [8458], "gsim;": [8819], "gtcc;": [10919], "gvnE;": [8809, 65024], "hArr;": [8660], "half;": [189], "harr;": [8596], "hbar;": [8463], "hopf;": [120153], "hscr;": [119997], "icirc": [238], "iecy;": [1077], "iexcl": [161], "imof;": [8887], "iocy;": [1105], "iopf;": [120154], "iota;": [953], "iscr;": [119998], "isin;": [8712], "iuml;": [239], "jopf;": [120155], "jscr;": [119999], "khcy;": [1093], "kjcy;": [1116], "kopf;": [120156], "kscr;": [120000], "lArr;": [8656], "lHar;": [10594], "lang;": [10216], "laquo": [171], "larr;": [8592], "late;": [10925], "lcub;": [123], "ldca;": [10550], "ldsh;": [8626], "leqq;": [8806], "lesg;": [8922, 65024], "ljcy;": [1113], "lnap;": [10889], "lneq;": [10887], "lopf;": [120157], "lozf;": [10731], "lpar;": [40], "lscr;": [120001], "lsim;": [8818], "lsqb;": [91], "ltcc;": [10918], "ltri;": [9667], "lvnE;": [8808, 65024], "macr;": [175], "male;": [9794], "malt;": [10016], "micro": [181], "mlcp;": [10971], "mldr;": [8230], "mopf;": [120158], "mscr;": [120002], "nGtv;": [8811, 824], "nLtv;": [8810, 824], "nang;": [8736, 8402], "napE;": [10864, 824], "nbsp;": [160], "ncap;": [10819], "ncup;": [10818], "ngeq;": [8817], "nges;": [10878, 824], "ngtr;": [8815], "nisd;": [8954], "njcy;": [1114], "nldr;": [8229], "nleq;": [8816], "nles;": [10877, 824], "nmid;": [8740], "nopf;": [120159], "npar;": [8742], "npre;": [10927, 824], "nsce;": [10928, 824], "nscr;": [120003], "nsim;": [8769], "nsub;": [8836], "nsup;": [8837], "ntgl;": [8825], "ntlg;": [8824], "nvap;": [8781, 8402], "nvge;": [8805, 8402], "nvgt;": [62, 8402], "nvle;": [8804, 8402], "nvlt;": [60, 8402], "oast;": [8859], "ocir;": [8858], "ocirc": [244], "odiv;": [10808], "odot;": [8857], "ogon;": [731], "oint;": [8750], "omid;": [10678], "oopf;": [120160], "opar;": [10679], "ordf;": [170], "ordm;": [186], "oror;": [10838], "oscr;": [8500], "osol;": [8856], "ouml;": [246], "para;": [182], "part;": [8706], "perp;": [8869], "phiv;": [981], "plus;": [43], "popf;": [120161], "pound": [163], "prap;": [10935], "prec;": [8826], "prnE;": [10933], "prod;": [8719], "prop;": [8733], "pscr;": [120005], "qint;": [10764], "qopf;": [120162], "qscr;": [120006], "quot;": [34], "rArr;": [8658], "rHar;": [10596], "race;": [8765, 817], "rang;": [10217], "raquo": [187], "rarr;": [8594], "rcub;": [125], "rdca;": [10551], "rdsh;": [8627], "real;": [8476], "rect;": [9645], "rhov;": [1009], "ring;": [730], "ropf;": [120163], "rpar;": [41], "rscr;": [120007], "rsqb;": [93], "rtri;": [9657], "scap;": [10936], "scnE;": [10934], "sdot;": [8901], "sect;": [167], "semi;": [59], "sext;": [10038], "shcy;": [1096], "sime;": [8771], "simg;": [10910], "siml;": [10909], "smid;": [8739], "smte;": [10924], "solb;": [10692], "sopf;": [120164], "spar;": [8741], "squf;": [9642], "sscr;": [120008], "star;": [9734], "subE;": [10949], "sube;": [8838], "succ;": [8827], "sung;": [9834], "sup1;": [185], "sup2;": [178], "sup3;": [179], "supE;": [10950], "supe;": [8839], "szlig": [223], "tbrk;": [9140], "tdot;": [8411], "thorn": [254], "times": [215], "tint;": [8749], "toea;": [10536], "topf;": [120165], "tosa;": [10537], "trie;": [8796], "tscr;": [120009], "tscy;": [1094], "uArr;": [8657], "uHar;": [10595], "uarr;": [8593], "ucirc": [251], "uopf;": [120166], "upsi;": [965], "uscr;": [120010], "utri;": [9653], "uuml;": [252], "vArr;": [8661], "vBar;": [10984], "varr;": [8597], "vert;": [124], "vopf;": [120167], "vscr;": [120011], "wopf;": [120168], "wscr;": [120012], "xcap;": [8898], "xcup;": [8899], "xmap;": [10236], "xnis;": [8955], "xopf;": [120169], "xscr;": [120013], "xvee;": [8897], "yacy;": [1103], "yicy;": [1111], "yopf;": [120170], "yscr;": [120014], "yucy;": [1102], "yuml;": [255], "zdot;": [380], "zeta;": [950], "zhcy;": [1078], "zopf;": [120171], "zscr;": [120015], "zwnj;": [8204] } }, { "length": 4, "entities": { "AMP;": [38], "Acy;": [1040], "Afr;": [120068], "And;": [10835], "Auml": [196], "Bcy;": [1041], "Bfr;": [120069], "COPY": [169], "Cap;": [8914], "Cfr;": [8493], "Chi;": [935], "Cup;": [8915], "Dcy;": [1044], "Del;": [8711], "Dfr;": [120071], "Dot;": [168], "ENG;": [330], "ETH;": [208], "Ecy;": [1069], "Efr;": [120072], "Eta;": [919], "Euml": [203], "Fcy;": [1060], "Ffr;": [120073], "Gcy;": [1043], "Gfr;": [120074], "Hat;": [94], "Hfr;": [8460], "Icy;": [1048], "Ifr;": [8465], "Int;": [8748], "Iuml": [207], "Jcy;": [1049], "Jfr;": [120077], "Kcy;": [1050], "Kfr;": [120078], "Lcy;": [1051], "Lfr;": [120079], "Lsh;": [8624], "Map;": [10501], "Mcy;": [1052], "Mfr;": [120080], "Ncy;": [1053], "Nfr;": [120081], "Not;": [10988], "Ocy;": [1054], "Ofr;": [120082], "Ouml": [214], "Pcy;": [1055], "Pfr;": [120083], "Phi;": [934], "Psi;": [936], "QUOT": [34], "Qfr;": [120084], "REG;": [174], "Rcy;": [1056], "Rfr;": [8476], "Rho;": [929], "Rsh;": [8625], "Scy;": [1057], "Sfr;": [120086], "Sub;": [8912], "Sum;": [8721], "Sup;": [8913], "Tab;": [9], "Tau;": [932], "Tcy;": [1058], "Tfr;": [120087], "Ucy;": [1059], "Ufr;": [120088], "Uuml": [220], "Vcy;": [1042], "Vee;": [8897], "Vfr;": [120089], "Wfr;": [120090], "Xfr;": [120091], "Ycy;": [1067], "Yfr;": [120092], "Zcy;": [1047], "Zfr;": [8488], "acE;": [8766, 819], "acd;": [8767], "acy;": [1072], "afr;": [120094], "amp;": [38], "and;": [8743], "ang;": [8736], "apE;": [10864], "ape;": [8778], "ast;": [42], "auml": [228], "bcy;": [1073], "bfr;": [120095], "bne;": [61, 8421], "bot;": [8869], "cap;": [8745], "cent": [162], "cfr;": [120096], "chi;": [967], "cir;": [9675], "copy": [169], "cup;": [8746], "dcy;": [1076], "deg;": [176], "dfr;": [120097], "die;": [168], "div;": [247], "dot;": [729], "ecy;": [1101], "efr;": [120098], "egs;": [10902], "ell;": [8467], "els;": [10901], "eng;": [331], "eta;": [951], "eth;": [240], "euml": [235], "fcy;": [1092], "ffr;": [120099], "gEl;": [10892], "gap;": [10886], "gcy;": [1075], "gel;": [8923], "geq;": [8805], "ges;": [10878], "gfr;": [120100], "ggg;": [8921], "glE;": [10898], "gla;": [10917], "glj;": [10916], "gnE;": [8809], "gne;": [10888], "hfr;": [120101], "icy;": [1080], "iff;": [8660], "ifr;": [120102], "int;": [8747], "iuml": [239], "jcy;": [1081], "jfr;": [120103], "kcy;": [1082], "kfr;": [120104], "lEg;": [10891], "lap;": [10885], "lat;": [10923], "lcy;": [1083], "leg;": [8922], "leq;": [8804], "les;": [10877], "lfr;": [120105], "lgE;": [10897], "lnE;": [8808], "lne;": [10887], "loz;": [9674], "lrm;": [8206], "lsh;": [8624], "macr": [175], "map;": [8614], "mcy;": [1084], "mfr;": [120106], "mho;": [8487], "mid;": [8739], "nGg;": [8921, 824], "nGt;": [8811, 8402], "nLl;": [8920, 824], "nLt;": [8810, 8402], "nap;": [8777], "nbsp": [160], "ncy;": [1085], "nfr;": [120107], "ngE;": [8807, 824], "nge;": [8817], "ngt;": [8815], "nis;": [8956], "niv;": [8715], "nlE;": [8806, 824], "nle;": [8816], "nlt;": [8814], "not;": [172], "npr;": [8832], "nsc;": [8833], "num;": [35], "ocy;": [1086], "ofr;": [120108], "ogt;": [10689], "ohm;": [937], "olt;": [10688], "ord;": [10845], "ordf": [170], "ordm": [186], "orv;": [10843], "ouml": [246], "par;": [8741], "para": [182], "pcy;": [1087], "pfr;": [120109], "phi;": [966], "piv;": [982], "prE;": [10931], "pre;": [10927], "psi;": [968], "qfr;": [120110], "quot": [34], "rcy;": [1088], "reg;": [174], "rfr;": [120111], "rho;": [961], "rlm;": [8207], "rsh;": [8625], "scE;": [10932], "sce;": [10928], "scy;": [1089], "sect": [167], "sfr;": [120112], "shy;": [173], "sim;": [8764], "smt;": [10922], "sol;": [47], "squ;": [9633], "sub;": [8834], "sum;": [8721], "sup1": [185], "sup2": [178], "sup3": [179], "sup;": [8835], "tau;": [964], "tcy;": [1090], "tfr;": [120113], "top;": [8868], "ucy;": [1091], "ufr;": [120114], "uml;": [168], "uuml": [252], "vcy;": [1074], "vee;": [8744], "vfr;": [120115], "wfr;": [120116], "xfr;": [120117], "ycy;": [1099], "yen;": [165], "yfr;": [120118], "yuml": [255], "zcy;": [1079], "zfr;": [120119], "zwj;": [8205] } }, { "length": 3, "entities": { "AMP": [38], "DD;": [8517], "ETH": [208], "GT;": [62], "Gg;": [8921], "Gt;": [8811], "Im;": [8465], "LT;": [60], "Ll;": [8920], "Lt;": [8810], "Mu;": [924], "Nu;": [925], "Or;": [10836], "Pi;": [928], "Pr;": [10939], "REG": [174], "Re;": [8476], "Sc;": [10940], "Xi;": [926], "ac;": [8766], "af;": [8289], "amp": [38], "ap;": [8776], "dd;": [8518], "deg": [176], "ee;": [8519], "eg;": [10906], "el;": [10905], "eth": [240], "gE;": [8807], "ge;": [8805], "gg;": [8811], "gl;": [8823], "gt;": [62], "ic;": [8291], "ii;": [8520], "in;": [8712], "it;": [8290], "lE;": [8806], "le;": [8804], "lg;": [8822], "ll;": [8810], "lt;": [60], "mp;": [8723], "mu;": [956], "ne;": [8800], "ni;": [8715], "not": [172], "nu;": [957], "oS;": [9416], "or;": [8744], "pi;": [960], "pm;": [177], "pr;": [8826], "reg": [174], "rx;": [8478], "sc;": [8827], "shy": [173], "uml": [168], "wp;": [8472], "wr;": [8768], "xi;": [958], "yen": [165] } }, { "length": 2, "entities": { "GT": [62], "LT": [60], "gt": [62], "lt": [60] } }];
+
+const EOF = -1;
+const NULL = 0x00;
+const TABULATION = 0x09;
+const CARRIAGE_RETURN = 0x0D;
+const LINE_FEED = 0x0A;
+const FORM_FEED = 0x0C;
+const SPACE = 0x20;
+const EXCLAMATION_MARK = 0x21;
+const QUOTATION_MARK = 0x22;
+const NUMBER_SIGN = 0x23;
+const AMPERSAND = 0x26;
+const APOSTROPHE = 0x27;
+const HYPHEN_MINUS = 0x2D;
+const SOLIDUS = 0x2F;
+const DIGIT_0 = 0x30;
+const DIGIT_9 = 0x39;
+const SEMICOLON = 0x3B;
+const LESS_THAN_SIGN = 0x3C;
+const EQUALS_SIGN = 0x3D;
+const GREATER_THAN_SIGN = 0x3E;
+const QUESTION_MARK = 0x3F;
+const LATIN_CAPITAL_A = 0x41;
+const LATIN_CAPITAL_D = 0x44;
+const LATIN_CAPITAL_F = 0x46;
+const LATIN_CAPITAL_X = 0x58;
+const LATIN_CAPITAL_Z = 0x5A;
+const LEFT_SQUARE_BRACKET = 0x5B;
+const RIGHT_SQUARE_BRACKET = 0x5D;
+const GRAVE_ACCENT = 0x60;
+const LATIN_SMALL_A = 0x61;
+const LATIN_SMALL_F = 0x66;
+const LATIN_SMALL_X = 0x78;
+const LATIN_SMALL_Z = 0x7A;
+const LEFT_CURLY_BRACKET = 0x7B;
+const RIGHT_CURLY_BRACKET = 0x7D;
+const NULL_REPLACEMENT = 0xFFFD;
+function isWhitespace(cp) {
+    return cp === TABULATION || cp === LINE_FEED || cp === FORM_FEED || cp === CARRIAGE_RETURN || cp === SPACE;
+}
+function isUpperLetter(cp) {
+    return cp >= LATIN_CAPITAL_A && cp <= LATIN_CAPITAL_Z;
+}
+function isLowerLetter(cp) {
+    return cp >= LATIN_SMALL_A && cp <= LATIN_SMALL_Z;
+}
+function isLetter(cp) {
+    return isLowerLetter(cp) || isUpperLetter(cp);
+}
+function isDigit(cp) {
+    return cp >= DIGIT_0 && cp <= DIGIT_9;
+}
+function isUpperHexDigit(cp) {
+    return cp >= LATIN_CAPITAL_A && cp <= LATIN_CAPITAL_F;
+}
+function isLowerHexDigit(cp) {
+    return cp >= LATIN_SMALL_A && cp <= LATIN_SMALL_F;
+}
+function isHexDigit(cp) {
+    return isDigit(cp) || isUpperHexDigit(cp) || isLowerHexDigit(cp);
+}
+function isControl(cp) {
+    return (cp >= 0 && cp <= 0x1F) || (cp >= 0x7F && cp <= 0x9F);
+}
+function isSurrogate(cp) {
+    return cp >= 0xD800 && cp <= 0xDFFF;
+}
+function isSurrogatePair(cp) {
+    return cp >= 0xDC00 && cp <= 0xDFFF;
+}
+function isNonCharacter(cp) {
+    return ((cp >= 0xFDD0 && cp <= 0xFDEF) ||
+        ((cp & 0xFFFE) === 0xFFFE && cp <= 0x10FFFF));
+}
+function toLowerCodePoint(cp) {
+    return cp + 0x0020;
+}
+
+class Tokenizer {
+    constructor(text, parserOptions) {
+        this.vExpressionScriptState = null;
+        debug("[html] the source code length: %d", text.length);
+        this.text = text;
+        this.gaps = [];
+        this.lineTerminators = [];
+        this.parserOptions = parserOptions || {};
+        this.lastCodePoint = NULL;
+        this.offset = -1;
+        this.column = -1;
+        this.line = 1;
+        this.state = "DATA";
+        this.returnState = "DATA";
+        this.reconsuming = false;
+        this.buffer = [];
+        this.crStartOffset = -1;
+        this.crCode = 0;
+        this.errors = [];
+        this.committedToken = null;
+        this.provisionalToken = null;
+        this.currentToken = null;
+        this.lastTagOpenToken = null;
+        this.tokenStartOffset = -1;
+        this.tokenStartColumn = -1;
+        this.tokenStartLine = 1;
+        this.namespace = NS.HTML;
+        this.expressionEnabled = false;
+    }
+    nextToken() {
+        let cp = this.lastCodePoint;
+        while (this.committedToken == null &&
+            (cp !== EOF || this.reconsuming)) {
+            if (this.provisionalToken != null && !this.isProvisionalState()) {
+                this.commitProvisionalToken();
+                if (this.committedToken != null) {
+                    break;
+                }
+            }
+            if (this.reconsuming) {
+                this.reconsuming = false;
+                cp = this.lastCodePoint;
+            }
+            else {
+                cp = this.consumeNextCodePoint();
+            }
+            debug("[html] parse", cp, this.state);
+            this.state = this[this.state](cp);
+        }
+        {
+            const token = this.consumeCommittedToken();
+            if (token != null) {
+                return token;
+            }
+        }
+        assert(cp === EOF);
+        if (this.currentToken != null) {
+            this.endToken();
+            const token = this.consumeCommittedToken();
+            if (token != null) {
+                return token;
+            }
+        }
+        return this.currentToken;
+    }
+    consumeCommittedToken() {
+        const token = this.committedToken;
+        this.committedToken = null;
+        return token;
+    }
+    consumeNextCodePoint() {
+        if (this.offset >= this.text.length) {
+            this.lastCodePoint = EOF;
+            return EOF;
+        }
+        this.offset += this.lastCodePoint >= 0x10000 ? 2 : 1;
+        if (this.offset >= this.text.length) {
+            this.advanceLocation();
+            this.lastCodePoint = EOF;
+            return EOF;
+        }
+        const cp = this.text.codePointAt(this.offset);
+        if (isSurrogate(this.text.charCodeAt(this.offset)) &&
+            !isSurrogatePair(this.text.charCodeAt(this.offset + 1))) {
+            this.reportParseError("surrogate-in-input-stream");
+        }
+        if (isNonCharacter(cp)) {
+            this.reportParseError("noncharacter-in-input-stream");
+        }
+        if (isControl(cp) && !isWhitespace(cp) && cp !== NULL) {
+            this.reportParseError("control-character-in-input-stream");
+        }
+        if (this.lastCodePoint === CARRIAGE_RETURN && cp === LINE_FEED) {
+            this.lastCodePoint = LINE_FEED;
+            this.gaps.push(this.offset);
+            return this.consumeNextCodePoint();
+        }
+        this.advanceLocation();
+        this.lastCodePoint = cp;
+        if (cp === CARRIAGE_RETURN) {
+            return LINE_FEED;
+        }
+        return cp;
+    }
+    advanceLocation() {
+        if (this.lastCodePoint === LINE_FEED) {
+            this.lineTerminators.push(this.offset);
+            this.line += 1;
+            this.column = 0;
+        }
+        else {
+            this.column += this.lastCodePoint >= 0x10000 ? 2 : 1;
+        }
+    }
+    reconsumeAs(state) {
+        this.reconsuming = true;
+        return state;
+    }
+    reportParseError(code) {
+        const error = ParseError.fromCode(code, this.offset, this.line, this.column);
+        this.errors.push(error);
+        debug("[html] syntax error:", error.message);
+    }
+    setStartTokenMark() {
+        this.tokenStartOffset = this.offset;
+        this.tokenStartLine = this.line;
+        this.tokenStartColumn = this.column;
+    }
+    clearStartTokenMark() {
+        this.tokenStartOffset = -1;
+    }
+    startToken(type) {
+        if (this.tokenStartOffset === -1) {
+            this.setStartTokenMark();
+        }
+        const offset = this.tokenStartOffset;
+        const line = this.tokenStartLine;
+        const column = this.tokenStartColumn;
+        if (this.currentToken != null) {
+            this.endToken();
+        }
+        this.tokenStartOffset = -1;
+        const token = (this.currentToken = {
+            type,
+            range: [offset, -1],
+            loc: {
+                start: { line, column },
+                end: { line: -1, column: -1 },
+            },
+            value: "",
+        });
+        debug("[html] start token: %d %s", offset, token.type);
+        return this.currentToken;
+    }
+    endToken() {
+        if (this.currentToken == null) {
+            throw new Error("Invalid state");
+        }
+        if (this.tokenStartOffset === -1) {
+            this.setStartTokenMark();
+        }
+        const token = this.currentToken;
+        const offset = this.tokenStartOffset;
+        const line = this.tokenStartLine;
+        const column = this.tokenStartColumn;
+        const provisional = this.isProvisionalState();
+        this.currentToken = null;
+        this.tokenStartOffset = -1;
+        token.range[1] = offset;
+        token.loc.end.line = line;
+        token.loc.end.column = column;
+        if (token.range[0] === offset && !provisional) {
+            debug("[html] abandon token: %j %s %j", token.range, token.type, token.value);
+            return null;
+        }
+        if (provisional) {
+            if (this.provisionalToken != null) {
+                this.commitProvisionalToken();
+            }
+            this.provisionalToken = token;
+            debug("[html] provisional-commit token: %j %s %j", token.range, token.type, token.value);
+        }
+        else {
+            this.commitToken(token);
+        }
+        return token;
+    }
+    commitToken(token) {
+        assert(this.committedToken == null, "Invalid state: the commited token existed already.");
+        debug("[html] commit token: %j %j %s %j", token.range, token.loc, token.type, token.value);
+        this.committedToken = token;
+        if (token.type === "HTMLTagOpen") {
+            this.lastTagOpenToken = token;
+        }
+    }
+    isProvisionalState() {
+        return (this.state.startsWith("RCDATA_") ||
+            this.state.startsWith("RAWTEXT_"));
+    }
+    commitProvisionalToken() {
+        assert(this.provisionalToken != null, "Invalid state: the provisional token was not found.");
+        const token = this.provisionalToken;
+        this.provisionalToken = null;
+        if (token.range[0] < token.range[1]) {
+            this.commitToken(token);
+        }
+    }
+    rollbackProvisionalToken() {
+        assert(this.currentToken != null);
+        assert(this.provisionalToken != null);
+        const token = this.currentToken;
+        debug("[html] rollback token: %d %s", token.range[0], token.type);
+        this.currentToken = this.provisionalToken;
+        this.provisionalToken = null;
+    }
+    appendTokenValue(cp, expected) {
+        const token = this.currentToken;
+        if (token == null || (expected != null && token.type !== expected)) {
+            const msg1 = expected ? `"${expected}" type` : "any token";
+            const msg2 = token ? `"${token.type}" type` : "no token";
+            throw new Error(`Tokenizer: Invalid state. Expected ${msg1}, but got ${msg2}.`);
+        }
+        token.value += String.fromCodePoint(cp);
+    }
+    isAppropriateEndTagOpen() {
+        return (this.currentToken != null &&
+            this.lastTagOpenToken != null &&
+            this.currentToken.type === "HTMLEndTagOpen" &&
+            this.currentToken.value === this.lastTagOpenToken.value);
+    }
+    DATA(cp) {
+        this.clearStartTokenMark();
+        while (true) {
+            const type = isWhitespace(cp) ? "HTMLWhitespace" : "HTMLText";
+            if (this.currentToken != null && this.currentToken.type !== type) {
+                this.endToken();
+                return this.reconsumeAs(this.state);
+            }
+            if (this.currentToken == null) {
+                this.startToken(type);
+            }
+            if (cp === AMPERSAND) {
+                this.returnState = "DATA";
+                return "CHARACTER_REFERENCE";
+            }
+            if (cp === LESS_THAN_SIGN) {
+                this.setStartTokenMark();
+                return "TAG_OPEN";
+            }
+            if (cp === LEFT_CURLY_BRACKET && this.expressionEnabled) {
+                this.setStartTokenMark();
+                this.returnState = "DATA";
+                return "V_EXPRESSION_START";
+            }
+            if (cp === RIGHT_CURLY_BRACKET && this.expressionEnabled) {
+                this.setStartTokenMark();
+                this.returnState = "DATA";
+                return "V_EXPRESSION_END";
+            }
+            if (cp === EOF) {
+                return "DATA";
+            }
+            if (cp === NULL) {
+                this.reportParseError("unexpected-null-character");
+            }
+            this.appendTokenValue(cp, type);
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    RCDATA(cp) {
+        this.clearStartTokenMark();
+        while (true) {
+            const type = isWhitespace(cp) ? "HTMLWhitespace" : "HTMLRCDataText";
+            if (this.currentToken != null && this.currentToken.type !== type) {
+                this.endToken();
+                return this.reconsumeAs(this.state);
+            }
+            if (this.currentToken == null) {
+                this.startToken(type);
+            }
+            if (cp === AMPERSAND) {
+                this.returnState = "RCDATA";
+                return "CHARACTER_REFERENCE";
+            }
+            if (cp === LESS_THAN_SIGN) {
+                this.setStartTokenMark();
+                return "RCDATA_LESS_THAN_SIGN";
+            }
+            if (cp === LEFT_CURLY_BRACKET && this.expressionEnabled) {
+                this.setStartTokenMark();
+                this.returnState = "RCDATA";
+                return "V_EXPRESSION_START";
+            }
+            if (cp === RIGHT_CURLY_BRACKET && this.expressionEnabled) {
+                this.setStartTokenMark();
+                this.returnState = "RCDATA";
+                return "V_EXPRESSION_END";
+            }
+            if (cp === EOF) {
+                return "DATA";
+            }
+            if (cp === NULL) {
+                this.reportParseError("unexpected-null-character");
+                cp = NULL_REPLACEMENT;
+            }
+            this.appendTokenValue(cp, type);
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    RAWTEXT(cp) {
+        this.clearStartTokenMark();
+        while (true) {
+            const type = isWhitespace(cp) ? "HTMLWhitespace" : "HTMLRawText";
+            if (this.currentToken != null && this.currentToken.type !== type) {
+                this.endToken();
+                return this.reconsumeAs(this.state);
+            }
+            if (this.currentToken == null) {
+                this.startToken(type);
+            }
+            if (cp === LESS_THAN_SIGN) {
+                this.setStartTokenMark();
+                return "RAWTEXT_LESS_THAN_SIGN";
+            }
+            if (cp === LEFT_CURLY_BRACKET && this.expressionEnabled) {
+                this.setStartTokenMark();
+                this.returnState = "RAWTEXT";
+                return "V_EXPRESSION_START";
+            }
+            if (cp === RIGHT_CURLY_BRACKET && this.expressionEnabled) {
+                this.setStartTokenMark();
+                this.returnState = "RAWTEXT";
+                return "V_EXPRESSION_END";
+            }
+            if (cp === EOF) {
+                return "DATA";
+            }
+            if (cp === NULL) {
+                this.reportParseError("unexpected-null-character");
+                cp = NULL_REPLACEMENT;
+            }
+            this.appendTokenValue(cp, type);
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    TAG_OPEN(cp) {
+        if (cp === EXCLAMATION_MARK) {
+            return "MARKUP_DECLARATION_OPEN";
+        }
+        if (cp === SOLIDUS) {
+            return "END_TAG_OPEN";
+        }
+        if (isLetter(cp)) {
+            this.startToken("HTMLTagOpen");
+            return this.reconsumeAs("TAG_NAME");
+        }
+        if (cp === QUESTION_MARK) {
+            this.reportParseError("unexpected-question-mark-instead-of-tag-name");
+            this.startToken("HTMLBogusComment");
+            return this.reconsumeAs("BOGUS_COMMENT");
+        }
+        if (cp === EOF) {
+            this.clearStartTokenMark();
+            this.reportParseError("eof-before-tag-name");
+            this.appendTokenValue(LESS_THAN_SIGN, "HTMLText");
+            return "DATA";
+        }
+        this.reportParseError("invalid-first-character-of-tag-name");
+        this.appendTokenValue(LESS_THAN_SIGN, "HTMLText");
+        return this.reconsumeAs("DATA");
+    }
+    END_TAG_OPEN(cp) {
+        if (isLetter(cp)) {
+            this.startToken("HTMLEndTagOpen");
+            return this.reconsumeAs("TAG_NAME");
+        }
+        if (cp === GREATER_THAN_SIGN) {
+            this.endToken();
+            this.reportParseError("missing-end-tag-name");
+            return "DATA";
+        }
+        if (cp === EOF) {
+            this.clearStartTokenMark();
+            this.reportParseError("eof-before-tag-name");
+            this.appendTokenValue(LESS_THAN_SIGN, "HTMLText");
+            this.appendTokenValue(SOLIDUS, "HTMLText");
+            return "DATA";
+        }
+        this.reportParseError("invalid-first-character-of-tag-name");
+        this.startToken("HTMLBogusComment");
+        return this.reconsumeAs("BOGUS_COMMENT");
+    }
+    TAG_NAME(cp) {
+        while (true) {
+            if (isWhitespace(cp)) {
+                this.endToken();
+                return "BEFORE_ATTRIBUTE_NAME";
+            }
+            if (cp === SOLIDUS) {
+                this.endToken();
+                this.setStartTokenMark();
+                return "SELF_CLOSING_START_TAG";
+            }
+            if (cp === GREATER_THAN_SIGN) {
+                this.startToken("HTMLTagClose");
+                return "DATA";
+            }
+            if (cp === EOF) {
+                this.reportParseError("eof-in-tag");
+                return "DATA";
+            }
+            if (cp === NULL) {
+                this.reportParseError("unexpected-null-character");
+                cp = NULL_REPLACEMENT;
+            }
+            this.appendTokenValue(isUpperLetter(cp) ? toLowerCodePoint(cp) : cp, null);
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    RCDATA_LESS_THAN_SIGN(cp) {
+        if (cp === SOLIDUS) {
+            this.buffer = [];
+            return "RCDATA_END_TAG_OPEN";
+        }
+        this.appendTokenValue(LESS_THAN_SIGN, "HTMLRCDataText");
+        return this.reconsumeAs("RCDATA");
+    }
+    RCDATA_END_TAG_OPEN(cp) {
+        if (isLetter(cp)) {
+            this.startToken("HTMLEndTagOpen");
+            return this.reconsumeAs("RCDATA_END_TAG_NAME");
+        }
+        this.appendTokenValue(LESS_THAN_SIGN, "HTMLRCDataText");
+        this.appendTokenValue(SOLIDUS, "HTMLRCDataText");
+        return this.reconsumeAs("RCDATA");
+    }
+    RCDATA_END_TAG_NAME(cp) {
+        while (true) {
+            if (isWhitespace(cp) && this.isAppropriateEndTagOpen()) {
+                this.endToken();
+                return "BEFORE_ATTRIBUTE_NAME";
+            }
+            if (cp === SOLIDUS && this.isAppropriateEndTagOpen()) {
+                this.endToken();
+                this.setStartTokenMark();
+                return "SELF_CLOSING_START_TAG";
+            }
+            if (cp === GREATER_THAN_SIGN && this.isAppropriateEndTagOpen()) {
+                this.startToken("HTMLTagClose");
+                return "DATA";
+            }
+            if (!isLetter(cp)) {
+                this.rollbackProvisionalToken();
+                this.appendTokenValue(LESS_THAN_SIGN, "HTMLRCDataText");
+                this.appendTokenValue(SOLIDUS, "HTMLRCDataText");
+                for (const cp1 of this.buffer) {
+                    this.appendTokenValue(cp1, "HTMLRCDataText");
+                }
+                return this.reconsumeAs("RCDATA");
+            }
+            this.appendTokenValue(isUpperLetter(cp) ? toLowerCodePoint(cp) : cp, "HTMLEndTagOpen");
+            this.buffer.push(cp);
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    RAWTEXT_LESS_THAN_SIGN(cp) {
+        if (cp === SOLIDUS) {
+            this.buffer = [];
+            return "RAWTEXT_END_TAG_OPEN";
+        }
+        this.appendTokenValue(LESS_THAN_SIGN, "HTMLRawText");
+        return this.reconsumeAs("RAWTEXT");
+    }
+    RAWTEXT_END_TAG_OPEN(cp) {
+        if (isLetter(cp)) {
+            this.startToken("HTMLEndTagOpen");
+            return this.reconsumeAs("RAWTEXT_END_TAG_NAME");
+        }
+        this.appendTokenValue(LESS_THAN_SIGN, "HTMLRawText");
+        this.appendTokenValue(SOLIDUS, "HTMLRawText");
+        return this.reconsumeAs("RAWTEXT");
+    }
+    RAWTEXT_END_TAG_NAME(cp) {
+        while (true) {
+            if (cp === SOLIDUS && this.isAppropriateEndTagOpen()) {
+                this.endToken();
+                this.setStartTokenMark();
+                return "SELF_CLOSING_START_TAG";
+            }
+            if (cp === GREATER_THAN_SIGN && this.isAppropriateEndTagOpen()) {
+                this.startToken("HTMLTagClose");
+                return "DATA";
+            }
+            if (isWhitespace(cp) && this.isAppropriateEndTagOpen()) {
+                this.endToken();
+                return "BEFORE_ATTRIBUTE_NAME";
+            }
+            if (!isLetter(cp) && !maybeValidCustomBlock.call(this, cp)) {
+                this.rollbackProvisionalToken();
+                this.appendTokenValue(LESS_THAN_SIGN, "HTMLRawText");
+                this.appendTokenValue(SOLIDUS, "HTMLRawText");
+                for (const cp1 of this.buffer) {
+                    this.appendTokenValue(cp1, "HTMLRawText");
+                }
+                return this.reconsumeAs("RAWTEXT");
+            }
+            this.appendTokenValue(isUpperLetter(cp) ? toLowerCodePoint(cp) : cp, "HTMLEndTagOpen");
+            this.buffer.push(cp);
+            cp = this.consumeNextCodePoint();
+        }
+        function maybeValidCustomBlock(nextCp) {
+            return (this.currentToken &&
+                this.lastTagOpenToken &&
+                this.lastTagOpenToken.value.startsWith(this.currentToken.value + String.fromCodePoint(nextCp)));
+        }
+    }
+    BEFORE_ATTRIBUTE_NAME(cp) {
+        while (isWhitespace(cp)) {
+            cp = this.consumeNextCodePoint();
+        }
+        if (cp === SOLIDUS || cp === GREATER_THAN_SIGN || cp === EOF) {
+            return this.reconsumeAs("AFTER_ATTRIBUTE_NAME");
+        }
+        if (cp === EQUALS_SIGN) {
+            this.reportParseError("unexpected-equals-sign-before-attribute-name");
+            this.startToken("HTMLIdentifier");
+            this.appendTokenValue(cp, "HTMLIdentifier");
+            return "ATTRIBUTE_NAME";
+        }
+        this.startToken("HTMLIdentifier");
+        return this.reconsumeAs("ATTRIBUTE_NAME");
+    }
+    ATTRIBUTE_NAME(cp) {
+        while (true) {
+            if (isWhitespace(cp) ||
+                cp === SOLIDUS ||
+                cp === GREATER_THAN_SIGN ||
+                cp === EOF) {
+                this.endToken();
+                return this.reconsumeAs("AFTER_ATTRIBUTE_NAME");
+            }
+            if (cp === EQUALS_SIGN) {
+                this.startToken("HTMLAssociation");
+                return "BEFORE_ATTRIBUTE_VALUE";
+            }
+            if (cp === NULL) {
+                this.reportParseError("unexpected-null-character");
+                cp = NULL_REPLACEMENT;
+            }
+            if (cp === QUOTATION_MARK ||
+                cp === APOSTROPHE ||
+                cp === LESS_THAN_SIGN) {
+                this.reportParseError("unexpected-character-in-attribute-name");
+            }
+            this.appendTokenValue(isUpperLetter(cp) ? toLowerCodePoint(cp) : cp, "HTMLIdentifier");
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    AFTER_ATTRIBUTE_NAME(cp) {
+        while (isWhitespace(cp)) {
+            cp = this.consumeNextCodePoint();
+        }
+        if (cp === SOLIDUS) {
+            this.setStartTokenMark();
+            return "SELF_CLOSING_START_TAG";
+        }
+        if (cp === EQUALS_SIGN) {
+            this.startToken("HTMLAssociation");
+            return "BEFORE_ATTRIBUTE_VALUE";
+        }
+        if (cp === GREATER_THAN_SIGN) {
+            this.startToken("HTMLTagClose");
+            return "DATA";
+        }
+        if (cp === EOF) {
+            this.reportParseError("eof-in-tag");
+            return "DATA";
+        }
+        this.startToken("HTMLIdentifier");
+        return this.reconsumeAs("ATTRIBUTE_NAME");
+    }
+    BEFORE_ATTRIBUTE_VALUE(cp) {
+        this.endToken();
+        while (isWhitespace(cp)) {
+            cp = this.consumeNextCodePoint();
+        }
+        if (cp === GREATER_THAN_SIGN) {
+            this.reportParseError("missing-attribute-value");
+            this.startToken("HTMLTagClose");
+            return "DATA";
+        }
+        this.startToken("HTMLLiteral");
+        if (cp === QUOTATION_MARK) {
+            return "ATTRIBUTE_VALUE_DOUBLE_QUOTED";
+        }
+        if (cp === APOSTROPHE) {
+            return "ATTRIBUTE_VALUE_SINGLE_QUOTED";
+        }
+        return this.reconsumeAs("ATTRIBUTE_VALUE_UNQUOTED");
+    }
+    ATTRIBUTE_VALUE_DOUBLE_QUOTED(cp) {
+        while (true) {
+            if (cp === QUOTATION_MARK) {
+                return "AFTER_ATTRIBUTE_VALUE_QUOTED";
+            }
+            if (cp === AMPERSAND) {
+                this.returnState = "ATTRIBUTE_VALUE_DOUBLE_QUOTED";
+                return "CHARACTER_REFERENCE";
+            }
+            if (cp === NULL) {
+                this.reportParseError("unexpected-null-character");
+                cp = NULL_REPLACEMENT;
+            }
+            if (cp === EOF) {
+                this.reportParseError("eof-in-tag");
+                return "DATA";
+            }
+            this.appendTokenValue(cp, "HTMLLiteral");
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    ATTRIBUTE_VALUE_SINGLE_QUOTED(cp) {
+        while (true) {
+            if (cp === APOSTROPHE) {
+                return "AFTER_ATTRIBUTE_VALUE_QUOTED";
+            }
+            if (cp === AMPERSAND) {
+                this.returnState = "ATTRIBUTE_VALUE_SINGLE_QUOTED";
+                return "CHARACTER_REFERENCE";
+            }
+            if (cp === NULL) {
+                this.reportParseError("unexpected-null-character");
+                cp = NULL_REPLACEMENT;
+            }
+            if (cp === EOF) {
+                this.reportParseError("eof-in-tag");
+                return "DATA";
+            }
+            this.appendTokenValue(cp, "HTMLLiteral");
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    ATTRIBUTE_VALUE_UNQUOTED(cp) {
+        while (true) {
+            if (isWhitespace(cp)) {
+                this.endToken();
+                return "BEFORE_ATTRIBUTE_NAME";
+            }
+            if (cp === AMPERSAND) {
+                this.returnState = "ATTRIBUTE_VALUE_UNQUOTED";
+                return "CHARACTER_REFERENCE";
+            }
+            if (cp === GREATER_THAN_SIGN) {
+                this.startToken("HTMLTagClose");
+                return "DATA";
+            }
+            if (cp === NULL) {
+                this.reportParseError("unexpected-null-character");
+                cp = NULL_REPLACEMENT;
+            }
+            if (cp === QUOTATION_MARK ||
+                cp === APOSTROPHE ||
+                cp === LESS_THAN_SIGN ||
+                cp === EQUALS_SIGN ||
+                cp === GRAVE_ACCENT) {
+                this.reportParseError("unexpected-character-in-unquoted-attribute-value");
+            }
+            if (cp === EOF) {
+                this.reportParseError("eof-in-tag");
+                return "DATA";
+            }
+            this.appendTokenValue(cp, "HTMLLiteral");
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    AFTER_ATTRIBUTE_VALUE_QUOTED(cp) {
+        this.endToken();
+        if (isWhitespace(cp)) {
+            return "BEFORE_ATTRIBUTE_NAME";
+        }
+        if (cp === SOLIDUS) {
+            this.setStartTokenMark();
+            return "SELF_CLOSING_START_TAG";
+        }
+        if (cp === GREATER_THAN_SIGN) {
+            this.startToken("HTMLTagClose");
+            return "DATA";
+        }
+        if (cp === EOF) {
+            this.reportParseError("eof-in-tag");
+            return "DATA";
+        }
+        this.reportParseError("missing-whitespace-between-attributes");
+        return this.reconsumeAs("BEFORE_ATTRIBUTE_NAME");
+    }
+    SELF_CLOSING_START_TAG(cp) {
+        if (cp === GREATER_THAN_SIGN) {
+            this.startToken("HTMLSelfClosingTagClose");
+            return "DATA";
+        }
+        if (cp === EOF) {
+            this.reportParseError("eof-in-tag");
+            return "DATA";
+        }
+        this.reportParseError("unexpected-solidus-in-tag");
+        this.clearStartTokenMark();
+        return this.reconsumeAs("BEFORE_ATTRIBUTE_NAME");
+    }
+    BOGUS_COMMENT(cp) {
+        while (true) {
+            if (cp === GREATER_THAN_SIGN) {
+                return "DATA";
+            }
+            if (cp === EOF) {
+                return "DATA";
+            }
+            if (cp === NULL) {
+                cp = NULL_REPLACEMENT;
+            }
+            this.appendTokenValue(cp, null);
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    MARKUP_DECLARATION_OPEN(cp) {
+        if (cp === HYPHEN_MINUS && this.text[this.offset + 1] === "-") {
+            this.offset += 1;
+            this.column += 1;
+            this.startToken("HTMLComment");
+            return "COMMENT_START";
+        }
+        if (cp === LATIN_CAPITAL_D &&
+            this.text.slice(this.offset + 1, this.offset + 7) === "OCTYPE") {
+            this.startToken("HTMLBogusComment");
+            this.appendTokenValue(cp, "HTMLBogusComment");
+            return "BOGUS_COMMENT";
+        }
+        if (cp === LEFT_SQUARE_BRACKET &&
+            this.text.slice(this.offset + 1, this.offset + 7) === "CDATA[") {
+            this.offset += 6;
+            this.column += 6;
+            if (this.namespace === NS.HTML) {
+                this.reportParseError("cdata-in-html-content");
+                this.startToken("HTMLBogusComment").value = "[CDATA[";
+                return "BOGUS_COMMENT";
+            }
+            this.startToken("HTMLCDataText");
+            return "CDATA_SECTION";
+        }
+        this.reportParseError("incorrectly-opened-comment");
+        this.startToken("HTMLBogusComment");
+        return this.reconsumeAs("BOGUS_COMMENT");
+    }
+    COMMENT_START(cp) {
+        if (cp === HYPHEN_MINUS) {
+            return "COMMENT_START_DASH";
+        }
+        if (cp === GREATER_THAN_SIGN) {
+            this.reportParseError("abrupt-closing-of-empty-comment");
+            return "DATA";
+        }
+        return this.reconsumeAs("COMMENT");
+    }
+    COMMENT_START_DASH(cp) {
+        if (cp === HYPHEN_MINUS) {
+            return "COMMENT_END";
+        }
+        if (cp === GREATER_THAN_SIGN) {
+            this.reportParseError("abrupt-closing-of-empty-comment");
+            return "DATA";
+        }
+        if (cp === EOF) {
+            this.reportParseError("eof-in-comment");
+            return "DATA";
+        }
+        this.appendTokenValue(HYPHEN_MINUS, "HTMLComment");
+        return this.reconsumeAs("COMMENT");
+    }
+    COMMENT(cp) {
+        while (true) {
+            if (cp === LESS_THAN_SIGN) {
+                this.appendTokenValue(LESS_THAN_SIGN, "HTMLComment");
+                return "COMMENT_LESS_THAN_SIGN";
+            }
+            if (cp === HYPHEN_MINUS) {
+                return "COMMENT_END_DASH";
+            }
+            if (cp === NULL) {
+                this.reportParseError("unexpected-null-character");
+                cp = NULL_REPLACEMENT;
+            }
+            if (cp === EOF) {
+                this.reportParseError("eof-in-comment");
+                return "DATA";
+            }
+            this.appendTokenValue(cp, "HTMLComment");
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    COMMENT_LESS_THAN_SIGN(cp) {
+        while (true) {
+            if (cp === EXCLAMATION_MARK) {
+                this.appendTokenValue(cp, "HTMLComment");
+                return "COMMENT_LESS_THAN_SIGN_BANG";
+            }
+            if (cp !== LESS_THAN_SIGN) {
+                return this.reconsumeAs("COMMENT");
+            }
+            this.appendTokenValue(cp, "HTMLComment");
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    COMMENT_LESS_THAN_SIGN_BANG(cp) {
+        if (cp === HYPHEN_MINUS) {
+            return "COMMENT_LESS_THAN_SIGN_BANG_DASH";
+        }
+        return this.reconsumeAs("COMMENT");
+    }
+    COMMENT_LESS_THAN_SIGN_BANG_DASH(cp) {
+        if (cp === HYPHEN_MINUS) {
+            return "COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH";
+        }
+        return this.reconsumeAs("COMMENT_END_DASH");
+    }
+    COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH(cp) {
+        if (cp !== GREATER_THAN_SIGN && cp !== EOF) {
+            this.reportParseError("nested-comment");
+        }
+        return this.reconsumeAs("COMMENT_END");
+    }
+    COMMENT_END_DASH(cp) {
+        if (cp === HYPHEN_MINUS) {
+            return "COMMENT_END";
+        }
+        if (cp === EOF) {
+            this.reportParseError("eof-in-comment");
+            return "DATA";
+        }
+        this.appendTokenValue(HYPHEN_MINUS, "HTMLComment");
+        return this.reconsumeAs("COMMENT");
+    }
+    COMMENT_END(cp) {
+        while (true) {
+            if (cp === GREATER_THAN_SIGN) {
+                return "DATA";
+            }
+            if (cp === EXCLAMATION_MARK) {
+                return "COMMENT_END_BANG";
+            }
+            if (cp === EOF) {
+                this.reportParseError("eof-in-comment");
+                return "DATA";
+            }
+            this.appendTokenValue(HYPHEN_MINUS, "HTMLComment");
+            if (cp !== HYPHEN_MINUS) {
+                this.appendTokenValue(HYPHEN_MINUS, "HTMLComment");
+                return this.reconsumeAs("COMMENT");
+            }
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    COMMENT_END_BANG(cp) {
+        if (cp === HYPHEN_MINUS) {
+            this.appendTokenValue(HYPHEN_MINUS, "HTMLComment");
+            this.appendTokenValue(EXCLAMATION_MARK, "HTMLComment");
+            return "COMMENT_END_DASH";
+        }
+        if (cp === GREATER_THAN_SIGN) {
+            this.reportParseError("incorrectly-closed-comment");
+            return "DATA";
+        }
+        if (cp === EOF) {
+            this.reportParseError("eof-in-comment");
+            return "DATA";
+        }
+        this.appendTokenValue(HYPHEN_MINUS, "HTMLComment");
+        this.appendTokenValue(EXCLAMATION_MARK, "HTMLComment");
+        return this.reconsumeAs("COMMENT");
+    }
+    CDATA_SECTION(cp) {
+        while (true) {
+            if (cp === RIGHT_SQUARE_BRACKET) {
+                return "CDATA_SECTION_BRACKET";
+            }
+            if (cp === EOF) {
+                this.reportParseError("eof-in-cdata");
+                return "DATA";
+            }
+            this.appendTokenValue(cp, "HTMLCDataText");
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    CDATA_SECTION_BRACKET(cp) {
+        if (cp === RIGHT_SQUARE_BRACKET) {
+            return "CDATA_SECTION_END";
+        }
+        this.appendTokenValue(RIGHT_SQUARE_BRACKET, "HTMLCDataText");
+        return this.reconsumeAs("CDATA_SECTION");
+    }
+    CDATA_SECTION_END(cp) {
+        while (true) {
+            if (cp === GREATER_THAN_SIGN) {
+                return "DATA";
+            }
+            if (cp !== RIGHT_SQUARE_BRACKET) {
+                this.appendTokenValue(RIGHT_SQUARE_BRACKET, "HTMLCDataText");
+                this.appendTokenValue(RIGHT_SQUARE_BRACKET, "HTMLCDataText");
+                return this.reconsumeAs("CDATA_SECTION");
+            }
+            this.appendTokenValue(RIGHT_SQUARE_BRACKET, "HTMLCDataText");
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    CHARACTER_REFERENCE(cp) {
+        this.crStartOffset = this.offset - 1;
+        this.buffer = [AMPERSAND];
+        if (isWhitespace(cp) || cp === LESS_THAN_SIGN || cp === EOF) {
+            return this.reconsumeAs("CHARACTER_REFERENCE_END");
+        }
+        if (cp === NUMBER_SIGN) {
+            this.buffer.push(cp);
+            return "NUMERIC_CHARACTER_REFERENCE";
+        }
+        return this.reconsumeAs("NAMED_CHARACTER_REFERENCE");
+    }
+    NAMED_CHARACTER_REFERENCE(cp) {
+        for (const entitySet of entitySets) {
+            const length = entitySet.length;
+            const entities = entitySet.entities;
+            const text = this.text.slice(this.offset, this.offset + length);
+            const codepoints = entities[text];
+            if (codepoints == null) {
+                continue;
+            }
+            const semi = text.endsWith(";");
+            const next = this.text.codePointAt(this.offset + 1);
+            this.offset += length - 1;
+            this.column += length - 1;
+            if (this.returnState.startsWith("ATTR") &&
+                !semi &&
+                next != null &&
+                (next === EQUALS_SIGN || isLetter(next) || isDigit(next))) {
+                for (const cp1 of text) {
+                    this.buffer.push(cp1.codePointAt(0));
+                }
+            }
+            else {
+                if (!semi) {
+                    this.reportParseError("missing-semicolon-after-character-reference");
+                }
+                this.buffer = codepoints;
+            }
+            return "CHARACTER_REFERENCE_END";
+        }
+        for (const cp0 of this.buffer) {
+            this.appendTokenValue(cp0, null);
+        }
+        this.appendTokenValue(cp, null);
+        return "AMBIGUOUS_AMPERSAND";
+    }
+    AMBIGUOUS_AMPERSAND(cp) {
+        while (isDigit(cp) || isLetter(cp)) {
+            this.appendTokenValue(cp, null);
+            cp = this.consumeNextCodePoint();
+        }
+        if (cp === SEMICOLON) {
+            this.reportParseError("unknown-named-character-reference");
+        }
+        return this.reconsumeAs(this.returnState);
+    }
+    NUMERIC_CHARACTER_REFERENCE(cp) {
+        this.crCode = 0;
+        if (cp === LATIN_SMALL_X || cp === LATIN_CAPITAL_X) {
+            this.buffer.push(cp);
+            return "HEXADEMICAL_CHARACTER_REFERENCE_START";
+        }
+        return this.reconsumeAs("DECIMAL_CHARACTER_REFERENCE_START");
+    }
+    HEXADEMICAL_CHARACTER_REFERENCE_START(cp) {
+        if (isHexDigit(cp)) {
+            return this.reconsumeAs("HEXADEMICAL_CHARACTER_REFERENCE");
+        }
+        this.reportParseError("absence-of-digits-in-numeric-character-reference");
+        return this.reconsumeAs("CHARACTER_REFERENCE_END");
+    }
+    DECIMAL_CHARACTER_REFERENCE_START(cp) {
+        if (isDigit(cp)) {
+            return this.reconsumeAs("DECIMAL_CHARACTER_REFERENCE");
+        }
+        this.reportParseError("absence-of-digits-in-numeric-character-reference");
+        return this.reconsumeAs("CHARACTER_REFERENCE_END");
+    }
+    HEXADEMICAL_CHARACTER_REFERENCE(cp) {
+        while (true) {
+            if (isDigit(cp)) {
+                this.crCode = 16 * this.crCode + (cp - 0x30);
+            }
+            else if (isUpperHexDigit(cp)) {
+                this.crCode = 16 * this.crCode + (cp - 0x37);
+            }
+            else if (isLowerHexDigit(cp)) {
+                this.crCode = 16 * this.crCode + (cp - 0x57);
+            }
+            else {
+                if (cp === SEMICOLON) {
+                    return "NUMERIC_CHARACTER_REFERENCE_END";
+                }
+                this.reportParseError("missing-semicolon-after-character-reference");
+                return this.reconsumeAs("NUMERIC_CHARACTER_REFERENCE_END");
+            }
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    DECIMAL_CHARACTER_REFERENCE(cp) {
+        while (true) {
+            if (isDigit(cp)) {
+                this.crCode = 10 * this.crCode + (cp - 0x30);
+            }
+            else {
+                if (cp === SEMICOLON) {
+                    return "NUMERIC_CHARACTER_REFERENCE_END";
+                }
+                this.reportParseError("missing-semicolon-after-character-reference");
+                return this.reconsumeAs("NUMERIC_CHARACTER_REFERENCE_END");
+            }
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    NUMERIC_CHARACTER_REFERENCE_END(_cp) {
+        let code = this.crCode;
+        if (code === 0) {
+            this.reportParseError("null-character-reference");
+            code = NULL_REPLACEMENT;
+        }
+        else if (code > 0x10ffff) {
+            this.reportParseError("character-reference-outside-unicode-range");
+            code = NULL_REPLACEMENT;
+        }
+        else if (isSurrogate(code)) {
+            this.reportParseError("surrogate-character-reference");
+            code = NULL_REPLACEMENT;
+        }
+        else if (isNonCharacter(code)) {
+            this.reportParseError("noncharacter-character-reference");
+        }
+        else if (code === 0x0d || (isControl(code) && !isWhitespace(code))) {
+            this.reportParseError("control-character-reference");
+            code = alternativeCR.get(code) || code;
+        }
+        this.buffer = [code];
+        return this.reconsumeAs("CHARACTER_REFERENCE_END");
+    }
+    CHARACTER_REFERENCE_END(_cp) {
+        assert(this.currentToken != null);
+        const token = this.currentToken;
+        const len0 = token.value.length;
+        for (const cp1 of this.buffer) {
+            this.appendTokenValue(cp1, null);
+        }
+        const newLength = token.value.length - len0;
+        for (let i = this.crStartOffset + newLength; i < this.offset; ++i) {
+            this.gaps.push(i);
+        }
+        return this.reconsumeAs(this.returnState);
+    }
+    V_EXPRESSION_START(cp) {
+        var _a;
+        if (cp === LEFT_CURLY_BRACKET) {
+            this.startToken("VExpressionStart");
+            this.appendTokenValue(LEFT_CURLY_BRACKET, null);
+            this.appendTokenValue(LEFT_CURLY_BRACKET, null);
+            if (!((_a = this.parserOptions.vueFeatures) === null || _a === void 0 ? void 0 : _a.interpolationAsNonHTML)) {
+                return this.returnState;
+            }
+            const closeIndex = this.text.indexOf("}}", this.offset + 1);
+            if (closeIndex === -1) {
+                this.reportParseError("x-missing-interpolation-end");
+                return this.returnState;
+            }
+            this.vExpressionScriptState = {
+                state: this.returnState,
+            };
+            return "V_EXPRESSION_DATA";
+        }
+        this.appendTokenValue(LEFT_CURLY_BRACKET, null);
+        return this.reconsumeAs(this.returnState);
+    }
+    V_EXPRESSION_DATA(cp) {
+        this.clearStartTokenMark();
+        const state = this.vExpressionScriptState.state;
+        while (true) {
+            const type = isWhitespace(cp)
+                ? "HTMLWhitespace"
+                : state === "RCDATA"
+                    ? "HTMLRawText"
+                    : state === "RAWTEXT"
+                        ? "HTMLRCDataText"
+                        : "HTMLText";
+            if (this.currentToken != null && this.currentToken.type !== type) {
+                this.endToken();
+                return this.reconsumeAs(this.state);
+            }
+            if (this.currentToken == null) {
+                this.startToken(type);
+            }
+            if (cp === AMPERSAND && state !== "RAWTEXT") {
+                this.returnState = "V_EXPRESSION_DATA";
+                return "CHARACTER_REFERENCE";
+            }
+            if (cp === RIGHT_CURLY_BRACKET) {
+                this.setStartTokenMark();
+                this.returnState = "V_EXPRESSION_DATA";
+                return "V_EXPRESSION_END";
+            }
+            if (cp === EOF) {
+                this.reportParseError("x-missing-interpolation-end");
+                return "DATA";
+            }
+            if (cp === NULL) {
+                this.reportParseError("unexpected-null-character");
+            }
+            this.appendTokenValue(cp, type);
+            cp = this.consumeNextCodePoint();
+        }
+    }
+    V_EXPRESSION_END(cp) {
+        if (cp === RIGHT_CURLY_BRACKET) {
+            this.startToken("VExpressionEnd");
+            this.appendTokenValue(RIGHT_CURLY_BRACKET, null);
+            this.appendTokenValue(RIGHT_CURLY_BRACKET, null);
+            return this.vExpressionScriptState
+                ? this.vExpressionScriptState.state
+                : this.returnState;
+        }
+        this.appendTokenValue(RIGHT_CURLY_BRACKET, null);
+        return this.reconsumeAs(this.returnState);
+    }
+}
+
+function getPossibleTypes(parsedSelector) {
+    switch (parsedSelector.type) {
+        case "identifier":
+            return [parsedSelector.value];
+        case "matches": {
+            const typesForComponents = parsedSelector.selectors.map(getPossibleTypes);
+            if (typesForComponents.every(Boolean)) {
+                return union(...typesForComponents);
+            }
+            return null;
+        }
+        case "compound": {
+            const typesForComponents = parsedSelector.selectors.map(getPossibleTypes).filter(Boolean);
+            if (!typesForComponents.length) {
+                return null;
+            }
+            return intersection(...typesForComponents);
+        }
+        case "child":
+        case "descendant":
+        case "sibling":
+        case "adjacent":
+            return getPossibleTypes(parsedSelector.right);
+        default:
+            return null;
+    }
+}
+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((sum, childSelector) => sum + countClassAttributes(childSelector), 0);
+        case "attribute":
+        case "field":
+        case "nth-child":
+        case "nth-last-child":
+            return 1;
+        default:
+            return 0;
+    }
+}
+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((sum, childSelector) => sum + countIdentifiers(childSelector), 0);
+        case "identifier":
+            return 1;
+        default:
+            return 0;
+    }
+}
+function compareSpecificity(selectorA, selectorB) {
+    return selectorA.attributeCount - selectorB.attributeCount ||
+        selectorA.identifierCount - selectorB.identifierCount ||
+        (selectorA.rawSelector <= selectorB.rawSelector ? -1 : 1);
+}
+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;
+    }
+}
+const parseSelector = memoize(rawSelector => {
+    const parsedSelector = tryParseSelector(rawSelector);
+    return {
+        rawSelector,
+        isExit: rawSelector.endsWith(":exit"),
+        parsedSelector,
+        listenerTypes: getPossibleTypes(parsedSelector),
+        attributeCount: countClassAttributes(parsedSelector),
+        identifierCount: countIdentifiers(parsedSelector),
+    };
+});
+class NodeEventGenerator {
+    constructor(emitter) {
+        this.emitter = emitter;
+        this.currentAncestry = [];
+        this.enterSelectorsByNodeType = new Map();
+        this.exitSelectorsByNodeType = new Map();
+        this.anyTypeEnterSelectors = [];
+        this.anyTypeExitSelectors = [];
+        const eventNames = typeof emitter.eventNames === "function"
+            ? emitter.eventNames()
+            : Object.keys(emitter._events);
+        for (const rawSelector of eventNames) {
+            if (typeof rawSelector === "symbol") {
+                continue;
+            }
+            const selector = parseSelector(rawSelector);
+            if (selector.listenerTypes) {
+                for (const nodeType of selector.listenerTypes) {
+                    const typeMap = selector.isExit ? this.exitSelectorsByNodeType : this.enterSelectorsByNodeType;
+                    let selectors = typeMap.get(nodeType);
+                    if (selectors == null) {
+                        typeMap.set(nodeType, (selectors = []));
+                    }
+                    selectors.push(selector);
+                }
+            }
+            else {
+                (selector.isExit ? this.anyTypeExitSelectors : this.anyTypeEnterSelectors).push(selector);
+            }
+        }
+        this.anyTypeEnterSelectors.sort(compareSpecificity);
+        this.anyTypeExitSelectors.sort(compareSpecificity);
+        for (const selectorList of this.enterSelectorsByNodeType.values()) {
+            selectorList.sort(compareSpecificity);
+        }
+        for (const selectorList of this.exitSelectorsByNodeType.values()) {
+            selectorList.sort(compareSpecificity);
+        }
+    }
+    applySelector(node, selector) {
+        if (esquery.matches(node, selector.parsedSelector, this.currentAncestry)) {
+            this.emitter.emit(selector.rawSelector, node);
+        }
+    }
+    applySelectors(node, isExit) {
+        const selectorsByNodeType = (isExit ? this.exitSelectorsByNodeType : this.enterSelectorsByNodeType).get(node.type) || [];
+        const anyTypeSelectors = isExit ? this.anyTypeExitSelectors : this.anyTypeEnterSelectors;
+        let selectorsByTypeIndex = 0;
+        let 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++]);
+            }
+        }
+    }
+    enterNode(node) {
+        if (node.parent) {
+            this.currentAncestry.unshift(node.parent);
+        }
+        this.applySelectors(node, false);
+    }
+    leaveNode(node) {
+        this.applySelectors(node, true);
+        this.currentAncestry.shift();
+    }
+}
+
+function getStartLocation(token) {
+    return token.range[0];
+}
+function search(tokens, location) {
+    return sortedIndexBy(tokens, { range: [location] }, getStartLocation);
+}
+function getFirstIndex(tokens, indexMap, startLoc) {
+    if (startLoc in indexMap) {
+        return indexMap[startLoc];
+    }
+    if ((startLoc - 1) in indexMap) {
+        const index = indexMap[startLoc - 1];
+        const token = (index >= 0 && index < tokens.length) ? tokens[index] : null;
+        if (token && token.range[0] >= startLoc) {
+            return index;
+        }
+        return index + 1;
+    }
+    return 0;
+}
+function getLastIndex(tokens, indexMap, endLoc) {
+    if (endLoc in indexMap) {
+        return indexMap[endLoc] - 1;
+    }
+    if ((endLoc - 1) in indexMap) {
+        const index = indexMap[endLoc - 1];
+        const token = (index >= 0 && index < tokens.length) ? tokens[index] : null;
+        if (token && token.range[1] > endLoc) {
+            return index - 1;
+        }
+        return index;
+    }
+    return tokens.length - 1;
+}
+
+class Cursor {
+    constructor() {
+        this.current = null;
+    }
+    getOneToken() {
+        return this.moveNext() ? this.current : null;
+    }
+    getAllTokens() {
+        const tokens = [];
+        while (this.moveNext()) {
+            tokens.push(this.current);
+        }
+        return tokens;
+    }
+}
+
+class BackwardTokenCommentCursor extends Cursor {
+    constructor(tokens, comments, indexMap, startLoc, endLoc) {
+        super();
+        this.tokens = tokens;
+        this.comments = comments;
+        this.tokenIndex = getLastIndex(tokens, indexMap, endLoc);
+        this.commentIndex = search(comments, endLoc) - 1;
+        this.border = startLoc;
+    }
+    moveNext() {
+        const token = (this.tokenIndex >= 0) ? this.tokens[this.tokenIndex] : null;
+        const 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 this.current != null && (this.border === -1 || this.current.range[0] >= this.border);
+    }
+}
+
+class BackwardTokenCursor extends Cursor {
+    constructor(tokens, _comments, indexMap, startLoc, endLoc) {
+        super();
+        this.tokens = tokens;
+        this.index = getLastIndex(tokens, indexMap, endLoc);
+        this.indexEnd = getFirstIndex(tokens, indexMap, startLoc);
+    }
+    moveNext() {
+        if (this.index >= this.indexEnd) {
+            this.current = this.tokens[this.index];
+            this.index -= 1;
+            return true;
+        }
+        return false;
+    }
+    getOneToken() {
+        return (this.index >= this.indexEnd) ? this.tokens[this.index] : null;
+    }
+}
+
+class DecorativeCursor extends Cursor {
+    constructor(cursor) {
+        super();
+        this.cursor = cursor;
+    }
+    moveNext() {
+        const retv = this.cursor.moveNext();
+        this.current = this.cursor.current;
+        return retv;
+    }
+}
+
+class FilterCursor extends DecorativeCursor {
+    constructor(cursor, predicate) {
+        super(cursor);
+        this.predicate = predicate;
+    }
+    moveNext() {
+        const predicate = this.predicate;
+        while (super.moveNext()) {
+            if (predicate(this.current)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
+
+class ForwardTokenCommentCursor extends Cursor {
+    constructor(tokens, comments, indexMap, startLoc, endLoc) {
+        super();
+        this.tokens = tokens;
+        this.comments = comments;
+        this.tokenIndex = getFirstIndex(tokens, indexMap, startLoc);
+        this.commentIndex = search(comments, startLoc);
+        this.border = endLoc;
+    }
+    moveNext() {
+        const token = (this.tokenIndex < this.tokens.length) ? this.tokens[this.tokenIndex] : null;
+        const 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 this.current != null && (this.border === -1 || this.current.range[1] <= this.border);
+    }
+}
+
+class ForwardTokenCursor extends Cursor {
+    constructor(tokens, _comments, indexMap, startLoc, endLoc) {
+        super();
+        this.tokens = tokens;
+        this.index = getFirstIndex(tokens, indexMap, startLoc);
+        this.indexEnd = getLastIndex(tokens, indexMap, endLoc);
+    }
+    moveNext() {
+        if (this.index <= this.indexEnd) {
+            this.current = this.tokens[this.index];
+            this.index += 1;
+            return true;
+        }
+        return false;
+    }
+    getOneToken() {
+        return (this.index <= this.indexEnd) ? this.tokens[this.index] : null;
+    }
+    getAllTokens() {
+        return this.tokens.slice(this.index, this.indexEnd + 1);
+    }
+}
+
+class LimitCursor extends DecorativeCursor {
+    constructor(cursor, count) {
+        super(cursor);
+        this.count = count;
+    }
+    moveNext() {
+        if (this.count > 0) {
+            this.count -= 1;
+            return super.moveNext();
+        }
+        return false;
+    }
+}
+
+class SkipCursor extends DecorativeCursor {
+    constructor(cursor, count) {
+        super(cursor);
+        this.count = count;
+    }
+    moveNext() {
+        while (this.count > 0) {
+            this.count -= 1;
+            if (!super.moveNext()) {
+                return false;
+            }
+        }
+        return super.moveNext();
+    }
+}
+
+class CursorFactory {
+    constructor(TokenCursor, TokenCommentCursor) {
+        this.TokenCursor = TokenCursor;
+        this.TokenCommentCursor = TokenCommentCursor;
+    }
+    createBaseCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments) {
+        const TokenCursor = includeComments ? this.TokenCommentCursor : this.TokenCursor;
+        return new TokenCursor(tokens, comments, indexMap, startLoc, endLoc);
+    }
+    createCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments, filter, skip, count) {
+        let 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;
+    }
+}
+const forward = new CursorFactory(ForwardTokenCursor, ForwardTokenCommentCursor);
+const backward = new CursorFactory(BackwardTokenCursor, BackwardTokenCommentCursor);
+
+class PaddedTokenCursor extends ForwardTokenCursor {
+    constructor(tokens, comments, indexMap, startLoc, endLoc, beforeCount, afterCount) {
+        super(tokens, comments, indexMap, startLoc, endLoc);
+        this.index = Math.max(0, this.index - beforeCount);
+        this.indexEnd = Math.min(tokens.length - 1, this.indexEnd + afterCount);
+    }
+}
+
+function isCommentToken(token) {
+    return token.type === "Line" || token.type === "Block" || token.type === "Shebang";
+}
+function createIndexMap(tokens, comments) {
+    const map = Object.create(null);
+    let tokenIndex = 0;
+    let commentIndex = 0;
+    let nextStart = 0;
+    let range = null;
+    while (tokenIndex < tokens.length || commentIndex < comments.length) {
+        nextStart = (commentIndex < comments.length) ? comments[commentIndex].range[0] : Number.MAX_SAFE_INTEGER;
+        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] : Number.MAX_SAFE_INTEGER;
+        while (commentIndex < comments.length && (range = comments[commentIndex].range)[0] < nextStart) {
+            map[range[0]] = tokenIndex;
+            map[range[1] - 1] = tokenIndex;
+            commentIndex += 1;
+        }
+    }
+    return map;
+}
+function createCursorWithSkip(factory, tokens, comments, indexMap, startLoc, endLoc, opts) {
+    let includeComments = false;
+    let skip = 0;
+    let filter = null;
+    if (typeof opts === "number") {
+        skip = opts | 0;
+    }
+    else if (typeof opts === "function") {
+        filter = opts;
+    }
+    else if (opts) {
+        includeComments = Boolean(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);
+}
+function createCursorWithCount(factory, tokens, comments, indexMap, startLoc, endLoc, opts) {
+    let includeComments = false;
+    let count = 0;
+    let countExists = false;
+    let filter = null;
+    if (typeof opts === "number") {
+        count = opts | 0;
+        countExists = true;
+    }
+    else if (typeof opts === "function") {
+        filter = opts;
+    }
+    else if (opts) {
+        includeComments = Boolean(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);
+}
+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(forward, tokens, comments, indexMap, startLoc, endLoc, beforeCount);
+}
+function getAdjacentCommentTokensFromCursor(cursor) {
+    const tokens = [];
+    let currentToken = cursor.getOneToken();
+    while (currentToken && isCommentToken(currentToken)) {
+        tokens.push(currentToken);
+        currentToken = cursor.getOneToken();
+    }
+    return tokens;
+}
+class TokenStore {
+    constructor(tokens, comments) {
+        this._tokens = tokens;
+        this._comments = comments;
+        this._indexMap = createIndexMap(tokens, comments);
+    }
+    getTokenByRangeStart(offset, options) {
+        const includeComments = Boolean(options && options.includeComments);
+        const token = forward.createBaseCursor(this._tokens, this._comments, this._indexMap, offset, -1, includeComments).getOneToken();
+        if (token && token.range[0] === offset) {
+            return token;
+        }
+        return null;
+    }
+    getFirstToken(node, options) {
+        return createCursorWithSkip(forward, this._tokens, this._comments, this._indexMap, node.range[0], node.range[1], options).getOneToken();
+    }
+    getLastToken(node, options) {
+        return createCursorWithSkip(backward, this._tokens, this._comments, this._indexMap, node.range[0], node.range[1], options).getOneToken();
+    }
+    getTokenBefore(node, options) {
+        return createCursorWithSkip(backward, this._tokens, this._comments, this._indexMap, -1, node.range[0], options).getOneToken();
+    }
+    getTokenAfter(node, options) {
+        return createCursorWithSkip(forward, this._tokens, this._comments, this._indexMap, node.range[1], -1, options).getOneToken();
+    }
+    getFirstTokenBetween(left, right, options) {
+        return createCursorWithSkip(forward, this._tokens, this._comments, this._indexMap, left.range[1], right.range[0], options).getOneToken();
+    }
+    getLastTokenBetween(left, right, options) {
+        return createCursorWithSkip(backward, this._tokens, this._comments, this._indexMap, left.range[1], right.range[0], options).getOneToken();
+    }
+    getTokenOrCommentBefore(node, skip) {
+        return this.getTokenBefore(node, { includeComments: true, skip });
+    }
+    getTokenOrCommentAfter(node, skip) {
+        return this.getTokenAfter(node, { includeComments: true, skip });
+    }
+    getFirstTokens(node, options) {
+        return createCursorWithCount(forward, this._tokens, this._comments, this._indexMap, node.range[0], node.range[1], options).getAllTokens();
+    }
+    getLastTokens(node, options) {
+        return createCursorWithCount(backward, this._tokens, this._comments, this._indexMap, node.range[0], node.range[1], options).getAllTokens().reverse();
+    }
+    getTokensBefore(node, options) {
+        return createCursorWithCount(backward, this._tokens, this._comments, this._indexMap, -1, node.range[0], options).getAllTokens().reverse();
+    }
+    getTokensAfter(node, options) {
+        return createCursorWithCount(forward, this._tokens, this._comments, this._indexMap, node.range[1], -1, options).getAllTokens();
+    }
+    getFirstTokensBetween(left, right, options) {
+        return createCursorWithCount(forward, this._tokens, this._comments, this._indexMap, left.range[1], right.range[0], options).getAllTokens();
+    }
+    getLastTokensBetween(left, right, options) {
+        return createCursorWithCount(backward, this._tokens, this._comments, this._indexMap, left.range[1], right.range[0], options).getAllTokens().reverse();
+    }
+    getTokens(node, beforeCount, afterCount) {
+        return createCursorWithPadding(this._tokens, this._comments, this._indexMap, node.range[0], node.range[1], beforeCount, afterCount).getAllTokens();
+    }
+    getTokensBetween(left, right, padding) {
+        return createCursorWithPadding(this._tokens, this._comments, this._indexMap, left.range[1], right.range[0], padding, typeof padding === "number" ? padding : undefined).getAllTokens();
+    }
+    commentsExistBetween(left, right) {
+        const index = search(this._comments, left.range[1]);
+        return (index < this._comments.length &&
+            this._comments[index].range[1] <= right.range[0]);
+    }
+    getCommentsBefore(nodeOrToken) {
+        const cursor = createCursorWithCount(backward, this._tokens, this._comments, this._indexMap, -1, nodeOrToken.range[0], { includeComments: true });
+        return getAdjacentCommentTokensFromCursor(cursor).reverse();
+    }
+    getCommentsAfter(nodeOrToken) {
+        const cursor = createCursorWithCount(forward, this._tokens, this._comments, this._indexMap, nodeOrToken.range[1], -1, { includeComments: true });
+        return getAdjacentCommentTokensFromCursor(cursor);
+    }
+    getCommentsInside(node) {
+        return this.getTokens(node, {
+            includeComments: true,
+            filter: isCommentToken,
+        });
+    }
+}
+
+function isVElement(node) {
+    return node.type === "VElement";
+}
+function getCustomBlocks(document) {
+    return document
+        ? document.children
+            .filter(isVElement)
+            .filter((block) => block.name !== "script" &&
+            block.name !== "template" &&
+            block.name !== "style")
+        : [];
+}
+function getLang(customBlock) {
+    var _a, _b;
+    return (((_b = (_a = customBlock.startTag.attributes.find((attr) => !attr.directive && attr.key.name === "lang")) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.value) || null);
+}
+function parseCustomBlockElement(node, parser, globalLocationCalculator, parserOptions) {
+    const text = node.children[0];
+    const { code, range, loc } = text != null && text.type === "VText"
+        ? {
+            code: text.value,
+            range: text.range,
+            loc: text.loc,
+        }
+        : {
+            code: "",
+            range: [
+                node.startTag.range[1],
+                node.endTag.range[0],
+            ],
+            loc: {
+                start: node.startTag.loc.end,
+                end: node.endTag.loc.start,
+            },
+        };
+    const locationCalculator = globalLocationCalculator.getSubCalculatorAfter(range[0]);
+    try {
+        return parseCustomBlockFragment(code, parser, locationCalculator, parserOptions);
+    }
+    catch (e) {
+        return {
+            error: e,
+            ast: {
+                type: "Program",
+                sourceType: "module",
+                loc: {
+                    start: Object.assign({}, loc.start),
+                    end: Object.assign({}, loc.end),
+                },
+                range: [...range],
+                body: [],
+                tokens: [],
+                comments: [],
+            },
+        };
+    }
+}
+function parseCustomBlockFragment(code, parser, locationCalculator, parserOptions) {
+    try {
+        const result = parseBlock(code, parser, Object.assign({ ecmaVersion: 2017, loc: true, range: true, raw: true, tokens: true, comment: true, eslintVisitorKeys: true, eslintScopeManager: true }, parserOptions));
+        fixLocations(result, locationCalculator);
+        return result;
+    }
+    catch (err) {
+        const perr = ParseError.normalize(err);
+        if (perr) {
+            locationCalculator.fixErrorLocation(perr);
+            throw perr;
+        }
+        throw err;
+    }
+}
+function parseBlock(code, parser, parserOptions) {
+    const result = typeof parser.parseForESLint === "function"
+        ? parser.parseForESLint(code, parserOptions)
+        : parser.parse(code, parserOptions);
+    if (result.ast != null) {
+        return result;
+    }
+    return { ast: result };
+}
+function createCustomBlockSharedContext({ text, customBlock, parsedResult, globalLocationCalculator, parserOptions, }) {
+    let sourceCode;
+    let scopeManager;
+    let currentNode;
+    return {
+        serCurrentNode(node) {
+            currentNode = node;
+        },
+        context: {
+            getAncestors: () => getAncestors(currentNode),
+            getDeclaredVariables: (...args) => getScopeManager().getDeclaredVariables(...args),
+            getScope: () => getScope(getScopeManager(), currentNode),
+            markVariableAsUsed: (name) => markVariableAsUsed(getScopeManager(), currentNode, parserOptions, name),
+            parserServices: Object.assign(Object.assign({ customBlock, parseCustomBlockElement(parser, options) {
+                    return parseCustomBlockElement(customBlock, parser, globalLocationCalculator, Object.assign(Object.assign({}, parserOptions), options));
+                } }, (parsedResult.services || {})), (parsedResult.error
+                ? { parseError: parsedResult.error }
+                : {})),
+            getSourceCode,
+        },
+    };
+    function getSourceCode() {
+        return (sourceCode ||
+            (sourceCode = new (require("eslint").SourceCode)({
+                text,
+                ast: parsedResult.ast,
+                parserServices: parsedResult.services,
+                scopeManager: getScopeManager(),
+                visitorKeys: parsedResult.visitorKeys,
+            })));
+    }
+    function getScopeManager() {
+        if (parsedResult.scopeManager || scopeManager) {
+            return parsedResult.scopeManager || scopeManager;
+        }
+        const ecmaVersion = parserOptions.ecmaVersion || 2017;
+        const ecmaFeatures = parserOptions.ecmaFeatures || {};
+        const sourceType = parserOptions.sourceType || "script";
+        scopeManager = escope.analyze(parsedResult.ast, {
+            ignoreEval: true,
+            nodejsScope: false,
+            impliedStrict: ecmaFeatures.impliedStrict,
+            ecmaVersion,
+            sourceType,
+            fallback: getFallbackKeys,
+        });
+        return scopeManager;
+    }
+}
+function getAncestors(node) {
+    const ancestorsStartingAtParent = [];
+    for (let ancestor = node.parent; ancestor; ancestor = ancestor.parent) {
+        ancestorsStartingAtParent.push(ancestor);
+    }
+    return ancestorsStartingAtParent.reverse();
+}
+function getScope(scopeManager, currentNode) {
+    const inner = currentNode.type !== "Program";
+    for (let node = currentNode; node; node = node.parent || null) {
+        const scope = scopeManager.acquire(node, inner);
+        if (scope) {
+            if (scope.type === "function-expression-name") {
+                return scope.childScopes[0];
+            }
+            return scope;
+        }
+    }
+    return scopeManager.scopes[0];
+}
+function markVariableAsUsed(scopeManager, currentNode, parserOptions, name) {
+    const hasGlobalReturn = parserOptions.ecmaFeatures && parserOptions.ecmaFeatures.globalReturn;
+    const specialScope = hasGlobalReturn || parserOptions.sourceType === "module";
+    const currentScope = getScope(scopeManager, currentNode);
+    const initialScope = currentScope.type === "global" && specialScope
+        ? currentScope.childScopes[0]
+        : currentScope;
+    for (let scope = initialScope; scope; scope = scope.upper) {
+        const variable = scope.variables.find((scopeVar) => scopeVar.name === name);
+        if (variable) {
+            variable.eslintUsed = true;
+            return true;
+        }
+    }
+    return false;
+}
+
+const emitters = new WeakMap();
+const stores = new WeakMap();
+function define(sourceText, rootAST, document, globalLocationCalculator, { parserOptions }) {
+    const customBlocksEmitters = new Map();
+    const isSFC = isSFCFile(parserOptions);
+    return {
+        defineTemplateBodyVisitor(templateBodyVisitor, scriptVisitor) {
+            if (scriptVisitor == null) {
+                scriptVisitor = {};
+            }
+            if (rootAST.templateBody == null) {
+                return scriptVisitor;
+            }
+            let emitter = emitters.get(rootAST);
+            if (emitter == null) {
+                emitter = new EventEmitter();
+                emitter.setMaxListeners(0);
+                emitters.set(rootAST, emitter);
+                const programExitHandler = scriptVisitor["Program:exit"];
+                scriptVisitor["Program:exit"] = (node) => {
+                    try {
+                        if (typeof programExitHandler === "function") {
+                            programExitHandler(node);
+                        }
+                        const generator = new NodeEventGenerator(emitter);
+                        traverseNodes(rootAST.templateBody, generator);
+                    }
+                    finally {
+                        scriptVisitor["Program:exit"] = programExitHandler;
+                        emitters.delete(rootAST);
+                    }
+                };
+            }
+            for (const selector of Object.keys(templateBodyVisitor)) {
+                emitter.on(selector, templateBodyVisitor[selector]);
+            }
+            return scriptVisitor;
+        },
+        defineCustomBlocksVisitor(context, parser, rule, scriptVisitor) {
+            if (scriptVisitor == null) {
+                scriptVisitor = {};
+            }
+            if (!isSFC) {
+                return scriptVisitor;
+            }
+            parserOptions = Object.assign({}, parserOptions);
+            const customBlocks = getCustomBlocks(document).filter((block) => block.endTag &&
+                !block.startTag.attributes.some((attr) => !attr.directive && attr.key.name === "src"));
+            if (!customBlocks.length || globalLocationCalculator == null) {
+                return {};
+            }
+            let factories = customBlocksEmitters.get(parser);
+            if (factories == null) {
+                factories = [];
+                customBlocksEmitters.set(parser, factories);
+                const visitorFactories = factories;
+                const programExitHandler = scriptVisitor["Program:exit"];
+                scriptVisitor["Program:exit"] = (node) => {
+                    try {
+                        if (typeof programExitHandler === "function") {
+                            programExitHandler(node);
+                        }
+                        for (const customBlock of customBlocks) {
+                            const lang = getLang(customBlock);
+                            const activeVisitorFactories = visitorFactories.filter((f) => f.test(lang, customBlock));
+                            if (!activeVisitorFactories.length) {
+                                continue;
+                            }
+                            const parsedResult = parseCustomBlockElement(customBlock, parser, globalLocationCalculator, parserOptions);
+                            const { serCurrentNode, context: customBlockContext, } = createCustomBlockSharedContext({
+                                text: sourceText,
+                                customBlock,
+                                parsedResult,
+                                globalLocationCalculator,
+                                parserOptions,
+                            });
+                            const emitter = new EventEmitter();
+                            emitter.setMaxListeners(0);
+                            for (const factory of activeVisitorFactories) {
+                                const ctx = Object.assign({}, customBlockContext);
+                                ctx.__proto__ = factory.context;
+                                const visitor = factory.create(ctx);
+                                for (const selector of Object.keys(visitor || {})) {
+                                    emitter.on(selector, visitor[selector]);
+                                }
+                            }
+                            const generator = new NodeEventGenerator(emitter);
+                            traverseNodes(parsedResult.ast, {
+                                visitorKeys: parsedResult.visitorKeys,
+                                enterNode(n) {
+                                    serCurrentNode(n);
+                                    generator.enterNode(n);
+                                },
+                                leaveNode(n) {
+                                    serCurrentNode(n);
+                                    generator.leaveNode(n);
+                                },
+                            });
+                        }
+                    }
+                    finally {
+                        scriptVisitor["Program:exit"] = programExitHandler;
+                        customBlocksEmitters.delete(parser);
+                    }
+                };
+            }
+            const target = rule.target;
+            const test = typeof target === "function"
+                ? target
+                : Array.isArray(target)
+                    ? (lang) => Boolean(lang && target.includes(lang))
+                    : (lang) => target === lang;
+            factories.push({
+                context,
+                test,
+                create: rule.create,
+            });
+            return scriptVisitor;
+        },
+        getTemplateBodyTokenStore() {
+            const ast = rootAST.templateBody;
+            const key = ast || stores;
+            let store = stores.get(key);
+            if (!store) {
+                store =
+                    ast != null
+                        ? new TokenStore(ast.tokens, ast.comments)
+                        : new TokenStore([], []);
+                stores.set(key, store);
+            }
+            return store;
+        },
+        getDocumentFragment() {
+            return document;
+        },
+    };
+}
+
+const STARTS_WITH_LT = /^\s*</u;
+function isVueFile(code, options) {
+    const filePath = options.filePath || "unknown.js";
+    return path.extname(filePath) === ".vue" || STARTS_WITH_LT.test(code);
+}
+function isTemplateElement(node) {
+    return node.type === "VElement" && node.name === "template";
+}
+function isScriptElement(node) {
+    return node.type === "VElement" && node.name === "script";
+}
+function isLang(attribute) {
+    return attribute.directive === false && attribute.key.name === "lang";
+}
+function getLang$1(element, defaultLang) {
+    const langAttr = element && element.startTag.attributes.find(isLang);
+    const lang = langAttr && langAttr.value && langAttr.value.value;
+    return lang || defaultLang;
+}
+function parseForESLint(code, options) {
+    options = Object.assign({
+        comment: true,
+        ecmaVersion: 2017,
+        loc: true,
+        range: true,
+        tokens: true,
+    }, options || {});
+    let result;
+    let document;
+    let locationCalculator;
+    if (!isVueFile(code, options)) {
+        result = parseScript(code, options);
+        document = null;
+        locationCalculator = null;
+    }
+    else {
+        const skipParsingScript = options.parser === false;
+        const tokenizer = new Tokenizer(code, options);
+        const rootAST = new Parser(tokenizer, options).parse();
+        locationCalculator = new LocationCalculator(tokenizer.gaps, tokenizer.lineTerminators);
+        const script = rootAST.children.find(isScriptElement);
+        const template = rootAST.children.find(isTemplateElement);
+        const templateLang = getLang$1(template, "html");
+        const concreteInfo = {
+            tokens: rootAST.tokens,
+            comments: rootAST.comments,
+            errors: rootAST.errors,
+        };
+        const templateBody = template != null && templateLang === "html"
+            ? Object.assign(template, concreteInfo)
+            : undefined;
+        if (skipParsingScript || script == null) {
+            result = parseScript("", options);
+        }
+        else {
+            result = parseScriptElement(script, locationCalculator, options);
+        }
+        result.ast.templateBody = templateBody;
+        document = rootAST;
+    }
+    result.services = Object.assign(result.services || {}, define(code, result.ast, document, locationCalculator, {
+        parserOptions: options,
+    }));
+    return result;
+}
+function parse(code, options) {
+    return parseForESLint(code, options).ast;
+}
+
+exports.AST = index;
+exports.parse = parse;
+exports.parseForESLint = parseForESLint;
+//# sourceMappingURL=index.js.map
diff --git a/server/node_modules/vue-eslint-parser/index.js.map b/server/node_modules/vue-eslint-parser/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..495c4fcf77610253237b954c8526e2246eb097d3
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js.map","sources":[".temp/ast/src/ast/errors.ts",".temp/ast/src/ast/nodes.ts",".temp/ast/src/ast/traverse.ts",".temp/common/src/common/location-calculator.ts",".temp/common/src/common/debug.ts",".temp/script/src/script/scope-analyzer.ts",".temp/script/src/script/espree.ts",".temp/common/src/common/fix-locations.ts",".temp/script/src/script/index.ts",".temp/template/src/template/index.ts",".temp/html/util/src/html/util/attribute-names.ts",".temp/html/util/src/html/util/tag-names.ts",".temp/html/src/html/intermediate-tokenizer.ts",".temp/common/src/common/parser-options.ts",".temp/html/src/html/parser.ts",".temp/html/util/src/html/util/alternative-cr.ts",".temp/html/util/src/html/util/entities.ts",".temp/html/util/src/html/util/unicode.ts",".temp/html/src/html/tokenizer.ts",".temp/external/src/external/node-event-generator.ts",".temp/external/token-store/src/external/token-store/utils.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/backward-token-comment-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/backward-token-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/decorative-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/filter-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/forward-token-comment-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/forward-token-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/limit-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/skip-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/index.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/padded-token-cursor.ts",".temp/external/token-store/src/external/token-store/index.ts",".temp/sfc/custom-block/src/sfc/custom-block/index.ts",".temp/src/parser-services.ts",".temp/src/index.ts"],"sourcesContent":["/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type { Location } from \"./locations\"\n\n/**\n * Check whether the given value has acorn style location information.\n * @param x The value to check.\n * @returns `true` if the value has acorn style location information.\n */\nfunction isAcornStyleParseError(\n    x: any,\n): x is { message: string; pos: number; loc: Location } {\n    return (\n        typeof x.message === \"string\" &&\n        typeof x.pos === \"number\" &&\n        typeof x.loc === \"object\" &&\n        x.loc !== null &&\n        typeof x.loc.line === \"number\" &&\n        typeof x.loc.column === \"number\"\n    )\n}\n\n/**\n * HTML parse errors.\n */\nexport class ParseError extends SyntaxError {\n    public code?: ErrorCode\n    public index: number\n    public lineNumber: number\n    public column: number\n\n    /**\n     * Create new parser error object.\n     * @param code The error code. See also: https://html.spec.whatwg.org/multipage/parsing.html#parse-errors\n     * @param offset The offset number of this error.\n     * @param line The line number of this error.\n     * @param column The column number of this error.\n     */\n    public static fromCode(\n        code: ErrorCode,\n        offset: number,\n        line: number,\n        column: number,\n    ): ParseError {\n        return new ParseError(code, code, offset, line, column)\n    }\n\n    /**\n     * Normalize the error object.\n     * @param x The error object to normalize.\n     */\n    public static normalize(x: any): ParseError | null {\n        if (ParseError.isParseError(x)) {\n            return x\n        }\n        if (isAcornStyleParseError(x)) {\n            return new ParseError(\n                x.message,\n                undefined,\n                x.pos,\n                x.loc.line,\n                x.loc.column,\n            )\n        }\n        return null\n    }\n\n    /**\n     * Initialize this ParseError instance.\n     * @param message The error message.\n     * @param code The error code. See also: https://html.spec.whatwg.org/multipage/parsing.html#parse-errors\n     * @param offset The offset number of this error.\n     * @param line The line number of this error.\n     * @param column The column number of this error.\n     */\n    public constructor(\n        message: string,\n        code: ErrorCode | undefined,\n        offset: number,\n        line: number,\n        column: number,\n    ) {\n        super(message)\n        this.code = code\n        this.index = offset\n        this.lineNumber = line\n        this.column = column\n    }\n\n    /**\n     * Type guard for ParseError.\n     * @param x The value to check.\n     * @returns `true` if the value has `message`, `pos`, `loc` properties.\n     */\n    public static isParseError(x: any): x is ParseError {\n        return (\n            x instanceof ParseError ||\n            (typeof x.message === \"string\" &&\n                typeof x.index === \"number\" &&\n                typeof x.lineNumber === \"number\" &&\n                typeof x.column === \"number\")\n        )\n    }\n}\n\n/**\n * The error codes of HTML syntax errors.\n * https://html.spec.whatwg.org/multipage/parsing.html#parse-errors\n */\nexport type ErrorCode =\n    | \"abrupt-closing-of-empty-comment\"\n    | \"absence-of-digits-in-numeric-character-reference\"\n    | \"cdata-in-html-content\"\n    | \"character-reference-outside-unicode-range\"\n    | \"control-character-in-input-stream\"\n    | \"control-character-reference\"\n    | \"eof-before-tag-name\"\n    | \"eof-in-cdata\"\n    | \"eof-in-comment\"\n    | \"eof-in-tag\"\n    | \"incorrectly-closed-comment\"\n    | \"incorrectly-opened-comment\"\n    | \"invalid-first-character-of-tag-name\"\n    | \"missing-attribute-value\"\n    | \"missing-end-tag-name\"\n    | \"missing-semicolon-after-character-reference\"\n    | \"missing-whitespace-between-attributes\"\n    | \"nested-comment\"\n    | \"noncharacter-character-reference\"\n    | \"noncharacter-in-input-stream\"\n    | \"null-character-reference\"\n    | \"surrogate-character-reference\"\n    | \"surrogate-in-input-stream\"\n    | \"unexpected-character-in-attribute-name\"\n    | \"unexpected-character-in-unquoted-attribute-value\"\n    | \"unexpected-equals-sign-before-attribute-name\"\n    | \"unexpected-null-character\"\n    | \"unexpected-question-mark-instead-of-tag-name\"\n    | \"unexpected-solidus-in-tag\"\n    | \"unknown-named-character-reference\"\n    | \"end-tag-with-attributes\"\n    | \"duplicate-attribute\"\n    | \"end-tag-with-trailing-solidus\"\n    | \"non-void-html-element-start-tag-with-trailing-solidus\"\n    | \"x-invalid-end-tag\"\n    | \"x-invalid-namespace\"\n    | \"x-missing-interpolation-end\"\n// ---- Use RAWTEXT state for <script> elements instead ----\n// \"eof-in-script-html-comment-like-text\" |\n// ---- Use BOGUS_COMMENT state for DOCTYPEs instead ----\n// \"abrupt-doctype-public-identifier\" |\n// \"abrupt-doctype-system-identifier\" |\n// \"eof-in-doctype\" |\n// \"invalid-character-sequence-after-doctype-name\" |\n// \"missing-doctype-name\" |\n// \"missing-doctype-public-identifier\" |\n// \"missing-doctype-system-identifier\" |\n// \"missing-quote-before-doctype-public-identifier\" |\n// \"missing-quote-before-doctype-system-identifier\" |\n// \"missing-whitespace-after-doctype-public-keyword\" |\n// \"missing-whitespace-after-doctype-system-keyword\" |\n// \"missing-whitespace-before-doctype-name\" |\n// \"missing-whitespace-between-doctype-public-and-system-identifiers\" |\n// \"unexpected-character-after-doctype-system-identifier\" |\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type { ScopeManager } from \"eslint-scope\"\nimport type { ParseError } from \"./errors\"\nimport type { HasLocation } from \"./locations\"\nimport type { Token } from \"./tokens\"\n\n//------------------------------------------------------------------------------\n// Common\n//------------------------------------------------------------------------------\n\n/**\n * Objects which have their parent.\n */\nexport interface HasParent {\n    parent?: Node | null\n}\n\n/**\n * The union type for all nodes.\n */\nexport type Node =\n    | ESLintNode\n    | VNode\n    | VForExpression\n    | VOnExpression\n    | VSlotScopeExpression\n    | VFilterSequenceExpression\n    | VFilter\n\n//------------------------------------------------------------------------------\n// Script\n//------------------------------------------------------------------------------\n\n/**\n * The union type for ESLint nodes.\n */\nexport type ESLintNode =\n    | ESLintIdentifier\n    | ESLintLiteral\n    | ESLintProgram\n    | ESLintSwitchCase\n    | ESLintCatchClause\n    | ESLintVariableDeclarator\n    | ESLintStatement\n    | ESLintExpression\n    | ESLintProperty\n    | ESLintAssignmentProperty\n    | ESLintSuper\n    | ESLintTemplateElement\n    | ESLintSpreadElement\n    | ESLintPattern\n    | ESLintClassBody\n    | ESLintMethodDefinition\n    | ESLintModuleDeclaration\n    | ESLintModuleSpecifier\n    | ESLintLegacyRestProperty\n\n/**\n * The parsing result of ESLint custom parsers.\n */\nexport interface ESLintExtendedProgram {\n    ast: ESLintProgram\n    services?: {}\n    visitorKeys?: { [type: string]: string[] }\n    scopeManager?: ScopeManager\n}\n\nexport interface ESLintProgram extends HasLocation, HasParent {\n    type: \"Program\"\n    sourceType: \"script\" | \"module\"\n    body: (ESLintStatement | ESLintModuleDeclaration)[]\n    templateBody?: VElement & HasConcreteInfo\n    tokens?: Token[]\n    comments?: Token[]\n    errors?: ParseError[]\n}\n\nexport type ESLintStatement =\n    | ESLintExpressionStatement\n    | ESLintBlockStatement\n    | ESLintEmptyStatement\n    | ESLintDebuggerStatement\n    | ESLintWithStatement\n    | ESLintReturnStatement\n    | ESLintLabeledStatement\n    | ESLintBreakStatement\n    | ESLintContinueStatement\n    | ESLintIfStatement\n    | ESLintSwitchStatement\n    | ESLintThrowStatement\n    | ESLintTryStatement\n    | ESLintWhileStatement\n    | ESLintDoWhileStatement\n    | ESLintForStatement\n    | ESLintForInStatement\n    | ESLintForOfStatement\n    | ESLintDeclaration\n\nexport interface ESLintEmptyStatement extends HasLocation, HasParent {\n    type: \"EmptyStatement\"\n}\n\nexport interface ESLintBlockStatement extends HasLocation, HasParent {\n    type: \"BlockStatement\"\n    body: ESLintStatement[]\n}\n\nexport interface ESLintExpressionStatement extends HasLocation, HasParent {\n    type: \"ExpressionStatement\"\n    expression: ESLintExpression\n}\n\nexport interface ESLintIfStatement extends HasLocation, HasParent {\n    type: \"IfStatement\"\n    test: ESLintExpression\n    consequent: ESLintStatement\n    alternate: ESLintStatement | null\n}\n\nexport interface ESLintSwitchStatement extends HasLocation, HasParent {\n    type: \"SwitchStatement\"\n    discriminant: ESLintExpression\n    cases: ESLintSwitchCase[]\n}\n\nexport interface ESLintSwitchCase extends HasLocation, HasParent {\n    type: \"SwitchCase\"\n    test: ESLintExpression | null\n    consequent: ESLintStatement[]\n}\n\nexport interface ESLintWhileStatement extends HasLocation, HasParent {\n    type: \"WhileStatement\"\n    test: ESLintExpression\n    body: ESLintStatement\n}\n\nexport interface ESLintDoWhileStatement extends HasLocation, HasParent {\n    type: \"DoWhileStatement\"\n    body: ESLintStatement\n    test: ESLintExpression\n}\n\nexport interface ESLintForStatement extends HasLocation, HasParent {\n    type: \"ForStatement\"\n    init: ESLintVariableDeclaration | ESLintExpression | null\n    test: ESLintExpression | null\n    update: ESLintExpression | null\n    body: ESLintStatement\n}\n\nexport interface ESLintForInStatement extends HasLocation, HasParent {\n    type: \"ForInStatement\"\n    left: ESLintVariableDeclaration | ESLintPattern\n    right: ESLintExpression\n    body: ESLintStatement\n}\n\nexport interface ESLintForOfStatement extends HasLocation, HasParent {\n    type: \"ForOfStatement\"\n    left: ESLintVariableDeclaration | ESLintPattern\n    right: ESLintExpression\n    body: ESLintStatement\n}\n\nexport interface ESLintLabeledStatement extends HasLocation, HasParent {\n    type: \"LabeledStatement\"\n    label: ESLintIdentifier\n    body: ESLintStatement\n}\n\nexport interface ESLintBreakStatement extends HasLocation, HasParent {\n    type: \"BreakStatement\"\n    label: ESLintIdentifier | null\n}\n\nexport interface ESLintContinueStatement extends HasLocation, HasParent {\n    type: \"ContinueStatement\"\n    label: ESLintIdentifier | null\n}\n\nexport interface ESLintReturnStatement extends HasLocation, HasParent {\n    type: \"ReturnStatement\"\n    argument: ESLintExpression | null\n}\n\nexport interface ESLintThrowStatement extends HasLocation, HasParent {\n    type: \"ThrowStatement\"\n    argument: ESLintExpression\n}\n\nexport interface ESLintTryStatement extends HasLocation, HasParent {\n    type: \"TryStatement\"\n    block: ESLintBlockStatement\n    handler: ESLintCatchClause | null\n    finalizer: ESLintBlockStatement | null\n}\n\nexport interface ESLintCatchClause extends HasLocation, HasParent {\n    type: \"CatchClause\"\n    param: ESLintPattern\n    body: ESLintBlockStatement\n}\n\nexport interface ESLintWithStatement extends HasLocation, HasParent {\n    type: \"WithStatement\"\n    object: ESLintExpression\n    body: ESLintStatement\n}\n\nexport interface ESLintDebuggerStatement extends HasLocation, HasParent {\n    type: \"DebuggerStatement\"\n}\n\nexport type ESLintDeclaration =\n    | ESLintFunctionDeclaration\n    | ESLintVariableDeclaration\n    | ESLintClassDeclaration\n\nexport interface ESLintFunctionDeclaration extends HasLocation, HasParent {\n    type: \"FunctionDeclaration\"\n    async: boolean\n    generator: boolean\n    id: ESLintIdentifier | null\n    params: ESLintPattern[]\n    body: ESLintBlockStatement\n}\n\nexport interface ESLintVariableDeclaration extends HasLocation, HasParent {\n    type: \"VariableDeclaration\"\n    kind: \"var\" | \"let\" | \"const\"\n    declarations: ESLintVariableDeclarator[]\n}\n\nexport interface ESLintVariableDeclarator extends HasLocation, HasParent {\n    type: \"VariableDeclarator\"\n    id: ESLintPattern\n    init: ESLintExpression | null\n}\n\nexport interface ESLintClassDeclaration extends HasLocation, HasParent {\n    type: \"ClassDeclaration\"\n    id: ESLintIdentifier | null\n    superClass: ESLintExpression | null\n    body: ESLintClassBody\n}\n\nexport interface ESLintClassBody extends HasLocation, HasParent {\n    type: \"ClassBody\"\n    body: ESLintMethodDefinition[]\n}\n\nexport interface ESLintMethodDefinition extends HasLocation, HasParent {\n    type: \"MethodDefinition\"\n    kind: \"constructor\" | \"method\" | \"get\" | \"set\"\n    computed: boolean\n    static: boolean\n    key: ESLintExpression\n    value: ESLintFunctionExpression\n}\n\nexport type ESLintModuleDeclaration =\n    | ESLintImportDeclaration\n    | ESLintExportNamedDeclaration\n    | ESLintExportDefaultDeclaration\n    | ESLintExportAllDeclaration\n\nexport type ESLintModuleSpecifier =\n    | ESLintImportSpecifier\n    | ESLintImportDefaultSpecifier\n    | ESLintImportNamespaceSpecifier\n    | ESLintExportSpecifier\n\nexport interface ESLintImportDeclaration extends HasLocation, HasParent {\n    type: \"ImportDeclaration\"\n    specifiers: (\n        | ESLintImportSpecifier\n        | ESLintImportDefaultSpecifier\n        | ESLintImportNamespaceSpecifier\n    )[]\n    source: ESLintLiteral\n}\n\nexport interface ESLintImportSpecifier extends HasLocation, HasParent {\n    type: \"ImportSpecifier\"\n    imported: ESLintIdentifier\n    local: ESLintIdentifier\n}\n\nexport interface ESLintImportDefaultSpecifier extends HasLocation, HasParent {\n    type: \"ImportDefaultSpecifier\"\n    local: ESLintIdentifier\n}\n\nexport interface ESLintImportNamespaceSpecifier extends HasLocation, HasParent {\n    type: \"ImportNamespaceSpecifier\"\n    local: ESLintIdentifier\n}\n\nexport interface ESLintExportNamedDeclaration extends HasLocation, HasParent {\n    type: \"ExportNamedDeclaration\"\n    declaration?: ESLintDeclaration | null\n    specifiers: ESLintExportSpecifier[]\n    source?: ESLintLiteral | null\n}\n\nexport interface ESLintExportSpecifier extends HasLocation, HasParent {\n    type: \"ExportSpecifier\"\n    exported: ESLintIdentifier\n}\n\nexport interface ESLintExportDefaultDeclaration extends HasLocation, HasParent {\n    type: \"ExportDefaultDeclaration\"\n    declaration: ESLintDeclaration | ESLintExpression\n}\n\nexport interface ESLintExportAllDeclaration extends HasLocation, HasParent {\n    type: \"ExportAllDeclaration\"\n    source: ESLintLiteral\n}\n\nexport type ESLintExpression =\n    | ESLintThisExpression\n    | ESLintArrayExpression\n    | ESLintObjectExpression\n    | ESLintFunctionExpression\n    | ESLintArrowFunctionExpression\n    | ESLintYieldExpression\n    | ESLintLiteral\n    | ESLintUnaryExpression\n    | ESLintUpdateExpression\n    | ESLintBinaryExpression\n    | ESLintAssignmentExpression\n    | ESLintLogicalExpression\n    | ESLintMemberExpression\n    | ESLintConditionalExpression\n    | ESLintCallExpression\n    | ESLintNewExpression\n    | ESLintSequenceExpression\n    | ESLintTemplateLiteral\n    | ESLintTaggedTemplateExpression\n    | ESLintClassExpression\n    | ESLintMetaProperty\n    | ESLintIdentifier\n    | ESLintAwaitExpression\n\nexport interface ESLintIdentifier extends HasLocation, HasParent {\n    type: \"Identifier\"\n    name: string\n}\n\nexport interface ESLintLiteral extends HasLocation, HasParent {\n    type: \"Literal\"\n    value: string | boolean | null | number | RegExp\n    regex?: {\n        pattern: string\n        flags: string\n    }\n}\n\nexport interface ESLintThisExpression extends HasLocation, HasParent {\n    type: \"ThisExpression\"\n}\n\nexport interface ESLintArrayExpression extends HasLocation, HasParent {\n    type: \"ArrayExpression\"\n    elements: (ESLintExpression | ESLintSpreadElement)[]\n}\n\nexport interface ESLintObjectExpression extends HasLocation, HasParent {\n    type: \"ObjectExpression\"\n    properties: (\n        | ESLintProperty\n        | ESLintSpreadElement\n        | ESLintLegacySpreadProperty\n    )[]\n}\n\nexport interface ESLintProperty extends HasLocation, HasParent {\n    type: \"Property\"\n    kind: \"init\" | \"get\" | \"set\"\n    method: boolean\n    shorthand: boolean\n    computed: boolean\n    key: ESLintExpression\n    value: ESLintExpression | ESLintPattern\n}\n\nexport interface ESLintFunctionExpression extends HasLocation, HasParent {\n    type: \"FunctionExpression\"\n    async: boolean\n    generator: boolean\n    id: ESLintIdentifier | null\n    params: ESLintPattern[]\n    body: ESLintBlockStatement\n}\n\nexport interface ESLintArrowFunctionExpression extends HasLocation, HasParent {\n    type: \"ArrowFunctionExpression\"\n    async: boolean\n    generator: boolean\n    id: ESLintIdentifier | null\n    params: ESLintPattern[]\n    body: ESLintBlockStatement\n}\n\nexport interface ESLintSequenceExpression extends HasLocation, HasParent {\n    type: \"SequenceExpression\"\n    expressions: ESLintExpression[]\n}\n\nexport interface ESLintUnaryExpression extends HasLocation, HasParent {\n    type: \"UnaryExpression\"\n    operator: \"-\" | \"+\" | \"!\" | \"~\" | \"typeof\" | \"void\" | \"delete\"\n    prefix: boolean\n    argument: ESLintExpression\n}\n\nexport interface ESLintBinaryExpression extends HasLocation, HasParent {\n    type: \"BinaryExpression\"\n    operator:\n        | \"==\"\n        | \"!=\"\n        | \"===\"\n        | \"!==\"\n        | \"<\"\n        | \"<=\"\n        | \">\"\n        | \">=\"\n        | \"<<\"\n        | \">>\"\n        | \">>>\"\n        | \"+\"\n        | \"-\"\n        | \"*\"\n        | \"/\"\n        | \"%\"\n        | \"**\"\n        | \"|\"\n        | \"^\"\n        | \"&\"\n        | \"in\"\n        | \"instanceof\"\n    left: ESLintExpression\n    right: ESLintExpression\n}\n\nexport interface ESLintAssignmentExpression extends HasLocation, HasParent {\n    type: \"AssignmentExpression\"\n    operator:\n        | \"=\"\n        | \"+=\"\n        | \"-=\"\n        | \"*=\"\n        | \"/=\"\n        | \"%=\"\n        | \"**=\"\n        | \"<<=\"\n        | \">>=\"\n        | \">>>=\"\n        | \"|=\"\n        | \"^=\"\n        | \"&=\"\n    left: ESLintPattern\n    right: ESLintExpression\n}\n\nexport interface ESLintUpdateExpression extends HasLocation, HasParent {\n    type: \"UpdateExpression\"\n    operator: \"++\" | \"--\"\n    argument: ESLintExpression\n    prefix: boolean\n}\n\nexport interface ESLintLogicalExpression extends HasLocation, HasParent {\n    type: \"LogicalExpression\"\n    operator: \"||\" | \"&&\"\n    left: ESLintExpression\n    right: ESLintExpression\n}\n\nexport interface ESLintConditionalExpression extends HasLocation, HasParent {\n    type: \"ConditionalExpression\"\n    test: ESLintExpression\n    alternate: ESLintExpression\n    consequent: ESLintExpression\n}\n\nexport interface ESLintCallExpression extends HasLocation, HasParent {\n    type: \"CallExpression\"\n    callee: ESLintExpression | ESLintSuper\n    arguments: (ESLintExpression | ESLintSpreadElement)[]\n}\n\nexport interface ESLintSuper extends HasLocation, HasParent {\n    type: \"Super\"\n}\n\nexport interface ESLintNewExpression extends HasLocation, HasParent {\n    type: \"NewExpression\"\n    callee: ESLintExpression\n    arguments: (ESLintExpression | ESLintSpreadElement)[]\n}\n\nexport interface ESLintMemberExpression extends HasLocation, HasParent {\n    type: \"MemberExpression\"\n    computed: boolean\n    object: ESLintExpression | ESLintSuper\n    property: ESLintExpression\n}\n\nexport interface ESLintYieldExpression extends HasLocation, HasParent {\n    type: \"YieldExpression\"\n    delegate: boolean\n    argument: ESLintExpression | null\n}\n\nexport interface ESLintAwaitExpression extends HasLocation, HasParent {\n    type: \"AwaitExpression\"\n    argument: ESLintExpression\n}\n\nexport interface ESLintTemplateLiteral extends HasLocation, HasParent {\n    type: \"TemplateLiteral\"\n    quasis: ESLintTemplateElement[]\n    expressions: ESLintExpression[]\n}\n\nexport interface ESLintTaggedTemplateExpression extends HasLocation, HasParent {\n    type: \"TaggedTemplateExpression\"\n    tag: ESLintExpression\n    quasi: ESLintTemplateLiteral\n}\n\nexport interface ESLintTemplateElement extends HasLocation, HasParent {\n    type: \"TemplateElement\"\n    tail: boolean\n    value: {\n        cooked: string\n        raw: string\n    }\n}\n\nexport interface ESLintClassExpression extends HasLocation, HasParent {\n    type: \"ClassExpression\"\n    id: ESLintIdentifier | null\n    superClass: ESLintExpression | null\n    body: ESLintClassBody\n}\n\nexport interface ESLintMetaProperty extends HasLocation, HasParent {\n    type: \"MetaProperty\"\n    meta: ESLintIdentifier\n    property: ESLintIdentifier\n}\n\nexport type ESLintPattern =\n    | ESLintIdentifier\n    | ESLintObjectPattern\n    | ESLintArrayPattern\n    | ESLintRestElement\n    | ESLintAssignmentPattern\n    | ESLintMemberExpression\n    | ESLintLegacyRestProperty\n\nexport interface ESLintObjectPattern extends HasLocation, HasParent {\n    type: \"ObjectPattern\"\n    properties: (\n        | ESLintAssignmentProperty\n        | ESLintRestElement\n        | ESLintLegacyRestProperty\n    )[]\n}\n\nexport interface ESLintAssignmentProperty extends ESLintProperty {\n    value: ESLintPattern\n    kind: \"init\"\n    method: false\n}\n\nexport interface ESLintArrayPattern extends HasLocation, HasParent {\n    type: \"ArrayPattern\"\n    elements: ESLintPattern[]\n}\n\nexport interface ESLintRestElement extends HasLocation, HasParent {\n    type: \"RestElement\"\n    argument: ESLintPattern\n}\n\nexport interface ESLintSpreadElement extends HasLocation, HasParent {\n    type: \"SpreadElement\"\n    argument: ESLintExpression\n}\n\nexport interface ESLintAssignmentPattern extends HasLocation, HasParent {\n    type: \"AssignmentPattern\"\n    left: ESLintPattern\n    right: ESLintExpression\n}\n\n/**\n * Legacy for babel-eslint and espree.\n */\nexport interface ESLintLegacyRestProperty extends HasLocation, HasParent {\n    type: \"RestProperty\" | \"ExperimentalRestProperty\"\n    argument: ESLintPattern\n}\n\n/**\n * Legacy for babel-eslint and espree.\n */\nexport interface ESLintLegacySpreadProperty extends HasLocation, HasParent {\n    type: \"SpreadProperty\" | \"ExperimentalSpreadProperty\"\n    argument: ESLintExpression\n}\n\n//------------------------------------------------------------------------------\n// Template\n//------------------------------------------------------------------------------\n\n/**\n * Constants of namespaces.\n * @see https://infra.spec.whatwg.org/#namespaces\n */\nexport const NS = Object.freeze({\n    HTML: \"http://www.w3.org/1999/xhtml\" as \"http://www.w3.org/1999/xhtml\",\n    MathML: \"http://www.w3.org/1998/Math/MathML\" as \"http://www.w3.org/1998/Math/MathML\",\n    SVG: \"http://www.w3.org/2000/svg\" as \"http://www.w3.org/2000/svg\",\n    XLink: \"http://www.w3.org/1999/xlink\" as \"http://www.w3.org/1999/xlink\",\n    XML: \"http://www.w3.org/XML/1998/namespace\" as \"http://www.w3.org/XML/1998/namespace\",\n    XMLNS: \"http://www.w3.org/2000/xmlns/\" as \"http://www.w3.org/2000/xmlns/\",\n})\n\n/**\n * Type of namespaces.\n */\nexport type Namespace =\n    | typeof NS.HTML\n    | typeof NS.MathML\n    | typeof NS.SVG\n    | typeof NS.XLink\n    | typeof NS.XML\n    | typeof NS.XMLNS\n\n/**\n * Type of variable definitions.\n */\nexport interface Variable {\n    id: ESLintIdentifier\n    kind: \"v-for\" | \"scope\"\n    references: Reference[]\n}\n\n/**\n * Type of variable references.\n */\nexport interface Reference {\n    id: ESLintIdentifier\n    mode: \"rw\" | \"r\" | \"w\"\n    variable: Variable | null\n}\n\n/**\n * The node of `v-for` directives.\n */\nexport interface VForExpression extends HasLocation, HasParent {\n    type: \"VForExpression\"\n    parent: VExpressionContainer\n    left: ESLintPattern[]\n    right: ESLintExpression\n}\n\n/**\n * The node of `v-on` directives.\n */\nexport interface VOnExpression extends HasLocation, HasParent {\n    type: \"VOnExpression\"\n    parent: VExpressionContainer\n    body: ESLintStatement[]\n}\n\n/**\n * The node of `slot-scope` directives.\n */\nexport interface VSlotScopeExpression extends HasLocation, HasParent {\n    type: \"VSlotScopeExpression\"\n    parent: VExpressionContainer\n    params: ESLintPattern[]\n}\n\n/**\n * The node of a filter sequence which is separated by `|`.\n */\nexport interface VFilterSequenceExpression extends HasLocation, HasParent {\n    type: \"VFilterSequenceExpression\"\n    parent: VExpressionContainer\n    expression: ESLintExpression\n    filters: VFilter[]\n}\n\n/**\n * The node of a filter sequence which is separated by `|`.\n */\nexport interface VFilter extends HasLocation, HasParent {\n    type: \"VFilter\"\n    parent: VFilterSequenceExpression\n    callee: ESLintIdentifier\n    arguments: (ESLintExpression | ESLintSpreadElement)[]\n}\n\n/**\n * The union type of any nodes.\n */\nexport type VNode =\n    | VAttribute\n    | VDirective\n    | VDirectiveKey\n    | VDocumentFragment\n    | VElement\n    | VEndTag\n    | VExpressionContainer\n    | VIdentifier\n    | VLiteral\n    | VStartTag\n    | VText\n\n/**\n * Text nodes.\n */\nexport interface VText extends HasLocation, HasParent {\n    type: \"VText\"\n    parent: VDocumentFragment | VElement\n    value: string\n}\n\n/**\n * The node of JavaScript expression in text.\n * e.g. `{{ name }}`\n */\nexport interface VExpressionContainer extends HasLocation, HasParent {\n    type: \"VExpressionContainer\"\n    parent: VDocumentFragment | VElement | VDirective | VDirectiveKey\n    expression:\n        | ESLintExpression\n        | VFilterSequenceExpression\n        | VForExpression\n        | VOnExpression\n        | VSlotScopeExpression\n        | null\n    references: Reference[]\n}\n\n/**\n * Attribute name nodes.\n */\nexport interface VIdentifier extends HasLocation, HasParent {\n    type: \"VIdentifier\"\n    parent: VAttribute | VDirectiveKey\n    name: string\n    rawName: string\n}\n\n/**\n * Attribute name nodes.\n */\nexport interface VDirectiveKey extends HasLocation, HasParent {\n    type: \"VDirectiveKey\"\n    parent: VDirective\n    name: VIdentifier\n    argument: VExpressionContainer | VIdentifier | null\n    modifiers: VIdentifier[]\n}\n\n/**\n * Attribute value nodes.\n */\nexport interface VLiteral extends HasLocation, HasParent {\n    type: \"VLiteral\"\n    parent: VAttribute\n    value: string\n}\n\n/**\n * Static attribute nodes.\n */\nexport interface VAttribute extends HasLocation, HasParent {\n    type: \"VAttribute\"\n    parent: VStartTag\n    directive: false\n    key: VIdentifier\n    value: VLiteral | null\n}\n\n/**\n * Directive nodes.\n */\nexport interface VDirective extends HasLocation, HasParent {\n    type: \"VAttribute\"\n    parent: VStartTag\n    directive: true\n    key: VDirectiveKey\n    value: VExpressionContainer | null\n}\n\n/**\n * Start tag nodes.\n */\nexport interface VStartTag extends HasLocation, HasParent {\n    type: \"VStartTag\"\n    parent: VElement\n    selfClosing: boolean\n    attributes: (VAttribute | VDirective)[]\n}\n\n/**\n * End tag nodes.\n */\nexport interface VEndTag extends HasLocation, HasParent {\n    type: \"VEndTag\"\n    parent: VElement\n}\n\n/**\n * The property which has concrete information.\n */\nexport interface HasConcreteInfo {\n    tokens: Token[]\n    comments: Token[]\n    errors: ParseError[]\n}\n\n/**\n * Element nodes.\n */\nexport interface VElement extends HasLocation, HasParent {\n    type: \"VElement\"\n    parent: VDocumentFragment | VElement\n    namespace: Namespace\n    name: string\n    rawName: string\n    startTag: VStartTag\n    children: (VElement | VText | VExpressionContainer)[]\n    endTag: VEndTag | null\n    variables: Variable[]\n}\n\n/**\n * Root nodes.\n */\nexport interface VDocumentFragment\n    extends HasLocation,\n        HasParent,\n        HasConcreteInfo {\n    type: \"VDocumentFragment\"\n    parent: null\n    children: (VElement | VText | VExpressionContainer)[]\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type { VisitorKeys } from \"eslint-visitor-keys\"\nimport Evk from \"eslint-visitor-keys\"\nimport type { Node } from \"./nodes\"\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst KEYS = Evk.unionWith({\n    VAttribute: [\"key\", \"value\"],\n    VDirectiveKey: [\"name\", \"argument\", \"modifiers\"],\n    VDocumentFragment: [\"children\"],\n    VElement: [\"startTag\", \"children\", \"endTag\"],\n    VEndTag: [],\n    VExpressionContainer: [\"expression\"],\n    VFilter: [\"callee\", \"arguments\"],\n    VFilterSequenceExpression: [\"expression\", \"filters\"],\n    VForExpression: [\"left\", \"right\"],\n    VIdentifier: [],\n    VLiteral: [],\n    VOnExpression: [\"body\"],\n    VSlotScopeExpression: [\"params\"],\n    VStartTag: [\"attributes\"],\n    VText: [],\n})\n\n/**\n * Check that the given key should be traversed or not.\n * @this {Traversable}\n * @param key The key to check.\n * @returns `true` if the key should be traversed.\n */\nfunction fallbackKeysFilter(this: any, key: string): boolean {\n    let value = null\n    return (\n        key !== \"comments\" &&\n        key !== \"leadingComments\" &&\n        key !== \"loc\" &&\n        key !== \"parent\" &&\n        key !== \"range\" &&\n        key !== \"tokens\" &&\n        key !== \"trailingComments\" &&\n        (value = this[key]) !== null &&\n        typeof value === \"object\" &&\n        (typeof value.type === \"string\" || Array.isArray(value))\n    )\n}\n\n/**\n * Get the keys of the given node to traverse it.\n * @param node The node to get.\n * @returns The keys to traverse.\n */\nfunction getFallbackKeys(node: Node): string[] {\n    return Object.keys(node).filter(fallbackKeysFilter, node)\n}\n\n/**\n * Check wheather a given value is a node.\n * @param x The value to check.\n * @returns `true` if the value is a node.\n */\nfunction isNode(x: any): x is Node {\n    return x !== null && typeof x === \"object\" && typeof x.type === \"string\"\n}\n\n/**\n * Traverse the given node.\n * @param node The node to traverse.\n * @param parent The parent node.\n * @param visitor The node visitor.\n */\nfunction traverse(node: Node, parent: Node | null, visitor: Visitor): void {\n    let i = 0\n    let j = 0\n\n    visitor.enterNode(node, parent)\n\n    const keys =\n        (visitor.visitorKeys || KEYS)[node.type] || getFallbackKeys(node)\n    for (i = 0; i < keys.length; ++i) {\n        const child = (node as any)[keys[i]]\n\n        if (Array.isArray(child)) {\n            for (j = 0; j < child.length; ++j) {\n                if (isNode(child[j])) {\n                    traverse(child[j], node, visitor)\n                }\n            }\n        } else if (isNode(child)) {\n            traverse(child, node, visitor)\n        }\n    }\n\n    visitor.leaveNode(node, parent)\n}\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\nexport interface Visitor {\n    visitorKeys?: VisitorKeys\n    enterNode(node: Node, parent: Node | null): void\n    leaveNode(node: Node, parent: Node | null): void\n}\n\n/**\n * Traverse the given AST tree.\n * @param node Root node to traverse.\n * @param visitor Visitor.\n */\nexport function traverseNodes(node: Node, visitor: Visitor): void {\n    traverse(node, null, visitor)\n}\n\nexport { getFallbackKeys }\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport sortedLastIndex from \"lodash/sortedLastIndex\"\nimport type { HasLocation, Location, ParseError } from \"../ast\"\n\n/**\n * Location calculators.\n *\n * HTML tokenizers remove several characters to handle HTML entities and line terminators.\n * Tokens have the processed text as their value, but tokens have offsets and locations in the original text.\n * This calculator calculates the original locations from the processed texts.\n *\n * This calculator will be used for:\n *\n * - Adjusts the locations of script ASTs.\n * - Creates expression containers in postprocess.\n */\nexport class LocationCalculator {\n    private gapOffsets: number[]\n    private ltOffsets: number[]\n    private baseOffset: number\n    private baseIndexOfGap: number\n    private shiftOffset: number\n\n    /**\n     * Initialize this calculator.\n     * @param gapOffsets The list of the offset of removed characters in tokenization phase.\n     * @param ltOffsets The list of the offset of line terminators.\n     * @param baseOffset The base offset to calculate locations.\n     * @param shiftOffset The shift offset to calculate locations.\n     */\n    public constructor(\n        gapOffsets: number[],\n        ltOffsets: number[],\n        baseOffset?: number,\n        shiftOffset = 0,\n    ) {\n        this.gapOffsets = gapOffsets\n        this.ltOffsets = ltOffsets\n        this.baseOffset = baseOffset || 0\n        this.baseIndexOfGap =\n            this.baseOffset === 0\n                ? 0\n                : sortedLastIndex(gapOffsets, this.baseOffset)\n        this.shiftOffset = shiftOffset\n    }\n\n    /**\n     * Get sub calculator which have the given base offset.\n     * @param offset The base offset of new sub calculator.\n     * @returns Sub calculator.\n     */\n    public getSubCalculatorAfter(offset: number): LocationCalculator {\n        return new LocationCalculator(\n            this.gapOffsets,\n            this.ltOffsets,\n            this.baseOffset + offset,\n            this.shiftOffset,\n        )\n    }\n\n    /**\n     * Get sub calculator that shifts the given offset.\n     * @param offset The shift of new sub calculator.\n     * @returns Sub calculator.\n     */\n    public getSubCalculatorShift(offset: number): LocationCalculator {\n        return new LocationCalculator(\n            this.gapOffsets,\n            this.ltOffsets,\n            this.baseOffset,\n            this.shiftOffset + offset,\n        )\n    }\n\n    /**\n     * Calculate the location of the given index.\n     * @param index The index to calculate their location.\n     * @returns The location of the index.\n     */\n    public getLocFromIndex(index: number): Location {\n        return this._getLocation(index)\n    }\n\n    /**\n     * Calculate the location of the given offset.\n     * @param offset The offset to calculate their location.\n     * @returns The location of the offset.\n     */\n    private _getLocation(offset: number): Location {\n        const line = sortedLastIndex(this.ltOffsets, offset) + 1\n        const column = offset - (line === 1 ? 0 : this.ltOffsets[line - 2])\n        return { line, column }\n    }\n\n    /**\n     * Calculate gap at the given index.\n     * @param index The index to calculate gap.\n     */\n    private _getGap(index: number): number {\n        const offsets = this.gapOffsets\n        let g0 = sortedLastIndex(offsets, index + this.baseOffset)\n        let pos = index + this.baseOffset + g0 - this.baseIndexOfGap\n\n        while (g0 < offsets.length && offsets[g0] <= pos) {\n            g0 += 1\n            pos += 1\n        }\n\n        return g0 - this.baseIndexOfGap\n    }\n\n    /**\n     * Calculate the location of the given index.\n     * @param index The index to calculate their location.\n     * @returns The location of the index.\n     */\n    public getLocation(index: number): Location {\n        return this._getLocation(this.baseOffset + index + this.shiftOffset)\n    }\n\n    /**\n     * Calculate the offset of the given index.\n     * @param index The index to calculate their location.\n     * @returns The offset of the index.\n     */\n    public getOffsetWithGap(index: number): number {\n        const shiftOffset = this.shiftOffset\n        return (\n            this.baseOffset +\n            index +\n            shiftOffset +\n            this._getGap(index + shiftOffset)\n        )\n    }\n\n    /**\n     * Modify the location information of the given node with using the base offset and gaps of this calculator.\n     * @param node The node to modify their location.\n     */\n    public fixLocation<T extends HasLocation>(node: T): T {\n        const shiftOffset = this.shiftOffset\n        const range = node.range\n        const loc = node.loc\n        const gap0 = this._getGap(range[0] + shiftOffset)\n        const gap1 = this._getGap(range[1] + shiftOffset)\n        const d0 = this.baseOffset + Math.max(0, gap0) + shiftOffset\n        const d1 = this.baseOffset + Math.max(0, gap1) + shiftOffset\n\n        if (d0 !== 0) {\n            range[0] += d0\n            if (node.start != null) {\n                node.start += d0\n            }\n            loc.start = this._getLocation(range[0])\n        }\n        if (d1 !== 0) {\n            range[1] += d1\n            if (node.end != null) {\n                node.end += d0\n            }\n            loc.end = this._getLocation(range[1])\n        }\n\n        return node\n    }\n\n    /**\n     * Modify the location information of the given error with using the base offset and gaps of this calculator.\n     * @param error The error to modify their location.\n     */\n    public fixErrorLocation(error: ParseError) {\n        const shiftOffset = this.shiftOffset\n        const gap = this._getGap(error.index + shiftOffset)\n        const diff = this.baseOffset + Math.max(0, gap) + shiftOffset\n\n        error.index += diff\n\n        const loc = this._getLocation(error.index)\n        error.lineNumber = loc.line\n        error.column = loc.column\n    }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport debugFactory from \"debug\"\nexport const debug = debugFactory(\"vue-eslint-parser\")\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type * as escopeTypes from \"eslint-scope\"\nimport escope from \"eslint-scope\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport type {\n    ESLintIdentifier,\n    ESLintProgram,\n    Reference,\n    Variable,\n} from \"../ast\"\nimport { getFallbackKeys } from \"../ast\"\n\n/**\n * Check whether the given reference is unique in the belonging array.\n * @param reference The current reference to check.\n * @param index The index of the reference.\n * @param references The belonging array of the reference.\n */\nfunction isUnique(\n    reference: escopeTypes.Reference,\n    index: number,\n    references: escopeTypes.Reference[],\n): boolean {\n    return (\n        index === 0 || reference.identifier !== references[index - 1].identifier\n    )\n}\n\n/**\n * Check whether a given variable has that definition.\n * @param variable The variable to check.\n * @returns `true` if the variable has that definition.\n */\nfunction hasDefinition(variable: escopeTypes.Variable): boolean {\n    return variable.defs.length >= 1\n}\n\n/**\n * Transform the given reference object.\n * @param reference The source reference object.\n * @returns The transformed reference object.\n */\nfunction transformReference(reference: escopeTypes.Reference): Reference {\n    const ret: Reference = {\n        id: reference.identifier as ESLintIdentifier,\n        mode: reference.isReadOnly()\n            ? \"r\"\n            : reference.isWriteOnly()\n            ? \"w\"\n            : /* otherwise */ \"rw\",\n        variable: null,\n    }\n    Object.defineProperty(ret, \"variable\", { enumerable: false })\n\n    return ret\n}\n\n/**\n * Transform the given variable object.\n * @param variable The source variable object.\n * @returns The transformed variable object.\n */\nfunction transformVariable(variable: escopeTypes.Variable): Variable {\n    const ret: Variable = {\n        id: variable.defs[0].name as ESLintIdentifier,\n        kind: variable.scope.type === \"for\" ? \"v-for\" : \"scope\",\n        references: [],\n    }\n    Object.defineProperty(ret, \"references\", { enumerable: false })\n\n    return ret\n}\n\n/**\n * Get the `for` statement scope.\n * @param scope The global scope.\n * @returns The `for` statement scope.\n */\nfunction getForScope(scope: escopeTypes.Scope): escopeTypes.Scope {\n    const child = scope.childScopes[0]\n    return child.block === scope.block ? child.childScopes[0] : child\n}\n\n/**\n *\n * @param ast\n * @param parserOptions\n */\nfunction analyze(\n    ast: ESLintProgram,\n    parserOptions: ParserOptions,\n): escopeTypes.Scope {\n    const ecmaVersion = parserOptions.ecmaVersion || 2017\n    const ecmaFeatures = parserOptions.ecmaFeatures || {}\n    const sourceType = parserOptions.sourceType || \"script\"\n    const result = escope.analyze(ast, {\n        ignoreEval: true,\n        nodejsScope: false,\n        impliedStrict: ecmaFeatures.impliedStrict,\n        ecmaVersion,\n        sourceType,\n        fallback: getFallbackKeys,\n    })\n\n    return result.globalScope\n}\n\n/**\n * Analyze the external references of the given AST.\n * @param {ASTNode} ast The root node to analyze.\n * @returns {Reference[]} The reference objects of external references.\n */\nexport function analyzeExternalReferences(\n    ast: ESLintProgram,\n    parserOptions: ParserOptions,\n): Reference[] {\n    const scope = analyze(ast, parserOptions)\n    return scope.through.filter(isUnique).map(transformReference)\n}\n\n/**\n * Analyze the external references of the given AST.\n * @param {ASTNode} ast The root node to analyze.\n * @returns {Reference[]} The reference objects of external references.\n */\nexport function analyzeVariablesAndExternalReferences(\n    ast: ESLintProgram,\n    parserOptions: ParserOptions,\n): { variables: Variable[]; references: Reference[] } {\n    const scope = analyze(ast, parserOptions)\n    return {\n        variables: getForScope(scope)\n            .variables.filter(hasDefinition)\n            .map(transformVariable),\n        references: scope.through.filter(isUnique).map(transformReference),\n    }\n}\n","import Module from \"module\"\nimport path from \"path\"\nimport type { ESLintExtendedProgram, ESLintProgram } from \"../ast\"\n\n/**\n * The interface of a result of ESLint custom parser.\n */\nexport type ESLintCustomParserResult = ESLintProgram | ESLintExtendedProgram\n\n/**\n * The interface of ESLint custom parsers.\n */\nexport interface ESLintCustomParser {\n    parse(code: string, options: any): ESLintCustomParserResult\n    parseForESLint?(code: string, options: any): ESLintCustomParserResult\n}\n\nconst createRequire: (filename: string) => (modname: string) => any =\n    // Added in v12.2.0\n    (Module as any).createRequire ||\n    // Added in v10.12.0, but deprecated in v12.2.0.\n    // eslint-disable-next-line @mysticatea/node/no-deprecated-api\n    Module.createRequireFromPath ||\n    // Polyfill - This is not executed on the tests on node@>=10.\n    /* istanbul ignore next */\n    ((modname) => {\n        const mod = new Module(modname)\n\n        mod.filename = modname\n        mod.paths = (Module as any)._nodeModulePaths(path.dirname(modname))\n        ;(mod as any)._compile(\"module.exports = require;\", modname)\n        return mod.exports\n    })\n\nlet espreeCache: ESLintCustomParser | null = null\n\nfunction isLinterPath(p: string): boolean {\n    return (\n        // ESLint 6 and above\n        p.includes(\n            `eslint${path.sep}lib${path.sep}linter${path.sep}linter.js`,\n        ) ||\n        // ESLint 5\n        p.includes(`eslint${path.sep}lib${path.sep}linter.js`)\n    )\n}\n\n/**\n * Load `espree` from the loaded ESLint.\n * If the loaded ESLint was not found, just returns `require(\"espree\")`.\n */\nexport function getEspree(): ESLintCustomParser {\n    if (!espreeCache) {\n        // Lookup the loaded eslint\n        const linterPath = Object.keys(require.cache).find(isLinterPath)\n        if (linterPath) {\n            try {\n                espreeCache = createRequire(linterPath)(\"espree\")\n            } catch {\n                // ignore\n            }\n        }\n        if (!espreeCache) {\n            //eslint-disable-next-line @mysticatea/ts/no-require-imports\n            espreeCache = require(\"espree\")\n        }\n    }\n\n    return espreeCache!\n}\n","import type { ESLintExtendedProgram, LocationRange, Node } from \"../ast\"\nimport { traverseNodes } from \"../ast\"\nimport type { LocationCalculator } from \"./location-calculator\"\n\n/**\n * Do post-process of parsing an expression.\n *\n * 1. Set `node.parent`.\n * 2. Fix `node.range` and `node.loc` for HTML entities.\n *\n * @param result The parsing result to modify.\n * @param locationCalculator The location calculator to modify.\n */\nexport function fixLocations(\n    result: ESLintExtendedProgram,\n    locationCalculator: LocationCalculator,\n): void {\n    // There are cases which the same node instance appears twice in the tree.\n    // E.g. `let {a} = {}` // This `a` appears twice at `Property#key` and `Property#value`.\n    const traversed = new Set<Node | number[] | LocationRange>()\n\n    traverseNodes(result.ast, {\n        visitorKeys: result.visitorKeys,\n\n        enterNode(node, parent) {\n            if (!traversed.has(node)) {\n                traversed.add(node)\n                node.parent = parent\n\n                // `babel-eslint@8` has shared `Node#range` with multiple nodes.\n                // See also: https://github.com/vuejs/eslint-plugin-vue/issues/208\n                if (traversed.has(node.range)) {\n                    if (!traversed.has(node.loc)) {\n                        // However, `Node#loc` may not be shared.\n                        // See also: https://github.com/vuejs/vue-eslint-parser/issues/84\n                        node.loc.start = locationCalculator.getLocFromIndex(\n                            node.range[0],\n                        )\n                        node.loc.end = locationCalculator.getLocFromIndex(\n                            node.range[1],\n                        )\n                        traversed.add(node.loc)\n                    }\n                } else {\n                    locationCalculator.fixLocation(node)\n                    traversed.add(node.range)\n                    traversed.add(node.loc)\n                }\n            }\n        },\n\n        leaveNode() {\n            // Do nothing.\n        },\n    })\n\n    for (const token of result.ast.tokens || []) {\n        locationCalculator.fixLocation(token)\n    }\n    for (const comment of result.ast.comments || []) {\n        locationCalculator.fixLocation(comment)\n    }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport first from \"lodash/first\"\nimport last from \"lodash/last\"\nimport sortedIndexBy from \"lodash/sortedIndexBy\"\nimport type {\n    ESLintArrayPattern,\n    ESLintCallExpression,\n    ESLintExpression,\n    ESLintExpressionStatement,\n    ESLintExtendedProgram,\n    ESLintForInStatement,\n    ESLintForOfStatement,\n    ESLintFunctionExpression,\n    ESLintPattern,\n    ESLintVariableDeclaration,\n    ESLintUnaryExpression,\n    HasLocation,\n    Node,\n    Reference,\n    Token,\n    Variable,\n    VElement,\n    VFilter,\n    VFilterSequenceExpression,\n    VForExpression,\n    VOnExpression,\n    VSlotScopeExpression,\n    OffsetRange,\n} from \"../ast\"\nimport { ParseError } from \"../ast\"\nimport { debug } from \"../common/debug\"\nimport type { LocationCalculator } from \"../common/location-calculator\"\nimport {\n    analyzeExternalReferences,\n    analyzeVariablesAndExternalReferences,\n} from \"./scope-analyzer\"\nimport type { ESLintCustomParser } from \"./espree\"\nimport { getEspree } from \"./espree\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport { fixLocations } from \"../common/fix-locations\"\n\n// [1] = spacing before the aliases.\n// [2] = aliases.\n// [3] = all after the aliases.\nconst ALIAS_PARENS = /^(\\s*)\\(([\\s\\S]+)\\)(\\s*(?:in|of)\\b[\\s\\S]+)$/u\nconst DUMMY_PARENT: any = {}\n\n// Like Vue, it judges whether it is a function expression or not.\n// https://github.com/vuejs/vue/blob/0948d999f2fddf9f90991956493f976273c5da1f/src/compiler/codegen/events.js#L3\nconst IS_FUNCTION_EXPRESSION = /^\\s*([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*\\(/u\nconst IS_SIMPLE_PATH = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?'\\]|\\[\"[^\"]*?\"\\]|\\[\\d+\\]|\\[[A-Za-z_$][\\w$]*\\])*$/u\n\n/**\n * Replace parentheses which wrap the alias of 'v-for' directive values by array brackets in order to avoid syntax errors.\n * @param code The code to replace.\n * @returns The replaced code.\n */\nfunction replaceAliasParens(code: string): string {\n    const match = ALIAS_PARENS.exec(code)\n    if (match != null) {\n        return `${match[1]}[${match[2]}]${match[3]}`\n    }\n    return code\n}\n\n/**\n * Normalize the `ForXStatement#left` node to parse v-for expressions.\n * @param left The `ForXStatement#left` node to normalize.\n * @param replaced The flag to indicate that the alias parentheses were replaced.\n */\nfunction normalizeLeft(\n    left: ESLintVariableDeclaration | ESLintPattern,\n    replaced: boolean,\n): ESLintPattern[] {\n    if (left.type !== \"VariableDeclaration\") {\n        throw new Error(\"unreachable\")\n    }\n    const id = left.declarations[0].id\n\n    if (replaced) {\n        return (id as ESLintArrayPattern).elements\n    }\n    return [id]\n}\n\n/**\n * Get the comma token before a given node.\n * @param tokens The token list.\n * @param node The node to get the comma before this node.\n * @returns The comma token.\n */\nfunction getCommaTokenBeforeNode(tokens: Token[], node: Node): Token | null {\n    let tokenIndex = sortedIndexBy(\n        tokens as { range: OffsetRange }[],\n        { range: node.range },\n        (t) => t.range[0],\n    )\n\n    while (tokenIndex >= 0) {\n        const token = tokens[tokenIndex]\n        if (token.type === \"Punctuator\" && token.value === \",\") {\n            return token\n        }\n        tokenIndex -= 1\n    }\n\n    return null\n}\n\n/**\n * Throw syntax error for empty.\n * @param locationCalculator The location calculator to get line/column.\n */\nfunction throwEmptyError(\n    locationCalculator: LocationCalculator,\n    expected: string,\n): never {\n    const loc = locationCalculator.getLocation(0)\n    const err = new ParseError(\n        `Expected to be ${expected}, but got empty.`,\n        undefined,\n        0,\n        loc.line,\n        loc.column,\n    )\n    locationCalculator.fixErrorLocation(err)\n\n    throw err\n}\n\n/**\n * Throw syntax error for unexpected token.\n * @param locationCalculator The location calculator to get line/column.\n * @param name The token name.\n * @param token The token object to get that location.\n */\nfunction throwUnexpectedTokenError(name: string, token: HasLocation): never {\n    const err = new ParseError(\n        `Unexpected token '${name}'.`,\n        undefined,\n        token.range[0],\n        token.loc.start.line,\n        token.loc.start.column,\n    )\n\n    throw err\n}\n\n/**\n * Throw syntax error of outside of code.\n * @param locationCalculator The location calculator to get line/column.\n */\nfunction throwErrorAsAdjustingOutsideOfCode(\n    err: any,\n    code: string,\n    locationCalculator: LocationCalculator,\n): never {\n    if (ParseError.isParseError(err)) {\n        const endOffset = locationCalculator.getOffsetWithGap(code.length)\n        if (err.index >= endOffset) {\n            err.message = \"Unexpected end of expression.\"\n        }\n    }\n\n    throw err\n}\n\n/**\n * Parse the given source code.\n *\n * @param code The source code to parse.\n * @param locationCalculator The location calculator for fixLocations.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nfunction parseScriptFragment(\n    code: string,\n    locationCalculator: LocationCalculator,\n    parserOptions: ParserOptions,\n): ESLintExtendedProgram {\n    try {\n        const result = parseScript(code, parserOptions)\n        fixLocations(result, locationCalculator)\n        return result\n    } catch (err) {\n        const perr = ParseError.normalize(err)\n        if (perr) {\n            locationCalculator.fixErrorLocation(perr)\n            throw perr\n        }\n        throw err\n    }\n}\n\nconst validDivisionCharRE = /[\\w).+\\-_$\\]]/u\n\n/**\n * This is a fork of https://github.com/vuejs/vue/blob/2686818beb5728e3b7aa22f47a3b3f0d39d90c8e/src/compiler/parser/filter-parser.js\n * @param exp the expression to process filters.\n */\n//eslint-disable-next-line complexity\nfunction splitFilters(exp: string): string[] {\n    const result: string[] = []\n    let inSingle = false\n    let inDouble = false\n    let inTemplateString = false\n    let inRegex = false\n    let curly = 0\n    let square = 0\n    let paren = 0\n    let lastFilterIndex = 0\n    let c = 0\n    let prev = 0\n\n    for (let i = 0; i < exp.length; i++) {\n        prev = c\n        c = exp.charCodeAt(i)\n        if (inSingle) {\n            if (c === 0x27 && prev !== 0x5c) {\n                inSingle = false\n            }\n        } else if (inDouble) {\n            if (c === 0x22 && prev !== 0x5c) {\n                inDouble = false\n            }\n        } else if (inTemplateString) {\n            if (c === 0x60 && prev !== 0x5c) {\n                inTemplateString = false\n            }\n        } else if (inRegex) {\n            if (c === 0x2f && prev !== 0x5c) {\n                inRegex = false\n            }\n        } else if (\n            c === 0x7c && // pipe\n            exp.charCodeAt(i + 1) !== 0x7c &&\n            exp.charCodeAt(i - 1) !== 0x7c &&\n            !curly &&\n            !square &&\n            !paren\n        ) {\n            result.push(exp.slice(lastFilterIndex, i))\n            lastFilterIndex = i + 1\n        } else {\n            switch (c) {\n                case 0x22: // \"\n                    inDouble = true\n                    break\n                case 0x27: // '\n                    inSingle = true\n                    break\n                case 0x60: // `\n                    inTemplateString = true\n                    break\n                case 0x28: // (\n                    paren++\n                    break\n                case 0x29: // )\n                    paren--\n                    break\n                case 0x5b: // [\n                    square++\n                    break\n                case 0x5d: // ]\n                    square--\n                    break\n                case 0x7b: // {\n                    curly++\n                    break\n                case 0x7d: // }\n                    curly--\n                    break\n                // no default\n            }\n            if (c === 0x2f) {\n                // /\n                let j = i - 1\n                let p\n                // find first non-whitespace prev char\n                for (; j >= 0; j--) {\n                    p = exp.charAt(j)\n                    if (p !== \" \") {\n                        break\n                    }\n                }\n                if (!p || !validDivisionCharRE.test(p)) {\n                    inRegex = true\n                }\n            }\n        }\n    }\n\n    result.push(exp.slice(lastFilterIndex))\n\n    return result\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nfunction parseExpressionBody(\n    code: string,\n    locationCalculator: LocationCalculator,\n    parserOptions: ParserOptions,\n    allowEmpty = false,\n): ExpressionParseResult<ESLintExpression> {\n    debug('[script] parse expression: \"0(%s)\"', code)\n\n    try {\n        const ast = parseScriptFragment(\n            `0(${code})`,\n            locationCalculator.getSubCalculatorShift(-2),\n            parserOptions,\n        ).ast\n        const tokens = ast.tokens || []\n        const comments = ast.comments || []\n        const references = analyzeExternalReferences(ast, parserOptions)\n        const statement = ast.body[0] as ESLintExpressionStatement\n        const callExpression = statement.expression as ESLintCallExpression\n        const expression = callExpression.arguments[0]\n\n        if (!allowEmpty && !expression) {\n            return throwEmptyError(locationCalculator, \"an expression\")\n        }\n        if (expression && expression.type === \"SpreadElement\") {\n            return throwUnexpectedTokenError(\"...\", expression)\n        }\n        if (callExpression.arguments[1]) {\n            const node = callExpression.arguments[1]\n            return throwUnexpectedTokenError(\n                \",\",\n                getCommaTokenBeforeNode(tokens, node) || node,\n            )\n        }\n\n        // Remove parens.\n        tokens.shift()\n        tokens.shift()\n        tokens.pop()\n\n        return { expression, tokens, comments, references, variables: [] }\n    } catch (err) {\n        return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n    }\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nfunction parseFilter(\n    code: string,\n    locationCalculator: LocationCalculator,\n    parserOptions: ParserOptions,\n): ExpressionParseResult<VFilter> | null {\n    debug('[script] parse filter: \"%s\"', code)\n\n    try {\n        const expression: VFilter = {\n            type: \"VFilter\",\n            parent: null as any,\n            range: [0, 0],\n            loc: {} as any,\n            callee: null as any,\n            arguments: [],\n        }\n        const tokens: Token[] = []\n        const comments: Token[] = []\n        const references: Reference[] = []\n\n        // Parse the callee.\n        const paren = code.indexOf(\"(\")\n        const calleeCode = paren === -1 ? code : code.slice(0, paren)\n        const argsCode = paren === -1 ? null : code.slice(paren)\n\n        // Parse the callee.\n        if (calleeCode.trim()) {\n            const spaces = /^\\s*/u.exec(calleeCode)![0]\n            const subCalculator = locationCalculator.getSubCalculatorShift(\n                spaces.length,\n            )\n            const { ast } = parseScriptFragment(\n                `\"${calleeCode.trim()}\"`,\n                subCalculator,\n                parserOptions,\n            )\n            const statement = ast.body[0] as ESLintExpressionStatement\n            const callee = statement.expression\n            if (callee.type !== \"Literal\") {\n                const { loc, range } = ast.tokens![0]\n                return throwUnexpectedTokenError('\"', {\n                    range: [range[1] - 1, range[1]],\n                    loc: {\n                        start: {\n                            line: loc.end.line,\n                            column: loc.end.column - 1,\n                        },\n                        end: loc.end,\n                    },\n                })\n            }\n\n            expression.callee = {\n                type: \"Identifier\",\n                parent: expression,\n                range: [\n                    callee.range[0],\n                    subCalculator.getOffsetWithGap(calleeCode.trim().length),\n                ],\n                loc: {\n                    start: callee.loc.start,\n                    end: subCalculator.getLocation(calleeCode.trim().length),\n                },\n                name: String(callee.value),\n            }\n            tokens.push({\n                type: \"Identifier\",\n                value: calleeCode.trim(),\n                range: expression.callee.range,\n                loc: expression.callee.loc,\n            })\n        } else {\n            return throwEmptyError(locationCalculator, \"a filter name\")\n        }\n\n        // Parse the arguments.\n        if (argsCode != null) {\n            const { ast } = parseScriptFragment(\n                `0${argsCode}`,\n                locationCalculator\n                    .getSubCalculatorAfter(paren)\n                    .getSubCalculatorShift(-1),\n                parserOptions,\n            )\n            const statement = ast.body[0] as ESLintExpressionStatement\n            const callExpression = statement.expression\n\n            ast.tokens!.shift()\n\n            if (\n                callExpression.type !== \"CallExpression\" ||\n                callExpression.callee.type !== \"Literal\"\n            ) {\n                // Report the next token of `)`.\n                let nestCount = 1\n                for (const token of ast.tokens!.slice(1)) {\n                    if (nestCount === 0) {\n                        return throwUnexpectedTokenError(token.value, token)\n                    }\n                    if (token.type === \"Punctuator\" && token.value === \"(\") {\n                        nestCount += 1\n                    }\n                    if (token.type === \"Punctuator\" && token.value === \")\") {\n                        nestCount -= 1\n                    }\n                }\n\n                const token = last(ast.tokens)!\n                return throwUnexpectedTokenError(token.value, token)\n            }\n\n            for (const argument of callExpression.arguments) {\n                argument.parent = expression\n                expression.arguments.push(argument)\n            }\n            tokens.push(...ast.tokens!)\n            comments.push(...ast.comments!)\n            references.push(...analyzeExternalReferences(ast, parserOptions))\n        }\n\n        // Update range.\n        const firstToken = tokens[0]\n        const lastToken = last(tokens)!\n        expression.range = [firstToken.range[0], lastToken.range[1]]\n        expression.loc = { start: firstToken.loc.start, end: lastToken.loc.end }\n\n        return { expression, tokens, comments, references, variables: [] }\n    } catch (err) {\n        return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n    }\n}\n\n/**\n * The result of parsing expressions.\n */\nexport interface ExpressionParseResult<T extends Node> {\n    expression: T | null\n    tokens: Token[]\n    comments: Token[]\n    references: Reference[]\n    variables: Variable[]\n}\n\n/**\n * Parse the given source code.\n *\n * @param code The source code to parse.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseScript(\n    code: string,\n    parserOptions: ParserOptions,\n): ESLintExtendedProgram {\n    const parser: ESLintCustomParser =\n        typeof parserOptions.parser === \"string\"\n            ? // eslint-disable-next-line @mysticatea/ts/no-require-imports\n              require(parserOptions.parser)\n            : getEspree()\n    const result: any =\n        typeof parser.parseForESLint === \"function\"\n            ? parser.parseForESLint(code, parserOptions)\n            : parser.parse(code, parserOptions)\n\n    if (result.ast != null) {\n        return result\n    }\n    return { ast: result }\n}\n\n/**\n * Parse the source code of the given `<script>` element.\n * @param node The `<script>` element to parse.\n * @param globalLocationCalculator The location calculator for fixLocations.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseScriptElement(\n    node: VElement,\n    globalLocationCalculator: LocationCalculator,\n    parserOptions: ParserOptions,\n): ESLintExtendedProgram {\n    const text = node.children[0]\n    const offset =\n        text != null && text.type === \"VText\"\n            ? text.range[0]\n            : node.startTag.range[1]\n    const code = text != null && text.type === \"VText\" ? text.value : \"\"\n    const locationCalculator = globalLocationCalculator.getSubCalculatorAfter(\n        offset,\n    )\n    const result = parseScriptFragment(code, locationCalculator, parserOptions)\n\n    // Needs the tokens of start/end tags for `lines-around-*` rules to work\n    // correctly.\n    if (result.ast.tokens != null) {\n        const startTag = node.startTag\n        const endTag = node.endTag\n\n        if (startTag != null) {\n            result.ast.tokens.unshift({\n                type: \"Punctuator\",\n                range: startTag.range,\n                loc: startTag.loc,\n                value: \"<script>\",\n            })\n        }\n        if (endTag != null) {\n            result.ast.tokens.push({\n                type: \"Punctuator\",\n                range: endTag.range,\n                loc: endTag.loc,\n                value: \"</script>\",\n            })\n        }\n    }\n\n    return result\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseExpression(\n    code: string,\n    locationCalculator: LocationCalculator,\n    parserOptions: ParserOptions,\n    { allowEmpty = false, allowFilters = false } = {},\n): ExpressionParseResult<ESLintExpression | VFilterSequenceExpression> {\n    debug('[script] parse expression: \"%s\"', code)\n\n    const [mainCode, ...filterCodes] =\n        allowFilters && (parserOptions.vueFeatures?.filter ?? true)\n            ? splitFilters(code)\n            : [code]\n    if (filterCodes.length === 0) {\n        return parseExpressionBody(\n            code,\n            locationCalculator,\n            parserOptions,\n            allowEmpty,\n        )\n    }\n\n    // Parse expression\n    const retB = parseExpressionBody(\n        mainCode,\n        locationCalculator,\n        parserOptions,\n    )\n    if (!retB.expression) {\n        return retB\n    }\n    const ret = (retB as unknown) as ExpressionParseResult<VFilterSequenceExpression>\n\n    ret.expression = {\n        type: \"VFilterSequenceExpression\",\n        parent: null as any,\n        expression: retB.expression,\n        filters: [],\n        range: retB.expression.range.slice(0) as [number, number],\n        loc: Object.assign({}, retB.expression.loc),\n    }\n    ret.expression.expression.parent = ret.expression\n\n    // Parse filters\n    let prevLoc = mainCode.length\n    for (const filterCode of filterCodes) {\n        // Pipe token.\n        ret.tokens.push(\n            locationCalculator.fixLocation({\n                type: \"Punctuator\",\n                value: \"|\",\n                range: [prevLoc, prevLoc + 1],\n                loc: {} as any,\n            }),\n        )\n\n        // Parse a filter\n        const retF = parseFilter(\n            filterCode,\n            locationCalculator.getSubCalculatorShift(prevLoc + 1),\n            parserOptions,\n        )\n        if (retF) {\n            if (retF.expression) {\n                ret.expression.filters.push(retF.expression)\n                retF.expression.parent = ret.expression\n            }\n            ret.tokens.push(...retF.tokens)\n            ret.comments.push(...retF.comments)\n            ret.references.push(...retF.references)\n        }\n\n        prevLoc += 1 + filterCode.length\n    }\n\n    // Update range.\n    const lastToken = last(ret.tokens)!\n    ret.expression.range[1] = lastToken.range[1]\n    ret.expression.loc.end = lastToken.loc.end\n\n    return ret\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseVForExpression(\n    code: string,\n    locationCalculator: LocationCalculator,\n    parserOptions: ParserOptions,\n): ExpressionParseResult<VForExpression> {\n    const processedCode = replaceAliasParens(code)\n    debug('[script] parse v-for expression: \"for(%s);\"', processedCode)\n\n    if (code.trim() === \"\") {\n        throwEmptyError(locationCalculator, \"'<alias> in <expression>'\")\n    }\n\n    try {\n        const replaced = processedCode !== code\n        const ast = parseScriptFragment(\n            `for(let ${processedCode});`,\n            locationCalculator.getSubCalculatorShift(-8),\n            parserOptions,\n        ).ast\n        const tokens = ast.tokens || []\n        const comments = ast.comments || []\n        const scope = analyzeVariablesAndExternalReferences(ast, parserOptions)\n        const references = scope.references\n        const variables = scope.variables\n        const statement = ast.body[0] as\n            | ESLintForInStatement\n            | ESLintForOfStatement\n        const left = normalizeLeft(statement.left, replaced)\n        const right = statement.right\n        const firstToken = tokens[3] || statement.left\n        const lastToken = tokens[tokens.length - 3] || statement.right\n        const expression: VForExpression = {\n            type: \"VForExpression\",\n            range: [firstToken.range[0], lastToken.range[1]],\n            loc: { start: firstToken.loc.start, end: lastToken.loc.end },\n            parent: DUMMY_PARENT,\n            left,\n            right,\n        }\n\n        // Modify parent.\n        for (const l of left) {\n            if (l != null) {\n                l.parent = expression\n            }\n        }\n        right.parent = expression\n\n        // Remvoe `for` `(` `let` `)` `;`.\n        tokens.shift()\n        tokens.shift()\n        tokens.shift()\n        tokens.pop()\n        tokens.pop()\n\n        // Restore parentheses from array brackets.\n        if (replaced) {\n            const closeOffset = statement.left.range[1] - 1\n            const open = tokens[0]\n            const close = tokens.find((t) => t.range[0] === closeOffset)\n\n            if (open != null) {\n                open.value = \"(\"\n            }\n            if (close != null) {\n                close.value = \")\"\n            }\n        }\n\n        return { expression, tokens, comments, references, variables }\n    } catch (err) {\n        return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n    }\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseVOnExpression(\n    code: string,\n    locationCalculator: LocationCalculator,\n    parserOptions: ParserOptions,\n): ExpressionParseResult<ESLintExpression | VOnExpression> {\n    if (IS_FUNCTION_EXPRESSION.test(code) || IS_SIMPLE_PATH.test(code)) {\n        return parseExpressionBody(code, locationCalculator, parserOptions)\n    }\n    return parseVOnExpressionBody(code, locationCalculator, parserOptions)\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nfunction parseVOnExpressionBody(\n    code: string,\n    locationCalculator: LocationCalculator,\n    parserOptions: ParserOptions,\n): ExpressionParseResult<VOnExpression> {\n    debug('[script] parse v-on expression: \"void function($event){%s}\"', code)\n\n    if (code.trim() === \"\") {\n        throwEmptyError(locationCalculator, \"statements\")\n    }\n\n    try {\n        const ast = parseScriptFragment(\n            `void function($event){${code}}`,\n            locationCalculator.getSubCalculatorShift(-22),\n            parserOptions,\n        ).ast\n        const references = analyzeExternalReferences(ast, parserOptions)\n        const outermostStatement = ast.body[0] as ESLintExpressionStatement\n        const functionDecl = (outermostStatement.expression as ESLintUnaryExpression)\n            .argument as ESLintFunctionExpression\n        const block = functionDecl.body\n        const body = block.body\n        const firstStatement = first(body)\n        const lastStatement = last(body)\n        const expression: VOnExpression = {\n            type: \"VOnExpression\",\n            range: [\n                firstStatement != null\n                    ? firstStatement.range[0]\n                    : block.range[0] + 1,\n                lastStatement != null\n                    ? lastStatement.range[1]\n                    : block.range[1] - 1,\n            ],\n            loc: {\n                start:\n                    firstStatement != null\n                        ? firstStatement.loc.start\n                        : locationCalculator.getLocation(1),\n                end:\n                    lastStatement != null\n                        ? lastStatement.loc.end\n                        : locationCalculator.getLocation(code.length + 1),\n            },\n            parent: DUMMY_PARENT,\n            body,\n        }\n        const tokens = ast.tokens || []\n        const comments = ast.comments || []\n\n        // Modify parent.\n        for (const b of body) {\n            b.parent = expression\n        }\n\n        // Remove braces.\n        tokens.splice(0, 6)\n        tokens.pop()\n\n        return { expression, tokens, comments, references, variables: [] }\n    } catch (err) {\n        return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n    }\n}\n\n/**\n * Parse the source code of `slot-scope` directive.\n * @param code The source code of `slot-scope` directive.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseSlotScopeExpression(\n    code: string,\n    locationCalculator: LocationCalculator,\n    parserOptions: ParserOptions,\n): ExpressionParseResult<VSlotScopeExpression> {\n    debug('[script] parse slot-scope expression: \"void function(%s) {}\"', code)\n\n    if (code.trim() === \"\") {\n        throwEmptyError(\n            locationCalculator,\n            \"an identifier or an array/object pattern\",\n        )\n    }\n\n    try {\n        const ast = parseScriptFragment(\n            `void function(${code}) {}`,\n            locationCalculator.getSubCalculatorShift(-14),\n            parserOptions,\n        ).ast\n        const statement = ast.body[0] as ESLintExpressionStatement\n        const rawExpression = statement.expression as ESLintUnaryExpression\n        const functionDecl = rawExpression.argument as ESLintFunctionExpression\n        const params = functionDecl.params\n\n        if (params.length === 0) {\n            return {\n                expression: null,\n                tokens: [],\n                comments: [],\n                references: [],\n                variables: [],\n            }\n        }\n\n        const tokens = ast.tokens || []\n        const comments = ast.comments || []\n        const scope = analyzeVariablesAndExternalReferences(ast, parserOptions)\n        const references = scope.references\n        const variables = scope.variables\n        const firstParam = first(params)!\n        const lastParam = last(params)!\n        const expression: VSlotScopeExpression = {\n            type: \"VSlotScopeExpression\",\n            range: [firstParam.range[0], lastParam.range[1]],\n            loc: { start: firstParam.loc.start, end: lastParam.loc.end },\n            parent: DUMMY_PARENT,\n            params: functionDecl.params,\n        }\n\n        // Modify parent.\n        for (const param of params) {\n            param.parent = expression\n        }\n\n        // Remvoe `void` `function` `(` `)` `{` `}`.\n        tokens.shift()\n        tokens.shift()\n        tokens.shift()\n        tokens.pop()\n        tokens.pop()\n        tokens.pop()\n\n        return { expression, tokens, comments, references, variables }\n    } catch (err) {\n        return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n    }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport sortedIndexBy from \"lodash/sortedIndexBy\"\nimport sortedLastIndexBy from \"lodash/sortedLastIndexBy\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport type {\n    ESLintExpression,\n    Reference,\n    Token,\n    VAttribute,\n    VDirective,\n    VDirectiveKey,\n    VDocumentFragment,\n    VElement,\n    VExpressionContainer,\n    VFilterSequenceExpression,\n    VForExpression,\n    VIdentifier,\n    VLiteral,\n    VNode,\n    VOnExpression,\n    VSlotScopeExpression,\n} from \"../ast\"\nimport { ParseError } from \"../ast\"\nimport { debug } from \"../common/debug\"\nimport type { LocationCalculator } from \"../common/location-calculator\"\nimport type { ExpressionParseResult } from \"../script\"\nimport {\n    parseExpression,\n    parseVForExpression,\n    parseVOnExpression,\n    parseSlotScopeExpression,\n} from \"../script\"\n\nconst shorthandSign = /^[.:@#]/u\nconst shorthandNameMap = { \":\": \"bind\", \".\": \"bind\", \"@\": \"on\", \"#\": \"slot\" }\nconst invalidDynamicArgumentNextChar = /^[\\s\\r\\n=/>]$/u\n\n/**\n * Get the belonging document of the given node.\n * @param leafNode The node to get.\n * @returns The belonging document.\n */\nfunction getOwnerDocument(leafNode: VNode): VDocumentFragment | null {\n    let node: VNode | null = leafNode\n    while (node != null && node.type !== \"VDocumentFragment\") {\n        node = node.parent\n    }\n    return node\n}\n\n/**\n * Create a simple token.\n * @param type The type of new token.\n * @param start The offset of the start position of new token.\n * @param end The offset of the end position of new token.\n * @param value The value of new token.\n * @returns The new token.\n */\nfunction createSimpleToken(\n    type: string,\n    start: number,\n    end: number,\n    value: string,\n    globalLocationCalculator: LocationCalculator,\n): Token {\n    return {\n        type,\n        range: [start, end],\n        loc: {\n            start: globalLocationCalculator.getLocation(start),\n            end: globalLocationCalculator.getLocation(end),\n        },\n        value,\n    }\n}\n\n/**\n * Parse the given attribute name as a directive key.\n * @param node The identifier node to parse.\n * @param document The document to add parsing errors.\n * @returns The directive key node.\n */\nfunction parseDirectiveKeyStatically(\n    node: VIdentifier,\n    document: VDocumentFragment | null,\n): VDirectiveKey {\n    const {\n        name: text,\n        rawName: rawText,\n        range: [offset],\n        loc: {\n            start: { column, line },\n        },\n    } = node\n    const directiveKey: VDirectiveKey = {\n        type: \"VDirectiveKey\",\n        range: node.range,\n        loc: node.loc,\n        parent: node.parent as any,\n        name: null as any,\n        argument: null as VIdentifier | null,\n        modifiers: [] as VIdentifier[],\n    }\n    let i = 0\n\n    function createIdentifier(\n        start: number,\n        end: number,\n        name?: string,\n    ): VIdentifier {\n        return {\n            type: \"VIdentifier\",\n            parent: directiveKey,\n            range: [offset + start, offset + end],\n            loc: {\n                start: { column: column + start, line },\n                end: { column: column + end, line },\n            },\n            name: name || text.slice(start, end),\n            rawName: rawText.slice(start, end),\n        }\n    }\n\n    // Parse.\n    if (shorthandSign.test(text)) {\n        const sign = text[0] as \":\" | \".\" | \"@\" | \"#\"\n        directiveKey.name = createIdentifier(0, 1, shorthandNameMap[sign])\n        i = 1\n    } else {\n        const colon = text.indexOf(\":\")\n        if (colon !== -1) {\n            directiveKey.name = createIdentifier(0, colon)\n            i = colon + 1\n        }\n    }\n\n    if (directiveKey.name != null && text[i] === \"[\") {\n        // Dynamic argument.\n        const len = text.slice(i).lastIndexOf(\"]\")\n        if (len !== -1) {\n            directiveKey.argument = createIdentifier(i, i + len + 1)\n            i = i + len + 1 + (text[i + len + 1] === \".\" ? 1 : 0)\n        }\n    }\n\n    const modifiers = text\n        .slice(i)\n        .split(\".\")\n        .map((modifierName) => {\n            const modifier = createIdentifier(i, i + modifierName.length)\n            if (modifierName === \"\" && i < text.length) {\n                insertError(\n                    document,\n                    new ParseError(\n                        `Unexpected token '${text[i]}'`,\n                        undefined,\n                        offset + i,\n                        line,\n                        column + i,\n                    ),\n                )\n            }\n            i += modifierName.length + 1\n            return modifier\n        })\n\n    if (directiveKey.name == null) {\n        directiveKey.name = modifiers.shift()!\n    } else if (directiveKey.argument == null && modifiers[0].name !== \"\") {\n        directiveKey.argument = modifiers.shift() || null\n    }\n    directiveKey.modifiers = modifiers.filter(isNotEmptyModifier)\n\n    if (directiveKey.name.name === \"v-\") {\n        insertError(\n            document,\n            new ParseError(\n                `Unexpected token '${\n                    text[directiveKey.name.range[1] - offset]\n                }'`,\n                undefined,\n                directiveKey.name.range[1],\n                directiveKey.name.loc.end.line,\n                directiveKey.name.loc.end.column,\n            ),\n        )\n    }\n\n    // v-bind.prop shorthand\n    if (\n        directiveKey.name.rawName === \".\" &&\n        !directiveKey.modifiers.some(isPropModifier)\n    ) {\n        const pos =\n            (directiveKey.argument || directiveKey.name).range[1] - offset\n        const propModifier = createIdentifier(pos, pos, \"prop\")\n        directiveKey.modifiers.unshift(propModifier)\n    }\n\n    return directiveKey\n}\n\n/**\n * Check whether a given identifier node is `prop` or not.\n * @param node The identifier node to check.\n */\nfunction isPropModifier(node: VIdentifier): boolean {\n    return node.name === \"prop\"\n}\n\n/**\n * Check whether a given identifier node is empty or not.\n * @param node The identifier node to check.\n */\nfunction isNotEmptyModifier(node: VIdentifier): boolean {\n    return node.name !== \"\"\n}\n\n/**\n * Parse the tokens of a given key node.\n * @param node The key node to parse.\n */\nfunction parseDirectiveKeyTokens(node: VDirectiveKey): Token[] {\n    const { name, argument, modifiers } = node\n    const shorthand = name.range[1] - name.range[0] === 1\n    const tokens: Token[] = []\n\n    if (shorthand) {\n        tokens.push({\n            type: \"Punctuator\",\n            range: name.range,\n            loc: name.loc,\n            value: name.rawName,\n        })\n    } else {\n        tokens.push({\n            type: \"HTMLIdentifier\",\n            range: name.range,\n            loc: name.loc,\n            value: name.rawName,\n        })\n\n        if (argument) {\n            tokens.push({\n                type: \"Punctuator\",\n                range: [name.range[1], argument.range[0]],\n                loc: { start: name.loc.end, end: argument.loc.start },\n                value: \":\",\n            })\n        }\n    }\n\n    if (argument) {\n        tokens.push({\n            type: \"HTMLIdentifier\",\n            range: argument.range,\n            loc: argument.loc,\n            value: (argument as VIdentifier).rawName,\n        })\n    }\n\n    let lastNode = (argument as VIdentifier | null) || name\n    for (const modifier of modifiers) {\n        if (modifier.rawName === \"\") {\n            continue\n        }\n\n        tokens.push(\n            {\n                type: \"Punctuator\",\n                range: [lastNode.range[1], modifier.range[0]],\n                loc: { start: lastNode.loc.end, end: modifier.loc.start },\n                value: \".\",\n            },\n            {\n                type: \"HTMLIdentifier\",\n                range: modifier.range,\n                loc: modifier.loc,\n                value: modifier.rawName,\n            },\n        )\n        lastNode = modifier\n    }\n\n    return tokens\n}\n\n/**\n * Convert `node.argument` property to a `VExpressionContainer` node if it's a dynamic argument.\n * @param text The source code text of the directive key node.\n * @param node The directive key node to convert.\n * @param document The belonging document node.\n * @param parserOptions The parser options to parse.\n * @param locationCalculator The location calculator to parse.\n */\nfunction convertDynamicArgument(\n    node: VDirectiveKey,\n    document: VDocumentFragment | null,\n    parserOptions: ParserOptions,\n    locationCalculator: LocationCalculator,\n): void {\n    const { argument } = node\n    if (\n        !(\n            argument != null &&\n            argument.type === \"VIdentifier\" &&\n            argument.name.startsWith(\"[\") &&\n            argument.name.endsWith(\"]\")\n        )\n    ) {\n        return\n    }\n\n    const { rawName, range, loc } = argument\n    try {\n        const { comments, expression, references, tokens } = parseExpression(\n            rawName.slice(1, -1),\n            locationCalculator.getSubCalculatorAfter(range[0] + 1),\n            parserOptions,\n        )\n\n        node.argument = {\n            type: \"VExpressionContainer\",\n            range,\n            loc,\n            parent: node,\n            expression,\n            references,\n        }\n\n        if (expression != null) {\n            expression.parent = node.argument\n        }\n\n        // Add tokens of `[` and `]`.\n        tokens.unshift(\n            createSimpleToken(\n                \"Punctuator\",\n                range[0],\n                range[0] + 1,\n                \"[\",\n                locationCalculator,\n            ),\n        )\n        tokens.push(\n            createSimpleToken(\n                \"Punctuator\",\n                range[1] - 1,\n                range[1],\n                \"]\",\n                locationCalculator,\n            ),\n        )\n\n        replaceTokens(document, node.argument, tokens)\n        insertComments(document, comments)\n    } catch (error) {\n        debug(\"[template] Parse error: %s\", error)\n\n        if (ParseError.isParseError(error)) {\n            node.argument = {\n                type: \"VExpressionContainer\",\n                range,\n                loc,\n                parent: node,\n                expression: null,\n                references: [],\n            }\n            insertError(document, error)\n        } else {\n            throw error\n        }\n    }\n}\n\n/**\n * Parse the given attribute name as a directive key.\n * @param node The identifier node to parse.\n * @returns The directive key node.\n */\nfunction createDirectiveKey(\n    node: VIdentifier,\n    document: VDocumentFragment | null,\n    parserOptions: ParserOptions,\n    locationCalculator: LocationCalculator,\n): VDirectiveKey {\n    // Parse node and tokens.\n    const directiveKey = parseDirectiveKeyStatically(node, document)\n    const tokens = parseDirectiveKeyTokens(directiveKey)\n    replaceTokens(document, directiveKey, tokens)\n\n    // Drop `v-` prefix.\n    if (directiveKey.name.name.startsWith(\"v-\")) {\n        directiveKey.name.name = directiveKey.name.name.slice(2)\n    }\n    if (directiveKey.name.rawName.startsWith(\"v-\")) {\n        directiveKey.name.rawName = directiveKey.name.rawName.slice(2)\n    }\n\n    // Parse dynamic argument.\n    convertDynamicArgument(\n        directiveKey,\n        document,\n        parserOptions,\n        locationCalculator,\n    )\n\n    return directiveKey\n}\n\ninterface HasRange {\n    range: [number, number]\n}\n\n/**\n * Get `x.range[0]`.\n * @param x The object to get.\n * @returns `x.range[0]`.\n */\nfunction byRange0(x: HasRange): number {\n    return x.range[0]\n}\n\n/**\n * Get `x.range[1]`.\n * @param x The object to get.\n * @returns `x.range[1]`.\n */\nfunction byRange1(x: HasRange): number {\n    return x.range[1]\n}\n\n/**\n * Get `x.pos`.\n * @param x The object to get.\n * @returns `x.pos`.\n */\nfunction byIndex(x: ParseError): number {\n    return x.index\n}\n\n/**\n * Replace the tokens in the given range.\n * @param document The document that the node is belonging to.\n * @param node The node to specify the range of replacement.\n * @param newTokens The new tokens.\n */\nfunction replaceTokens(\n    document: VDocumentFragment | null,\n    node: HasRange,\n    newTokens: Token[],\n): void {\n    if (document == null) {\n        return\n    }\n\n    const index = sortedIndexBy(document.tokens, node, byRange0)\n    const count = sortedLastIndexBy(document.tokens, node, byRange1) - index\n    document.tokens.splice(index, count, ...newTokens)\n}\n\n/**\n * Insert the given comment tokens.\n * @param document The document that the node is belonging to.\n * @param newComments The comments to insert.\n */\nfunction insertComments(\n    document: VDocumentFragment | null,\n    newComments: Token[],\n): void {\n    if (document == null || newComments.length === 0) {\n        return\n    }\n\n    const index = sortedIndexBy(document.comments, newComments[0], byRange0)\n    document.comments.splice(index, 0, ...newComments)\n}\n\n/**\n * Insert the given error.\n * @param document The document that the node is belonging to.\n * @param error The error to insert.\n */\nfunction insertError(\n    document: VDocumentFragment | null,\n    error: ParseError,\n): void {\n    if (document == null) {\n        return\n    }\n\n    const index = sortedIndexBy(document.errors, error, byIndex)\n    document.errors.splice(index, 0, error)\n}\n\n/**\n * Parse the given attribute value as an expression.\n * @param code Whole source code text.\n * @param parserOptions The parser options to parse expressions.\n * @param globalLocationCalculator The location calculator to adjust the locations of nodes.\n * @param node The attribute node to replace. This function modifies this node directly.\n * @param tagName The name of this tag.\n * @param directiveKey The key of this directive.\n */\nfunction parseAttributeValue(\n    code: string,\n    parserOptions: ParserOptions,\n    globalLocationCalculator: LocationCalculator,\n    node: VLiteral,\n    tagName: string,\n    directiveKey: VDirectiveKey,\n): ExpressionParseResult<\n    | ESLintExpression\n    | VFilterSequenceExpression\n    | VForExpression\n    | VOnExpression\n    | VSlotScopeExpression\n> {\n    const firstChar = code[node.range[0]]\n    const quoted = firstChar === '\"' || firstChar === \"'\"\n    const locationCalculator = globalLocationCalculator.getSubCalculatorAfter(\n        node.range[0] + (quoted ? 1 : 0),\n    )\n    const directiveName = directiveKey.name.name\n\n    let result: ExpressionParseResult<\n        | ESLintExpression\n        | VFilterSequenceExpression\n        | VForExpression\n        | VOnExpression\n        | VSlotScopeExpression\n    >\n    if (quoted && node.value === \"\") {\n        result = {\n            expression: null,\n            tokens: [],\n            comments: [],\n            variables: [],\n            references: [],\n        }\n    } else if (directiveName === \"for\") {\n        result = parseVForExpression(\n            node.value,\n            locationCalculator,\n            parserOptions,\n        )\n    } else if (directiveName === \"on\" && directiveKey.argument != null) {\n        result = parseVOnExpression(\n            node.value,\n            locationCalculator,\n            parserOptions,\n        )\n    } else if (\n        directiveName === \"slot\" ||\n        directiveName === \"slot-scope\" ||\n        (tagName === \"template\" && directiveName === \"scope\")\n    ) {\n        result = parseSlotScopeExpression(\n            node.value,\n            locationCalculator,\n            parserOptions,\n        )\n    } else if (directiveName === \"bind\") {\n        result = parseExpression(\n            node.value,\n            locationCalculator,\n            parserOptions,\n            { allowFilters: true },\n        )\n    } else {\n        result = parseExpression(node.value, locationCalculator, parserOptions)\n    }\n\n    // Add the tokens of quotes.\n    if (quoted) {\n        result.tokens.unshift(\n            createSimpleToken(\n                \"Punctuator\",\n                node.range[0],\n                node.range[0] + 1,\n                firstChar,\n                globalLocationCalculator,\n            ),\n        )\n        result.tokens.push(\n            createSimpleToken(\n                \"Punctuator\",\n                node.range[1] - 1,\n                node.range[1],\n                firstChar,\n                globalLocationCalculator,\n            ),\n        )\n    }\n\n    return result\n}\n\n/**\n * Resolve the variable of the given reference.\n * @param referene The reference to resolve.\n * @param element The belonging element of the reference.\n */\nfunction resolveReference(referene: Reference, element: VElement): void {\n    let node: VNode | null = element\n\n    // Find the variable of this reference.\n    while (node != null && node.type === \"VElement\") {\n        for (const variable of node.variables) {\n            if (variable.id.name === referene.id.name) {\n                referene.variable = variable\n                variable.references.push(referene)\n                return\n            }\n        }\n\n        node = node.parent\n    }\n}\n\n/**\n * Information of a mustache.\n */\nexport interface Mustache {\n    value: string\n    startToken: Token\n    endToken: Token\n}\n\n/**\n * Replace the given attribute by a directive.\n * @param code Whole source code text.\n * @param parserOptions The parser options to parse expressions.\n * @param locationCalculator The location calculator to adjust the locations of nodes.\n * @param node The attribute node to replace. This function modifies this node directly.\n */\nexport function convertToDirective(\n    code: string,\n    parserOptions: ParserOptions,\n    locationCalculator: LocationCalculator,\n    node: VAttribute,\n): void {\n    debug(\n        '[template] convert to directive: %s=\"%s\" %j',\n        node.key.name,\n        node.value && node.value.value,\n        node.range,\n    )\n\n    const document = getOwnerDocument(node)\n    const directive: VDirective = node as any\n    directive.directive = true\n    directive.key = createDirectiveKey(\n        node.key,\n        document,\n        parserOptions,\n        locationCalculator,\n    )\n\n    const { argument } = directive.key\n    if (\n        argument &&\n        argument.type === \"VIdentifier\" &&\n        argument.name.startsWith(\"[\")\n    ) {\n        const nextChar = code[argument.range[1]]\n        if (nextChar == null || invalidDynamicArgumentNextChar.test(nextChar)) {\n            const char =\n                nextChar == null ? \"EOF\" : JSON.stringify(nextChar).slice(1, -1)\n            insertError(\n                document,\n                new ParseError(\n                    `Dynamic argument cannot contain the '${char}' character.`,\n                    undefined,\n                    argument.range[1],\n                    argument.loc.end.line,\n                    argument.loc.end.column,\n                ),\n            )\n        }\n    }\n\n    if (node.value == null) {\n        return\n    }\n\n    try {\n        const ret = parseAttributeValue(\n            code,\n            parserOptions,\n            locationCalculator,\n            node.value,\n            node.parent.parent.name,\n            directive.key,\n        )\n\n        directive.value = {\n            type: \"VExpressionContainer\",\n            range: node.value.range,\n            loc: node.value.loc,\n            parent: directive,\n            expression: ret.expression,\n            references: ret.references,\n        }\n        if (ret.expression != null) {\n            ret.expression.parent = directive.value\n        }\n\n        for (const variable of ret.variables) {\n            node.parent.parent.variables.push(variable)\n        }\n\n        replaceTokens(document, node.value, ret.tokens)\n        insertComments(document, ret.comments)\n    } catch (err) {\n        debug(\"[template] Parse error: %s\", err)\n\n        if (ParseError.isParseError(err)) {\n            directive.value = {\n                type: \"VExpressionContainer\",\n                range: node.value.range,\n                loc: node.value.loc,\n                parent: directive,\n                expression: null,\n                references: [],\n            }\n            insertError(document, err)\n        } else {\n            throw err\n        }\n    }\n}\n\n/**\n * Parse the content of the given mustache.\n * @param parserOptions The parser options to parse expressions.\n * @param globalLocationCalculator The location calculator to adjust the locations of nodes.\n * @param node The expression container node. This function modifies the `expression` and `references` properties of this node.\n * @param mustache The information of mustache to parse.\n */\nexport function processMustache(\n    parserOptions: ParserOptions,\n    globalLocationCalculator: LocationCalculator,\n    node: VExpressionContainer,\n    mustache: Mustache,\n): void {\n    const range: [number, number] = [\n        mustache.startToken.range[1],\n        mustache.endToken.range[0],\n    ]\n    debug(\"[template] convert mustache {{%s}} %j\", mustache.value, range)\n\n    const document = getOwnerDocument(node)\n    try {\n        const locationCalculator = globalLocationCalculator.getSubCalculatorAfter(\n            range[0],\n        )\n        const ret = parseExpression(\n            mustache.value,\n            locationCalculator,\n            parserOptions,\n            { allowEmpty: true, allowFilters: true },\n        )\n\n        node.expression = ret.expression || null\n        node.references = ret.references\n        if (ret.expression != null) {\n            ret.expression.parent = node\n        }\n\n        replaceTokens(document, { range }, ret.tokens)\n        insertComments(document, ret.comments)\n    } catch (err) {\n        debug(\"[template] Parse error: %s\", err)\n\n        if (ParseError.isParseError(err)) {\n            insertError(document, err)\n        } else {\n            throw err\n        }\n    }\n}\n\n/**\n * Resolve all references of the given expression container.\n * @param container The expression container to resolve references.\n */\nexport function resolveReferences(container: VExpressionContainer): void {\n    let element: VNode | null = container.parent\n\n    // Get the belonging element.\n    while (element != null && element.type !== \"VElement\") {\n        element = element.parent\n    }\n\n    // Resolve.\n    if (element != null) {\n        for (const reference of container.references) {\n            resolveReference(reference, element)\n        }\n    }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nexport const SVG_ATTRIBUTE_NAME_MAP = new Map([\n    [\"attributename\", \"attributeName\"],\n    [\"attributetype\", \"attributeType\"],\n    [\"basefrequency\", \"baseFrequency\"],\n    [\"baseprofile\", \"baseProfile\"],\n    [\"calcmode\", \"calcMode\"],\n    [\"clippathunits\", \"clipPathUnits\"],\n    [\"diffuseconstant\", \"diffuseConstant\"],\n    [\"edgemode\", \"edgeMode\"],\n    [\"filterunits\", \"filterUnits\"],\n    [\"glyphref\", \"glyphRef\"],\n    [\"gradienttransform\", \"gradientTransform\"],\n    [\"gradientunits\", \"gradientUnits\"],\n    [\"kernelmatrix\", \"kernelMatrix\"],\n    [\"kernelunitlength\", \"kernelUnitLength\"],\n    [\"keypoints\", \"keyPoints\"],\n    [\"keysplines\", \"keySplines\"],\n    [\"keytimes\", \"keyTimes\"],\n    [\"lengthadjust\", \"lengthAdjust\"],\n    [\"limitingconeangle\", \"limitingConeAngle\"],\n    [\"markerheight\", \"markerHeight\"],\n    [\"markerunits\", \"markerUnits\"],\n    [\"markerwidth\", \"markerWidth\"],\n    [\"maskcontentunits\", \"maskContentUnits\"],\n    [\"maskunits\", \"maskUnits\"],\n    [\"numoctaves\", \"numOctaves\"],\n    [\"pathlength\", \"pathLength\"],\n    [\"patterncontentunits\", \"patternContentUnits\"],\n    [\"patterntransform\", \"patternTransform\"],\n    [\"patternunits\", \"patternUnits\"],\n    [\"pointsatx\", \"pointsAtX\"],\n    [\"pointsaty\", \"pointsAtY\"],\n    [\"pointsatz\", \"pointsAtZ\"],\n    [\"preservealpha\", \"preserveAlpha\"],\n    [\"preserveaspectratio\", \"preserveAspectRatio\"],\n    [\"primitiveunits\", \"primitiveUnits\"],\n    [\"refx\", \"refX\"],\n    [\"refy\", \"refY\"],\n    [\"repeatcount\", \"repeatCount\"],\n    [\"repeatdur\", \"repeatDur\"],\n    [\"requiredextensions\", \"requiredExtensions\"],\n    [\"requiredfeatures\", \"requiredFeatures\"],\n    [\"specularconstant\", \"specularConstant\"],\n    [\"specularexponent\", \"specularExponent\"],\n    [\"spreadmethod\", \"spreadMethod\"],\n    [\"startoffset\", \"startOffset\"],\n    [\"stddeviation\", \"stdDeviation\"],\n    [\"stitchtiles\", \"stitchTiles\"],\n    [\"surfacescale\", \"surfaceScale\"],\n    [\"systemlanguage\", \"systemLanguage\"],\n    [\"tablevalues\", \"tableValues\"],\n    [\"targetx\", \"targetX\"],\n    [\"targety\", \"targetY\"],\n    [\"textlength\", \"textLength\"],\n    [\"viewbox\", \"viewBox\"],\n    [\"viewtarget\", \"viewTarget\"],\n    [\"xchannelselector\", \"xChannelSelector\"],\n    [\"ychannelselector\", \"yChannelSelector\"],\n    [\"zoomandpan\", \"zoomAndPan\"],\n])\n\nexport const MATHML_ATTRIBUTE_NAME_MAP = new Map([\n    [\"definitionurl\", \"definitionUrl\"]\n])\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\n/**\n * HTML tag names.\n */\nexport const HTML_TAGS = new Set([\n    \"a\", \"abbr\", \"address\", \"area\", \"article\",\"aside\", \"audio\", \"b\", \"base\",\n    \"bdi\", \"bdo\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\",\n    \"cite\", \"code\", \"col\", \"colgroup\", \"data\", \"datalist\", \"dd\", \"del\",\n    \"details\", \"dfn\", \"dialog\", \"div\", \"dl\", \"document\", \"dt\", \"em\", \"embed\",\n    \"fieldset\", \"figcaption\", \"figure\", \"footer\", \"form\", \"h1\", \"h2\", \"h3\",\n    \"h4\", \"h5\", \"h6\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\",\n    \"img\", \"input\", \"ins\", \"kbd\", \"label\", \"legend\", \"li\", \"link\", \"main\",\n    \"map\", \"mark\", \"marquee\", \"menu\", \"meta\", \"meter\", \"nav\", \"noscript\",\n    \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\",\n    \"pre\", \"progress\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"script\",\n    \"section\", \"select\", \"slot\", \"small\", \"source\", \"span\", \"strong\", \"style\",\n    \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\",\n    \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"u\", \"ul\", \"var\",\n    \"video\", \"wbr\"\n])\n\n/**\n * HTML tag names of void elements.\n */\nexport const HTML_VOID_ELEMENT_TAGS = new Set([\n    \"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"link\", \"meta\",\n    \"param\", \"source\", \"track\", \"wbr\",\n])\n\n/**\n * https://github.com/vuejs/vue/blob/e4da249ab8ef32a0b8156c840c9d2b9773090f8a/src/platforms/web/compiler/util.js#L12\n */\nexport const HTML_CAN_BE_LEFT_OPEN_TAGS = new Set([\n    \"colgroup\", \"li\", \"options\", \"p\", \"td\", \"tfoot\", \"th\", \"thead\", \n    \"tr\", \"source\",\n])\n\n/**\n * https://github.com/vuejs/vue/blob/e4da249ab8ef32a0b8156c840c9d2b9773090f8a/src/platforms/web/compiler/util.js#L18\n */\nexport const HTML_NON_FHRASING_TAGS = new Set([\n    \"address\", \"article\", \"aside\", \"base\", \"blockquote\", \"body\", \"caption\", \n    \"col\", \"colgroup\", \"dd\", \"details\", \"dialog\", \"div\", \"dl\", \"dt\", \"fieldset\", \n    \"figcaption\", \"figure\", \"footer\", \"form\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \n    \"h6\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"legend\", \"li\", \"menuitem\", \n    \"meta\", \"optgroup\", \"option\", \"param\", \"rp\", \"rt\", \"source\", \"style\", \n    \"summary\", \"tbody\", \"td\", \"tfoot\", \"th\", \"thead\", \"title\", \"tr\", \"track\",\n])\n\n/**\n * HTML tag names of RCDATA.\n */\nexport const HTML_RCDATA_TAGS = new Set([\n    \"title\", \"textarea\",\n])\n\n/**\n * HTML tag names of RAWTEXT.\n */\nexport const HTML_RAWTEXT_TAGS = new Set([\n    \"style\", \"xmp\", \"iframe\", \"noembed\", \"noframes\", \"noscript\", \"script\",\n])\n\n/**\n * SVG tag names.\n */\nexport const SVG_TAGS = new Set([\n    \"a\", \"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animate\", \"animateColor\", \n    \"animateMotion\", \"animateTransform\", \"animation\", \"audio\", \"canvas\", \n    \"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"discard\", \n    \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \n    \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \n    \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \n    \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \n    \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \n    \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"font\", \"font-face\", \n    \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \n    \"foreignObject\", \"g\", \"glyph\", \"glyphRef\", \"handler\", \"hatch\", \"hatchpath\", \n    \"hkern\", \"iframe\", \"image\", \"line\", \"linearGradient\", \"listener\", \"marker\", \n    \"mask\", \"mesh\", \"meshgradient\", \"meshpatch\", \"meshrow\", \"metadata\", \n    \"missing-glyph\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \n    \"prefetch\", \"radialGradient\", \"rect\", \"script\", \"set\", \"solidColor\", \n    \"solidcolor\", \"stop\", \"style\", \"svg\", \"switch\", \"symbol\", \"tbreak\", \"text\", \n    \"textArea\", \"textPath\", \"title\", \"tref\", \"tspan\", \"unknown\", \"use\", \"video\", \n    \"view\", \"vkern\",\n])\n\n/**\n * The map from lowercase names to actual names in SVG.\n */\nexport const SVG_ELEMENT_NAME_MAP = new Map<string, string>()\nfor (const name of SVG_TAGS) {\n    if (/[A-Z]/.test(name)) {\n        SVG_ELEMENT_NAME_MAP.set(name.toLowerCase(), name)\n    }\n}\n\n/**\n * MathML tag names.\n */\nexport const MATHML_TAGS = new Set([\n    \"abs\", \"and\", \"annotation\", \"annotation-xml\", \"apply\", \"approx\", \"arccos\", \n    \"arccosh\", \"arccot\", \"arccoth\", \"arccsc\", \"arccsch\", \"arcsec\", \"arcsech\", \n    \"arcsin\", \"arcsinh\", \"arctan\", \"arctanh\", \"arg\", \"bind\", \"bvar\", \"card\", \n    \"cartesianproduct\", \"cbytes\", \"ceiling\", \"cerror\", \"ci\", \"cn\", \"codomain\", \n    \"complexes\", \"compose\", \"condition\", \"conjugate\", \"cos\", \"cosh\", \"cot\", \n    \"coth\", \"cs\", \"csc\", \"csch\", \"csymbol\", \"curl\", \"declare\", \"degree\", \n    \"determinant\", \"diff\", \"divergence\", \"divide\", \"domain\", \n    \"domainofapplication\", \"emptyset\", \"encoding\", \"eq\", \"equivalent\", \n    \"eulergamma\", \"exists\", \"exp\", \"exponentiale\", \"factorial\", \"factorof\", \n    \"false\", \"floor\", \"fn\", \"forall\", \"function\", \"gcd\", \"geq\", \"grad\", \"gt\", \n    \"ident\", \"image\", \"imaginary\", \"imaginaryi\", \"implies\", \"in\", \"infinity\", \n    \"int\", \"integers\", \"intersect\", \"interval\", \"inverse\", \"lambda\", \n    \"laplacian\", \"lcm\", \"leq\", \"limit\", \"list\", \"ln\", \"log\", \"logbase\", \n    \"lowlimit\", \"lt\", \"m:apply\", \"m:mrow\", \"maction\", \"malign\", \"maligngroup\", \n    \"malignmark\", \"malignscope\", \"math\", \"matrix\", \"matrixrow\", \"max\", \"mean\", \n    \"median\", \"menclose\", \"merror\", \"mfenced\", \"mfrac\", \"mfraction\", \"mglyph\", \n    \"mi\", \"mi\\\"\", \"min\", \"minus\", \"mlabeledtr\", \"mlongdiv\", \"mmultiscripts\", \n    \"mn\", \"mo\", \"mode\", \"moment\", \"momentabout\", \"mover\", \"mpadded\", \"mphantom\", \n    \"mprescripts\", \"mroot\", \"mrow\", \"ms\", \"mscarries\", \"mscarry\", \"msgroup\", \n    \"msline\", \"mspace\", \"msqrt\", \"msrow\", \"mstack\", \"mstyle\", \"msub\", \"msubsup\", \n    \"msup\", \"mtable\", \"mtd\", \"mtext\", \"mtr\", \"munder\", \"munderover\", \n    \"naturalnumbers\", \"neq\", \"none\", \"not\", \"notanumber\", \"notin\", \n    \"notprsubset\", \"notsubset\", \"or\", \"otherwise\", \"outerproduct\", \n    \"partialdiff\", \"pi\", \"piece\", \"piecewice\", \"piecewise\", \"plus\", \"power\", \n    \"primes\", \"product\", \"prsubset\", \"quotient\", \"rationals\", \"real\", \"reals\", \n    \"reln\", \"rem\", \"root\", \"scalarproduct\", \"sdev\", \"sec\", \"sech\", \"select\", \n    \"selector\", \"semantics\", \"sep\", \"set\", \"setdiff\", \"share\", \"sin\", \"sinh\", \n    \"span\", \"subset\", \"sum\", \"tan\", \"tanh\", \"tendsto\", \"times\", \"transpose\", \n    \"true\", \"union\", \"uplimit\", \"var\", \"variance\", \"vector\", \"vectorproduct\", \n    \"xor\",\n])\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport assert from \"assert\"\nimport last from \"lodash/last\"\nimport type {\n    ErrorCode,\n    HasLocation,\n    Namespace,\n    Token,\n    VAttribute,\n} from \"../ast\"\nimport { ParseError } from \"../ast\"\nimport { debug } from \"../common/debug\"\nimport type { Tokenizer, TokenizerState, TokenType } from \"./tokenizer\"\n\nconst DUMMY_PARENT: any = Object.freeze({})\n\n/**\n * Concatenate token values.\n * @param text Concatenated text.\n * @param token The token to concatenate.\n */\nfunction concat(text: string, token: Token): string {\n    return text + token.value\n}\n\n/**\n * The type of intermediate tokens.\n */\nexport type IntermediateToken = StartTag | EndTag | Text | Mustache\n\n/**\n * The type of start tags.\n */\nexport interface StartTag extends HasLocation {\n    type: \"StartTag\"\n    name: string\n    rawName: string\n    selfClosing: boolean\n    attributes: VAttribute[]\n}\n\n/**\n * The type of end tags.\n */\nexport interface EndTag extends HasLocation {\n    type: \"EndTag\"\n    name: string\n}\n\n/**\n * The type of text chunks.\n */\nexport interface Text extends HasLocation {\n    type: \"Text\"\n    value: string\n}\n\n/**\n * The type of text chunks of an expression container.\n */\nexport interface Mustache extends HasLocation {\n    type: \"Mustache\"\n    value: string\n    startToken: Token\n    endToken: Token\n}\n\n/**\n * The class to create HTML tokens from ESTree-like tokens which are created by a Tokenizer.\n */\nexport class IntermediateTokenizer {\n    private tokenizer: Tokenizer\n    private currentToken: IntermediateToken | null\n    private attribute: VAttribute | null\n    private attributeNames: Set<string>\n    private expressionStartToken: Token | null\n    private expressionTokens: Token[]\n\n    public readonly tokens: Token[]\n    public readonly comments: Token[]\n\n    /**\n     * The source code text.\n     */\n    public get text(): string {\n        return this.tokenizer.text\n    }\n\n    /**\n     * The parse errors.\n     */\n    public get errors(): ParseError[] {\n        return this.tokenizer.errors\n    }\n\n    /**\n     * The current state.\n     */\n    public get state(): TokenizerState {\n        return this.tokenizer.state\n    }\n    public set state(value: TokenizerState) {\n        this.tokenizer.state = value\n    }\n\n    /**\n     * The current namespace.\n     */\n    public get namespace(): Namespace {\n        return this.tokenizer.namespace\n    }\n    public set namespace(value: Namespace) {\n        this.tokenizer.namespace = value\n    }\n\n    /**\n     * The current flag of expression enabled.\n     */\n    public get expressionEnabled(): boolean {\n        return this.tokenizer.expressionEnabled\n    }\n    public set expressionEnabled(value: boolean) {\n        this.tokenizer.expressionEnabled = value\n    }\n\n    /**\n     * Initialize this intermediate tokenizer.\n     * @param tokenizer The tokenizer.\n     */\n    public constructor(tokenizer: Tokenizer) {\n        this.tokenizer = tokenizer\n        this.currentToken = null\n        this.attribute = null\n        this.attributeNames = new Set<string>()\n        this.expressionStartToken = null\n        this.expressionTokens = []\n        this.tokens = []\n        this.comments = []\n    }\n\n    /**\n     * Get the next intermediate token.\n     * @returns The intermediate token or null.\n     */\n    public nextToken(): IntermediateToken | null {\n        let token: Token | null = null\n        let result: IntermediateToken | null = null\n\n        while (result == null && (token = this.tokenizer.nextToken()) != null) {\n            result = this[token.type as TokenType](token)\n        }\n\n        if (result == null && token == null && this.currentToken != null) {\n            result = this.commit()\n        }\n\n        return result\n    }\n\n    /**\n     * Commit the current token.\n     */\n    private commit(): IntermediateToken {\n        assert(this.currentToken != null || this.expressionStartToken != null)\n\n        let token = this.currentToken\n        this.currentToken = null\n        this.attribute = null\n\n        if (this.expressionStartToken != null) {\n            // VExpressionEnd was not found.\n            // Concatenate the deferred tokens to the committed token.\n            const start = this.expressionStartToken\n            const end = last(this.expressionTokens) || start\n            const value = this.expressionTokens.reduce(concat, start.value)\n            this.expressionStartToken = null\n            this.expressionTokens = []\n\n            if (token == null) {\n                token = {\n                    type: \"Text\",\n                    range: [start.range[0], end.range[1]],\n                    loc: { start: start.loc.start, end: end.loc.end },\n                    value,\n                }\n            } else if (token.type === \"Text\") {\n                token.range[1] = end.range[1]\n                token.loc.end = end.loc.end\n                token.value += value\n            } else {\n                throw new Error(\"unreachable\")\n            }\n        }\n\n        return token as IntermediateToken\n    }\n\n    /**\n     * Report an invalid character error.\n     * @param code The error code.\n     */\n    private reportParseError(token: HasLocation, code: ErrorCode): void {\n        const error = ParseError.fromCode(\n            code,\n            token.range[0],\n            token.loc.start.line,\n            token.loc.start.column,\n        )\n        this.errors.push(error)\n\n        debug(\"[html] syntax error:\", error.message)\n    }\n\n    /**\n     * Process the given comment token.\n     * @param token The comment token to process.\n     */\n    private processComment(token: Token): IntermediateToken | null {\n        this.comments.push(token)\n\n        if (this.currentToken != null && this.currentToken.type === \"Text\") {\n            return this.commit()\n        }\n        return null\n    }\n\n    /**\n     * Process the given text token.\n     * @param token The text token to process.\n     */\n    private processText(token: Token): IntermediateToken | null {\n        this.tokens.push(token)\n\n        let result: IntermediateToken | null = null\n\n        if (this.expressionStartToken != null) {\n            // Defer this token until a VExpressionEnd token or a non-text token appear.\n            const lastToken =\n                last(this.expressionTokens) || this.expressionStartToken\n            if (lastToken.range[1] === token.range[0]) {\n                this.expressionTokens.push(token)\n                return null\n            }\n\n            result = this.commit()\n        } else if (this.currentToken != null) {\n            // Concatenate this token to the current text token.\n            if (\n                this.currentToken.type === \"Text\" &&\n                this.currentToken.range[1] === token.range[0]\n            ) {\n                this.currentToken.value += token.value\n                this.currentToken.range[1] = token.range[1]\n                this.currentToken.loc.end = token.loc.end\n                return null\n            }\n\n            result = this.commit()\n        }\n        assert(this.currentToken == null)\n\n        this.currentToken = {\n            type: \"Text\",\n            range: [token.range[0], token.range[1]],\n            loc: { start: token.loc.start, end: token.loc.end },\n            value: token.value,\n        }\n\n        return result\n    }\n\n    /**\n     * Process a HTMLAssociation token.\n     * @param token The token to process.\n     */\n    protected HTMLAssociation(token: Token): IntermediateToken | null {\n        this.tokens.push(token)\n\n        if (this.attribute != null) {\n            this.attribute.range[1] = token.range[1]\n            this.attribute.loc.end = token.loc.end\n\n            if (\n                this.currentToken == null ||\n                this.currentToken.type !== \"StartTag\"\n            ) {\n                throw new Error(\"unreachable\")\n            }\n            this.currentToken.range[1] = token.range[1]\n            this.currentToken.loc.end = token.loc.end\n        }\n\n        return null\n    }\n\n    /**\n     * Process a HTMLBogusComment token.\n     * @param token The token to process.\n     */\n    protected HTMLBogusComment(token: Token): IntermediateToken | null {\n        return this.processComment(token)\n    }\n\n    /**\n     * Process a HTMLCDataText token.\n     * @param token The token to process.\n     */\n    protected HTMLCDataText(token: Token): IntermediateToken | null {\n        return this.processText(token)\n    }\n\n    /**\n     * Process a HTMLComment token.\n     * @param token The token to process.\n     */\n    protected HTMLComment(token: Token): IntermediateToken | null {\n        return this.processComment(token)\n    }\n\n    /**\n     * Process a HTMLEndTagOpen token.\n     * @param token The token to process.\n     */\n    protected HTMLEndTagOpen(token: Token): IntermediateToken | null {\n        this.tokens.push(token)\n\n        let result: IntermediateToken | null = null\n\n        if (this.currentToken != null || this.expressionStartToken != null) {\n            result = this.commit()\n        }\n\n        this.currentToken = {\n            type: \"EndTag\",\n            range: [token.range[0], token.range[1]],\n            loc: { start: token.loc.start, end: token.loc.end },\n            name: token.value,\n        }\n\n        return result\n    }\n\n    /**\n     * Process a HTMLIdentifier token.\n     * @param token The token to process.\n     */\n    protected HTMLIdentifier(token: Token): IntermediateToken | null {\n        this.tokens.push(token)\n\n        if (\n            this.currentToken == null ||\n            this.currentToken.type === \"Text\" ||\n            this.currentToken.type === \"Mustache\"\n        ) {\n            throw new Error(\"unreachable\")\n        }\n        if (this.currentToken.type === \"EndTag\") {\n            this.reportParseError(token, \"end-tag-with-attributes\")\n            return null\n        }\n        if (this.attributeNames.has(token.value)) {\n            this.reportParseError(token, \"duplicate-attribute\")\n        }\n        this.attributeNames.add(token.value)\n\n        this.attribute = {\n            type: \"VAttribute\",\n            range: [token.range[0], token.range[1]],\n            loc: { start: token.loc.start, end: token.loc.end },\n            parent: DUMMY_PARENT,\n            directive: false,\n            key: {\n                type: \"VIdentifier\",\n                range: [token.range[0], token.range[1]],\n                loc: { start: token.loc.start, end: token.loc.end },\n                parent: DUMMY_PARENT,\n                name: token.value,\n                rawName: this.text.slice(token.range[0], token.range[1]),\n            },\n            value: null,\n        }\n        this.attribute.key.parent = this.attribute\n\n        this.currentToken.range[1] = token.range[1]\n        this.currentToken.loc.end = token.loc.end\n        this.currentToken.attributes.push(this.attribute)\n\n        return null\n    }\n\n    /**\n     * Process a HTMLLiteral token.\n     * @param token The token to process.\n     */\n    protected HTMLLiteral(token: Token): IntermediateToken | null {\n        this.tokens.push(token)\n\n        if (this.attribute != null) {\n            this.attribute.range[1] = token.range[1]\n            this.attribute.loc.end = token.loc.end\n            this.attribute.value = {\n                type: \"VLiteral\",\n                range: [token.range[0], token.range[1]],\n                loc: { start: token.loc.start, end: token.loc.end },\n                parent: this.attribute,\n                value: token.value,\n            }\n\n            if (\n                this.currentToken == null ||\n                this.currentToken.type !== \"StartTag\"\n            ) {\n                throw new Error(\"unreachable\")\n            }\n            this.currentToken.range[1] = token.range[1]\n            this.currentToken.loc.end = token.loc.end\n        }\n\n        return null\n    }\n\n    /**\n     * Process a HTMLRCDataText token.\n     * @param token The token to process.\n     */\n    protected HTMLRCDataText(token: Token): IntermediateToken | null {\n        return this.processText(token)\n    }\n\n    /**\n     * Process a HTMLRawText token.\n     * @param token The token to process.\n     */\n    protected HTMLRawText(token: Token): IntermediateToken | null {\n        return this.processText(token)\n    }\n\n    /**\n     * Process a HTMLSelfClosingTagClose token.\n     * @param token The token to process.\n     */\n    protected HTMLSelfClosingTagClose(token: Token): IntermediateToken | null {\n        this.tokens.push(token)\n\n        if (this.currentToken == null || this.currentToken.type === \"Text\") {\n            throw new Error(\"unreachable\")\n        }\n\n        if (this.currentToken.type === \"StartTag\") {\n            this.currentToken.selfClosing = true\n        } else {\n            this.reportParseError(token, \"end-tag-with-trailing-solidus\")\n        }\n\n        this.currentToken.range[1] = token.range[1]\n        this.currentToken.loc.end = token.loc.end\n\n        return this.commit()\n    }\n\n    /**\n     * Process a HTMLTagClose token.\n     * @param token The token to process.\n     */\n    protected HTMLTagClose(token: Token): IntermediateToken | null {\n        this.tokens.push(token)\n\n        if (this.currentToken == null || this.currentToken.type === \"Text\") {\n            throw new Error(\"unreachable\")\n        }\n\n        this.currentToken.range[1] = token.range[1]\n        this.currentToken.loc.end = token.loc.end\n\n        return this.commit()\n    }\n\n    /**\n     * Process a HTMLTagOpen token.\n     * @param token The token to process.\n     */\n    protected HTMLTagOpen(token: Token): IntermediateToken | null {\n        this.tokens.push(token)\n\n        let result: IntermediateToken | null = null\n\n        if (this.currentToken != null || this.expressionStartToken != null) {\n            result = this.commit()\n        }\n\n        this.currentToken = {\n            type: \"StartTag\",\n            range: [token.range[0], token.range[1]],\n            loc: { start: token.loc.start, end: token.loc.end },\n            name: token.value,\n            rawName: this.text.slice(token.range[0] + 1, token.range[1]),\n            selfClosing: false,\n            attributes: [],\n        }\n        this.attribute = null\n        this.attributeNames.clear()\n\n        return result\n    }\n\n    /**\n     * Process a HTMLText token.\n     * @param token The token to process.\n     */\n    protected HTMLText(token: Token): IntermediateToken | null {\n        return this.processText(token)\n    }\n\n    /**\n     * Process a HTMLWhitespace token.\n     * @param token The token to process.\n     */\n    protected HTMLWhitespace(token: Token): IntermediateToken | null {\n        return this.processText(token)\n    }\n\n    /**\n     * Process a VExpressionStart token.\n     * @param token The token to process.\n     */\n    protected VExpressionStart(token: Token): IntermediateToken | null {\n        if (this.expressionStartToken != null) {\n            return this.processText(token)\n        }\n        const separated =\n            this.currentToken != null &&\n            this.currentToken.range[1] !== token.range[0]\n        const result = separated ? this.commit() : null\n\n        this.tokens.push(token)\n        this.expressionStartToken = token\n\n        return result\n    }\n\n    /**\n     * Process a VExpressionEnd token.\n     * @param token The token to process.\n     */\n    protected VExpressionEnd(token: Token): IntermediateToken | null {\n        if (this.expressionStartToken == null) {\n            return this.processText(token)\n        }\n\n        const start = this.expressionStartToken\n        const end = last(this.expressionTokens) || start\n\n        // If it's '{{}}', it's handled as a text.\n        if (token.range[0] === start.range[1]) {\n            this.tokens.pop()\n            this.expressionStartToken = null\n            const result = this.processText(start)\n            this.processText(token)\n            return result\n        }\n\n        // If invalid notation `</>` exists directly before this token, separate it.\n        if (end.range[1] !== token.range[0]) {\n            const result = this.commit()\n            this.processText(token)\n            return result\n        }\n\n        // Clear state.\n        const value = this.expressionTokens.reduce(concat, \"\")\n        this.tokens.push(token)\n        this.expressionStartToken = null\n        this.expressionTokens = []\n\n        // Create token.\n        const result = this.currentToken != null ? this.commit() : null\n        this.currentToken = {\n            type: \"Mustache\",\n            range: [start.range[0], token.range[1]],\n            loc: { start: start.loc.start, end: token.loc.end },\n            value,\n            startToken: start,\n            endToken: token,\n        }\n\n        return result || this.commit()\n    }\n}\n","import * as path from \"path\"\n\nexport interface ParserOptions {\n    // vue-eslint-parser options\n    parser?: boolean | string\n    vueFeatures?: {\n        interpolationAsNonHTML?: boolean // default false\n        filter?: boolean // default true\n    }\n\n    // espree options\n    ecmaVersion?: number\n    sourceType?: \"script\" | \"module\"\n    ecmaFeatures?: { [key: string]: any }\n\n    // @typescript-eslint/parser options\n    jsxPragma?: string\n    jsxFragmentName?: string | null\n    lib?: string[]\n\n    project?: string | string[]\n    projectFolderIgnoreList?: string[]\n    tsconfigRootDir?: string\n    extraFileExtensions?: string[]\n    warnOnUnsupportedTypeScriptVersion?: boolean\n\n    // set by eslint\n    filePath?: string\n    // enables by eslint\n    comment?: boolean\n    loc?: boolean\n    range?: boolean\n    tokens?: boolean\n\n    // others\n    // [key: string]: any\n}\n\nexport function isSFCFile(parserOptions: ParserOptions) {\n    if (parserOptions.filePath === \"<input>\") {\n        return true\n    }\n    return path.extname(parserOptions.filePath || \"unknown.vue\") === \".vue\"\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport assert from \"assert\"\nimport last from \"lodash/last\"\nimport findLastIndex from \"lodash/findLastIndex\"\nimport type {\n    ErrorCode,\n    HasLocation,\n    Namespace,\n    Token,\n    VAttribute,\n    VDocumentFragment,\n    VElement,\n    VExpressionContainer,\n} from \"../ast\"\nimport { NS, ParseError } from \"../ast\"\nimport { debug } from \"../common/debug\"\nimport { LocationCalculator } from \"../common/location-calculator\"\nimport {\n    convertToDirective,\n    processMustache,\n    resolveReferences,\n} from \"../template\"\nimport {\n    MATHML_ATTRIBUTE_NAME_MAP,\n    SVG_ATTRIBUTE_NAME_MAP,\n} from \"./util/attribute-names\"\nimport {\n    HTML_CAN_BE_LEFT_OPEN_TAGS,\n    HTML_NON_FHRASING_TAGS,\n    HTML_RAWTEXT_TAGS,\n    HTML_RCDATA_TAGS,\n    HTML_VOID_ELEMENT_TAGS,\n    SVG_ELEMENT_NAME_MAP,\n} from \"./util/tag-names\"\nimport type {\n    IntermediateToken,\n    EndTag,\n    Mustache,\n    StartTag,\n    Text,\n} from \"./intermediate-tokenizer\"\nimport { IntermediateTokenizer } from \"./intermediate-tokenizer\"\nimport type { Tokenizer } from \"./tokenizer\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport { isSFCFile } from \"../common/parser-options\"\n\nconst DIRECTIVE_NAME = /^(?:v-|[.:@#]).*[^.:@#]$/u\nconst DT_DD = /^d[dt]$/u\nconst DUMMY_PARENT: any = Object.freeze({})\n\n/**\n * Check whether the element is a MathML text integration point or not.\n * @see https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n * @param element The current element.\n * @returns `true` if the element is a MathML text integration point.\n */\nfunction isMathMLIntegrationPoint(element: VElement): boolean {\n    if (element.namespace === NS.MathML) {\n        const name = element.name\n        return (\n            name === \"mi\" ||\n            name === \"mo\" ||\n            name === \"mn\" ||\n            name === \"ms\" ||\n            name === \"mtext\"\n        )\n    }\n    return false\n}\n\n/**\n * Check whether the element is a HTML integration point or not.\n * @see https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n * @param element The current element.\n * @returns `true` if the element is a HTML integration point.\n */\nfunction isHTMLIntegrationPoint(element: VElement): boolean {\n    if (element.namespace === NS.MathML) {\n        return (\n            element.name === \"annotation-xml\" &&\n            element.startTag.attributes.some(\n                (a) =>\n                    a.directive === false &&\n                    a.key.name === \"encoding\" &&\n                    a.value != null &&\n                    (a.value.value === \"text/html\" ||\n                        a.value.value === \"application/xhtml+xml\"),\n            )\n        )\n    }\n    if (element.namespace === NS.SVG) {\n        const name = element.name\n        return name === \"foreignObject\" || name === \"desc\" || name === \"title\"\n    }\n\n    return false\n}\n\n/**\n * Adjust element names by the current namespace.\n * @param name The lowercase element name to adjust.\n * @param namespace The current namespace.\n * @returns The adjusted element name.\n */\nfunction adjustElementName(name: string, namespace: Namespace): string {\n    if (namespace === NS.SVG) {\n        return SVG_ELEMENT_NAME_MAP.get(name) || name\n    }\n    return name\n}\n\n/**\n * Adjust attribute names by the current namespace.\n * @param name The lowercase attribute name to adjust.\n * @param namespace The current namespace.\n * @returns The adjusted attribute name.\n */\nfunction adjustAttributeName(name: string, namespace: Namespace): string {\n    if (namespace === NS.SVG) {\n        return SVG_ATTRIBUTE_NAME_MAP.get(name) || name\n    }\n    if (namespace === NS.MathML) {\n        return MATHML_ATTRIBUTE_NAME_MAP.get(name) || name\n    }\n    return name\n}\n\n/**\n * Set the location of the last child node to the end location of the given node.\n * @param node The node to commit the end location.\n */\nfunction propagateEndLocation(node: VDocumentFragment | VElement): void {\n    const lastChild =\n        (node.type === \"VElement\" ? node.endTag : null) || last(node.children)\n    if (lastChild != null) {\n        node.range[1] = lastChild.range[1]\n        node.loc.end = lastChild.loc.end\n    }\n}\n\n/**\n * The parser of HTML.\n * This is not following to the HTML spec completely because Vue.js template spec is pretty different to HTML.\n */\nexport class Parser {\n    private tokenizer: IntermediateTokenizer\n    private locationCalculator: LocationCalculator\n    private parserOptions: ParserOptions\n    private isSFC: boolean\n    private document: VDocumentFragment\n    private elementStack: VElement[]\n    private vPreElement: VElement | null\n\n    /**\n     * The source code text.\n     */\n    private get text(): string {\n        return this.tokenizer.text\n    }\n\n    /**\n     * The tokens.\n     */\n    private get tokens(): Token[] {\n        return this.tokenizer.tokens\n    }\n\n    /**\n     * The comments.\n     */\n    private get comments(): Token[] {\n        return this.tokenizer.comments\n    }\n\n    /**\n     * The syntax errors which are found in this parsing.\n     */\n    private get errors(): ParseError[] {\n        return this.tokenizer.errors\n    }\n\n    /**\n     * The current namespace.\n     */\n    private get namespace(): Namespace {\n        return this.tokenizer.namespace\n    }\n    private set namespace(value: Namespace) {\n        this.tokenizer.namespace = value\n    }\n\n    /**\n     * The current flag of expression enabled.\n     */\n    // eslint-disable-next-line @mysticatea/ts/ban-ts-ignore\n    // @ts-ignore\n    private get expressionEnabled(): boolean {\n        return this.tokenizer.expressionEnabled\n    }\n    private set expressionEnabled(value: boolean) {\n        this.tokenizer.expressionEnabled = value\n    }\n\n    /**\n     * Get the current node.\n     */\n    private get currentNode(): VDocumentFragment | VElement {\n        return last(this.elementStack) || this.document\n    }\n\n    /**\n     * Check if the current location is in a v-pre element.\n     */\n    private get isInVPreElement(): boolean {\n        return this.vPreElement != null\n    }\n\n    /**\n     * Initialize this parser.\n     * @param tokenizer The tokenizer to parse.\n     * @param parserOptions The parser options to parse inline expressions.\n     */\n    public constructor(tokenizer: Tokenizer, parserOptions: ParserOptions) {\n        this.tokenizer = new IntermediateTokenizer(tokenizer)\n        this.locationCalculator = new LocationCalculator(\n            tokenizer.gaps,\n            tokenizer.lineTerminators,\n        )\n        this.parserOptions = parserOptions\n        this.isSFC = isSFCFile(parserOptions)\n        this.document = {\n            type: \"VDocumentFragment\",\n            range: [0, 0],\n            loc: {\n                start: { line: 1, column: 0 },\n                end: { line: 1, column: 0 },\n            },\n            parent: null,\n            children: [],\n            tokens: this.tokens,\n            comments: this.comments,\n            errors: this.errors,\n        }\n        this.elementStack = []\n        this.vPreElement = null\n    }\n\n    /**\n     * Parse the HTML which was given in this constructor.\n     * @returns The result of parsing.\n     */\n    public parse(): VDocumentFragment {\n        let token: IntermediateToken | null = null\n        while ((token = this.tokenizer.nextToken()) != null) {\n            ;(this as any)[token.type](token)\n        }\n\n        this.popElementStackUntil(0)\n        propagateEndLocation(this.document)\n\n        return this.document\n    }\n\n    /**\n     * Report an invalid character error.\n     * @param code The error code.\n     */\n    private reportParseError(token: HasLocation, code: ErrorCode): void {\n        const error = ParseError.fromCode(\n            code,\n            token.range[0],\n            token.loc.start.line,\n            token.loc.start.column,\n        )\n        this.errors.push(error)\n\n        debug(\"[html] syntax error:\", error.message)\n    }\n\n    /**\n     * Pop an element from the current element stack.\n     */\n    private popElementStack(): void {\n        assert(this.elementStack.length >= 1)\n\n        const element = this.elementStack.pop()!\n        propagateEndLocation(element)\n\n        // Update the current namespace.\n        const current = this.currentNode\n        this.namespace =\n            current.type === \"VElement\" ? current.namespace : NS.HTML\n\n        // Update v-pre state.\n        if (this.vPreElement === element) {\n            this.vPreElement = null\n            this.expressionEnabled = true\n        }\n\n        // Update expression flag.\n        if (this.elementStack.length === 0) {\n            this.expressionEnabled = false\n        }\n    }\n\n    /**\n     * Pop elements from the current element stack.\n     * @param index The index of the element you want to pop.\n     */\n    private popElementStackUntil(index: number): void {\n        while (this.elementStack.length > index) {\n            this.popElementStack()\n        }\n    }\n\n    /**\n     * Detect the namespace of the new element.\n     * @param token The StartTag token to detect.\n     * @returns The namespace of the new element.\n     */\n    //eslint-disable-next-line complexity\n    private detectNamespace(token: StartTag): Namespace {\n        const name = token.name\n        let ns = this.namespace\n\n        if (ns === NS.MathML || ns === NS.SVG) {\n            const element = this.currentNode\n            if (element.type === \"VElement\") {\n                if (\n                    element.namespace === NS.MathML &&\n                    element.name === \"annotation-xml\" &&\n                    name === \"svg\"\n                ) {\n                    return NS.SVG\n                }\n                if (\n                    isHTMLIntegrationPoint(element) ||\n                    (isMathMLIntegrationPoint(element) &&\n                        name !== \"mglyph\" &&\n                        name !== \"malignmark\")\n                ) {\n                    ns = NS.HTML\n                }\n            }\n        }\n\n        if (ns === NS.HTML) {\n            if (name === \"svg\") {\n                return NS.SVG\n            }\n            if (name === \"math\") {\n                return NS.MathML\n            }\n        }\n\n        if (name === \"template\") {\n            const xmlns = token.attributes.find((a) => a.key.name === \"xmlns\")\n            const value = xmlns && xmlns.value && xmlns.value.value\n\n            if (value === NS.HTML || value === NS.MathML || value === NS.SVG) {\n                return value\n            }\n        }\n\n        return ns\n    }\n\n    /**\n     * Close the current element if necessary.\n     * @param name The tag name to check.\n     */\n    private closeCurrentElementIfNecessary(name: string): void {\n        const element = this.currentNode\n        if (element.type !== \"VElement\") {\n            return\n        }\n\n        if (element.name === \"p\" && HTML_NON_FHRASING_TAGS.has(name)) {\n            this.popElementStack()\n        }\n        if (element.name === name && HTML_CAN_BE_LEFT_OPEN_TAGS.has(name)) {\n            this.popElementStack()\n        }\n        if (DT_DD.test(element.name) && DT_DD.test(name)) {\n            this.popElementStack()\n        }\n    }\n\n    /**\n     * Adjust and validate the given attribute node.\n     * @param node The attribute node to handle.\n     * @param namespace The current namespace.\n     */\n    private processAttribute(node: VAttribute, namespace: Namespace): void {\n        const tagName = node.parent.parent.name\n        const attrName = node.key.name\n\n        if (\n            (this.expressionEnabled ||\n                (attrName === \"v-pre\" && !this.isInVPreElement)) &&\n            (DIRECTIVE_NAME.test(attrName) ||\n                attrName === \"slot-scope\" ||\n                (tagName === \"template\" && attrName === \"scope\"))\n        ) {\n            convertToDirective(\n                this.text,\n                this.parserOptions,\n                this.locationCalculator,\n                node,\n            )\n            return\n        }\n\n        const key = (node.key.name = adjustAttributeName(\n            node.key.name,\n            namespace,\n        ))\n        const value = node.value && node.value.value\n\n        if (key === \"xmlns\" && value !== namespace) {\n            this.reportParseError(node, \"x-invalid-namespace\")\n        } else if (key === \"xmlns:xlink\" && value !== NS.XLink) {\n            this.reportParseError(node, \"x-invalid-namespace\")\n        }\n    }\n\n    /**\n     * Handle the start tag token.\n     * @param token The token to handle.\n     */\n    //eslint-disable-next-line complexity\n    protected StartTag(token: StartTag): void {\n        debug(\"[html] StartTag %j\", token)\n\n        this.closeCurrentElementIfNecessary(token.name)\n\n        const parent = this.currentNode\n        const namespace = this.detectNamespace(token)\n        const element: VElement = {\n            type: \"VElement\",\n            range: [token.range[0], token.range[1]],\n            loc: { start: token.loc.start, end: token.loc.end },\n            parent,\n            name: adjustElementName(token.name, namespace),\n            rawName: token.rawName,\n            namespace,\n            startTag: {\n                type: \"VStartTag\",\n                range: token.range,\n                loc: token.loc,\n                parent: DUMMY_PARENT,\n                selfClosing: token.selfClosing,\n                attributes: token.attributes,\n            },\n            children: [],\n            endTag: null,\n            variables: [],\n        }\n        const hasVPre =\n            !this.isInVPreElement &&\n            token.attributes.some((a) => a.key.name === \"v-pre\")\n\n        // Disable expression if v-pre\n        if (hasVPre) {\n            this.expressionEnabled = false\n        }\n\n        // Setup relations.\n        parent.children.push(element)\n        element.startTag.parent = element\n        for (const attribute of token.attributes) {\n            attribute.parent = element.startTag\n            this.processAttribute(attribute, namespace)\n        }\n\n        // Resolve references.\n        for (const attribute of element.startTag.attributes) {\n            if (attribute.directive) {\n                if (\n                    attribute.key.argument != null &&\n                    attribute.key.argument.type === \"VExpressionContainer\"\n                ) {\n                    resolveReferences(attribute.key.argument)\n                }\n                if (attribute.value != null) {\n                    resolveReferences(attribute.value)\n                }\n            }\n        }\n\n        // Check whether the self-closing is valid.\n        const isVoid =\n            namespace === NS.HTML && HTML_VOID_ELEMENT_TAGS.has(element.name)\n        if (token.selfClosing && !isVoid && namespace === NS.HTML) {\n            this.reportParseError(\n                token,\n                \"non-void-html-element-start-tag-with-trailing-solidus\",\n            )\n        }\n\n        // Vue.js supports self-closing elements even if it's not one of void elements.\n        if (token.selfClosing || isVoid) {\n            this.expressionEnabled = !this.isInVPreElement\n            return\n        }\n\n        // Push to stack.\n        this.elementStack.push(element)\n        if (hasVPre) {\n            assert(this.vPreElement === null)\n            this.vPreElement = element\n        }\n        this.namespace = namespace\n\n        // Update the content type of this element.\n        if (namespace === NS.HTML) {\n            if (element.parent.type === \"VDocumentFragment\") {\n                const langAttr = element.startTag.attributes.find(\n                    (a) => !a.directive && a.key.name === \"lang\",\n                ) as VAttribute | undefined\n                const lang = langAttr?.value?.value\n\n                if (element.name === \"template\") {\n                    if (lang && lang !== \"html\") {\n                        // It is not an HTML template.\n                        this.tokenizer.state = \"RAWTEXT\"\n                    }\n                    this.expressionEnabled = true\n                } else if (this.isSFC) {\n                    // Element is Custom Block. e.g. <i18n>\n                    // Referred to the Vue parser. See https://github.com/vuejs/vue-next/blob/cbaa3805064cb581fc2007cf63774c91d39844fe/packages/compiler-sfc/src/parse.ts#L127\n                    if (!lang || lang !== \"html\") {\n                        // Custom Block is not HTML.\n                        this.tokenizer.state = \"RAWTEXT\"\n                    }\n                } else {\n                    if (HTML_RCDATA_TAGS.has(element.name)) {\n                        this.tokenizer.state = \"RCDATA\"\n                    }\n                    if (HTML_RAWTEXT_TAGS.has(element.name)) {\n                        this.tokenizer.state = \"RAWTEXT\"\n                    }\n                }\n            } else {\n                if (HTML_RCDATA_TAGS.has(element.name)) {\n                    this.tokenizer.state = \"RCDATA\"\n                }\n                if (HTML_RAWTEXT_TAGS.has(element.name)) {\n                    this.tokenizer.state = \"RAWTEXT\"\n                }\n            }\n        }\n    }\n\n    /**\n     * Handle the end tag token.\n     * @param token The token to handle.\n     */\n    protected EndTag(token: EndTag): void {\n        debug(\"[html] EndTag %j\", token)\n\n        const i = findLastIndex(\n            this.elementStack,\n            (el) => el.name.toLowerCase() === token.name,\n        )\n        if (i === -1) {\n            this.reportParseError(token, \"x-invalid-end-tag\")\n            return\n        }\n\n        const element = this.elementStack[i]\n        element.endTag = {\n            type: \"VEndTag\",\n            range: token.range,\n            loc: token.loc,\n            parent: element,\n        }\n\n        this.popElementStackUntil(i)\n    }\n\n    /**\n     * Handle the text token.\n     * @param token The token to handle.\n     */\n    protected Text(token: Text): void {\n        debug(\"[html] Text %j\", token)\n\n        const parent = this.currentNode\n        parent.children.push({\n            type: \"VText\",\n            range: token.range,\n            loc: token.loc,\n            parent,\n            value: token.value,\n        })\n    }\n\n    /**\n     * Handle the text token.\n     * @param token The token to handle.\n     */\n    protected Mustache(token: Mustache): void {\n        debug(\"[html] Mustache %j\", token)\n\n        const parent = this.currentNode\n        const container: VExpressionContainer = {\n            type: \"VExpressionContainer\",\n            range: token.range,\n            loc: token.loc,\n            parent,\n            expression: null,\n            references: [],\n        }\n        processMustache(\n            this.parserOptions,\n            this.locationCalculator,\n            container,\n            token,\n        )\n\n        // Set relationship.\n        parent.children.push(container)\n\n        // Resolve references.\n        resolveReferences(container)\n    }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\n/**\n * Code mapping of HTML numeric entities.\n */\nexport const alternativeCR = new Map(\n    [[128, 8364], [130, 8218], [131, 402], [132, 8222], [133, 8230], [134, 8224], [135, 8225], [136, 710], [137, 8240], [138, 352], [139, 8249], [140, 338], [142, 381], [145, 8216], [146, 8217], [147, 8220], [148, 8221], [149, 8226], [150, 8211], [151, 8212], [152, 732], [153, 8482], [154, 353], [155, 8250], [156, 339], [158, 382], [159, 376]]\n)\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\n/**\n * HTML entities which are separated by their length.\n */\nexport const entitySets: {\n    length: number,\n    entities: {\n        [name: string]: number[] | undefined\n    }\n}[] = [{\"length\":32,\"entities\":{\"CounterClockwiseContourIntegral;\":[8755]}},{\"length\":25,\"entities\":{\"ClockwiseContourIntegral;\":[8754],\"DoubleLongLeftRightArrow;\":[10234]}},{\"length\":24,\"entities\":{\"NotNestedGreaterGreater;\":[10914,824]}},{\"length\":23,\"entities\":{\"DiacriticalDoubleAcute;\":[733],\"NotSquareSupersetEqual;\":[8931]}},{\"length\":22,\"entities\":{\"CloseCurlyDoubleQuote;\":[8221],\"DoubleContourIntegral;\":[8751],\"FilledVerySmallSquare;\":[9642],\"NegativeVeryThinSpace;\":[8203],\"NotPrecedesSlantEqual;\":[8928],\"NotRightTriangleEqual;\":[8941],\"NotSucceedsSlantEqual;\":[8929]}},{\"length\":21,\"entities\":{\"CapitalDifferentialD;\":[8517],\"DoubleLeftRightArrow;\":[8660],\"DoubleLongRightArrow;\":[10233],\"EmptyVerySmallSquare;\":[9643],\"NestedGreaterGreater;\":[8811],\"NotDoubleVerticalBar;\":[8742],\"NotGreaterSlantEqual;\":[10878,824],\"NotLeftTriangleEqual;\":[8940],\"NotSquareSubsetEqual;\":[8930],\"OpenCurlyDoubleQuote;\":[8220],\"ReverseUpEquilibrium;\":[10607]}},{\"length\":20,\"entities\":{\"DoubleLongLeftArrow;\":[10232],\"DownLeftRightVector;\":[10576],\"LeftArrowRightArrow;\":[8646],\"NegativeMediumSpace;\":[8203],\"NotGreaterFullEqual;\":[8807,824],\"NotRightTriangleBar;\":[10704,824],\"RightArrowLeftArrow;\":[8644],\"SquareSupersetEqual;\":[8850],\"leftrightsquigarrow;\":[8621]}},{\"length\":19,\"entities\":{\"DownRightTeeVector;\":[10591],\"DownRightVectorBar;\":[10583],\"LongLeftRightArrow;\":[10231],\"Longleftrightarrow;\":[10234],\"NegativeThickSpace;\":[8203],\"NotLeftTriangleBar;\":[10703,824],\"PrecedesSlantEqual;\":[8828],\"ReverseEquilibrium;\":[8651],\"RightDoubleBracket;\":[10215],\"RightDownTeeVector;\":[10589],\"RightDownVectorBar;\":[10581],\"RightTriangleEqual;\":[8885],\"SquareIntersection;\":[8851],\"SucceedsSlantEqual;\":[8829],\"blacktriangleright;\":[9656],\"longleftrightarrow;\":[10231]}},{\"length\":18,\"entities\":{\"DoubleUpDownArrow;\":[8661],\"DoubleVerticalBar;\":[8741],\"DownLeftTeeVector;\":[10590],\"DownLeftVectorBar;\":[10582],\"FilledSmallSquare;\":[9724],\"GreaterSlantEqual;\":[10878],\"LeftDoubleBracket;\":[10214],\"LeftDownTeeVector;\":[10593],\"LeftDownVectorBar;\":[10585],\"LeftTriangleEqual;\":[8884],\"NegativeThinSpace;\":[8203],\"NotGreaterGreater;\":[8811,824],\"NotLessSlantEqual;\":[10877,824],\"NotNestedLessLess;\":[10913,824],\"NotReverseElement;\":[8716],\"NotSquareSuperset;\":[8848,824],\"NotTildeFullEqual;\":[8775],\"RightAngleBracket;\":[10217],\"RightUpDownVector;\":[10575],\"SquareSubsetEqual;\":[8849],\"VerticalSeparator;\":[10072],\"blacktriangledown;\":[9662],\"blacktriangleleft;\":[9666],\"leftrightharpoons;\":[8651],\"rightleftharpoons;\":[8652],\"twoheadrightarrow;\":[8608]}},{\"length\":17,\"entities\":{\"DiacriticalAcute;\":[180],\"DiacriticalGrave;\":[96],\"DiacriticalTilde;\":[732],\"DoubleRightArrow;\":[8658],\"DownArrowUpArrow;\":[8693],\"EmptySmallSquare;\":[9723],\"GreaterEqualLess;\":[8923],\"GreaterFullEqual;\":[8807],\"LeftAngleBracket;\":[10216],\"LeftUpDownVector;\":[10577],\"LessEqualGreater;\":[8922],\"NonBreakingSpace;\":[160],\"NotPrecedesEqual;\":[10927,824],\"NotRightTriangle;\":[8939],\"NotSucceedsEqual;\":[10928,824],\"NotSucceedsTilde;\":[8831,824],\"NotSupersetEqual;\":[8841],\"RightTriangleBar;\":[10704],\"RightUpTeeVector;\":[10588],\"RightUpVectorBar;\":[10580],\"UnderParenthesis;\":[9181],\"UpArrowDownArrow;\":[8645],\"circlearrowright;\":[8635],\"downharpoonright;\":[8642],\"ntrianglerighteq;\":[8941],\"rightharpoondown;\":[8641],\"rightrightarrows;\":[8649],\"twoheadleftarrow;\":[8606],\"vartriangleright;\":[8883]}},{\"length\":16,\"entities\":{\"CloseCurlyQuote;\":[8217],\"ContourIntegral;\":[8750],\"DoubleDownArrow;\":[8659],\"DoubleLeftArrow;\":[8656],\"DownRightVector;\":[8641],\"LeftRightVector;\":[10574],\"LeftTriangleBar;\":[10703],\"LeftUpTeeVector;\":[10592],\"LeftUpVectorBar;\":[10584],\"LowerRightArrow;\":[8600],\"NotGreaterEqual;\":[8817],\"NotGreaterTilde;\":[8821],\"NotHumpDownHump;\":[8782,824],\"NotLeftTriangle;\":[8938],\"NotSquareSubset;\":[8847,824],\"OverParenthesis;\":[9180],\"RightDownVector;\":[8642],\"ShortRightArrow;\":[8594],\"UpperRightArrow;\":[8599],\"bigtriangledown;\":[9661],\"circlearrowleft;\":[8634],\"curvearrowright;\":[8631],\"downharpoonleft;\":[8643],\"leftharpoondown;\":[8637],\"leftrightarrows;\":[8646],\"nLeftrightarrow;\":[8654],\"nleftrightarrow;\":[8622],\"ntrianglelefteq;\":[8940],\"rightleftarrows;\":[8644],\"rightsquigarrow;\":[8605],\"rightthreetimes;\":[8908],\"straightepsilon;\":[1013],\"trianglerighteq;\":[8885],\"vartriangleleft;\":[8882]}},{\"length\":15,\"entities\":{\"DiacriticalDot;\":[729],\"DoubleRightTee;\":[8872],\"DownLeftVector;\":[8637],\"GreaterGreater;\":[10914],\"HorizontalLine;\":[9472],\"InvisibleComma;\":[8291],\"InvisibleTimes;\":[8290],\"LeftDownVector;\":[8643],\"LeftRightArrow;\":[8596],\"Leftrightarrow;\":[8660],\"LessSlantEqual;\":[10877],\"LongRightArrow;\":[10230],\"Longrightarrow;\":[10233],\"LowerLeftArrow;\":[8601],\"NestedLessLess;\":[8810],\"NotGreaterLess;\":[8825],\"NotLessGreater;\":[8824],\"NotSubsetEqual;\":[8840],\"NotVerticalBar;\":[8740],\"OpenCurlyQuote;\":[8216],\"ReverseElement;\":[8715],\"RightTeeVector;\":[10587],\"RightVectorBar;\":[10579],\"ShortDownArrow;\":[8595],\"ShortLeftArrow;\":[8592],\"SquareSuperset;\":[8848],\"TildeFullEqual;\":[8773],\"UpperLeftArrow;\":[8598],\"ZeroWidthSpace;\":[8203],\"curvearrowleft;\":[8630],\"doublebarwedge;\":[8966],\"downdownarrows;\":[8650],\"hookrightarrow;\":[8618],\"leftleftarrows;\":[8647],\"leftrightarrow;\":[8596],\"leftthreetimes;\":[8907],\"longrightarrow;\":[10230],\"looparrowright;\":[8620],\"nshortparallel;\":[8742],\"ntriangleright;\":[8939],\"rightarrowtail;\":[8611],\"rightharpoonup;\":[8640],\"trianglelefteq;\":[8884],\"upharpoonright;\":[8638]}},{\"length\":14,\"entities\":{\"ApplyFunction;\":[8289],\"DifferentialD;\":[8518],\"DoubleLeftTee;\":[10980],\"DoubleUpArrow;\":[8657],\"LeftTeeVector;\":[10586],\"LeftVectorBar;\":[10578],\"LessFullEqual;\":[8806],\"LongLeftArrow;\":[10229],\"Longleftarrow;\":[10232],\"NotEqualTilde;\":[8770,824],\"NotTildeEqual;\":[8772],\"NotTildeTilde;\":[8777],\"Poincareplane;\":[8460],\"PrecedesEqual;\":[10927],\"PrecedesTilde;\":[8830],\"RightArrowBar;\":[8677],\"RightTeeArrow;\":[8614],\"RightTriangle;\":[8883],\"RightUpVector;\":[8638],\"SucceedsEqual;\":[10928],\"SucceedsTilde;\":[8831],\"SupersetEqual;\":[8839],\"UpEquilibrium;\":[10606],\"VerticalTilde;\":[8768],\"VeryThinSpace;\":[8202],\"bigtriangleup;\":[9651],\"blacktriangle;\":[9652],\"divideontimes;\":[8903],\"fallingdotseq;\":[8786],\"hookleftarrow;\":[8617],\"leftarrowtail;\":[8610],\"leftharpoonup;\":[8636],\"longleftarrow;\":[10229],\"looparrowleft;\":[8619],\"measuredangle;\":[8737],\"ntriangleleft;\":[8938],\"shortparallel;\":[8741],\"smallsetminus;\":[8726],\"triangleright;\":[9657],\"upharpoonleft;\":[8639],\"varsubsetneqq;\":[10955,65024],\"varsupsetneqq;\":[10956,65024]}},{\"length\":13,\"entities\":{\"DownArrowBar;\":[10515],\"DownTeeArrow;\":[8615],\"ExponentialE;\":[8519],\"GreaterEqual;\":[8805],\"GreaterTilde;\":[8819],\"HilbertSpace;\":[8459],\"HumpDownHump;\":[8782],\"Intersection;\":[8898],\"LeftArrowBar;\":[8676],\"LeftTeeArrow;\":[8612],\"LeftTriangle;\":[8882],\"LeftUpVector;\":[8639],\"NotCongruent;\":[8802],\"NotHumpEqual;\":[8783,824],\"NotLessEqual;\":[8816],\"NotLessTilde;\":[8820],\"Proportional;\":[8733],\"RightCeiling;\":[8969],\"RoundImplies;\":[10608],\"ShortUpArrow;\":[8593],\"SquareSubset;\":[8847],\"UnderBracket;\":[9141],\"VerticalLine;\":[124],\"blacklozenge;\":[10731],\"exponentiale;\":[8519],\"risingdotseq;\":[8787],\"triangledown;\":[9663],\"triangleleft;\":[9667],\"varsubsetneq;\":[8842,65024],\"varsupsetneq;\":[8843,65024]}},{\"length\":12,\"entities\":{\"CircleMinus;\":[8854],\"CircleTimes;\":[8855],\"Equilibrium;\":[8652],\"GreaterLess;\":[8823],\"LeftCeiling;\":[8968],\"LessGreater;\":[8822],\"MediumSpace;\":[8287],\"NotLessLess;\":[8810,824],\"NotPrecedes;\":[8832],\"NotSucceeds;\":[8833],\"NotSuperset;\":[8835,8402],\"OverBracket;\":[9140],\"RightVector;\":[8640],\"Rrightarrow;\":[8667],\"RuleDelayed;\":[10740],\"SmallCircle;\":[8728],\"SquareUnion;\":[8852],\"SubsetEqual;\":[8838],\"UpDownArrow;\":[8597],\"Updownarrow;\":[8661],\"VerticalBar;\":[8739],\"backepsilon;\":[1014],\"blacksquare;\":[9642],\"circledcirc;\":[8858],\"circleddash;\":[8861],\"curlyeqprec;\":[8926],\"curlyeqsucc;\":[8927],\"diamondsuit;\":[9830],\"eqslantless;\":[10901],\"expectation;\":[8496],\"nRightarrow;\":[8655],\"nrightarrow;\":[8603],\"preccurlyeq;\":[8828],\"precnapprox;\":[10937],\"quaternions;\":[8461],\"straightphi;\":[981],\"succcurlyeq;\":[8829],\"succnapprox;\":[10938],\"thickapprox;\":[8776],\"updownarrow;\":[8597]}},{\"length\":11,\"entities\":{\"Bernoullis;\":[8492],\"CirclePlus;\":[8853],\"EqualTilde;\":[8770],\"Fouriertrf;\":[8497],\"ImaginaryI;\":[8520],\"Laplacetrf;\":[8466],\"LeftVector;\":[8636],\"Lleftarrow;\":[8666],\"NotElement;\":[8713],\"NotGreater;\":[8815],\"Proportion;\":[8759],\"RightArrow;\":[8594],\"RightFloor;\":[8971],\"Rightarrow;\":[8658],\"ThickSpace;\":[8287,8202],\"TildeEqual;\":[8771],\"TildeTilde;\":[8776],\"UnderBrace;\":[9183],\"UpArrowBar;\":[10514],\"UpTeeArrow;\":[8613],\"circledast;\":[8859],\"complement;\":[8705],\"curlywedge;\":[8911],\"eqslantgtr;\":[10902],\"gtreqqless;\":[10892],\"lessapprox;\":[10885],\"lesseqqgtr;\":[10891],\"lmoustache;\":[9136],\"longmapsto;\":[10236],\"mapstodown;\":[8615],\"mapstoleft;\":[8612],\"nLeftarrow;\":[8653],\"nleftarrow;\":[8602],\"nsubseteqq;\":[10949,824],\"nsupseteqq;\":[10950,824],\"precapprox;\":[10935],\"rightarrow;\":[8594],\"rmoustache;\":[9137],\"sqsubseteq;\":[8849],\"sqsupseteq;\":[8850],\"subsetneqq;\":[10955],\"succapprox;\":[10936],\"supsetneqq;\":[10956],\"upuparrows;\":[8648],\"varepsilon;\":[1013],\"varnothing;\":[8709]}},{\"length\":10,\"entities\":{\"Backslash;\":[8726],\"CenterDot;\":[183],\"CircleDot;\":[8857],\"Congruent;\":[8801],\"Coproduct;\":[8720],\"DoubleDot;\":[168],\"DownArrow;\":[8595],\"DownBreve;\":[785],\"Downarrow;\":[8659],\"HumpEqual;\":[8783],\"LeftArrow;\":[8592],\"LeftFloor;\":[8970],\"Leftarrow;\":[8656],\"LessTilde;\":[8818],\"Mellintrf;\":[8499],\"MinusPlus;\":[8723],\"NotCupCap;\":[8813],\"NotExists;\":[8708],\"NotSubset;\":[8834,8402],\"OverBrace;\":[9182],\"PlusMinus;\":[177],\"Therefore;\":[8756],\"ThinSpace;\":[8201],\"TripleDot;\":[8411],\"UnionPlus;\":[8846],\"backprime;\":[8245],\"backsimeq;\":[8909],\"bigotimes;\":[10754],\"centerdot;\":[183],\"checkmark;\":[10003],\"complexes;\":[8450],\"dotsquare;\":[8865],\"downarrow;\":[8595],\"gtrapprox;\":[10886],\"gtreqless;\":[8923],\"gvertneqq;\":[8809,65024],\"heartsuit;\":[9829],\"leftarrow;\":[8592],\"lesseqgtr;\":[8922],\"lvertneqq;\":[8808,65024],\"ngeqslant;\":[10878,824],\"nleqslant;\":[10877,824],\"nparallel;\":[8742],\"nshortmid;\":[8740],\"nsubseteq;\":[8840],\"nsupseteq;\":[8841],\"pitchfork;\":[8916],\"rationals;\":[8474],\"spadesuit;\":[9824],\"subseteqq;\":[10949],\"subsetneq;\":[8842],\"supseteqq;\":[10950],\"supsetneq;\":[8843],\"therefore;\":[8756],\"triangleq;\":[8796],\"varpropto;\":[8733]}},{\"length\":9,\"entities\":{\"DDotrahd;\":[10513],\"DotEqual;\":[8784],\"Integral;\":[8747],\"LessLess;\":[10913],\"NotEqual;\":[8800],\"NotTilde;\":[8769],\"PartialD;\":[8706],\"Precedes;\":[8826],\"RightTee;\":[8866],\"Succeeds;\":[8827],\"SuchThat;\":[8715],\"Superset;\":[8835],\"Uarrocir;\":[10569],\"UnderBar;\":[95],\"andslope;\":[10840],\"angmsdaa;\":[10664],\"angmsdab;\":[10665],\"angmsdac;\":[10666],\"angmsdad;\":[10667],\"angmsdae;\":[10668],\"angmsdaf;\":[10669],\"angmsdag;\":[10670],\"angmsdah;\":[10671],\"angrtvbd;\":[10653],\"approxeq;\":[8778],\"awconint;\":[8755],\"backcong;\":[8780],\"barwedge;\":[8965],\"bbrktbrk;\":[9142],\"bigoplus;\":[10753],\"bigsqcup;\":[10758],\"biguplus;\":[10756],\"bigwedge;\":[8896],\"boxminus;\":[8863],\"boxtimes;\":[8864],\"bsolhsub;\":[10184],\"capbrcup;\":[10825],\"circledR;\":[174],\"circledS;\":[9416],\"cirfnint;\":[10768],\"clubsuit;\":[9827],\"cupbrcap;\":[10824],\"curlyvee;\":[8910],\"cwconint;\":[8754],\"doteqdot;\":[8785],\"dotminus;\":[8760],\"drbkarow;\":[10512],\"dzigrarr;\":[10239],\"elinters;\":[9191],\"emptyset;\":[8709],\"eqvparsl;\":[10725],\"fpartint;\":[10765],\"geqslant;\":[10878],\"gesdotol;\":[10884],\"gnapprox;\":[10890],\"hksearow;\":[10533],\"hkswarow;\":[10534],\"imagline;\":[8464],\"imagpart;\":[8465],\"infintie;\":[10717],\"integers;\":[8484],\"intercal;\":[8890],\"intlarhk;\":[10775],\"laemptyv;\":[10676],\"ldrushar;\":[10571],\"leqslant;\":[10877],\"lesdotor;\":[10883],\"llcorner;\":[8990],\"lnapprox;\":[10889],\"lrcorner;\":[8991],\"lurdshar;\":[10570],\"mapstoup;\":[8613],\"multimap;\":[8888],\"naturals;\":[8469],\"ncongdot;\":[10861,824],\"notindot;\":[8949,824],\"otimesas;\":[10806],\"parallel;\":[8741],\"plusacir;\":[10787],\"pointint;\":[10773],\"precneqq;\":[10933],\"precnsim;\":[8936],\"profalar;\":[9006],\"profline;\":[8978],\"profsurf;\":[8979],\"raemptyv;\":[10675],\"realpart;\":[8476],\"rppolint;\":[10770],\"rtriltri;\":[10702],\"scpolint;\":[10771],\"setminus;\":[8726],\"shortmid;\":[8739],\"smeparsl;\":[10724],\"sqsubset;\":[8847],\"sqsupset;\":[8848],\"subseteq;\":[8838],\"succneqq;\":[10934],\"succnsim;\":[8937],\"supseteq;\":[8839],\"thetasym;\":[977],\"thicksim;\":[8764],\"timesbar;\":[10801],\"triangle;\":[9653],\"triminus;\":[10810],\"trpezium;\":[9186],\"ulcorner;\":[8988],\"urcorner;\":[8989],\"varkappa;\":[1008],\"varsigma;\":[962],\"vartheta;\":[977]}},{\"length\":8,\"entities\":{\"Because;\":[8757],\"Cayleys;\":[8493],\"Cconint;\":[8752],\"Cedilla;\":[184],\"Diamond;\":[8900],\"DownTee;\":[8868],\"Element;\":[8712],\"Epsilon;\":[917],\"Implies;\":[8658],\"LeftTee;\":[8867],\"NewLine;\":[10],\"NoBreak;\":[8288],\"NotLess;\":[8814],\"Omicron;\":[927],\"OverBar;\":[8254],\"Product;\":[8719],\"UpArrow;\":[8593],\"Uparrow;\":[8657],\"Upsilon;\":[933],\"alefsym;\":[8501],\"angrtvb;\":[8894],\"angzarr;\":[9084],\"asympeq;\":[8781],\"backsim;\":[8765],\"because;\":[8757],\"bemptyv;\":[10672],\"between;\":[8812],\"bigcirc;\":[9711],\"bigodot;\":[10752],\"bigstar;\":[9733],\"bnequiv;\":[8801,8421],\"boxplus;\":[8862],\"ccupssm;\":[10832],\"cemptyv;\":[10674],\"cirscir;\":[10690],\"coloneq;\":[8788],\"congdot;\":[10861],\"cudarrl;\":[10552],\"cudarrr;\":[10549],\"cularrp;\":[10557],\"curarrm;\":[10556],\"dbkarow;\":[10511],\"ddagger;\":[8225],\"ddotseq;\":[10871],\"demptyv;\":[10673],\"diamond;\":[8900],\"digamma;\":[989],\"dotplus;\":[8724],\"dwangle;\":[10662],\"epsilon;\":[949],\"eqcolon;\":[8789],\"equivDD;\":[10872],\"gesdoto;\":[10882],\"gtquest;\":[10876],\"gtrless;\":[8823],\"harrcir;\":[10568],\"intprod;\":[10812],\"isindot;\":[8949],\"larrbfs;\":[10527],\"larrsim;\":[10611],\"lbrksld;\":[10639],\"lbrkslu;\":[10637],\"ldrdhar;\":[10599],\"lesdoto;\":[10881],\"lessdot;\":[8918],\"lessgtr;\":[8822],\"lesssim;\":[8818],\"lotimes;\":[10804],\"lozenge;\":[9674],\"ltquest;\":[10875],\"luruhar;\":[10598],\"maltese;\":[10016],\"minusdu;\":[10794],\"napprox;\":[8777],\"natural;\":[9838],\"nearrow;\":[8599],\"nexists;\":[8708],\"notinva;\":[8713],\"notinvb;\":[8951],\"notinvc;\":[8950],\"notniva;\":[8716],\"notnivb;\":[8958],\"notnivc;\":[8957],\"npolint;\":[10772],\"npreceq;\":[10927,824],\"nsqsube;\":[8930],\"nsqsupe;\":[8931],\"nsubset;\":[8834,8402],\"nsucceq;\":[10928,824],\"nsupset;\":[8835,8402],\"nvinfin;\":[10718],\"nvltrie;\":[8884,8402],\"nvrtrie;\":[8885,8402],\"nwarrow;\":[8598],\"olcross;\":[10683],\"omicron;\":[959],\"orderof;\":[8500],\"orslope;\":[10839],\"pertenk;\":[8241],\"planckh;\":[8462],\"pluscir;\":[10786],\"plussim;\":[10790],\"plustwo;\":[10791],\"precsim;\":[8830],\"quatint;\":[10774],\"questeq;\":[8799],\"rarrbfs;\":[10528],\"rarrsim;\":[10612],\"rbrksld;\":[10638],\"rbrkslu;\":[10640],\"rdldhar;\":[10601],\"realine;\":[8475],\"rotimes;\":[10805],\"ruluhar;\":[10600],\"searrow;\":[8600],\"simplus;\":[10788],\"simrarr;\":[10610],\"subedot;\":[10947],\"submult;\":[10945],\"subplus;\":[10943],\"subrarr;\":[10617],\"succsim;\":[8831],\"supdsub;\":[10968],\"supedot;\":[10948],\"suphsol;\":[10185],\"suphsub;\":[10967],\"suplarr;\":[10619],\"supmult;\":[10946],\"supplus;\":[10944],\"swarrow;\":[8601],\"topfork;\":[10970],\"triplus;\":[10809],\"tritime;\":[10811],\"uparrow;\":[8593],\"upsilon;\":[965],\"uwangle;\":[10663],\"vzigzag;\":[10650],\"zigrarr;\":[8669]}},{\"length\":7,\"entities\":{\"Aacute;\":[193],\"Abreve;\":[258],\"Agrave;\":[192],\"Assign;\":[8788],\"Atilde;\":[195],\"Barwed;\":[8966],\"Bumpeq;\":[8782],\"Cacute;\":[262],\"Ccaron;\":[268],\"Ccedil;\":[199],\"Colone;\":[10868],\"Conint;\":[8751],\"CupCap;\":[8781],\"Dagger;\":[8225],\"Dcaron;\":[270],\"DotDot;\":[8412],\"Dstrok;\":[272],\"Eacute;\":[201],\"Ecaron;\":[282],\"Egrave;\":[200],\"Exists;\":[8707],\"ForAll;\":[8704],\"Gammad;\":[988],\"Gbreve;\":[286],\"Gcedil;\":[290],\"HARDcy;\":[1066],\"Hstrok;\":[294],\"Iacute;\":[205],\"Igrave;\":[204],\"Itilde;\":[296],\"Jsercy;\":[1032],\"Kcedil;\":[310],\"Lacute;\":[313],\"Lambda;\":[923],\"Lcaron;\":[317],\"Lcedil;\":[315],\"Lmidot;\":[319],\"Lstrok;\":[321],\"Nacute;\":[323],\"Ncaron;\":[327],\"Ncedil;\":[325],\"Ntilde;\":[209],\"Oacute;\":[211],\"Odblac;\":[336],\"Ograve;\":[210],\"Oslash;\":[216],\"Otilde;\":[213],\"Otimes;\":[10807],\"Racute;\":[340],\"Rarrtl;\":[10518],\"Rcaron;\":[344],\"Rcedil;\":[342],\"SHCHcy;\":[1065],\"SOFTcy;\":[1068],\"Sacute;\":[346],\"Scaron;\":[352],\"Scedil;\":[350],\"Square;\":[9633],\"Subset;\":[8912],\"Supset;\":[8913],\"Tcaron;\":[356],\"Tcedil;\":[354],\"Tstrok;\":[358],\"Uacute;\":[218],\"Ubreve;\":[364],\"Udblac;\":[368],\"Ugrave;\":[217],\"Utilde;\":[360],\"Vdashl;\":[10982],\"Verbar;\":[8214],\"Vvdash;\":[8874],\"Yacute;\":[221],\"Zacute;\":[377],\"Zcaron;\":[381],\"aacute;\":[225],\"abreve;\":[259],\"agrave;\":[224],\"andand;\":[10837],\"angmsd;\":[8737],\"angsph;\":[8738],\"apacir;\":[10863],\"approx;\":[8776],\"atilde;\":[227],\"barvee;\":[8893],\"barwed;\":[8965],\"becaus;\":[8757],\"bernou;\":[8492],\"bigcap;\":[8898],\"bigcup;\":[8899],\"bigvee;\":[8897],\"bkarow;\":[10509],\"bottom;\":[8869],\"bowtie;\":[8904],\"boxbox;\":[10697],\"bprime;\":[8245],\"brvbar;\":[166],\"bullet;\":[8226],\"bumpeq;\":[8783],\"cacute;\":[263],\"capand;\":[10820],\"capcap;\":[10827],\"capcup;\":[10823],\"capdot;\":[10816],\"ccaron;\":[269],\"ccedil;\":[231],\"circeq;\":[8791],\"cirmid;\":[10991],\"colone;\":[8788],\"commat;\":[64],\"compfn;\":[8728],\"conint;\":[8750],\"coprod;\":[8720],\"copysr;\":[8471],\"cularr;\":[8630],\"cupcap;\":[10822],\"cupcup;\":[10826],\"cupdot;\":[8845],\"curarr;\":[8631],\"curren;\":[164],\"cylcty;\":[9005],\"dagger;\":[8224],\"daleth;\":[8504],\"dcaron;\":[271],\"dfisht;\":[10623],\"divide;\":[247],\"divonx;\":[8903],\"dlcorn;\":[8990],\"dlcrop;\":[8973],\"dollar;\":[36],\"drcorn;\":[8991],\"drcrop;\":[8972],\"dstrok;\":[273],\"eacute;\":[233],\"easter;\":[10862],\"ecaron;\":[283],\"ecolon;\":[8789],\"egrave;\":[232],\"egsdot;\":[10904],\"elsdot;\":[10903],\"emptyv;\":[8709],\"emsp13;\":[8196],\"emsp14;\":[8197],\"eparsl;\":[10723],\"eqcirc;\":[8790],\"equals;\":[61],\"equest;\":[8799],\"female;\":[9792],\"ffilig;\":[64259],\"ffllig;\":[64260],\"forall;\":[8704],\"frac12;\":[189],\"frac13;\":[8531],\"frac14;\":[188],\"frac15;\":[8533],\"frac16;\":[8537],\"frac18;\":[8539],\"frac23;\":[8532],\"frac25;\":[8534],\"frac34;\":[190],\"frac35;\":[8535],\"frac38;\":[8540],\"frac45;\":[8536],\"frac56;\":[8538],\"frac58;\":[8541],\"frac78;\":[8542],\"gacute;\":[501],\"gammad;\":[989],\"gbreve;\":[287],\"gesdot;\":[10880],\"gesles;\":[10900],\"gtlPar;\":[10645],\"gtrarr;\":[10616],\"gtrdot;\":[8919],\"gtrsim;\":[8819],\"hairsp;\":[8202],\"hamilt;\":[8459],\"hardcy;\":[1098],\"hearts;\":[9829],\"hellip;\":[8230],\"hercon;\":[8889],\"homtht;\":[8763],\"horbar;\":[8213],\"hslash;\":[8463],\"hstrok;\":[295],\"hybull;\":[8259],\"hyphen;\":[8208],\"iacute;\":[237],\"igrave;\":[236],\"iiiint;\":[10764],\"iinfin;\":[10716],\"incare;\":[8453],\"inodot;\":[305],\"intcal;\":[8890],\"iquest;\":[191],\"isinsv;\":[8947],\"itilde;\":[297],\"jsercy;\":[1112],\"kappav;\":[1008],\"kcedil;\":[311],\"kgreen;\":[312],\"lAtail;\":[10523],\"lacute;\":[314],\"lagran;\":[8466],\"lambda;\":[955],\"langle;\":[10216],\"larrfs;\":[10525],\"larrhk;\":[8617],\"larrlp;\":[8619],\"larrpl;\":[10553],\"larrtl;\":[8610],\"latail;\":[10521],\"lbrace;\":[123],\"lbrack;\":[91],\"lcaron;\":[318],\"lcedil;\":[316],\"ldquor;\":[8222],\"lesdot;\":[10879],\"lesges;\":[10899],\"lfisht;\":[10620],\"lfloor;\":[8970],\"lharul;\":[10602],\"llhard;\":[10603],\"lmidot;\":[320],\"lmoust;\":[9136],\"loplus;\":[10797],\"lowast;\":[8727],\"lowbar;\":[95],\"lparlt;\":[10643],\"lrhard;\":[10605],\"lsaquo;\":[8249],\"lsquor;\":[8218],\"lstrok;\":[322],\"lthree;\":[8907],\"ltimes;\":[8905],\"ltlarr;\":[10614],\"ltrPar;\":[10646],\"mapsto;\":[8614],\"marker;\":[9646],\"mcomma;\":[10793],\"midast;\":[42],\"midcir;\":[10992],\"middot;\":[183],\"minusb;\":[8863],\"minusd;\":[8760],\"mnplus;\":[8723],\"models;\":[8871],\"mstpos;\":[8766],\"nVDash;\":[8879],\"nVdash;\":[8878],\"nacute;\":[324],\"nbumpe;\":[8783,824],\"ncaron;\":[328],\"ncedil;\":[326],\"nearhk;\":[10532],\"nequiv;\":[8802],\"nesear;\":[10536],\"nexist;\":[8708],\"nltrie;\":[8940],\"notinE;\":[8953,824],\"nparsl;\":[11005,8421],\"nprcue;\":[8928],\"nrarrc;\":[10547,824],\"nrarrw;\":[8605,824],\"nrtrie;\":[8941],\"nsccue;\":[8929],\"nsimeq;\":[8772],\"ntilde;\":[241],\"numero;\":[8470],\"nvDash;\":[8877],\"nvHarr;\":[10500],\"nvdash;\":[8876],\"nvlArr;\":[10498],\"nvrArr;\":[10499],\"nwarhk;\":[10531],\"nwnear;\":[10535],\"oacute;\":[243],\"odblac;\":[337],\"odsold;\":[10684],\"ograve;\":[242],\"ominus;\":[8854],\"origof;\":[8886],\"oslash;\":[248],\"otilde;\":[245],\"otimes;\":[8855],\"parsim;\":[10995],\"percnt;\":[37],\"period;\":[46],\"permil;\":[8240],\"phmmat;\":[8499],\"planck;\":[8463],\"plankv;\":[8463],\"plusdo;\":[8724],\"plusdu;\":[10789],\"plusmn;\":[177],\"preceq;\":[10927],\"primes;\":[8473],\"prnsim;\":[8936],\"propto;\":[8733],\"prurel;\":[8880],\"puncsp;\":[8200],\"qprime;\":[8279],\"rAtail;\":[10524],\"racute;\":[341],\"rangle;\":[10217],\"rarrap;\":[10613],\"rarrfs;\":[10526],\"rarrhk;\":[8618],\"rarrlp;\":[8620],\"rarrpl;\":[10565],\"rarrtl;\":[8611],\"ratail;\":[10522],\"rbrace;\":[125],\"rbrack;\":[93],\"rcaron;\":[345],\"rcedil;\":[343],\"rdquor;\":[8221],\"rfisht;\":[10621],\"rfloor;\":[8971],\"rharul;\":[10604],\"rmoust;\":[9137],\"roplus;\":[10798],\"rpargt;\":[10644],\"rsaquo;\":[8250],\"rsquor;\":[8217],\"rthree;\":[8908],\"rtimes;\":[8906],\"sacute;\":[347],\"scaron;\":[353],\"scedil;\":[351],\"scnsim;\":[8937],\"searhk;\":[10533],\"seswar;\":[10537],\"sfrown;\":[8994],\"shchcy;\":[1097],\"sigmaf;\":[962],\"sigmav;\":[962],\"simdot;\":[10858],\"smashp;\":[10803],\"softcy;\":[1100],\"solbar;\":[9023],\"spades;\":[9824],\"sqcaps;\":[8851,65024],\"sqcups;\":[8852,65024],\"sqsube;\":[8849],\"sqsupe;\":[8850],\"square;\":[9633],\"squarf;\":[9642],\"ssetmn;\":[8726],\"ssmile;\":[8995],\"sstarf;\":[8902],\"subdot;\":[10941],\"subset;\":[8834],\"subsim;\":[10951],\"subsub;\":[10965],\"subsup;\":[10963],\"succeq;\":[10928],\"supdot;\":[10942],\"supset;\":[8835],\"supsim;\":[10952],\"supsub;\":[10964],\"supsup;\":[10966],\"swarhk;\":[10534],\"swnwar;\":[10538],\"target;\":[8982],\"tcaron;\":[357],\"tcedil;\":[355],\"telrec;\":[8981],\"there4;\":[8756],\"thetav;\":[977],\"thinsp;\":[8201],\"thksim;\":[8764],\"timesb;\":[8864],\"timesd;\":[10800],\"topbot;\":[9014],\"topcir;\":[10993],\"tprime;\":[8244],\"tridot;\":[9708],\"tstrok;\":[359],\"uacute;\":[250],\"ubreve;\":[365],\"udblac;\":[369],\"ufisht;\":[10622],\"ugrave;\":[249],\"ulcorn;\":[8988],\"ulcrop;\":[8975],\"urcorn;\":[8989],\"urcrop;\":[8974],\"utilde;\":[361],\"vangrt;\":[10652],\"varphi;\":[981],\"varrho;\":[1009],\"veebar;\":[8891],\"vellip;\":[8942],\"verbar;\":[124],\"vsubnE;\":[10955,65024],\"vsubne;\":[8842,65024],\"vsupnE;\":[10956,65024],\"vsupne;\":[8843,65024],\"wedbar;\":[10847],\"wedgeq;\":[8793],\"weierp;\":[8472],\"wreath;\":[8768],\"xoplus;\":[10753],\"xotime;\":[10754],\"xsqcup;\":[10758],\"xuplus;\":[10756],\"xwedge;\":[8896],\"yacute;\":[253],\"zacute;\":[378],\"zcaron;\":[382],\"zeetrf;\":[8488]}},{\"length\":6,\"entities\":{\"AElig;\":[198],\"Aacute\":[193],\"Acirc;\":[194],\"Agrave\":[192],\"Alpha;\":[913],\"Amacr;\":[256],\"Aogon;\":[260],\"Aring;\":[197],\"Atilde\":[195],\"Breve;\":[728],\"Ccedil\":[199],\"Ccirc;\":[264],\"Colon;\":[8759],\"Cross;\":[10799],\"Dashv;\":[10980],\"Delta;\":[916],\"Eacute\":[201],\"Ecirc;\":[202],\"Egrave\":[200],\"Emacr;\":[274],\"Eogon;\":[280],\"Equal;\":[10869],\"Gamma;\":[915],\"Gcirc;\":[284],\"Hacek;\":[711],\"Hcirc;\":[292],\"IJlig;\":[306],\"Iacute\":[205],\"Icirc;\":[206],\"Igrave\":[204],\"Imacr;\":[298],\"Iogon;\":[302],\"Iukcy;\":[1030],\"Jcirc;\":[308],\"Jukcy;\":[1028],\"Kappa;\":[922],\"Ntilde\":[209],\"OElig;\":[338],\"Oacute\":[211],\"Ocirc;\":[212],\"Ograve\":[210],\"Omacr;\":[332],\"Omega;\":[937],\"Oslash\":[216],\"Otilde\":[213],\"Prime;\":[8243],\"RBarr;\":[10512],\"Scirc;\":[348],\"Sigma;\":[931],\"THORN;\":[222],\"TRADE;\":[8482],\"TSHcy;\":[1035],\"Theta;\":[920],\"Tilde;\":[8764],\"Uacute\":[218],\"Ubrcy;\":[1038],\"Ucirc;\":[219],\"Ugrave\":[217],\"Umacr;\":[362],\"Union;\":[8899],\"Uogon;\":[370],\"UpTee;\":[8869],\"Uring;\":[366],\"VDash;\":[8875],\"Vdash;\":[8873],\"Wcirc;\":[372],\"Wedge;\":[8896],\"Yacute\":[221],\"Ycirc;\":[374],\"aacute\":[225],\"acirc;\":[226],\"acute;\":[180],\"aelig;\":[230],\"agrave\":[224],\"aleph;\":[8501],\"alpha;\":[945],\"amacr;\":[257],\"amalg;\":[10815],\"angle;\":[8736],\"angrt;\":[8735],\"angst;\":[197],\"aogon;\":[261],\"aring;\":[229],\"asymp;\":[8776],\"atilde\":[227],\"awint;\":[10769],\"bcong;\":[8780],\"bdquo;\":[8222],\"bepsi;\":[1014],\"blank;\":[9251],\"blk12;\":[9618],\"blk14;\":[9617],\"blk34;\":[9619],\"block;\":[9608],\"boxDL;\":[9559],\"boxDR;\":[9556],\"boxDl;\":[9558],\"boxDr;\":[9555],\"boxHD;\":[9574],\"boxHU;\":[9577],\"boxHd;\":[9572],\"boxHu;\":[9575],\"boxUL;\":[9565],\"boxUR;\":[9562],\"boxUl;\":[9564],\"boxUr;\":[9561],\"boxVH;\":[9580],\"boxVL;\":[9571],\"boxVR;\":[9568],\"boxVh;\":[9579],\"boxVl;\":[9570],\"boxVr;\":[9567],\"boxdL;\":[9557],\"boxdR;\":[9554],\"boxdl;\":[9488],\"boxdr;\":[9484],\"boxhD;\":[9573],\"boxhU;\":[9576],\"boxhd;\":[9516],\"boxhu;\":[9524],\"boxuL;\":[9563],\"boxuR;\":[9560],\"boxul;\":[9496],\"boxur;\":[9492],\"boxvH;\":[9578],\"boxvL;\":[9569],\"boxvR;\":[9566],\"boxvh;\":[9532],\"boxvl;\":[9508],\"boxvr;\":[9500],\"breve;\":[728],\"brvbar\":[166],\"bsemi;\":[8271],\"bsime;\":[8909],\"bsolb;\":[10693],\"bumpE;\":[10926],\"bumpe;\":[8783],\"caret;\":[8257],\"caron;\":[711],\"ccaps;\":[10829],\"ccedil\":[231],\"ccirc;\":[265],\"ccups;\":[10828],\"cedil;\":[184],\"check;\":[10003],\"clubs;\":[9827],\"colon;\":[58],\"comma;\":[44],\"crarr;\":[8629],\"cross;\":[10007],\"csube;\":[10961],\"csupe;\":[10962],\"ctdot;\":[8943],\"cuepr;\":[8926],\"cuesc;\":[8927],\"cupor;\":[10821],\"curren\":[164],\"cuvee;\":[8910],\"cuwed;\":[8911],\"cwint;\":[8753],\"dashv;\":[8867],\"dblac;\":[733],\"ddarr;\":[8650],\"delta;\":[948],\"dharl;\":[8643],\"dharr;\":[8642],\"diams;\":[9830],\"disin;\":[8946],\"divide\":[247],\"doteq;\":[8784],\"dtdot;\":[8945],\"dtrif;\":[9662],\"duarr;\":[8693],\"duhar;\":[10607],\"eDDot;\":[10871],\"eacute\":[233],\"ecirc;\":[234],\"efDot;\":[8786],\"egrave\":[232],\"emacr;\":[275],\"empty;\":[8709],\"eogon;\":[281],\"eplus;\":[10865],\"epsiv;\":[1013],\"eqsim;\":[8770],\"equiv;\":[8801],\"erDot;\":[8787],\"erarr;\":[10609],\"esdot;\":[8784],\"exist;\":[8707],\"fflig;\":[64256],\"filig;\":[64257],\"fjlig;\":[102,106],\"fllig;\":[64258],\"fltns;\":[9649],\"forkv;\":[10969],\"frac12\":[189],\"frac14\":[188],\"frac34\":[190],\"frasl;\":[8260],\"frown;\":[8994],\"gamma;\":[947],\"gcirc;\":[285],\"gescc;\":[10921],\"gimel;\":[8503],\"gneqq;\":[8809],\"gnsim;\":[8935],\"grave;\":[96],\"gsime;\":[10894],\"gsiml;\":[10896],\"gtcir;\":[10874],\"gtdot;\":[8919],\"harrw;\":[8621],\"hcirc;\":[293],\"hoarr;\":[8703],\"iacute\":[237],\"icirc;\":[238],\"iexcl;\":[161],\"igrave\":[236],\"iiint;\":[8749],\"iiota;\":[8489],\"ijlig;\":[307],\"imacr;\":[299],\"image;\":[8465],\"imath;\":[305],\"imped;\":[437],\"infin;\":[8734],\"iogon;\":[303],\"iprod;\":[10812],\"iquest\":[191],\"isinE;\":[8953],\"isins;\":[8948],\"isinv;\":[8712],\"iukcy;\":[1110],\"jcirc;\":[309],\"jmath;\":[567],\"jukcy;\":[1108],\"kappa;\":[954],\"lAarr;\":[8666],\"lBarr;\":[10510],\"langd;\":[10641],\"laquo;\":[171],\"larrb;\":[8676],\"lates;\":[10925,65024],\"lbarr;\":[10508],\"lbbrk;\":[10098],\"lbrke;\":[10635],\"lceil;\":[8968],\"ldquo;\":[8220],\"lescc;\":[10920],\"lhard;\":[8637],\"lharu;\":[8636],\"lhblk;\":[9604],\"llarr;\":[8647],\"lltri;\":[9722],\"lneqq;\":[8808],\"lnsim;\":[8934],\"loang;\":[10220],\"loarr;\":[8701],\"lobrk;\":[10214],\"lopar;\":[10629],\"lrarr;\":[8646],\"lrhar;\":[8651],\"lrtri;\":[8895],\"lsime;\":[10893],\"lsimg;\":[10895],\"lsquo;\":[8216],\"ltcir;\":[10873],\"ltdot;\":[8918],\"ltrie;\":[8884],\"ltrif;\":[9666],\"mDDot;\":[8762],\"mdash;\":[8212],\"micro;\":[181],\"middot\":[183],\"minus;\":[8722],\"mumap;\":[8888],\"nabla;\":[8711],\"napid;\":[8779,824],\"napos;\":[329],\"natur;\":[9838],\"nbump;\":[8782,824],\"ncong;\":[8775],\"ndash;\":[8211],\"neArr;\":[8663],\"nearr;\":[8599],\"nedot;\":[8784,824],\"nesim;\":[8770,824],\"ngeqq;\":[8807,824],\"ngsim;\":[8821],\"nhArr;\":[8654],\"nharr;\":[8622],\"nhpar;\":[10994],\"nlArr;\":[8653],\"nlarr;\":[8602],\"nleqq;\":[8806,824],\"nless;\":[8814],\"nlsim;\":[8820],\"nltri;\":[8938],\"notin;\":[8713],\"notni;\":[8716],\"npart;\":[8706,824],\"nprec;\":[8832],\"nrArr;\":[8655],\"nrarr;\":[8603],\"nrtri;\":[8939],\"nsime;\":[8772],\"nsmid;\":[8740],\"nspar;\":[8742],\"nsubE;\":[10949,824],\"nsube;\":[8840],\"nsucc;\":[8833],\"nsupE;\":[10950,824],\"nsupe;\":[8841],\"ntilde\":[241],\"numsp;\":[8199],\"nvsim;\":[8764,8402],\"nwArr;\":[8662],\"nwarr;\":[8598],\"oacute\":[243],\"ocirc;\":[244],\"odash;\":[8861],\"oelig;\":[339],\"ofcir;\":[10687],\"ograve\":[242],\"ohbar;\":[10677],\"olarr;\":[8634],\"olcir;\":[10686],\"oline;\":[8254],\"omacr;\":[333],\"omega;\":[969],\"operp;\":[10681],\"oplus;\":[8853],\"orarr;\":[8635],\"order;\":[8500],\"oslash\":[248],\"otilde\":[245],\"ovbar;\":[9021],\"parsl;\":[11005],\"phone;\":[9742],\"plusb;\":[8862],\"pluse;\":[10866],\"plusmn\":[177],\"pound;\":[163],\"prcue;\":[8828],\"prime;\":[8242],\"prnap;\":[10937],\"prsim;\":[8830],\"quest;\":[63],\"rAarr;\":[8667],\"rBarr;\":[10511],\"radic;\":[8730],\"rangd;\":[10642],\"range;\":[10661],\"raquo;\":[187],\"rarrb;\":[8677],\"rarrc;\":[10547],\"rarrw;\":[8605],\"ratio;\":[8758],\"rbarr;\":[10509],\"rbbrk;\":[10099],\"rbrke;\":[10636],\"rceil;\":[8969],\"rdquo;\":[8221],\"reals;\":[8477],\"rhard;\":[8641],\"rharu;\":[8640],\"rlarr;\":[8644],\"rlhar;\":[8652],\"rnmid;\":[10990],\"roang;\":[10221],\"roarr;\":[8702],\"robrk;\":[10215],\"ropar;\":[10630],\"rrarr;\":[8649],\"rsquo;\":[8217],\"rtrie;\":[8885],\"rtrif;\":[9656],\"sbquo;\":[8218],\"sccue;\":[8829],\"scirc;\":[349],\"scnap;\":[10938],\"scsim;\":[8831],\"sdotb;\":[8865],\"sdote;\":[10854],\"seArr;\":[8664],\"searr;\":[8600],\"setmn;\":[8726],\"sharp;\":[9839],\"sigma;\":[963],\"simeq;\":[8771],\"simgE;\":[10912],\"simlE;\":[10911],\"simne;\":[8774],\"slarr;\":[8592],\"smile;\":[8995],\"smtes;\":[10924,65024],\"sqcap;\":[8851],\"sqcup;\":[8852],\"sqsub;\":[8847],\"sqsup;\":[8848],\"srarr;\":[8594],\"starf;\":[9733],\"strns;\":[175],\"subnE;\":[10955],\"subne;\":[8842],\"supnE;\":[10956],\"supne;\":[8843],\"swArr;\":[8665],\"swarr;\":[8601],\"szlig;\":[223],\"theta;\":[952],\"thkap;\":[8776],\"thorn;\":[254],\"tilde;\":[732],\"times;\":[215],\"trade;\":[8482],\"trisb;\":[10701],\"tshcy;\":[1115],\"twixt;\":[8812],\"uacute\":[250],\"ubrcy;\":[1118],\"ucirc;\":[251],\"udarr;\":[8645],\"udhar;\":[10606],\"ugrave\":[249],\"uharl;\":[8639],\"uharr;\":[8638],\"uhblk;\":[9600],\"ultri;\":[9720],\"umacr;\":[363],\"uogon;\":[371],\"uplus;\":[8846],\"upsih;\":[978],\"uring;\":[367],\"urtri;\":[9721],\"utdot;\":[8944],\"utrif;\":[9652],\"uuarr;\":[8648],\"vBarv;\":[10985],\"vDash;\":[8872],\"varpi;\":[982],\"vdash;\":[8866],\"veeeq;\":[8794],\"vltri;\":[8882],\"vnsub;\":[8834,8402],\"vnsup;\":[8835,8402],\"vprop;\":[8733],\"vrtri;\":[8883],\"wcirc;\":[373],\"wedge;\":[8743],\"xcirc;\":[9711],\"xdtri;\":[9661],\"xhArr;\":[10234],\"xharr;\":[10231],\"xlArr;\":[10232],\"xlarr;\":[10229],\"xodot;\":[10752],\"xrArr;\":[10233],\"xrarr;\":[10230],\"xutri;\":[9651],\"yacute\":[253],\"ycirc;\":[375]}},{\"length\":5,\"entities\":{\"AElig\":[198],\"Acirc\":[194],\"Aopf;\":[120120],\"Aring\":[197],\"Ascr;\":[119964],\"Auml;\":[196],\"Barv;\":[10983],\"Beta;\":[914],\"Bopf;\":[120121],\"Bscr;\":[8492],\"CHcy;\":[1063],\"COPY;\":[169],\"Cdot;\":[266],\"Copf;\":[8450],\"Cscr;\":[119966],\"DJcy;\":[1026],\"DScy;\":[1029],\"DZcy;\":[1039],\"Darr;\":[8609],\"Dopf;\":[120123],\"Dscr;\":[119967],\"Ecirc\":[202],\"Edot;\":[278],\"Eopf;\":[120124],\"Escr;\":[8496],\"Esim;\":[10867],\"Euml;\":[203],\"Fopf;\":[120125],\"Fscr;\":[8497],\"GJcy;\":[1027],\"Gdot;\":[288],\"Gopf;\":[120126],\"Gscr;\":[119970],\"Hopf;\":[8461],\"Hscr;\":[8459],\"IEcy;\":[1045],\"IOcy;\":[1025],\"Icirc\":[206],\"Idot;\":[304],\"Iopf;\":[120128],\"Iota;\":[921],\"Iscr;\":[8464],\"Iuml;\":[207],\"Jopf;\":[120129],\"Jscr;\":[119973],\"KHcy;\":[1061],\"KJcy;\":[1036],\"Kopf;\":[120130],\"Kscr;\":[119974],\"LJcy;\":[1033],\"Lang;\":[10218],\"Larr;\":[8606],\"Lopf;\":[120131],\"Lscr;\":[8466],\"Mopf;\":[120132],\"Mscr;\":[8499],\"NJcy;\":[1034],\"Nopf;\":[8469],\"Nscr;\":[119977],\"Ocirc\":[212],\"Oopf;\":[120134],\"Oscr;\":[119978],\"Ouml;\":[214],\"Popf;\":[8473],\"Pscr;\":[119979],\"QUOT;\":[34],\"Qopf;\":[8474],\"Qscr;\":[119980],\"Rang;\":[10219],\"Rarr;\":[8608],\"Ropf;\":[8477],\"Rscr;\":[8475],\"SHcy;\":[1064],\"Sopf;\":[120138],\"Sqrt;\":[8730],\"Sscr;\":[119982],\"Star;\":[8902],\"THORN\":[222],\"TScy;\":[1062],\"Topf;\":[120139],\"Tscr;\":[119983],\"Uarr;\":[8607],\"Ucirc\":[219],\"Uopf;\":[120140],\"Upsi;\":[978],\"Uscr;\":[119984],\"Uuml;\":[220],\"Vbar;\":[10987],\"Vert;\":[8214],\"Vopf;\":[120141],\"Vscr;\":[119985],\"Wopf;\":[120142],\"Wscr;\":[119986],\"Xopf;\":[120143],\"Xscr;\":[119987],\"YAcy;\":[1071],\"YIcy;\":[1031],\"YUcy;\":[1070],\"Yopf;\":[120144],\"Yscr;\":[119988],\"Yuml;\":[376],\"ZHcy;\":[1046],\"Zdot;\":[379],\"Zeta;\":[918],\"Zopf;\":[8484],\"Zscr;\":[119989],\"acirc\":[226],\"acute\":[180],\"aelig\":[230],\"andd;\":[10844],\"andv;\":[10842],\"ange;\":[10660],\"aopf;\":[120146],\"apid;\":[8779],\"apos;\":[39],\"aring\":[229],\"ascr;\":[119990],\"auml;\":[228],\"bNot;\":[10989],\"bbrk;\":[9141],\"beta;\":[946],\"beth;\":[8502],\"bnot;\":[8976],\"bopf;\":[120147],\"boxH;\":[9552],\"boxV;\":[9553],\"boxh;\":[9472],\"boxv;\":[9474],\"bscr;\":[119991],\"bsim;\":[8765],\"bsol;\":[92],\"bull;\":[8226],\"bump;\":[8782],\"caps;\":[8745,65024],\"cdot;\":[267],\"cedil\":[184],\"cent;\":[162],\"chcy;\":[1095],\"cirE;\":[10691],\"circ;\":[710],\"cire;\":[8791],\"comp;\":[8705],\"cong;\":[8773],\"copf;\":[120148],\"copy;\":[169],\"cscr;\":[119992],\"csub;\":[10959],\"csup;\":[10960],\"cups;\":[8746,65024],\"dArr;\":[8659],\"dHar;\":[10597],\"darr;\":[8595],\"dash;\":[8208],\"diam;\":[8900],\"djcy;\":[1106],\"dopf;\":[120149],\"dscr;\":[119993],\"dscy;\":[1109],\"dsol;\":[10742],\"dtri;\":[9663],\"dzcy;\":[1119],\"eDot;\":[8785],\"ecir;\":[8790],\"ecirc\":[234],\"edot;\":[279],\"emsp;\":[8195],\"ensp;\":[8194],\"eopf;\":[120150],\"epar;\":[8917],\"epsi;\":[949],\"escr;\":[8495],\"esim;\":[8770],\"euml;\":[235],\"euro;\":[8364],\"excl;\":[33],\"flat;\":[9837],\"fnof;\":[402],\"fopf;\":[120151],\"fork;\":[8916],\"fscr;\":[119995],\"gdot;\":[289],\"geqq;\":[8807],\"gesl;\":[8923,65024],\"gjcy;\":[1107],\"gnap;\":[10890],\"gneq;\":[10888],\"gopf;\":[120152],\"gscr;\":[8458],\"gsim;\":[8819],\"gtcc;\":[10919],\"gvnE;\":[8809,65024],\"hArr;\":[8660],\"half;\":[189],\"harr;\":[8596],\"hbar;\":[8463],\"hopf;\":[120153],\"hscr;\":[119997],\"icirc\":[238],\"iecy;\":[1077],\"iexcl\":[161],\"imof;\":[8887],\"iocy;\":[1105],\"iopf;\":[120154],\"iota;\":[953],\"iscr;\":[119998],\"isin;\":[8712],\"iuml;\":[239],\"jopf;\":[120155],\"jscr;\":[119999],\"khcy;\":[1093],\"kjcy;\":[1116],\"kopf;\":[120156],\"kscr;\":[120000],\"lArr;\":[8656],\"lHar;\":[10594],\"lang;\":[10216],\"laquo\":[171],\"larr;\":[8592],\"late;\":[10925],\"lcub;\":[123],\"ldca;\":[10550],\"ldsh;\":[8626],\"leqq;\":[8806],\"lesg;\":[8922,65024],\"ljcy;\":[1113],\"lnap;\":[10889],\"lneq;\":[10887],\"lopf;\":[120157],\"lozf;\":[10731],\"lpar;\":[40],\"lscr;\":[120001],\"lsim;\":[8818],\"lsqb;\":[91],\"ltcc;\":[10918],\"ltri;\":[9667],\"lvnE;\":[8808,65024],\"macr;\":[175],\"male;\":[9794],\"malt;\":[10016],\"micro\":[181],\"mlcp;\":[10971],\"mldr;\":[8230],\"mopf;\":[120158],\"mscr;\":[120002],\"nGtv;\":[8811,824],\"nLtv;\":[8810,824],\"nang;\":[8736,8402],\"napE;\":[10864,824],\"nbsp;\":[160],\"ncap;\":[10819],\"ncup;\":[10818],\"ngeq;\":[8817],\"nges;\":[10878,824],\"ngtr;\":[8815],\"nisd;\":[8954],\"njcy;\":[1114],\"nldr;\":[8229],\"nleq;\":[8816],\"nles;\":[10877,824],\"nmid;\":[8740],\"nopf;\":[120159],\"npar;\":[8742],\"npre;\":[10927,824],\"nsce;\":[10928,824],\"nscr;\":[120003],\"nsim;\":[8769],\"nsub;\":[8836],\"nsup;\":[8837],\"ntgl;\":[8825],\"ntlg;\":[8824],\"nvap;\":[8781,8402],\"nvge;\":[8805,8402],\"nvgt;\":[62,8402],\"nvle;\":[8804,8402],\"nvlt;\":[60,8402],\"oast;\":[8859],\"ocir;\":[8858],\"ocirc\":[244],\"odiv;\":[10808],\"odot;\":[8857],\"ogon;\":[731],\"oint;\":[8750],\"omid;\":[10678],\"oopf;\":[120160],\"opar;\":[10679],\"ordf;\":[170],\"ordm;\":[186],\"oror;\":[10838],\"oscr;\":[8500],\"osol;\":[8856],\"ouml;\":[246],\"para;\":[182],\"part;\":[8706],\"perp;\":[8869],\"phiv;\":[981],\"plus;\":[43],\"popf;\":[120161],\"pound\":[163],\"prap;\":[10935],\"prec;\":[8826],\"prnE;\":[10933],\"prod;\":[8719],\"prop;\":[8733],\"pscr;\":[120005],\"qint;\":[10764],\"qopf;\":[120162],\"qscr;\":[120006],\"quot;\":[34],\"rArr;\":[8658],\"rHar;\":[10596],\"race;\":[8765,817],\"rang;\":[10217],\"raquo\":[187],\"rarr;\":[8594],\"rcub;\":[125],\"rdca;\":[10551],\"rdsh;\":[8627],\"real;\":[8476],\"rect;\":[9645],\"rhov;\":[1009],\"ring;\":[730],\"ropf;\":[120163],\"rpar;\":[41],\"rscr;\":[120007],\"rsqb;\":[93],\"rtri;\":[9657],\"scap;\":[10936],\"scnE;\":[10934],\"sdot;\":[8901],\"sect;\":[167],\"semi;\":[59],\"sext;\":[10038],\"shcy;\":[1096],\"sime;\":[8771],\"simg;\":[10910],\"siml;\":[10909],\"smid;\":[8739],\"smte;\":[10924],\"solb;\":[10692],\"sopf;\":[120164],\"spar;\":[8741],\"squf;\":[9642],\"sscr;\":[120008],\"star;\":[9734],\"subE;\":[10949],\"sube;\":[8838],\"succ;\":[8827],\"sung;\":[9834],\"sup1;\":[185],\"sup2;\":[178],\"sup3;\":[179],\"supE;\":[10950],\"supe;\":[8839],\"szlig\":[223],\"tbrk;\":[9140],\"tdot;\":[8411],\"thorn\":[254],\"times\":[215],\"tint;\":[8749],\"toea;\":[10536],\"topf;\":[120165],\"tosa;\":[10537],\"trie;\":[8796],\"tscr;\":[120009],\"tscy;\":[1094],\"uArr;\":[8657],\"uHar;\":[10595],\"uarr;\":[8593],\"ucirc\":[251],\"uopf;\":[120166],\"upsi;\":[965],\"uscr;\":[120010],\"utri;\":[9653],\"uuml;\":[252],\"vArr;\":[8661],\"vBar;\":[10984],\"varr;\":[8597],\"vert;\":[124],\"vopf;\":[120167],\"vscr;\":[120011],\"wopf;\":[120168],\"wscr;\":[120012],\"xcap;\":[8898],\"xcup;\":[8899],\"xmap;\":[10236],\"xnis;\":[8955],\"xopf;\":[120169],\"xscr;\":[120013],\"xvee;\":[8897],\"yacy;\":[1103],\"yicy;\":[1111],\"yopf;\":[120170],\"yscr;\":[120014],\"yucy;\":[1102],\"yuml;\":[255],\"zdot;\":[380],\"zeta;\":[950],\"zhcy;\":[1078],\"zopf;\":[120171],\"zscr;\":[120015],\"zwnj;\":[8204]}},{\"length\":4,\"entities\":{\"AMP;\":[38],\"Acy;\":[1040],\"Afr;\":[120068],\"And;\":[10835],\"Auml\":[196],\"Bcy;\":[1041],\"Bfr;\":[120069],\"COPY\":[169],\"Cap;\":[8914],\"Cfr;\":[8493],\"Chi;\":[935],\"Cup;\":[8915],\"Dcy;\":[1044],\"Del;\":[8711],\"Dfr;\":[120071],\"Dot;\":[168],\"ENG;\":[330],\"ETH;\":[208],\"Ecy;\":[1069],\"Efr;\":[120072],\"Eta;\":[919],\"Euml\":[203],\"Fcy;\":[1060],\"Ffr;\":[120073],\"Gcy;\":[1043],\"Gfr;\":[120074],\"Hat;\":[94],\"Hfr;\":[8460],\"Icy;\":[1048],\"Ifr;\":[8465],\"Int;\":[8748],\"Iuml\":[207],\"Jcy;\":[1049],\"Jfr;\":[120077],\"Kcy;\":[1050],\"Kfr;\":[120078],\"Lcy;\":[1051],\"Lfr;\":[120079],\"Lsh;\":[8624],\"Map;\":[10501],\"Mcy;\":[1052],\"Mfr;\":[120080],\"Ncy;\":[1053],\"Nfr;\":[120081],\"Not;\":[10988],\"Ocy;\":[1054],\"Ofr;\":[120082],\"Ouml\":[214],\"Pcy;\":[1055],\"Pfr;\":[120083],\"Phi;\":[934],\"Psi;\":[936],\"QUOT\":[34],\"Qfr;\":[120084],\"REG;\":[174],\"Rcy;\":[1056],\"Rfr;\":[8476],\"Rho;\":[929],\"Rsh;\":[8625],\"Scy;\":[1057],\"Sfr;\":[120086],\"Sub;\":[8912],\"Sum;\":[8721],\"Sup;\":[8913],\"Tab;\":[9],\"Tau;\":[932],\"Tcy;\":[1058],\"Tfr;\":[120087],\"Ucy;\":[1059],\"Ufr;\":[120088],\"Uuml\":[220],\"Vcy;\":[1042],\"Vee;\":[8897],\"Vfr;\":[120089],\"Wfr;\":[120090],\"Xfr;\":[120091],\"Ycy;\":[1067],\"Yfr;\":[120092],\"Zcy;\":[1047],\"Zfr;\":[8488],\"acE;\":[8766,819],\"acd;\":[8767],\"acy;\":[1072],\"afr;\":[120094],\"amp;\":[38],\"and;\":[8743],\"ang;\":[8736],\"apE;\":[10864],\"ape;\":[8778],\"ast;\":[42],\"auml\":[228],\"bcy;\":[1073],\"bfr;\":[120095],\"bne;\":[61,8421],\"bot;\":[8869],\"cap;\":[8745],\"cent\":[162],\"cfr;\":[120096],\"chi;\":[967],\"cir;\":[9675],\"copy\":[169],\"cup;\":[8746],\"dcy;\":[1076],\"deg;\":[176],\"dfr;\":[120097],\"die;\":[168],\"div;\":[247],\"dot;\":[729],\"ecy;\":[1101],\"efr;\":[120098],\"egs;\":[10902],\"ell;\":[8467],\"els;\":[10901],\"eng;\":[331],\"eta;\":[951],\"eth;\":[240],\"euml\":[235],\"fcy;\":[1092],\"ffr;\":[120099],\"gEl;\":[10892],\"gap;\":[10886],\"gcy;\":[1075],\"gel;\":[8923],\"geq;\":[8805],\"ges;\":[10878],\"gfr;\":[120100],\"ggg;\":[8921],\"glE;\":[10898],\"gla;\":[10917],\"glj;\":[10916],\"gnE;\":[8809],\"gne;\":[10888],\"hfr;\":[120101],\"icy;\":[1080],\"iff;\":[8660],\"ifr;\":[120102],\"int;\":[8747],\"iuml\":[239],\"jcy;\":[1081],\"jfr;\":[120103],\"kcy;\":[1082],\"kfr;\":[120104],\"lEg;\":[10891],\"lap;\":[10885],\"lat;\":[10923],\"lcy;\":[1083],\"leg;\":[8922],\"leq;\":[8804],\"les;\":[10877],\"lfr;\":[120105],\"lgE;\":[10897],\"lnE;\":[8808],\"lne;\":[10887],\"loz;\":[9674],\"lrm;\":[8206],\"lsh;\":[8624],\"macr\":[175],\"map;\":[8614],\"mcy;\":[1084],\"mfr;\":[120106],\"mho;\":[8487],\"mid;\":[8739],\"nGg;\":[8921,824],\"nGt;\":[8811,8402],\"nLl;\":[8920,824],\"nLt;\":[8810,8402],\"nap;\":[8777],\"nbsp\":[160],\"ncy;\":[1085],\"nfr;\":[120107],\"ngE;\":[8807,824],\"nge;\":[8817],\"ngt;\":[8815],\"nis;\":[8956],\"niv;\":[8715],\"nlE;\":[8806,824],\"nle;\":[8816],\"nlt;\":[8814],\"not;\":[172],\"npr;\":[8832],\"nsc;\":[8833],\"num;\":[35],\"ocy;\":[1086],\"ofr;\":[120108],\"ogt;\":[10689],\"ohm;\":[937],\"olt;\":[10688],\"ord;\":[10845],\"ordf\":[170],\"ordm\":[186],\"orv;\":[10843],\"ouml\":[246],\"par;\":[8741],\"para\":[182],\"pcy;\":[1087],\"pfr;\":[120109],\"phi;\":[966],\"piv;\":[982],\"prE;\":[10931],\"pre;\":[10927],\"psi;\":[968],\"qfr;\":[120110],\"quot\":[34],\"rcy;\":[1088],\"reg;\":[174],\"rfr;\":[120111],\"rho;\":[961],\"rlm;\":[8207],\"rsh;\":[8625],\"scE;\":[10932],\"sce;\":[10928],\"scy;\":[1089],\"sect\":[167],\"sfr;\":[120112],\"shy;\":[173],\"sim;\":[8764],\"smt;\":[10922],\"sol;\":[47],\"squ;\":[9633],\"sub;\":[8834],\"sum;\":[8721],\"sup1\":[185],\"sup2\":[178],\"sup3\":[179],\"sup;\":[8835],\"tau;\":[964],\"tcy;\":[1090],\"tfr;\":[120113],\"top;\":[8868],\"ucy;\":[1091],\"ufr;\":[120114],\"uml;\":[168],\"uuml\":[252],\"vcy;\":[1074],\"vee;\":[8744],\"vfr;\":[120115],\"wfr;\":[120116],\"xfr;\":[120117],\"ycy;\":[1099],\"yen;\":[165],\"yfr;\":[120118],\"yuml\":[255],\"zcy;\":[1079],\"zfr;\":[120119],\"zwj;\":[8205]}},{\"length\":3,\"entities\":{\"AMP\":[38],\"DD;\":[8517],\"ETH\":[208],\"GT;\":[62],\"Gg;\":[8921],\"Gt;\":[8811],\"Im;\":[8465],\"LT;\":[60],\"Ll;\":[8920],\"Lt;\":[8810],\"Mu;\":[924],\"Nu;\":[925],\"Or;\":[10836],\"Pi;\":[928],\"Pr;\":[10939],\"REG\":[174],\"Re;\":[8476],\"Sc;\":[10940],\"Xi;\":[926],\"ac;\":[8766],\"af;\":[8289],\"amp\":[38],\"ap;\":[8776],\"dd;\":[8518],\"deg\":[176],\"ee;\":[8519],\"eg;\":[10906],\"el;\":[10905],\"eth\":[240],\"gE;\":[8807],\"ge;\":[8805],\"gg;\":[8811],\"gl;\":[8823],\"gt;\":[62],\"ic;\":[8291],\"ii;\":[8520],\"in;\":[8712],\"it;\":[8290],\"lE;\":[8806],\"le;\":[8804],\"lg;\":[8822],\"ll;\":[8810],\"lt;\":[60],\"mp;\":[8723],\"mu;\":[956],\"ne;\":[8800],\"ni;\":[8715],\"not\":[172],\"nu;\":[957],\"oS;\":[9416],\"or;\":[8744],\"pi;\":[960],\"pm;\":[177],\"pr;\":[8826],\"reg\":[174],\"rx;\":[8478],\"sc;\":[8827],\"shy\":[173],\"uml\":[168],\"wp;\":[8472],\"wr;\":[8768],\"xi;\":[958],\"yen\":[165]}},{\"length\":2,\"entities\":{\"GT\":[62],\"LT\":[60],\"gt\":[62],\"lt\":[60]}}]\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\nexport const EOF = -1\nexport const NULL = 0x00\nexport const TABULATION = 0x09\nexport const CARRIAGE_RETURN = 0x0D\nexport const LINE_FEED = 0x0A\nexport const FORM_FEED = 0x0C\nexport const SPACE = 0x20\nexport const EXCLAMATION_MARK = 0x21\nexport const QUOTATION_MARK = 0x22\nexport const NUMBER_SIGN = 0x23\nexport const AMPERSAND = 0x26\nexport const APOSTROPHE = 0x27\nexport const HYPHEN_MINUS = 0x2D\nexport const SOLIDUS = 0x2F\nexport const DIGIT_0 = 0x30\nexport const DIGIT_9 = 0x39\nexport const SEMICOLON = 0x3B\nexport const LESS_THAN_SIGN = 0x3C\nexport const EQUALS_SIGN = 0x3D\nexport const GREATER_THAN_SIGN = 0x3E\nexport const QUESTION_MARK = 0x3F\nexport const LATIN_CAPITAL_A = 0x41\nexport const LATIN_CAPITAL_D = 0x44\nexport const LATIN_CAPITAL_F = 0x46\nexport const LATIN_CAPITAL_X = 0x58\nexport const LATIN_CAPITAL_Z = 0x5A\nexport const LEFT_SQUARE_BRACKET = 0x5B\nexport const RIGHT_SQUARE_BRACKET = 0x5D\nexport const GRAVE_ACCENT = 0x60\nexport const LATIN_SMALL_A = 0x61\nexport const LATIN_SMALL_F = 0x66\nexport const LATIN_SMALL_X = 0x78\nexport const LATIN_SMALL_Z = 0x7A\nexport const LEFT_CURLY_BRACKET = 0x7B\nexport const RIGHT_CURLY_BRACKET = 0x7D\nexport const NULL_REPLACEMENT = 0xFFFD\n\n/**\n * Check whether the code point is a whitespace.\n * @param cp The code point to check.\n * @returns `true` if the code point is a whitespace.\n */\nexport function isWhitespace(cp: number): boolean {\n    return cp === TABULATION || cp === LINE_FEED || cp === FORM_FEED || cp === CARRIAGE_RETURN || cp === SPACE\n}\n\n/**\n * Check whether the code point is an uppercase letter character.\n * @param cp The code point to check.\n * @returns `true` if the code point is an uppercase letter character.\n */\nexport function isUpperLetter(cp: number): boolean {\n    return cp >= LATIN_CAPITAL_A && cp <= LATIN_CAPITAL_Z\n}\n\n/**\n * Check whether the code point is a lowercase letter character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a lowercase letter character.\n */\nexport function isLowerLetter(cp: number): boolean {\n    return cp >= LATIN_SMALL_A && cp <= LATIN_SMALL_Z\n}\n\n/**\n * Check whether the code point is a letter character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a letter character.\n */\nexport function isLetter(cp: number): boolean {\n    return isLowerLetter(cp) || isUpperLetter(cp)\n}\n\n/**\n * Check whether the code point is a digit character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a digit character.\n */\nexport function isDigit(cp: number): boolean {\n    return cp >= DIGIT_0 && cp <= DIGIT_9\n}\n\n/**\n * Check whether the code point is a digit character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a digit character.\n */\nexport function isUpperHexDigit(cp: number): boolean {\n    return cp >= LATIN_CAPITAL_A && cp <= LATIN_CAPITAL_F\n}\n\n/**\n * Check whether the code point is a digit character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a digit character.\n */\nexport function isLowerHexDigit(cp: number): boolean {\n    return cp >= LATIN_SMALL_A && cp <= LATIN_SMALL_F\n}\n\n/**\n * Check whether the code point is a digit character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a digit character.\n */\nexport function isHexDigit(cp: number): boolean {\n    return isDigit(cp) || isUpperHexDigit(cp) || isLowerHexDigit(cp)\n}\n\n/**\n * Check whether the code point is a control character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a control character.\n */\nexport function isControl(cp: number): boolean {\n    return (cp >= 0 && cp <= 0x1F) || (cp >= 0x7F && cp <= 0x9F)\n}\n\n/**\n * Check whether the code point is a surrogate character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a surrogate character.\n */\nexport function isSurrogate(cp: number): boolean {\n    return cp >= 0xD800 && cp <= 0xDFFF\n}\n\n/**\n * Check whether the code point is a surrogate pair character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a surrogate pair character.\n */\nexport function isSurrogatePair(cp: number): boolean {\n    return cp >= 0xDC00 && cp <= 0xDFFF\n}\n\n/**\n * Check whether the code point is a surrogate character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a surrogate character.\n */\nexport function isNonCharacter(cp: number): boolean {\n    return (\n        (cp >= 0xFDD0 && cp <= 0xFDEF) ||\n        ((cp & 0xFFFE) === 0xFFFE && cp <= 0x10FFFF)\n    )\n}\n\n// export function isReservedCodePoint(cp: number): boolean {\n//     return (cp >= 0xD800 && cp <= 0xDFFF) || cp > 0x10FFFF\n// }\n\n/**\n * Convert the given character to lowercases.\n * @param cp The code point to convert.\n * @returns Converted code point.\n */\nexport function toLowerCodePoint(cp: number): number {\n    return cp + 0x0020\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\n/*eslint-disable no-constant-condition, no-param-reassign */\n\nimport assert from \"assert\"\nimport { debug } from \"../common/debug\"\nimport type { ErrorCode, Namespace, Token } from \"../ast\"\nimport { NS, ParseError } from \"../ast\"\nimport { alternativeCR } from \"./util/alternative-cr\"\nimport { entitySets } from \"./util/entities\"\nimport {\n    AMPERSAND,\n    APOSTROPHE,\n    CARRIAGE_RETURN,\n    EOF,\n    EQUALS_SIGN,\n    EXCLAMATION_MARK,\n    GRAVE_ACCENT,\n    GREATER_THAN_SIGN,\n    HYPHEN_MINUS,\n    isControl,\n    isDigit,\n    isHexDigit,\n    isLetter,\n    isLowerHexDigit,\n    isNonCharacter,\n    isSurrogate,\n    isSurrogatePair,\n    isUpperHexDigit,\n    isUpperLetter,\n    isWhitespace,\n    LATIN_CAPITAL_D,\n    LATIN_CAPITAL_X,\n    LATIN_SMALL_X,\n    LEFT_CURLY_BRACKET,\n    LEFT_SQUARE_BRACKET,\n    LESS_THAN_SIGN,\n    LINE_FEED,\n    NULL,\n    NULL_REPLACEMENT,\n    NUMBER_SIGN,\n    QUESTION_MARK,\n    QUOTATION_MARK,\n    RIGHT_CURLY_BRACKET,\n    RIGHT_SQUARE_BRACKET,\n    SEMICOLON,\n    SOLIDUS,\n    toLowerCodePoint,\n} from \"./util/unicode\"\nimport type { ParserOptions } from \"../common/parser-options\"\n\n/**\n * Enumeration of token types.\n */\nexport type TokenType =\n    | \"HTMLAssociation\"\n    | \"HTMLBogusComment\"\n    | \"HTMLCDataText\"\n    | \"HTMLComment\"\n    | \"HTMLEndTagOpen\"\n    | \"HTMLIdentifier\"\n    | \"HTMLLiteral\"\n    | \"HTMLRCDataText\"\n    | \"HTMLRawText\"\n    | \"HTMLSelfClosingTagClose\"\n    | \"HTMLTagClose\"\n    | \"HTMLTagOpen\"\n    | \"HTMLText\"\n    | \"HTMLWhitespace\"\n    | \"VExpressionStart\"\n    | \"VExpressionEnd\"\n\n/**\n * Enumeration of tokenizer's state types.\n */\nexport type TokenizerState =\n    | \"DATA\"\n    | \"TAG_OPEN\"\n    | \"END_TAG_OPEN\"\n    | \"TAG_NAME\"\n    | \"RCDATA\"\n    | \"RCDATA_LESS_THAN_SIGN\"\n    | \"RCDATA_END_TAG_OPEN\"\n    | \"RCDATA_END_TAG_NAME\"\n    | \"RAWTEXT\"\n    | \"RAWTEXT_LESS_THAN_SIGN\"\n    | \"RAWTEXT_END_TAG_OPEN\"\n    | \"RAWTEXT_END_TAG_NAME\"\n    | \"BEFORE_ATTRIBUTE_NAME\"\n    | \"ATTRIBUTE_NAME\"\n    | \"AFTER_ATTRIBUTE_NAME\"\n    | \"BEFORE_ATTRIBUTE_VALUE\"\n    | \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"\n    | \"ATTRIBUTE_VALUE_SINGLE_QUOTED\"\n    | \"ATTRIBUTE_VALUE_UNQUOTED\"\n    | \"AFTER_ATTRIBUTE_VALUE_QUOTED\"\n    | \"SELF_CLOSING_START_TAG\"\n    | \"BOGUS_COMMENT\"\n    | \"MARKUP_DECLARATION_OPEN\"\n    | \"COMMENT_START\"\n    | \"COMMENT_START_DASH\"\n    | \"COMMENT\"\n    | \"COMMENT_LESS_THAN_SIGN\"\n    | \"COMMENT_LESS_THAN_SIGN_BANG\"\n    | \"COMMENT_LESS_THAN_SIGN_BANG_DASH\"\n    | \"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\"\n    | \"COMMENT_END_DASH\"\n    | \"COMMENT_END\"\n    | \"COMMENT_END_BANG\"\n    | \"CDATA_SECTION\"\n    | \"CDATA_SECTION_BRACKET\"\n    | \"CDATA_SECTION_END\"\n    | \"CHARACTER_REFERENCE\"\n    | \"NAMED_CHARACTER_REFERENCE\"\n    | \"AMBIGUOUS_AMPERSAND\"\n    | \"NUMERIC_CHARACTER_REFERENCE\"\n    | \"HEXADEMICAL_CHARACTER_REFERENCE_START\"\n    | \"DECIMAL_CHARACTER_REFERENCE_START\"\n    | \"HEXADEMICAL_CHARACTER_REFERENCE\"\n    | \"DECIMAL_CHARACTER_REFERENCE\"\n    | \"NUMERIC_CHARACTER_REFERENCE_END\"\n    | \"CHARACTER_REFERENCE_END\"\n    | \"V_EXPRESSION_START\"\n    | \"V_EXPRESSION_DATA\"\n    | \"V_EXPRESSION_END\"\n// ---- Use RAWTEXT state for <script> elements instead ----\n// \"SCRIPT_DATA\" |\n// \"SCRIPT_DATA_LESS_THAN_SIGN\" |\n// \"SCRIPT_DATA_END_TAG_OPEN\" |\n// \"SCRIPT_DATA_END_TAG_NAME\" |\n// \"SCRIPT_DATA_ESCAPE_START\" |\n// \"SCRIPT_DATA_ESCAPE_START_DASH\" |\n// \"SCRIPT_DATA_ESCAPED\" |\n// \"SCRIPT_DATA_ESCAPED_DASH\" |\n// \"SCRIPT_DATA_ESCAPED_DASH_DASH\" |\n// \"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\" |\n// \"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\" |\n// \"SCRIPT_DATA_ESCAPED_END_TAG_NAME\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPE_START\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPED\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPE_END\" |\n// ---- Use BOGUS_COMMENT state for DOCTYPEs instead ----\n// \"DOCTYPE\" |\n// \"DOCTYPE_NAME\" |\n// \"AFTER_DOCTYPE_NAME\" |\n// \"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\" |\n// \"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\" |\n// \"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\" |\n// \"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\" |\n// \"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\" |\n// \"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\" |\n// \"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\" |\n// \"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\" |\n// \"BOGUS_DOCTYPE\"\n\n/**\n * Tokenizer for HTML.\n */\nexport class Tokenizer {\n    // Reading\n    public readonly text: string\n    public readonly gaps: number[]\n    public readonly lineTerminators: number[]\n    private readonly parserOptions: ParserOptions\n    private lastCodePoint: number\n    private offset: number\n    private column: number\n    private line: number\n\n    // Tokenizing\n    private returnState: TokenizerState\n    private vExpressionScriptState: { state: TokenizerState } | null = null\n    private reconsuming: boolean\n    private buffer: number[]\n    private crStartOffset: number\n    private crCode: number\n    private committedToken: Token | null\n    private provisionalToken: Token | null // can be rollbacked.\n    private currentToken: Token | null\n    private lastTagOpenToken: Token | null\n    private tokenStartOffset: number\n    private tokenStartLine: number\n    private tokenStartColumn: number\n\n    /**\n     * The current state.\n     */\n    public state: TokenizerState\n\n    /**\n     * Syntax errors.\n     */\n    public errors: ParseError[]\n\n    /**\n     * The current namespace.\n     */\n    public namespace: Namespace\n\n    /**\n     * The flag which enables expression tokens.\n     * If this is true, this tokenizer will generate V_EXPRESSION_START and V_EXPRESSION_END tokens.\n     */\n    public expressionEnabled: boolean\n\n    /**\n     * Initialize this tokenizer.\n     * @param text The source code to tokenize.\n     * @param parserOptions The parser options.\n     */\n    public constructor(text: string, parserOptions?: ParserOptions) {\n        debug(\"[html] the source code length: %d\", text.length)\n        this.text = text\n        this.gaps = []\n        this.lineTerminators = []\n        this.parserOptions = parserOptions || {}\n        this.lastCodePoint = NULL\n        this.offset = -1\n        this.column = -1\n        this.line = 1\n        this.state = \"DATA\"\n        this.returnState = \"DATA\"\n        this.reconsuming = false\n        this.buffer = []\n        this.crStartOffset = -1\n        this.crCode = 0\n        this.errors = []\n        this.committedToken = null\n        this.provisionalToken = null\n        this.currentToken = null\n        this.lastTagOpenToken = null\n        this.tokenStartOffset = -1\n        this.tokenStartColumn = -1\n        this.tokenStartLine = 1\n        this.namespace = NS.HTML\n        this.expressionEnabled = false\n    }\n\n    /**\n     * Get the next token.\n     * @returns The next token or null.\n     */\n    public nextToken(): Token | null {\n        let cp = this.lastCodePoint\n        while (\n            this.committedToken == null &&\n            (cp !== EOF || this.reconsuming)\n        ) {\n            if (this.provisionalToken != null && !this.isProvisionalState()) {\n                this.commitProvisionalToken()\n                if (this.committedToken != null) {\n                    break\n                }\n            }\n\n            if (this.reconsuming) {\n                this.reconsuming = false\n                cp = this.lastCodePoint\n            } else {\n                cp = this.consumeNextCodePoint()\n            }\n\n            debug(\"[html] parse\", cp, this.state)\n            this.state = this[this.state](cp)\n        }\n\n        {\n            const token = this.consumeCommittedToken()\n            if (token != null) {\n                return token\n            }\n        }\n\n        assert(cp === EOF)\n\n        if (this.currentToken != null) {\n            this.endToken()\n\n            const token = this.consumeCommittedToken()\n            if (token != null) {\n                return token\n            }\n        }\n        return this.currentToken\n    }\n\n    /**\n     * Consume the last committed token.\n     * @returns The last committed token.\n     */\n    private consumeCommittedToken(): Token | null {\n        const token = this.committedToken\n        this.committedToken = null\n        return token\n    }\n\n    /**\n     * Consume the next code point.\n     * @returns The consumed code point.\n     */\n    private consumeNextCodePoint(): number {\n        if (this.offset >= this.text.length) {\n            this.lastCodePoint = EOF\n            return EOF\n        }\n\n        this.offset += this.lastCodePoint >= 0x10000 ? 2 : 1\n        if (this.offset >= this.text.length) {\n            this.advanceLocation()\n            this.lastCodePoint = EOF\n            return EOF\n        }\n\n        const cp = this.text.codePointAt(this.offset) as number\n\n        if (\n            isSurrogate(this.text.charCodeAt(this.offset)) &&\n            !isSurrogatePair(this.text.charCodeAt(this.offset + 1))\n        ) {\n            this.reportParseError(\"surrogate-in-input-stream\")\n        }\n        if (isNonCharacter(cp)) {\n            this.reportParseError(\"noncharacter-in-input-stream\")\n        }\n        if (isControl(cp) && !isWhitespace(cp) && cp !== NULL) {\n            this.reportParseError(\"control-character-in-input-stream\")\n        }\n\n        // Skip LF to convert CRLF → LF.\n        if (this.lastCodePoint === CARRIAGE_RETURN && cp === LINE_FEED) {\n            this.lastCodePoint = LINE_FEED\n            this.gaps.push(this.offset)\n            return this.consumeNextCodePoint()\n        }\n\n        // Update locations.\n        this.advanceLocation()\n        this.lastCodePoint = cp\n\n        // To convert CRLF → LF.\n        if (cp === CARRIAGE_RETURN) {\n            return LINE_FEED\n        }\n\n        return cp\n    }\n\n    /**\n     * Advance the current line and column.\n     */\n    private advanceLocation(): void {\n        if (this.lastCodePoint === LINE_FEED) {\n            this.lineTerminators.push(this.offset)\n            this.line += 1\n            this.column = 0\n        } else {\n            this.column += this.lastCodePoint >= 0x10000 ? 2 : 1\n        }\n    }\n\n    /**\n     * Directive reconsuming the current code point as the given state.\n     * @param state The next state.\n     * @returns The next state.\n     */\n    private reconsumeAs(state: TokenizerState): TokenizerState {\n        this.reconsuming = true\n        return state\n    }\n\n    /**\n     * Report an invalid character error.\n     * @param code The error code.\n     */\n    private reportParseError(code: ErrorCode): void {\n        const error = ParseError.fromCode(\n            code,\n            this.offset,\n            this.line,\n            this.column,\n        )\n        this.errors.push(error)\n\n        debug(\"[html] syntax error:\", error.message)\n    }\n\n    /**\n     * Mark the current location as a start of tokens.\n     */\n    private setStartTokenMark(): void {\n        this.tokenStartOffset = this.offset\n        this.tokenStartLine = this.line\n        this.tokenStartColumn = this.column\n    }\n\n    /**\n     * Mark the current location as a start of tokens.\n     */\n    private clearStartTokenMark(): void {\n        this.tokenStartOffset = -1\n    }\n\n    /**\n     * Start new token.\n     * @param type The type of new token.\n     * @returns The new token.\n     */\n    private startToken(type: TokenType): Token {\n        if (this.tokenStartOffset === -1) {\n            this.setStartTokenMark()\n        }\n        const offset = this.tokenStartOffset\n        const line = this.tokenStartLine\n        const column = this.tokenStartColumn\n\n        if (this.currentToken != null) {\n            this.endToken()\n        }\n        this.tokenStartOffset = -1\n\n        const token = (this.currentToken = {\n            type,\n            range: [offset, -1],\n            loc: {\n                start: { line, column },\n                end: { line: -1, column: -1 },\n            },\n            value: \"\",\n        })\n\n        debug(\"[html] start token: %d %s\", offset, token.type)\n        return this.currentToken\n    }\n\n    /**\n     * Commit the current token.\n     * @returns The ended token.\n     */\n    private endToken(): Token | null {\n        if (this.currentToken == null) {\n            throw new Error(\"Invalid state\")\n        }\n        if (this.tokenStartOffset === -1) {\n            this.setStartTokenMark()\n        }\n        const token = this.currentToken\n        const offset = this.tokenStartOffset\n        const line = this.tokenStartLine\n        const column = this.tokenStartColumn\n        const provisional = this.isProvisionalState()\n\n        this.currentToken = null\n        this.tokenStartOffset = -1\n\n        token.range[1] = offset\n        token.loc.end.line = line\n        token.loc.end.column = column\n\n        if (token.range[0] === offset && !provisional) {\n            debug(\n                \"[html] abandon token: %j %s %j\",\n                token.range,\n                token.type,\n                token.value,\n            )\n            return null\n        }\n\n        if (provisional) {\n            if (this.provisionalToken != null) {\n                this.commitProvisionalToken()\n            }\n            this.provisionalToken = token\n            debug(\n                \"[html] provisional-commit token: %j %s %j\",\n                token.range,\n                token.type,\n                token.value,\n            )\n        } else {\n            this.commitToken(token)\n        }\n\n        return token\n    }\n\n    /**\n     * Commit the given token.\n     * @param token The token to commit.\n     */\n    private commitToken(token: Token): void {\n        assert(\n            this.committedToken == null,\n            \"Invalid state: the commited token existed already.\",\n        )\n        debug(\n            \"[html] commit token: %j %j %s %j\",\n            token.range,\n            token.loc,\n            token.type,\n            token.value,\n        )\n\n        this.committedToken = token\n        if (token.type === \"HTMLTagOpen\") {\n            this.lastTagOpenToken = token\n        }\n    }\n\n    /**\n     * Check whether this is provisional state or not.\n     * @returns `true` if this is provisional state.\n     */\n    private isProvisionalState(): boolean {\n        return (\n            this.state.startsWith(\"RCDATA_\") ||\n            this.state.startsWith(\"RAWTEXT_\")\n        )\n    }\n\n    /**\n     * Commit the last provisional committed token.\n     */\n    private commitProvisionalToken(): void {\n        assert(\n            this.provisionalToken != null,\n            \"Invalid state: the provisional token was not found.\",\n        )\n\n        const token = this.provisionalToken\n        this.provisionalToken = null\n\n        if (token.range[0] < token.range[1]) {\n            this.commitToken(token)\n        }\n    }\n\n    /**\n     * Cancel the current token and set the last provisional committed token as the current token.\n     */\n    private rollbackProvisionalToken(): void {\n        assert(this.currentToken != null)\n        assert(this.provisionalToken != null)\n\n        const token = this.currentToken\n        debug(\"[html] rollback token: %d %s\", token.range[0], token.type)\n\n        this.currentToken = this.provisionalToken\n        this.provisionalToken = null\n    }\n\n    /**\n     * Append the given code point into the value of the current token.\n     * @param cp The code point to append.\n     * @param expected The expected type of the current token.\n     */\n    private appendTokenValue(cp: number, expected: TokenType | null): void {\n        const token = this.currentToken\n        if (token == null || (expected != null && token.type !== expected)) {\n            const msg1 = expected ? `\"${expected}\" type` : \"any token\"\n            const msg2 = token ? `\"${token.type}\" type` : \"no token\"\n\n            throw new Error(\n                `Tokenizer: Invalid state. Expected ${msg1}, but got ${msg2}.`,\n            )\n        }\n\n        token.value += String.fromCodePoint(cp)\n    }\n\n    /**\n     * Check whether the current token is appropriate `HTMLEndTagOpen` token.\n     * @returns {boolean} `true` if the current token is appropriate `HTMLEndTagOpen` token.\n     */\n    private isAppropriateEndTagOpen(): boolean {\n        return (\n            this.currentToken != null &&\n            this.lastTagOpenToken != null &&\n            this.currentToken.type === \"HTMLEndTagOpen\" &&\n            this.currentToken.value === this.lastTagOpenToken.value\n        )\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/syntax.html#data-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected DATA(cp: number): TokenizerState {\n        this.clearStartTokenMark()\n\n        while (true) {\n            const type = isWhitespace(cp) ? \"HTMLWhitespace\" : \"HTMLText\"\n            if (this.currentToken != null && this.currentToken.type !== type) {\n                this.endToken()\n                return this.reconsumeAs(this.state)\n            }\n            if (this.currentToken == null) {\n                this.startToken(type)\n            }\n\n            if (cp === AMPERSAND) {\n                this.returnState = \"DATA\"\n                return \"CHARACTER_REFERENCE\"\n            }\n            if (cp === LESS_THAN_SIGN) {\n                this.setStartTokenMark()\n                return \"TAG_OPEN\"\n            }\n            if (cp === LEFT_CURLY_BRACKET && this.expressionEnabled) {\n                this.setStartTokenMark()\n                this.returnState = \"DATA\"\n                return \"V_EXPRESSION_START\"\n            }\n            if (cp === RIGHT_CURLY_BRACKET && this.expressionEnabled) {\n                this.setStartTokenMark()\n                this.returnState = \"DATA\"\n                return \"V_EXPRESSION_END\"\n            }\n            if (cp === EOF) {\n                return \"DATA\"\n            }\n\n            if (cp === NULL) {\n                this.reportParseError(\"unexpected-null-character\")\n            }\n            this.appendTokenValue(cp, type)\n\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/syntax.html#rcdata-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected RCDATA(cp: number): TokenizerState {\n        this.clearStartTokenMark()\n\n        while (true) {\n            const type = isWhitespace(cp) ? \"HTMLWhitespace\" : \"HTMLRCDataText\"\n            if (this.currentToken != null && this.currentToken.type !== type) {\n                this.endToken()\n                return this.reconsumeAs(this.state)\n            }\n            if (this.currentToken == null) {\n                this.startToken(type)\n            }\n\n            if (cp === AMPERSAND) {\n                this.returnState = \"RCDATA\"\n                return \"CHARACTER_REFERENCE\"\n            }\n            if (cp === LESS_THAN_SIGN) {\n                this.setStartTokenMark()\n                return \"RCDATA_LESS_THAN_SIGN\"\n            }\n            if (cp === LEFT_CURLY_BRACKET && this.expressionEnabled) {\n                this.setStartTokenMark()\n                this.returnState = \"RCDATA\"\n                return \"V_EXPRESSION_START\"\n            }\n            if (cp === RIGHT_CURLY_BRACKET && this.expressionEnabled) {\n                this.setStartTokenMark()\n                this.returnState = \"RCDATA\"\n                return \"V_EXPRESSION_END\"\n            }\n            if (cp === EOF) {\n                return \"DATA\"\n            }\n\n            if (cp === NULL) {\n                this.reportParseError(\"unexpected-null-character\")\n                cp = NULL_REPLACEMENT\n            }\n            this.appendTokenValue(cp, type)\n\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/syntax.html#rawtext-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected RAWTEXT(cp: number): TokenizerState {\n        this.clearStartTokenMark()\n\n        while (true) {\n            const type = isWhitespace(cp) ? \"HTMLWhitespace\" : \"HTMLRawText\"\n            if (this.currentToken != null && this.currentToken.type !== type) {\n                this.endToken()\n                return this.reconsumeAs(this.state)\n            }\n            if (this.currentToken == null) {\n                this.startToken(type)\n            }\n\n            if (cp === LESS_THAN_SIGN) {\n                this.setStartTokenMark()\n                return \"RAWTEXT_LESS_THAN_SIGN\"\n            }\n            if (cp === LEFT_CURLY_BRACKET && this.expressionEnabled) {\n                this.setStartTokenMark()\n                this.returnState = \"RAWTEXT\"\n                return \"V_EXPRESSION_START\"\n            }\n            if (cp === RIGHT_CURLY_BRACKET && this.expressionEnabled) {\n                this.setStartTokenMark()\n                this.returnState = \"RAWTEXT\"\n                return \"V_EXPRESSION_END\"\n            }\n            if (cp === EOF) {\n                return \"DATA\"\n            }\n\n            if (cp === NULL) {\n                this.reportParseError(\"unexpected-null-character\")\n                cp = NULL_REPLACEMENT\n            }\n            this.appendTokenValue(cp, type)\n\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected TAG_OPEN(cp: number): TokenizerState {\n        if (cp === EXCLAMATION_MARK) {\n            return \"MARKUP_DECLARATION_OPEN\"\n        }\n        if (cp === SOLIDUS) {\n            return \"END_TAG_OPEN\"\n        }\n        if (isLetter(cp)) {\n            this.startToken(\"HTMLTagOpen\")\n            return this.reconsumeAs(\"TAG_NAME\")\n        }\n        if (cp === QUESTION_MARK) {\n            this.reportParseError(\n                \"unexpected-question-mark-instead-of-tag-name\",\n            )\n            this.startToken(\"HTMLBogusComment\")\n            return this.reconsumeAs(\"BOGUS_COMMENT\")\n        }\n        if (cp === EOF) {\n            this.clearStartTokenMark()\n            this.reportParseError(\"eof-before-tag-name\")\n            this.appendTokenValue(LESS_THAN_SIGN, \"HTMLText\")\n            return \"DATA\"\n        }\n\n        this.reportParseError(\"invalid-first-character-of-tag-name\")\n        this.appendTokenValue(LESS_THAN_SIGN, \"HTMLText\")\n        return this.reconsumeAs(\"DATA\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/syntax.html#end-tag-open-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected END_TAG_OPEN(cp: number): TokenizerState {\n        if (isLetter(cp)) {\n            this.startToken(\"HTMLEndTagOpen\")\n            return this.reconsumeAs(\"TAG_NAME\")\n        }\n        if (cp === GREATER_THAN_SIGN) {\n            this.endToken() // < Commit or abandon the current text token.\n            this.reportParseError(\"missing-end-tag-name\")\n            return \"DATA\"\n        }\n        if (cp === EOF) {\n            this.clearStartTokenMark()\n            this.reportParseError(\"eof-before-tag-name\")\n            this.appendTokenValue(LESS_THAN_SIGN, \"HTMLText\")\n            this.appendTokenValue(SOLIDUS, \"HTMLText\")\n            return \"DATA\"\n        }\n\n        this.reportParseError(\"invalid-first-character-of-tag-name\")\n        this.startToken(\"HTMLBogusComment\")\n        return this.reconsumeAs(\"BOGUS_COMMENT\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected TAG_NAME(cp: number): TokenizerState {\n        while (true) {\n            if (isWhitespace(cp)) {\n                this.endToken()\n                return \"BEFORE_ATTRIBUTE_NAME\"\n            }\n            if (cp === SOLIDUS) {\n                this.endToken()\n                this.setStartTokenMark()\n                return \"SELF_CLOSING_START_TAG\"\n            }\n            if (cp === GREATER_THAN_SIGN) {\n                this.startToken(\"HTMLTagClose\")\n                return \"DATA\"\n            }\n            if (cp === EOF) {\n                this.reportParseError(\"eof-in-tag\")\n                return \"DATA\"\n            }\n            if (cp === NULL) {\n                this.reportParseError(\"unexpected-null-character\")\n                cp = NULL_REPLACEMENT\n            }\n\n            this.appendTokenValue(\n                isUpperLetter(cp) ? toLowerCodePoint(cp) : cp,\n                null,\n            )\n\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/syntax.html#rcdata-less-than-sign-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected RCDATA_LESS_THAN_SIGN(cp: number): TokenizerState {\n        if (cp === SOLIDUS) {\n            this.buffer = []\n            return \"RCDATA_END_TAG_OPEN\"\n        }\n\n        this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRCDataText\")\n        return this.reconsumeAs(\"RCDATA\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/syntax.html#rcdata-end-tag-open-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected RCDATA_END_TAG_OPEN(cp: number): TokenizerState {\n        if (isLetter(cp)) {\n            this.startToken(\"HTMLEndTagOpen\")\n            return this.reconsumeAs(\"RCDATA_END_TAG_NAME\")\n        }\n\n        this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRCDataText\")\n        this.appendTokenValue(SOLIDUS, \"HTMLRCDataText\")\n        return this.reconsumeAs(\"RCDATA\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/syntax.html#rcdata-end-tag-name-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected RCDATA_END_TAG_NAME(cp: number): TokenizerState {\n        while (true) {\n            if (isWhitespace(cp) && this.isAppropriateEndTagOpen()) {\n                this.endToken()\n                return \"BEFORE_ATTRIBUTE_NAME\"\n            }\n            if (cp === SOLIDUS && this.isAppropriateEndTagOpen()) {\n                this.endToken()\n                this.setStartTokenMark()\n                return \"SELF_CLOSING_START_TAG\"\n            }\n            if (cp === GREATER_THAN_SIGN && this.isAppropriateEndTagOpen()) {\n                this.startToken(\"HTMLTagClose\")\n                return \"DATA\"\n            }\n            if (!isLetter(cp)) {\n                this.rollbackProvisionalToken()\n                this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRCDataText\")\n                this.appendTokenValue(SOLIDUS, \"HTMLRCDataText\")\n                for (const cp1 of this.buffer) {\n                    this.appendTokenValue(cp1, \"HTMLRCDataText\")\n                }\n                return this.reconsumeAs(\"RCDATA\")\n            }\n\n            this.appendTokenValue(\n                isUpperLetter(cp) ? toLowerCodePoint(cp) : cp,\n                \"HTMLEndTagOpen\",\n            )\n            this.buffer.push(cp)\n\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/syntax.html#rawtext-less-than-sign-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected RAWTEXT_LESS_THAN_SIGN(cp: number): TokenizerState {\n        if (cp === SOLIDUS) {\n            this.buffer = []\n            return \"RAWTEXT_END_TAG_OPEN\"\n        }\n\n        this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRawText\")\n        return this.reconsumeAs(\"RAWTEXT\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/syntax.html#rawtext-end-tag-open-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected RAWTEXT_END_TAG_OPEN(cp: number): TokenizerState {\n        if (isLetter(cp)) {\n            this.startToken(\"HTMLEndTagOpen\")\n            return this.reconsumeAs(\"RAWTEXT_END_TAG_NAME\")\n        }\n\n        this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRawText\")\n        this.appendTokenValue(SOLIDUS, \"HTMLRawText\")\n        return this.reconsumeAs(\"RAWTEXT\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/syntax.html#rawtext-end-tag-name-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected RAWTEXT_END_TAG_NAME(cp: number): TokenizerState {\n        while (true) {\n            if (cp === SOLIDUS && this.isAppropriateEndTagOpen()) {\n                this.endToken()\n                this.setStartTokenMark()\n                return \"SELF_CLOSING_START_TAG\"\n            }\n            if (cp === GREATER_THAN_SIGN && this.isAppropriateEndTagOpen()) {\n                this.startToken(\"HTMLTagClose\")\n                return \"DATA\"\n            }\n            if (isWhitespace(cp) && this.isAppropriateEndTagOpen()) {\n                this.endToken()\n                return \"BEFORE_ATTRIBUTE_NAME\"\n            }\n            if (!isLetter(cp) && !maybeValidCustomBlock.call(this, cp)) {\n                this.rollbackProvisionalToken()\n                this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRawText\")\n                this.appendTokenValue(SOLIDUS, \"HTMLRawText\")\n                for (const cp1 of this.buffer) {\n                    this.appendTokenValue(cp1, \"HTMLRawText\")\n                }\n                return this.reconsumeAs(\"RAWTEXT\")\n            }\n\n            this.appendTokenValue(\n                isUpperLetter(cp) ? toLowerCodePoint(cp) : cp,\n                \"HTMLEndTagOpen\",\n            )\n            this.buffer.push(cp)\n\n            cp = this.consumeNextCodePoint()\n        }\n\n        function maybeValidCustomBlock(this: Tokenizer, nextCp: number) {\n            return (\n                this.currentToken &&\n                this.lastTagOpenToken &&\n                this.lastTagOpenToken.value.startsWith(\n                    this.currentToken.value + String.fromCodePoint(nextCp),\n                )\n            )\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#before-attribute-name-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected BEFORE_ATTRIBUTE_NAME(cp: number): TokenizerState {\n        while (isWhitespace(cp)) {\n            cp = this.consumeNextCodePoint()\n        }\n\n        if (cp === SOLIDUS || cp === GREATER_THAN_SIGN || cp === EOF) {\n            return this.reconsumeAs(\"AFTER_ATTRIBUTE_NAME\")\n        }\n\n        if (cp === EQUALS_SIGN) {\n            this.reportParseError(\n                \"unexpected-equals-sign-before-attribute-name\",\n            )\n            this.startToken(\"HTMLIdentifier\")\n            this.appendTokenValue(cp, \"HTMLIdentifier\")\n            return \"ATTRIBUTE_NAME\"\n        }\n\n        this.startToken(\"HTMLIdentifier\")\n        return this.reconsumeAs(\"ATTRIBUTE_NAME\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#attribute-name-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected ATTRIBUTE_NAME(cp: number): TokenizerState {\n        while (true) {\n            if (\n                isWhitespace(cp) ||\n                cp === SOLIDUS ||\n                cp === GREATER_THAN_SIGN ||\n                cp === EOF\n            ) {\n                this.endToken()\n                return this.reconsumeAs(\"AFTER_ATTRIBUTE_NAME\")\n            }\n            if (cp === EQUALS_SIGN) {\n                this.startToken(\"HTMLAssociation\")\n                return \"BEFORE_ATTRIBUTE_VALUE\"\n            }\n\n            if (cp === NULL) {\n                this.reportParseError(\"unexpected-null-character\")\n                cp = NULL_REPLACEMENT\n            }\n            if (\n                cp === QUOTATION_MARK ||\n                cp === APOSTROPHE ||\n                cp === LESS_THAN_SIGN\n            ) {\n                this.reportParseError(\"unexpected-character-in-attribute-name\")\n            }\n\n            this.appendTokenValue(\n                isUpperLetter(cp) ? toLowerCodePoint(cp) : cp,\n                \"HTMLIdentifier\",\n            )\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#after-attribute-name-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected AFTER_ATTRIBUTE_NAME(cp: number): TokenizerState {\n        while (isWhitespace(cp)) {\n            cp = this.consumeNextCodePoint()\n        }\n\n        if (cp === SOLIDUS) {\n            this.setStartTokenMark()\n            return \"SELF_CLOSING_START_TAG\"\n        }\n        if (cp === EQUALS_SIGN) {\n            this.startToken(\"HTMLAssociation\")\n            return \"BEFORE_ATTRIBUTE_VALUE\"\n        }\n        if (cp === GREATER_THAN_SIGN) {\n            this.startToken(\"HTMLTagClose\")\n            return \"DATA\"\n        }\n\n        if (cp === EOF) {\n            this.reportParseError(\"eof-in-tag\")\n            return \"DATA\"\n        }\n\n        this.startToken(\"HTMLIdentifier\")\n        return this.reconsumeAs(\"ATTRIBUTE_NAME\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#before-attribute-value-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected BEFORE_ATTRIBUTE_VALUE(cp: number): TokenizerState {\n        this.endToken()\n\n        while (isWhitespace(cp)) {\n            cp = this.consumeNextCodePoint()\n        }\n\n        if (cp === GREATER_THAN_SIGN) {\n            this.reportParseError(\"missing-attribute-value\")\n            this.startToken(\"HTMLTagClose\")\n            return \"DATA\"\n        }\n\n        this.startToken(\"HTMLLiteral\")\n        if (cp === QUOTATION_MARK) {\n            return \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"\n        }\n        if (cp === APOSTROPHE) {\n            return \"ATTRIBUTE_VALUE_SINGLE_QUOTED\"\n        }\n        return this.reconsumeAs(\"ATTRIBUTE_VALUE_UNQUOTED\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#attribute-value-(double-quoted)-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected ATTRIBUTE_VALUE_DOUBLE_QUOTED(cp: number): TokenizerState {\n        while (true) {\n            if (cp === QUOTATION_MARK) {\n                return \"AFTER_ATTRIBUTE_VALUE_QUOTED\"\n            }\n            if (cp === AMPERSAND) {\n                this.returnState = \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"\n                return \"CHARACTER_REFERENCE\"\n            }\n\n            if (cp === NULL) {\n                this.reportParseError(\"unexpected-null-character\")\n                cp = NULL_REPLACEMENT\n            }\n            if (cp === EOF) {\n                this.reportParseError(\"eof-in-tag\")\n                return \"DATA\"\n            }\n\n            this.appendTokenValue(cp, \"HTMLLiteral\")\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#attribute-value-(single-quoted)-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected ATTRIBUTE_VALUE_SINGLE_QUOTED(cp: number): TokenizerState {\n        while (true) {\n            if (cp === APOSTROPHE) {\n                return \"AFTER_ATTRIBUTE_VALUE_QUOTED\"\n            }\n            if (cp === AMPERSAND) {\n                this.returnState = \"ATTRIBUTE_VALUE_SINGLE_QUOTED\"\n                return \"CHARACTER_REFERENCE\"\n            }\n\n            if (cp === NULL) {\n                this.reportParseError(\"unexpected-null-character\")\n                cp = NULL_REPLACEMENT\n            }\n            if (cp === EOF) {\n                this.reportParseError(\"eof-in-tag\")\n                return \"DATA\"\n            }\n\n            this.appendTokenValue(cp, \"HTMLLiteral\")\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#attribute-value-(unquoted)-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected ATTRIBUTE_VALUE_UNQUOTED(cp: number): TokenizerState {\n        while (true) {\n            if (isWhitespace(cp)) {\n                this.endToken()\n                return \"BEFORE_ATTRIBUTE_NAME\"\n            }\n            if (cp === AMPERSAND) {\n                this.returnState = \"ATTRIBUTE_VALUE_UNQUOTED\"\n                return \"CHARACTER_REFERENCE\"\n            }\n            if (cp === GREATER_THAN_SIGN) {\n                this.startToken(\"HTMLTagClose\")\n                return \"DATA\"\n            }\n\n            if (cp === NULL) {\n                this.reportParseError(\"unexpected-null-character\")\n                cp = NULL_REPLACEMENT\n            }\n            if (\n                cp === QUOTATION_MARK ||\n                cp === APOSTROPHE ||\n                cp === LESS_THAN_SIGN ||\n                cp === EQUALS_SIGN ||\n                cp === GRAVE_ACCENT\n            ) {\n                this.reportParseError(\n                    \"unexpected-character-in-unquoted-attribute-value\",\n                )\n            }\n            if (cp === EOF) {\n                this.reportParseError(\"eof-in-tag\")\n                return \"DATA\"\n            }\n\n            this.appendTokenValue(cp, \"HTMLLiteral\")\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#after-attribute-value-(quoted)-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected AFTER_ATTRIBUTE_VALUE_QUOTED(cp: number): TokenizerState {\n        this.endToken()\n\n        if (isWhitespace(cp)) {\n            return \"BEFORE_ATTRIBUTE_NAME\"\n        }\n        if (cp === SOLIDUS) {\n            this.setStartTokenMark()\n            return \"SELF_CLOSING_START_TAG\"\n        }\n        if (cp === GREATER_THAN_SIGN) {\n            this.startToken(\"HTMLTagClose\")\n            return \"DATA\"\n        }\n\n        if (cp === EOF) {\n            this.reportParseError(\"eof-in-tag\")\n            return \"DATA\"\n        }\n\n        this.reportParseError(\"missing-whitespace-between-attributes\")\n        return this.reconsumeAs(\"BEFORE_ATTRIBUTE_NAME\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#self-closing-start-tag-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected SELF_CLOSING_START_TAG(cp: number): TokenizerState {\n        if (cp === GREATER_THAN_SIGN) {\n            this.startToken(\"HTMLSelfClosingTagClose\")\n\n            // Vue.js supports self-closing elements.\n            // So don't switch to RCDATA/RAWTEXT from any elements.\n            return \"DATA\"\n        }\n\n        if (cp === EOF) {\n            this.reportParseError(\"eof-in-tag\")\n            return \"DATA\"\n        }\n\n        this.reportParseError(\"unexpected-solidus-in-tag\")\n        this.clearStartTokenMark()\n        return this.reconsumeAs(\"BEFORE_ATTRIBUTE_NAME\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#bogus-comment-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected BOGUS_COMMENT(cp: number): TokenizerState {\n        while (true) {\n            if (cp === GREATER_THAN_SIGN) {\n                return \"DATA\"\n            }\n\n            if (cp === EOF) {\n                return \"DATA\"\n            }\n            if (cp === NULL) {\n                cp = NULL_REPLACEMENT\n            }\n            this.appendTokenValue(cp, null)\n\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#markup-declaration-open-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected MARKUP_DECLARATION_OPEN(cp: number): TokenizerState {\n        if (cp === HYPHEN_MINUS && this.text[this.offset + 1] === \"-\") {\n            this.offset += 1\n            this.column += 1\n\n            this.startToken(\"HTMLComment\")\n            return \"COMMENT_START\"\n        }\n        if (\n            cp === LATIN_CAPITAL_D &&\n            this.text.slice(this.offset + 1, this.offset + 7) === \"OCTYPE\"\n        ) {\n            // It does not support DOCTYPE.\n            // this.offset += 6\n            // this.column += 6\n            // return \"DOCTYPE\"\n\n            // TODO\n            this.startToken(\"HTMLBogusComment\")\n            this.appendTokenValue(cp, \"HTMLBogusComment\")\n            return \"BOGUS_COMMENT\"\n        }\n        if (\n            cp === LEFT_SQUARE_BRACKET &&\n            this.text.slice(this.offset + 1, this.offset + 7) === \"CDATA[\"\n        ) {\n            this.offset += 6\n            this.column += 6\n\n            if (this.namespace === NS.HTML) {\n                this.reportParseError(\"cdata-in-html-content\")\n                this.startToken(\"HTMLBogusComment\").value = \"[CDATA[\"\n                return \"BOGUS_COMMENT\"\n            }\n\n            this.startToken(\"HTMLCDataText\")\n            return \"CDATA_SECTION\"\n        }\n\n        this.reportParseError(\"incorrectly-opened-comment\")\n        this.startToken(\"HTMLBogusComment\")\n        return this.reconsumeAs(\"BOGUS_COMMENT\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#comment-start-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected COMMENT_START(cp: number): TokenizerState {\n        if (cp === HYPHEN_MINUS) {\n            return \"COMMENT_START_DASH\"\n        }\n        if (cp === GREATER_THAN_SIGN) {\n            this.reportParseError(\"abrupt-closing-of-empty-comment\")\n            return \"DATA\"\n        }\n\n        return this.reconsumeAs(\"COMMENT\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#comment-start-dash-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected COMMENT_START_DASH(cp: number): TokenizerState {\n        if (cp === HYPHEN_MINUS) {\n            return \"COMMENT_END\"\n        }\n\n        if (cp === GREATER_THAN_SIGN) {\n            this.reportParseError(\"abrupt-closing-of-empty-comment\")\n            return \"DATA\"\n        }\n        if (cp === EOF) {\n            this.reportParseError(\"eof-in-comment\")\n            return \"DATA\"\n        }\n\n        this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n        return this.reconsumeAs(\"COMMENT\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#comment-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected COMMENT(cp: number): TokenizerState {\n        while (true) {\n            if (cp === LESS_THAN_SIGN) {\n                this.appendTokenValue(LESS_THAN_SIGN, \"HTMLComment\")\n                return \"COMMENT_LESS_THAN_SIGN\"\n            }\n            if (cp === HYPHEN_MINUS) {\n                return \"COMMENT_END_DASH\"\n            }\n\n            if (cp === NULL) {\n                this.reportParseError(\"unexpected-null-character\")\n                cp = NULL_REPLACEMENT\n            }\n            if (cp === EOF) {\n                this.reportParseError(\"eof-in-comment\")\n                return \"DATA\"\n            }\n\n            this.appendTokenValue(cp, \"HTMLComment\")\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected COMMENT_LESS_THAN_SIGN(cp: number): TokenizerState {\n        while (true) {\n            if (cp === EXCLAMATION_MARK) {\n                this.appendTokenValue(cp, \"HTMLComment\")\n                return \"COMMENT_LESS_THAN_SIGN_BANG\"\n            }\n            if (cp !== LESS_THAN_SIGN) {\n                return this.reconsumeAs(\"COMMENT\")\n            }\n\n            this.appendTokenValue(cp, \"HTMLComment\")\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-bang-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected COMMENT_LESS_THAN_SIGN_BANG(cp: number): TokenizerState {\n        if (cp === HYPHEN_MINUS) {\n            return \"COMMENT_LESS_THAN_SIGN_BANG_DASH\"\n        }\n        return this.reconsumeAs(\"COMMENT\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-bang-dash-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected COMMENT_LESS_THAN_SIGN_BANG_DASH(cp: number): TokenizerState {\n        if (cp === HYPHEN_MINUS) {\n            return \"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\"\n        }\n        return this.reconsumeAs(\"COMMENT_END_DASH\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-bang-dash-dash-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH(\n        cp: number,\n    ): TokenizerState {\n        if (cp !== GREATER_THAN_SIGN && cp !== EOF) {\n            this.reportParseError(\"nested-comment\")\n        }\n        return this.reconsumeAs(\"COMMENT_END\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#comment-end-dash-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected COMMENT_END_DASH(cp: number): TokenizerState {\n        if (cp === HYPHEN_MINUS) {\n            return \"COMMENT_END\"\n        }\n\n        if (cp === EOF) {\n            this.reportParseError(\"eof-in-comment\")\n            return \"DATA\"\n        }\n\n        this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n        return this.reconsumeAs(\"COMMENT\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#comment-end-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected COMMENT_END(cp: number): TokenizerState {\n        while (true) {\n            if (cp === GREATER_THAN_SIGN) {\n                return \"DATA\"\n            }\n            if (cp === EXCLAMATION_MARK) {\n                return \"COMMENT_END_BANG\"\n            }\n\n            if (cp === EOF) {\n                this.reportParseError(\"eof-in-comment\")\n                return \"DATA\"\n            }\n\n            this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n\n            if (cp !== HYPHEN_MINUS) {\n                this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n                return this.reconsumeAs(\"COMMENT\")\n            }\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#comment-end-bang-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected COMMENT_END_BANG(cp: number): TokenizerState {\n        if (cp === HYPHEN_MINUS) {\n            this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n            this.appendTokenValue(EXCLAMATION_MARK, \"HTMLComment\")\n            return \"COMMENT_END_DASH\"\n        }\n\n        if (cp === GREATER_THAN_SIGN) {\n            this.reportParseError(\"incorrectly-closed-comment\")\n            return \"DATA\"\n        }\n        if (cp === EOF) {\n            this.reportParseError(\"eof-in-comment\")\n            return \"DATA\"\n        }\n\n        this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n        this.appendTokenValue(EXCLAMATION_MARK, \"HTMLComment\")\n        return this.reconsumeAs(\"COMMENT\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#cdata-section-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected CDATA_SECTION(cp: number): TokenizerState {\n        while (true) {\n            if (cp === RIGHT_SQUARE_BRACKET) {\n                return \"CDATA_SECTION_BRACKET\"\n            }\n\n            if (cp === EOF) {\n                this.reportParseError(\"eof-in-cdata\")\n                return \"DATA\"\n            }\n\n            this.appendTokenValue(cp, \"HTMLCDataText\")\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#cdata-section-bracket-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected CDATA_SECTION_BRACKET(cp: number): TokenizerState {\n        if (cp === RIGHT_SQUARE_BRACKET) {\n            return \"CDATA_SECTION_END\"\n        }\n\n        this.appendTokenValue(RIGHT_SQUARE_BRACKET, \"HTMLCDataText\")\n        return this.reconsumeAs(\"CDATA_SECTION\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#cdata-section-end-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected CDATA_SECTION_END(cp: number): TokenizerState {\n        while (true) {\n            if (cp === GREATER_THAN_SIGN) {\n                return \"DATA\"\n            }\n            if (cp !== RIGHT_SQUARE_BRACKET) {\n                this.appendTokenValue(RIGHT_SQUARE_BRACKET, \"HTMLCDataText\")\n                this.appendTokenValue(RIGHT_SQUARE_BRACKET, \"HTMLCDataText\")\n                return this.reconsumeAs(\"CDATA_SECTION\")\n            }\n\n            this.appendTokenValue(RIGHT_SQUARE_BRACKET, \"HTMLCDataText\")\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#character-reference-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected CHARACTER_REFERENCE(cp: number): TokenizerState {\n        this.crStartOffset = this.offset - 1\n        this.buffer = [AMPERSAND]\n\n        if (isWhitespace(cp) || cp === LESS_THAN_SIGN || cp === EOF) {\n            return this.reconsumeAs(\"CHARACTER_REFERENCE_END\")\n        }\n        if (cp === NUMBER_SIGN) {\n            this.buffer.push(cp)\n            return \"NUMERIC_CHARACTER_REFERENCE\"\n        }\n        return this.reconsumeAs(\"NAMED_CHARACTER_REFERENCE\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected NAMED_CHARACTER_REFERENCE(cp: number): TokenizerState {\n        for (const entitySet of entitySets) {\n            const length = entitySet.length\n            const entities = entitySet.entities\n            const text = this.text.slice(this.offset, this.offset + length)\n            const codepoints = entities[text]\n\n            if (codepoints == null) {\n                continue\n            }\n\n            const semi = text.endsWith(\";\")\n            const next = this.text.codePointAt(this.offset + 1)\n\n            this.offset += length - 1\n            this.column += length - 1\n\n            if (\n                this.returnState.startsWith(\"ATTR\") &&\n                !semi &&\n                next != null &&\n                (next === EQUALS_SIGN || isLetter(next) || isDigit(next))\n            ) {\n                for (const cp1 of text) {\n                    this.buffer.push(cp1.codePointAt(0) as number)\n                }\n            } else {\n                if (!semi) {\n                    this.reportParseError(\n                        \"missing-semicolon-after-character-reference\",\n                    )\n                }\n                this.buffer = codepoints\n            }\n\n            return \"CHARACTER_REFERENCE_END\"\n        }\n\n        for (const cp0 of this.buffer) {\n            this.appendTokenValue(cp0, null)\n        }\n        this.appendTokenValue(cp, null)\n\n        return \"AMBIGUOUS_AMPERSAND\"\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#ambiguous-ampersand-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected AMBIGUOUS_AMPERSAND(cp: number): TokenizerState {\n        while (isDigit(cp) || isLetter(cp)) {\n            this.appendTokenValue(cp, null)\n            cp = this.consumeNextCodePoint()\n        }\n\n        if (cp === SEMICOLON) {\n            this.reportParseError(\"unknown-named-character-reference\")\n        }\n        return this.reconsumeAs(this.returnState)\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected NUMERIC_CHARACTER_REFERENCE(cp: number): TokenizerState {\n        this.crCode = 0\n\n        if (cp === LATIN_SMALL_X || cp === LATIN_CAPITAL_X) {\n            this.buffer.push(cp)\n            return \"HEXADEMICAL_CHARACTER_REFERENCE_START\"\n        }\n        return this.reconsumeAs(\"DECIMAL_CHARACTER_REFERENCE_START\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#hexademical-character-reference-start-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected HEXADEMICAL_CHARACTER_REFERENCE_START(\n        cp: number,\n    ): TokenizerState {\n        if (isHexDigit(cp)) {\n            return this.reconsumeAs(\"HEXADEMICAL_CHARACTER_REFERENCE\")\n        }\n\n        this.reportParseError(\n            \"absence-of-digits-in-numeric-character-reference\",\n        )\n        return this.reconsumeAs(\"CHARACTER_REFERENCE_END\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#decimal-character-reference-start-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected DECIMAL_CHARACTER_REFERENCE_START(cp: number): TokenizerState {\n        if (isDigit(cp)) {\n            return this.reconsumeAs(\"DECIMAL_CHARACTER_REFERENCE\")\n        }\n\n        this.reportParseError(\n            \"absence-of-digits-in-numeric-character-reference\",\n        )\n        return this.reconsumeAs(\"CHARACTER_REFERENCE_END\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#hexademical-character-reference-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected HEXADEMICAL_CHARACTER_REFERENCE(cp: number): TokenizerState {\n        while (true) {\n            if (isDigit(cp)) {\n                this.crCode = 16 * this.crCode + (cp - 0x30)\n            } else if (isUpperHexDigit(cp)) {\n                this.crCode = 16 * this.crCode + (cp - 0x37)\n            } else if (isLowerHexDigit(cp)) {\n                this.crCode = 16 * this.crCode + (cp - 0x57)\n            } else {\n                if (cp === SEMICOLON) {\n                    return \"NUMERIC_CHARACTER_REFERENCE_END\"\n                }\n\n                this.reportParseError(\n                    \"missing-semicolon-after-character-reference\",\n                )\n                return this.reconsumeAs(\"NUMERIC_CHARACTER_REFERENCE_END\")\n            }\n\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#decimal-character-reference-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected DECIMAL_CHARACTER_REFERENCE(cp: number): TokenizerState {\n        while (true) {\n            if (isDigit(cp)) {\n                this.crCode = 10 * this.crCode + (cp - 0x30)\n            } else {\n                if (cp === SEMICOLON) {\n                    return \"NUMERIC_CHARACTER_REFERENCE_END\"\n                }\n\n                this.reportParseError(\n                    \"missing-semicolon-after-character-reference\",\n                )\n                return this.reconsumeAs(\"NUMERIC_CHARACTER_REFERENCE_END\")\n            }\n\n            cp = this.consumeNextCodePoint()\n        }\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected NUMERIC_CHARACTER_REFERENCE_END(_cp: number): TokenizerState {\n        let code = this.crCode\n\n        if (code === 0) {\n            this.reportParseError(\"null-character-reference\")\n            code = NULL_REPLACEMENT\n        } else if (code > 0x10ffff) {\n            this.reportParseError(\"character-reference-outside-unicode-range\")\n            code = NULL_REPLACEMENT\n        } else if (isSurrogate(code)) {\n            this.reportParseError(\"surrogate-character-reference\")\n            code = NULL_REPLACEMENT\n        } else if (isNonCharacter(code)) {\n            this.reportParseError(\"noncharacter-character-reference\")\n        } else if (code === 0x0d || (isControl(code) && !isWhitespace(code))) {\n            this.reportParseError(\"control-character-reference\")\n            code = alternativeCR.get(code) || code\n        }\n\n        this.buffer = [code]\n        return this.reconsumeAs(\"CHARACTER_REFERENCE_END\")\n    }\n\n    /**\n     * https://html.spec.whatwg.org/multipage/parsing.html#character-reference-end-state\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected CHARACTER_REFERENCE_END(_cp: number): TokenizerState {\n        assert(this.currentToken != null)\n\n        // The this.buffer.length is not new length since it includes surrogate pairs.\n        // Calculate new length.\n        const token = this.currentToken\n        const len0 = token.value.length\n        for (const cp1 of this.buffer) {\n            this.appendTokenValue(cp1, null)\n        }\n        const newLength = token.value.length - len0\n\n        // Make gaps in the difference of length.\n        for (let i = this.crStartOffset + newLength; i < this.offset; ++i) {\n            this.gaps.push(i)\n        }\n\n        return this.reconsumeAs(this.returnState)\n    }\n\n    /**\n     * Original state.\n     * Create `{{ `token.\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected V_EXPRESSION_START(cp: number): TokenizerState {\n        if (cp === LEFT_CURLY_BRACKET) {\n            this.startToken(\"VExpressionStart\")\n            this.appendTokenValue(LEFT_CURLY_BRACKET, null)\n            this.appendTokenValue(LEFT_CURLY_BRACKET, null)\n\n            if (!this.parserOptions.vueFeatures?.interpolationAsNonHTML) {\n                return this.returnState\n            }\n\n            const closeIndex = this.text.indexOf(\"}}\", this.offset + 1)\n            if (closeIndex === -1) {\n                this.reportParseError(\"x-missing-interpolation-end\")\n                return this.returnState\n            }\n            this.vExpressionScriptState = {\n                state: this.returnState,\n            }\n            return \"V_EXPRESSION_DATA\"\n        }\n\n        this.appendTokenValue(LEFT_CURLY_BRACKET, null)\n        return this.reconsumeAs(this.returnState)\n    }\n\n    /**\n     * Original state.\n     * Parse in interpolation.\n     * @see https://github.com/vuejs/vue-next/blob/3a6b1207fa39cb35eed5bae0b5fdcdb465926bca/packages/compiler-core/src/parse.ts#L752\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected V_EXPRESSION_DATA(cp: number): TokenizerState {\n        this.clearStartTokenMark()\n        const state = this.vExpressionScriptState!.state\n\n        while (true) {\n            const type = isWhitespace(cp)\n                ? \"HTMLWhitespace\"\n                : state === \"RCDATA\"\n                ? \"HTMLRawText\"\n                : state === \"RAWTEXT\"\n                ? \"HTMLRCDataText\"\n                : \"HTMLText\"\n            if (this.currentToken != null && this.currentToken.type !== type) {\n                this.endToken()\n                return this.reconsumeAs(this.state)\n            }\n            if (this.currentToken == null) {\n                this.startToken(type)\n            }\n\n            if (cp === AMPERSAND && state !== \"RAWTEXT\") {\n                this.returnState = \"V_EXPRESSION_DATA\"\n                return \"CHARACTER_REFERENCE\"\n            }\n            // if (cp === LESS_THAN_SIGN) {\n            //     this.setStartTokenMark()\n            //     return \"TAG_OPEN\"\n            // }\n            if (cp === RIGHT_CURLY_BRACKET) {\n                this.setStartTokenMark()\n                this.returnState = \"V_EXPRESSION_DATA\"\n                return \"V_EXPRESSION_END\"\n            }\n            // Already checked\n            /* istanbul ignore next */\n            if (cp === EOF) {\n                this.reportParseError(\"x-missing-interpolation-end\")\n                return \"DATA\"\n            }\n\n            if (cp === NULL) {\n                this.reportParseError(\"unexpected-null-character\")\n            }\n            this.appendTokenValue(cp, type)\n\n            cp = this.consumeNextCodePoint()\n        }\n    }\n    /**\n     * Create `}} `token.\n     * @param cp The current code point.\n     * @returns The next state.\n     */\n    protected V_EXPRESSION_END(cp: number): TokenizerState {\n        if (cp === RIGHT_CURLY_BRACKET) {\n            this.startToken(\"VExpressionEnd\")\n            this.appendTokenValue(RIGHT_CURLY_BRACKET, null)\n            this.appendTokenValue(RIGHT_CURLY_BRACKET, null)\n            return this.vExpressionScriptState\n                ? this.vExpressionScriptState.state\n                : this.returnState\n        }\n\n        this.appendTokenValue(RIGHT_CURLY_BRACKET, null)\n        return this.reconsumeAs(this.returnState)\n    }\n}\n\n/*eslint-enable no-constant-condition, no-param-reassign */\n","/**\n * This file is copied from `eslint/lib/util/node-event-generator.js`\n */\nimport EventEmitter from \"events\"\nimport esquery, {Selector} from \"esquery\"\nimport union from \"lodash/union\"\nimport intersection from \"lodash/intersection\"\nimport memoize from \"lodash/memoize\"\nimport {Node} from \"../ast\"\n\ninterface NodeSelector {\n    rawSelector: string\n    isExit: boolean\n    parsedSelector: Selector\n    listenerTypes: string[] | null\n    attributeCount: number\n    identifierCount: number\n}\n\n/**\n* Gets the possible types of a selector\n* @param parsedSelector An object (from esquery) describing the matching behavior of the selector\n* @returns The node types that could possibly trigger this selector, or `null` if all node types could trigger it\n*/\nfunction getPossibleTypes(parsedSelector: Selector): string[] | null {\n    switch (parsedSelector.type) {\n        case \"identifier\":\n            return [parsedSelector.value]\n\n        case \"matches\": {\n            const typesForComponents = parsedSelector.selectors.map(getPossibleTypes)\n\n            if (typesForComponents.every(Boolean)) {\n                return union(...(typesForComponents as string[][]))\n            }\n            return null\n        }\n\n        case \"compound\": {\n            const typesForComponents = parsedSelector.selectors.map(getPossibleTypes).filter(Boolean) as string[][]\n\n            // If all of the components could match any type, then the compound could also match any type.\n            if (!typesForComponents.length) {\n                return null\n            }\n\n            /*\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             */\n            return intersection(...typesForComponents)\n        }\n\n        case \"child\":\n        case \"descendant\":\n        case \"sibling\":\n        case \"adjacent\":\n            return getPossibleTypes(parsedSelector.right)\n\n        default:\n            return null\n    }\n}\n\n/**\n * Counts the number of class, pseudo-class, and attribute queries in this selector\n * @param parsedSelector An object (from esquery) describing the selector's matching behavior\n * @returns The number of class, pseudo-class, and attribute queries in this selector\n */\nfunction countClassAttributes(parsedSelector: Selector): number {\n    switch (parsedSelector.type) {\n        case \"child\":\n        case \"descendant\":\n        case \"sibling\":\n        case \"adjacent\":\n            return countClassAttributes(parsedSelector.left) + countClassAttributes(parsedSelector.right)\n\n        case \"compound\":\n        case \"not\":\n        case \"matches\":\n            return parsedSelector.selectors.reduce((sum, childSelector) => sum + countClassAttributes(childSelector), 0)\n\n        case \"attribute\":\n        case \"field\":\n        case \"nth-child\":\n        case \"nth-last-child\":\n            return 1\n\n        default:\n            return 0\n    }\n}\n\n/**\n * Counts the number of identifier queries in this selector\n * @param parsedSelector An object (from esquery) describing the selector's matching behavior\n * @returns The number of identifier queries\n */\nfunction countIdentifiers(parsedSelector: Selector): number {\n    switch (parsedSelector.type) {\n        case \"child\":\n        case \"descendant\":\n        case \"sibling\":\n        case \"adjacent\":\n            return countIdentifiers(parsedSelector.left) + countIdentifiers(parsedSelector.right)\n\n        case \"compound\":\n        case \"not\":\n        case \"matches\":\n            return parsedSelector.selectors.reduce((sum, childSelector) => sum + countIdentifiers(childSelector), 0)\n\n        case \"identifier\":\n            return 1\n\n        default:\n            return 0\n    }\n}\n\n/**\n * Compares the specificity of two selector objects, with CSS-like rules.\n * @param selectorA An AST selector descriptor\n * @param selectorB Another AST selector descriptor\n * @returns\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 */\nfunction compareSpecificity(selectorA: NodeSelector, selectorB: NodeSelector): number {\n    return selectorA.attributeCount - selectorB.attributeCount ||\n        selectorA.identifierCount - selectorB.identifierCount ||\n        (selectorA.rawSelector <= selectorB.rawSelector ? -1 : 1)\n}\n\n/**\n * Parses a raw selector string, and throws a useful error if parsing fails.\n * @param rawSelector A raw AST selector\n * @returns An object (from esquery) describing the matching behavior of this selector\n * @throws An error if the selector is invalid\n */\nfunction tryParseSelector(rawSelector: string): Selector {\n    try {\n        return esquery.parse(rawSelector.replace(/:exit$/, \"\"))\n    }\n    catch (err) {\n        if (typeof err.offset === \"number\") {\n            throw new Error(`Syntax error in selector \"${rawSelector}\" at position ${err.offset}: ${err.message}`)\n        }\n        throw err\n    }\n}\n\n/**\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 */\nconst parseSelector = memoize<(rawSelector: string) => NodeSelector>(rawSelector => {\n    const parsedSelector = tryParseSelector(rawSelector)\n\n    return {\n        rawSelector,\n        isExit: rawSelector.endsWith(\":exit\"),\n        parsedSelector,\n        listenerTypes: getPossibleTypes(parsedSelector),\n        attributeCount: countClassAttributes(parsedSelector),\n        identifierCount: countIdentifiers(parsedSelector),\n    }\n})\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\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 */\nexport default class NodeEventGenerator {\n    emitter: EventEmitter\n\n    private currentAncestry: Node[]\n    private enterSelectorsByNodeType: Map<string, NodeSelector[]>\n    private exitSelectorsByNodeType: Map<string, NodeSelector[]>\n    private anyTypeEnterSelectors: NodeSelector[]\n    private anyTypeExitSelectors: NodeSelector[]\n\n    /**\n    * @param 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    */\n    constructor(emitter: EventEmitter) {\n        this.emitter = emitter\n        this.currentAncestry = []\n        this.enterSelectorsByNodeType = new Map()\n        this.exitSelectorsByNodeType = new Map()\n        this.anyTypeEnterSelectors = []\n        this.anyTypeExitSelectors = []\n\n        const eventNames = typeof emitter.eventNames === \"function\"\n\n            // Use the built-in eventNames() function if available (Node 6+)\n            ? emitter.eventNames()\n\n            /*\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             */\n            : Object.keys((emitter as any)._events)\n\n        for (const rawSelector of eventNames) {\n            if (typeof rawSelector === \"symbol\") {\n                continue\n            }\n            const selector = parseSelector(rawSelector)\n\n            if (selector.listenerTypes) {\n                for (const nodeType of selector.listenerTypes) {\n                    const typeMap = selector.isExit ? this.exitSelectorsByNodeType : this.enterSelectorsByNodeType\n\n                    let selectors = typeMap.get(nodeType)\n                    if (selectors == null) {\n                        typeMap.set(nodeType, (selectors = []))\n                    }\n                    selectors.push(selector)\n                }\n            }\n            else {\n                (selector.isExit ? this.anyTypeExitSelectors : this.anyTypeEnterSelectors).push(selector)\n            }\n        }\n\n        this.anyTypeEnterSelectors.sort(compareSpecificity)\n        this.anyTypeExitSelectors.sort(compareSpecificity)\n        for (const selectorList of this.enterSelectorsByNodeType.values()) {\n            selectorList.sort(compareSpecificity)\n        }\n        for (const selectorList of this.exitSelectorsByNodeType.values()) {\n            selectorList.sort(compareSpecificity)\n        }\n    }\n\n    /**\n     * Checks a selector against a node, and emits it if it matches\n     * @param node The node to check\n     * @param selector An AST selector descriptor\n     */\n    private applySelector(node: Node, selector: NodeSelector): void {\n        if (esquery.matches(node, selector.parsedSelector, this.currentAncestry)) {\n            this.emitter.emit(selector.rawSelector, node)\n        }\n    }\n\n    /**\n     * Applies all appropriate selectors to a node, in specificity order\n     * @param node The node to check\n     * @param isExit `false` if the node is currently being entered, `true` if it's currently being exited\n     */\n    private applySelectors(node: Node, isExit: boolean): void {\n        const selectorsByNodeType = (isExit ? this.exitSelectorsByNodeType : this.enterSelectorsByNodeType).get(node.type) || []\n        const anyTypeSelectors = isExit ? this.anyTypeExitSelectors : this.anyTypeEnterSelectors\n\n        /*\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         */\n        let selectorsByTypeIndex = 0\n        let anyTypeSelectorsIndex = 0\n\n        while (selectorsByTypeIndex < selectorsByNodeType.length || anyTypeSelectorsIndex < anyTypeSelectors.length) {\n            if (\n                selectorsByTypeIndex >= selectorsByNodeType.length ||\n                (anyTypeSelectorsIndex < anyTypeSelectors.length && compareSpecificity(anyTypeSelectors[anyTypeSelectorsIndex], selectorsByNodeType[selectorsByTypeIndex]) < 0)\n            ) {\n                this.applySelector(node, anyTypeSelectors[anyTypeSelectorsIndex++])\n            }\n            else {\n                this.applySelector(node, selectorsByNodeType[selectorsByTypeIndex++])\n            }\n        }\n    }\n\n    /**\n     * Emits an event of entering AST node.\n     * @param node - A node which was entered.\n     */\n    enterNode(node: Node): void {\n        if (node.parent) {\n            this.currentAncestry.unshift(node.parent)\n        }\n        this.applySelectors(node, false)\n    }\n\n    /**\n     * Emits an event of leaving AST node.\n     * @param node - A node which was left.\n     */\n    leaveNode(node: Node): void {\n        this.applySelectors(node, true)\n        this.currentAncestry.shift()\n    }\n}\n","/**\n * @fileoverview Define utilify functions for token store.\n * @author Toru Nagashima\n */\nimport sortedIndexBy from \"lodash/sortedIndexBy\"\nimport {HasLocation} from \"../../ast\"\n\n/**\n * Gets `token.range[0]` from the given token.\n *\n * @param token - The token to get.\n * @returns The start location.\n * @private\n */\nfunction getStartLocation(token: { range: number[] }): number {\n    return token.range[0]\n}\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 tokens - It searches the token in this list.\n * @param location - The location to search.\n * @returns The found index or `tokens.length`.\n */\nexport function search(tokens: HasLocation[], location: number): number {\n    return sortedIndexBy(\n        tokens as { range: number[] }[],\n        { range: [location] },\n        getStartLocation,\n    )\n}\n\n/**\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 tokens - The tokens to find an index.\n * @param indexMap - The map from locations to indices.\n * @param startLoc - The location to get an index.\n * @returns The index.\n */\nexport function getFirstIndex(tokens: HasLocation[], indexMap: { [key: number]: number }, startLoc: number): number {\n    if (startLoc in indexMap) {\n        return indexMap[startLoc]\n    }\n    if ((startLoc - 1) in indexMap) {\n        const index = indexMap[startLoc - 1]\n        const token = (index >= 0 && index < tokens.length) ? tokens[index] : null\n\n        // 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.\n        if (token && token.range[0] >= startLoc) {\n            return index\n        }\n        return index + 1\n    }\n    return 0\n}\n\n/**\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 tokens - The tokens to find an index.\n * @param indexMap - The map from locations to indices.\n * @param endLoc - The location to get an index.\n * @returns The index.\n */\nexport function getLastIndex(tokens: HasLocation[], indexMap: { [key: number]: number }, endLoc: number): number {\n    if (endLoc in indexMap) {\n        return indexMap[endLoc] - 1\n    }\n    if ((endLoc - 1) in indexMap) {\n        const index = indexMap[endLoc - 1]\n        const token = (index >= 0 && index < tokens.length) ? tokens[index] : null\n\n        // 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.\n        if (token && token.range[1] > endLoc) {\n            return index - 1\n        }\n        return index\n    }\n    return tokens.length - 1\n}\n","/**\n * @fileoverview Define the abstract class about cursors which iterate tokens.\n * @author Toru Nagashima\n */\nimport {Token} from \"../../../ast\"\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 */\nexport default abstract class Cursor {\n    current: Token | null\n\n    /**\n     * Initializes this cursor.\n     */\n    constructor() {\n        this.current = null\n    }\n\n    /**\n     * Gets the first token.\n     * This consumes this cursor.\n     * @returns The first token or null.\n     */\n    getOneToken(): Token | null {\n        return this.moveNext() ? this.current : null\n    }\n\n    /**\n     * Gets the first tokens.\n     * This consumes this cursor.\n     * @returns All tokens.\n     */\n    getAllTokens(): Token[] {\n        const tokens: Token[] = []\n\n        while (this.moveNext()) {\n            tokens.push(this.current as Token)\n        }\n\n        return tokens\n    }\n\n    /**\n     * Moves this cursor to the next token.\n     * @returns {boolean} `true` if the next token exists.\n     * @abstract\n     */\n    abstract moveNext(): boolean\n}\n","/**\n * @fileoverview Define the cursor which iterates tokens and comments in reverse.\n * @author Toru Nagashima\n */\nimport {Token} from \"../../../ast\"\nimport {getLastIndex, search} from \"../utils\"\nimport Cursor from \"./cursor\"\n\n/**\n * The cursor which iterates tokens and comments in reverse.\n */\nexport default class BackwardTokenCommentCursor extends Cursor {\n    private tokens: Token[]\n    private comments: Token[]\n    private tokenIndex: number\n    private commentIndex: number\n    private border: number\n\n    /**\n     * Initializes this cursor.\n     * @param tokens - The array of tokens.\n     * @param comments - The array of comments.\n     * @param indexMap - The map from locations to indices in `tokens`.\n     * @param startLoc - The start location of the iteration range.\n     * @param endLoc - The end location of the iteration range.\n     */\n    constructor(tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number) {\n        super()\n        this.tokens = tokens\n        this.comments = comments\n        this.tokenIndex = getLastIndex(tokens, indexMap, endLoc)\n        this.commentIndex = search(comments, endLoc) - 1\n        this.border = startLoc\n    }\n\n    /** @inheritdoc */\n    moveNext(): boolean {\n        const token = (this.tokenIndex >= 0) ? this.tokens[this.tokenIndex] : null\n        const comment = (this.commentIndex >= 0) ? this.comments[this.commentIndex] : null\n\n        if (token && (!comment || token.range[1] > comment.range[1])) {\n            this.current = token\n            this.tokenIndex -= 1\n        }\n        else if (comment) {\n            this.current = comment\n            this.commentIndex -= 1\n        }\n        else {\n            this.current = null\n        }\n\n        return this.current != null && (this.border === -1 || this.current.range[0] >= this.border)\n    }\n}\n","/**\n * @fileoverview Define the cursor which iterates tokens only in reverse.\n * @author Toru Nagashima\n */\nimport {Token} from \"../../../ast\"\nimport {getFirstIndex, getLastIndex} from \"../utils\"\nimport Cursor from \"./cursor\"\n\n/**\n * The cursor which iterates tokens only in reverse.\n */\nexport default class BackwardTokenCursor extends Cursor {\n    private tokens: Token[]\n    private index: number\n    private indexEnd: number\n\n    /**\n     * Initializes this cursor.\n     * @param tokens - The array of tokens.\n     * @param comments - The array of comments.\n     * @param indexMap - The map from locations to indices in `tokens`.\n     * @param startLoc - The start location of the iteration range.\n     * @param endLoc - The end location of the iteration range.\n     */\n    constructor(tokens: Token[], _comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number) {\n        super()\n        this.tokens = tokens\n        this.index = getLastIndex(tokens, indexMap, endLoc)\n        this.indexEnd = getFirstIndex(tokens, indexMap, startLoc)\n    }\n\n    /** @inheritdoc */\n    moveNext(): boolean {\n        if (this.index >= this.indexEnd) {\n            this.current = this.tokens[this.index]\n            this.index -= 1\n            return true\n        }\n        return false\n    }\n\n    //\n    // Shorthand for performance.\n    //\n\n    /** @inheritdoc */\n    getOneToken(): Token | null {\n        return (this.index >= this.indexEnd) ? this.tokens[this.index] : null\n    }\n}\n","/**\n * @fileoverview Define the abstract class about cursors which manipulate another cursor.\n * @author Toru Nagashima\n */\nimport Cursor from \"./cursor\"\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The abstract class about cursors which manipulate another cursor.\n */\nexport default class DecorativeCursor extends Cursor {\n    protected cursor: Cursor\n\n    /**\n     * Initializes this cursor.\n     * @param cursor - The cursor to be decorated.\n     */\n    constructor(cursor: Cursor) {\n        super()\n        this.cursor = cursor\n    }\n\n    /** @inheritdoc */\n    moveNext(): boolean {\n        const retv = this.cursor.moveNext()\n\n        this.current = this.cursor.current\n\n        return retv\n    }\n}\n","/**\n * @fileoverview Define the cursor which ignores specified tokens.\n * @author Toru Nagashima\n */\nimport {Token} from \"../../../ast\"\nimport Cursor from \"./cursor\"\nimport DecorativeCursor from \"./decorative-cursor\"\n\n/**\n * The decorative cursor which ignores specified tokens.\n */\nexport default class FilterCursor extends DecorativeCursor {\n    private predicate: (token: Token) => boolean\n\n    /**\n     * Initializes this cursor.\n     * @param cursor - The cursor to be decorated.\n     * @param predicate - The predicate function to decide tokens this cursor iterates.\n     */\n    constructor(cursor: Cursor, predicate: (token: Token) => boolean) {\n        super(cursor)\n        this.predicate = predicate\n    }\n\n    /** @inheritdoc */\n    moveNext(): boolean {\n        const predicate = this.predicate\n\n        while (super.moveNext()) {\n            if (predicate(this.current as Token)) {\n                return true\n            }\n        }\n        return false\n    }\n}\n","/**\n * @fileoverview Define the cursor which iterates tokens and comments.\n * @author Toru Nagashima\n */\nimport {Token} from \"../../../ast\"\nimport {getFirstIndex, search} from \"../utils\"\nimport Cursor from \"./cursor\"\n\n/**\n * The cursor which iterates tokens and comments.\n */\nexport default class ForwardTokenCommentCursor extends Cursor {\n    private tokens: Token[]\n    private comments: Token[]\n    private tokenIndex: number\n    private commentIndex: number\n    private border: number\n\n    /**\n     * Initializes this cursor.\n     * @param tokens - The array of tokens.\n     * @param comments - The array of comments.\n     * @param indexMap - The map from locations to indices in `tokens`.\n     * @param startLoc - The start location of the iteration range.\n     * @param endLoc - The end location of the iteration range.\n     */\n    constructor(tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number) {\n        super()\n        this.tokens = tokens\n        this.comments = comments\n        this.tokenIndex = getFirstIndex(tokens, indexMap, startLoc)\n        this.commentIndex = search(comments, startLoc)\n        this.border = endLoc\n    }\n\n    /** @inheritdoc */\n    moveNext(): boolean {\n        const token = (this.tokenIndex < this.tokens.length) ? this.tokens[this.tokenIndex] : null\n        const comment = (this.commentIndex < this.comments.length) ? this.comments[this.commentIndex] : null\n\n        if (token && (!comment || token.range[0] < comment.range[0])) {\n            this.current = token\n            this.tokenIndex += 1\n        }\n        else if (comment) {\n            this.current = comment\n            this.commentIndex += 1\n        }\n        else {\n            this.current = null\n        }\n\n        return this.current != null && (this.border === -1 || this.current.range[1] <= this.border)\n    }\n}\n","/**\n * @fileoverview Define the cursor which iterates tokens only.\n * @author Toru Nagashima\n */\nimport {Token} from \"../../../ast\"\nimport {getFirstIndex, getLastIndex} from \"../utils\"\nimport Cursor from \"./cursor\"\n\n/**\n * The cursor which iterates tokens only.\n */\nexport default class ForwardTokenCursor extends Cursor {\n    private tokens: Token[]\n    protected index: number\n    protected indexEnd: number\n\n    /**\n     * Initializes this cursor.\n     * @param tokens - The array of tokens.\n     * @param comments - The array of comments.\n     * @param indexMap - The map from locations to indices in `tokens`.\n     * @param startLoc - The start location of the iteration range.\n     * @param endLoc - The end location of the iteration range.\n     */\n    constructor(tokens: Token[], _comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number) {\n        super()\n        this.tokens = tokens\n        this.index = getFirstIndex(tokens, indexMap, startLoc)\n        this.indexEnd = getLastIndex(tokens, indexMap, endLoc)\n    }\n\n    /** @inheritdoc */\n    moveNext(): boolean {\n        if (this.index <= this.indexEnd) {\n            this.current = this.tokens[this.index]\n            this.index += 1\n            return true\n        }\n        return false\n    }\n\n    //\n    // Shorthand for performance.\n    //\n\n    /** @inheritdoc */\n    getOneToken(): Token | null {\n        return (this.index <= this.indexEnd) ? this.tokens[this.index] : null\n    }\n\n    /** @inheritdoc */\n    getAllTokens(): Token[] {\n        return this.tokens.slice(this.index, this.indexEnd + 1)\n    }\n}\n","/**\n * @fileoverview Define the cursor which limits the number of tokens.\n * @author Toru Nagashima\n */\nimport Cursor from \"./cursor\"\nimport DecorativeCursor from \"./decorative-cursor\"\n\n/**\n * The decorative cursor which limits the number of tokens.\n */\nexport default class LimitCursor extends DecorativeCursor {\n    private count: number\n\n    /**\n     * Initializes this cursor.\n     * @param cursor - The cursor to be decorated.\n     * @param count - The count of tokens this cursor iterates.\n     */\n    constructor(cursor: Cursor, count: number) {\n        super(cursor)\n        this.count = count\n    }\n\n    /** @inheritdoc */\n    moveNext(): boolean {\n        if (this.count > 0) {\n            this.count -= 1\n            return super.moveNext()\n        }\n        return false\n    }\n}\n","/**\n * @fileoverview Define the cursor which ignores the first few tokens.\n * @author Toru Nagashima\n */\nimport Cursor from \"./cursor\"\nimport DecorativeCursor from \"./decorative-cursor\"\n\n/**\n * The decorative cursor which ignores the first few tokens.\n */\nexport default class SkipCursor extends DecorativeCursor {\n    private count: number\n\n    /**\n     * Initializes this cursor.\n     * @param cursor - The cursor to be decorated.\n     * @param count - The count of tokens this cursor skips.\n     */\n    constructor(cursor: Cursor, count: number) {\n        super(cursor)\n        this.count = count\n    }\n\n    /** @inheritdoc */\n    moveNext(): boolean {\n        while (this.count > 0) {\n            this.count -= 1\n            if (!super.moveNext()) {\n                return false\n            }\n        }\n        return super.moveNext()\n    }\n}\n","/**\n * @fileoverview Define 2 token factories; forward and backward.\n * @author Toru Nagashima\n */\nimport {Token} from \"../../../ast\"\nimport BackwardTokenCommentCursor from \"./backward-token-comment-cursor\"\nimport BackwardTokenCursor from \"./backward-token-cursor\"\nimport Cursor from \"./cursor\"\nimport FilterCursor from \"./filter-cursor\"\nimport ForwardTokenCommentCursor from \"./forward-token-comment-cursor\"\nimport ForwardTokenCursor from \"./forward-token-cursor\"\nimport LimitCursor from \"./limit-cursor\"\nimport SkipCursor from \"./skip-cursor\"\n\n/**\n * The cursor factory.\n * @private\n */\nexport class CursorFactory {\n    private TokenCursor: typeof BackwardTokenCursor | typeof ForwardTokenCursor\n    private TokenCommentCursor: typeof BackwardTokenCommentCursor | typeof ForwardTokenCommentCursor\n\n    /**\n     * Initializes this cursor.\n     * @param TokenCursor - The class of the cursor which iterates tokens only.\n     * @param TokenCommentCursor - The class of the cursor which iterates the mix of tokens and comments.\n     */\n    constructor(TokenCursor: typeof BackwardTokenCursor | typeof ForwardTokenCursor, TokenCommentCursor: typeof BackwardTokenCommentCursor | typeof ForwardTokenCommentCursor) {\n        this.TokenCursor = TokenCursor\n        this.TokenCommentCursor = TokenCommentCursor\n    }\n\n    /**\n     * Creates a base cursor instance that can be decorated by createCursor.\n     *\n     * @param tokens - The array of tokens.\n     * @param comments - The array of comments.\n     * @param indexMap - The map from locations to indices in `tokens`.\n     * @param startLoc - The start location of the iteration range.\n     * @param endLoc - The end location of the iteration range.\n     * @param includeComments - The flag to iterate comments as well.\n     * @returns The created base cursor.\n     */\n    createBaseCursor(tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number, includeComments: boolean): Cursor {\n        const TokenCursor = includeComments ? this.TokenCommentCursor : this.TokenCursor\n        return new TokenCursor(tokens, comments, indexMap, startLoc, endLoc)\n    }\n\n    /**\n     * Creates a cursor that iterates tokens with normalized options.\n     *\n     * @param tokens - The array of tokens.\n     * @param comments - The array of comments.\n     * @param indexMap - The map from locations to indices in `tokens`.\n     * @param startLoc - The start location of the iteration range.\n     * @param endLoc - The end location of the iteration range.\n     * @param includeComments - The flag to iterate comments as well.\n     * @param filter - The predicate function to choose tokens.\n     * @param skip - The count of tokens the cursor skips.\n     * @param count - The maximum count of tokens the cursor iterates. Zero is no iteration for backward compatibility.\n     * @returns The created cursor.\n     */\n    createCursor(tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number, includeComments: boolean, filter: ((token: Token) => boolean) | null, skip: number, count: number): Cursor {\n        let cursor = this.createBaseCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments)\n\n        if (filter) {\n            cursor = new FilterCursor(cursor, filter)\n        }\n        if (skip >= 1) {\n            cursor = new SkipCursor(cursor, skip)\n        }\n        if (count >= 0) {\n            cursor = new LimitCursor(cursor, count)\n        }\n\n        return cursor\n    }\n}\n\nexport const forward = new CursorFactory(ForwardTokenCursor, ForwardTokenCommentCursor)\nexport const backward = new CursorFactory(BackwardTokenCursor, BackwardTokenCommentCursor)\n","/**\n * @fileoverview Define the cursor which iterates tokens only, with inflated range.\n * @author Toru Nagashima\n */\nimport {Token} from \"../../../ast\"\nimport ForwardTokenCursor from \"./forward-token-cursor\"\n\n/**\n * The cursor which iterates tokens only, with inflated range.\n * This is for the backward compatibility of padding options.\n */\nexport default class PaddedTokenCursor extends ForwardTokenCursor {\n    /**\n     * Initializes this cursor.\n     * @param tokens - The array of tokens.\n     * @param comments - The array of comments.\n     * @param indexMap - The map from locations to indices in `tokens`.\n     * @param startLoc - The start location of the iteration range.\n     * @param endLoc - The end location of the iteration range.\n     * @param beforeCount - The number of tokens this cursor iterates before start.\n     * @param afterCount - The number of tokens this cursor iterates after end.\n     */\n    constructor(tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number, beforeCount: number, afterCount: number) {\n        super(tokens, comments, indexMap, startLoc, endLoc)\n        this.index = Math.max(0, this.index - beforeCount)\n        this.indexEnd = Math.min(tokens.length - 1, this.indexEnd + afterCount)\n    }\n}\n","/**\n * @fileoverview Object to handle access and retrieval of tokens.\n * @author Brandon Mills\n */\nimport assert from \"assert\"\nimport {HasLocation, Token} from \"../../ast\"\nimport * as cursors from \"./cursors\"\nimport Cursor from \"./cursors/cursor\"\nimport ForwardTokenCursor from \"./cursors/forward-token-cursor\"\nimport PaddedTokenCursor from \"./cursors/padded-token-cursor\"\nimport {search} from \"./utils\"\n\nexport type SkipOptions = number | ((token: Token) => boolean) | {\n    includeComments?: boolean\n    filter?: (token: Token) => boolean\n    skip?: number\n}\nexport type CountOptions = number | ((token: Token) => boolean) | {\n    includeComments?: boolean\n    filter?: (token: Token) => boolean\n    count?: number\n}\n\n/**\n * Check whether the given token is a comment token or not.\n * @param token The token to check.\n * @returns `true` if the token is a comment token.\n */\nfunction isCommentToken(token: Token): boolean {\n    return token.type === \"Line\" || token.type === \"Block\" || token.type === \"Shebang\"\n}\n\n/**\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 tokens - The array of tokens.\n * @param comments - The array of comments.\n * @returns The map from locations to indices in `tokens`.\n * @private\n */\nfunction createIndexMap(tokens: Token[], comments: Token[]): { [key: number]: number } {\n    const map = Object.create(null)\n    let tokenIndex = 0\n    let commentIndex = 0\n    let nextStart = 0\n    let range: [number, number] | null = null\n\n    while (tokenIndex < tokens.length || commentIndex < comments.length) {\n        nextStart = (commentIndex < comments.length) ? comments[commentIndex].range[0] : Number.MAX_SAFE_INTEGER\n        while (tokenIndex < tokens.length && (range = tokens[tokenIndex].range)[0] < nextStart) {\n            map[range[0]] = tokenIndex\n            map[range[1] - 1] = tokenIndex\n            tokenIndex += 1\n        }\n\n        nextStart = (tokenIndex < tokens.length) ? tokens[tokenIndex].range[0] : Number.MAX_SAFE_INTEGER\n        while (commentIndex < comments.length && (range = comments[commentIndex].range)[0] < nextStart) {\n            map[range[0]] = tokenIndex\n            map[range[1] - 1] = tokenIndex\n            commentIndex += 1\n        }\n    }\n\n    return map\n}\n\n/**\n * Creates the cursor iterates tokens with options.\n *\n * @param factory - The cursor factory to initialize cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n * @param opts - The option object. If this is a number then it's `opts.skip`. If this is a function then it's `opts.filter`.\n * @returns The created cursor.\n * @private\n */\nfunction createCursorWithSkip(factory: cursors.CursorFactory, tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number, opts?: SkipOptions): Cursor {\n    let includeComments = false\n    let skip = 0\n    let filter: ((token: Token) => boolean) | null = null\n\n    if (typeof opts === \"number\") {\n        skip = opts | 0\n    }\n    else if (typeof opts === \"function\") {\n        filter = opts\n    }\n    else if (opts) {\n        includeComments = Boolean(opts.includeComments)\n        skip = opts.skip || 0\n        filter = opts.filter || null\n    }\n    assert(skip >= 0, \"options.skip should be zero or a positive integer.\")\n    assert(!filter || typeof filter === \"function\", \"options.filter should be a function.\")\n\n    return factory.createCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments, filter, skip, -1)\n}\n\n/**\n * Creates the cursor iterates tokens with options.\n *\n * @param factory - The cursor factory to initialize cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n * @param opts - The option object. If this is a number then it's `opts.count`. If this is a function then it's `opts.filter`.\n * @returns The created cursor.\n * @private\n */\nfunction createCursorWithCount(factory: cursors.CursorFactory, tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number, opts?: CountOptions): Cursor {\n    let includeComments = false\n    let count = 0\n    let countExists = false\n    let filter: ((token: Token) => boolean) | null = null\n\n    if (typeof opts === \"number\") {\n        count = opts | 0\n        countExists = true\n    }\n    else if (typeof opts === \"function\") {\n        filter = opts\n    }\n    else if (opts) {\n        includeComments = Boolean(opts.includeComments)\n        count = opts.count || 0\n        countExists = typeof opts.count === \"number\"\n        filter = opts.filter || null\n    }\n    assert(count >= 0, \"options.count should be zero or a positive integer.\")\n    assert(!filter || typeof filter === \"function\", \"options.filter should be a function.\")\n\n    return factory.createCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments, filter, 0, countExists ? count : -1)\n}\n\n/**\n * Creates the cursor iterates tokens with options.\n *\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n * @param beforeCount - The number of tokens before the node to retrieve.\n * @param afterCount - The number of tokens after the node to retrieve.\n * @returns The created cursor.\n * @private\n */\nfunction createCursorWithPadding(tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number, beforeCount?: CountOptions, afterCount?: number): Cursor {\n    if (typeof beforeCount === \"undefined\" && typeof afterCount === \"undefined\") {\n        return new ForwardTokenCursor(tokens, comments, indexMap, startLoc, endLoc)\n    }\n    if (typeof beforeCount === \"number\" || typeof beforeCount === \"undefined\") {\n        return new PaddedTokenCursor(tokens, comments, indexMap, startLoc, endLoc, beforeCount || 0, afterCount || 0)\n    }\n    return createCursorWithCount(cursors.forward, tokens, comments, indexMap, startLoc, endLoc, beforeCount)\n}\n\n/**\n * Gets comment tokens that are adjacent to the current cursor position.\n * @param cursor - A cursor instance.\n * @returns An array of comment tokens adjacent to the current cursor position.\n * @private\n */\nfunction getAdjacentCommentTokensFromCursor(cursor: Cursor): Token[] {\n    const tokens: Token[] = []\n    let currentToken = cursor.getOneToken()\n\n    while (currentToken && isCommentToken(currentToken)) {\n        tokens.push(currentToken)\n        currentToken = cursor.getOneToken()\n    }\n\n    return tokens\n}\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\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 */\nexport default class TokenStore {\n    private _tokens: Token[]\n    private _comments: Token[]\n    private _indexMap: { [key: number]: number }\n\n    /**\n     * Initializes this token store.\n     * @param tokens - The array of tokens.\n     * @param comments - The array of comments.\n     */\n    constructor(tokens: Token[], comments: Token[]) {\n        this._tokens = tokens\n        this._comments = comments\n        this._indexMap = createIndexMap(tokens, comments)\n    }\n\n    //--------------------------------------------------------------------------\n    // Gets single token.\n    //--------------------------------------------------------------------------\n\n    /**\n     * Gets the token starting at the specified index.\n     * @param offset - Index of the start of the token's range.\n     * @param options - The option object.\n     * @returns The token starting at index, or null if no such token.\n     */\n    getTokenByRangeStart(offset: number, options?: { includeComments: boolean }): Token | null {\n        const includeComments = Boolean(options && options.includeComments)\n        const token = cursors.forward.createBaseCursor(\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            offset,\n            -1,\n            includeComments\n        ).getOneToken()\n\n        if (token && token.range[0] === offset) {\n            return token\n        }\n        return null\n    }\n\n    /**\n     * Gets the first token of the given node.\n     * @param node - The AST node.\n     * @param options - The option object.\n     * @returns An object representing the token.\n     */\n    getFirstToken(node: HasLocation, options?: SkipOptions): Token | null {\n        return createCursorWithSkip(\n            cursors.forward,\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            node.range[0],\n            node.range[1],\n            options\n        ).getOneToken()\n    }\n\n    /**\n     * Gets the last token of the given node.\n     * @param node - The AST node.\n     * @param options - The option object.\n     * @returns An object representing the token.\n     */\n    getLastToken(node: HasLocation, options?: SkipOptions): Token | null {\n        return createCursorWithSkip(\n            cursors.backward,\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            node.range[0],\n            node.range[1],\n            options\n        ).getOneToken()\n    }\n\n    /**\n     * Gets the token that precedes a given node or token.\n     * @param node - The AST node or token.\n     * @param options - The option object.\n     * @returns An object representing the token.\n     */\n    getTokenBefore(node: HasLocation, options?: SkipOptions): Token | null {\n        return createCursorWithSkip(\n            cursors.backward,\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            -1,\n            node.range[0],\n            options\n        ).getOneToken()\n    }\n\n    /**\n     * Gets the token that follows a given node or token.\n     * @param node - The AST node or token.\n     * @param options - The option object.\n     * @returns An object representing the token.\n     */\n    getTokenAfter(node: HasLocation, options?: SkipOptions): Token | null {\n        return createCursorWithSkip(\n            cursors.forward,\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            node.range[1],\n            -1,\n            options\n        ).getOneToken()\n    }\n\n    /**\n     * Gets the first token between two non-overlapping nodes.\n     * @param left - Node before the desired token range.\n     * @param right - Node after the desired token range.\n     * @param options - The option object.\n     * @returns An object representing the token.\n     */\n    getFirstTokenBetween(left: HasLocation, right: HasLocation, options?: SkipOptions): Token | null {\n        return createCursorWithSkip(\n            cursors.forward,\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            left.range[1],\n            right.range[0],\n            options\n        ).getOneToken()\n    }\n\n    /**\n     * Gets the last token between two non-overlapping nodes.\n     * @param left Node before the desired token range.\n     * @param right Node after the desired token range.\n     * @param options - The option object.\n     * @returns An object representing the token.\n     */\n    getLastTokenBetween(left: HasLocation, right: HasLocation, options?: SkipOptions): Token | null {\n        return createCursorWithSkip(\n            cursors.backward,\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            left.range[1],\n            right.range[0],\n            options\n        ).getOneToken()\n    }\n\n    /**\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 node The AST node or token.\n     * @param skip A number of tokens to skip.\n     * @returns An object representing the token.\n     * @deprecated\n     */\n    getTokenOrCommentBefore(node: HasLocation, skip?: number): Token | null {\n        return this.getTokenBefore(node, {includeComments: true, skip})\n    }\n\n    /**\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 node The AST node or token.\n     * @param skip A number of tokens to skip.\n     * @returns An object representing the token.\n     * @deprecated\n     */\n    getTokenOrCommentAfter(node: HasLocation, skip?: number): Token | null {\n        return this.getTokenAfter(node, {includeComments: true, skip})\n    }\n\n    //--------------------------------------------------------------------------\n    // Gets multiple tokens.\n    //--------------------------------------------------------------------------\n\n    /**\n     * Gets the first `count` tokens of the given node.\n     * @param node - The AST node.\n     * @param [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 [options.includeComments=false] - The flag to iterate comments as well.\n     * @param [options.filter=null] - The predicate function to choose tokens.\n     * @param [options.count=0] - The maximum count of tokens the cursor iterates.\n     * @returns Tokens.\n     */\n    getFirstTokens(node: HasLocation, options?: CountOptions): Token[] {\n        return createCursorWithCount(\n            cursors.forward,\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            node.range[0],\n            node.range[1],\n            options\n        ).getAllTokens()\n    }\n\n    /**\n     * Gets the last `count` tokens of the given node.\n     * @param node - The AST node.\n     * @param [options=0] - The option object. Same options as getFirstTokens()\n     * @returns Tokens.\n     */\n    getLastTokens(node: HasLocation, options?: CountOptions) {\n        return createCursorWithCount(\n            cursors.backward,\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            node.range[0],\n            node.range[1],\n            options\n        ).getAllTokens().reverse()\n    }\n\n    /**\n     * Gets the `count` tokens that precedes a given node or token.\n     * @param node - The AST node or token.\n     * @param [options=0] - The option object. Same options as getFirstTokens()\n     * @returns Tokens.\n     */\n    getTokensBefore(node: HasLocation, options?: CountOptions): Token[] {\n        return createCursorWithCount(\n            cursors.backward,\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            -1,\n            node.range[0],\n            options\n        ).getAllTokens().reverse()\n    }\n\n    /**\n     * Gets the `count` tokens that follows a given node or token.\n     * @param node - The AST node or token.\n     * @param [options=0] - The option object. Same options as getFirstTokens()\n     * @returns Tokens.\n     */\n    getTokensAfter(node: HasLocation, options?: CountOptions): Token[] {\n        return createCursorWithCount(\n            cursors.forward,\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            node.range[1],\n            -1,\n            options\n        ).getAllTokens()\n    }\n\n    /**\n     * Gets the first `count` tokens between two non-overlapping nodes.\n     * @param left - Node before the desired token range.\n     * @param right - Node after the desired token range.\n     * @param [options=0] - The option object. Same options as getFirstTokens()\n     * @returns Tokens between left and right.\n     */\n    getFirstTokensBetween(left: HasLocation, right: HasLocation, options?: CountOptions): Token[] {\n        return createCursorWithCount(\n            cursors.forward,\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            left.range[1],\n            right.range[0],\n            options\n        ).getAllTokens()\n    }\n\n    /**\n     * Gets the last `count` tokens between two non-overlapping nodes.\n     * @param left Node before the desired token range.\n     * @param right Node after the desired token range.\n     * @param [options=0] - The option object. Same options as getFirstTokens()\n     * @returns Tokens between left and right.\n     */\n    getLastTokensBetween(left: HasLocation, right: HasLocation, options?: CountOptions): Token[] {\n        return createCursorWithCount(\n            cursors.backward,\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            left.range[1],\n            right.range[0],\n            options\n        ).getAllTokens().reverse()\n    }\n\n    /**\n     * Gets all tokens that are related to the given node.\n     * @param node - The AST node.\n     * @param beforeCount - The number of tokens before the node to retrieve.\n     * @param afterCount - The number of tokens after the node to retrieve.\n     * @returns Array of objects representing tokens.\n     */\n    getTokens(node: HasLocation, beforeCount?: CountOptions, afterCount?: number): Token[] {\n        return createCursorWithPadding(\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            node.range[0],\n            node.range[1],\n            beforeCount,\n            afterCount\n        ).getAllTokens()\n    }\n\n    /**\n     * Gets all of the tokens between two non-overlapping nodes.\n     * @param left Node before the desired token range.\n     * @param right Node after the desired token range.\n     * @param padding Number of extra tokens on either side of center.\n     * @returns Tokens between left and right.\n     */\n    getTokensBetween(left: HasLocation, right: HasLocation, padding?: CountOptions): Token[] {\n        return createCursorWithPadding(\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            left.range[1],\n            right.range[0],\n            padding,\n            typeof padding === \"number\" ? padding : undefined\n        ).getAllTokens()\n    }\n\n    //--------------------------------------------------------------------------\n    // Others.\n    //--------------------------------------------------------------------------\n\n    /**\n     * Checks whether any comments exist or not between the given 2 nodes.\n     *\n     * @param left - The node to check.\n     * @param right - The node to check.\n     * @returns `true` if one or more comments exist.\n     */\n    commentsExistBetween(left: HasLocation, right: HasLocation): boolean {\n        const index = search(this._comments, left.range[1])\n\n        return (\n            index < this._comments.length &&\n            this._comments[index].range[1] <= right.range[0]\n        )\n    }\n\n    /**\n     * Gets all comment tokens directly before the given node or token.\n     * @param nodeOrToken The AST node or token to check for adjacent comment tokens.\n     * @returns An array of comments in occurrence order.\n     */\n    getCommentsBefore(nodeOrToken: HasLocation): Token[] {\n        const cursor = createCursorWithCount(\n            cursors.backward,\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            -1,\n            nodeOrToken.range[0],\n            {includeComments: true}\n        )\n\n        return getAdjacentCommentTokensFromCursor(cursor).reverse()\n    }\n\n    /**\n     * Gets all comment tokens directly after the given node or token.\n     * @param nodeOrToken The AST node or token to check for adjacent comment tokens.\n     * @returns An array of comments in occurrence order.\n     */\n    getCommentsAfter(nodeOrToken: HasLocation): Token[] {\n        const cursor = createCursorWithCount(\n            cursors.forward,\n            this._tokens,\n            this._comments,\n            this._indexMap,\n            nodeOrToken.range[1],\n            -1,\n            {includeComments: true}\n        )\n\n        return getAdjacentCommentTokensFromCursor(cursor)\n    }\n\n    /**\n     * Gets all comment tokens inside the given node.\n     * @param node The AST node to get the comments for.\n     * @returns An array of comments in occurrence order.\n     */\n    getCommentsInside(node: HasLocation): Token[] {\n        return this.getTokens(node, {\n            includeComments: true,\n            filter: isCommentToken,\n        })\n    }\n}\n","import type { Rule, SourceCode } from \"eslint\"\nimport type { ScopeManager, Scope } from \"eslint-scope\"\nimport escope from \"eslint-scope\"\nimport type {\n    ESLintExtendedProgram,\n    Node,\n    OffsetRange,\n    VAttribute,\n    VDocumentFragment,\n    VElement,\n    VExpressionContainer,\n    VText,\n} from \"../../ast\"\nimport { getFallbackKeys, ParseError } from \"../../ast\"\nimport { fixLocations } from \"../../common/fix-locations\"\nimport type { LocationCalculator } from \"../../common/location-calculator\"\nimport type { ParserOptions } from \"../../common/parser-options\"\n\nexport interface ESLintCustomBlockParser {\n    parse(code: string, options: any): any\n    parseForESLint?(code: string, options: any): any\n}\n\nexport type CustomBlockContext = {\n    getSourceCode(): SourceCode\n    parserServices: any\n    getAncestors(): any[]\n    getDeclaredVariables(node: any): any[]\n    getScope(): any\n    markVariableAsUsed(name: string): boolean\n\n    // Same as the original context.\n    id: string\n    options: any[]\n    settings: { [name: string]: any }\n    parserPath: string\n    parserOptions: any\n    getFilename(): string\n    report(descriptor: Rule.ReportDescriptor): void\n}\n\n/**\n * Checks whether the given node is VElement.\n */\nfunction isVElement(\n    node: VElement | VExpressionContainer | VText,\n): node is VElement {\n    return node.type === \"VElement\"\n}\n\n/**\n * Get the all custom blocks from given document\n * @param document\n */\nexport function getCustomBlocks(\n    document: VDocumentFragment | null,\n): VElement[] {\n    return document\n        ? document.children\n              .filter(isVElement)\n              .filter(\n                  (block) =>\n                      block.name !== \"script\" &&\n                      block.name !== \"template\" &&\n                      block.name !== \"style\",\n              )\n        : []\n}\n\nexport function getLang(customBlock: VElement) {\n    return (\n        customBlock.startTag.attributes.find(\n            (attr): attr is VAttribute =>\n                !attr.directive && attr.key.name === \"lang\",\n        )?.value?.value || null\n    )\n}\n\n/**\n * Parse the source code of the given custom block element.\n * @param node The custom block element to parse.\n * @param parser The custom parser.\n * @param globalLocationCalculator The location calculator for fixLocations.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseCustomBlockElement(\n    node: VElement,\n    parser: ESLintCustomBlockParser,\n    globalLocationCalculator: LocationCalculator,\n    parserOptions: ParserOptions,\n): ESLintExtendedProgram & { error?: ParseError | Error } {\n    const text = node.children[0]\n    const { code, range, loc } =\n        text != null && text.type === \"VText\"\n            ? {\n                  code: text.value,\n                  range: text.range,\n                  loc: text.loc,\n              }\n            : {\n                  code: \"\",\n                  range: [\n                      node.startTag.range[1],\n                      node.endTag!.range[0],\n                  ] as OffsetRange,\n                  loc: {\n                      start: node.startTag.loc.end,\n                      end: node.endTag!.loc.start,\n                  },\n              }\n    const locationCalculator = globalLocationCalculator.getSubCalculatorAfter(\n        range[0],\n    )\n    try {\n        return parseCustomBlockFragment(\n            code,\n            parser,\n            locationCalculator,\n            parserOptions,\n        )\n    } catch (e) {\n        return {\n            error: e,\n            ast: {\n                type: \"Program\",\n                sourceType: \"module\",\n                loc: {\n                    start: {\n                        ...loc.start,\n                    },\n                    end: {\n                        ...loc.end,\n                    },\n                },\n                range: [...range],\n                body: [],\n                tokens: [],\n                comments: [],\n            },\n        }\n    }\n}\n\n/**\n * Parse the given source code.\n *\n * @param code The source code to parse.\n * @param parser The custom parser.\n * @param locationCalculator The location calculator for fixLocations.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nfunction parseCustomBlockFragment(\n    code: string,\n    parser: ESLintCustomBlockParser,\n    locationCalculator: LocationCalculator,\n    parserOptions: ParserOptions,\n): ESLintExtendedProgram {\n    try {\n        const result = parseBlock(code, parser, {\n            ecmaVersion: 2017,\n            loc: true,\n            range: true,\n            raw: true,\n            tokens: true,\n            comment: true,\n            eslintVisitorKeys: true,\n            eslintScopeManager: true,\n            ...parserOptions,\n        })\n        fixLocations(result, locationCalculator)\n        return result\n    } catch (err) {\n        const perr = ParseError.normalize(err)\n        if (perr) {\n            locationCalculator.fixErrorLocation(perr)\n            throw perr\n        }\n        throw err\n    }\n}\n\nfunction parseBlock(\n    code: string,\n    parser: ESLintCustomBlockParser,\n    parserOptions: any,\n): any {\n    const result: any =\n        typeof parser.parseForESLint === \"function\"\n            ? parser.parseForESLint(code, parserOptions)\n            : parser.parse(code, parserOptions)\n\n    if (result.ast != null) {\n        return result\n    }\n    return { ast: result }\n}\n\n/**\n * Create shared context.\n *\n * @param text The source code of SFC.\n * @param customBlock The custom block node.\n * @param parsedResult The parse result data\n * @param parserOptions The parser options.\n */\nexport function createCustomBlockSharedContext({\n    text,\n    customBlock,\n    parsedResult,\n    globalLocationCalculator,\n    parserOptions,\n}: {\n    text: string\n    customBlock: VElement\n    parsedResult: ESLintExtendedProgram & { error?: ParseError | Error }\n    globalLocationCalculator: LocationCalculator\n    parserOptions: any\n}) {\n    let sourceCode: SourceCode\n    let scopeManager: ScopeManager\n    let currentNode: any\n    return {\n        serCurrentNode(node: any) {\n            currentNode = node\n        },\n        context: {\n            getAncestors: () => getAncestors(currentNode),\n\n            getDeclaredVariables: (...args: any[]) =>\n                // @ts-expect-error\n                getScopeManager().getDeclaredVariables(...args),\n            getScope: () => getScope(getScopeManager(), currentNode),\n            markVariableAsUsed: (name: string) =>\n                markVariableAsUsed(\n                    getScopeManager(),\n                    currentNode,\n                    parserOptions,\n                    name,\n                ),\n            parserServices: {\n                customBlock,\n                parseCustomBlockElement(\n                    parser: ESLintCustomBlockParser,\n                    options: any,\n                ) {\n                    return parseCustomBlockElement(\n                        customBlock,\n                        parser,\n                        globalLocationCalculator,\n                        { ...parserOptions, ...options },\n                    )\n                },\n                ...(parsedResult.services || {}),\n                ...(parsedResult.error\n                    ? { parseError: parsedResult.error }\n                    : {}),\n            },\n            getSourceCode,\n        },\n    }\n\n    function getSourceCode() {\n        return (\n            sourceCode ||\n            // eslint-disable-next-line @mysticatea/ts/no-require-imports\n            (sourceCode = new (require(\"eslint\").SourceCode)({\n                text,\n                ast: parsedResult.ast,\n                parserServices: parsedResult.services,\n                scopeManager: getScopeManager(),\n                visitorKeys: parsedResult.visitorKeys,\n            }))\n        )\n    }\n\n    function getScopeManager() {\n        if (parsedResult.scopeManager || scopeManager) {\n            return parsedResult.scopeManager || scopeManager\n        }\n\n        const ecmaVersion = parserOptions.ecmaVersion || 2017\n        const ecmaFeatures = parserOptions.ecmaFeatures || {}\n        const sourceType = parserOptions.sourceType || \"script\"\n        scopeManager = escope.analyze(parsedResult.ast, {\n            ignoreEval: true,\n            nodejsScope: false,\n            impliedStrict: ecmaFeatures.impliedStrict,\n            ecmaVersion,\n            sourceType,\n            fallback: getFallbackKeys,\n        })\n        return scopeManager\n    }\n}\n\n/* The following source code is copied from `eslint/lib/linter/linter.js` */\n\n/**\n * Gets all the ancestors of a given node\n * @param {ASTNode} node The node\n * @returns {ASTNode[]} All the ancestor nodes in the AST, not including the provided node, starting\n * from the root node and going inwards to the parent node.\n */\nfunction getAncestors(node: Node) {\n    const ancestorsStartingAtParent = []\n\n    for (let ancestor = node.parent; ancestor; ancestor = ancestor.parent) {\n        ancestorsStartingAtParent.push(ancestor)\n    }\n\n    return ancestorsStartingAtParent.reverse()\n}\n\n/**\n * Gets the scope for the current node\n * @param {ScopeManager} scopeManager The scope manager for this AST\n * @param {ASTNode} currentNode The node to get the scope of\n * @returns {eslint-scope.Scope} The scope information for this node\n */\nfunction getScope(scopeManager: ScopeManager, currentNode: Node) {\n    // On Program node, get the outermost scope to avoid return Node.js special function scope or ES modules scope.\n    const inner = currentNode.type !== \"Program\"\n\n    for (\n        let node: Node | null = currentNode;\n        node;\n        node = node.parent || null\n    ) {\n        const scope = scopeManager.acquire(node as any, inner)\n\n        if (scope) {\n            if (scope.type === \"function-expression-name\") {\n                return scope.childScopes[0]\n            }\n            return scope\n        }\n    }\n\n    return scopeManager.scopes[0]\n}\n\n/**\n * Marks a variable as used in the current scope\n * @param {ScopeManager} scopeManager The scope manager for this AST. The scope may be mutated by this function.\n * @param {ASTNode} currentNode The node currently being traversed\n * @param {Object} parserOptions The options used to parse this text\n * @param {string} name The name of the variable that should be marked as used.\n * @returns {boolean} True if the variable was found and marked as used, false if not.\n */\nfunction markVariableAsUsed(\n    scopeManager: ScopeManager,\n    currentNode: Node,\n    parserOptions: any,\n    name: string,\n) {\n    const hasGlobalReturn =\n        parserOptions.ecmaFeatures && parserOptions.ecmaFeatures.globalReturn\n    const specialScope =\n        hasGlobalReturn || parserOptions.sourceType === \"module\"\n    const currentScope = getScope(scopeManager, currentNode)\n\n    // Special Node.js scope means we need to start one level deeper\n    const initialScope =\n        currentScope.type === \"global\" && specialScope\n            ? currentScope.childScopes[0]\n            : currentScope\n\n    for (let scope: Scope | null = initialScope; scope; scope = scope.upper) {\n        const variable = scope.variables.find(\n            (scopeVar) => scopeVar.name === name,\n        )\n\n        if (variable) {\n            // @ts-expect-error\n            variable.eslintUsed = true\n            return true\n        }\n    }\n\n    return false\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type { Rule } from \"eslint\"\nimport EventEmitter from \"events\"\nimport NodeEventGenerator from \"./external/node-event-generator\"\nimport TokenStore from \"./external/token-store\"\nimport type {\n    ESLintProgram,\n    VElement,\n    VDocumentFragment,\n    VAttribute,\n} from \"./ast\"\nimport { traverseNodes } from \"./ast\"\nimport type { LocationCalculator } from \"./common/location-calculator\"\nimport type {\n    CustomBlockContext,\n    ESLintCustomBlockParser,\n} from \"./sfc/custom-block\"\nimport {\n    createCustomBlockSharedContext,\n    getCustomBlocks,\n    getLang,\n    parseCustomBlockElement,\n} from \"./sfc/custom-block\"\nimport type { ParserOptions } from \"./common/parser-options\"\nimport { isSFCFile } from \"./common/parser-options\"\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\ntype CustomBlockVisitorFactory = (\n    context: CustomBlockContext,\n) =>\n    | {\n          [key: string]: (...args: any) => void\n      }\n    | null\n    | undefined\n\nconst emitters = new WeakMap<object, EventEmitter>()\nconst stores = new WeakMap<object, TokenStore>()\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\nexport interface ParserServices {\n    /**\n     * Define handlers to traverse the template body.\n     * @param templateBodyVisitor The template body handlers.\n     * @param scriptVisitor The script handlers. This is optional.\n     */\n    defineTemplateBodyVisitor(\n        templateBodyVisitor: { [key: string]: (...args: any) => void },\n        scriptVisitor?: { [key: string]: (...args: any) => void },\n    ): object\n\n    /**\n     * Define handlers to traverse custom blocks.\n     * @param context The rule context.\n     * @param parser The custom parser.\n     * @param rule The custom block rule definition\n     * @param scriptVisitor The script handlers. This is optional.\n     */\n    defineCustomBlocksVisitor(\n        context: Rule.RuleContext,\n        parser: ESLintCustomBlockParser,\n        rule: {\n            target:\n                | string\n                | string[]\n                | ((lang: string | null, customBlock: VElement) => boolean)\n            create: CustomBlockVisitorFactory\n        },\n        scriptVisitor: { [key: string]: (...args: any) => void },\n    ): { [key: string]: (...args: any) => void }\n\n    /**\n     * Get the token store of the template body.\n     * @returns The token store of template body.\n     */\n    getTemplateBodyTokenStore(): TokenStore\n\n    /**\n     * Get the root document fragment.\n     * @returns The root document fragment.\n     */\n    getDocumentFragment(): VDocumentFragment | null\n}\n\n/**\n * Define the parser service\n * @param rootAST\n */\nexport function define(\n    sourceText: string,\n    rootAST: ESLintProgram,\n    document: VDocumentFragment | null,\n    globalLocationCalculator: LocationCalculator | null,\n    { parserOptions }: { parserOptions: ParserOptions },\n): ParserServices {\n    const customBlocksEmitters = new Map<\n        ESLintCustomBlockParser,\n        {\n            context: Rule.RuleContext\n            test: (lang: string | null, customBlock: VElement) => boolean\n            create: CustomBlockVisitorFactory\n        }[]\n    >()\n\n    const isSFC = isSFCFile(parserOptions)\n\n    return {\n        /**\n         * Define handlers to traverse the template body.\n         * @param templateBodyVisitor The template body handlers.\n         * @param scriptVisitor The script handlers. This is optional.\n         */\n        defineTemplateBodyVisitor(\n            templateBodyVisitor: { [key: string]: (...args: any) => void },\n            scriptVisitor?: { [key: string]: (...args: any) => void },\n        ): object {\n            if (scriptVisitor == null) {\n                scriptVisitor = {} //eslint-disable-line no-param-reassign\n            }\n            if (rootAST.templateBody == null) {\n                return scriptVisitor\n            }\n\n            let emitter = emitters.get(rootAST)\n\n            // If this is the first time, initialize the intermediate event emitter.\n            if (emitter == null) {\n                emitter = new EventEmitter()\n                emitter.setMaxListeners(0)\n                emitters.set(rootAST, emitter)\n\n                const programExitHandler = scriptVisitor[\"Program:exit\"]\n                scriptVisitor[\"Program:exit\"] = (node) => {\n                    try {\n                        if (typeof programExitHandler === \"function\") {\n                            programExitHandler(node)\n                        }\n\n                        // Traverse template body.\n                        const generator = new NodeEventGenerator(\n                            emitter as EventEmitter,\n                        )\n                        traverseNodes(\n                            rootAST.templateBody as VElement,\n                            generator,\n                        )\n                    } finally {\n                        // eslint-disable-next-line @mysticatea/ts/ban-ts-ignore\n                        // @ts-ignore\n                        scriptVisitor[\"Program:exit\"] = programExitHandler\n                        emitters.delete(rootAST)\n                    }\n                }\n            }\n\n            // Register handlers into the intermediate event emitter.\n            for (const selector of Object.keys(templateBodyVisitor)) {\n                emitter.on(selector, templateBodyVisitor[selector])\n            }\n\n            return scriptVisitor\n        },\n\n        /**\n         * Define handlers to traverse custom blocks.\n         * @param context The rule context.\n         * @param parser The custom parser.\n         * @param rule The custom block rule definition\n         * @param scriptVisitor The script handlers. This is optional.\n         */\n        defineCustomBlocksVisitor(\n            context: Rule.RuleContext,\n            parser: ESLintCustomBlockParser,\n            rule: {\n                target:\n                    | string\n                    | string[]\n                    | ((lang: string | null, customBlock: VElement) => boolean)\n                create: CustomBlockVisitorFactory\n            },\n            scriptVisitor: { [key: string]: (...args: any) => void },\n        ): { [key: string]: (...args: any) => void } {\n            if (scriptVisitor == null) {\n                scriptVisitor = {} //eslint-disable-line no-param-reassign\n            }\n            if (!isSFC) {\n                return scriptVisitor\n            }\n            parserOptions = { ...parserOptions } //eslint-disable-line no-param-reassign\n            const customBlocks = getCustomBlocks(document).filter(\n                (block) =>\n                    block.endTag &&\n                    !block.startTag.attributes.some(\n                        (attr): attr is VAttribute =>\n                            !attr.directive && attr.key.name === \"src\",\n                    ),\n            )\n            if (!customBlocks.length || globalLocationCalculator == null) {\n                return {}\n            }\n            let factories = customBlocksEmitters.get(parser)\n\n            // If this is the first time, initialize the intermediate event emitter.\n            if (factories == null) {\n                factories = []\n                customBlocksEmitters.set(parser, factories)\n                const visitorFactories = factories\n\n                const programExitHandler = scriptVisitor[\"Program:exit\"]\n                scriptVisitor[\"Program:exit\"] = (node) => {\n                    try {\n                        if (typeof programExitHandler === \"function\") {\n                            programExitHandler(node)\n                        }\n                        for (const customBlock of customBlocks) {\n                            const lang = getLang(customBlock)\n\n                            const activeVisitorFactories = visitorFactories.filter(\n                                (f) => f.test(lang, customBlock),\n                            )\n                            if (!activeVisitorFactories.length) {\n                                continue\n                            }\n\n                            const parsedResult = parseCustomBlockElement(\n                                customBlock,\n                                parser,\n                                globalLocationCalculator,\n                                parserOptions,\n                            )\n\n                            const {\n                                serCurrentNode,\n                                context: customBlockContext,\n                            } = createCustomBlockSharedContext({\n                                text: sourceText,\n                                customBlock,\n                                parsedResult,\n                                globalLocationCalculator,\n                                parserOptions,\n                            })\n\n                            const emitter = new EventEmitter()\n                            emitter.setMaxListeners(0)\n\n                            for (const factory of activeVisitorFactories) {\n                                const ctx = {\n                                    ...customBlockContext,\n                                }\n                                // eslint-disable-next-line @mysticatea/ts/ban-ts-ignore\n                                // @ts-ignore -- custom context\n                                ctx.__proto__ = factory.context\n\n                                const visitor = factory.create(\n                                    ctx as CustomBlockContext,\n                                )\n                                // Register handlers into the intermediate event emitter.\n                                for (const selector of Object.keys(\n                                    visitor || {},\n                                )) {\n                                    emitter.on(selector, visitor![selector])\n                                }\n                            }\n\n                            // Traverse custom block.\n                            const generator = new NodeEventGenerator(emitter)\n                            traverseNodes(parsedResult.ast, {\n                                visitorKeys: parsedResult.visitorKeys,\n                                enterNode(n) {\n                                    serCurrentNode(n)\n                                    generator.enterNode(n)\n                                },\n                                leaveNode(n) {\n                                    serCurrentNode(n)\n                                    generator.leaveNode(n)\n                                },\n                            })\n                        }\n                    } finally {\n                        // eslint-disable-next-line @mysticatea/ts/ban-ts-ignore\n                        // @ts-ignore\n                        scriptVisitor[\"Program:exit\"] = programExitHandler\n                        customBlocksEmitters.delete(parser)\n                    }\n                }\n            }\n\n            const target = rule.target\n            const test =\n                typeof target === \"function\"\n                    ? target\n                    : Array.isArray(target)\n                    ? (lang: string | null) =>\n                          Boolean(lang && target.includes(lang))\n                    : (lang: string | null) => target === lang\n            factories.push({\n                context,\n                test,\n                create: rule.create,\n            })\n\n            return scriptVisitor\n        },\n\n        /**\n         * Get the token store of the template body.\n         * @returns The token store of template body.\n         */\n        getTemplateBodyTokenStore(): TokenStore {\n            const ast = rootAST.templateBody\n            const key = ast || stores\n            let store = stores.get(key)\n\n            if (!store) {\n                store =\n                    ast != null\n                        ? new TokenStore(ast.tokens, ast.comments)\n                        : new TokenStore([], [])\n                stores.set(key, store)\n            }\n\n            return store\n        },\n\n        /**\n         * Get the root document fragment.\n         * @returns The root document fragment.\n         */\n        getDocumentFragment(): VDocumentFragment | null {\n            return document\n        },\n    }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport * as path from \"path\"\nimport * as AST from \"./ast\"\nimport { LocationCalculator } from \"./common/location-calculator\"\nimport { HTMLParser, HTMLTokenizer } from \"./html\"\nimport { parseScript, parseScriptElement } from \"./script\"\nimport * as services from \"./parser-services\"\nimport type { ParserOptions } from \"./common/parser-options\"\n\nconst STARTS_WITH_LT = /^\\s*</u\n\n/**\n * Check whether the code is a Vue.js component.\n * @param code The source code to check.\n * @param options The parser options.\n * @returns `true` if the source code is a Vue.js component.\n */\nfunction isVueFile(code: string, options: ParserOptions): boolean {\n    const filePath = options.filePath || \"unknown.js\"\n    return path.extname(filePath) === \".vue\" || STARTS_WITH_LT.test(code)\n}\n\n/**\n * Check whether the node is a `<template>` element.\n * @param node The node to check.\n * @returns `true` if the node is a `<template>` element.\n */\nfunction isTemplateElement(node: AST.VNode): node is AST.VElement {\n    return node.type === \"VElement\" && node.name === \"template\"\n}\n\n/**\n * Check whether the node is a `<script>` element.\n * @param node The node to check.\n * @returns `true` if the node is a `<script>` element.\n */\nfunction isScriptElement(node: AST.VNode): node is AST.VElement {\n    return node.type === \"VElement\" && node.name === \"script\"\n}\n\n/**\n * Check whether the attribute node is a `lang` attribute.\n * @param attribute The attribute node to check.\n * @returns `true` if the attribute node is a `lang` attribute.\n */\nfunction isLang(\n    attribute: AST.VAttribute | AST.VDirective,\n): attribute is AST.VAttribute {\n    return attribute.directive === false && attribute.key.name === \"lang\"\n}\n\n/**\n * Get the `lang` attribute value from a given element.\n * @param element The element to get.\n * @param defaultLang The default value of the `lang` attribute.\n * @returns The `lang` attribute value.\n */\nfunction getLang(\n    element: AST.VElement | undefined,\n    defaultLang: string,\n): string {\n    const langAttr = element && element.startTag.attributes.find(isLang)\n    const lang = langAttr && langAttr.value && langAttr.value.value\n    return lang || defaultLang\n}\n\n/**\n * Parse the given source code.\n * @param code The source code to parse.\n * @param options The parser options.\n * @returns The parsing result.\n */\nexport function parseForESLint(\n    code: string,\n    options: any,\n): AST.ESLintExtendedProgram {\n    //eslint-disable-next-line no-param-reassign\n    options = Object.assign(\n        {\n            comment: true,\n            ecmaVersion: 2017,\n            loc: true,\n            range: true,\n            tokens: true,\n        },\n        options || {},\n    )\n\n    let result: AST.ESLintExtendedProgram\n    let document: AST.VDocumentFragment | null\n    let locationCalculator: LocationCalculator | null\n    if (!isVueFile(code, options)) {\n        result = parseScript(code, options)\n        document = null\n        locationCalculator = null\n    } else {\n        const skipParsingScript = options.parser === false\n        const tokenizer = new HTMLTokenizer(code, options)\n        const rootAST = new HTMLParser(tokenizer, options).parse()\n        locationCalculator = new LocationCalculator(\n            tokenizer.gaps,\n            tokenizer.lineTerminators,\n        )\n        const script = rootAST.children.find(isScriptElement)\n        const template = rootAST.children.find(isTemplateElement)\n        const templateLang = getLang(template, \"html\")\n        const concreteInfo: AST.HasConcreteInfo = {\n            tokens: rootAST.tokens,\n            comments: rootAST.comments,\n            errors: rootAST.errors,\n        }\n        const templateBody =\n            template != null && templateLang === \"html\"\n                ? Object.assign(template, concreteInfo)\n                : undefined\n\n        if (skipParsingScript || script == null) {\n            result = parseScript(\"\", options)\n        } else {\n            result = parseScriptElement(script, locationCalculator, options)\n        }\n\n        result.ast.templateBody = templateBody\n        document = rootAST\n    }\n\n    result.services = Object.assign(\n        result.services || {},\n        services.define(code, result.ast, document, locationCalculator, {\n            parserOptions: options,\n        }),\n    )\n\n    return result\n}\n\n/**\n * Parse the given source code.\n * @param code The source code to parse.\n * @param options The parser options.\n * @returns The parsing result.\n */\nexport function parse(code: string, options: any): AST.ESLintProgram {\n    return parseForESLint(code, options).ast\n}\n\nexport { AST }\n"],"names":["path","DUMMY_PARENT","path.extname","cursors.forward","cursors.backward","getLang","HTMLTokenizer","HTMLParser","services.define"],"mappings":"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EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,KAAK,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,KAAK,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,KAAK,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,gBAAgB,EAAC,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,EAAE,EAAC,UAAU,EAAC,EAAC,eAAe,EAAC,CAAC,KAAK,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,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IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,GAAG,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,GAAG,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,KAAK,CAAC,EAAC,YAAY,EAAC,CAAC,GAAG,CAAC,EAAC,YAAY,EAAC,CAAC,KAAK,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,KAAK,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,YAAY,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,YAAY,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,KAAK,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,KAAK,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,EAAE,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,GAAG,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,GAAG,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,GAAG,CAAC,EAAC,WAAW,EAAC,CAAC,GAAG,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,EAAE,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,EAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAE,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAE,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAE,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAE,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,EAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,EAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,EAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,EAAC,KAAK,EAAC,CAAC,EAAE,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,EAAE,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,EAAE,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,EAAE,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,EAAE,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,EAAE,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,EAAC,IAAI,EAAC,CAAC,EAAE,CAAC,EAAC,IAAI,EAAC,CAAC,EAAE,CAAC,EAAC,IAAI,EAAC,CAAC,EAAE,CAAC,EAAC,IAAI,EAAC,CAAC,EAAE,CAAC,EAAC,EAAC,CAAC,CAAA;;ACR/zuC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAA;AACrB,AAAO,MAAM,IAAI,GAAG,IAAI,CAAA;AACxB,AAAO,MAAM,UAAU,GAAG,IAAI,CAAA;AAC9B,AAAO,MAAM,eAAe,GAAG,IAAI,CAAA;AACnC,AAAO,MAAM,SAAS,GAAG,IAAI,CAAA;AAC7B,AAAO,MAAM,SAAS,GAAG,IAAI,CAAA;AAC7B,AAAO,MAAM,KAAK,GAAG,IAAI,CAAA;AACzB,AAAO,MAAM,gBAAgB,GAAG,IAAI,CAAA;AACpC,AAAO,MAAM,cAAc,GAAG,IAAI,CAAA;AAClC,AAAO,MAAM,WAAW,GAAG,IAAI,CAAA;AAC/B,AAAO,MAAM,SAAS,GAAG,IAAI,CAAA;AAC7B,AAAO,MAAM,UAAU,GAAG,IAAI,CAAA;AAC9B,AAAO,MAAM,YAAY,GAAG,IAAI,CAAA;AAChC,AAAO,MAAM,OAAO,GAAG,IAAI,CAAA;AAC3B,AAAO,MAAM,OAAO,GAAG,IAAI,CAAA;AAC3B,AAAO,MAAM,OAAO,GAAG,IAAI,CAAA;AAC3B,AAAO,MAAM,SAAS,GAAG,IAAI,CAAA;AAC7B,AAAO,MAAM,cAAc,GAAG,IAAI,CAAA;AAClC,AAAO,MAAM,WAAW,GAAG,IAAI,CAAA;AAC/B,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,aAAa,GAAG,IAAI,CAAA;AACjC,AAAO,MAAM,eAAe,GAAG,IAAI,CAAA;AACnC,AAAO,MAAM,eAAe,GAAG,IAAI,CAAA;AACnC,AAAO,MAAM,eAAe,GAAG,IAAI,CAAA;AACnC,AAAO,MAAM,eAAe,GAAG,IAAI,CAAA;AACnC,AAAO,MAAM,eAAe,GAAG,IAAI,CAAA;AACnC,AAAO,MAAM,mBAAmB,GAAG,IAAI,CAAA;AACvC,AAAO,MAAM,oBAAoB,GAAG,IAAI,CAAA;AACxC,AAAO,MAAM,YAAY,GAAG,IAAI,CAAA;AAChC,AAAO,MAAM,aAAa,GAAG,IAAI,CAAA;AACjC,AAAO,MAAM,aAAa,GAAG,IAAI,CAAA;AACjC,AAAO,MAAM,aAAa,GAAG,IAAI,CAAA;AACjC,AAAO,MAAM,aAAa,GAAG,IAAI,CAAA;AACjC,AAAO,MAAM,kBAAkB,GAAG,IAAI,CAAA;AACtC,AAAO,MAAM,mBAAmB,GAAG,IAAI,CAAA;AACvC,AAAO,MAAM,gBAAgB,GAAG,MAAM,CAAA;AAOtC,SAAgB,YAAY,CAAC,EAAU;IACnC,OAAO,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,eAAe,IAAI,EAAE,KAAK,KAAK,CAAA;AAC9G,CAAC;AAOD,SAAgB,aAAa,CAAC,EAAU;IACpC,OAAO,EAAE,IAAI,eAAe,IAAI,EAAE,IAAI,eAAe,CAAA;AACzD,CAAC;AAOD,SAAgB,aAAa,CAAC,EAAU;IACpC,OAAO,EAAE,IAAI,aAAa,IAAI,EAAE,IAAI,aAAa,CAAA;AACrD,CAAC;AAOD,SAAgB,QAAQ,CAAC,EAAU;IAC/B,OAAO,aAAa,CAAC,EAAE,CAAC,IAAI,aAAa,CAAC,EAAE,CAAC,CAAA;AACjD,CAAC;AAOD,SAAgB,OAAO,CAAC,EAAU;IAC9B,OAAO,EAAE,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,CAAA;AACzC,CAAC;AAOD,SAAgB,eAAe,CAAC,EAAU;IACtC,OAAO,EAAE,IAAI,eAAe,IAAI,EAAE,IAAI,eAAe,CAAA;AACzD,CAAC;AAOD,SAAgB,eAAe,CAAC,EAAU;IACtC,OAAO,EAAE,IAAI,aAAa,IAAI,EAAE,IAAI,aAAa,CAAA;AACrD,CAAC;AAOD,SAAgB,UAAU,CAAC,EAAU;IACjC,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,CAAA;AACpE,CAAC;AAOD,SAAgB,SAAS,CAAC,EAAU;IAChC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,MAAM,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,CAAC,CAAA;AAChE,CAAC;AAOD,SAAgB,WAAW,CAAC,EAAU;IAClC,OAAO,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAA;AACvC,CAAC;AAOD,SAAgB,eAAe,CAAC,EAAU;IACtC,OAAO,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAA;AACvC,CAAC;AAOD,SAAgB,cAAc,CAAC,EAAU;IACrC,QACI,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM;SAC5B,CAAC,EAAE,GAAG,MAAM,MAAM,MAAM,IAAI,EAAE,IAAI,QAAQ,CAAC,EAC/C;AACL,CAAC;AAWD,SAAgB,gBAAgB,CAAC,EAAU;IACvC,OAAO,EAAE,GAAG,MAAM,CAAA;AACtB,CAAC;;MCAY,SAAS;IAoDlB,YAAmB,IAAY,EAAE,aAA6B;QAvCtD,2BAAsB,GAAqC,IAAI,CAAA;QAwCnE,KAAK,CAAC,mCAAmC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACvD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;QACd,IAAI,CAAC,eAAe,GAAG,EAAE,CAAA;QACzB,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,EAAE,CAAA;QACxC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QACzB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAChB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QACb,IAAI,CAAC,KAAK,GAAG,MAAM,CAAA;QACnB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAA;QACzB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAChB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAA;QACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;QACf,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAChB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QACxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;QAC5B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAA;QAC1B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAA;QAC1B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAA;QACvB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,IAAI,CAAA;QACxB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAA;KACjC;IAMM,SAAS;QACZ,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,CAAA;QAC3B,OACI,IAAI,CAAC,cAAc,IAAI,IAAI;aAC1B,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,EAClC;YACE,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;gBAC7D,IAAI,CAAC,sBAAsB,EAAE,CAAA;gBAC7B,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;oBAC7B,MAAK;iBACR;aACJ;YAED,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;gBACxB,EAAE,GAAG,IAAI,CAAC,aAAa,CAAA;aAC1B;iBAAM;gBACH,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;aACnC;YAED,KAAK,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA;SACpC;QAED;YACI,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAA;YAC1C,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,OAAO,KAAK,CAAA;aACf;SACJ;QAED,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,CAAA;QAElB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;YAC3B,IAAI,CAAC,QAAQ,EAAE,CAAA;YAEf,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAA;YAC1C,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,OAAO,KAAK,CAAA;aACf;SACJ;QACD,OAAO,IAAI,CAAC,YAAY,CAAA;KAC3B;IAMO,qBAAqB;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAA;QACjC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC1B,OAAO,KAAK,CAAA;KACf;IAMO,oBAAoB;QACxB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACjC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAA;YACxB,OAAO,GAAG,CAAA;SACb;QAED,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA;QACpD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACjC,IAAI,CAAC,eAAe,EAAE,CAAA;YACtB,IAAI,CAAC,aAAa,GAAG,GAAG,CAAA;YACxB,OAAO,GAAG,CAAA;SACb;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAW,CAAA;QAEvD,IACI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9C,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EACzD;YACE,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;SACrD;QACD,IAAI,cAAc,CAAC,EAAE,CAAC,EAAE;YACpB,IAAI,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,CAAA;SACxD;QACD,IAAI,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACnD,IAAI,CAAC,gBAAgB,CAAC,mCAAmC,CAAC,CAAA;SAC7D;QAGD,IAAI,IAAI,CAAC,aAAa,KAAK,eAAe,IAAI,EAAE,KAAK,SAAS,EAAE;YAC5D,IAAI,CAAC,aAAa,GAAG,SAAS,CAAA;YAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC3B,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACrC;QAGD,IAAI,CAAC,eAAe,EAAE,CAAA;QACtB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QAGvB,IAAI,EAAE,KAAK,eAAe,EAAE;YACxB,OAAO,SAAS,CAAA;SACnB;QAED,OAAO,EAAE,CAAA;KACZ;IAKO,eAAe;QACnB,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;YAClC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACtC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;YACd,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;SAClB;aAAM;YACH,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA;SACvD;KACJ;IAOO,WAAW,CAAC,KAAqB;QACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,OAAO,KAAK,CAAA;KACf;IAMO,gBAAgB,CAAC,IAAe;QACpC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAC7B,IAAI,EACJ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,CACd,CAAA;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAEvB,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;KAC/C;IAKO,iBAAiB;QACrB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAA;QACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAA;QAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAA;KACtC;IAKO,mBAAmB;QACvB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAA;KAC7B;IAOO,UAAU,CAAC,IAAe;QAC9B,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,CAAC,EAAE;YAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAA;SAC3B;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAA;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAA;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAEpC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;YAC3B,IAAI,CAAC,QAAQ,EAAE,CAAA;SAClB;QACD,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAA;QAE1B,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,GAAG;YAC/B,IAAI;YACJ,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACnB,GAAG,EAAE;gBACD,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;gBACvB,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE;aAChC;YACD,KAAK,EAAE,EAAE;SACZ,CAAC,CAAA;QAEF,KAAK,CAAC,2BAA2B,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QACtD,OAAO,IAAI,CAAC,YAAY,CAAA;KAC3B;IAMO,QAAQ;QACZ,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;SACnC;QACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,CAAC,EAAE;YAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAA;SAC3B;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAA;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAA;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAA;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAE7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QACxB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAA;QAE1B,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;QACvB,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;QACzB,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAA;QAE7B,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,WAAW,EAAE;YAC3C,KAAK,CACD,gCAAgC,EAChC,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,KAAK,CACd,CAAA;YACD,OAAO,IAAI,CAAA;SACd;QAED,IAAI,WAAW,EAAE;YACb,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE;gBAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAA;aAChC;YACD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAA;YAC7B,KAAK,CACD,2CAA2C,EAC3C,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,KAAK,CACd,CAAA;SACJ;aAAM;YACH,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;SAC1B;QAED,OAAO,KAAK,CAAA;KACf;IAMO,WAAW,CAAC,KAAY;QAC5B,MAAM,CACF,IAAI,CAAC,cAAc,IAAI,IAAI,EAC3B,oDAAoD,CACvD,CAAA;QACD,KAAK,CACD,kCAAkC,EAClC,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,KAAK,CACd,CAAA;QAED,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;QAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE;YAC9B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAA;SAChC;KACJ;IAMO,kBAAkB;QACtB,QACI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EACpC;KACJ;IAKO,sBAAsB;QAC1B,MAAM,CACF,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAC7B,qDAAqD,CACxD,CAAA;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAA;QACnC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;QAE5B,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACjC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;SAC1B;KACJ;IAKO,wBAAwB;QAC5B,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAA;QACjC,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAA;QAErC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAA;QAC/B,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAEjE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAA;QACzC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;KAC/B;IAOO,gBAAgB,CAAC,EAAU,EAAE,QAA0B;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAA;QAC/B,IAAI,KAAK,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE;YAChE,MAAM,IAAI,GAAG,QAAQ,GAAG,IAAI,QAAQ,QAAQ,GAAG,WAAW,CAAA;YAC1D,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,QAAQ,GAAG,UAAU,CAAA;YAExD,MAAM,IAAI,KAAK,CACX,sCAAsC,IAAI,aAAa,IAAI,GAAG,CACjE,CAAA;SACJ;QAED,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;KAC1C;IAMO,uBAAuB;QAC3B,QACI,IAAI,CAAC,YAAY,IAAI,IAAI;YACzB,IAAI,CAAC,gBAAgB,IAAI,IAAI;YAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,gBAAgB;YAC3C,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAC1D;KACJ;IAOS,IAAI,CAAC,EAAU;QACrB,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAE1B,OAAO,IAAI,EAAE;YACT,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,CAAC,GAAG,gBAAgB,GAAG,UAAU,CAAA;YAC7D,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI,EAAE;gBAC9D,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;aACtC;YACD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;gBAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;aACxB;YAED,IAAI,EAAE,KAAK,SAAS,EAAE;gBAClB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAA;gBACzB,OAAO,qBAAqB,CAAA;aAC/B;YACD,IAAI,EAAE,KAAK,cAAc,EAAE;gBACvB,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBACxB,OAAO,UAAU,CAAA;aACpB;YACD,IAAI,EAAE,KAAK,kBAAkB,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACrD,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBACxB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAA;gBACzB,OAAO,oBAAoB,CAAA;aAC9B;YACD,IAAI,EAAE,KAAK,mBAAmB,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACtD,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBACxB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAA;gBACzB,OAAO,kBAAkB,CAAA;aAC5B;YACD,IAAI,EAAE,KAAK,GAAG,EAAE;gBACZ,OAAO,MAAM,CAAA;aAChB;YAED,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;aACrD;YACD,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YAE/B,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,MAAM,CAAC,EAAU;QACvB,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAE1B,OAAO,IAAI,EAAE;YACT,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,CAAC,GAAG,gBAAgB,GAAG,gBAAgB,CAAA;YACnE,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI,EAAE;gBAC9D,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;aACtC;YACD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;gBAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;aACxB;YAED,IAAI,EAAE,KAAK,SAAS,EAAE;gBAClB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAA;gBAC3B,OAAO,qBAAqB,CAAA;aAC/B;YACD,IAAI,EAAE,KAAK,cAAc,EAAE;gBACvB,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBACxB,OAAO,uBAAuB,CAAA;aACjC;YACD,IAAI,EAAE,KAAK,kBAAkB,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACrD,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBACxB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAA;gBAC3B,OAAO,oBAAoB,CAAA;aAC9B;YACD,IAAI,EAAE,KAAK,mBAAmB,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACtD,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBACxB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAA;gBAC3B,OAAO,kBAAkB,CAAA;aAC5B;YACD,IAAI,EAAE,KAAK,GAAG,EAAE;gBACZ,OAAO,MAAM,CAAA;aAChB;YAED,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;gBAClD,EAAE,GAAG,gBAAgB,CAAA;aACxB;YACD,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YAE/B,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,OAAO,CAAC,EAAU;QACxB,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAE1B,OAAO,IAAI,EAAE;YACT,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,CAAC,GAAG,gBAAgB,GAAG,aAAa,CAAA;YAChE,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI,EAAE;gBAC9D,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;aACtC;YACD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;gBAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;aACxB;YAED,IAAI,EAAE,KAAK,cAAc,EAAE;gBACvB,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBACxB,OAAO,wBAAwB,CAAA;aAClC;YACD,IAAI,EAAE,KAAK,kBAAkB,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACrD,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBACxB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;gBAC5B,OAAO,oBAAoB,CAAA;aAC9B;YACD,IAAI,EAAE,KAAK,mBAAmB,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACtD,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBACxB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;gBAC5B,OAAO,kBAAkB,CAAA;aAC5B;YACD,IAAI,EAAE,KAAK,GAAG,EAAE;gBACZ,OAAO,MAAM,CAAA;aAChB;YAED,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;gBAClD,EAAE,GAAG,gBAAgB,CAAA;aACxB;YACD,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YAE/B,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,QAAQ,CAAC,EAAU;QACzB,IAAI,EAAE,KAAK,gBAAgB,EAAE;YACzB,OAAO,yBAAyB,CAAA;SACnC;QACD,IAAI,EAAE,KAAK,OAAO,EAAE;YAChB,OAAO,cAAc,CAAA;SACxB;QACD,IAAI,QAAQ,CAAC,EAAE,CAAC,EAAE;YACd,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;YAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;SACtC;QACD,IAAI,EAAE,KAAK,aAAa,EAAE;YACtB,IAAI,CAAC,gBAAgB,CACjB,8CAA8C,CACjD,CAAA;YACD,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAA;YACnC,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;SAC3C;QACD,IAAI,EAAE,KAAK,GAAG,EAAE;YACZ,IAAI,CAAC,mBAAmB,EAAE,CAAA;YAC1B,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAA;YAC5C,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;YACjD,OAAO,MAAM,CAAA;SAChB;QAED,IAAI,CAAC,gBAAgB,CAAC,qCAAqC,CAAC,CAAA;QAC5D,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;QACjD,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;KAClC;IAOS,YAAY,CAAC,EAAU;QAC7B,IAAI,QAAQ,CAAC,EAAE,CAAC,EAAE;YACd,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;YACjC,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;SACtC;QACD,IAAI,EAAE,KAAK,iBAAiB,EAAE;YAC1B,IAAI,CAAC,QAAQ,EAAE,CAAA;YACf,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAA;YAC7C,OAAO,MAAM,CAAA;SAChB;QACD,IAAI,EAAE,KAAK,GAAG,EAAE;YACZ,IAAI,CAAC,mBAAmB,EAAE,CAAA;YAC1B,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAA;YAC5C,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;YACjD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;YAC1C,OAAO,MAAM,CAAA;SAChB;QAED,IAAI,CAAC,gBAAgB,CAAC,qCAAqC,CAAC,CAAA;QAC5D,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAA;QACnC,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;KAC3C;IAOS,QAAQ,CAAC,EAAU;QACzB,OAAO,IAAI,EAAE;YACT,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE;gBAClB,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,OAAO,uBAAuB,CAAA;aACjC;YACD,IAAI,EAAE,KAAK,OAAO,EAAE;gBAChB,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBACxB,OAAO,wBAAwB,CAAA;aAClC;YACD,IAAI,EAAE,KAAK,iBAAiB,EAAE;gBAC1B,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;gBAC/B,OAAO,MAAM,CAAA;aAChB;YACD,IAAI,EAAE,KAAK,GAAG,EAAE;gBACZ,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA;gBACnC,OAAO,MAAM,CAAA;aAChB;YACD,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;gBAClD,EAAE,GAAG,gBAAgB,CAAA;aACxB;YAED,IAAI,CAAC,gBAAgB,CACjB,aAAa,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,EAC7C,IAAI,CACP,CAAA;YAED,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,qBAAqB,CAAC,EAAU;QACtC,IAAI,EAAE,KAAK,OAAO,EAAE;YAChB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;YAChB,OAAO,qBAAqB,CAAA;SAC/B;QAED,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAA;QACvD,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;KACpC;IAOS,mBAAmB,CAAC,EAAU;QACpC,IAAI,QAAQ,CAAC,EAAE,CAAC,EAAE;YACd,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;YACjC,OAAO,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAA;SACjD;QAED,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAA;QACvD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;QAChD,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;KACpC;IAOS,mBAAmB,CAAC,EAAU;QACpC,OAAO,IAAI,EAAE;YACT,IAAI,YAAY,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;gBACpD,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,OAAO,uBAAuB,CAAA;aACjC;YACD,IAAI,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;gBAClD,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBACxB,OAAO,wBAAwB,CAAA;aAClC;YACD,IAAI,EAAE,KAAK,iBAAiB,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;gBAC5D,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;gBAC/B,OAAO,MAAM,CAAA;aAChB;YACD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBACf,IAAI,CAAC,wBAAwB,EAAE,CAAA;gBAC/B,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAA;gBACvD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;gBAChD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;oBAC3B,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAA;iBAC/C;gBACD,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;aACpC;YAED,IAAI,CAAC,gBAAgB,CACjB,aAAa,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,EAC7C,gBAAgB,CACnB,CAAA;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAEpB,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,sBAAsB,CAAC,EAAU;QACvC,IAAI,EAAE,KAAK,OAAO,EAAE;YAChB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;YAChB,OAAO,sBAAsB,CAAA;SAChC;QAED,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;QACpD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;KACrC;IAOS,oBAAoB,CAAC,EAAU;QACrC,IAAI,QAAQ,CAAC,EAAE,CAAC,EAAE;YACd,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;YACjC,OAAO,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAA;SAClD;QAED,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;QACpD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;QAC7C,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;KACrC;IAOS,oBAAoB,CAAC,EAAU;QACrC,OAAO,IAAI,EAAE;YACT,IAAI,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;gBAClD,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBACxB,OAAO,wBAAwB,CAAA;aAClC;YACD,IAAI,EAAE,KAAK,iBAAiB,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;gBAC5D,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;gBAC/B,OAAO,MAAM,CAAA;aAChB;YACD,IAAI,YAAY,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;gBACpD,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,OAAO,uBAAuB,CAAA;aACjC;YACD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;gBACxD,IAAI,CAAC,wBAAwB,EAAE,CAAA;gBAC/B,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;gBACpD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;gBAC7C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;oBAC3B,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;iBAC5C;gBACD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;aACrC;YAED,IAAI,CAAC,gBAAgB,CACjB,aAAa,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,EAC7C,gBAAgB,CACnB,CAAA;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAEpB,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;QAED,SAAS,qBAAqB,CAAkB,MAAc;YAC1D,QACI,IAAI,CAAC,YAAY;gBACjB,IAAI,CAAC,gBAAgB;gBACrB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAClC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CACzD,EACJ;SACJ;KACJ;IAOS,qBAAqB,CAAC,EAAU;QACtC,OAAO,YAAY,CAAC,EAAE,CAAC,EAAE;YACrB,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;QAED,IAAI,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,iBAAiB,IAAI,EAAE,KAAK,GAAG,EAAE;YAC1D,OAAO,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAA;SAClD;QAED,IAAI,EAAE,KAAK,WAAW,EAAE;YACpB,IAAI,CAAC,gBAAgB,CACjB,8CAA8C,CACjD,CAAA;YACD,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;YACjC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAA;YAC3C,OAAO,gBAAgB,CAAA;SAC1B;QAED,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAA;KAC5C;IAOS,cAAc,CAAC,EAAU;QAC/B,OAAO,IAAI,EAAE;YACT,IACI,YAAY,CAAC,EAAE,CAAC;gBAChB,EAAE,KAAK,OAAO;gBACd,EAAE,KAAK,iBAAiB;gBACxB,EAAE,KAAK,GAAG,EACZ;gBACE,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,OAAO,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAA;aAClD;YACD,IAAI,EAAE,KAAK,WAAW,EAAE;gBACpB,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAA;gBAClC,OAAO,wBAAwB,CAAA;aAClC;YAED,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;gBAClD,EAAE,GAAG,gBAAgB,CAAA;aACxB;YACD,IACI,EAAE,KAAK,cAAc;gBACrB,EAAE,KAAK,UAAU;gBACjB,EAAE,KAAK,cAAc,EACvB;gBACE,IAAI,CAAC,gBAAgB,CAAC,wCAAwC,CAAC,CAAA;aAClE;YAED,IAAI,CAAC,gBAAgB,CACjB,aAAa,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,EAC7C,gBAAgB,CACnB,CAAA;YACD,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,oBAAoB,CAAC,EAAU;QACrC,OAAO,YAAY,CAAC,EAAE,CAAC,EAAE;YACrB,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;QAED,IAAI,EAAE,KAAK,OAAO,EAAE;YAChB,IAAI,CAAC,iBAAiB,EAAE,CAAA;YACxB,OAAO,wBAAwB,CAAA;SAClC;QACD,IAAI,EAAE,KAAK,WAAW,EAAE;YACpB,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAA;YAClC,OAAO,wBAAwB,CAAA;SAClC;QACD,IAAI,EAAE,KAAK,iBAAiB,EAAE;YAC1B,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;YAC/B,OAAO,MAAM,CAAA;SAChB;QAED,IAAI,EAAE,KAAK,GAAG,EAAE;YACZ,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA;YACnC,OAAO,MAAM,CAAA;SAChB;QAED,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAA;KAC5C;IAOS,sBAAsB,CAAC,EAAU;QACvC,IAAI,CAAC,QAAQ,EAAE,CAAA;QAEf,OAAO,YAAY,CAAC,EAAE,CAAC,EAAE;YACrB,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;QAED,IAAI,EAAE,KAAK,iBAAiB,EAAE;YAC1B,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAA;YAChD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;YAC/B,OAAO,MAAM,CAAA;SAChB;QAED,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;QAC9B,IAAI,EAAE,KAAK,cAAc,EAAE;YACvB,OAAO,+BAA+B,CAAA;SACzC;QACD,IAAI,EAAE,KAAK,UAAU,EAAE;YACnB,OAAO,+BAA+B,CAAA;SACzC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAA;KACtD;IAOS,6BAA6B,CAAC,EAAU;QAC9C,OAAO,IAAI,EAAE;YACT,IAAI,EAAE,KAAK,cAAc,EAAE;gBACvB,OAAO,8BAA8B,CAAA;aACxC;YACD,IAAI,EAAE,KAAK,SAAS,EAAE;gBAClB,IAAI,CAAC,WAAW,GAAG,+BAA+B,CAAA;gBAClD,OAAO,qBAAqB,CAAA;aAC/B;YAED,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;gBAClD,EAAE,GAAG,gBAAgB,CAAA;aACxB;YACD,IAAI,EAAE,KAAK,GAAG,EAAE;gBACZ,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA;gBACnC,OAAO,MAAM,CAAA;aAChB;YAED,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;YACxC,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,6BAA6B,CAAC,EAAU;QAC9C,OAAO,IAAI,EAAE;YACT,IAAI,EAAE,KAAK,UAAU,EAAE;gBACnB,OAAO,8BAA8B,CAAA;aACxC;YACD,IAAI,EAAE,KAAK,SAAS,EAAE;gBAClB,IAAI,CAAC,WAAW,GAAG,+BAA+B,CAAA;gBAClD,OAAO,qBAAqB,CAAA;aAC/B;YAED,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;gBAClD,EAAE,GAAG,gBAAgB,CAAA;aACxB;YACD,IAAI,EAAE,KAAK,GAAG,EAAE;gBACZ,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA;gBACnC,OAAO,MAAM,CAAA;aAChB;YAED,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;YACxC,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,wBAAwB,CAAC,EAAU;QACzC,OAAO,IAAI,EAAE;YACT,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE;gBAClB,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,OAAO,uBAAuB,CAAA;aACjC;YACD,IAAI,EAAE,KAAK,SAAS,EAAE;gBAClB,IAAI,CAAC,WAAW,GAAG,0BAA0B,CAAA;gBAC7C,OAAO,qBAAqB,CAAA;aAC/B;YACD,IAAI,EAAE,KAAK,iBAAiB,EAAE;gBAC1B,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;gBAC/B,OAAO,MAAM,CAAA;aAChB;YAED,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;gBAClD,EAAE,GAAG,gBAAgB,CAAA;aACxB;YACD,IACI,EAAE,KAAK,cAAc;gBACrB,EAAE,KAAK,UAAU;gBACjB,EAAE,KAAK,cAAc;gBACrB,EAAE,KAAK,WAAW;gBAClB,EAAE,KAAK,YAAY,EACrB;gBACE,IAAI,CAAC,gBAAgB,CACjB,kDAAkD,CACrD,CAAA;aACJ;YACD,IAAI,EAAE,KAAK,GAAG,EAAE;gBACZ,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA;gBACnC,OAAO,MAAM,CAAA;aAChB;YAED,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;YACxC,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,4BAA4B,CAAC,EAAU;QAC7C,IAAI,CAAC,QAAQ,EAAE,CAAA;QAEf,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE;YAClB,OAAO,uBAAuB,CAAA;SACjC;QACD,IAAI,EAAE,KAAK,OAAO,EAAE;YAChB,IAAI,CAAC,iBAAiB,EAAE,CAAA;YACxB,OAAO,wBAAwB,CAAA;SAClC;QACD,IAAI,EAAE,KAAK,iBAAiB,EAAE;YAC1B,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;YAC/B,OAAO,MAAM,CAAA;SAChB;QAED,IAAI,EAAE,KAAK,GAAG,EAAE;YACZ,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA;YACnC,OAAO,MAAM,CAAA;SAChB;QAED,IAAI,CAAC,gBAAgB,CAAC,uCAAuC,CAAC,CAAA;QAC9D,OAAO,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAA;KACnD;IAOS,sBAAsB,CAAC,EAAU;QACvC,IAAI,EAAE,KAAK,iBAAiB,EAAE;YAC1B,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAA;YAI1C,OAAO,MAAM,CAAA;SAChB;QAED,IAAI,EAAE,KAAK,GAAG,EAAE;YACZ,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA;YACnC,OAAO,MAAM,CAAA;SAChB;QAED,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;QAClD,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAA;KACnD;IAOS,aAAa,CAAC,EAAU;QAC9B,OAAO,IAAI,EAAE;YACT,IAAI,EAAE,KAAK,iBAAiB,EAAE;gBAC1B,OAAO,MAAM,CAAA;aAChB;YAED,IAAI,EAAE,KAAK,GAAG,EAAE;gBACZ,OAAO,MAAM,CAAA;aAChB;YACD,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,EAAE,GAAG,gBAAgB,CAAA;aACxB;YACD,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YAE/B,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,uBAAuB,CAAC,EAAU;QACxC,IAAI,EAAE,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;YAC3D,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;YAChB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;YAEhB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;YAC9B,OAAO,eAAe,CAAA;SACzB;QACD,IACI,EAAE,KAAK,eAAe;YACtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,QAAQ,EAChE;YAOE,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAA;YACnC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAA;YAC7C,OAAO,eAAe,CAAA;SACzB;QACD,IACI,EAAE,KAAK,mBAAmB;YAC1B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,QAAQ,EAChE;YACE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;YAChB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;YAEhB,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,IAAI,EAAE;gBAC5B,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAA;gBAC9C,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,KAAK,GAAG,SAAS,CAAA;gBACrD,OAAO,eAAe,CAAA;aACzB;YAED,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;YAChC,OAAO,eAAe,CAAA;SACzB;QAED,IAAI,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,CAAA;QACnD,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAA;QACnC,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;KAC3C;IAOS,aAAa,CAAC,EAAU;QAC9B,IAAI,EAAE,KAAK,YAAY,EAAE;YACrB,OAAO,oBAAoB,CAAA;SAC9B;QACD,IAAI,EAAE,KAAK,iBAAiB,EAAE;YAC1B,IAAI,CAAC,gBAAgB,CAAC,iCAAiC,CAAC,CAAA;YACxD,OAAO,MAAM,CAAA;SAChB;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;KACrC;IAOS,kBAAkB,CAAC,EAAU;QACnC,IAAI,EAAE,KAAK,YAAY,EAAE;YACrB,OAAO,aAAa,CAAA;SACvB;QAED,IAAI,EAAE,KAAK,iBAAiB,EAAE;YAC1B,IAAI,CAAC,gBAAgB,CAAC,iCAAiC,CAAC,CAAA;YACxD,OAAO,MAAM,CAAA;SAChB;QACD,IAAI,EAAE,KAAK,GAAG,EAAE;YACZ,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAA;YACvC,OAAO,MAAM,CAAA;SAChB;QAED,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;QAClD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;KACrC;IAOS,OAAO,CAAC,EAAU;QACxB,OAAO,IAAI,EAAE;YACT,IAAI,EAAE,KAAK,cAAc,EAAE;gBACvB,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;gBACpD,OAAO,wBAAwB,CAAA;aAClC;YACD,IAAI,EAAE,KAAK,YAAY,EAAE;gBACrB,OAAO,kBAAkB,CAAA;aAC5B;YAED,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;gBAClD,EAAE,GAAG,gBAAgB,CAAA;aACxB;YACD,IAAI,EAAE,KAAK,GAAG,EAAE;gBACZ,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAA;gBACvC,OAAO,MAAM,CAAA;aAChB;YAED,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;YACxC,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,sBAAsB,CAAC,EAAU;QACvC,OAAO,IAAI,EAAE;YACT,IAAI,EAAE,KAAK,gBAAgB,EAAE;gBACzB,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;gBACxC,OAAO,6BAA6B,CAAA;aACvC;YACD,IAAI,EAAE,KAAK,cAAc,EAAE;gBACvB,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;aACrC;YAED,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;YACxC,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,2BAA2B,CAAC,EAAU;QAC5C,IAAI,EAAE,KAAK,YAAY,EAAE;YACrB,OAAO,kCAAkC,CAAA;SAC5C;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;KACrC;IAOS,gCAAgC,CAAC,EAAU;QACjD,IAAI,EAAE,KAAK,YAAY,EAAE;YACrB,OAAO,uCAAuC,CAAA;SACjD;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAA;KAC9C;IAOS,qCAAqC,CAC3C,EAAU;QAEV,IAAI,EAAE,KAAK,iBAAiB,IAAI,EAAE,KAAK,GAAG,EAAE;YACxC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAA;SAC1C;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;KACzC;IAOS,gBAAgB,CAAC,EAAU;QACjC,IAAI,EAAE,KAAK,YAAY,EAAE;YACrB,OAAO,aAAa,CAAA;SACvB;QAED,IAAI,EAAE,KAAK,GAAG,EAAE;YACZ,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAA;YACvC,OAAO,MAAM,CAAA;SAChB;QAED,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;QAClD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;KACrC;IAOS,WAAW,CAAC,EAAU;QAC5B,OAAO,IAAI,EAAE;YACT,IAAI,EAAE,KAAK,iBAAiB,EAAE;gBAC1B,OAAO,MAAM,CAAA;aAChB;YACD,IAAI,EAAE,KAAK,gBAAgB,EAAE;gBACzB,OAAO,kBAAkB,CAAA;aAC5B;YAED,IAAI,EAAE,KAAK,GAAG,EAAE;gBACZ,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAA;gBACvC,OAAO,MAAM,CAAA;aAChB;YAED,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;YAElD,IAAI,EAAE,KAAK,YAAY,EAAE;gBACrB,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;gBAClD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;aACrC;YACD,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,gBAAgB,CAAC,EAAU;QACjC,IAAI,EAAE,KAAK,YAAY,EAAE;YACrB,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;YAClD,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA;YACtD,OAAO,kBAAkB,CAAA;SAC5B;QAED,IAAI,EAAE,KAAK,iBAAiB,EAAE;YAC1B,IAAI,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,CAAA;YACnD,OAAO,MAAM,CAAA;SAChB;QACD,IAAI,EAAE,KAAK,GAAG,EAAE;YACZ,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAA;YACvC,OAAO,MAAM,CAAA;SAChB;QAED,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;QAClD,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA;QACtD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;KACrC;IAOS,aAAa,CAAC,EAAU;QAC9B,OAAO,IAAI,EAAE;YACT,IAAI,EAAE,KAAK,oBAAoB,EAAE;gBAC7B,OAAO,uBAAuB,CAAA;aACjC;YAED,IAAI,EAAE,KAAK,GAAG,EAAE;gBACZ,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAA;gBACrC,OAAO,MAAM,CAAA;aAChB;YAED,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAA;YAC1C,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,qBAAqB,CAAC,EAAU;QACtC,IAAI,EAAE,KAAK,oBAAoB,EAAE;YAC7B,OAAO,mBAAmB,CAAA;SAC7B;QAED,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAA;QAC5D,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;KAC3C;IAOS,iBAAiB,CAAC,EAAU;QAClC,OAAO,IAAI,EAAE;YACT,IAAI,EAAE,KAAK,iBAAiB,EAAE;gBAC1B,OAAO,MAAM,CAAA;aAChB;YACD,IAAI,EAAE,KAAK,oBAAoB,EAAE;gBAC7B,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAA;gBAC5D,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAA;gBAC5D,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;aAC3C;YAED,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAA;YAC5D,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,mBAAmB,CAAC,EAAU;QACpC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;QACpC,IAAI,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,CAAA;QAEzB,IAAI,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,cAAc,IAAI,EAAE,KAAK,GAAG,EAAE;YACzD,OAAO,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAA;SACrD;QACD,IAAI,EAAE,KAAK,WAAW,EAAE;YACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACpB,OAAO,6BAA6B,CAAA;SACvC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAA;KACvD;IAOS,yBAAyB,CAAC,EAAU;QAC1C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAChC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAA;YAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAA;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;YAC/D,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;YAEjC,IAAI,UAAU,IAAI,IAAI,EAAE;gBACpB,SAAQ;aACX;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YAEnD,IAAI,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,CAAA;YACzB,IAAI,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,CAAA;YAEzB,IACI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;gBACnC,CAAC,IAAI;gBACL,IAAI,IAAI,IAAI;iBACX,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAC3D;gBACE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;oBACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAW,CAAC,CAAA;iBACjD;aACJ;iBAAM;gBACH,IAAI,CAAC,IAAI,EAAE;oBACP,IAAI,CAAC,gBAAgB,CACjB,6CAA6C,CAChD,CAAA;iBACJ;gBACD,IAAI,CAAC,MAAM,GAAG,UAAU,CAAA;aAC3B;YAED,OAAO,yBAAyB,CAAA;SACnC;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;YAC3B,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;SACnC;QACD,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QAE/B,OAAO,qBAAqB,CAAA;KAC/B;IAOS,mBAAmB,CAAC,EAAU;QACpC,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,EAAE;YAChC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YAC/B,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;QAED,IAAI,EAAE,KAAK,SAAS,EAAE;YAClB,IAAI,CAAC,gBAAgB,CAAC,mCAAmC,CAAC,CAAA;SAC7D;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;KAC5C;IAOS,2BAA2B,CAAC,EAAU;QAC5C,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;QAEf,IAAI,EAAE,KAAK,aAAa,IAAI,EAAE,KAAK,eAAe,EAAE;YAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACpB,OAAO,uCAAuC,CAAA;SACjD;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAA;KAC/D;IAOS,qCAAqC,CAC3C,EAAU;QAEV,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE;YAChB,OAAO,IAAI,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAA;SAC7D;QAED,IAAI,CAAC,gBAAgB,CACjB,kDAAkD,CACrD,CAAA;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAA;KACrD;IAOS,iCAAiC,CAAC,EAAU;QAClD,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE;YACb,OAAO,IAAI,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAA;SACzD;QAED,IAAI,CAAC,gBAAgB,CACjB,kDAAkD,CACrD,CAAA;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAA;KACrD;IAOS,+BAA+B,CAAC,EAAU;QAChD,OAAO,IAAI,EAAE;YACT,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE;gBACb,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,CAAA;aAC/C;iBAAM,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE;gBAC5B,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,CAAA;aAC/C;iBAAM,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE;gBAC5B,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,CAAA;aAC/C;iBAAM;gBACH,IAAI,EAAE,KAAK,SAAS,EAAE;oBAClB,OAAO,iCAAiC,CAAA;iBAC3C;gBAED,IAAI,CAAC,gBAAgB,CACjB,6CAA6C,CAChD,CAAA;gBACD,OAAO,IAAI,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAA;aAC7D;YAED,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,2BAA2B,CAAC,EAAU;QAC5C,OAAO,IAAI,EAAE;YACT,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE;gBACb,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,CAAA;aAC/C;iBAAM;gBACH,IAAI,EAAE,KAAK,SAAS,EAAE;oBAClB,OAAO,iCAAiC,CAAA;iBAC3C;gBAED,IAAI,CAAC,gBAAgB,CACjB,6CAA6C,CAChD,CAAA;gBACD,OAAO,IAAI,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAA;aAC7D;YAED,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAOS,+BAA+B,CAAC,GAAW;QACjD,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAA;QAEtB,IAAI,IAAI,KAAK,CAAC,EAAE;YACZ,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAA;YACjD,IAAI,GAAG,gBAAgB,CAAA;SAC1B;aAAM,IAAI,IAAI,GAAG,QAAQ,EAAE;YACxB,IAAI,CAAC,gBAAgB,CAAC,2CAA2C,CAAC,CAAA;YAClE,IAAI,GAAG,gBAAgB,CAAA;SAC1B;aAAM,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;YAC1B,IAAI,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,CAAA;YACtD,IAAI,GAAG,gBAAgB,CAAA;SAC1B;aAAM,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE;YAC7B,IAAI,CAAC,gBAAgB,CAAC,kCAAkC,CAAC,CAAA;SAC5D;aAAM,IAAI,IAAI,KAAK,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE;YAClE,IAAI,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,CAAA;YACpD,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAA;SACzC;QAED,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAA;QACpB,OAAO,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAA;KACrD;IAOS,uBAAuB,CAAC,GAAW;QACzC,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAA;QAIjC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAA;QAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAA;QAC/B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;YAC3B,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;SACnC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;QAG3C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAC/D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SACpB;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;KAC5C;IAQS,kBAAkB,CAAC,EAAU;;QACnC,IAAI,EAAE,KAAK,kBAAkB,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAA;YACnC,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAA;YAC/C,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAA;YAE/C,IAAI,QAAC,IAAI,CAAC,aAAa,CAAC,WAAW,0CAAE,sBAAsB,CAAA,EAAE;gBACzD,OAAO,IAAI,CAAC,WAAW,CAAA;aAC1B;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YAC3D,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;gBACnB,IAAI,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,CAAA;gBACpD,OAAO,IAAI,CAAC,WAAW,CAAA;aAC1B;YACD,IAAI,CAAC,sBAAsB,GAAG;gBAC1B,KAAK,EAAE,IAAI,CAAC,WAAW;aAC1B,CAAA;YACD,OAAO,mBAAmB,CAAA;SAC7B;QAED,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAA;QAC/C,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;KAC5C;IASS,iBAAiB,CAAC,EAAU;QAClC,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAuB,CAAC,KAAK,CAAA;QAEhD,OAAO,IAAI,EAAE;YACT,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,CAAC;kBACvB,gBAAgB;kBAChB,KAAK,KAAK,QAAQ;sBAClB,aAAa;sBACb,KAAK,KAAK,SAAS;0BACnB,gBAAgB;0BAChB,UAAU,CAAA;YAChB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI,EAAE;gBAC9D,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;aACtC;YACD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;gBAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;aACxB;YAED,IAAI,EAAE,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE;gBACzC,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAA;gBACtC,OAAO,qBAAqB,CAAA;aAC/B;YAKD,IAAI,EAAE,KAAK,mBAAmB,EAAE;gBAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBACxB,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAA;gBACtC,OAAO,kBAAkB,CAAA;aAC5B;YAGD,IAAI,EAAE,KAAK,GAAG,EAAE;gBACZ,IAAI,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,CAAA;gBACpD,OAAO,MAAM,CAAA;aAChB;YAED,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;aACrD;YACD,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YAE/B,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;SACnC;KACJ;IAMS,gBAAgB,CAAC,EAAU;QACjC,IAAI,EAAE,KAAK,mBAAmB,EAAE;YAC5B,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;YACjC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAA;YAChD,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAA;YAChD,OAAO,IAAI,CAAC,sBAAsB;kBAC5B,IAAI,CAAC,sBAAsB,CAAC,KAAK;kBACjC,IAAI,CAAC,WAAW,CAAA;SACzB;QAED,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAA;QAChD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;KAC5C;CACJ;;ACl4DD,SAAS,gBAAgB,CAAC,cAAwB;IAC9C,QAAQ,cAAc,CAAC,IAAI;QACvB,KAAK,YAAY;YACb,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QAEjC,KAAK,SAAS,EAAE;YACZ,MAAM,kBAAkB,GAAG,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;YAEzE,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;gBACnC,OAAO,KAAK,CAAC,GAAI,kBAAiC,CAAC,CAAA;aACtD;YACD,OAAO,IAAI,CAAA;SACd;QAED,KAAK,UAAU,EAAE;YACb,MAAM,kBAAkB,GAAG,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAe,CAAA;YAGvG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;gBAC5B,OAAO,IAAI,CAAA;aACd;YAMD,OAAO,YAAY,CAAC,GAAG,kBAAkB,CAAC,CAAA;SAC7C;QAED,KAAK,OAAO,CAAC;QACb,KAAK,YAAY,CAAC;QAClB,KAAK,SAAS,CAAC;QACf,KAAK,UAAU;YACX,OAAO,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QAEjD;YACI,OAAO,IAAI,CAAA;KAClB;AACL,CAAC;AAOD,SAAS,oBAAoB,CAAC,cAAwB;IAClD,QAAQ,cAAc,CAAC,IAAI;QACvB,KAAK,OAAO,CAAC;QACb,KAAK,YAAY,CAAC;QAClB,KAAK,SAAS,CAAC;QACf,KAAK,UAAU;YACX,OAAO,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QAEjG,KAAK,UAAU,CAAC;QAChB,KAAK,KAAK,CAAC;QACX,KAAK,SAAS;YACV,OAAO,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,aAAa,KAAK,GAAG,GAAG,oBAAoB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAA;QAEhH,KAAK,WAAW,CAAC;QACjB,KAAK,OAAO,CAAC;QACb,KAAK,WAAW,CAAC;QACjB,KAAK,gBAAgB;YACjB,OAAO,CAAC,CAAA;QAEZ;YACI,OAAO,CAAC,CAAA;KACf;AACL,CAAC;AAOD,SAAS,gBAAgB,CAAC,cAAwB;IAC9C,QAAQ,cAAc,CAAC,IAAI;QACvB,KAAK,OAAO,CAAC;QACb,KAAK,YAAY,CAAC;QAClB,KAAK,SAAS,CAAC;QACf,KAAK,UAAU;YACX,OAAO,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QAEzF,KAAK,UAAU,CAAC;QAChB,KAAK,KAAK,CAAC;QACX,KAAK,SAAS;YACV,OAAO,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,aAAa,KAAK,GAAG,GAAG,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAA;QAE5G,KAAK,YAAY;YACb,OAAO,CAAC,CAAA;QAEZ;YACI,OAAO,CAAC,CAAA;KACf;AACL,CAAC;AAYD,SAAS,kBAAkB,CAAC,SAAuB,EAAE,SAAuB;IACxE,OAAO,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,cAAc;QACtD,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,eAAe;SACpD,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AACjE,CAAC;AAQD,SAAS,gBAAgB,CAAC,WAAmB;IACzC,IAAI;QACA,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAA;KAC1D;IACD,OAAO,GAAG,EAAE;QACR,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,6BAA6B,WAAW,iBAAiB,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;SACzG;QACD,MAAM,GAAG,CAAA;KACZ;AACL,CAAC;AAOD,MAAM,aAAa,GAAG,OAAO,CAAwC,WAAW;IAC5E,MAAM,cAAc,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAA;IAEpD,OAAO;QACH,WAAW;QACX,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,cAAc;QACd,aAAa,EAAE,gBAAgB,CAAC,cAAc,CAAC;QAC/C,cAAc,EAAE,oBAAoB,CAAC,cAAc,CAAC;QACpD,eAAe,EAAE,gBAAgB,CAAC,cAAc,CAAC;KACpD,CAAA;AACL,CAAC,CAAC,CAAA;AAkBF,MAAqB,kBAAkB;IAanC,YAAY,OAAqB;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAA;QACzB,IAAI,CAAC,wBAAwB,GAAG,IAAI,GAAG,EAAE,CAAA;QACzC,IAAI,CAAC,uBAAuB,GAAG,IAAI,GAAG,EAAE,CAAA;QACxC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAA;QAC/B,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAA;QAE9B,MAAM,UAAU,GAAG,OAAO,OAAO,CAAC,UAAU,KAAK,UAAU;cAGrD,OAAO,CAAC,UAAU,EAAE;cAWpB,MAAM,CAAC,IAAI,CAAE,OAAe,CAAC,OAAO,CAAC,CAAA;QAE3C,KAAK,MAAM,WAAW,IAAI,UAAU,EAAE;YAClC,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;gBACjC,SAAQ;aACX;YACD,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;YAE3C,IAAI,QAAQ,CAAC,aAAa,EAAE;gBACxB,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,aAAa,EAAE;oBAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,wBAAwB,CAAA;oBAE9F,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;oBACrC,IAAI,SAAS,IAAI,IAAI,EAAE;wBACnB,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,GAAG,EAAE,EAAE,CAAA;qBAC1C;oBACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;iBAC3B;aACJ;iBACI;gBACD,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;aAC5F;SACJ;QAED,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACnD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAClD,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,EAAE;YAC/D,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;SACxC;QACD,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,EAAE;YAC9D,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;SACxC;KACJ;IAOO,aAAa,CAAC,IAAU,EAAE,QAAsB;QACpD,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE;YACtE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;SAChD;KACJ;IAOO,cAAc,CAAC,IAAU,EAAE,MAAe;QAC9C,MAAM,mBAAmB,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,wBAAwB,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QACxH,MAAM,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAA;QAMxF,IAAI,oBAAoB,GAAG,CAAC,CAAA;QAC5B,IAAI,qBAAqB,GAAG,CAAC,CAAA;QAE7B,OAAO,oBAAoB,GAAG,mBAAmB,CAAC,MAAM,IAAI,qBAAqB,GAAG,gBAAgB,CAAC,MAAM,EAAE;YACzG,IACI,oBAAoB,IAAI,mBAAmB,CAAC,MAAM;iBACjD,qBAAqB,GAAG,gBAAgB,CAAC,MAAM,IAAI,kBAAkB,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,EAAE,mBAAmB,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,EACjK;gBACE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;aACtE;iBACI;gBACD,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,mBAAmB,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAA;aACxE;SACJ;KACJ;IAMD,SAAS,CAAC,IAAU;QAChB,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SAC5C;QACD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;KACnC;IAMD,SAAS,CAAC,IAAU;QAChB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC/B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;KAC/B;CACJ;;AC7SD,SAAS,gBAAgB,CAAC,KAA0B;IAChD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACzB,CAAC;AAUD,SAAgB,MAAM,CAAC,MAAqB,EAAE,QAAgB;IAC1D,OAAO,aAAa,CAChB,MAA+B,EAC/B,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,EACrB,gBAAgB,CACnB,CAAA;AACL,CAAC;AAWD,SAAgB,aAAa,CAAC,MAAqB,EAAE,QAAmC,EAAE,QAAgB;IACtG,IAAI,QAAQ,IAAI,QAAQ,EAAE;QACtB,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAA;KAC5B;IACD,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,QAAQ,EAAE;QAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;QACpC,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;QAI1E,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE;YACrC,OAAO,KAAK,CAAA;SACf;QACD,OAAO,KAAK,GAAG,CAAC,CAAA;KACnB;IACD,OAAO,CAAC,CAAA;AACZ,CAAC;AAWD,SAAgB,YAAY,CAAC,MAAqB,EAAE,QAAmC,EAAE,MAAc;IACnG,IAAI,MAAM,IAAI,QAAQ,EAAE;QACpB,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;KAC9B;IACD,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,QAAQ,EAAE;QAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAClC,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;QAI1E,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE;YAClC,OAAO,KAAK,GAAG,CAAC,CAAA;SACnB;QACD,OAAO,KAAK,CAAA;KACf;IACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;AAC5B,CAAC;;MCzD6B,MAAM;IAMhC;QACI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;KACtB;IAOD,WAAW;QACP,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;KAC/C;IAOD,YAAY;QACR,MAAM,MAAM,GAAY,EAAE,CAAA;QAE1B,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAgB,CAAC,CAAA;SACrC;QAED,OAAO,MAAM,CAAA;KAChB;CAQJ;;MC1DoB,0BAA2B,SAAQ,MAAM;IAe1D,YAAY,MAAe,EAAE,QAAiB,EAAE,QAAmC,EAAE,QAAgB,EAAE,MAAc;QACjH,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;QACxD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QAChD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAA;KACzB;IAGD,QAAQ;QACJ,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAA;QAC1E,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAA;QAElF,IAAI,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YAC1D,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;YACpB,IAAI,CAAC,UAAU,IAAI,CAAC,CAAA;SACvB;aACI,IAAI,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YACtB,IAAI,CAAC,YAAY,IAAI,CAAC,CAAA;SACzB;aACI;YACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;SACtB;QAED,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAA;KAC9F;CACJ;;MC3CoB,mBAAoB,SAAQ,MAAM;IAanD,YAAY,MAAe,EAAE,SAAkB,EAAE,QAAmC,EAAE,QAAgB,EAAE,MAAc;QAClH,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;QACnD,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;KAC5D;IAGD,QAAQ;QACJ,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACtC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;YACf,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAOD,WAAW;QACP,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;KACxE;CACJ;;MCpCoB,gBAAiB,SAAQ,MAAM;IAOhD,YAAY,MAAc;QACtB,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;KACvB;IAGD,QAAQ;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;QAEnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QAElC,OAAO,IAAI,CAAA;KACd;CACJ;;MCtBoB,YAAa,SAAQ,gBAAgB;IAQtD,YAAY,MAAc,EAAE,SAAoC;QAC5D,KAAK,CAAC,MAAM,CAAC,CAAA;QACb,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;KAC7B;IAGD,QAAQ;QACJ,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAEhC,OAAO,KAAK,CAAC,QAAQ,EAAE,EAAE;YACrB,IAAI,SAAS,CAAC,IAAI,CAAC,OAAgB,CAAC,EAAE;gBAClC,OAAO,IAAI,CAAA;aACd;SACJ;QACD,OAAO,KAAK,CAAA;KACf;CACJ;;MCxBoB,yBAA0B,SAAQ,MAAM;IAezD,YAAY,MAAe,EAAE,QAAiB,EAAE,QAAmC,EAAE,QAAgB,EAAE,MAAc;QACjH,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAC3D,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAC9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;KACvB;IAGD,QAAQ;QACJ,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAA;QAC1F,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAA;QAEpG,IAAI,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YAC1D,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;YACpB,IAAI,CAAC,UAAU,IAAI,CAAC,CAAA;SACvB;aACI,IAAI,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YACtB,IAAI,CAAC,YAAY,IAAI,CAAC,CAAA;SACzB;aACI;YACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;SACtB;QAED,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAA;KAC9F;CACJ;;MC3CoB,kBAAmB,SAAQ,MAAM;IAalD,YAAY,MAAe,EAAE,SAAkB,EAAE,QAAmC,EAAE,QAAgB,EAAE,MAAc;QAClH,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACtD,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;KACzD;IAGD,QAAQ;QACJ,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACtC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;YACf,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAOD,WAAW;QACP,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;KACxE;IAGD,YAAY;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;KAC1D;CACJ;;MC5CoB,WAAY,SAAQ,gBAAgB;IAQrD,YAAY,MAAc,EAAE,KAAa;QACrC,KAAK,CAAC,MAAM,CAAC,CAAA;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;KACrB;IAGD,QAAQ;QACJ,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;YAChB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;YACf,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;SAC1B;QACD,OAAO,KAAK,CAAA;KACf;CACJ;;MCrBoB,UAAW,SAAQ,gBAAgB;IAQpD,YAAY,MAAc,EAAE,KAAa;QACrC,KAAK,CAAC,MAAM,CAAC,CAAA;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;KACrB;IAGD,QAAQ;QACJ,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;YACnB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;YACf,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;gBACnB,OAAO,KAAK,CAAA;aACf;SACJ;QACD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;KAC1B;CACJ;;MCfY,aAAa;IAStB,YAAY,WAAmE,EAAE,kBAAwF;QACrK,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;KAC/C;IAaD,gBAAgB,CAAC,MAAe,EAAE,QAAiB,EAAE,QAAmC,EAAE,QAAgB,EAAE,MAAc,EAAE,eAAwB;QAChJ,MAAM,WAAW,GAAG,eAAe,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAA;QAChF,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;KACvE;IAgBD,YAAY,CAAC,MAAe,EAAE,QAAiB,EAAE,QAAmC,EAAE,QAAgB,EAAE,MAAc,EAAE,eAAwB,EAAE,MAA0C,EAAE,IAAY,EAAE,KAAa;QACrN,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,CAAC,CAAA;QAEjG,IAAI,MAAM,EAAE;YACR,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAC5C;QACD,IAAI,IAAI,IAAI,CAAC,EAAE;YACX,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;SACxC;QACD,IAAI,KAAK,IAAI,CAAC,EAAE;YACZ,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;SAC1C;QAED,OAAO,MAAM,CAAA;KAChB;CACJ;AAED,AAAO,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAA;AACvF,AAAO,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,CAAA;;MCrErE,iBAAkB,SAAQ,kBAAkB;IAW7D,YAAY,MAAe,EAAE,QAAiB,EAAE,QAAmC,EAAE,QAAgB,EAAE,MAAc,EAAE,WAAmB,EAAE,UAAkB;QAC1J,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;QACnD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,CAAA;QAClD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAA;KAC1E;CACJ;;ACCD,SAAS,cAAc,CAAC,KAAY;IAChC,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAA;AACtF,CAAC;AAaD,SAAS,cAAc,CAAC,MAAe,EAAE,QAAiB;IACtD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,IAAI,KAAK,GAA4B,IAAI,CAAA;IAEzC,OAAO,UAAU,GAAG,MAAM,CAAC,MAAM,IAAI,YAAY,GAAG,QAAQ,CAAC,MAAM,EAAE;QACjE,SAAS,GAAG,CAAC,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAA;QACxG,OAAO,UAAU,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,SAAS,EAAE;YACpF,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAA;YAC1B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAA;YAC9B,UAAU,IAAI,CAAC,CAAA;SAClB;QAED,SAAS,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAA;QAChG,OAAO,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,SAAS,EAAE;YAC5F,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAA;YAC1B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAA;YAC9B,YAAY,IAAI,CAAC,CAAA;SACpB;KACJ;IAED,OAAO,GAAG,CAAA;AACd,CAAC;AAeD,SAAS,oBAAoB,CAAC,OAA8B,EAAE,MAAe,EAAE,QAAiB,EAAE,QAAmC,EAAE,QAAgB,EAAE,MAAc,EAAE,IAAkB;IACvL,IAAI,eAAe,GAAG,KAAK,CAAA;IAC3B,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,MAAM,GAAuC,IAAI,CAAA;IAErD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC1B,IAAI,GAAG,IAAI,GAAG,CAAC,CAAA;KAClB;SACI,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QACjC,MAAM,GAAG,IAAI,CAAA;KAChB;SACI,IAAI,IAAI,EAAE;QACX,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAC/C,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;QACrB,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAA;KAC/B;IACD,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,oDAAoD,CAAC,CAAA;IACvE,MAAM,CAAC,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,sCAAsC,CAAC,CAAA;IAEvF,OAAO,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AAChH,CAAC;AAeD,SAAS,qBAAqB,CAAC,OAA8B,EAAE,MAAe,EAAE,QAAiB,EAAE,QAAmC,EAAE,QAAgB,EAAE,MAAc,EAAE,IAAmB;IACzL,IAAI,eAAe,GAAG,KAAK,CAAA;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,WAAW,GAAG,KAAK,CAAA;IACvB,IAAI,MAAM,GAAuC,IAAI,CAAA;IAErD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC1B,KAAK,GAAG,IAAI,GAAG,CAAC,CAAA;QAChB,WAAW,GAAG,IAAI,CAAA;KACrB;SACI,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QACjC,MAAM,GAAG,IAAI,CAAA;KAChB;SACI,IAAI,IAAI,EAAE;QACX,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAC/C,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;QACvB,WAAW,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAA;QAC5C,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAA;KAC/B;IACD,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,qDAAqD,CAAC,CAAA;IACzE,MAAM,CAAC,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,sCAAsC,CAAC,CAAA;IAEvF,OAAO,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;AACnI,CAAC;AAeD,SAAS,uBAAuB,CAAC,MAAe,EAAE,QAAiB,EAAE,QAAmC,EAAE,QAAgB,EAAE,MAAc,EAAE,WAA0B,EAAE,UAAmB;IACvL,IAAI,OAAO,WAAW,KAAK,WAAW,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;QACzE,OAAO,IAAI,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;KAC9E;IACD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;QACvE,OAAO,IAAI,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,IAAI,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC,CAAA;KAChH;IACD,OAAO,qBAAqB,CAACE,OAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;AAC5G,CAAC;AAQD,SAAS,kCAAkC,CAAC,MAAc;IACtD,MAAM,MAAM,GAAY,EAAE,CAAA;IAC1B,IAAI,YAAY,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;IAEvC,OAAO,YAAY,IAAI,cAAc,CAAC,YAAY,CAAC,EAAE;QACjD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACzB,YAAY,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;KACtC;IAED,OAAO,MAAM,CAAA;AACjB,CAAC;AAiBD,MAAqB,UAAU;IAU3B,YAAY,MAAe,EAAE,QAAiB;QAC1C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QACzB,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;KACpD;IAYD,oBAAoB,CAAC,MAAc,EAAE,OAAsC;QACvE,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC,CAAA;QACnE,MAAM,KAAK,GAAGA,OAAe,CAAC,gBAAgB,CAC1C,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,MAAM,EACN,CAAC,CAAC,EACF,eAAe,CAClB,CAAC,WAAW,EAAE,CAAA;QAEf,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;YACpC,OAAO,KAAK,CAAA;SACf;QACD,OAAO,IAAI,CAAA;KACd;IAQD,aAAa,CAAC,IAAiB,EAAE,OAAqB;QAClD,OAAO,oBAAoB,CACvBA,OAAe,EACf,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,OAAO,CACV,CAAC,WAAW,EAAE,CAAA;KAClB;IAQD,YAAY,CAAC,IAAiB,EAAE,OAAqB;QACjD,OAAO,oBAAoB,CACvBC,QAAgB,EAChB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,OAAO,CACV,CAAC,WAAW,EAAE,CAAA;KAClB;IAQD,cAAc,CAAC,IAAiB,EAAE,OAAqB;QACnD,OAAO,oBAAoB,CACvBA,QAAgB,EAChB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,CAAC,CAAC,EACF,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,OAAO,CACV,CAAC,WAAW,EAAE,CAAA;KAClB;IAQD,aAAa,CAAC,IAAiB,EAAE,OAAqB;QAClD,OAAO,oBAAoB,CACvBD,OAAe,EACf,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,CAAC,CAAC,EACF,OAAO,CACV,CAAC,WAAW,EAAE,CAAA;KAClB;IASD,oBAAoB,CAAC,IAAiB,EAAE,KAAkB,EAAE,OAAqB;QAC7E,OAAO,oBAAoB,CACvBA,OAAe,EACf,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EACd,OAAO,CACV,CAAC,WAAW,EAAE,CAAA;KAClB;IASD,mBAAmB,CAAC,IAAiB,EAAE,KAAkB,EAAE,OAAqB;QAC5E,OAAO,oBAAoB,CACvBC,QAAgB,EAChB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EACd,OAAO,CACV,CAAC,WAAW,EAAE,CAAA;KAClB;IAWD,uBAAuB,CAAC,IAAiB,EAAE,IAAa;QACpD,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAC,eAAe,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAA;KAClE;IAWD,sBAAsB,CAAC,IAAiB,EAAE,IAAa;QACnD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAC,eAAe,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAA;KACjE;IAeD,cAAc,CAAC,IAAiB,EAAE,OAAsB;QACpD,OAAO,qBAAqB,CACxBD,OAAe,EACf,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,OAAO,CACV,CAAC,YAAY,EAAE,CAAA;KACnB;IAQD,aAAa,CAAC,IAAiB,EAAE,OAAsB;QACnD,OAAO,qBAAqB,CACxBC,QAAgB,EAChB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,OAAO,CACV,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,CAAA;KAC7B;IAQD,eAAe,CAAC,IAAiB,EAAE,OAAsB;QACrD,OAAO,qBAAqB,CACxBA,QAAgB,EAChB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,CAAC,CAAC,EACF,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,OAAO,CACV,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,CAAA;KAC7B;IAQD,cAAc,CAAC,IAAiB,EAAE,OAAsB;QACpD,OAAO,qBAAqB,CACxBD,OAAe,EACf,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,CAAC,CAAC,EACF,OAAO,CACV,CAAC,YAAY,EAAE,CAAA;KACnB;IASD,qBAAqB,CAAC,IAAiB,EAAE,KAAkB,EAAE,OAAsB;QAC/E,OAAO,qBAAqB,CACxBA,OAAe,EACf,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EACd,OAAO,CACV,CAAC,YAAY,EAAE,CAAA;KACnB;IASD,oBAAoB,CAAC,IAAiB,EAAE,KAAkB,EAAE,OAAsB;QAC9E,OAAO,qBAAqB,CACxBC,QAAgB,EAChB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EACd,OAAO,CACV,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,CAAA;KAC7B;IASD,SAAS,CAAC,IAAiB,EAAE,WAA0B,EAAE,UAAmB;QACxE,OAAO,uBAAuB,CAC1B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,WAAW,EACX,UAAU,CACb,CAAC,YAAY,EAAE,CAAA;KACnB;IASD,gBAAgB,CAAC,IAAiB,EAAE,KAAkB,EAAE,OAAsB;QAC1E,OAAO,uBAAuB,CAC1B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EACd,OAAO,EACP,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,SAAS,CACpD,CAAC,YAAY,EAAE,CAAA;KACnB;IAaD,oBAAoB,CAAC,IAAiB,EAAE,KAAkB;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAEnD,QACI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;YAC7B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EACnD;KACJ;IAOD,iBAAiB,CAAC,WAAwB;QACtC,MAAM,MAAM,GAAG,qBAAqB,CAChCA,QAAgB,EAChB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,CAAC,CAAC,EACF,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EACpB,EAAC,eAAe,EAAE,IAAI,EAAC,CAC1B,CAAA;QAED,OAAO,kCAAkC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAA;KAC9D;IAOD,gBAAgB,CAAC,WAAwB;QACrC,MAAM,MAAM,GAAG,qBAAqB,CAChCD,OAAe,EACf,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EACpB,CAAC,CAAC,EACF,EAAC,eAAe,EAAE,IAAI,EAAC,CAC1B,CAAA;QAED,OAAO,kCAAkC,CAAC,MAAM,CAAC,CAAA;KACpD;IAOD,iBAAiB,CAAC,IAAiB;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACxB,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,cAAc;SACzB,CAAC,CAAA;KACL;CACJ;;AC7iBD,SAAS,UAAU,CACf,IAA6C;IAE7C,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,CAAA;AACnC,CAAC;AAMD,SAAgB,eAAe,CAC3B,QAAkC;IAElC,OAAO,QAAQ;UACT,QAAQ,CAAC,QAAQ;aACZ,MAAM,CAAC,UAAU,CAAC;aAClB,MAAM,CACH,CAAC,KAAK,KACF,KAAK,CAAC,IAAI,KAAK,QAAQ;YACvB,KAAK,CAAC,IAAI,KAAK,UAAU;YACzB,KAAK,CAAC,IAAI,KAAK,OAAO,CAC7B;UACL,EAAE,CAAA;AACZ,CAAC;AAED,SAAgB,OAAO,CAAC,WAAqB;;IACzC,QACI,aAAA,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAChC,CAAC,IAAI,KACD,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAClD,0CAAE,KAAK,0CAAE,KAAK,KAAI,IAAI,EAC1B;AACL,CAAC;AAUD,SAAgB,uBAAuB,CACnC,IAAc,EACd,MAA+B,EAC/B,wBAA4C,EAC5C,aAA4B;IAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GACtB,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;UAC/B;YACI,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;SAChB;UACD;YACI,IAAI,EAAE,EAAE;YACR,KAAK,EAAE;gBACH,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,MAAO,CAAC,KAAK,CAAC,CAAC,CAAC;aACT;YAChB,GAAG,EAAE;gBACD,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG;gBAC5B,GAAG,EAAE,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,KAAK;aAC9B;SACJ,CAAA;IACX,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,qBAAqB,CACrE,KAAK,CAAC,CAAC,CAAC,CACX,CAAA;IACD,IAAI;QACA,OAAO,wBAAwB,CAC3B,IAAI,EACJ,MAAM,EACN,kBAAkB,EAClB,aAAa,CAChB,CAAA;KACJ;IAAC,OAAO,CAAC,EAAE;QACR,OAAO;YACH,KAAK,EAAE,CAAC;YACR,GAAG,EAAE;gBACD,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,QAAQ;gBACpB,GAAG,EAAE;oBACD,KAAK,oBACE,GAAG,CAAC,KAAK,CACf;oBACD,GAAG,oBACI,GAAG,CAAC,GAAG,CACb;iBACJ;gBACD,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;gBACjB,IAAI,EAAE,EAAE;gBACR,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,EAAE;aACf;SACJ,CAAA;KACJ;AACL,CAAC;AAWD,SAAS,wBAAwB,CAC7B,IAAY,EACZ,MAA+B,EAC/B,kBAAsC,EACtC,aAA4B;IAE5B,IAAI;QACA,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,kBAClC,WAAW,EAAE,IAAI,EACjB,GAAG,EAAE,IAAI,EACT,KAAK,EAAE,IAAI,EACX,GAAG,EAAE,IAAI,EACT,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,IAAI,EACb,iBAAiB,EAAE,IAAI,EACvB,kBAAkB,EAAE,IAAI,IACrB,aAAa,EAClB,CAAA;QACF,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;QACxC,OAAO,MAAM,CAAA;KAChB;IAAC,OAAO,GAAG,EAAE;QACV,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,IAAI,EAAE;YACN,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;YACzC,MAAM,IAAI,CAAA;SACb;QACD,MAAM,GAAG,CAAA;KACZ;AACL,CAAC;AAED,SAAS,UAAU,CACf,IAAY,EACZ,MAA+B,EAC/B,aAAkB;IAElB,MAAM,MAAM,GACR,OAAO,MAAM,CAAC,cAAc,KAAK,UAAU;UACrC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC;UAC1C,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;IAE3C,IAAI,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE;QACpB,OAAO,MAAM,CAAA;KAChB;IACD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAA;AAC1B,CAAC;AAUD,SAAgB,8BAA8B,CAAC,EAC3C,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,wBAAwB,EACxB,aAAa,GAOhB;IACG,IAAI,UAAsB,CAAA;IAC1B,IAAI,YAA0B,CAAA;IAC9B,IAAI,WAAgB,CAAA;IACpB,OAAO;QACH,cAAc,CAAC,IAAS;YACpB,WAAW,GAAG,IAAI,CAAA;SACrB;QACD,OAAO,EAAE;YACL,YAAY,EAAE,MAAM,YAAY,CAAC,WAAW,CAAC;YAE7C,oBAAoB,EAAE,CAAC,GAAG,IAAW,KAEjC,eAAe,EAAE,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;YACnD,QAAQ,EAAE,MAAM,QAAQ,CAAC,eAAe,EAAE,EAAE,WAAW,CAAC;YACxD,kBAAkB,EAAE,CAAC,IAAY,KAC7B,kBAAkB,CACd,eAAe,EAAE,EACjB,WAAW,EACX,aAAa,EACb,IAAI,CACP;YACL,cAAc,gCACV,WAAW,EACX,uBAAuB,CACnB,MAA+B,EAC/B,OAAY;oBAEZ,OAAO,uBAAuB,CAC1B,WAAW,EACX,MAAM,EACN,wBAAwB,kCACnB,aAAa,GAAK,OAAO,EACjC,CAAA;iBACJ,KACG,YAAY,CAAC,QAAQ,IAAI,EAAE,KAC3B,YAAY,CAAC,KAAK;kBAChB,EAAE,UAAU,EAAE,YAAY,CAAC,KAAK,EAAE;kBAClC,EAAE,EACX;YACD,aAAa;SAChB;KACJ,CAAA;IAED,SAAS,aAAa;QAClB,QACI,UAAU;aAET,UAAU,GAAG,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE;gBAC7C,IAAI;gBACJ,GAAG,EAAE,YAAY,CAAC,GAAG;gBACrB,cAAc,EAAE,YAAY,CAAC,QAAQ;gBACrC,YAAY,EAAE,eAAe,EAAE;gBAC/B,WAAW,EAAE,YAAY,CAAC,WAAW;aACxC,CAAC,CAAC,EACN;KACJ;IAED,SAAS,eAAe;QACpB,IAAI,YAAY,CAAC,YAAY,IAAI,YAAY,EAAE;YAC3C,OAAO,YAAY,CAAC,YAAY,IAAI,YAAY,CAAA;SACnD;QAED,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,IAAI,IAAI,CAAA;QACrD,MAAM,YAAY,GAAG,aAAa,CAAC,YAAY,IAAI,EAAE,CAAA;QACrD,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,IAAI,QAAQ,CAAA;QACvD,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE;YAC5C,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,KAAK;YAClB,aAAa,EAAE,YAAY,CAAC,aAAa;YACzC,WAAW;YACX,UAAU;YACV,QAAQ,EAAE,eAAe;SAC5B,CAAC,CAAA;QACF,OAAO,YAAY,CAAA;KACtB;AACL,CAAC;AAUD,SAAS,YAAY,CAAC,IAAU;IAC5B,MAAM,yBAAyB,GAAG,EAAE,CAAA;IAEpC,KAAK,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE;QACnE,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;KAC3C;IAED,OAAO,yBAAyB,CAAC,OAAO,EAAE,CAAA;AAC9C,CAAC;AAQD,SAAS,QAAQ,CAAC,YAA0B,EAAE,WAAiB;IAE3D,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,KAAK,SAAS,CAAA;IAE5C,KACI,IAAI,IAAI,GAAgB,WAAW,EACnC,IAAI,EACJ,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,EAC5B;QACE,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,IAAW,EAAE,KAAK,CAAC,CAAA;QAEtD,IAAI,KAAK,EAAE;YACP,IAAI,KAAK,CAAC,IAAI,KAAK,0BAA0B,EAAE;gBAC3C,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;aAC9B;YACD,OAAO,KAAK,CAAA;SACf;KACJ;IAED,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AACjC,CAAC;AAUD,SAAS,kBAAkB,CACvB,YAA0B,EAC1B,WAAiB,EACjB,aAAkB,EAClB,IAAY;IAEZ,MAAM,eAAe,GACjB,aAAa,CAAC,YAAY,IAAI,aAAa,CAAC,YAAY,CAAC,YAAY,CAAA;IACzE,MAAM,YAAY,GACd,eAAe,IAAI,aAAa,CAAC,UAAU,KAAK,QAAQ,CAAA;IAC5D,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;IAGxD,MAAM,YAAY,GACd,YAAY,CAAC,IAAI,KAAK,QAAQ,IAAI,YAAY;UACxC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;UAC3B,YAAY,CAAA;IAEtB,KAAK,IAAI,KAAK,GAAiB,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE;QACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CACjC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,KAAK,IAAI,CACvC,CAAA;QAED,IAAI,QAAQ,EAAE;YAEV,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAA;YAC1B,OAAO,IAAI,CAAA;SACd;KACJ;IAED,OAAO,KAAK,CAAA;AAChB,CAAC;;ACnVD,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAwB,CAAA;AACpD,MAAM,MAAM,GAAG,IAAI,OAAO,EAAsB,CAAA;AAsDhD,SAAgB,MAAM,CAClB,UAAkB,EAClB,OAAsB,EACtB,QAAkC,EAClC,wBAAmD,EACnD,EAAE,aAAa,EAAoC;IAEnD,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAOjC,CAAA;IAEH,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,CAAA;IAEtC,OAAO;QAMH,yBAAyB,CACrB,mBAA8D,EAC9D,aAAyD;YAEzD,IAAI,aAAa,IAAI,IAAI,EAAE;gBACvB,aAAa,GAAG,EAAE,CAAA;aACrB;YACD,IAAI,OAAO,CAAC,YAAY,IAAI,IAAI,EAAE;gBAC9B,OAAO,aAAa,CAAA;aACvB;YAED,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAGnC,IAAI,OAAO,IAAI,IAAI,EAAE;gBACjB,OAAO,GAAG,IAAI,YAAY,EAAE,CAAA;gBAC5B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;gBAC1B,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;gBAE9B,MAAM,kBAAkB,GAAG,aAAa,CAAC,cAAc,CAAC,CAAA;gBACxD,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI;oBACjC,IAAI;wBACA,IAAI,OAAO,kBAAkB,KAAK,UAAU,EAAE;4BAC1C,kBAAkB,CAAC,IAAI,CAAC,CAAA;yBAC3B;wBAGD,MAAM,SAAS,GAAG,IAAI,kBAAkB,CACpC,OAAuB,CAC1B,CAAA;wBACD,aAAa,CACT,OAAO,CAAC,YAAwB,EAChC,SAAS,CACZ,CAAA;qBACJ;4BAAS;wBAGN,aAAa,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAA;wBAClD,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;qBAC3B;iBACJ,CAAA;aACJ;YAGD,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE;gBACrD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAA;aACtD;YAED,OAAO,aAAa,CAAA;SACvB;QASD,yBAAyB,CACrB,OAAyB,EACzB,MAA+B,EAC/B,IAMC,EACD,aAAwD;YAExD,IAAI,aAAa,IAAI,IAAI,EAAE;gBACvB,aAAa,GAAG,EAAE,CAAA;aACrB;YACD,IAAI,CAAC,KAAK,EAAE;gBACR,OAAO,aAAa,CAAA;aACvB;YACD,aAAa,qBAAQ,aAAa,CAAE,CAAA;YACpC,MAAM,YAAY,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,CACjD,CAAC,KAAK,KACF,KAAK,CAAC,MAAM;gBACZ,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAC3B,CAAC,IAAI,KACD,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,CACjD,CACR,CAAA;YACD,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,wBAAwB,IAAI,IAAI,EAAE;gBAC1D,OAAO,EAAE,CAAA;aACZ;YACD,IAAI,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAGhD,IAAI,SAAS,IAAI,IAAI,EAAE;gBACnB,SAAS,GAAG,EAAE,CAAA;gBACd,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;gBAC3C,MAAM,gBAAgB,GAAG,SAAS,CAAA;gBAElC,MAAM,kBAAkB,GAAG,aAAa,CAAC,cAAc,CAAC,CAAA;gBACxD,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI;oBACjC,IAAI;wBACA,IAAI,OAAO,kBAAkB,KAAK,UAAU,EAAE;4BAC1C,kBAAkB,CAAC,IAAI,CAAC,CAAA;yBAC3B;wBACD,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;4BACpC,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;4BAEjC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,MAAM,CAClD,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CACnC,CAAA;4BACD,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE;gCAChC,SAAQ;6BACX;4BAED,MAAM,YAAY,GAAG,uBAAuB,CACxC,WAAW,EACX,MAAM,EACN,wBAAwB,EACxB,aAAa,CAChB,CAAA;4BAED,MAAM,EACF,cAAc,EACd,OAAO,EAAE,kBAAkB,GAC9B,GAAG,8BAA8B,CAAC;gCAC/B,IAAI,EAAE,UAAU;gCAChB,WAAW;gCACX,YAAY;gCACZ,wBAAwB;gCACxB,aAAa;6BAChB,CAAC,CAAA;4BAEF,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAA;4BAClC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;4BAE1B,KAAK,MAAM,OAAO,IAAI,sBAAsB,EAAE;gCAC1C,MAAM,GAAG,qBACF,kBAAkB,CACxB,CAAA;gCAGD,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAAA;gCAE/B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAC1B,GAAyB,CAC5B,CAAA;gCAED,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAC9B,OAAO,IAAI,EAAE,CAChB,EAAE;oCACC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;iCAC3C;6BACJ;4BAGD,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAA;4BACjD,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE;gCAC5B,WAAW,EAAE,YAAY,CAAC,WAAW;gCACrC,SAAS,CAAC,CAAC;oCACP,cAAc,CAAC,CAAC,CAAC,CAAA;oCACjB,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;iCACzB;gCACD,SAAS,CAAC,CAAC;oCACP,cAAc,CAAC,CAAC,CAAC,CAAA;oCACjB,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;iCACzB;6BACJ,CAAC,CAAA;yBACL;qBACJ;4BAAS;wBAGN,aAAa,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAA;wBAClD,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;qBACtC;iBACJ,CAAA;aACJ;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;YAC1B,MAAM,IAAI,GACN,OAAO,MAAM,KAAK,UAAU;kBACtB,MAAM;kBACN,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;sBACrB,CAAC,IAAmB,KAChB,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;sBAC1C,CAAC,IAAmB,KAAK,MAAM,KAAK,IAAI,CAAA;YAClD,SAAS,CAAC,IAAI,CAAC;gBACX,OAAO;gBACP,IAAI;gBACJ,MAAM,EAAE,IAAI,CAAC,MAAM;aACtB,CAAC,CAAA;YAEF,OAAO,aAAa,CAAA;SACvB;QAMD,yBAAyB;YACrB,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAA;YAChC,MAAM,GAAG,GAAG,GAAG,IAAI,MAAM,CAAA;YACzB,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAE3B,IAAI,CAAC,KAAK,EAAE;gBACR,KAAK;oBACD,GAAG,IAAI,IAAI;0BACL,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC;0BACxC,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;gBAChC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;aACzB;YAED,OAAO,KAAK,CAAA;SACf;QAMD,mBAAmB;YACf,OAAO,QAAQ,CAAA;SAClB;KACJ,CAAA;AACL,CAAC;;ACzUD,MAAM,cAAc,GAAG,QAAQ,CAAA;AAQ/B,SAAS,SAAS,CAAC,IAAY,EAAE,OAAsB;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY,CAAA;IACjD,OAAOD,YAAY,CAAC,QAAQ,CAAC,KAAK,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzE,CAAC;AAOD,SAAS,iBAAiB,CAAC,IAAe;IACtC,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAA;AAC/D,CAAC;AAOD,SAAS,eAAe,CAAC,IAAe;IACpC,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAA;AAC7D,CAAC;AAOD,SAAS,MAAM,CACX,SAA0C;IAE1C,OAAO,SAAS,CAAC,SAAS,KAAK,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAA;AACzE,CAAC;AAQD,SAASG,SAAO,CACZ,OAAiC,EACjC,WAAmB;IAEnB,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACpE,MAAM,IAAI,GAAG,QAAQ,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAA;IAC/D,OAAO,IAAI,IAAI,WAAW,CAAA;AAC9B,CAAC;AAQD,SAAgB,cAAc,CAC1B,IAAY,EACZ,OAAY;IAGZ,OAAO,GAAG,MAAM,CAAC,MAAM,CACnB;QACI,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,IAAI;QACjB,GAAG,EAAE,IAAI;QACT,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;KACf,EACD,OAAO,IAAI,EAAE,CAChB,CAAA;IAED,IAAI,MAAiC,CAAA;IACrC,IAAI,QAAsC,CAAA;IAC1C,IAAI,kBAA6C,CAAA;IACjD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;QAC3B,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACnC,QAAQ,GAAG,IAAI,CAAA;QACf,kBAAkB,GAAG,IAAI,CAAA;KAC5B;SAAM;QACH,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,KAAK,KAAK,CAAA;QAClD,MAAM,SAAS,GAAG,IAAIC,SAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAClD,MAAM,OAAO,GAAG,IAAIC,MAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAA;QAC1D,kBAAkB,GAAG,IAAI,kBAAkB,CACvC,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,eAAe,CAC5B,CAAA;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QACzD,MAAM,YAAY,GAAGF,SAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC9C,MAAM,YAAY,GAAwB;YACtC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;SACzB,CAAA;QACD,MAAM,YAAY,GACd,QAAQ,IAAI,IAAI,IAAI,YAAY,KAAK,MAAM;cACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC;cACrC,SAAS,CAAA;QAEnB,IAAI,iBAAiB,IAAI,MAAM,IAAI,IAAI,EAAE;YACrC,MAAM,GAAG,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;SACpC;aAAM;YACH,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAA;SACnE;QAED,MAAM,CAAC,GAAG,CAAC,YAAY,GAAG,YAAY,CAAA;QACtC,QAAQ,GAAG,OAAO,CAAA;KACrB;IAED,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAC3B,MAAM,CAAC,QAAQ,IAAI,EAAE,EACrBG,MAAe,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,kBAAkB,EAAE;QAC5D,aAAa,EAAE,OAAO;KACzB,CAAC,CACL,CAAA;IAED,OAAO,MAAM,CAAA;AACjB,CAAC;AAQD,SAAgB,KAAK,CAAC,IAAY,EAAE,OAAY;IAC5C,OAAO,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,CAAA;AAC5C,CAAC;;;;;;"}
\ No newline at end of file
diff --git a/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/CHANGELOG.md b/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..dc1d4b5ec5ddc9642db1a75c0c3bd1639ad7eed5
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/CHANGELOG.md
@@ -0,0 +1,25 @@
+v1.3.0 - June 19, 2020
+
+* [`c92dd7f`](https://github.com/eslint/eslint-visitor-keys/commit/c92dd7ff96f0044dba12d681406a025b92b4c437) Update: add `ChainExpression` node (#12) (Toru Nagashima)
+
+v1.2.0 - June 4, 2020
+
+* [`21f28bf`](https://github.com/eslint/eslint-visitor-keys/commit/21f28bf11be5329d740a8bf6bdbcd0ef13bbf1a2) Update: added exported in exportAllDeclaration key (#10) (Anix)
+
+v1.1.0 - August 13, 2019
+
+* [`9331cc0`](https://github.com/eslint/eslint-visitor-keys/commit/9331cc09e756e65b9044c9186445a474b037fac6) Update: add ImportExpression (#8) (Toru Nagashima)
+* [`5967f58`](https://github.com/eslint/eslint-visitor-keys/commit/5967f583b04f17fba9226aaa394e45d476d2b8af) Chore: add supported Node.js versions to CI (#7) (Kai Cataldo)
+* [`6f7c60f`](https://github.com/eslint/eslint-visitor-keys/commit/6f7c60fef2ceec9f6323202df718321cec45cab0) Upgrade: eslint-release@1.0.0 (#5) (Teddy Katz)
+
+v1.0.0 - December 18, 2017
+
+* 1f6bd38 Breaking: update keys (#4) (Toru Nagashima)
+
+v0.1.0 - November 17, 2017
+
+* 17b4a88 Chore: update `repository` field in package.json (#3) (Toru Nagashima)
+* a5a026b New: eslint-visitor-keys (#1) (Toru Nagashima)
+* a1a48b8 Update: Change license to Apache 2 (#2) (Ilya Volodin)
+* 2204715 Initial commit (Toru Nagashima)
+
diff --git a/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/LICENSE b/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..17a25538d9bd634bc079642d35d7a6422a0d850d
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright contributors
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/README.md b/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..250f5fa31a681ddad55d7266a579e6533dd53e92
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/README.md
@@ -0,0 +1,98 @@
+# eslint-visitor-keys
+
+[![npm version](https://img.shields.io/npm/v/eslint-visitor-keys.svg)](https://www.npmjs.com/package/eslint-visitor-keys)
+[![Downloads/month](https://img.shields.io/npm/dm/eslint-visitor-keys.svg)](http://www.npmtrends.com/eslint-visitor-keys)
+[![Build Status](https://travis-ci.org/eslint/eslint-visitor-keys.svg?branch=master)](https://travis-ci.org/eslint/eslint-visitor-keys)
+[![Dependency Status](https://david-dm.org/eslint/eslint-visitor-keys.svg)](https://david-dm.org/eslint/eslint-visitor-keys)
+
+Constants and utilities about visitor keys to traverse AST.
+
+## 💿 Installation
+
+Use [npm] to install.
+
+```bash
+$ npm install eslint-visitor-keys
+```
+
+### Requirements
+
+- [Node.js] 4.0.0 or later.
+
+## 📖 Usage
+
+```js
+const evk = require("eslint-visitor-keys")
+```
+
+### evk.KEYS
+
+> type: `{ [type: string]: string[] | undefined }`
+
+Visitor keys. This keys are frozen.
+
+This is an object. Keys are the type of [ESTree] nodes. Their values are an array of property names which have child nodes.
+
+For example:
+
+```
+console.log(evk.KEYS.AssignmentExpression) // → ["left", "right"]
+```
+
+### evk.getKeys(node)
+
+> type: `(node: object) => string[]`
+
+Get the visitor keys of a given AST node.
+
+This is similar to `Object.keys(node)` of ES Standard, but some keys are excluded: `parent`, `leadingComments`, `trailingComments`, and names which start with `_`.
+
+This will be used to traverse unknown nodes.
+
+For example:
+
+```
+const node = {
+    type: "AssignmentExpression",
+    left: { type: "Identifier", name: "foo" },
+    right: { type: "Literal", value: 0 }
+}
+console.log(evk.getKeys(node)) // → ["type", "left", "right"]
+```
+
+### evk.unionWith(additionalKeys)
+
+> type: `(additionalKeys: object) => { [type: string]: string[] | undefined }`
+
+Make the union set with `evk.KEYS` and the given keys.
+
+- The order of keys is, `additionalKeys` is at first, then `evk.KEYS` is concatenated after that.
+- It removes duplicated keys as keeping the first one.
+
+For example:
+
+```
+console.log(evk.unionWith({
+    MethodDefinition: ["decorators"]
+})) // → { ..., MethodDefinition: ["decorators", "key", "value"], ... }
+```
+
+## 📰 Change log
+
+See [GitHub releases](https://github.com/eslint/eslint-visitor-keys/releases).
+
+## 🍻 Contributing
+
+Welcome. See [ESLint contribution guidelines](https://eslint.org/docs/developer-guide/contributing/).
+
+### Development commands
+
+- `npm test` runs tests and measures code coverage.
+- `npm run lint` checks source codes with ESLint.
+- `npm run coverage` opens the code coverage report of the previous test with your default browser.
+- `npm run release` publishes this package to [npm] registory.
+
+
+[npm]: https://www.npmjs.com/
+[Node.js]: https://nodejs.org/en/
+[ESTree]: https://github.com/estree/estree
diff --git a/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/lib/index.js b/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/lib/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd8a3260834dcd66526746959adb31fb79c895db
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/lib/index.js
@@ -0,0 +1,81 @@
+/**
+ * @author Toru Nagashima <https://github.com/mysticatea>
+ * See LICENSE file in root directory for full license.
+ */
+"use strict";
+
+const KEYS = require("./visitor-keys.json");
+
+// Types.
+const NODE_TYPES = Object.freeze(Object.keys(KEYS));
+
+// Freeze the keys.
+for (const type of NODE_TYPES) {
+    Object.freeze(KEYS[type]);
+}
+Object.freeze(KEYS);
+
+// List to ignore keys.
+const KEY_BLACKLIST = new Set([
+    "parent",
+    "leadingComments",
+    "trailingComments"
+]);
+
+/**
+ * Check whether a given key should be used or not.
+ * @param {string} key The key to check.
+ * @returns {boolean} `true` if the key should be used.
+ */
+function filterKey(key) {
+    return !KEY_BLACKLIST.has(key) && key[0] !== "_";
+}
+
+//------------------------------------------------------------------------------
+// Public interfaces
+//------------------------------------------------------------------------------
+
+module.exports = Object.freeze({
+
+    /**
+     * Visitor keys.
+     * @type {{ [type: string]: string[] | undefined }}
+     */
+    KEYS,
+
+    /**
+     * Get visitor keys of a given node.
+     * @param {Object} node The AST node to get keys.
+     * @returns {string[]} Visitor keys of the node.
+     */
+    getKeys(node) {
+        return Object.keys(node).filter(filterKey);
+    },
+
+    // Disable valid-jsdoc rule because it reports syntax error on the type of @returns.
+    // eslint-disable-next-line valid-jsdoc
+    /**
+     * Make the union set with `KEYS` and given keys.
+     * @param {Object} additionalKeys The additional keys.
+     * @returns {{ [type: string]: string[] | undefined }} The union set.
+     */
+    unionWith(additionalKeys) {
+        const retv = Object.assign({}, KEYS);
+
+        for (const type of Object.keys(additionalKeys)) {
+            if (retv.hasOwnProperty(type)) {
+                const keys = new Set(additionalKeys[type]);
+
+                for (const key of retv[type]) {
+                    keys.add(key);
+                }
+
+                retv[type] = Object.freeze(Array.from(keys));
+            } else {
+                retv[type] = Object.freeze(Array.from(additionalKeys[type]));
+            }
+        }
+
+        return Object.freeze(retv);
+    }
+});
diff --git a/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/lib/visitor-keys.json b/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/lib/visitor-keys.json
new file mode 100644
index 0000000000000000000000000000000000000000..a33bbc66005b6a9707a8cbddeaa60cda79eb0b6b
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/lib/visitor-keys.json
@@ -0,0 +1,284 @@
+{
+    "AssignmentExpression": [
+        "left",
+        "right"
+    ],
+    "AssignmentPattern": [
+        "left",
+        "right"
+    ],
+    "ArrayExpression": [
+        "elements"
+    ],
+    "ArrayPattern": [
+        "elements"
+    ],
+    "ArrowFunctionExpression": [
+        "params",
+        "body"
+    ],
+    "AwaitExpression": [
+        "argument"
+    ],
+    "BlockStatement": [
+        "body"
+    ],
+    "BinaryExpression": [
+        "left",
+        "right"
+    ],
+    "BreakStatement": [
+        "label"
+    ],
+    "CallExpression": [
+        "callee",
+        "arguments"
+    ],
+    "CatchClause": [
+        "param",
+        "body"
+    ],
+    "ChainExpression": [
+        "expression"
+    ],
+    "ClassBody": [
+        "body"
+    ],
+    "ClassDeclaration": [
+        "id",
+        "superClass",
+        "body"
+    ],
+    "ClassExpression": [
+        "id",
+        "superClass",
+        "body"
+    ],
+    "ConditionalExpression": [
+        "test",
+        "consequent",
+        "alternate"
+    ],
+    "ContinueStatement": [
+        "label"
+    ],
+    "DebuggerStatement": [],
+    "DoWhileStatement": [
+        "body",
+        "test"
+    ],
+    "EmptyStatement": [],
+    "ExportAllDeclaration": [
+        "exported",
+        "source"
+    ],
+    "ExportDefaultDeclaration": [
+        "declaration"
+    ],
+    "ExportNamedDeclaration": [
+        "declaration",
+        "specifiers",
+        "source"
+    ],
+    "ExportSpecifier": [
+        "exported",
+        "local"
+    ],
+    "ExpressionStatement": [
+        "expression"
+    ],
+    "ExperimentalRestProperty": [
+        "argument"
+    ],
+    "ExperimentalSpreadProperty": [
+        "argument"
+    ],
+    "ForStatement": [
+        "init",
+        "test",
+        "update",
+        "body"
+    ],
+    "ForInStatement": [
+        "left",
+        "right",
+        "body"
+    ],
+    "ForOfStatement": [
+        "left",
+        "right",
+        "body"
+    ],
+    "FunctionDeclaration": [
+        "id",
+        "params",
+        "body"
+    ],
+    "FunctionExpression": [
+        "id",
+        "params",
+        "body"
+    ],
+    "Identifier": [],
+    "IfStatement": [
+        "test",
+        "consequent",
+        "alternate"
+    ],
+    "ImportDeclaration": [
+        "specifiers",
+        "source"
+    ],
+    "ImportDefaultSpecifier": [
+        "local"
+    ],
+    "ImportExpression": [
+        "source"
+    ],
+    "ImportNamespaceSpecifier": [
+        "local"
+    ],
+    "ImportSpecifier": [
+        "imported",
+        "local"
+    ],
+    "JSXAttribute": [
+        "name",
+        "value"
+    ],
+    "JSXClosingElement": [
+        "name"
+    ],
+    "JSXElement": [
+        "openingElement",
+        "children",
+        "closingElement"
+    ],
+    "JSXEmptyExpression": [],
+    "JSXExpressionContainer": [
+        "expression"
+    ],
+    "JSXIdentifier": [],
+    "JSXMemberExpression": [
+        "object",
+        "property"
+    ],
+    "JSXNamespacedName": [
+        "namespace",
+        "name"
+    ],
+    "JSXOpeningElement": [
+        "name",
+        "attributes"
+    ],
+    "JSXSpreadAttribute": [
+        "argument"
+    ],
+    "JSXText": [],
+    "JSXFragment": [
+        "openingFragment",
+        "children",
+        "closingFragment"
+    ],
+    "Literal": [],
+    "LabeledStatement": [
+        "label",
+        "body"
+    ],
+    "LogicalExpression": [
+        "left",
+        "right"
+    ],
+    "MemberExpression": [
+        "object",
+        "property"
+    ],
+    "MetaProperty": [
+        "meta",
+        "property"
+    ],
+    "MethodDefinition": [
+        "key",
+        "value"
+    ],
+    "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"
+    ]
+}
diff --git a/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/package.json b/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..14e13248b6159a9675c8390dbc899240cdf4cb8d
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys/package.json
@@ -0,0 +1,72 @@
+{
+  "_from": "eslint-visitor-keys@^1.1.0",
+  "_id": "eslint-visitor-keys@1.3.0",
+  "_inBundle": false,
+  "_integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+  "_location": "/vue-eslint-parser/eslint-visitor-keys",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "eslint-visitor-keys@^1.1.0",
+    "name": "eslint-visitor-keys",
+    "escapedName": "eslint-visitor-keys",
+    "rawSpec": "^1.1.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.1.0"
+  },
+  "_requiredBy": [
+    "/vue-eslint-parser",
+    "/vue-eslint-parser/espree"
+  ],
+  "_resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+  "_shasum": "30ebd1ef7c2fdff01c3a4f151044af25fab0523e",
+  "_spec": "eslint-visitor-keys@^1.1.0",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\vue-eslint-parser",
+  "author": {
+    "name": "Toru Nagashima",
+    "url": "https://github.com/mysticatea"
+  },
+  "bugs": {
+    "url": "https://github.com/eslint/eslint-visitor-keys/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Constants and utilities about visitor keys to traverse AST.",
+  "devDependencies": {
+    "eslint": "^4.7.2",
+    "eslint-config-eslint": "^4.0.0",
+    "eslint-release": "^1.0.0",
+    "mocha": "^3.5.3",
+    "nyc": "^11.2.1",
+    "opener": "^1.4.3"
+  },
+  "engines": {
+    "node": ">=4"
+  },
+  "files": [
+    "lib"
+  ],
+  "homepage": "https://github.com/eslint/eslint-visitor-keys#readme",
+  "keywords": [],
+  "license": "Apache-2.0",
+  "main": "lib/index.js",
+  "name": "eslint-visitor-keys",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/eslint/eslint-visitor-keys.git"
+  },
+  "scripts": {
+    "coverage": "nyc report --reporter lcov && opener coverage/lcov-report/index.html",
+    "generate-alpharelease": "eslint-generate-prerelease alpha",
+    "generate-betarelease": "eslint-generate-prerelease beta",
+    "generate-rcrelease": "eslint-generate-prerelease rc",
+    "generate-release": "eslint-generate-release",
+    "lint": "eslint lib tests/lib",
+    "pretest": "npm run -s lint",
+    "publish-release": "eslint-publish-release",
+    "test": "nyc mocha tests/lib"
+  },
+  "version": "1.3.0"
+}
diff --git a/server/node_modules/vue-eslint-parser/node_modules/espree/CHANGELOG.md b/server/node_modules/vue-eslint-parser/node_modules/espree/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..1c549ffd4d581a26b277d78e086776c8c148ce2f
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/espree/CHANGELOG.md
@@ -0,0 +1,479 @@
+v6.2.1 - March 10, 2020
+
+* [`d6d7480`](https://github.com/eslint/espree/commit/d6d7480e424960159007caea86f209f696138734) Upgrade: acorn 7.1.1, Regex DOS vuln (fixes #435) (#434) (James)
+
+v6.2.0 - March 2, 2020
+
+* [`ced1b68`](https://github.com/eslint/espree/commit/ced1b6810b991531e6d3788ebd5a322fc5c7d463) Update: update acorn-jsx and fix failing test (#432) (Kai Cataldo)
+* [`acb8776`](https://github.com/eslint/espree/commit/acb8776d369abf9e02f79142879e9b1a4774f938) Update: add latestEcmaVersion & supportedEcmaVersions (#430) (Kai Cataldo)
+
+v6.1.2 - October 20, 2019
+
+* [`70c4970`](https://github.com/eslint/espree/commit/70c4970e5eba6f060e1e32a22d231647f2d0e0f8) Fix: misuse token types (fixes #393, refs eslint/eslint#11018) (#426) (Toru Nagashima)
+
+v6.1.1 - August 23, 2019
+
+* [`ba81546`](https://github.com/eslint/espree/commit/ba81546e8552ec0f779aae7e03668c334630484e) Upgrade: dev deps to latest (#424) (薛定谔的猫)
+* [`bbe0119`](https://github.com/eslint/espree/commit/bbe01195fb57e24634d18825d39b820ed1767e95) Upgrade: acorn-jsx@5.0.2 (#423) (薛定谔的猫)
+* [`c0635ba`](https://github.com/eslint/espree/commit/c0635bac4cd891cb612fb81655012e2579f4e2b1) Docs: update readme to mention ES2020 (#422) (Kai Cataldo)
+
+v6.1.0 - August 18, 2019
+
+* [`9870c55`](https://github.com/eslint/espree/commit/9870c553efd3eb1bd22b4b3bb5220896c5cb6933) Update: improve error messaging when validating ecmaVersion (#421) (Kai Cataldo)
+* [`3f49224`](https://github.com/eslint/espree/commit/3f49224eb05f6b8cb1b996ce424a99c40978b389) Fix: tokenize the latest right curly brace (fixes #403) (#419) (finico)
+* [`f5e58cc`](https://github.com/eslint/espree/commit/f5e58cc5e9030793baca3426366b8d7286ef5b89) Update: support bigint and dynamic import (#415) (Toru Nagashima)
+
+v6.0.0 - June 21, 2019
+
+* [`a988a36`](https://github.com/eslint/espree/commit/a988a36e436a1ab6c84005ba0adb6cf9c262c1ec) Build: add node 12 (#414) (薛定谔的猫)
+
+v6.0.0-alpha.0 - April 12, 2019
+
+* [`493d464`](https://github.com/eslint/espree/commit/493d464e1564aea0ea33000389771d42ddece2cb) Breaking: validate parser options (fixes #384) (#412) (薛定谔的猫)
+
+v5.0.1 - February 15, 2019
+
+* [`c40e2fc`](https://github.com/eslint/espree/commit/c40e2fcedf81ff06151e82bdf655d2d0d29e71b8) Upgrade: acorn@6.0.7 (#407) (Kai Cataldo)
+
+v5.0.0 - December 5, 2018
+
+* [`1bcd563`](https://github.com/eslint/espree/commit/1bcd563d4eb4b4032d2662cc5ccd3bfd841b39d7) Breaking: remove attachComment (#405) (Kai Cataldo)
+* [`35623ee`](https://github.com/eslint/espree/commit/35623ee07289c9199eef8b735c97cb3d3d08d5b8) Chore: update linting config (#406) (Kai Cataldo)
+* [`4b86a7d`](https://github.com/eslint/espree/commit/4b86a7dc7c447c11bb6530e46dc43428ce2bd372) Build: add node 11 (#400) (薛定谔的猫)
+* [`7c278d6`](https://github.com/eslint/espree/commit/7c278d6acc6b5db86b803d0cd21b830deb6f569e) Fix: build failing due to incorrectly super() call (fixes #398) (#399) (薛定谔的猫)
+* [`6ebc219`](https://github.com/eslint/espree/commit/6ebc21947166399a0b4918d4a1beb9d610650336) Upgrade: eslint & eslint-config-eslint (#387) (薛定谔的猫)
+
+v4.1.0 - October 24, 2018
+
+* 8eadb88 Upgrade: acorn 6, acorn-jsx 5, and istanbul (#391) (Toru Nagashima)
+* 0f2edb8 Upgrade: eslint-release@1.0.0 (#392) (Teddy Katz)
+* 560b6f7 Update: VisitorKeys depend on eslint-visitor-keys (#389) (othree)
+* 6bf2ebf Docs: Fix some typos in the README (#386) (Hugo Locurcio)
+
+v4.0.0 - June 21, 2018
+
+
+
+v4.0.0-rc.0 - June 9, 2018
+
+* d8224c4 Build: Adding rc release script to package.json (#383) (Kevin Partington)
+* 4207773 Build: add node 10 (#381) (薛定谔的猫)
+* cd9da7e Update: upgrade acorn to support two ES2019 syntax (#380) (Toru Nagashima)
+* 8cb3ceb Chore: remove Object.assign polyfill (#382) (薛定谔的猫)
+
+v4.0.0-alpha.1 - May 28, 2018
+
+* 56c5a9c Fix: remove workarounds for acorn < 4 (#372) (Rouven Weßling)
+* fd305e5 Upgrade: eslint-release to v0.11.1 (#376) (Teddy Katz)
+
+v4.0.0-alpha.0 - March 30, 2018
+
+* 95fa890 Build: fix typos in package.json release scripts (#375) (Teddy Katz)
+* 6284e09 Breaking: remove experimentalObjectRestSpread option (#374) (Teddy Katz)
+* 0df063f Breaking: require Node.js 6+, upgrade acorn-jsx@4.1.1 (fixes #345) (#371) (薛定谔的猫)
+* 0252144 Upgrade: acorn 5.5.1 (#370) (Rouven Weßling)
+
+v3.5.4 - March 4, 2018
+
+* 706167b Upgrade: acorn 5.5.0 (#369) (Toru Nagashima)
+
+v3.5.3 - February 2, 2018
+
+* 70f9859 Upgrade: acorn 5.4.0 (#367) (Toru Nagashima)
+* cea4823 Chore: Adding .gitattributes file (#366) (Kevin Partington)
+* 4160aee Upgrade: acorn v5.3.0 (#365) (Toru Nagashima)
+
+v3.5.2 - November 10, 2017
+
+* 019b70a Fix: Remove blockBindings from docs (fixes #307, fixes #339) (#356) (Jan Pilzer)
+* b2016cb Chore: refactoring rest/spread properties (#361) (Toru Nagashima)
+* 59c9d06 Chore: upgrade acorn@5.2 (fixes #358) (#360) (Toru Nagashima)
+* 06c35c9 Chore: add .npmrc (#359) (Toru Nagashima)
+
+v3.5.1 - September 15, 2017
+
+* 5eb1388 Fix: Fix parsing of async keyword-named object methods (#352) (#353) (Mark Banner)
+
+v3.5.0 - August 5, 2017
+
+* 4d442a1 Update: add initial support for ES2018 (#348) (Teddy Katz)
+* d4bdcb6 Fix: Make template token objects adhere to token object structure (#343) (Ian Christian Myers)
+* 9ac671a Upgrade: acorn to 5.1.1 (#347) (Teddy Katz)
+* 16e1fec Docs: Specify default values of options (fixes #325) (#342) (Jan Pilzer)
+* be85b8e Fix: async shorthand properties (fixes #340) (#341) (Toru Nagashima)
+
+v3.4.3 - May 5, 2017
+
+* 343590a Fix: add AwaitExpression to espree.Syntax (fixes #331) (#332) (Teddy Katz)
+
+v3.4.2 - April 21, 2017
+
+* c99e436 Upgrade: eslint to 2.13.1 (#328) (Teddy Katz)
+* 628cf3a Fix: don't mutate user-provided configs (fixes #329) (#330) (Teddy Katz)
+
+v3.4.1 - March 31, 2017
+
+* a3ae0bd Upgrade: acorn to 5.0.1 (#327) (Teddy Katz)
+* 15ef24f Docs: Add badges (#326) (Jan Pilzer)
+* 652990a Fix: raise error for trailing commas after rest properties (fixes #310) (#323) (Teddy Katz)
+* 9d86ba5 Upgrade: acorn to ^4.0.11 (#317) (Toru Nagashima)
+* a3442b5 Chore: fix tests for Node 6+ (#315) (Teddy Katz)
+
+v3.4.0 - February 2, 2017
+
+* f55fa51 Build: Lock acorn to v4.0.4 (#314) (Kai Cataldo)
+* 58f75be Fix:generic error for invalid ecmaVersion(fixes eslint#7405) (#303) (Scott Stern)
+* d6b383d Docs: Update license copyright (Nicholas C. Zakas)
+* e5df542 Update: To support year in ecmaVersion number (fixes #300) (#301) (Gyandeep Singh)
+
+v3.3.2 - September 29, 2016
+
+* 7d3e2fc Fix: reset `isAsync` flag for each property (fixes #298) (#299) (Toru Nagashima)
+
+v3.3.1 - September 26, 2016
+
+* 80abdce Fix: `}` token followed by template had been lost (fixes #293) (#294) (Toru Nagashima)
+* 9810bab Fix: parsing error on `async` as property name. (#295) (Toru Nagashima)
+
+v3.3.0 - September 20, 2016
+
+* 92b04b1 Update: create-test script (fixes #291) (#292) (Jamund Ferguson)
+
+v3.2.0 - September 16, 2016
+
+* 5a37f80 Build: Update release tool (Nicholas C. Zakas)
+* 9bbcad8 Update: Upgrade Acorn to support ES2017 (fixes #287) (#290) (Jamund Ferguson)
+* 8d9767d Build: Add CI release scripts (Nicholas C. Zakas)
+
+v3.1.7 - July 29, 2016
+
+* 8f6cfbd Build: Add CI release (Nicholas C. Zakas)
+* ff15922 Fix: Catch ES2016 invalid syntax (fixes #284) (#285) (Nicholas C. Zakas)
+
+v3.1.6 - June 15, 2016
+
+* a90edc2 Upgrade: acorn 3.2.0 (fixes #279) (#280) (Toru Nagashima)
+
+v3.1.5 - May 27, 2016
+
+* 7df2e4a Fix: Convert ~ and ! prefix tokens to esprima (fixes #274) (#276) (Daniel Tschinder)
+
+v3.1.4 - April 21, 2016
+
+* e044705 Fix: remove extra leading comments at node level (fixes #264) (Kai Cataldo)
+* 25c27fb Chore: Remove jQuery copyright from header of each file (Kai Cataldo)
+* 10709f0 Chore: Add jQuery Foundation copyright (Nicholas C. Zakas)
+* d754b32 Upgrade: Acorn 3.1.0 (fixes #270) (Toru Nagashima)
+* 3a90886 Docs: replace a dead link with the correct contributing guide URL (Shinnosuke Watanabe)
+* 55184a2 Build: replace optimist with a simple native method (Shinnosuke Watanabe)
+* c7e5a13 Fix: Disallow namespaces objects in JSX (fixes #261) (Kai Cataldo)
+* 22290b9 Fix: Add test for leading comments (fixes #136) (Kai Cataldo)
+
+v3.1.3 - March 18, 2016
+
+* 98441cb Fix: Fix behavior of ignoring comments within previous nodes (refs #256) (Kai Cataldo)
+
+v3.1.2 - March 14, 2016
+
+* a2b23ca Fix: Ensure 'var let' works (fixes #149) (Nicholas C. Zakas)
+* 5783282 Fix: Make obj.await work in modules (fixes #258) (Nicholas C. Zakas)
+* d1b4929 Fix: leading comments added from previous node (fixes #256) (Kai Cataldo)
+
+v3.1.1 - February 26, 2016
+
+* 3614e81 Fix: exponentiation operator token (fixes #254) (Nicholas C. Zakas)
+
+v3.1.0 - February 25, 2016
+
+* da35d98 New: Support ecmaVersion 7 (fixes #246) (Nicholas C. Zakas)
+
+v3.0.2 - February 19, 2016
+
+* 0973cda Build: Update release script (Nicholas C. Zakas)
+* 106000f Fix: use the plugins feature of acorn (fixes #250) (Toru Nagashima)
+* 36d84c7 Build: Add tests (fixes #243) (Nicholas C. Zakas)
+
+v3.0.1 - February 2, 2016
+
+* ecfe4c8 Upgrade: eslint-config-eslint to 3.0.0 (Nicholas C. Zakas)
+* ea6261e Fix: Object rest/spread in assign (fixes #247) (Nicholas C. Zakas)
+* 7e57ee0 Docs: fix `options.comment` typo (xuezu)
+* dd5863e Build: Add prerelease script (Nicholas C. Zakas)
+* 0b409ee Upgrade: eslint-release to 0.2.0 (Nicholas C. Zakas)
+
+v3.0.0 - January 20, 2016
+
+* 5ff65f6 Upgrade: Change Esprima version to latest (Nicholas C. Zakas)
+* a8badcc Upgrade: eslint-release to 0.1.4 (Nicholas C. Zakas)
+* 34d195b Build: Switch to eslint-release (Nicholas C. Zakas)
+* a0ddc30 Breaking: Remove binary scripts (Nicholas C. Zakas)
+* 02b5284 Build: Fix package.json dependencies (Nicholas C. Zakas)
+* b07696f Fix: tests for importing keywords (fixes #225) (Toru Nagashima)
+* 2e2808a Build: Add node@5 to CI (fixes #237) (alberto)
+* 445c685 Update: Unrecognized license format in package.json (fixes #234) (alberto)
+* 61cb5ee Update: Remove duplicated acorn-jsx dep (fixes #232) (alberto)
+* df5b71c Upgrade: eslint and eslint-config-eslint (fixes #231) (alberto)
+* ef7a06d Fix: lastToken not reset between calls to parse (fixes #229) (alberto)
+* cdf8407 New: ecmaFeatures.impliedStrict (fixes: #227) (Nick Evans)
+
+v3.0.0-alpha-2 - December 9, 2015
+
+* 3.0.0-alpha-2 (Nicholas C. Zakas)
+* Breaking: move ecmaFeatures into ecmaVersion (fixes #222) (Nicholas C. Zakas)
+* New: Export VisitorKeys (fixes #220) (Nicholas C. Zakas)
+
+v3.0.0-alpha-1 - December 1, 2015
+
+* 3.0.0-alpha-1 (Nicholas C. Zakas)
+* Fix: parse unicode escapes in identifiers (fixes #181) (Nicholas C. Zakas)
+* Fix: Ensur object rest works in destructed arg (fixes #213) (Nicholas C. Zakas)
+* Breaking: Switch to Acorn (fixes #200) (Nicholas C. Zakas)
+* Update: Add tokens to tests (fixes #203) (Nicholas C. Zakas)
+* Docs: Update README (Nicholas C. Zakas)
+
+v2.2.5 - September 15, 2015
+
+* 2.2.5 (Nicholas C. Zakas)
+* Fix: Ensure node type is correct for destructured (fixes #195) (Nicholas C. Zakas)
+
+v2.2.4 - August 13, 2015
+
+* 2.2.4 (Nicholas C. Zakas)
+* Fix: newlines in arrow functions (fixes #172) (Jamund Ferguson)
+* Fix: nested arrow function as default param (fixes #145) (Jamund Ferguson)
+* Fix: Rest Params & Arrow Functions (fixes #187) (Jamund Ferguson)
+* Fix: trailing commas in import/export (fixes #148) (Jamund Ferguson)
+* Build: Added sudo false to Travis to build faster (fixes #177) (KahWee Teng)
+
+v2.2.3 - July 22, 2015
+
+* 2.2.3 (Nicholas C. Zakas)
+* Fix: Incorrect error location (fixes #173) (Nicholas C. Zakas)
+
+v2.2.2 - July 16, 2015
+
+* 2.2.2 (Nicholas C. Zakas)
+* 2.2.1 (Nicholas C. Zakas)
+* Fix: Yield as identifier in arrow func args (fixes #165) (Nicholas C. Zakas)
+* Fix: Allow AssignmentExpression in object spread (fixes #167) (Nicholas C. Zakas)
+
+v2.2.1 - July 16, 2015
+
+* 2.2.1 (Nicholas C. Zakas)
+
+v2.2.0 - July 15, 2015
+
+* 2.2.0 (Nicholas C. Zakas)
+* New: Add experimental object rest/spread (fixes #163) (Nicholas C. Zakas)
+* Fix: npm browserify (fixes #156) (Jason Laster)
+
+v2.1.0 - July 10, 2015
+
+* 2.1.0 (Nicholas C. Zakas)
+* Fix: Leading comments for anonymous classes (fixes #155, fixes #158) (Toru Nagashima)
+* New: Add newTarget option (fixes #157) (Nicholas C. Zakas)
+
+v2.0.4 - June 26, 2015
+
+* 2.0.4 (Nicholas C. Zakas)
+* Docs: added missing `ecmaFeatures.superInFunctions` option from doc (Clément Fiorio)
+* Fix: "await" is a future reserved word (fixes #151) (Jose Roberto Vidal)
+
+v2.0.3 - June 2, 2015
+
+* 2.0.3 (Nicholas C. Zakas)
+* Fix: Incomplete Switch Statement Hangs (Fixes #146) (Jamund Ferguson)
+* Docs: Clarify ecmaFeatures usage (Dan Wolff)
+
+v2.0.2 - April 28, 2015
+
+* 2.0.2 (Nicholas C. Zakas)
+* Fix: Allow yield without value as function param (fixes #134) (Nicholas C. Zakas)
+* Fix: Allow computed generators in classes (fixes #123) (Nicholas C. Zakas)
+* Fix: Don't allow arrow function rest param (fixes #130) (Nicholas C. Zakas)
+
+v2.0.1 - April 11, 2015
+
+* 2.0.1 (Nicholas C. Zakas)
+* Fix: Yield should parse without an argument (fixes #121) (Nicholas C. Zakas)
+
+v2.0.0 - April 4, 2015
+
+* 2.0.0 (Nicholas C. Zakas)
+* Docs: Update README with latest info (Nicholas C. Zakas)
+* Breaking: Use ESTree format for default params (fixes #114) (Nicholas C. Zakas)
+* New: Add Super node (fixes #115) (Nicholas C. Zakas)
+* Breaking: Switch to RestElement for rest args (fixes #84) (Nicholas C. Zakas)
+* Docs: Correct license info on README (fixes #117) (AJ Ortega)
+* Breaking: Remove guardedHandlers/handlers from try (fixes #71) (Nicholas C. Zakas)
+
+v1.12.3 - March 28, 2015
+
+* 1.12.3 (Nicholas C. Zakas)
+* Fix: Tagged template strings (fixes #110) (Nicholas C. Zakas)
+
+v1.12.2 - March 21, 2015
+
+* 1.12.2 (Nicholas C. Zakas)
+* Fix: Destructured arg for catch (fixes #105) (Nicholas C. Zakas)
+
+v1.12.1 - March 21, 2015
+
+* 1.12.1 (Nicholas C. Zakas)
+* Fix: Disallow octals in template strings (fixes #96) (Nicholas C. Zakas)
+* Fix: Template string parsing (fixes #95) (Nicholas C. Zakas)
+* Fix: shorthand properties named get or set (fixes #100) (Brandon Mills)
+* Fix: bad error in parsing invalid class setter (fixes #98) (Marsup)
+
+v1.12.0 - March 14, 2015
+
+* 1.12.0 (Nicholas C. Zakas)
+* Fix: Update broken tests (Nicholas C. Zakas)
+* New: Add sourceType to Program node (fixes #93) (Nicholas C. Zakas)
+* Allow spread in more places (fixes #89) (Nicholas C. Zakas)
+* Fix: Deeply nested template literals (fixes #86) (Nicholas C. Zakas)
+* Fix: Allow super in classes by default (fixes #87) (Nicholas C. Zakas)
+* Fix: generator methods in classes (fixes #85) (Jamund Ferguson)
+* Remove XJS note from Esprima-FB incompatibilities (Joe Lencioni)
+
+v1.11.0 - March 7, 2015
+
+* 1.11.0 (Nicholas C. Zakas)
+* Fix: Don't allow default export class by mistake (fixes #82) (Nicholas C. Zakas)
+* Fix: Export default function should be FunctionDeclaration (fixes #81) (Nicholas C. Zakas)
+* Fix: Ensure class declarations must have IDs outside of exports (refs #72) (Nicholas C. Zakas)
+* Fix: export class expression support (refs #72) (Jamund Ferguson)
+* Update: Add tests for sourceType=module (refs #72) (Nicholas C. Zakas)
+* Fix: Class name should be id (fixes #78) (Nicholas C. Zakas)
+* Fix: disallow import/export in functions (refs #72) (Jamund Ferguson)
+* Test: strict mode enforced in modules (refs #72) (Jamund Ferguson)
+* New: Add modules feature flag (refs #72) (Nicholas C. Zakas)
+* merging upstream and solving conflicts for PR #43 (Caridy Patino)
+* New: Add ES6 module support (fixes #35) (Caridy Patino)
+* Update: Add TryStatement.handler (fixes #69) (Brandon Mills)
+* Fix: Destructured Defaults (fixes #56) (Jamund Ferguson)
+* Update: Refactor out comment attachment logic (Nicholas C. Zakas)
+
+v1.10.0 - March 1, 2015
+
+* 1.10.0 (Nicholas C. Zakas)
+* New: Support ES6 classes (refs #10) (Nicholas C. Zakas)
+* Docs: Update README.md (Jamund Ferguson)
+
+v1.9.1 - February 21, 2015
+
+* 1.9.1 (Nicholas C. Zakas)
+* Fix: Allow let/const in switchcase (fixes #54) (Nicholas C. Zakas)
+
+v1.9.0 - February 21, 2015
+
+* 1.9.0 (Nicholas C. Zakas)
+* Fix: Extend property method range and loc to include params (fixes #36) (Brandon Mills)
+* New: spread operator (refs #10) (Jamund Ferguson)
+* Fix: incorrectly parsed arrow fragment (refs #58) (Jamund Ferguson)
+* New: Rest Parameter (refs: #10) (Jamund Ferguson)
+* New: Destructuring (refs #10) (Jamund Ferguson)
+
+v1.8.1 - February 7, 2015
+
+* 1.8.1 (Nicholas C. Zakas)
+* Build: Add Node.js 0.12 testing (Nicholas C. Zakas)
+* Fix: Actuall fix tokenization issue with templates (fixes #44) (Nicholas C. Zakas)
+
+v1.8.0 - February 6, 2015
+
+* 1.8.0 (Nicholas C. Zakas)
+* New: Support for Arrow Functions (refs #10) (Jamund Ferguson)
+* New: Allow super references in functions (refs #10) (Nicholas C. Zakas)
+* Update create-test.js (Jamund Ferguson)
+* Fix: Tokenization for template strings (fixes #44) (Nicholas C. Zakas)
+* New: Allow return in global scope (fixes #46) (Nicholas C. Zakas)
+
+v1.7.1 - January 23, 2015
+
+* 1.7.1 (Nicholas C. Zakas)
+* Fix: When ecmaFeatures.forOf is true, check for operater is "undefined" when match keyword is "in" (fixes #39) (Peter Chanthamynavong)
+
+v1.7.0 - January 23, 2015
+
+* 1.7.0 (Nicholas C. Zakas)
+* New: Add support for template strings (FredKSchott)
+* New: Add support for default parameters (refs #10) (Jamund Ferguson)
+* New: Add support for unicode code point escape sequences (FredKSchott)
+
+v1.6.0 - January 10, 2015
+
+* 1.6.0 (Nicholas C. Zakas)
+* Update: Make comment attachment tests look at whole AST (Nicholas C. Zakas)
+* Docs: Update README to reflect feature flags (Nicholas C. Zakas)
+* Docs: Add a couple more FAQs to README (Nicholas C. Zakas)
+* New: Add support for duplicate object literal properties (FredKSchott)
+* New: Implement generators (refs #10) (Nicholas C. Zakas)
+
+v1.5.0 - December 29, 2014
+
+* 1.5.0 (Nicholas C. Zakas)
+* Docs: Update README with compat info (Nicholas C. Zakas)
+* Update: Add regex parsing test (Nicholas C. Zakas)
+* Update: s/XJS/JSX/g (Nicholas C. Zakas)
+* Build: Update release script (Nicholas C. Zakas)
+* Update: Move SyntaxTree to ast-node-factory.js (FredKSchott)
+* New: Add JSX parsing (fixes #26) (Nicholas C. Zakas)
+* Update: Switch location marker logic (fixes #15) (Nicholas C. Zakas)
+* 1.4.0 (Nicholas C. Zakas)
+
+v1.4.0 - December 23, 2014
+
+* 1.4.0 (Nicholas C. Zakas)
+* Fix: Parsing issues with property methods (fixes #21) (Nicholas C. Zakas)
+* New: Add support for shorthand properties (refs #10) (Nicholas C. Zakas)
+* New: Add support for object literal method shorthand (refs #10) (Nicholas C. Zakas)
+* Fix: Ensure comments are attached for return (fixes #2) (Nicholas C. Zakas)
+* Build: Ensure CHANGELOG.md is committed on release (Nicholas C. Zakas)
+* 1.3.1 (Nicholas C. Zakas)
+
+v1.3.1 - December 22, 2014
+
+* 1.3.1 (Nicholas C. Zakas)
+* Fix: Add all files to npm package (fixes #17) (Nicholas C. Zakas)
+* Update: Move Messages to separate file (Nicholas C. Zakas)
+* Docs: Removed unnecessary comment (Nicholas C. Zakas)
+* 1.3.0 (Nicholas C. Zakas)
+
+v1.3.0 - December 21, 2014
+
+* 1.3.0 (Nicholas C. Zakas)
+* Build: Add release scripts (Nicholas C. Zakas)
+* New: Add computed object literal properties (refs #10) (Nicholas C. Zakas)
+* Build: Fix commands in Makefile.js (Nicholas C. Zakas)
+* Docs: Add FAQ to README (Nicholas C. Zakas)
+* Fix: Don't allow let/const in for loops (fixes #14) (Nicholas C. Zakas)
+* New: Support for-of loops (refs #10) (Nicholas C. Zakas)
+* Update: Change .ast.js files to .result.js files (Nicholas C. Zakas)
+* New: Support ES6 octal literals (Nicholas C. Zakas)
+* New: Ability to parse binary literals (Nicholas C. Zakas)
+* Update: More tests for regex u flag (Nicholas C. Zakas)
+* Update: Switch to using ecmaFeatures (Nicholas C. Zakas)
+* Update: Add comment attachment tests (Nicholas C. Zakas)
+* Update README.md (Jamund Ferguson)
+* New: Add u and y regex flags (refs #10) (Nicholas C. Zakas)
+* Update: Cleanup tests (Nicholas C. Zakas)
+* New: Add ecmascript flag (fixes #7) (Nicholas C. Zakas)
+* Docs: Update README with build commands (Nicholas C. Zakas)
+* Update: Move some things around (Nicholas C. Zakas)
+* Update: Read version number from package.json (Nicholas C. Zakas)
+* Update: Move AST node types to separate file (Nicholas C. Zakas)
+* Update: Remove duplicate file (Nicholas C. Zakas)
+* Update: Move token information to a separate file (Nicholas C. Zakas)
+* Update: Bring in Makefile.js for linting and browserify (Nicholas C. Zakas)
+* Update: Fix ESLint warnings, remove check-version (Nicholas C. Zakas)
+* Update: Move Position and SourceLocation to separate file (Nicholas C. Zakas)
+* Update: Move syntax checks into separate file (Nicholas C. Zakas)
+* Update: Remove UMD format (Nicholas C. Zakas)
+* Docs: Update README with more info (Nicholas C. Zakas)
+* Update: remove npm-debug.log from tracked files (Brandon Mills)
+* Docs: Remove redundant 'features' in readme (Matthias Oßwald)
+* Docs: Fix a link to Wikipedia (Ryuichi Okumura)
+* Update: Split parsing tests into smaller files (Nicholas C. Zakas)
+* Update: Normalize values in tests (Nicholas C. Zakas)
+* Update: CommonJSify test file (Nicholas C. Zakas)
diff --git a/server/node_modules/vue-eslint-parser/node_modules/espree/LICENSE b/server/node_modules/vue-eslint-parser/node_modules/espree/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..321d9607404d8551b22876b5f2542614bee9348c
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/espree/LICENSE
@@ -0,0 +1,22 @@
+Espree
+Copyright JS Foundation and other contributors, https://js.foundation
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/server/node_modules/vue-eslint-parser/node_modules/espree/README.md b/server/node_modules/vue-eslint-parser/node_modules/espree/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..a03d1c3ef402fa2f8795e1b83e96287b3d7faf47
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/espree/README.md
@@ -0,0 +1,164 @@
+[![npm version](https://img.shields.io/npm/v/espree.svg)](https://www.npmjs.com/package/espree)
+[![Build Status](https://travis-ci.org/eslint/espree.svg?branch=master)](https://travis-ci.org/eslint/espree)
+[![npm downloads](https://img.shields.io/npm/dm/espree.svg)](https://www.npmjs.com/package/espree)
+[![Bountysource](https://www.bountysource.com/badge/tracker?tracker_id=9348450)](https://www.bountysource.com/trackers/9348450-eslint?utm_source=9348450&utm_medium=shield&utm_campaign=TRACKER_BADGE)
+
+# Espree
+
+Espree started out as a fork of [Esprima](http://esprima.org) v1.2.2, the last stable published released of Esprima before work on ECMAScript 6 began. Espree is now built on top of [Acorn](https://github.com/ternjs/acorn), which has a modular architecture that allows extension of core functionality. The goal of Espree is to produce output that is similar to Esprima with a similar API so that it can be used in place of Esprima.
+
+## Usage
+
+Install:
+
+```
+npm i espree
+```
+
+And in your Node.js code:
+
+```javascript
+const espree = require("espree");
+
+const ast = espree.parse(code);
+```
+
+There is a second argument to `parse()` that allows you to specify various options:
+
+```javascript
+const espree = require("espree");
+
+// Optional second options argument with the following default settings
+const ast = espree.parse(code, {
+
+    // attach range information to each node
+    range: false,
+
+    // attach line/column location information to each node
+    loc: false,
+
+    // create a top-level comments array containing all comments
+    comment: false,
+
+    // create a top-level tokens array containing all tokens
+    tokens: false,
+
+    // Set to 3, 5 (default), 6, 7, 8, 9, or 10 to specify the version of ECMAScript syntax you want to use.
+    // You can also set to 2015 (same as 6), 2016 (same as 7), 2017 (same as 8), 2018 (same as 9), 2019 (same as 10), or 2020 (same as 11) to use the year-based naming.
+    ecmaVersion: 5,
+
+    // specify which type of script you're parsing ("script" or "module")
+    sourceType: "script",
+
+    // specify additional language features
+    ecmaFeatures: {
+
+        // enable JSX parsing
+        jsx: false,
+
+        // enable return in global scope
+        globalReturn: false,
+
+        // enable implied strict mode (if ecmaVersion >= 5)
+        impliedStrict: false
+    }
+});
+```
+
+## Esprima Compatibility Going Forward
+
+The primary goal is to produce the exact same AST structure and tokens as Esprima, and that takes precedence over anything else. (The AST structure being the [ESTree](https://github.com/estree/estree) API with JSX extensions.) Separate from that, Espree may deviate from what Esprima outputs in terms of where and how comments are attached, as well as what additional information is available on AST nodes. That is to say, Espree may add more things to the AST nodes than Esprima does but the overall AST structure produced will be the same.
+
+Espree may also deviate from Esprima in the interface it exposes.
+
+## Contributing
+
+Issues and pull requests will be triaged and responded to as quickly as possible. We operate under the [ESLint Contributor Guidelines](http://eslint.org/docs/developer-guide/contributing), so please be sure to read them before contributing. If you're not sure where to dig in, check out the [issues](https://github.com/eslint/espree/issues).
+
+Espree is licensed under a permissive BSD 2-clause license.
+
+## Build Commands
+
+* `npm test` - run all linting and tests
+* `npm run lint` - run all linting
+* `npm run browserify` - creates a version of Espree that is usable in a browser
+
+## Differences from Espree 2.x
+
+* The `tokenize()` method does not use `ecmaFeatures`. Any string will be tokenized completely based on ECMAScript 6 semantics.
+* Trailing whitespace no longer is counted as part of a node.
+* `let` and `const` declarations are no longer parsed by default. You must opt-in by using an `ecmaVersion` newer than `5` or setting `sourceType` to `module`.
+* The `esparse` and `esvalidate` binary scripts have been removed.
+* There is no `tolerant` option. We will investigate adding this back in the future.
+
+## Known Incompatibilities
+
+In an effort to help those wanting to transition from other parsers to Espree, the following is a list of noteworthy incompatibilities with other parsers. These are known differences that we do not intend to change.
+
+### Esprima 1.2.2
+
+* Esprima counts trailing whitespace as part of each AST node while Espree does not. In Espree, the end of a node is where the last token occurs.
+* Espree does not parse `let` and `const` declarations by default.
+* Error messages returned for parsing errors are different.
+* There are two addition properties on every node and token: `start` and `end`. These represent the same data as `range` and are used internally by Acorn.
+
+### Esprima 2.x
+
+* Esprima 2.x uses a different comment attachment algorithm that results in some comments being added in different places than Espree. The algorithm Espree uses is the same one used in Esprima 1.2.2.
+
+## Frequently Asked Questions
+
+### Why another parser
+
+[ESLint](http://eslint.org) had been relying on Esprima as its parser from the beginning. While that was fine when the JavaScript language was evolving slowly, the pace of development increased dramatically and Esprima had fallen behind. ESLint, like many other tools reliant on Esprima, has been stuck in using new JavaScript language features until Esprima updates, and that caused our users frustration.
+
+We decided the only way for us to move forward was to create our own parser, bringing us inline with JSHint and JSLint, and allowing us to keep implementing new features as we need them. We chose to fork Esprima instead of starting from scratch in order to move as quickly as possible with a compatible API.
+
+With Espree 2.0.0, we are no longer a fork of Esprima but rather a translation layer between Acorn and Esprima syntax. This allows us to put work back into a community-supported parser (Acorn) that is continuing to grow and evolve while maintaining an Esprima-compatible parser for those utilities still built on Esprima.
+
+### Have you tried working with Esprima?
+
+Yes. Since the start of ESLint, we've regularly filed bugs and feature requests with Esprima and will continue to do so. However, there are some different philosophies around how the projects work that need to be worked through. The initial goal was to have Espree track Esprima and eventually merge the two back together, but we ultimately decided that building on top of Acorn was a better choice due to Acorn's plugin support.
+
+### Why don't you just use Acorn?
+
+Acorn is a great JavaScript parser that produces an AST that is compatible with Esprima. Unfortunately, ESLint relies on more than just the AST to do its job. It relies on Esprima's tokens and comment attachment features to get a complete picture of the source code. We investigated switching to Acorn, but the inconsistencies between Esprima and Acorn created too much work for a project like ESLint.
+
+We are building on top of Acorn, however, so that we can contribute back and help make Acorn even better.
+
+### What ECMAScript 6 features do you support?
+
+All of them.
+
+### What ECMAScript 7/2016 features do you support?
+
+There is only one ECMAScript 2016 syntax change: the exponentiation operator. Espree supports this.
+
+### What ECMAScript 2017 features do you support?
+
+There are two ECMAScript 2017 syntax changes: `async` functions, and trailing commas in function declarations and calls. Espree supports both of them.
+
+### What ECMAScript 2018 features do you support?
+
+There are seven ECMAScript 2018 syntax changes:
+
+* Invalid escape sequences in tagged template literals
+* Rest/spread properties
+* Async iteration
+* RegExp `s` flag
+* RegExp named capture groups
+* RegExp lookbehind assertions
+* RegExp Unicode property escapes
+
+Espree supports all of them.
+
+### What ECMAScript 2019 features do you support?
+
+Because ECMAScript 2019 is still under development, we are implementing features as they are finalized. Currently, Espree supports:
+
+* Optional `catch` binding
+* JSON superset (`\u2028` and `\u2029` in string literals)
+
+### How do you determine which experimental features to support?
+
+In general, we do not support experimental JavaScript features. We may make exceptions from time to time depending on the maturity of the features.
diff --git a/server/node_modules/vue-eslint-parser/node_modules/espree/espree.js b/server/node_modules/vue-eslint-parser/node_modules/espree/espree.js
new file mode 100644
index 0000000000000000000000000000000000000000..d8069528b169462efa8a208cab44eed0d3b61fd8
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/espree/espree.js
@@ -0,0 +1,177 @@
+/**
+ * @fileoverview Main Espree file that converts Acorn into Esprima output.
+ *
+ * This file contains code from the following MIT-licensed projects:
+ * 1. Acorn
+ * 2. Babylon
+ * 3. Babel-ESLint
+ *
+ * This file also contains code from Esprima, which is BSD licensed.
+ *
+ * Acorn is Copyright 2012-2015 Acorn Contributors (https://github.com/marijnh/acorn/blob/master/AUTHORS)
+ * Babylon is Copyright 2014-2015 various contributors (https://github.com/babel/babel/blob/master/packages/babylon/AUTHORS)
+ * Babel-ESLint is Copyright 2014-2015 Sebastian McKenzie <sebmck@gmail.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Esprima is Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/* eslint no-undefined:0, no-use-before-define: 0 */
+
+"use strict";
+
+const acorn = require("acorn");
+const jsx = require("acorn-jsx");
+const astNodeTypes = require("./lib/ast-node-types");
+const espree = require("./lib/espree");
+const { getLatestEcmaVersion, getSupportedEcmaVersions } = require("./lib/options");
+
+// To initialize lazily.
+const parsers = {
+    _regular: null,
+    _jsx: null,
+
+    get regular() {
+        if (this._regular === null) {
+            this._regular = acorn.Parser.extend(espree());
+        }
+        return this._regular;
+    },
+
+    get jsx() {
+        if (this._jsx === null) {
+            this._jsx = acorn.Parser.extend(jsx(), espree());
+        }
+        return this._jsx;
+    },
+
+    get(options) {
+        const useJsx = Boolean(
+            options &&
+            options.ecmaFeatures &&
+            options.ecmaFeatures.jsx
+        );
+
+        return useJsx ? this.jsx : this.regular;
+    }
+};
+
+//------------------------------------------------------------------------------
+// Tokenizer
+//------------------------------------------------------------------------------
+
+/**
+ * Tokenizes the given code.
+ * @param {string} code The code to tokenize.
+ * @param {Object} options Options defining how to tokenize.
+ * @returns {Token[]} An array of tokens.
+ * @throws {SyntaxError} If the input code is invalid.
+ * @private
+ */
+function tokenize(code, options) {
+    const Parser = parsers.get(options);
+
+    // Ensure to collect tokens.
+    if (!options || options.tokens !== true) {
+        options = Object.assign({}, options, { tokens: true }); // eslint-disable-line no-param-reassign
+    }
+
+    return new Parser(options, code).tokenize();
+}
+
+//------------------------------------------------------------------------------
+// Parser
+//------------------------------------------------------------------------------
+
+/**
+ * Parses the given code.
+ * @param {string} code The code to tokenize.
+ * @param {Object} options Options defining how to tokenize.
+ * @returns {ASTNode} The "Program" AST node.
+ * @throws {SyntaxError} If the input code is invalid.
+ */
+function parse(code, options) {
+    const Parser = parsers.get(options);
+
+    return new Parser(options, code).parse();
+}
+
+//------------------------------------------------------------------------------
+// Public
+//------------------------------------------------------------------------------
+
+exports.version = require("./package.json").version;
+
+exports.tokenize = tokenize;
+
+exports.parse = parse;
+
+// Deep copy.
+/* istanbul ignore next */
+exports.Syntax = (function() {
+    let name,
+        types = {};
+
+    if (typeof Object.create === "function") {
+        types = Object.create(null);
+    }
+
+    for (name in astNodeTypes) {
+        if (Object.hasOwnProperty.call(astNodeTypes, name)) {
+            types[name] = astNodeTypes[name];
+        }
+    }
+
+    if (typeof Object.freeze === "function") {
+        Object.freeze(types);
+    }
+
+    return types;
+}());
+
+/* istanbul ignore next */
+exports.VisitorKeys = (function() {
+    return require("eslint-visitor-keys").KEYS;
+}());
+
+exports.latestEcmaVersion = getLatestEcmaVersion();
+
+exports.supportedEcmaVersions = getSupportedEcmaVersions();
diff --git a/server/node_modules/vue-eslint-parser/node_modules/espree/lib/ast-node-types.js b/server/node_modules/vue-eslint-parser/node_modules/espree/lib/ast-node-types.js
new file mode 100644
index 0000000000000000000000000000000000000000..2844024d539ddda9f74c8af6ee91b6c39956382a
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/espree/lib/ast-node-types.js
@@ -0,0 +1,96 @@
+/**
+ * @fileoverview The AST node types produced by the parser.
+ * @author Nicholas C. Zakas
+ */
+
+"use strict";
+
+//------------------------------------------------------------------------------
+// Requirements
+//------------------------------------------------------------------------------
+
+// None!
+
+//------------------------------------------------------------------------------
+// Public
+//------------------------------------------------------------------------------
+
+module.exports = {
+    AssignmentExpression: "AssignmentExpression",
+    AssignmentPattern: "AssignmentPattern",
+    ArrayExpression: "ArrayExpression",
+    ArrayPattern: "ArrayPattern",
+    ArrowFunctionExpression: "ArrowFunctionExpression",
+    AwaitExpression: "AwaitExpression",
+    BlockStatement: "BlockStatement",
+    BinaryExpression: "BinaryExpression",
+    BreakStatement: "BreakStatement",
+    CallExpression: "CallExpression",
+    CatchClause: "CatchClause",
+    ClassBody: "ClassBody",
+    ClassDeclaration: "ClassDeclaration",
+    ClassExpression: "ClassExpression",
+    ConditionalExpression: "ConditionalExpression",
+    ContinueStatement: "ContinueStatement",
+    DoWhileStatement: "DoWhileStatement",
+    DebuggerStatement: "DebuggerStatement",
+    EmptyStatement: "EmptyStatement",
+    ExpressionStatement: "ExpressionStatement",
+    ForStatement: "ForStatement",
+    ForInStatement: "ForInStatement",
+    ForOfStatement: "ForOfStatement",
+    FunctionDeclaration: "FunctionDeclaration",
+    FunctionExpression: "FunctionExpression",
+    Identifier: "Identifier",
+    IfStatement: "IfStatement",
+    Literal: "Literal",
+    LabeledStatement: "LabeledStatement",
+    LogicalExpression: "LogicalExpression",
+    MemberExpression: "MemberExpression",
+    MetaProperty: "MetaProperty",
+    MethodDefinition: "MethodDefinition",
+    NewExpression: "NewExpression",
+    ObjectExpression: "ObjectExpression",
+    ObjectPattern: "ObjectPattern",
+    Program: "Program",
+    Property: "Property",
+    RestElement: "RestElement",
+    ReturnStatement: "ReturnStatement",
+    SequenceExpression: "SequenceExpression",
+    SpreadElement: "SpreadElement",
+    Super: "Super",
+    SwitchCase: "SwitchCase",
+    SwitchStatement: "SwitchStatement",
+    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",
+    JSXIdentifier: "JSXIdentifier",
+    JSXNamespacedName: "JSXNamespacedName",
+    JSXMemberExpression: "JSXMemberExpression",
+    JSXEmptyExpression: "JSXEmptyExpression",
+    JSXExpressionContainer: "JSXExpressionContainer",
+    JSXElement: "JSXElement",
+    JSXClosingElement: "JSXClosingElement",
+    JSXOpeningElement: "JSXOpeningElement",
+    JSXAttribute: "JSXAttribute",
+    JSXSpreadAttribute: "JSXSpreadAttribute",
+    JSXText: "JSXText",
+    ExportDefaultDeclaration: "ExportDefaultDeclaration",
+    ExportNamedDeclaration: "ExportNamedDeclaration",
+    ExportAllDeclaration: "ExportAllDeclaration",
+    ExportSpecifier: "ExportSpecifier",
+    ImportDeclaration: "ImportDeclaration",
+    ImportSpecifier: "ImportSpecifier",
+    ImportDefaultSpecifier: "ImportDefaultSpecifier",
+    ImportNamespaceSpecifier: "ImportNamespaceSpecifier"
+};
diff --git a/server/node_modules/vue-eslint-parser/node_modules/espree/lib/espree.js b/server/node_modules/vue-eslint-parser/node_modules/espree/lib/espree.js
new file mode 100644
index 0000000000000000000000000000000000000000..50ca6e42f250f6a07d0974b5bf0b9814509f62b1
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/espree/lib/espree.js
@@ -0,0 +1,286 @@
+"use strict";
+
+/* eslint-disable no-param-reassign*/
+const TokenTranslator = require("./token-translator");
+const { normalizeOptions } = require("./options");
+
+const STATE = Symbol("espree's internal state");
+const ESPRIMA_FINISH_NODE = Symbol("espree's esprimaFinishNode");
+
+
+/**
+ * Converts an Acorn comment to a Esprima comment.
+ * @param {boolean} block True if it's a block comment, false if not.
+ * @param {string} text The text of the comment.
+ * @param {int} start The index at which the comment starts.
+ * @param {int} end The index at which the comment ends.
+ * @param {Location} startLoc The location at which the comment starts.
+ * @param {Location} endLoc The location at which the comment ends.
+ * @returns {Object} The comment object.
+ * @private
+ */
+function convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc) {
+    const comment = {
+        type: block ? "Block" : "Line",
+        value: text
+    };
+
+    if (typeof start === "number") {
+        comment.start = start;
+        comment.end = end;
+        comment.range = [start, end];
+    }
+
+    if (typeof startLoc === "object") {
+        comment.loc = {
+            start: startLoc,
+            end: endLoc
+        };
+    }
+
+    return comment;
+}
+
+module.exports = () => Parser => {
+    const tokTypes = Object.assign({}, Parser.acorn.tokTypes);
+
+    if (Parser.acornJsx) {
+        Object.assign(tokTypes, Parser.acornJsx.tokTypes);
+    }
+
+    return class Espree extends Parser {
+        constructor(opts, code) {
+            if (typeof opts !== "object" || opts === null) {
+                opts = {};
+            }
+            if (typeof code !== "string" && !(code instanceof String)) {
+                code = String(code);
+            }
+
+            const options = normalizeOptions(opts);
+            const ecmaFeatures = options.ecmaFeatures || {};
+            const tokenTranslator =
+                options.tokens === true
+                    ? new TokenTranslator(tokTypes, code)
+                    : null;
+
+            // Initialize acorn parser.
+            super({
+
+                // TODO: use {...options} when spread is supported(Node.js >= 8.3.0).
+                ecmaVersion: options.ecmaVersion,
+                sourceType: options.sourceType,
+                ranges: options.ranges,
+                locations: options.locations,
+
+                // Truthy value is true for backward compatibility.
+                allowReturnOutsideFunction: Boolean(ecmaFeatures.globalReturn),
+
+                // Collect tokens
+                onToken: token => {
+                    if (tokenTranslator) {
+
+                        // Use `tokens`, `ecmaVersion`, and `jsxAttrValueToken` in the state.
+                        tokenTranslator.onToken(token, this[STATE]);
+                    }
+                    if (token.type !== tokTypes.eof) {
+                        this[STATE].lastToken = token;
+                    }
+                },
+
+                // Collect comments
+                onComment: (block, text, start, end, startLoc, endLoc) => {
+                    if (this[STATE].comments) {
+                        const comment = convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc);
+
+                        this[STATE].comments.push(comment);
+                    }
+                }
+            }, code);
+
+            // Initialize internal state.
+            this[STATE] = {
+                tokens: tokenTranslator ? [] : null,
+                comments: options.comment === true ? [] : null,
+                impliedStrict: ecmaFeatures.impliedStrict === true && this.options.ecmaVersion >= 5,
+                ecmaVersion: this.options.ecmaVersion,
+                jsxAttrValueToken: false,
+                lastToken: null
+            };
+        }
+
+        tokenize() {
+            do {
+                this.next();
+            } while (this.type !== tokTypes.eof);
+
+            // Consume the final eof token
+            this.next();
+
+            const extra = this[STATE];
+            const tokens = extra.tokens;
+
+            if (extra.comments) {
+                tokens.comments = extra.comments;
+            }
+
+            return tokens;
+        }
+
+        finishNode(...args) {
+            const result = super.finishNode(...args);
+
+            return this[ESPRIMA_FINISH_NODE](result);
+        }
+
+        finishNodeAt(...args) {
+            const result = super.finishNodeAt(...args);
+
+            return this[ESPRIMA_FINISH_NODE](result);
+        }
+
+        parse() {
+            const extra = this[STATE];
+            const program = super.parse();
+
+            program.sourceType = this.options.sourceType;
+
+            if (extra.comments) {
+                program.comments = extra.comments;
+            }
+            if (extra.tokens) {
+                program.tokens = extra.tokens;
+            }
+
+            /*
+             * Adjust opening and closing position of program to match Esprima.
+             * Acorn always starts programs at range 0 whereas Esprima starts at the
+             * first AST node's start (the only real difference is when there's leading
+             * whitespace or leading comments). Acorn also counts trailing whitespace
+             * as part of the program whereas Esprima only counts up to the last token.
+             */
+            if (program.range) {
+                program.range[0] = program.body.length ? program.body[0].range[0] : program.range[0];
+                program.range[1] = extra.lastToken ? extra.lastToken.range[1] : program.range[1];
+            }
+            if (program.loc) {
+                program.loc.start = program.body.length ? program.body[0].loc.start : program.loc.start;
+                program.loc.end = extra.lastToken ? extra.lastToken.loc.end : program.loc.end;
+            }
+
+            return program;
+        }
+
+        parseTopLevel(node) {
+            if (this[STATE].impliedStrict) {
+                this.strict = true;
+            }
+            return super.parseTopLevel(node);
+        }
+
+        /**
+         * Overwrites the default raise method to throw Esprima-style errors.
+         * @param {int} pos The position of the error.
+         * @param {string} message The error message.
+         * @throws {SyntaxError} A syntax error.
+         * @returns {void}
+         */
+        raise(pos, message) {
+            const loc = Parser.acorn.getLineInfo(this.input, pos);
+            const err = new SyntaxError(message);
+
+            err.index = pos;
+            err.lineNumber = loc.line;
+            err.column = loc.column + 1; // acorn uses 0-based columns
+            throw err;
+        }
+
+        /**
+         * Overwrites the default raise method to throw Esprima-style errors.
+         * @param {int} pos The position of the error.
+         * @param {string} message The error message.
+         * @throws {SyntaxError} A syntax error.
+         * @returns {void}
+         */
+        raiseRecoverable(pos, message) {
+            this.raise(pos, message);
+        }
+
+        /**
+         * Overwrites the default unexpected method to throw Esprima-style errors.
+         * @param {int} pos The position of the error.
+         * @throws {SyntaxError} A syntax error.
+         * @returns {void}
+         */
+        unexpected(pos) {
+            let message = "Unexpected token";
+
+            if (pos !== null && pos !== void 0) {
+                this.pos = pos;
+
+                if (this.options.locations) {
+                    while (this.pos < this.lineStart) {
+                        this.lineStart = this.input.lastIndexOf("\n", this.lineStart - 2) + 1;
+                        --this.curLine;
+                    }
+                }
+
+                this.nextToken();
+            }
+
+            if (this.end > this.start) {
+                message += ` ${this.input.slice(this.start, this.end)}`;
+            }
+
+            this.raise(this.start, message);
+        }
+
+        /*
+        * Esprima-FB represents JSX strings as tokens called "JSXText", but Acorn-JSX
+        * uses regular tt.string without any distinction between this and regular JS
+        * strings. As such, we intercept an attempt to read a JSX string and set a flag
+        * on extra so that when tokens are converted, the next token will be switched
+        * to JSXText via onToken.
+        */
+        jsx_readString(quote) { // eslint-disable-line camelcase
+            const result = super.jsx_readString(quote);
+
+            if (this.type === tokTypes.string) {
+                this[STATE].jsxAttrValueToken = true;
+            }
+            return result;
+        }
+
+        /**
+         * Performs last-minute Esprima-specific compatibility checks and fixes.
+         * @param {ASTNode} result The node to check.
+         * @returns {ASTNode} The finished node.
+         */
+        [ESPRIMA_FINISH_NODE](result) {
+
+            // Acorn doesn't count the opening and closing backticks as part of templates
+            // so we have to adjust ranges/locations appropriately.
+            if (result.type === "TemplateElement") {
+
+                // additional adjustment needed if ${ is the last token
+                const terminalDollarBraceL = this.input.slice(result.end, result.end + 2) === "${";
+
+                if (result.range) {
+                    result.range[0]--;
+                    result.range[1] += (terminalDollarBraceL ? 2 : 1);
+                }
+
+                if (result.loc) {
+                    result.loc.start.column--;
+                    result.loc.end.column += (terminalDollarBraceL ? 2 : 1);
+                }
+            }
+
+            if (result.type.indexOf("Function") > -1 && !result.generator) {
+                result.generator = false;
+            }
+
+            return result;
+        }
+    };
+};
diff --git a/server/node_modules/vue-eslint-parser/node_modules/espree/lib/features.js b/server/node_modules/vue-eslint-parser/node_modules/espree/lib/features.js
new file mode 100644
index 0000000000000000000000000000000000000000..d1ad5f851f413aba04da71c798495513d64e06b5
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/espree/lib/features.js
@@ -0,0 +1,29 @@
+/**
+ * @fileoverview The list of feature flags supported by the parser and their default
+ *      settings.
+ * @author Nicholas C. Zakas
+ */
+
+"use strict";
+
+//------------------------------------------------------------------------------
+// Requirements
+//------------------------------------------------------------------------------
+
+// None!
+
+//------------------------------------------------------------------------------
+// Public
+//------------------------------------------------------------------------------
+
+module.exports = {
+
+    // React JSX parsing
+    jsx: false,
+
+    // allow return statement in global scope
+    globalReturn: false,
+
+    // allow implied strict mode
+    impliedStrict: false
+};
diff --git a/server/node_modules/vue-eslint-parser/node_modules/espree/lib/options.js b/server/node_modules/vue-eslint-parser/node_modules/espree/lib/options.js
new file mode 100644
index 0000000000000000000000000000000000000000..ccebbea477855b9ad03829db4a8588910be68606
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/espree/lib/options.js
@@ -0,0 +1,105 @@
+/**
+ * @fileoverview A collection of methods for processing Espree's options.
+ * @author Kai Cataldo
+ */
+
+"use strict";
+
+//------------------------------------------------------------------------------
+// Helpers
+//------------------------------------------------------------------------------
+
+const DEFAULT_ECMA_VERSION = 5;
+const SUPPORTED_VERSIONS = [
+    3,
+    5,
+    6,
+    7,
+    8,
+    9,
+    10,
+    11
+];
+
+/**
+ * Normalize ECMAScript version from the initial config
+ * @param {number} ecmaVersion ECMAScript version from the initial config
+ * @throws {Error} throws an error if the ecmaVersion is invalid.
+ * @returns {number} normalized ECMAScript version
+ */
+function normalizeEcmaVersion(ecmaVersion = DEFAULT_ECMA_VERSION) {
+    if (typeof ecmaVersion !== "number") {
+        throw new Error(`ecmaVersion must be a number. Received value of type ${typeof ecmaVersion} instead.`);
+    }
+
+    let version = ecmaVersion;
+
+    // Calculate ECMAScript edition number from official year version starting with
+    // ES2015, which corresponds with ES6 (or a difference of 2009).
+    if (version >= 2015) {
+        version -= 2009;
+    }
+
+    if (!SUPPORTED_VERSIONS.includes(version)) {
+        throw new Error("Invalid ecmaVersion.");
+    }
+
+    return version;
+}
+
+/**
+ * Normalize sourceType from the initial config
+ * @param {string} sourceType to normalize
+ * @throws {Error} throw an error if sourceType is invalid
+ * @returns {string} normalized sourceType
+ */
+function normalizeSourceType(sourceType = "script") {
+    if (sourceType === "script" || sourceType === "module") {
+        return sourceType;
+    }
+    throw new Error("Invalid sourceType.");
+}
+
+/**
+ * Normalize parserOptions
+ * @param {Object} options the parser options to normalize
+ * @throws {Error} throw an error if found invalid option.
+ * @returns {Object} normalized options
+ */
+function normalizeOptions(options) {
+    const ecmaVersion = normalizeEcmaVersion(options.ecmaVersion);
+    const sourceType = normalizeSourceType(options.sourceType);
+    const ranges = options.range === true;
+    const locations = options.loc === true;
+
+    if (sourceType === "module" && ecmaVersion < 6) {
+        throw new Error("sourceType 'module' is not supported when ecmaVersion < 2015. Consider adding `{ ecmaVersion: 2015 }` to the parser options.");
+    }
+    return Object.assign({}, options, { ecmaVersion, sourceType, ranges, locations });
+}
+
+/**
+ * Get the latest ECMAScript version supported by Espree.
+ * @returns {number} The latest ECMAScript version.
+ */
+function getLatestEcmaVersion() {
+    return SUPPORTED_VERSIONS[SUPPORTED_VERSIONS.length - 1];
+}
+
+/**
+ * Get the list of ECMAScript versions supported by Espree.
+ * @returns {number[]} An array containing the supported ECMAScript versions.
+ */
+function getSupportedEcmaVersions() {
+    return [...SUPPORTED_VERSIONS];
+}
+
+//------------------------------------------------------------------------------
+// Public
+//------------------------------------------------------------------------------
+
+module.exports = {
+    normalizeOptions,
+    getLatestEcmaVersion,
+    getSupportedEcmaVersions
+};
diff --git a/server/node_modules/vue-eslint-parser/node_modules/espree/lib/token-translator.js b/server/node_modules/vue-eslint-parser/node_modules/espree/lib/token-translator.js
new file mode 100644
index 0000000000000000000000000000000000000000..9919e1af236476f1049613b8cfd467383f540f1d
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/espree/lib/token-translator.js
@@ -0,0 +1,262 @@
+/**
+ * @fileoverview Translates tokens between Acorn format and Esprima format.
+ * @author Nicholas C. Zakas
+ */
+/* eslint no-underscore-dangle: 0 */
+
+"use strict";
+
+//------------------------------------------------------------------------------
+// Requirements
+//------------------------------------------------------------------------------
+
+// none!
+
+//------------------------------------------------------------------------------
+// Private
+//------------------------------------------------------------------------------
+
+
+// Esprima Token Types
+const Token = {
+    Boolean: "Boolean",
+    EOF: "<end>",
+    Identifier: "Identifier",
+    Keyword: "Keyword",
+    Null: "Null",
+    Numeric: "Numeric",
+    Punctuator: "Punctuator",
+    String: "String",
+    RegularExpression: "RegularExpression",
+    Template: "Template",
+    JSXIdentifier: "JSXIdentifier",
+    JSXText: "JSXText"
+};
+
+/**
+ * Converts part of a template into an Esprima token.
+ * @param {AcornToken[]} tokens The Acorn tokens representing the template.
+ * @param {string} code The source code.
+ * @returns {EsprimaToken} The Esprima equivalent of the template token.
+ * @private
+ */
+function convertTemplatePart(tokens, code) {
+    const firstToken = tokens[0],
+        lastTemplateToken = tokens[tokens.length - 1];
+
+    const token = {
+        type: Token.Template,
+        value: code.slice(firstToken.start, lastTemplateToken.end)
+    };
+
+    if (firstToken.loc) {
+        token.loc = {
+            start: firstToken.loc.start,
+            end: lastTemplateToken.loc.end
+        };
+    }
+
+    if (firstToken.range) {
+        token.start = firstToken.range[0];
+        token.end = lastTemplateToken.range[1];
+        token.range = [token.start, token.end];
+    }
+
+    return token;
+}
+
+/**
+ * Contains logic to translate Acorn tokens into Esprima tokens.
+ * @param {Object} acornTokTypes The Acorn token types.
+ * @param {string} code The source code Acorn is parsing. This is necessary
+ *      to correct the "value" property of some tokens.
+ * @constructor
+ */
+function TokenTranslator(acornTokTypes, code) {
+
+    // token types
+    this._acornTokTypes = acornTokTypes;
+
+    // token buffer for templates
+    this._tokens = [];
+
+    // track the last curly brace
+    this._curlyBrace = null;
+
+    // the source code
+    this._code = code;
+
+}
+
+TokenTranslator.prototype = {
+    constructor: TokenTranslator,
+
+    /**
+     * Translates a single Esprima token to a single Acorn token. This may be
+     * inaccurate due to how templates are handled differently in Esprima and
+     * Acorn, but should be accurate for all other tokens.
+     * @param {AcornToken} token The Acorn token to translate.
+     * @param {Object} extra Espree extra object.
+     * @returns {EsprimaToken} The Esprima version of the token.
+     */
+    translate(token, extra) {
+
+        const type = token.type,
+            tt = this._acornTokTypes;
+
+        if (type === tt.name) {
+            token.type = Token.Identifier;
+
+            // TODO: See if this is an Acorn bug
+            if (token.value === "static") {
+                token.type = Token.Keyword;
+            }
+
+            if (extra.ecmaVersion > 5 && (token.value === "yield" || token.value === "let")) {
+                token.type = Token.Keyword;
+            }
+
+        } else if (type === tt.semi || type === tt.comma ||
+                 type === tt.parenL || type === tt.parenR ||
+                 type === tt.braceL || type === tt.braceR ||
+                 type === tt.dot || type === tt.bracketL ||
+                 type === tt.colon || type === tt.question ||
+                 type === tt.bracketR || type === tt.ellipsis ||
+                 type === tt.arrow || type === tt.jsxTagStart ||
+                 type === tt.incDec || type === tt.starstar ||
+                 type === tt.jsxTagEnd || type === tt.prefix ||
+                 (type.binop && !type.keyword) ||
+                 type.isAssign) {
+
+            token.type = Token.Punctuator;
+            token.value = this._code.slice(token.start, token.end);
+        } else if (type === tt.jsxName) {
+            token.type = Token.JSXIdentifier;
+        } else if (type.label === "jsxText" || type === tt.jsxAttrValueToken) {
+            token.type = Token.JSXText;
+        } else if (type.keyword) {
+            if (type.keyword === "true" || type.keyword === "false") {
+                token.type = Token.Boolean;
+            } else if (type.keyword === "null") {
+                token.type = Token.Null;
+            } else {
+                token.type = Token.Keyword;
+            }
+        } else if (type === tt.num) {
+            token.type = Token.Numeric;
+            token.value = this._code.slice(token.start, token.end);
+        } else if (type === tt.string) {
+
+            if (extra.jsxAttrValueToken) {
+                extra.jsxAttrValueToken = false;
+                token.type = Token.JSXText;
+            } else {
+                token.type = Token.String;
+            }
+
+            token.value = this._code.slice(token.start, token.end);
+        } else if (type === tt.regexp) {
+            token.type = Token.RegularExpression;
+            const value = token.value;
+
+            token.regex = {
+                flags: value.flags,
+                pattern: value.pattern
+            };
+            token.value = `/${value.pattern}/${value.flags}`;
+        }
+
+        return token;
+    },
+
+    /**
+     * Function to call during Acorn's onToken handler.
+     * @param {AcornToken} token The Acorn token.
+     * @param {Object} extra The Espree extra object.
+     * @returns {void}
+     */
+    onToken(token, extra) {
+
+        const that = this,
+            tt = this._acornTokTypes,
+            tokens = extra.tokens,
+            templateTokens = this._tokens;
+
+        /**
+         * Flushes the buffered template tokens and resets the template
+         * tracking.
+         * @returns {void}
+         * @private
+         */
+        function translateTemplateTokens() {
+            tokens.push(convertTemplatePart(that._tokens, that._code));
+            that._tokens = [];
+        }
+
+        if (token.type === tt.eof) {
+
+            // might be one last curlyBrace
+            if (this._curlyBrace) {
+                tokens.push(this.translate(this._curlyBrace, extra));
+            }
+
+            return;
+        }
+
+        if (token.type === tt.backQuote) {
+
+            // if there's already a curly, it's not part of the template
+            if (this._curlyBrace) {
+                tokens.push(this.translate(this._curlyBrace, extra));
+                this._curlyBrace = null;
+            }
+
+            templateTokens.push(token);
+
+            // it's the end
+            if (templateTokens.length > 1) {
+                translateTemplateTokens();
+            }
+
+            return;
+        }
+        if (token.type === tt.dollarBraceL) {
+            templateTokens.push(token);
+            translateTemplateTokens();
+            return;
+        }
+        if (token.type === tt.braceR) {
+
+            // if there's already a curly, it's not part of the template
+            if (this._curlyBrace) {
+                tokens.push(this.translate(this._curlyBrace, extra));
+            }
+
+            // store new curly for later
+            this._curlyBrace = token;
+            return;
+        }
+        if (token.type === tt.template || token.type === tt.invalidTemplate) {
+            if (this._curlyBrace) {
+                templateTokens.push(this._curlyBrace);
+                this._curlyBrace = null;
+            }
+
+            templateTokens.push(token);
+            return;
+        }
+
+        if (this._curlyBrace) {
+            tokens.push(this.translate(this._curlyBrace, extra));
+            this._curlyBrace = null;
+        }
+
+        tokens.push(this.translate(token, extra));
+    }
+};
+
+//------------------------------------------------------------------------------
+// Public
+//------------------------------------------------------------------------------
+
+module.exports = TokenTranslator;
diff --git a/server/node_modules/vue-eslint-parser/node_modules/espree/lib/visitor-keys.js b/server/node_modules/vue-eslint-parser/node_modules/espree/lib/visitor-keys.js
new file mode 100644
index 0000000000000000000000000000000000000000..4216864f1c27c9aef6db1ea6f11fee5d8306ce24
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/espree/lib/visitor-keys.js
@@ -0,0 +1,123 @@
+/**
+ * @fileoverview The visitor keys for the node types Espree supports
+ * @author Nicholas C. Zakas
+ *
+ * This file contains code from estraverse-fb.
+ *
+ * The MIT license. Copyright (c) 2014 Ingvar Stepanyan
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+"use strict";
+
+//------------------------------------------------------------------------------
+// Requirements
+//------------------------------------------------------------------------------
+
+// None!
+
+//------------------------------------------------------------------------------
+// Public
+//------------------------------------------------------------------------------
+
+module.exports = {
+
+    // ECMAScript
+    AssignmentExpression: ["left", "right"],
+    AssignmentPattern: ["left", "right"],
+    ArrayExpression: ["elements"],
+    ArrayPattern: ["elements"],
+    ArrowFunctionExpression: ["params", "body"],
+    BlockStatement: ["body"],
+    BinaryExpression: ["left", "right"],
+    BreakStatement: ["label"],
+    CallExpression: ["callee", "arguments"],
+    CatchClause: ["param", "body"],
+    ClassBody: ["body"],
+    ClassDeclaration: ["id", "superClass", "body"],
+    ClassExpression: ["id", "superClass", "body"],
+    ConditionalExpression: ["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"],
+    Identifier: [],
+    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"],
+
+    // JSX
+    JSXIdentifier: [],
+    JSXNamespacedName: ["namespace", "name"],
+    JSXMemberExpression: ["object", "property"],
+    JSXEmptyExpression: [],
+    JSXExpressionContainer: ["expression"],
+    JSXElement: ["openingElement", "closingElement", "children"],
+    JSXClosingElement: ["name"],
+    JSXOpeningElement: ["name", "attributes"],
+    JSXAttribute: ["name", "value"],
+    JSXText: null,
+    JSXSpreadAttribute: ["argument"]
+};
diff --git a/server/node_modules/vue-eslint-parser/node_modules/espree/package.json b/server/node_modules/vue-eslint-parser/node_modules/espree/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e365fa9138dccce8e8dae1e3c4fcc6a645e0d490
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/node_modules/espree/package.json
@@ -0,0 +1,93 @@
+{
+  "_from": "espree@^6.2.1",
+  "_id": "espree@6.2.1",
+  "_inBundle": false,
+  "_integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
+  "_location": "/vue-eslint-parser/espree",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "espree@^6.2.1",
+    "name": "espree",
+    "escapedName": "espree",
+    "rawSpec": "^6.2.1",
+    "saveSpec": null,
+    "fetchSpec": "^6.2.1"
+  },
+  "_requiredBy": [
+    "/vue-eslint-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
+  "_shasum": "77fc72e1fd744a2052c20f38a5b575832e82734a",
+  "_spec": "espree@^6.2.1",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\vue-eslint-parser",
+  "author": {
+    "name": "Nicholas C. Zakas",
+    "email": "nicholas+npm@nczconsulting.com"
+  },
+  "bugs": {
+    "url": "http://github.com/eslint/espree.git"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "acorn": "^7.1.1",
+    "acorn-jsx": "^5.2.0",
+    "eslint-visitor-keys": "^1.1.0"
+  },
+  "deprecated": false,
+  "description": "An Esprima-compatible JavaScript parser built on Acorn",
+  "devDependencies": {
+    "browserify": "^16.5.0",
+    "chai": "^4.2.0",
+    "eslint": "^6.0.1",
+    "eslint-config-eslint": "^5.0.1",
+    "eslint-plugin-node": "^9.1.0",
+    "eslint-release": "^1.0.0",
+    "esprima": "latest",
+    "esprima-fb": "^8001.2001.0-dev-harmony-fb",
+    "json-diff": "^0.5.4",
+    "leche": "^2.3.0",
+    "mocha": "^6.2.0",
+    "nyc": "^14.1.1",
+    "regenerate": "^1.4.0",
+    "shelljs": "^0.3.0",
+    "shelljs-nodecli": "^0.1.1",
+    "unicode-6.3.0": "^0.7.5"
+  },
+  "engines": {
+    "node": ">=6.0.0"
+  },
+  "files": [
+    "lib",
+    "espree.js"
+  ],
+  "homepage": "https://github.com/eslint/espree",
+  "keywords": [
+    "ast",
+    "ecmascript",
+    "javascript",
+    "parser",
+    "syntax",
+    "acorn"
+  ],
+  "license": "BSD-2-Clause",
+  "main": "espree.js",
+  "name": "espree",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/eslint/espree.git"
+  },
+  "scripts": {
+    "browserify": "node Makefile.js browserify",
+    "generate-alpharelease": "eslint-generate-prerelease alpha",
+    "generate-betarelease": "eslint-generate-prerelease beta",
+    "generate-rcrelease": "eslint-generate-prerelease rc",
+    "generate-regex": "node tools/generate-identifier-regex.js",
+    "generate-release": "eslint-generate-release",
+    "lint": "node Makefile.js lint",
+    "publish-release": "eslint-publish-release",
+    "test": "npm run-script lint && node Makefile.js test"
+  },
+  "version": "6.2.1"
+}
diff --git a/server/node_modules/vue-eslint-parser/package.json b/server/node_modules/vue-eslint-parser/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..26e996facaffce482f02c0b3efec943f5a903ca5
--- /dev/null
+++ b/server/node_modules/vue-eslint-parser/package.json
@@ -0,0 +1,122 @@
+{
+  "_from": "vue-eslint-parser@^7.3.0",
+  "_id": "vue-eslint-parser@7.3.0",
+  "_inBundle": false,
+  "_integrity": "sha512-n5PJKZbyspD0+8LnaZgpEvNCrjQx1DyDHw8JdWwoxhhC+yRip4TAvSDpXGf9SWX6b0umeB5aR61gwUo6NVvFxw==",
+  "_location": "/vue-eslint-parser",
+  "_phantomChildren": {
+    "acorn": "7.4.1",
+    "acorn-jsx": "5.3.1"
+  },
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "vue-eslint-parser@^7.3.0",
+    "name": "vue-eslint-parser",
+    "escapedName": "vue-eslint-parser",
+    "rawSpec": "^7.3.0",
+    "saveSpec": null,
+    "fetchSpec": "^7.3.0"
+  },
+  "_requiredBy": [
+    "/eslint-plugin-vue"
+  ],
+  "_resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.3.0.tgz",
+  "_shasum": "894085839d99d81296fa081d19643733f23d7559",
+  "_spec": "vue-eslint-parser@^7.3.0",
+  "_where": "C:\\Users\\V S THARUNIKA\\Documents\\book-racker\\server\\node_modules\\eslint-plugin-vue",
+  "author": {
+    "name": "Toru Nagashima"
+  },
+  "bugs": {
+    "url": "https://github.com/vuejs/vue-eslint-parser/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "debug": "^4.1.1",
+    "eslint-scope": "^5.0.0",
+    "eslint-visitor-keys": "^1.1.0",
+    "espree": "^6.2.1",
+    "esquery": "^1.0.1",
+    "lodash": "^4.17.15"
+  },
+  "deprecated": false,
+  "description": "The ESLint custom parser for `.vue` files.",
+  "devDependencies": {
+    "@mysticatea/eslint-plugin": "^13.0.0",
+    "@types/debug": "0.0.30",
+    "@types/eslint": "^7.2.6",
+    "@types/estree": "0.0.45",
+    "@types/lodash": "^4.14.120",
+    "@types/mocha": "^5.2.4",
+    "@types/node": "^10.12.21",
+    "@typescript-eslint/eslint-plugin": "^4.9.1",
+    "@typescript-eslint/parser": "^4.7.0",
+    "babel-eslint": "^10.0.1",
+    "chokidar": "^2.0.4",
+    "codecov": "^3.1.0",
+    "cross-spawn": "^6.0.5",
+    "dts-bundle": "^0.7.3",
+    "eslint": "^7.0.0",
+    "fs-extra": "^7.0.1",
+    "jsonc-eslint-parser": "^0.6.0",
+    "mocha": "^6.1.4",
+    "npm-run-all": "^4.1.5",
+    "nyc": "^14.0.0",
+    "opener": "^1.5.1",
+    "prettier": "^2.2.1",
+    "rimraf": "^2.6.3",
+    "rollup": "^1.1.2",
+    "rollup-plugin-node-resolve": "^4.0.0",
+    "rollup-plugin-sourcemaps": "^0.4.2",
+    "ts-node": "^8.1.0",
+    "typescript": "~4.0.5",
+    "wait-on": "^3.2.0",
+    "warun": "^1.0.0"
+  },
+  "engines": {
+    "node": ">=8.10"
+  },
+  "files": [
+    "index.*"
+  ],
+  "funding": "https://github.com/sponsors/mysticatea",
+  "homepage": "https://github.com/vuejs/vue-eslint-parser#readme",
+  "keywords": [],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "vue-eslint-parser",
+  "peerDependencies": {
+    "eslint": ">=5.0.0"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vuejs/vue-eslint-parser.git"
+  },
+  "scripts": {
+    "build": "tsc --module es2015 && rollup -c -o index.js && dts-bundle --name vue-eslint-parser --main .temp/index.d.ts --out ../index.d.ts",
+    "clean": "rimraf .nyc_output .temp coverage index.*",
+    "codecov": "codecov",
+    "coverage": "opener ./coverage/lcov-report/index.html",
+    "lint": "eslint src test --ext .js,.ts",
+    "postversion": "git push && git push --tags",
+    "prebuild": "npm run -s clean",
+    "pretest": "run-s build lint",
+    "preupdate-fixtures": "npm run -s build",
+    "preversion": "npm test",
+    "prewatch": "npm run -s clean",
+    "setup": "git submodule update --init && cd test/fixtures/eslint && npm install",
+    "test": "npm run -s test:mocha",
+    "test:debug": "mocha --inspect --require ts-node/register \"test/*.js\" --reporter dot --timeout 10000",
+    "test:mocha": "nyc mocha \"test/*.js\" --reporter dot --timeout 10000",
+    "update-fixtures": "node scripts/update-fixtures-ast.js && node scripts/update-fixtures-document-fragment.js",
+    "version": "npm run -s build",
+    "watch": "run-p watch:*",
+    "watch:coverage-report": "wait-on coverage/lcov-report/index.html && opener coverage/lcov-report/index.html",
+    "watch:rollup": "wait-on .temp/index.js && rollup -c -o index.js --watch",
+    "watch:test": "wait-on index.js && warun index.js \"test/*.js\" \"test/fixtures/ast/*/*.json\" \"test/fixtures/*\" --debounce 1000 --no-initial -- nyc mocha \"test/*.js\" --reporter dot --timeout 10000",
+    "watch:tsc": "tsc --module es2015 --watch",
+    "watch:update-ast": "wait-on index.js && warun index.js \"test/fixtures/ast/*/*.vue\" -- node scripts/update-fixtures-ast.js"
+  },
+  "version": "7.3.0"
+}
diff --git a/server/package-lock.json b/server/package-lock.json
index bc4d1e1433415de0d12733e218a48a06770c03fb..9782a2285de6f9107e1652ed440551914f2e2218 100644
--- a/server/package-lock.json
+++ b/server/package-lock.json
@@ -8,6 +8,7 @@
       "version": "7.12.11",
       "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
       "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+      "dev": true,
       "requires": {
         "@babel/highlight": "^7.10.4"
       }
@@ -15,12 +16,14 @@
     "@babel/helper-validator-identifier": {
       "version": "7.12.11",
       "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
-      "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+      "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
+      "dev": true
     },
     "@babel/highlight": {
       "version": "7.10.4",
       "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
       "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+      "dev": true,
       "requires": {
         "@babel/helper-validator-identifier": "^7.10.4",
         "chalk": "^2.0.0",
@@ -31,6 +34,7 @@
           "version": "2.4.2",
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
           "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+          "dev": true,
           "requires": {
             "ansi-styles": "^3.2.1",
             "escape-string-regexp": "^1.0.5",
@@ -43,6 +47,7 @@
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz",
       "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==",
+      "dev": true,
       "requires": {
         "ajv": "^6.12.4",
         "debug": "^4.1.1",
@@ -54,6 +59,40 @@
         "lodash": "^4.17.19",
         "minimatch": "^3.0.4",
         "strip-json-comments": "^3.1.1"
+      },
+      "dependencies": {
+        "ignore": {
+          "version": "4.0.6",
+          "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+          "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+          "dev": true
+        }
+      }
+    },
+    "@nodelib/fs.scandir": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
+      "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.stat": "2.0.3",
+        "run-parallel": "^1.1.9"
+      }
+    },
+    "@nodelib/fs.stat": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
+      "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
+      "dev": true
+    },
+    "@nodelib/fs.walk": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
+      "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.scandir": "2.1.3",
+        "fastq": "^1.6.0"
       }
     },
     "@sindresorhus/is": {
@@ -69,6 +108,95 @@
         "defer-to-connect": "^1.0.1"
       }
     },
+    "@types/json-schema": {
+      "version": "7.0.6",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz",
+      "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==",
+      "dev": true
+    },
+    "@typescript-eslint/eslint-plugin": {
+      "version": "4.11.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.11.0.tgz",
+      "integrity": "sha512-x4arJMXBxyD6aBXLm3W7mSDZRiABzy+2PCLJbL7OPqlp53VXhaA1HKK7R2rTee5OlRhnUgnp8lZyVIqjnyPT6g==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/experimental-utils": "4.11.0",
+        "@typescript-eslint/scope-manager": "4.11.0",
+        "debug": "^4.1.1",
+        "functional-red-black-tree": "^1.0.1",
+        "regexpp": "^3.0.0",
+        "semver": "^7.3.2",
+        "tsutils": "^3.17.1"
+      }
+    },
+    "@typescript-eslint/experimental-utils": {
+      "version": "4.11.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.11.0.tgz",
+      "integrity": "sha512-1VC6mSbYwl1FguKt8OgPs8xxaJgtqFpjY/UzUYDBKq4pfQ5lBvN2WVeqYkzf7evW42axUHYl2jm9tNyFsb8oLg==",
+      "dev": true,
+      "requires": {
+        "@types/json-schema": "^7.0.3",
+        "@typescript-eslint/scope-manager": "4.11.0",
+        "@typescript-eslint/types": "4.11.0",
+        "@typescript-eslint/typescript-estree": "4.11.0",
+        "eslint-scope": "^5.0.0",
+        "eslint-utils": "^2.0.0"
+      }
+    },
+    "@typescript-eslint/parser": {
+      "version": "4.11.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.11.0.tgz",
+      "integrity": "sha512-NBTtKCC7ZtuxEV5CrHUO4Pg2s784pvavc3cnz6V+oJvVbK4tH9135f/RBP6eUA2KHiFKAollSrgSctQGmHbqJQ==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/scope-manager": "4.11.0",
+        "@typescript-eslint/types": "4.11.0",
+        "@typescript-eslint/typescript-estree": "4.11.0",
+        "debug": "^4.1.1"
+      }
+    },
+    "@typescript-eslint/scope-manager": {
+      "version": "4.11.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.11.0.tgz",
+      "integrity": "sha512-6VSTm/4vC2dHM3ySDW9Kl48en+yLNfVV6LECU8jodBHQOhO8adAVizaZ1fV0QGZnLQjQ/y0aBj5/KXPp2hBTjA==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/types": "4.11.0",
+        "@typescript-eslint/visitor-keys": "4.11.0"
+      }
+    },
+    "@typescript-eslint/types": {
+      "version": "4.11.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.11.0.tgz",
+      "integrity": "sha512-XXOdt/NPX++txOQHM1kUMgJUS43KSlXGdR/aDyEwuAEETwuPt02Nc7v+s57PzuSqMbNLclblQdv3YcWOdXhQ7g==",
+      "dev": true
+    },
+    "@typescript-eslint/typescript-estree": {
+      "version": "4.11.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.11.0.tgz",
+      "integrity": "sha512-eA6sT5dE5RHAFhtcC+b5WDlUIGwnO9b0yrfGa1mIOIAjqwSQCpXbLiFmKTdRbQN/xH2EZkGqqLDrKUuYOZ0+Hg==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/types": "4.11.0",
+        "@typescript-eslint/visitor-keys": "4.11.0",
+        "debug": "^4.1.1",
+        "globby": "^11.0.1",
+        "is-glob": "^4.0.1",
+        "lodash": "^4.17.15",
+        "semver": "^7.3.2",
+        "tsutils": "^3.17.1"
+      }
+    },
+    "@typescript-eslint/visitor-keys": {
+      "version": "4.11.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.11.0.tgz",
+      "integrity": "sha512-tRYKyY0i7cMk6v4UIOCjl1LhuepC/pc6adQqJk4Is3YcC6k46HvsV9Wl7vQoLbm9qADgeujiT7KdLrylvFIQ+A==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/types": "4.11.0",
+        "eslint-visitor-keys": "^2.0.0"
+      }
+    },
     "abbrev": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -77,17 +205,20 @@
     "acorn": {
       "version": "7.4.1",
       "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+      "dev": true
     },
     "acorn-jsx": {
       "version": "5.3.1",
       "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
-      "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng=="
+      "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
+      "dev": true
     },
     "ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
       "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+      "dev": true,
       "requires": {
         "fast-deep-equal": "^3.1.1",
         "fast-json-stable-stringify": "^2.0.0",
@@ -141,7 +272,8 @@
     "ansi-colors": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
-      "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="
+      "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+      "dev": true
     },
     "ansi-regex": {
       "version": "5.0.0",
@@ -152,6 +284,7 @@
       "version": "3.2.1",
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
       "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dev": true,
       "requires": {
         "color-convert": "^1.9.0"
       }
@@ -169,14 +302,22 @@
       "version": "1.0.10",
       "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
       "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "dev": true,
       "requires": {
         "sprintf-js": "~1.0.2"
       }
     },
+    "array-union": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+      "dev": true
+    },
     "astral-regex": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
-      "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ=="
+      "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+      "dev": true
     },
     "balanced-match": {
       "version": "1.0.0",
@@ -297,7 +438,8 @@
     "callsites": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+      "dev": true
     },
     "camelcase": {
       "version": "5.3.1",
@@ -308,6 +450,7 @@
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
       "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+      "dev": true,
       "requires": {
         "ansi-styles": "^4.1.0",
         "supports-color": "^7.1.0"
@@ -317,6 +460,7 @@
           "version": "4.3.0",
           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
           "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
           "requires": {
             "color-convert": "^2.0.1"
           }
@@ -325,6 +469,7 @@
           "version": "2.0.1",
           "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
           "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
           "requires": {
             "color-name": "~1.1.4"
           }
@@ -332,17 +477,20 @@
         "color-name": {
           "version": "1.1.4",
           "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true
         },
         "has-flag": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true
         },
         "supports-color": {
           "version": "7.2.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
           "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           }
@@ -386,6 +534,7 @@
       "version": "1.9.3",
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
       "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "dev": true,
       "requires": {
         "color-name": "1.1.3"
       }
@@ -393,7 +542,8 @@
     "color-name": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+      "dev": true
     },
     "concat-map": {
       "version": "0.0.1",
@@ -417,6 +567,7 @@
       "version": "7.0.3",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
       "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "dev": true,
       "requires": {
         "path-key": "^3.1.0",
         "shebang-command": "^2.0.0",
@@ -432,6 +583,7 @@
       "version": "4.3.1",
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
       "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+      "dev": true,
       "requires": {
         "ms": "2.1.2"
       }
@@ -452,17 +604,28 @@
     "deep-is": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
-      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
+      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+      "dev": true
     },
     "defer-to-connect": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
       "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
     },
+    "dir-glob": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+      "dev": true,
+      "requires": {
+        "path-type": "^4.0.0"
+      }
+    },
     "doctrine": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
       "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+      "dev": true,
       "requires": {
         "esutils": "^2.0.2"
       }
@@ -497,6 +660,7 @@
       "version": "2.3.6",
       "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
       "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+      "dev": true,
       "requires": {
         "ansi-colors": "^4.1.1"
       }
@@ -509,12 +673,14 @@
     "escape-string-regexp": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+      "dev": true
     },
     "eslint": {
       "version": "7.16.0",
       "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.16.0.tgz",
       "integrity": "sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw==",
+      "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
         "@eslint/eslintrc": "^0.2.2",
@@ -553,12 +719,33 @@
         "table": "^6.0.4",
         "text-table": "^0.2.0",
         "v8-compile-cache": "^2.0.3"
+      },
+      "dependencies": {
+        "ignore": {
+          "version": "4.0.6",
+          "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+          "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+          "dev": true
+        }
+      }
+    },
+    "eslint-plugin-vue": {
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.3.0.tgz",
+      "integrity": "sha512-4rc9xrZgwT4aLz3XE6lrHu+FZtDLWennYvtzVvvS81kW9c65U4DUzQQWAFjDCgCFvN6HYWxi7ueEtxZVSB+f0g==",
+      "dev": true,
+      "requires": {
+        "eslint-utils": "^2.1.0",
+        "natural-compare": "^1.4.0",
+        "semver": "^7.3.2",
+        "vue-eslint-parser": "^7.3.0"
       }
     },
     "eslint-scope": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
       "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+      "dev": true,
       "requires": {
         "esrecurse": "^4.3.0",
         "estraverse": "^4.1.1"
@@ -568,6 +755,7 @@
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
       "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+      "dev": true,
       "requires": {
         "eslint-visitor-keys": "^1.1.0"
       },
@@ -575,19 +763,22 @@
         "eslint-visitor-keys": {
           "version": "1.3.0",
           "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
+          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+          "dev": true
         }
       }
     },
     "eslint-visitor-keys": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
-      "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ=="
+      "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
+      "dev": true
     },
     "espree": {
       "version": "7.3.1",
       "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
       "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+      "dev": true,
       "requires": {
         "acorn": "^7.4.0",
         "acorn-jsx": "^5.3.1",
@@ -597,19 +788,22 @@
         "eslint-visitor-keys": {
           "version": "1.3.0",
           "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
+          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+          "dev": true
         }
       }
     },
     "esprima": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+      "dev": true
     },
     "esquery": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
       "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
+      "dev": true,
       "requires": {
         "estraverse": "^5.1.0"
       },
@@ -617,7 +811,8 @@
         "estraverse": {
           "version": "5.2.0",
           "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
-          "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="
+          "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+          "dev": true
         }
       }
     },
@@ -625,6 +820,7 @@
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
       "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+      "dev": true,
       "requires": {
         "estraverse": "^5.2.0"
       },
@@ -632,39 +828,69 @@
         "estraverse": {
           "version": "5.2.0",
           "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
-          "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="
+          "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+          "dev": true
         }
       }
     },
     "estraverse": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+      "dev": true
     },
     "esutils": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+      "dev": true
     },
     "fast-deep-equal": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+      "dev": true
+    },
+    "fast-glob": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz",
+      "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.0",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.2",
+        "picomatch": "^2.2.1"
+      }
     },
     "fast-json-stable-stringify": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+      "dev": true
     },
     "fast-levenshtein": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+      "dev": true
+    },
+    "fastq": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz",
+      "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==",
+      "dev": true,
+      "requires": {
+        "reusify": "^1.0.4"
+      }
     },
     "file-entry-cache": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz",
       "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==",
+      "dev": true,
       "requires": {
         "flat-cache": "^3.0.4"
       }
@@ -681,6 +907,7 @@
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
       "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+      "dev": true,
       "requires": {
         "flatted": "^3.1.0",
         "rimraf": "^3.0.2"
@@ -689,12 +916,14 @@
     "flatted": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz",
-      "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA=="
+      "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==",
+      "dev": true
     },
     "fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+      "dev": true
     },
     "fsevents": {
       "version": "2.1.3",
@@ -705,7 +934,8 @@
     "functional-red-black-tree": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
-      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
+      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+      "dev": true
     },
     "get-stream": {
       "version": "4.1.0",
@@ -719,6 +949,7 @@
       "version": "7.1.6",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
       "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+      "dev": true,
       "requires": {
         "fs.realpath": "^1.0.0",
         "inflight": "^1.0.4",
@@ -748,10 +979,25 @@
       "version": "12.4.0",
       "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
       "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
+      "dev": true,
       "requires": {
         "type-fest": "^0.8.1"
       }
     },
+    "globby": {
+      "version": "11.0.1",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz",
+      "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==",
+      "dev": true,
+      "requires": {
+        "array-union": "^2.1.0",
+        "dir-glob": "^3.0.1",
+        "fast-glob": "^3.1.1",
+        "ignore": "^5.1.4",
+        "merge2": "^1.3.0",
+        "slash": "^3.0.0"
+      }
+    },
     "got": {
       "version": "9.6.0",
       "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
@@ -791,9 +1037,10 @@
       "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
     },
     "ignore": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
-      "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
+      "version": "5.1.8",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
+      "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
+      "dev": true
     },
     "ignore-by-default": {
       "version": "1.0.1",
@@ -804,6 +1051,7 @@
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
       "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+      "dev": true,
       "requires": {
         "parent-module": "^1.0.0",
         "resolve-from": "^4.0.0"
@@ -823,6 +1071,7 @@
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "dev": true,
       "requires": {
         "once": "^1.3.0",
         "wrappy": "1"
@@ -831,7 +1080,8 @@
     "inherits": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "dev": true
     },
     "ini": {
       "version": "1.3.7",
@@ -914,17 +1164,20 @@
     "isexe": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
     },
     "js-tokens": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "dev": true
     },
     "js-yaml": {
       "version": "3.14.1",
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
       "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+      "dev": true,
       "requires": {
         "argparse": "^1.0.7",
         "esprima": "^4.0.0"
@@ -938,12 +1191,14 @@
     "json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+      "dev": true
     },
     "json-stable-stringify-without-jsonify": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
+      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+      "dev": true
     },
     "keyv": {
       "version": "3.1.0",
@@ -965,6 +1220,7 @@
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
       "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+      "dev": true,
       "requires": {
         "prelude-ls": "^1.2.1",
         "type-check": "~0.4.0"
@@ -973,7 +1229,8 @@
     "lodash": {
       "version": "4.17.20",
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
-      "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
+      "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
+      "dev": true
     },
     "lowercase-keys": {
       "version": "1.0.1",
@@ -984,6 +1241,7 @@
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
       "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
       "requires": {
         "yallist": "^4.0.0"
       }
@@ -1003,6 +1261,22 @@
         }
       }
     },
+    "merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true
+    },
+    "micromatch": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+      "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+      "dev": true,
+      "requires": {
+        "braces": "^3.0.1",
+        "picomatch": "^2.0.5"
+      }
+    },
     "mimic-response": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
@@ -1029,7 +1303,8 @@
     "natural-compare": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
+      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+      "dev": true
     },
     "nodemon": {
       "version": "2.0.6",
@@ -1093,6 +1368,7 @@
       "version": "0.9.1",
       "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
       "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+      "dev": true,
       "requires": {
         "deep-is": "^0.1.3",
         "fast-levenshtein": "^2.0.6",
@@ -1129,6 +1405,7 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
       "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+      "dev": true,
       "requires": {
         "callsites": "^3.0.0"
       }
@@ -1136,12 +1413,20 @@
     "path-is-absolute": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "dev": true
     },
     "path-key": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "dev": true
+    },
+    "path-type": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+      "dev": true
     },
     "picomatch": {
       "version": "2.2.2",
@@ -1151,7 +1436,8 @@
     "prelude-ls": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
-      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
+      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+      "dev": true
     },
     "prepend-http": {
       "version": "2.0.0",
@@ -1161,7 +1447,8 @@
     "progress": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
-      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
+      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+      "dev": true
     },
     "pstree.remy": {
       "version": "1.1.8",
@@ -1180,7 +1467,8 @@
     "punycode": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+      "dev": true
     },
     "pupa": {
       "version": "2.1.1",
@@ -1219,7 +1507,8 @@
     "regexpp": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
-      "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q=="
+      "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
+      "dev": true
     },
     "registry-auth-token": {
       "version": "4.2.1",
@@ -1240,7 +1529,8 @@
     "resolve-from": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
+      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+      "dev": true
     },
     "responselike": {
       "version": "1.0.2",
@@ -1250,18 +1540,32 @@
         "lowercase-keys": "^1.0.0"
       }
     },
+    "reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true
+    },
     "rimraf": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
       "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "dev": true,
       "requires": {
         "glob": "^7.1.3"
       }
     },
+    "run-parallel": {
+      "version": "1.1.10",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz",
+      "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==",
+      "dev": true
+    },
     "semver": {
       "version": "7.3.4",
       "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
       "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+      "dev": true,
       "requires": {
         "lru-cache": "^6.0.0"
       }
@@ -1285,6 +1589,7 @@
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
       "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "dev": true,
       "requires": {
         "shebang-regex": "^3.0.0"
       }
@@ -1292,17 +1597,25 @@
     "shebang-regex": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "dev": true
     },
     "signal-exit": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
       "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
     },
+    "slash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+      "dev": true
+    },
     "slice-ansi": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
       "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+      "dev": true,
       "requires": {
         "ansi-styles": "^4.0.0",
         "astral-regex": "^2.0.0",
@@ -1313,6 +1626,7 @@
           "version": "4.3.0",
           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
           "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
           "requires": {
             "color-convert": "^2.0.1"
           }
@@ -1321,6 +1635,7 @@
           "version": "2.0.1",
           "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
           "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
           "requires": {
             "color-name": "~1.1.4"
           }
@@ -1328,14 +1643,16 @@
         "color-name": {
           "version": "1.1.4",
           "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true
         }
       }
     },
     "sprintf-js": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+      "dev": true
     },
     "string-width": {
       "version": "4.2.0",
@@ -1358,7 +1675,8 @@
     "strip-json-comments": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
+      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+      "dev": true
     },
     "supports-color": {
       "version": "5.5.0",
@@ -1372,6 +1690,7 @@
       "version": "6.0.4",
       "resolved": "https://registry.npmjs.org/table/-/table-6.0.4.tgz",
       "integrity": "sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw==",
+      "dev": true,
       "requires": {
         "ajv": "^6.12.4",
         "lodash": "^4.17.20",
@@ -1387,7 +1706,8 @@
     "text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
+      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+      "dev": true
     },
     "to-readable-stream": {
       "version": "1.0.0",
@@ -1410,10 +1730,26 @@
         "nopt": "~1.0.10"
       }
     },
+    "tslib": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+      "dev": true
+    },
+    "tsutils": {
+      "version": "3.17.1",
+      "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
+      "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
+      "dev": true,
+      "requires": {
+        "tslib": "^1.8.1"
+      }
+    },
     "type-check": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
       "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+      "dev": true,
       "requires": {
         "prelude-ls": "^1.2.1"
       }
@@ -1531,6 +1867,7 @@
       "version": "4.4.0",
       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
       "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
+      "dev": true,
       "requires": {
         "punycode": "^2.1.0"
       }
@@ -1546,12 +1883,47 @@
     "v8-compile-cache": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
-      "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q=="
+      "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
+      "dev": true
+    },
+    "vue-eslint-parser": {
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.3.0.tgz",
+      "integrity": "sha512-n5PJKZbyspD0+8LnaZgpEvNCrjQx1DyDHw8JdWwoxhhC+yRip4TAvSDpXGf9SWX6b0umeB5aR61gwUo6NVvFxw==",
+      "dev": true,
+      "requires": {
+        "debug": "^4.1.1",
+        "eslint-scope": "^5.0.0",
+        "eslint-visitor-keys": "^1.1.0",
+        "espree": "^6.2.1",
+        "esquery": "^1.0.1",
+        "lodash": "^4.17.15"
+      },
+      "dependencies": {
+        "eslint-visitor-keys": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+          "dev": true
+        },
+        "espree": {
+          "version": "6.2.1",
+          "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
+          "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
+          "dev": true,
+          "requires": {
+            "acorn": "^7.1.1",
+            "acorn-jsx": "^5.2.0",
+            "eslint-visitor-keys": "^1.1.0"
+          }
+        }
+      }
     },
     "which": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
       "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "dev": true,
       "requires": {
         "isexe": "^2.0.0"
       }
@@ -1567,7 +1939,8 @@
     "word-wrap": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
+      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+      "dev": true
     },
     "wrappy": {
       "version": "1.0.2",
@@ -1593,7 +1966,8 @@
     "yallist": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
     }
   }
 }
diff --git a/server/package.json b/server/package.json
index 8929424e425cdabc217c30d8a8320ca640ee55e5..4b5c0e742e5f89de3bfb561c7de4a2d804232569 100644
--- a/server/package.json
+++ b/server/package.json
@@ -4,13 +4,19 @@
   "description": "",
   "main": "index.js",
   "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1"
+    "start": "./node_modules/nodemon/bin/nodemon.js src/app.js --exec 'npm run lint && node'",
+    "lint": "./node_modules/.bin/eslint **/*.js"
   },
   "keywords": [],
   "author": "",
   "license": "ISC",
   "dependencies": {
-    "eslint": "^7.16.0",
     "nodemon": "^2.0.6"
+  },
+  "devDependencies": {
+    "@typescript-eslint/eslint-plugin": "^4.11.0",
+    "@typescript-eslint/parser": "^4.11.0",
+    "eslint": "^7.16.0",
+    "eslint-plugin-vue": "^7.3.0"
   }
 }
diff --git a/server/src/app.js b/server/src/app.js
new file mode 100644
index 0000000000000000000000000000000000000000..819806c89e2b78314950c0c92f8941593347efd2
--- /dev/null
+++ b/server/src/app.js
@@ -0,0 +1,3 @@
+console.log('hello')
+
+