commit 143404cb465c4cb1c6a698c82e967e7a91e2ab45
Author: cagy <ml.cagy@seznam.cz>
Date:   Thu Jul 23 12:54:00 2020 +0200

    re #8149 - odstranění šablon 1 část

diff --git a/templetes/node_modules/.bin/acorn b/templetes/node_modules/.bin/acorn
deleted file mode 120000
index cf767603..00000000
--- a/templetes/node_modules/.bin/acorn
+++ /dev/null
@@ -1 +0,0 @@
-../acorn/bin/acorn
\ No newline at end of file
diff --git a/templetes/node_modules/acorn/bin/acorn b/templetes/node_modules/acorn/bin/acorn
deleted file mode 100755
index cf7df468..00000000
--- a/templetes/node_modules/acorn/bin/acorn
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env node
-'use strict';
-
-require('../dist/bin.js');
diff --git a/templetes/node_modules/acorn/dist/acorn.d.ts b/templetes/node_modules/acorn/dist/acorn.d.ts
deleted file mode 100644
index c68e2391..00000000
--- a/templetes/node_modules/acorn/dist/acorn.d.ts
+++ /dev/null
@@ -1,209 +0,0 @@
-export as namespace acorn
-export = acorn
-
-declare namespace acorn {
-  function parse(input: string, options?: Options): Node
-
-  function parseExpressionAt(input: string, pos?: number, options?: Options): Node
-
-  function tokenizer(input: string, options?: Options): {
-    getToken(): Token
-    [Symbol.iterator](): Iterator<Token>
-  }
-
-  interface Options {
-    ecmaVersion?: 3 | 5 | 6 | 7 | 8 | 9 | 10 | 2015 | 2016 | 2017 | 2018 | 2019
-    sourceType?: 'script' | 'module'
-    onInsertedSemicolon?: (lastTokEnd: number, lastTokEndLoc?: Position) => void
-    onTrailingComma?: (lastTokEnd: number, lastTokEndLoc?: Position) => void
-    allowReserved?: boolean | 'never'
-    allowReturnOutsideFunction?: boolean
-    allowImportExportEverywhere?: boolean
-    allowAwaitOutsideFunction?: boolean
-    allowHashBang?: boolean
-    locations?: boolean
-    onToken?: ((token: Token) => any) | Token[]
-    onComment?: ((
-      isBlock: boolean, text: string, start: number, end: number, startLoc?: Position,
-      endLoc?: Position
-    ) => void) | Comment[]
-    ranges?: boolean
-    program?: Node
-    sourceFile?: string
-    directSourceFile?: string
-    preserveParens?: boolean
-  }
-
-  class Parser {
-    constructor(options: Options, input: string, startPos?: number)
-    parse(this: Parser): Node
-    static parse(this: typeof Parser, input: string, options?: Options): Node
-    static parseExpressionAt(this: typeof Parser, input: string, pos: number, options?: Options): Node
-    static tokenizer(this: typeof Parser, input: string, options?: Options): {
-      getToken(): Token
-      [Symbol.iterator](): Iterator<Token>
-    }
-    static extend(this: typeof Parser, ...plugins: ((BaseParser: typeof Parser) => typeof Parser)[]): typeof Parser
-  }
-
-  interface Position { line: number; column: number; offset: number }
-
-  const defaultOptions: Options
-
-  function getLineInfo(input: string, offset: number): Position
-
-  class SourceLocation {
-    start: Position
-    end: Position
-    source?: string | null
-    constructor(p: Parser, start: Position, end: Position)
-  }
-
-  class Node {
-    type: string
-    start: number
-    end: number
-    loc?: SourceLocation
-    sourceFile?: string
-    range?: [number, number]
-    constructor(parser: Parser, pos: number, loc?: SourceLocation)
-  }
-
-  class TokenType {
-    label: string
-    keyword: string
-    beforeExpr: boolean
-    startsExpr: boolean
-    isLoop: boolean
-    isAssign: boolean
-    prefix: boolean
-    postfix: boolean
-    binop: number
-    updateContext?: (prevType: TokenType) => void
-    constructor(label: string, conf?: any)
-  }
-
-  const tokTypes: {
-    num: TokenType
-    regexp: TokenType
-    string: TokenType
-    name: TokenType
-    eof: TokenType
-    bracketL: TokenType
-    bracketR: TokenType
-    braceL: TokenType
-    braceR: TokenType
-    parenL: TokenType
-    parenR: TokenType
-    comma: TokenType
-    semi: TokenType
-    colon: TokenType
-    dot: TokenType
-    question: TokenType
-    arrow: TokenType
-    template: TokenType
-    ellipsis: TokenType
-    backQuote: TokenType
-    dollarBraceL: TokenType
-    eq: TokenType
-    assign: TokenType
-    incDec: TokenType
-    prefix: TokenType
-    logicalOR: TokenType
-    logicalAND: TokenType
-    bitwiseOR: TokenType
-    bitwiseXOR: TokenType
-    bitwiseAND: TokenType
-    equality: TokenType
-    relational: TokenType
-    bitShift: TokenType
-    plusMin: TokenType
-    modulo: TokenType
-    star: TokenType
-    slash: TokenType
-    starstar: TokenType
-    _break: TokenType
-    _case: TokenType
-    _catch: TokenType
-    _continue: TokenType
-    _debugger: TokenType
-    _default: TokenType
-    _do: TokenType
-    _else: TokenType
-    _finally: TokenType
-    _for: TokenType
-    _function: TokenType
-    _if: TokenType
-    _return: TokenType
-    _switch: TokenType
-    _throw: TokenType
-    _try: TokenType
-    _var: TokenType
-    _const: TokenType
-    _while: TokenType
-    _with: TokenType
-    _new: TokenType
-    _this: TokenType
-    _super: TokenType
-    _class: TokenType
-    _extends: TokenType
-    _export: TokenType
-    _import: TokenType
-    _null: TokenType
-    _true: TokenType
-    _false: TokenType
-    _in: TokenType
-    _instanceof: TokenType
-    _typeof: TokenType
-    _void: TokenType
-    _delete: TokenType
-  }
-
-  class TokContext {
-    constructor(token: string, isExpr: boolean, preserveSpace: boolean, override?: (p: Parser) => void)
-  }
-
-  const tokContexts: {
-    b_stat: TokContext
-    b_expr: TokContext
-    b_tmpl: TokContext
-    p_stat: TokContext
-    p_expr: TokContext
-    q_tmpl: TokContext
-    f_expr: TokContext
-  }
-
-  function isIdentifierStart(code: number, astral?: boolean): boolean
-
-  function isIdentifierChar(code: number, astral?: boolean): boolean
-
-  interface AbstractToken {
-  }
-
-  interface Comment extends AbstractToken {
-    type: string
-    value: string
-    start: number
-    end: number
-    loc?: SourceLocation
-    range?: [number, number]
-  }
-
-  class Token {
-    type: TokenType
-    value: any
-    start: number
-    end: number
-    loc?: SourceLocation
-    range?: [number, number]
-    constructor(p: Parser)
-  }
-
-  function isNewLine(code: number): boolean
-
-  const lineBreak: RegExp
-
-  const lineBreakG: RegExp
-
-  const version: string
-}
diff --git a/templetes/node_modules/acorn/dist/acorn.js b/templetes/node_modules/acorn/dist/acorn.js
deleted file mode 100644
index 52644f28..00000000
--- a/templetes/node_modules/acorn/dist/acorn.js
+++ /dev/null
@@ -1,4992 +0,0 @@
-(function (global, factory) {
-  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
-  typeof define === 'function' && define.amd ? define(['exports'], factory) :
-  (global = global || self, factory(global.acorn = {}));
-}(this, function (exports) { 'use strict';
-
-  // Reserved word lists for various dialects of the language
-
-  var reservedWords = {
-    3: "abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile",
-    5: "class enum extends super const export import",
-    6: "enum",
-    strict: "implements interface let package private protected public static yield",
-    strictBind: "eval arguments"
-  };
-
-  // And the keywords
-
-  var ecma5AndLessKeywords = "break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this";
-
-  var keywords = {
-    5: ecma5AndLessKeywords,
-    "5module": ecma5AndLessKeywords + " export import",
-    6: ecma5AndLessKeywords + " const class extends export import super"
-  };
-
-  var keywordRelationalOperator = /^in(stanceof)?$/;
-
-  // ## Character categories
-
-  // Big ugly regular expressions that match characters in the
-  // whitespace, identifier, and identifier-start categories. These
-  // are only applied when a character is found to actually have a
-  // code point above 128.
-  // Generated by `bin/generate-identifier-regex.js`.
-  var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7c6\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab67\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
-  var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1df9\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f";
-
-  var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
-  var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
-
-  nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
-
-  // These are a run-length and offset encoded representation of the
-  // >0xffff code points that are a valid part of identifiers. The
-  // offset starts at 0x10000, and each pair of numbers represents an
-  // offset to the next range, and then a size of the range. They were
-  // generated by bin/generate-identifier-regex.js
-
-  // eslint-disable-next-line comma-spacing
-  var astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,477,28,11,0,9,21,155,22,13,52,76,44,33,24,27,35,30,0,12,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,0,33,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,230,43,117,63,32,0,161,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,270,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,754,9486,286,50,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,2357,44,11,6,17,0,370,43,1301,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42710,42,4148,12,221,3,5761,15,7472,3104,541];
-
-  // eslint-disable-next-line comma-spacing
-  var astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,525,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,4,9,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,232,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1014,0,2,54,8,3,19723,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,419,13,1495,6,110,6,6,9,792487,239];
-
-  // This has a complexity linear to the value of the code. The
-  // assumption is that looking up astral identifier characters is
-  // rare.
-  function isInAstralSet(code, set) {
-    var pos = 0x10000;
-    for (var i = 0; i < set.length; i += 2) {
-      pos += set[i];
-      if (pos > code) { return false }
-      pos += set[i + 1];
-      if (pos >= code) { return true }
-    }
-  }
-
-  // Test whether a given character code starts an identifier.
-
-  function isIdentifierStart(code, astral) {
-    if (code < 65) { return code === 36 }
-    if (code < 91) { return true }
-    if (code < 97) { return code === 95 }
-    if (code < 123) { return true }
-    if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }
-    if (astral === false) { return false }
-    return isInAstralSet(code, astralIdentifierStartCodes)
-  }
-
-  // Test whether a given character is part of an identifier.
-
-  function isIdentifierChar(code, astral) {
-    if (code < 48) { return code === 36 }
-    if (code < 58) { return true }
-    if (code < 65) { return false }
-    if (code < 91) { return true }
-    if (code < 97) { return code === 95 }
-    if (code < 123) { return true }
-    if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }
-    if (astral === false) { return false }
-    return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)
-  }
-
-  // ## Token types
-
-  // The assignment of fine-grained, information-carrying type objects
-  // allows the tokenizer to store the information it has about a
-  // token in a way that is very cheap for the parser to look up.
-
-  // All token type variables start with an underscore, to make them
-  // easy to recognize.
-
-  // The `beforeExpr` property is used to disambiguate between regular
-  // expressions and divisions. It is set on all token types that can
-  // be followed by an expression (thus, a slash after them would be a
-  // regular expression).
-  //
-  // The `startsExpr` property is used to check if the token ends a
-  // `yield` expression. It is set on all token types that either can
-  // directly start an expression (like a quotation mark) or can
-  // continue an expression (like the body of a string).
-  //
-  // `isLoop` marks a keyword as starting a loop, which is important
-  // to know when parsing a label, in order to allow or disallow
-  // continue jumps to that label.
-
-  var TokenType = function TokenType(label, conf) {
-    if ( conf === void 0 ) conf = {};
-
-    this.label = label;
-    this.keyword = conf.keyword;
-    this.beforeExpr = !!conf.beforeExpr;
-    this.startsExpr = !!conf.startsExpr;
-    this.isLoop = !!conf.isLoop;
-    this.isAssign = !!conf.isAssign;
-    this.prefix = !!conf.prefix;
-    this.postfix = !!conf.postfix;
-    this.binop = conf.binop || null;
-    this.updateContext = null;
-  };
-
-  function binop(name, prec) {
-    return new TokenType(name, {beforeExpr: true, binop: prec})
-  }
-  var beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};
-
-  // Map keyword names to token types.
-
-  var keywords$1 = {};
-
-  // Succinct definitions of keyword token types
-  function kw(name, options) {
-    if ( options === void 0 ) options = {};
-
-    options.keyword = name;
-    return keywords$1[name] = new TokenType(name, options)
-  }
-
-  var types = {
-    num: new TokenType("num", startsExpr),
-    regexp: new TokenType("regexp", startsExpr),
-    string: new TokenType("string", startsExpr),
-    name: new TokenType("name", startsExpr),
-    eof: new TokenType("eof"),
-
-    // Punctuation token types.
-    bracketL: new TokenType("[", {beforeExpr: true, startsExpr: true}),
-    bracketR: new TokenType("]"),
-    braceL: new TokenType("{", {beforeExpr: true, startsExpr: true}),
-    braceR: new TokenType("}"),
-    parenL: new TokenType("(", {beforeExpr: true, startsExpr: true}),
-    parenR: new TokenType(")"),
-    comma: new TokenType(",", beforeExpr),
-    semi: new TokenType(";", beforeExpr),
-    colon: new TokenType(":", beforeExpr),
-    dot: new TokenType("."),
-    question: new TokenType("?", beforeExpr),
-    arrow: new TokenType("=>", beforeExpr),
-    template: new TokenType("template"),
-    invalidTemplate: new TokenType("invalidTemplate"),
-    ellipsis: new TokenType("...", beforeExpr),
-    backQuote: new TokenType("`", startsExpr),
-    dollarBraceL: new TokenType("${", {beforeExpr: true, startsExpr: true}),
-
-    // Operators. These carry several kinds of properties to help the
-    // parser use them properly (the presence of these properties is
-    // what categorizes them as operators).
-    //
-    // `binop`, when present, specifies that this operator is a binary
-    // operator, and will refer to its precedence.
-    //
-    // `prefix` and `postfix` mark the operator as a prefix or postfix
-    // unary operator.
-    //
-    // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as
-    // binary operators with a very low precedence, that should result
-    // in AssignmentExpression nodes.
-
-    eq: new TokenType("=", {beforeExpr: true, isAssign: true}),
-    assign: new TokenType("_=", {beforeExpr: true, isAssign: true}),
-    incDec: new TokenType("++/--", {prefix: true, postfix: true, startsExpr: true}),
-    prefix: new TokenType("!/~", {beforeExpr: true, prefix: true, startsExpr: true}),
-    logicalOR: binop("||", 1),
-    logicalAND: binop("&&", 2),
-    bitwiseOR: binop("|", 3),
-    bitwiseXOR: binop("^", 4),
-    bitwiseAND: binop("&", 5),
-    equality: binop("==/!=/===/!==", 6),
-    relational: binop("</>/<=/>=", 7),
-    bitShift: binop("<</>>/>>>", 8),
-    plusMin: new TokenType("+/-", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),
-    modulo: binop("%", 10),
-    star: binop("*", 10),
-    slash: binop("/", 10),
-    starstar: new TokenType("**", {beforeExpr: true}),
-
-    // Keyword token types.
-    _break: kw("break"),
-    _case: kw("case", beforeExpr),
-    _catch: kw("catch"),
-    _continue: kw("continue"),
-    _debugger: kw("debugger"),
-    _default: kw("default", beforeExpr),
-    _do: kw("do", {isLoop: true, beforeExpr: true}),
-    _else: kw("else", beforeExpr),
-    _finally: kw("finally"),
-    _for: kw("for", {isLoop: true}),
-    _function: kw("function", startsExpr),
-    _if: kw("if"),
-    _return: kw("return", beforeExpr),
-    _switch: kw("switch"),
-    _throw: kw("throw", beforeExpr),
-    _try: kw("try"),
-    _var: kw("var"),
-    _const: kw("const"),
-    _while: kw("while", {isLoop: true}),
-    _with: kw("with"),
-    _new: kw("new", {beforeExpr: true, startsExpr: true}),
-    _this: kw("this", startsExpr),
-    _super: kw("super", startsExpr),
-    _class: kw("class", startsExpr),
-    _extends: kw("extends", beforeExpr),
-    _export: kw("export"),
-    _import: kw("import", startsExpr),
-    _null: kw("null", startsExpr),
-    _true: kw("true", startsExpr),
-    _false: kw("false", startsExpr),
-    _in: kw("in", {beforeExpr: true, binop: 7}),
-    _instanceof: kw("instanceof", {beforeExpr: true, binop: 7}),
-    _typeof: kw("typeof", {beforeExpr: true, prefix: true, startsExpr: true}),
-    _void: kw("void", {beforeExpr: true, prefix: true, startsExpr: true}),
-    _delete: kw("delete", {beforeExpr: true, prefix: true, startsExpr: true})
-  };
-
-  // Matches a whole line break (where CRLF is considered a single
-  // line break). Used to count lines.
-
-  var lineBreak = /\r\n?|\n|\u2028|\u2029/;
-  var lineBreakG = new RegExp(lineBreak.source, "g");
-
-  function isNewLine(code, ecma2019String) {
-    return code === 10 || code === 13 || (!ecma2019String && (code === 0x2028 || code === 0x2029))
-  }
-
-  var nonASCIIwhitespace = /[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/;
-
-  var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g;
-
-  var ref = Object.prototype;
-  var hasOwnProperty = ref.hasOwnProperty;
-  var toString = ref.toString;
-
-  // Checks if an object has a property.
-
-  function has(obj, propName) {
-    return hasOwnProperty.call(obj, propName)
-  }
-
-  var isArray = Array.isArray || (function (obj) { return (
-    toString.call(obj) === "[object Array]"
-  ); });
-
-  function wordsRegexp(words) {
-    return new RegExp("^(?:" + words.replace(/ /g, "|") + ")$")
-  }
-
-  // These are used when `options.locations` is on, for the
-  // `startLoc` and `endLoc` properties.
-
-  var Position = function Position(line, col) {
-    this.line = line;
-    this.column = col;
-  };
-
-  Position.prototype.offset = function offset (n) {
-    return new Position(this.line, this.column + n)
-  };
-
-  var SourceLocation = function SourceLocation(p, start, end) {
-    this.start = start;
-    this.end = end;
-    if (p.sourceFile !== null) { this.source = p.sourceFile; }
-  };
-
-  // The `getLineInfo` function is mostly useful when the
-  // `locations` option is off (for performance reasons) and you
-  // want to find the line/column position for a given character
-  // offset. `input` should be the code string that the offset refers
-  // into.
-
-  function getLineInfo(input, offset) {
-    for (var line = 1, cur = 0;;) {
-      lineBreakG.lastIndex = cur;
-      var match = lineBreakG.exec(input);
-      if (match && match.index < offset) {
-        ++line;
-        cur = match.index + match[0].length;
-      } else {
-        return new Position(line, offset - cur)
-      }
-    }
-  }
-
-  // A second optional argument can be given to further configure
-  // the parser process. These options are recognized:
-
-  var defaultOptions = {
-    // `ecmaVersion` indicates the ECMAScript version to parse. Must be
-    // either 3, 5, 6 (2015), 7 (2016), 8 (2017), 9 (2018), or 10
-    // (2019). This influences support for strict mode, the set of
-    // reserved words, and support for new syntax features. The default
-    // is 9.
-    ecmaVersion: 9,
-    // `sourceType` indicates the mode the code should be parsed in.
-    // Can be either `"script"` or `"module"`. This influences global
-    // strict mode and parsing of `import` and `export` declarations.
-    sourceType: "script",
-    // `onInsertedSemicolon` can be a callback that will be called
-    // when a semicolon is automatically inserted. It will be passed
-    // the position of the comma as an offset, and if `locations` is
-    // enabled, it is given the location as a `{line, column}` object
-    // as second argument.
-    onInsertedSemicolon: null,
-    // `onTrailingComma` is similar to `onInsertedSemicolon`, but for
-    // trailing commas.
-    onTrailingComma: null,
-    // By default, reserved words are only enforced if ecmaVersion >= 5.
-    // Set `allowReserved` to a boolean value to explicitly turn this on
-    // an off. When this option has the value "never", reserved words
-    // and keywords can also not be used as property names.
-    allowReserved: null,
-    // When enabled, a return at the top level is not considered an
-    // error.
-    allowReturnOutsideFunction: false,
-    // When enabled, import/export statements are not constrained to
-    // appearing at the top of the program.
-    allowImportExportEverywhere: false,
-    // When enabled, await identifiers are allowed to appear at the top-level scope,
-    // but they are still not allowed in non-async functions.
-    allowAwaitOutsideFunction: false,
-    // When enabled, hashbang directive in the beginning of file
-    // is allowed and treated as a line comment.
-    allowHashBang: false,
-    // When `locations` is on, `loc` properties holding objects with
-    // `start` and `end` properties in `{line, column}` form (with
-    // line being 1-based and column 0-based) will be attached to the
-    // nodes.
-    locations: false,
-    // A function can be passed as `onToken` option, which will
-    // cause Acorn to call that function with object in the same
-    // format as tokens returned from `tokenizer().getToken()`. Note
-    // that you are not allowed to call the parser from the
-    // callback—that will corrupt its internal state.
-    onToken: null,
-    // A function can be passed as `onComment` option, which will
-    // cause Acorn to call that function with `(block, text, start,
-    // end)` parameters whenever a comment is skipped. `block` is a
-    // boolean indicating whether this is a block (`/* */`) comment,
-    // `text` is the content of the comment, and `start` and `end` are
-    // character offsets that denote the start and end of the comment.
-    // When the `locations` option is on, two more parameters are
-    // passed, the full `{line, column}` locations of the start and
-    // end of the comments. Note that you are not allowed to call the
-    // parser from the callback—that will corrupt its internal state.
-    onComment: null,
-    // Nodes have their start and end characters offsets recorded in
-    // `start` and `end` properties (directly on the node, rather than
-    // the `loc` object, which holds line/column data. To also add a
-    // [semi-standardized][range] `range` property holding a `[start,
-    // end]` array with the same numbers, set the `ranges` option to
-    // `true`.
-    //
-    // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678
-    ranges: false,
-    // It is possible to parse multiple files into a single AST by
-    // passing the tree produced by parsing the first file as
-    // `program` option in subsequent parses. This will add the
-    // toplevel forms of the parsed file to the `Program` (top) node
-    // of an existing parse tree.
-    program: null,
-    // When `locations` is on, you can pass this to record the source
-    // file in every node's `loc` object.
-    sourceFile: null,
-    // This value, if given, is stored in every node, whether
-    // `locations` is on or off.
-    directSourceFile: null,
-    // When enabled, parenthesized expressions are represented by
-    // (non-standard) ParenthesizedExpression nodes
-    preserveParens: false
-  };
-
-  // Interpret and default an options object
-
-  function getOptions(opts) {
-    var options = {};
-
-    for (var opt in defaultOptions)
-      { options[opt] = opts && has(opts, opt) ? opts[opt] : defaultOptions[opt]; }
-
-    if (options.ecmaVersion >= 2015)
-      { options.ecmaVersion -= 2009; }
-
-    if (options.allowReserved == null)
-      { options.allowReserved = options.ecmaVersion < 5; }
-
-    if (isArray(options.onToken)) {
-      var tokens = options.onToken;
-      options.onToken = function (token) { return tokens.push(token); };
-    }
-    if (isArray(options.onComment))
-      { options.onComment = pushComment(options, options.onComment); }
-
-    return options
-  }
-
-  function pushComment(options, array) {
-    return function(block, text, start, end, startLoc, endLoc) {
-      var comment = {
-        type: block ? "Block" : "Line",
-        value: text,
-        start: start,
-        end: end
-      };
-      if (options.locations)
-        { comment.loc = new SourceLocation(this, startLoc, endLoc); }
-      if (options.ranges)
-        { comment.range = [start, end]; }
-      array.push(comment);
-    }
-  }
-
-  // Each scope gets a bitset that may contain these flags
-  var
-      SCOPE_TOP = 1,
-      SCOPE_FUNCTION = 2,
-      SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION,
-      SCOPE_ASYNC = 4,
-      SCOPE_GENERATOR = 8,
-      SCOPE_ARROW = 16,
-      SCOPE_SIMPLE_CATCH = 32,
-      SCOPE_SUPER = 64,
-      SCOPE_DIRECT_SUPER = 128;
-
-  function functionFlags(async, generator) {
-    return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)
-  }
-
-  // Used in checkLVal and declareName to determine the type of a binding
-  var
-      BIND_NONE = 0, // Not a binding
-      BIND_VAR = 1, // Var-style binding
-      BIND_LEXICAL = 2, // Let- or const-style binding
-      BIND_FUNCTION = 3, // Function declaration
-      BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding
-      BIND_OUTSIDE = 5; // Special case for function names as bound inside the function
-
-  var Parser = function Parser(options, input, startPos) {
-    this.options = options = getOptions(options);
-    this.sourceFile = options.sourceFile;
-    this.keywords = wordsRegexp(keywords[options.ecmaVersion >= 6 ? 6 : options.sourceType === "module" ? "5module" : 5]);
-    var reserved = "";
-    if (options.allowReserved !== true) {
-      for (var v = options.ecmaVersion;; v--)
-        { if (reserved = reservedWords[v]) { break } }
-      if (options.sourceType === "module") { reserved += " await"; }
-    }
-    this.reservedWords = wordsRegexp(reserved);
-    var reservedStrict = (reserved ? reserved + " " : "") + reservedWords.strict;
-    this.reservedWordsStrict = wordsRegexp(reservedStrict);
-    this.reservedWordsStrictBind = wordsRegexp(reservedStrict + " " + reservedWords.strictBind);
-    this.input = String(input);
-
-    // Used to signal to callers of `readWord1` whether the word
-    // contained any escape sequences. This is needed because words with
-    // escape sequences must not be interpreted as keywords.
-    this.containsEsc = false;
-
-    // Set up token state
-
-    // The current position of the tokenizer in the input.
-    if (startPos) {
-      this.pos = startPos;
-      this.lineStart = this.input.lastIndexOf("\n", startPos - 1) + 1;
-      this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;
-    } else {
-      this.pos = this.lineStart = 0;
-      this.curLine = 1;
-    }
-
-    // Properties of the current token:
-    // Its type
-    this.type = types.eof;
-    // For tokens that include more information than their type, the value
-    this.value = null;
-    // Its start and end offset
-    this.start = this.end = this.pos;
-    // And, if locations are used, the {line, column} object
-    // corresponding to those offsets
-    this.startLoc = this.endLoc = this.curPosition();
-
-    // Position information for the previous token
-    this.lastTokEndLoc = this.lastTokStartLoc = null;
-    this.lastTokStart = this.lastTokEnd = this.pos;
-
-    // The context stack is used to superficially track syntactic
-    // context to predict whether a regular expression is allowed in a
-    // given position.
-    this.context = this.initialContext();
-    this.exprAllowed = true;
-
-    // Figure out if it's a module code.
-    this.inModule = options.sourceType === "module";
-    this.strict = this.inModule || this.strictDirective(this.pos);
-
-    // Used to signify the start of a potential arrow function
-    this.potentialArrowAt = -1;
-
-    // Positions to delayed-check that yield/await does not exist in default parameters.
-    this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;
-    // Labels in scope.
-    this.labels = [];
-    // Thus-far undefined exports.
-    this.undefinedExports = {};
-
-    // If enabled, skip leading hashbang line.
-    if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === "#!")
-      { this.skipLineComment(2); }
-
-    // Scope tracking for duplicate variable names (see scope.js)
-    this.scopeStack = [];
-    this.enterScope(SCOPE_TOP);
-
-    // For RegExp validation
-    this.regexpState = null;
-  };
-
-  var prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true } };
-
-  Parser.prototype.parse = function parse () {
-    var node = this.options.program || this.startNode();
-    this.nextToken();
-    return this.parseTopLevel(node)
-  };
-
-  prototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };
-  prototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 };
-  prototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 };
-  prototypeAccessors.allowSuper.get = function () { return (this.currentThisScope().flags & SCOPE_SUPER) > 0 };
-  prototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };
-  prototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };
-
-  // Switch to a getter for 7.0.0.
-  Parser.prototype.inNonArrowFunction = function inNonArrowFunction () { return (this.currentThisScope().flags & SCOPE_FUNCTION) > 0 };
-
-  Parser.extend = function extend () {
-      var plugins = [], len = arguments.length;
-      while ( len-- ) plugins[ len ] = arguments[ len ];
-
-    var cls = this;
-    for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }
-    return cls
-  };
-
-  Parser.parse = function parse (input, options) {
-    return new this(options, input).parse()
-  };
-
-  Parser.parseExpressionAt = function parseExpressionAt (input, pos, options) {
-    var parser = new this(options, input, pos);
-    parser.nextToken();
-    return parser.parseExpression()
-  };
-
-  Parser.tokenizer = function tokenizer (input, options) {
-    return new this(options, input)
-  };
-
-  Object.defineProperties( Parser.prototype, prototypeAccessors );
-
-  var pp = Parser.prototype;
-
-  // ## Parser utilities
-
-  var literal = /^(?:'((?:\\.|[^'])*?)'|"((?:\\.|[^"])*?)")/;
-  pp.strictDirective = function(start) {
-    for (;;) {
-      // Try to find string literal.
-      skipWhiteSpace.lastIndex = start;
-      start += skipWhiteSpace.exec(this.input)[0].length;
-      var match = literal.exec(this.input.slice(start));
-      if (!match) { return false }
-      if ((match[1] || match[2]) === "use strict") { return true }
-      start += match[0].length;
-
-      // Skip semicolon, if any.
-      skipWhiteSpace.lastIndex = start;
-      start += skipWhiteSpace.exec(this.input)[0].length;
-      if (this.input[start] === ";")
-        { start++; }
-    }
-  };
-
-  // Predicate that tests whether the next token is of the given
-  // type, and if yes, consumes it as a side effect.
-
-  pp.eat = function(type) {
-    if (this.type === type) {
-      this.next();
-      return true
-    } else {
-      return false
-    }
-  };
-
-  // Tests whether parsed token is a contextual keyword.
-
-  pp.isContextual = function(name) {
-    return this.type === types.name && this.value === name && !this.containsEsc
-  };
-
-  // Consumes contextual keyword if possible.
-
-  pp.eatContextual = function(name) {
-    if (!this.isContextual(name)) { return false }
-    this.next();
-    return true
-  };
-
-  // Asserts that following token is given contextual keyword.
-
-  pp.expectContextual = function(name) {
-    if (!this.eatContextual(name)) { this.unexpected(); }
-  };
-
-  // Test whether a semicolon can be inserted at the current position.
-
-  pp.canInsertSemicolon = function() {
-    return this.type === types.eof ||
-      this.type === types.braceR ||
-      lineBreak.test(this.input.slice(this.lastTokEnd, this.start))
-  };
-
-  pp.insertSemicolon = function() {
-    if (this.canInsertSemicolon()) {
-      if (this.options.onInsertedSemicolon)
-        { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }
-      return true
-    }
-  };
-
-  // Consume a semicolon, or, failing that, see if we are allowed to
-  // pretend that there is a semicolon at this position.
-
-  pp.semicolon = function() {
-    if (!this.eat(types.semi) && !this.insertSemicolon()) { this.unexpected(); }
-  };
-
-  pp.afterTrailingComma = function(tokType, notNext) {
-    if (this.type === tokType) {
-      if (this.options.onTrailingComma)
-        { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }
-      if (!notNext)
-        { this.next(); }
-      return true
-    }
-  };
-
-  // Expect a token of a given type. If found, consume it, otherwise,
-  // raise an unexpected token error.
-
-  pp.expect = function(type) {
-    this.eat(type) || this.unexpected();
-  };
-
-  // Raise an unexpected token error.
-
-  pp.unexpected = function(pos) {
-    this.raise(pos != null ? pos : this.start, "Unexpected token");
-  };
-
-  function DestructuringErrors() {
-    this.shorthandAssign =
-    this.trailingComma =
-    this.parenthesizedAssign =
-    this.parenthesizedBind =
-    this.doubleProto =
-      -1;
-  }
-
-  pp.checkPatternErrors = function(refDestructuringErrors, isAssign) {
-    if (!refDestructuringErrors) { return }
-    if (refDestructuringErrors.trailingComma > -1)
-      { this.raiseRecoverable(refDestructuringErrors.trailingComma, "Comma is not permitted after the rest element"); }
-    var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;
-    if (parens > -1) { this.raiseRecoverable(parens, "Parenthesized pattern"); }
-  };
-
-  pp.checkExpressionErrors = function(refDestructuringErrors, andThrow) {
-    if (!refDestructuringErrors) { return false }
-    var shorthandAssign = refDestructuringErrors.shorthandAssign;
-    var doubleProto = refDestructuringErrors.doubleProto;
-    if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }
-    if (shorthandAssign >= 0)
-      { this.raise(shorthandAssign, "Shorthand property assignments are valid only in destructuring patterns"); }
-    if (doubleProto >= 0)
-      { this.raiseRecoverable(doubleProto, "Redefinition of __proto__ property"); }
-  };
-
-  pp.checkYieldAwaitInDefaultParams = function() {
-    if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))
-      { this.raise(this.yieldPos, "Yield expression cannot be a default value"); }
-    if (this.awaitPos)
-      { this.raise(this.awaitPos, "Await expression cannot be a default value"); }
-  };
-
-  pp.isSimpleAssignTarget = function(expr) {
-    if (expr.type === "ParenthesizedExpression")
-      { return this.isSimpleAssignTarget(expr.expression) }
-    return expr.type === "Identifier" || expr.type === "MemberExpression"
-  };
-
-  var pp$1 = Parser.prototype;
-
-  // ### Statement parsing
-
-  // Parse a program. Initializes the parser, reads any number of
-  // statements, and wraps them in a Program node.  Optionally takes a
-  // `program` argument.  If present, the statements will be appended
-  // to its body instead of creating a new node.
-
-  pp$1.parseTopLevel = function(node) {
-    var exports = {};
-    if (!node.body) { node.body = []; }
-    while (this.type !== types.eof) {
-      var stmt = this.parseStatement(null, true, exports);
-      node.body.push(stmt);
-    }
-    if (this.inModule)
-      { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)
-        {
-          var name = list[i];
-
-          this.raiseRecoverable(this.undefinedExports[name].start, ("Export '" + name + "' is not defined"));
-        } }
-    this.adaptDirectivePrologue(node.body);
-    this.next();
-    node.sourceType = this.options.sourceType;
-    return this.finishNode(node, "Program")
-  };
-
-  var loopLabel = {kind: "loop"}, switchLabel = {kind: "switch"};
-
-  pp$1.isLet = function(context) {
-    if (this.options.ecmaVersion < 6 || !this.isContextual("let")) { return false }
-    skipWhiteSpace.lastIndex = this.pos;
-    var skip = skipWhiteSpace.exec(this.input);
-    var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);
-    // For ambiguous cases, determine if a LexicalDeclaration (or only a
-    // Statement) is allowed here. If context is not empty then only a Statement
-    // is allowed. However, `let [` is an explicit negative lookahead for
-    // ExpressionStatement, so special-case it first.
-    if (nextCh === 91) { return true } // '['
-    if (context) { return false }
-
-    if (nextCh === 123) { return true } // '{'
-    if (isIdentifierStart(nextCh, true)) {
-      var pos = next + 1;
-      while (isIdentifierChar(this.input.charCodeAt(pos), true)) { ++pos; }
-      var ident = this.input.slice(next, pos);
-      if (!keywordRelationalOperator.test(ident)) { return true }
-    }
-    return false
-  };
-
-  // check 'async [no LineTerminator here] function'
-  // - 'async /*foo*/ function' is OK.
-  // - 'async /*\n*/ function' is invalid.
-  pp$1.isAsyncFunction = function() {
-    if (this.options.ecmaVersion < 8 || !this.isContextual("async"))
-      { return false }
-
-    skipWhiteSpace.lastIndex = this.pos;
-    var skip = skipWhiteSpace.exec(this.input);
-    var next = this.pos + skip[0].length;
-    return !lineBreak.test(this.input.slice(this.pos, next)) &&
-      this.input.slice(next, next + 8) === "function" &&
-      (next + 8 === this.input.length || !isIdentifierChar(this.input.charAt(next + 8)))
-  };
-
-  // Parse a single statement.
-  //
-  // If expecting a statement and finding a slash operator, parse a
-  // regular expression literal. This is to handle cases like
-  // `if (foo) /blah/.exec(foo)`, where looking at the previous token
-  // does not help.
-
-  pp$1.parseStatement = function(context, topLevel, exports) {
-    var starttype = this.type, node = this.startNode(), kind;
-
-    if (this.isLet(context)) {
-      starttype = types._var;
-      kind = "let";
-    }
-
-    // Most types of statements are recognized by the keyword they
-    // start with. Many are trivial to parse, some require a bit of
-    // complexity.
-
-    switch (starttype) {
-    case types._break: case types._continue: return this.parseBreakContinueStatement(node, starttype.keyword)
-    case types._debugger: return this.parseDebuggerStatement(node)
-    case types._do: return this.parseDoStatement(node)
-    case types._for: return this.parseForStatement(node)
-    case types._function:
-      // Function as sole body of either an if statement or a labeled statement
-      // works, but not when it is part of a labeled statement that is the sole
-      // body of an if statement.
-      if ((context && (this.strict || context !== "if" && context !== "label")) && this.options.ecmaVersion >= 6) { this.unexpected(); }
-      return this.parseFunctionStatement(node, false, !context)
-    case types._class:
-      if (context) { this.unexpected(); }
-      return this.parseClass(node, true)
-    case types._if: return this.parseIfStatement(node)
-    case types._return: return this.parseReturnStatement(node)
-    case types._switch: return this.parseSwitchStatement(node)
-    case types._throw: return this.parseThrowStatement(node)
-    case types._try: return this.parseTryStatement(node)
-    case types._const: case types._var:
-      kind = kind || this.value;
-      if (context && kind !== "var") { this.unexpected(); }
-      return this.parseVarStatement(node, kind)
-    case types._while: return this.parseWhileStatement(node)
-    case types._with: return this.parseWithStatement(node)
-    case types.braceL: return this.parseBlock(true, node)
-    case types.semi: return this.parseEmptyStatement(node)
-    case types._export:
-    case types._import:
-      if (this.options.ecmaVersion > 10 && starttype === types._import) {
-        skipWhiteSpace.lastIndex = this.pos;
-        var skip = skipWhiteSpace.exec(this.input);
-        var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);
-        if (nextCh === 40) // '('
-          { return this.parseExpressionStatement(node, this.parseExpression()) }
-      }
-
-      if (!this.options.allowImportExportEverywhere) {
-        if (!topLevel)
-          { this.raise(this.start, "'import' and 'export' may only appear at the top level"); }
-        if (!this.inModule)
-          { this.raise(this.start, "'import' and 'export' may appear only with 'sourceType: module'"); }
-      }
-      return starttype === types._import ? this.parseImport(node) : this.parseExport(node, exports)
-
-      // If the statement does not start with a statement keyword or a
-      // brace, it's an ExpressionStatement or LabeledStatement. We
-      // simply start parsing an expression, and afterwards, if the
-      // next token is a colon and the expression was a simple
-      // Identifier node, we switch to interpreting it as a label.
-    default:
-      if (this.isAsyncFunction()) {
-        if (context) { this.unexpected(); }
-        this.next();
-        return this.parseFunctionStatement(node, true, !context)
-      }
-
-      var maybeName = this.value, expr = this.parseExpression();
-      if (starttype === types.name && expr.type === "Identifier" && this.eat(types.colon))
-        { return this.parseLabeledStatement(node, maybeName, expr, context) }
-      else { return this.parseExpressionStatement(node, expr) }
-    }
-  };
-
-  pp$1.parseBreakContinueStatement = function(node, keyword) {
-    var isBreak = keyword === "break";
-    this.next();
-    if (this.eat(types.semi) || this.insertSemicolon()) { node.label = null; }
-    else if (this.type !== types.name) { this.unexpected(); }
-    else {
-      node.label = this.parseIdent();
-      this.semicolon();
-    }
-
-    // Verify that there is an actual destination to break or
-    // continue to.
-    var i = 0;
-    for (; i < this.labels.length; ++i) {
-      var lab = this.labels[i];
-      if (node.label == null || lab.name === node.label.name) {
-        if (lab.kind != null && (isBreak || lab.kind === "loop")) { break }
-        if (node.label && isBreak) { break }
-      }
-    }
-    if (i === this.labels.length) { this.raise(node.start, "Unsyntactic " + keyword); }
-    return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement")
-  };
-
-  pp$1.parseDebuggerStatement = function(node) {
-    this.next();
-    this.semicolon();
-    return this.finishNode(node, "DebuggerStatement")
-  };
-
-  pp$1.parseDoStatement = function(node) {
-    this.next();
-    this.labels.push(loopLabel);
-    node.body = this.parseStatement("do");
-    this.labels.pop();
-    this.expect(types._while);
-    node.test = this.parseParenExpression();
-    if (this.options.ecmaVersion >= 6)
-      { this.eat(types.semi); }
-    else
-      { this.semicolon(); }
-    return this.finishNode(node, "DoWhileStatement")
-  };
-
-  // Disambiguating between a `for` and a `for`/`in` or `for`/`of`
-  // loop is non-trivial. Basically, we have to parse the init `var`
-  // statement or expression, disallowing the `in` operator (see
-  // the second parameter to `parseExpression`), and then check
-  // whether the next token is `in` or `of`. When there is no init
-  // part (semicolon immediately after the opening parenthesis), it
-  // is a regular `for` loop.
-
-  pp$1.parseForStatement = function(node) {
-    this.next();
-    var awaitAt = (this.options.ecmaVersion >= 9 && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction)) && this.eatContextual("await")) ? this.lastTokStart : -1;
-    this.labels.push(loopLabel);
-    this.enterScope(0);
-    this.expect(types.parenL);
-    if (this.type === types.semi) {
-      if (awaitAt > -1) { this.unexpected(awaitAt); }
-      return this.parseFor(node, null)
-    }
-    var isLet = this.isLet();
-    if (this.type === types._var || this.type === types._const || isLet) {
-      var init$1 = this.startNode(), kind = isLet ? "let" : this.value;
-      this.next();
-      this.parseVar(init$1, true, kind);
-      this.finishNode(init$1, "VariableDeclaration");
-      if ((this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) && init$1.declarations.length === 1) {
-        if (this.options.ecmaVersion >= 9) {
-          if (this.type === types._in) {
-            if (awaitAt > -1) { this.unexpected(awaitAt); }
-          } else { node.await = awaitAt > -1; }
-        }
-        return this.parseForIn(node, init$1)
-      }
-      if (awaitAt > -1) { this.unexpected(awaitAt); }
-      return this.parseFor(node, init$1)
-    }
-    var refDestructuringErrors = new DestructuringErrors;
-    var init = this.parseExpression(true, refDestructuringErrors);
-    if (this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) {
-      if (this.options.ecmaVersion >= 9) {
-        if (this.type === types._in) {
-          if (awaitAt > -1) { this.unexpected(awaitAt); }
-        } else { node.await = awaitAt > -1; }
-      }
-      this.toAssignable(init, false, refDestructuringErrors);
-      this.checkLVal(init);
-      return this.parseForIn(node, init)
-    } else {
-      this.checkExpressionErrors(refDestructuringErrors, true);
-    }
-    if (awaitAt > -1) { this.unexpected(awaitAt); }
-    return this.parseFor(node, init)
-  };
-
-  pp$1.parseFunctionStatement = function(node, isAsync, declarationPosition) {
-    this.next();
-    return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)
-  };
-
-  pp$1.parseIfStatement = function(node) {
-    this.next();
-    node.test = this.parseParenExpression();
-    // allow function declarations in branches, but only in non-strict mode
-    node.consequent = this.parseStatement("if");
-    node.alternate = this.eat(types._else) ? this.parseStatement("if") : null;
-    return this.finishNode(node, "IfStatement")
-  };
-
-  pp$1.parseReturnStatement = function(node) {
-    if (!this.inFunction && !this.options.allowReturnOutsideFunction)
-      { this.raise(this.start, "'return' outside of function"); }
-    this.next();
-
-    // In `return` (and `break`/`continue`), the keywords with
-    // optional arguments, we eagerly look for a semicolon or the
-    // possibility to insert one.
-
-    if (this.eat(types.semi) || this.insertSemicolon()) { node.argument = null; }
-    else { node.argument = this.parseExpression(); this.semicolon(); }
-    return this.finishNode(node, "ReturnStatement")
-  };
-
-  pp$1.parseSwitchStatement = function(node) {
-    this.next();
-    node.discriminant = this.parseParenExpression();
-    node.cases = [];
-    this.expect(types.braceL);
-    this.labels.push(switchLabel);
-    this.enterScope(0);
-
-    // Statements under must be grouped (by label) in SwitchCase
-    // nodes. `cur` is used to keep the node that we are currently
-    // adding statements to.
-
-    var cur;
-    for (var sawDefault = false; this.type !== types.braceR;) {
-      if (this.type === types._case || this.type === types._default) {
-        var isCase = this.type === types._case;
-        if (cur) { this.finishNode(cur, "SwitchCase"); }
-        node.cases.push(cur = this.startNode());
-        cur.consequent = [];
-        this.next();
-        if (isCase) {
-          cur.test = this.parseExpression();
-        } else {
-          if (sawDefault) { this.raiseRecoverable(this.lastTokStart, "Multiple default clauses"); }
-          sawDefault = true;
-          cur.test = null;
-        }
-        this.expect(types.colon);
-      } else {
-        if (!cur) { this.unexpected(); }
-        cur.consequent.push(this.parseStatement(null));
-      }
-    }
-    this.exitScope();
-    if (cur) { this.finishNode(cur, "SwitchCase"); }
-    this.next(); // Closing brace
-    this.labels.pop();
-    return this.finishNode(node, "SwitchStatement")
-  };
-
-  pp$1.parseThrowStatement = function(node) {
-    this.next();
-    if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))
-      { this.raise(this.lastTokEnd, "Illegal newline after throw"); }
-    node.argument = this.parseExpression();
-    this.semicolon();
-    return this.finishNode(node, "ThrowStatement")
-  };
-
-  // Reused empty array added for node fields that are always empty.
-
-  var empty = [];
-
-  pp$1.parseTryStatement = function(node) {
-    this.next();
-    node.block = this.parseBlock();
-    node.handler = null;
-    if (this.type === types._catch) {
-      var clause = this.startNode();
-      this.next();
-      if (this.eat(types.parenL)) {
-        clause.param = this.parseBindingAtom();
-        var simple = clause.param.type === "Identifier";
-        this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);
-        this.checkLVal(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);
-        this.expect(types.parenR);
-      } else {
-        if (this.options.ecmaVersion < 10) { this.unexpected(); }
-        clause.param = null;
-        this.enterScope(0);
-      }
-      clause.body = this.parseBlock(false);
-      this.exitScope();
-      node.handler = this.finishNode(clause, "CatchClause");
-    }
-    node.finalizer = this.eat(types._finally) ? this.parseBlock() : null;
-    if (!node.handler && !node.finalizer)
-      { this.raise(node.start, "Missing catch or finally clause"); }
-    return this.finishNode(node, "TryStatement")
-  };
-
-  pp$1.parseVarStatement = function(node, kind) {
-    this.next();
-    this.parseVar(node, false, kind);
-    this.semicolon();
-    return this.finishNode(node, "VariableDeclaration")
-  };
-
-  pp$1.parseWhileStatement = function(node) {
-    this.next();
-    node.test = this.parseParenExpression();
-    this.labels.push(loopLabel);
-    node.body = this.parseStatement("while");
-    this.labels.pop();
-    return this.finishNode(node, "WhileStatement")
-  };
-
-  pp$1.parseWithStatement = function(node) {
-    if (this.strict) { this.raise(this.start, "'with' in strict mode"); }
-    this.next();
-    node.object = this.parseParenExpression();
-    node.body = this.parseStatement("with");
-    return this.finishNode(node, "WithStatement")
-  };
-
-  pp$1.parseEmptyStatement = function(node) {
-    this.next();
-    return this.finishNode(node, "EmptyStatement")
-  };
-
-  pp$1.parseLabeledStatement = function(node, maybeName, expr, context) {
-    for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)
-      {
-      var label = list[i$1];
-
-      if (label.name === maybeName)
-        { this.raise(expr.start, "Label '" + maybeName + "' is already declared");
-    } }
-    var kind = this.type.isLoop ? "loop" : this.type === types._switch ? "switch" : null;
-    for (var i = this.labels.length - 1; i >= 0; i--) {
-      var label$1 = this.labels[i];
-      if (label$1.statementStart === node.start) {
-        // Update information about previous labels on this node
-        label$1.statementStart = this.start;
-        label$1.kind = kind;
-      } else { break }
-    }
-    this.labels.push({name: maybeName, kind: kind, statementStart: this.start});
-    node.body = this.parseStatement(context ? context.indexOf("label") === -1 ? context + "label" : context : "label");
-    this.labels.pop();
-    node.label = expr;
-    return this.finishNode(node, "LabeledStatement")
-  };
-
-  pp$1.parseExpressionStatement = function(node, expr) {
-    node.expression = expr;
-    this.semicolon();
-    return this.finishNode(node, "ExpressionStatement")
-  };
-
-  // Parse a semicolon-enclosed block of statements, handling `"use
-  // strict"` declarations when `allowStrict` is true (used for
-  // function bodies).
-
-  pp$1.parseBlock = function(createNewLexicalScope, node) {
-    if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;
-    if ( node === void 0 ) node = this.startNode();
-
-    node.body = [];
-    this.expect(types.braceL);
-    if (createNewLexicalScope) { this.enterScope(0); }
-    while (!this.eat(types.braceR)) {
-      var stmt = this.parseStatement(null);
-      node.body.push(stmt);
-    }
-    if (createNewLexicalScope) { this.exitScope(); }
-    return this.finishNode(node, "BlockStatement")
-  };
-
-  // Parse a regular `for` loop. The disambiguation code in
-  // `parseStatement` will already have parsed the init statement or
-  // expression.
-
-  pp$1.parseFor = function(node, init) {
-    node.init = init;
-    this.expect(types.semi);
-    node.test = this.type === types.semi ? null : this.parseExpression();
-    this.expect(types.semi);
-    node.update = this.type === types.parenR ? null : this.parseExpression();
-    this.expect(types.parenR);
-    node.body = this.parseStatement("for");
-    this.exitScope();
-    this.labels.pop();
-    return this.finishNode(node, "ForStatement")
-  };
-
-  // Parse a `for`/`in` and `for`/`of` loop, which are almost
-  // same from parser's perspective.
-
-  pp$1.parseForIn = function(node, init) {
-    var isForIn = this.type === types._in;
-    this.next();
-
-    if (
-      init.type === "VariableDeclaration" &&
-      init.declarations[0].init != null &&
-      (
-        !isForIn ||
-        this.options.ecmaVersion < 8 ||
-        this.strict ||
-        init.kind !== "var" ||
-        init.declarations[0].id.type !== "Identifier"
-      )
-    ) {
-      this.raise(
-        init.start,
-        ((isForIn ? "for-in" : "for-of") + " loop variable declaration may not have an initializer")
-      );
-    } else if (init.type === "AssignmentPattern") {
-      this.raise(init.start, "Invalid left-hand side in for-loop");
-    }
-    node.left = init;
-    node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();
-    this.expect(types.parenR);
-    node.body = this.parseStatement("for");
-    this.exitScope();
-    this.labels.pop();
-    return this.finishNode(node, isForIn ? "ForInStatement" : "ForOfStatement")
-  };
-
-  // Parse a list of variable declarations.
-
-  pp$1.parseVar = function(node, isFor, kind) {
-    node.declarations = [];
-    node.kind = kind;
-    for (;;) {
-      var decl = this.startNode();
-      this.parseVarId(decl, kind);
-      if (this.eat(types.eq)) {
-        decl.init = this.parseMaybeAssign(isFor);
-      } else if (kind === "const" && !(this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of")))) {
-        this.unexpected();
-      } else if (decl.id.type !== "Identifier" && !(isFor && (this.type === types._in || this.isContextual("of")))) {
-        this.raise(this.lastTokEnd, "Complex binding patterns require an initialization value");
-      } else {
-        decl.init = null;
-      }
-      node.declarations.push(this.finishNode(decl, "VariableDeclarator"));
-      if (!this.eat(types.comma)) { break }
-    }
-    return node
-  };
-
-  pp$1.parseVarId = function(decl, kind) {
-    decl.id = this.parseBindingAtom();
-    this.checkLVal(decl.id, kind === "var" ? BIND_VAR : BIND_LEXICAL, false);
-  };
-
-  var FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;
-
-  // Parse a function declaration or literal (depending on the
-  // `statement & FUNC_STATEMENT`).
-
-  // Remove `allowExpressionBody` for 7.0.0, as it is only called with false
-  pp$1.parseFunction = function(node, statement, allowExpressionBody, isAsync) {
-    this.initFunction(node);
-    if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {
-      if (this.type === types.star && (statement & FUNC_HANGING_STATEMENT))
-        { this.unexpected(); }
-      node.generator = this.eat(types.star);
-    }
-    if (this.options.ecmaVersion >= 8)
-      { node.async = !!isAsync; }
-
-    if (statement & FUNC_STATEMENT) {
-      node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types.name ? null : this.parseIdent();
-      if (node.id && !(statement & FUNC_HANGING_STATEMENT))
-        // If it is a regular function declaration in sloppy mode, then it is
-        // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding
-        // mode depends on properties of the current scope (see
-        // treatFunctionsAsVar).
-        { this.checkLVal(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }
-    }
-
-    var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-    this.yieldPos = 0;
-    this.awaitPos = 0;
-    this.awaitIdentPos = 0;
-    this.enterScope(functionFlags(node.async, node.generator));
-
-    if (!(statement & FUNC_STATEMENT))
-      { node.id = this.type === types.name ? this.parseIdent() : null; }
-
-    this.parseFunctionParams(node);
-    this.parseFunctionBody(node, allowExpressionBody, false);
-
-    this.yieldPos = oldYieldPos;
-    this.awaitPos = oldAwaitPos;
-    this.awaitIdentPos = oldAwaitIdentPos;
-    return this.finishNode(node, (statement & FUNC_STATEMENT) ? "FunctionDeclaration" : "FunctionExpression")
-  };
-
-  pp$1.parseFunctionParams = function(node) {
-    this.expect(types.parenL);
-    node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);
-    this.checkYieldAwaitInDefaultParams();
-  };
-
-  // Parse a class declaration or literal (depending on the
-  // `isStatement` parameter).
-
-  pp$1.parseClass = function(node, isStatement) {
-    this.next();
-
-    // ecma-262 14.6 Class Definitions
-    // A class definition is always strict mode code.
-    var oldStrict = this.strict;
-    this.strict = true;
-
-    this.parseClassId(node, isStatement);
-    this.parseClassSuper(node);
-    var classBody = this.startNode();
-    var hadConstructor = false;
-    classBody.body = [];
-    this.expect(types.braceL);
-    while (!this.eat(types.braceR)) {
-      var element = this.parseClassElement(node.superClass !== null);
-      if (element) {
-        classBody.body.push(element);
-        if (element.type === "MethodDefinition" && element.kind === "constructor") {
-          if (hadConstructor) { this.raise(element.start, "Duplicate constructor in the same class"); }
-          hadConstructor = true;
-        }
-      }
-    }
-    node.body = this.finishNode(classBody, "ClassBody");
-    this.strict = oldStrict;
-    return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression")
-  };
-
-  pp$1.parseClassElement = function(constructorAllowsSuper) {
-    var this$1 = this;
-
-    if (this.eat(types.semi)) { return null }
-
-    var method = this.startNode();
-    var tryContextual = function (k, noLineBreak) {
-      if ( noLineBreak === void 0 ) noLineBreak = false;
-
-      var start = this$1.start, startLoc = this$1.startLoc;
-      if (!this$1.eatContextual(k)) { return false }
-      if (this$1.type !== types.parenL && (!noLineBreak || !this$1.canInsertSemicolon())) { return true }
-      if (method.key) { this$1.unexpected(); }
-      method.computed = false;
-      method.key = this$1.startNodeAt(start, startLoc);
-      method.key.name = k;
-      this$1.finishNode(method.key, "Identifier");
-      return false
-    };
-
-    method.kind = "method";
-    method.static = tryContextual("static");
-    var isGenerator = this.eat(types.star);
-    var isAsync = false;
-    if (!isGenerator) {
-      if (this.options.ecmaVersion >= 8 && tryContextual("async", true)) {
-        isAsync = true;
-        isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star);
-      } else if (tryContextual("get")) {
-        method.kind = "get";
-      } else if (tryContextual("set")) {
-        method.kind = "set";
-      }
-    }
-    if (!method.key) { this.parsePropertyName(method); }
-    var key = method.key;
-    var allowsDirectSuper = false;
-    if (!method.computed && !method.static && (key.type === "Identifier" && key.name === "constructor" ||
-        key.type === "Literal" && key.value === "constructor")) {
-      if (method.kind !== "method") { this.raise(key.start, "Constructor can't have get/set modifier"); }
-      if (isGenerator) { this.raise(key.start, "Constructor can't be a generator"); }
-      if (isAsync) { this.raise(key.start, "Constructor can't be an async method"); }
-      method.kind = "constructor";
-      allowsDirectSuper = constructorAllowsSuper;
-    } else if (method.static && key.type === "Identifier" && key.name === "prototype") {
-      this.raise(key.start, "Classes may not have a static property named prototype");
-    }
-    this.parseClassMethod(method, isGenerator, isAsync, allowsDirectSuper);
-    if (method.kind === "get" && method.value.params.length !== 0)
-      { this.raiseRecoverable(method.value.start, "getter should have no params"); }
-    if (method.kind === "set" && method.value.params.length !== 1)
-      { this.raiseRecoverable(method.value.start, "setter should have exactly one param"); }
-    if (method.kind === "set" && method.value.params[0].type === "RestElement")
-      { this.raiseRecoverable(method.value.params[0].start, "Setter cannot use rest params"); }
-    return method
-  };
-
-  pp$1.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {
-    method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);
-    return this.finishNode(method, "MethodDefinition")
-  };
-
-  pp$1.parseClassId = function(node, isStatement) {
-    if (this.type === types.name) {
-      node.id = this.parseIdent();
-      if (isStatement)
-        { this.checkLVal(node.id, BIND_LEXICAL, false); }
-    } else {
-      if (isStatement === true)
-        { this.unexpected(); }
-      node.id = null;
-    }
-  };
-
-  pp$1.parseClassSuper = function(node) {
-    node.superClass = this.eat(types._extends) ? this.parseExprSubscripts() : null;
-  };
-
-  // Parses module export declaration.
-
-  pp$1.parseExport = function(node, exports) {
-    this.next();
-    // export * from '...'
-    if (this.eat(types.star)) {
-      this.expectContextual("from");
-      if (this.type !== types.string) { this.unexpected(); }
-      node.source = this.parseExprAtom();
-      this.semicolon();
-      return this.finishNode(node, "ExportAllDeclaration")
-    }
-    if (this.eat(types._default)) { // export default ...
-      this.checkExport(exports, "default", this.lastTokStart);
-      var isAsync;
-      if (this.type === types._function || (isAsync = this.isAsyncFunction())) {
-        var fNode = this.startNode();
-        this.next();
-        if (isAsync) { this.next(); }
-        node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync);
-      } else if (this.type === types._class) {
-        var cNode = this.startNode();
-        node.declaration = this.parseClass(cNode, "nullableID");
-      } else {
-        node.declaration = this.parseMaybeAssign();
-        this.semicolon();
-      }
-      return this.finishNode(node, "ExportDefaultDeclaration")
-    }
-    // export var|const|let|function|class ...
-    if (this.shouldParseExportStatement()) {
-      node.declaration = this.parseStatement(null);
-      if (node.declaration.type === "VariableDeclaration")
-        { this.checkVariableExport(exports, node.declaration.declarations); }
-      else
-        { this.checkExport(exports, node.declaration.id.name, node.declaration.id.start); }
-      node.specifiers = [];
-      node.source = null;
-    } else { // export { x, y as z } [from '...']
-      node.declaration = null;
-      node.specifiers = this.parseExportSpecifiers(exports);
-      if (this.eatContextual("from")) {
-        if (this.type !== types.string) { this.unexpected(); }
-        node.source = this.parseExprAtom();
-      } else {
-        for (var i = 0, list = node.specifiers; i < list.length; i += 1) {
-          // check for keywords used as local names
-          var spec = list[i];
-
-          this.checkUnreserved(spec.local);
-          // check if export is defined
-          this.checkLocalExport(spec.local);
-        }
-
-        node.source = null;
-      }
-      this.semicolon();
-    }
-    return this.finishNode(node, "ExportNamedDeclaration")
-  };
-
-  pp$1.checkExport = function(exports, name, pos) {
-    if (!exports) { return }
-    if (has(exports, name))
-      { this.raiseRecoverable(pos, "Duplicate export '" + name + "'"); }
-    exports[name] = true;
-  };
-
-  pp$1.checkPatternExport = function(exports, pat) {
-    var type = pat.type;
-    if (type === "Identifier")
-      { this.checkExport(exports, pat.name, pat.start); }
-    else if (type === "ObjectPattern")
-      { for (var i = 0, list = pat.properties; i < list.length; i += 1)
-        {
-          var prop = list[i];
-
-          this.checkPatternExport(exports, prop);
-        } }
-    else if (type === "ArrayPattern")
-      { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {
-        var elt = list$1[i$1];
-
-          if (elt) { this.checkPatternExport(exports, elt); }
-      } }
-    else if (type === "Property")
-      { this.checkPatternExport(exports, pat.value); }
-    else if (type === "AssignmentPattern")
-      { this.checkPatternExport(exports, pat.left); }
-    else if (type === "RestElement")
-      { this.checkPatternExport(exports, pat.argument); }
-    else if (type === "ParenthesizedExpression")
-      { this.checkPatternExport(exports, pat.expression); }
-  };
-
-  pp$1.checkVariableExport = function(exports, decls) {
-    if (!exports) { return }
-    for (var i = 0, list = decls; i < list.length; i += 1)
-      {
-      var decl = list[i];
-
-      this.checkPatternExport(exports, decl.id);
-    }
-  };
-
-  pp$1.shouldParseExportStatement = function() {
-    return this.type.keyword === "var" ||
-      this.type.keyword === "const" ||
-      this.type.keyword === "class" ||
-      this.type.keyword === "function" ||
-      this.isLet() ||
-      this.isAsyncFunction()
-  };
-
-  // Parses a comma-separated list of module exports.
-
-  pp$1.parseExportSpecifiers = function(exports) {
-    var nodes = [], first = true;
-    // export { x, y as z } [from '...']
-    this.expect(types.braceL);
-    while (!this.eat(types.braceR)) {
-      if (!first) {
-        this.expect(types.comma);
-        if (this.afterTrailingComma(types.braceR)) { break }
-      } else { first = false; }
-
-      var node = this.startNode();
-      node.local = this.parseIdent(true);
-      node.exported = this.eatContextual("as") ? this.parseIdent(true) : node.local;
-      this.checkExport(exports, node.exported.name, node.exported.start);
-      nodes.push(this.finishNode(node, "ExportSpecifier"));
-    }
-    return nodes
-  };
-
-  // Parses import declaration.
-
-  pp$1.parseImport = function(node) {
-    this.next();
-    // import '...'
-    if (this.type === types.string) {
-      node.specifiers = empty;
-      node.source = this.parseExprAtom();
-    } else {
-      node.specifiers = this.parseImportSpecifiers();
-      this.expectContextual("from");
-      node.source = this.type === types.string ? this.parseExprAtom() : this.unexpected();
-    }
-    this.semicolon();
-    return this.finishNode(node, "ImportDeclaration")
-  };
-
-  // Parses a comma-separated list of module imports.
-
-  pp$1.parseImportSpecifiers = function() {
-    var nodes = [], first = true;
-    if (this.type === types.name) {
-      // import defaultObj, { x, y as z } from '...'
-      var node = this.startNode();
-      node.local = this.parseIdent();
-      this.checkLVal(node.local, BIND_LEXICAL);
-      nodes.push(this.finishNode(node, "ImportDefaultSpecifier"));
-      if (!this.eat(types.comma)) { return nodes }
-    }
-    if (this.type === types.star) {
-      var node$1 = this.startNode();
-      this.next();
-      this.expectContextual("as");
-      node$1.local = this.parseIdent();
-      this.checkLVal(node$1.local, BIND_LEXICAL);
-      nodes.push(this.finishNode(node$1, "ImportNamespaceSpecifier"));
-      return nodes
-    }
-    this.expect(types.braceL);
-    while (!this.eat(types.braceR)) {
-      if (!first) {
-        this.expect(types.comma);
-        if (this.afterTrailingComma(types.braceR)) { break }
-      } else { first = false; }
-
-      var node$2 = this.startNode();
-      node$2.imported = this.parseIdent(true);
-      if (this.eatContextual("as")) {
-        node$2.local = this.parseIdent();
-      } else {
-        this.checkUnreserved(node$2.imported);
-        node$2.local = node$2.imported;
-      }
-      this.checkLVal(node$2.local, BIND_LEXICAL);
-      nodes.push(this.finishNode(node$2, "ImportSpecifier"));
-    }
-    return nodes
-  };
-
-  // Set `ExpressionStatement#directive` property for directive prologues.
-  pp$1.adaptDirectivePrologue = function(statements) {
-    for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {
-      statements[i].directive = statements[i].expression.raw.slice(1, -1);
-    }
-  };
-  pp$1.isDirectiveCandidate = function(statement) {
-    return (
-      statement.type === "ExpressionStatement" &&
-      statement.expression.type === "Literal" &&
-      typeof statement.expression.value === "string" &&
-      // Reject parenthesized strings.
-      (this.input[statement.start] === "\"" || this.input[statement.start] === "'")
-    )
-  };
-
-  var pp$2 = Parser.prototype;
-
-  // Convert existing expression atom to assignable pattern
-  // if possible.
-
-  pp$2.toAssignable = function(node, isBinding, refDestructuringErrors) {
-    if (this.options.ecmaVersion >= 6 && node) {
-      switch (node.type) {
-      case "Identifier":
-        if (this.inAsync && node.name === "await")
-          { this.raise(node.start, "Cannot use 'await' as identifier inside an async function"); }
-        break
-
-      case "ObjectPattern":
-      case "ArrayPattern":
-      case "RestElement":
-        break
-
-      case "ObjectExpression":
-        node.type = "ObjectPattern";
-        if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }
-        for (var i = 0, list = node.properties; i < list.length; i += 1) {
-          var prop = list[i];
-
-        this.toAssignable(prop, isBinding);
-          // Early error:
-          //   AssignmentRestProperty[Yield, Await] :
-          //     `...` DestructuringAssignmentTarget[Yield, Await]
-          //
-          //   It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.
-          if (
-            prop.type === "RestElement" &&
-            (prop.argument.type === "ArrayPattern" || prop.argument.type === "ObjectPattern")
-          ) {
-            this.raise(prop.argument.start, "Unexpected token");
-          }
-        }
-        break
-
-      case "Property":
-        // AssignmentProperty has type === "Property"
-        if (node.kind !== "init") { this.raise(node.key.start, "Object pattern can't contain getter or setter"); }
-        this.toAssignable(node.value, isBinding);
-        break
-
-      case "ArrayExpression":
-        node.type = "ArrayPattern";
-        if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }
-        this.toAssignableList(node.elements, isBinding);
-        break
-
-      case "SpreadElement":
-        node.type = "RestElement";
-        this.toAssignable(node.argument, isBinding);
-        if (node.argument.type === "AssignmentPattern")
-          { this.raise(node.argument.start, "Rest elements cannot have a default value"); }
-        break
-
-      case "AssignmentExpression":
-        if (node.operator !== "=") { this.raise(node.left.end, "Only '=' operator can be used for specifying default value."); }
-        node.type = "AssignmentPattern";
-        delete node.operator;
-        this.toAssignable(node.left, isBinding);
-        // falls through to AssignmentPattern
-
-      case "AssignmentPattern":
-        break
-
-      case "ParenthesizedExpression":
-        this.toAssignable(node.expression, isBinding, refDestructuringErrors);
-        break
-
-      case "MemberExpression":
-        if (!isBinding) { break }
-
-      default:
-        this.raise(node.start, "Assigning to rvalue");
-      }
-    } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }
-    return node
-  };
-
-  // Convert list of expression atoms to binding list.
-
-  pp$2.toAssignableList = function(exprList, isBinding) {
-    var end = exprList.length;
-    for (var i = 0; i < end; i++) {
-      var elt = exprList[i];
-      if (elt) { this.toAssignable(elt, isBinding); }
-    }
-    if (end) {
-      var last = exprList[end - 1];
-      if (this.options.ecmaVersion === 6 && isBinding && last && last.type === "RestElement" && last.argument.type !== "Identifier")
-        { this.unexpected(last.argument.start); }
-    }
-    return exprList
-  };
-
-  // Parses spread element.
-
-  pp$2.parseSpread = function(refDestructuringErrors) {
-    var node = this.startNode();
-    this.next();
-    node.argument = this.parseMaybeAssign(false, refDestructuringErrors);
-    return this.finishNode(node, "SpreadElement")
-  };
-
-  pp$2.parseRestBinding = function() {
-    var node = this.startNode();
-    this.next();
-
-    // RestElement inside of a function parameter must be an identifier
-    if (this.options.ecmaVersion === 6 && this.type !== types.name)
-      { this.unexpected(); }
-
-    node.argument = this.parseBindingAtom();
-
-    return this.finishNode(node, "RestElement")
-  };
-
-  // Parses lvalue (assignable) atom.
-
-  pp$2.parseBindingAtom = function() {
-    if (this.options.ecmaVersion >= 6) {
-      switch (this.type) {
-      case types.bracketL:
-        var node = this.startNode();
-        this.next();
-        node.elements = this.parseBindingList(types.bracketR, true, true);
-        return this.finishNode(node, "ArrayPattern")
-
-      case types.braceL:
-        return this.parseObj(true)
-      }
-    }
-    return this.parseIdent()
-  };
-
-  pp$2.parseBindingList = function(close, allowEmpty, allowTrailingComma) {
-    var elts = [], first = true;
-    while (!this.eat(close)) {
-      if (first) { first = false; }
-      else { this.expect(types.comma); }
-      if (allowEmpty && this.type === types.comma) {
-        elts.push(null);
-      } else if (allowTrailingComma && this.afterTrailingComma(close)) {
-        break
-      } else if (this.type === types.ellipsis) {
-        var rest = this.parseRestBinding();
-        this.parseBindingListItem(rest);
-        elts.push(rest);
-        if (this.type === types.comma) { this.raise(this.start, "Comma is not permitted after the rest element"); }
-        this.expect(close);
-        break
-      } else {
-        var elem = this.parseMaybeDefault(this.start, this.startLoc);
-        this.parseBindingListItem(elem);
-        elts.push(elem);
-      }
-    }
-    return elts
-  };
-
-  pp$2.parseBindingListItem = function(param) {
-    return param
-  };
-
-  // Parses assignment pattern around given atom if possible.
-
-  pp$2.parseMaybeDefault = function(startPos, startLoc, left) {
-    left = left || this.parseBindingAtom();
-    if (this.options.ecmaVersion < 6 || !this.eat(types.eq)) { return left }
-    var node = this.startNodeAt(startPos, startLoc);
-    node.left = left;
-    node.right = this.parseMaybeAssign();
-    return this.finishNode(node, "AssignmentPattern")
-  };
-
-  // Verify that a node is an lval — something that can be assigned
-  // to.
-  // bindingType can be either:
-  // 'var' indicating that the lval creates a 'var' binding
-  // 'let' indicating that the lval creates a lexical ('let' or 'const') binding
-  // 'none' indicating that the binding should be checked for illegal identifiers, but not for duplicate references
-
-  pp$2.checkLVal = function(expr, bindingType, checkClashes) {
-    if ( bindingType === void 0 ) bindingType = BIND_NONE;
-
-    switch (expr.type) {
-    case "Identifier":
-      if (bindingType === BIND_LEXICAL && expr.name === "let")
-        { this.raiseRecoverable(expr.start, "let is disallowed as a lexically bound name"); }
-      if (this.strict && this.reservedWordsStrictBind.test(expr.name))
-        { this.raiseRecoverable(expr.start, (bindingType ? "Binding " : "Assigning to ") + expr.name + " in strict mode"); }
-      if (checkClashes) {
-        if (has(checkClashes, expr.name))
-          { this.raiseRecoverable(expr.start, "Argument name clash"); }
-        checkClashes[expr.name] = true;
-      }
-      if (bindingType !== BIND_NONE && bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }
-      break
-
-    case "MemberExpression":
-      if (bindingType) { this.raiseRecoverable(expr.start, "Binding member expression"); }
-      break
-
-    case "ObjectPattern":
-      for (var i = 0, list = expr.properties; i < list.length; i += 1)
-        {
-      var prop = list[i];
-
-      this.checkLVal(prop, bindingType, checkClashes);
-    }
-      break
-
-    case "Property":
-      // AssignmentProperty has type === "Property"
-      this.checkLVal(expr.value, bindingType, checkClashes);
-      break
-
-    case "ArrayPattern":
-      for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {
-        var elem = list$1[i$1];
-
-      if (elem) { this.checkLVal(elem, bindingType, checkClashes); }
-      }
-      break
-
-    case "AssignmentPattern":
-      this.checkLVal(expr.left, bindingType, checkClashes);
-      break
-
-    case "RestElement":
-      this.checkLVal(expr.argument, bindingType, checkClashes);
-      break
-
-    case "ParenthesizedExpression":
-      this.checkLVal(expr.expression, bindingType, checkClashes);
-      break
-
-    default:
-      this.raise(expr.start, (bindingType ? "Binding" : "Assigning to") + " rvalue");
-    }
-  };
-
-  // A recursive descent parser operates by defining functions for all
-
-  var pp$3 = Parser.prototype;
-
-  // Check if property name clashes with already added.
-  // Object/class getters and setters are not allowed to clash —
-  // either with each other or with an init property — and in
-  // strict mode, init properties are also not allowed to be repeated.
-
-  pp$3.checkPropClash = function(prop, propHash, refDestructuringErrors) {
-    if (this.options.ecmaVersion >= 9 && prop.type === "SpreadElement")
-      { return }
-    if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))
-      { return }
-    var key = prop.key;
-    var name;
-    switch (key.type) {
-    case "Identifier": name = key.name; break
-    case "Literal": name = String(key.value); break
-    default: return
-    }
-    var kind = prop.kind;
-    if (this.options.ecmaVersion >= 6) {
-      if (name === "__proto__" && kind === "init") {
-        if (propHash.proto) {
-          if (refDestructuringErrors && refDestructuringErrors.doubleProto < 0) { refDestructuringErrors.doubleProto = key.start; }
-          // Backwards-compat kludge. Can be removed in version 6.0
-          else { this.raiseRecoverable(key.start, "Redefinition of __proto__ property"); }
-        }
-        propHash.proto = true;
-      }
-      return
-    }
-    name = "$" + name;
-    var other = propHash[name];
-    if (other) {
-      var redefinition;
-      if (kind === "init") {
-        redefinition = this.strict && other.init || other.get || other.set;
-      } else {
-        redefinition = other.init || other[kind];
-      }
-      if (redefinition)
-        { this.raiseRecoverable(key.start, "Redefinition of property"); }
-    } else {
-      other = propHash[name] = {
-        init: false,
-        get: false,
-        set: false
-      };
-    }
-    other[kind] = true;
-  };
-
-  // ### Expression parsing
-
-  // These nest, from the most general expression type at the top to
-  // 'atomic', nondivisible expression types at the bottom. Most of
-  // the functions will simply let the function(s) below them parse,
-  // and, *if* the syntactic construct they handle is present, wrap
-  // the AST node that the inner parser gave them in another node.
-
-  // Parse a full expression. The optional arguments are used to
-  // forbid the `in` operator (in for loops initalization expressions)
-  // and provide reference for storing '=' operator inside shorthand
-  // property assignment in contexts where both object expression
-  // and object pattern might appear (so it's possible to raise
-  // delayed syntax error at correct position).
-
-  pp$3.parseExpression = function(noIn, refDestructuringErrors) {
-    var startPos = this.start, startLoc = this.startLoc;
-    var expr = this.parseMaybeAssign(noIn, refDestructuringErrors);
-    if (this.type === types.comma) {
-      var node = this.startNodeAt(startPos, startLoc);
-      node.expressions = [expr];
-      while (this.eat(types.comma)) { node.expressions.push(this.parseMaybeAssign(noIn, refDestructuringErrors)); }
-      return this.finishNode(node, "SequenceExpression")
-    }
-    return expr
-  };
-
-  // Parse an assignment expression. This includes applications of
-  // operators like `+=`.
-
-  pp$3.parseMaybeAssign = function(noIn, refDestructuringErrors, afterLeftParse) {
-    if (this.isContextual("yield")) {
-      if (this.inGenerator) { return this.parseYield(noIn) }
-      // The tokenizer will assume an expression is allowed after
-      // `yield`, but this isn't that kind of yield
-      else { this.exprAllowed = false; }
-    }
-
-    var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldShorthandAssign = -1;
-    if (refDestructuringErrors) {
-      oldParenAssign = refDestructuringErrors.parenthesizedAssign;
-      oldTrailingComma = refDestructuringErrors.trailingComma;
-      oldShorthandAssign = refDestructuringErrors.shorthandAssign;
-      refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.shorthandAssign = -1;
-    } else {
-      refDestructuringErrors = new DestructuringErrors;
-      ownDestructuringErrors = true;
-    }
-
-    var startPos = this.start, startLoc = this.startLoc;
-    if (this.type === types.parenL || this.type === types.name)
-      { this.potentialArrowAt = this.start; }
-    var left = this.parseMaybeConditional(noIn, refDestructuringErrors);
-    if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }
-    if (this.type.isAssign) {
-      var node = this.startNodeAt(startPos, startLoc);
-      node.operator = this.value;
-      node.left = this.type === types.eq ? this.toAssignable(left, false, refDestructuringErrors) : left;
-      if (!ownDestructuringErrors) { DestructuringErrors.call(refDestructuringErrors); }
-      refDestructuringErrors.shorthandAssign = -1; // reset because shorthand default was used correctly
-      this.checkLVal(left);
-      this.next();
-      node.right = this.parseMaybeAssign(noIn);
-      return this.finishNode(node, "AssignmentExpression")
-    } else {
-      if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }
-    }
-    if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }
-    if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }
-    if (oldShorthandAssign > -1) { refDestructuringErrors.shorthandAssign = oldShorthandAssign; }
-    return left
-  };
-
-  // Parse a ternary conditional (`?:`) operator.
-
-  pp$3.parseMaybeConditional = function(noIn, refDestructuringErrors) {
-    var startPos = this.start, startLoc = this.startLoc;
-    var expr = this.parseExprOps(noIn, refDestructuringErrors);
-    if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
-    if (this.eat(types.question)) {
-      var node = this.startNodeAt(startPos, startLoc);
-      node.test = expr;
-      node.consequent = this.parseMaybeAssign();
-      this.expect(types.colon);
-      node.alternate = this.parseMaybeAssign(noIn);
-      return this.finishNode(node, "ConditionalExpression")
-    }
-    return expr
-  };
-
-  // Start the precedence parser.
-
-  pp$3.parseExprOps = function(noIn, refDestructuringErrors) {
-    var startPos = this.start, startLoc = this.startLoc;
-    var expr = this.parseMaybeUnary(refDestructuringErrors, false);
-    if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
-    return expr.start === startPos && expr.type === "ArrowFunctionExpression" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, noIn)
-  };
-
-  // Parse binary operators with the operator precedence parsing
-  // algorithm. `left` is the left-hand side of the operator.
-  // `minPrec` provides context that allows the function to stop and
-  // defer further parser to one of its callers when it encounters an
-  // operator that has a lower precedence than the set it is parsing.
-
-  pp$3.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, noIn) {
-    var prec = this.type.binop;
-    if (prec != null && (!noIn || this.type !== types._in)) {
-      if (prec > minPrec) {
-        var logical = this.type === types.logicalOR || this.type === types.logicalAND;
-        var op = this.value;
-        this.next();
-        var startPos = this.start, startLoc = this.startLoc;
-        var right = this.parseExprOp(this.parseMaybeUnary(null, false), startPos, startLoc, prec, noIn);
-        var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical);
-        return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, noIn)
-      }
-    }
-    return left
-  };
-
-  pp$3.buildBinary = function(startPos, startLoc, left, right, op, logical) {
-    var node = this.startNodeAt(startPos, startLoc);
-    node.left = left;
-    node.operator = op;
-    node.right = right;
-    return this.finishNode(node, logical ? "LogicalExpression" : "BinaryExpression")
-  };
-
-  // Parse unary operators, both prefix and postfix.
-
-  pp$3.parseMaybeUnary = function(refDestructuringErrors, sawUnary) {
-    var startPos = this.start, startLoc = this.startLoc, expr;
-    if (this.isContextual("await") && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction))) {
-      expr = this.parseAwait();
-      sawUnary = true;
-    } else if (this.type.prefix) {
-      var node = this.startNode(), update = this.type === types.incDec;
-      node.operator = this.value;
-      node.prefix = true;
-      this.next();
-      node.argument = this.parseMaybeUnary(null, true);
-      this.checkExpressionErrors(refDestructuringErrors, true);
-      if (update) { this.checkLVal(node.argument); }
-      else if (this.strict && node.operator === "delete" &&
-               node.argument.type === "Identifier")
-        { this.raiseRecoverable(node.start, "Deleting local variable in strict mode"); }
-      else { sawUnary = true; }
-      expr = this.finishNode(node, update ? "UpdateExpression" : "UnaryExpression");
-    } else {
-      expr = this.parseExprSubscripts(refDestructuringErrors);
-      if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
-      while (this.type.postfix && !this.canInsertSemicolon()) {
-        var node$1 = this.startNodeAt(startPos, startLoc);
-        node$1.operator = this.value;
-        node$1.prefix = false;
-        node$1.argument = expr;
-        this.checkLVal(expr);
-        this.next();
-        expr = this.finishNode(node$1, "UpdateExpression");
-      }
-    }
-
-    if (!sawUnary && this.eat(types.starstar))
-      { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false), "**", false) }
-    else
-      { return expr }
-  };
-
-  // Parse call, dot, and `[]`-subscript expressions.
-
-  pp$3.parseExprSubscripts = function(refDestructuringErrors) {
-    var startPos = this.start, startLoc = this.startLoc;
-    var expr = this.parseExprAtom(refDestructuringErrors);
-    var skipArrowSubscripts = expr.type === "ArrowFunctionExpression" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== ")";
-    if (this.checkExpressionErrors(refDestructuringErrors) || skipArrowSubscripts) { return expr }
-    var result = this.parseSubscripts(expr, startPos, startLoc);
-    if (refDestructuringErrors && result.type === "MemberExpression") {
-      if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }
-      if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }
-    }
-    return result
-  };
-
-  pp$3.parseSubscripts = function(base, startPos, startLoc, noCalls) {
-    var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === "Identifier" && base.name === "async" &&
-        this.lastTokEnd === base.end && !this.canInsertSemicolon() && this.input.slice(base.start, base.end) === "async";
-    while (true) {
-      var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow);
-      if (element === base || element.type === "ArrowFunctionExpression") { return element }
-      base = element;
-    }
-  };
-
-  pp$3.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow) {
-    var computed = this.eat(types.bracketL);
-    if (computed || this.eat(types.dot)) {
-      var node = this.startNodeAt(startPos, startLoc);
-      node.object = base;
-      node.property = computed ? this.parseExpression() : this.parseIdent(this.options.allowReserved !== "never");
-      node.computed = !!computed;
-      if (computed) { this.expect(types.bracketR); }
-      base = this.finishNode(node, "MemberExpression");
-    } else if (!noCalls && this.eat(types.parenL)) {
-      var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-      this.yieldPos = 0;
-      this.awaitPos = 0;
-      this.awaitIdentPos = 0;
-      var exprList = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8 && base.type !== "Import", false, refDestructuringErrors);
-      if (maybeAsyncArrow && !this.canInsertSemicolon() && this.eat(types.arrow)) {
-        this.checkPatternErrors(refDestructuringErrors, false);
-        this.checkYieldAwaitInDefaultParams();
-        if (this.awaitIdentPos > 0)
-          { this.raise(this.awaitIdentPos, "Cannot use 'await' as identifier inside an async function"); }
-        this.yieldPos = oldYieldPos;
-        this.awaitPos = oldAwaitPos;
-        this.awaitIdentPos = oldAwaitIdentPos;
-        return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true)
-      }
-      this.checkExpressionErrors(refDestructuringErrors, true);
-      this.yieldPos = oldYieldPos || this.yieldPos;
-      this.awaitPos = oldAwaitPos || this.awaitPos;
-      this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;
-      var node$1 = this.startNodeAt(startPos, startLoc);
-      node$1.callee = base;
-      node$1.arguments = exprList;
-      if (node$1.callee.type === "Import") {
-        if (node$1.arguments.length !== 1) {
-          this.raise(node$1.start, "import() requires exactly one argument");
-        }
-
-        var importArg = node$1.arguments[0];
-        if (importArg && importArg.type === "SpreadElement") {
-          this.raise(importArg.start, "... is not allowed in import()");
-        }
-      }
-      base = this.finishNode(node$1, "CallExpression");
-    } else if (this.type === types.backQuote) {
-      var node$2 = this.startNodeAt(startPos, startLoc);
-      node$2.tag = base;
-      node$2.quasi = this.parseTemplate({isTagged: true});
-      base = this.finishNode(node$2, "TaggedTemplateExpression");
-    }
-    return base
-  };
-
-  // Parse an atomic expression — either a single token that is an
-  // expression, an expression started by a keyword like `function` or
-  // `new`, or an expression wrapped in punctuation like `()`, `[]`,
-  // or `{}`.
-
-  pp$3.parseExprAtom = function(refDestructuringErrors) {
-    // If a division operator appears in an expression position, the
-    // tokenizer got confused, and we force it to read a regexp instead.
-    if (this.type === types.slash) { this.readRegexp(); }
-
-    var node, canBeArrow = this.potentialArrowAt === this.start;
-    switch (this.type) {
-    case types._super:
-      if (!this.allowSuper)
-        { this.raise(this.start, "'super' keyword outside a method"); }
-      node = this.startNode();
-      this.next();
-      if (this.type === types.parenL && !this.allowDirectSuper)
-        { this.raise(node.start, "super() call outside constructor of a subclass"); }
-      // The `super` keyword can appear at below:
-      // SuperProperty:
-      //     super [ Expression ]
-      //     super . IdentifierName
-      // SuperCall:
-      //     super Arguments
-      if (this.type !== types.dot && this.type !== types.bracketL && this.type !== types.parenL)
-        { this.unexpected(); }
-      return this.finishNode(node, "Super")
-
-    case types._this:
-      node = this.startNode();
-      this.next();
-      return this.finishNode(node, "ThisExpression")
-
-    case types.name:
-      var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;
-      var id = this.parseIdent(false);
-      if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === "async" && !this.canInsertSemicolon() && this.eat(types._function))
-        { return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true) }
-      if (canBeArrow && !this.canInsertSemicolon()) {
-        if (this.eat(types.arrow))
-          { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false) }
-        if (this.options.ecmaVersion >= 8 && id.name === "async" && this.type === types.name && !containsEsc) {
-          id = this.parseIdent(false);
-          if (this.canInsertSemicolon() || !this.eat(types.arrow))
-            { this.unexpected(); }
-          return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true)
-        }
-      }
-      return id
-
-    case types.regexp:
-      var value = this.value;
-      node = this.parseLiteral(value.value);
-      node.regex = {pattern: value.pattern, flags: value.flags};
-      return node
-
-    case types.num: case types.string:
-      return this.parseLiteral(this.value)
-
-    case types._null: case types._true: case types._false:
-      node = this.startNode();
-      node.value = this.type === types._null ? null : this.type === types._true;
-      node.raw = this.type.keyword;
-      this.next();
-      return this.finishNode(node, "Literal")
-
-    case types.parenL:
-      var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow);
-      if (refDestructuringErrors) {
-        if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))
-          { refDestructuringErrors.parenthesizedAssign = start; }
-        if (refDestructuringErrors.parenthesizedBind < 0)
-          { refDestructuringErrors.parenthesizedBind = start; }
-      }
-      return expr
-
-    case types.bracketL:
-      node = this.startNode();
-      this.next();
-      node.elements = this.parseExprList(types.bracketR, true, true, refDestructuringErrors);
-      return this.finishNode(node, "ArrayExpression")
-
-    case types.braceL:
-      return this.parseObj(false, refDestructuringErrors)
-
-    case types._function:
-      node = this.startNode();
-      this.next();
-      return this.parseFunction(node, 0)
-
-    case types._class:
-      return this.parseClass(this.startNode(), false)
-
-    case types._new:
-      return this.parseNew()
-
-    case types.backQuote:
-      return this.parseTemplate()
-
-    case types._import:
-      if (this.options.ecmaVersion > 10) {
-        return this.parseDynamicImport()
-      } else {
-        return this.unexpected()
-      }
-
-    default:
-      this.unexpected();
-    }
-  };
-
-  pp$3.parseDynamicImport = function() {
-    var node = this.startNode();
-    this.next();
-    if (this.type !== types.parenL) {
-      this.unexpected();
-    }
-    return this.finishNode(node, "Import")
-  };
-
-  pp$3.parseLiteral = function(value) {
-    var node = this.startNode();
-    node.value = value;
-    node.raw = this.input.slice(this.start, this.end);
-    if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1); }
-    this.next();
-    return this.finishNode(node, "Literal")
-  };
-
-  pp$3.parseParenExpression = function() {
-    this.expect(types.parenL);
-    var val = this.parseExpression();
-    this.expect(types.parenR);
-    return val
-  };
-
-  pp$3.parseParenAndDistinguishExpression = function(canBeArrow) {
-    var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;
-    if (this.options.ecmaVersion >= 6) {
-      this.next();
-
-      var innerStartPos = this.start, innerStartLoc = this.startLoc;
-      var exprList = [], first = true, lastIsComma = false;
-      var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;
-      this.yieldPos = 0;
-      this.awaitPos = 0;
-      // Do not save awaitIdentPos to allow checking awaits nested in parameters
-      while (this.type !== types.parenR) {
-        first ? first = false : this.expect(types.comma);
-        if (allowTrailingComma && this.afterTrailingComma(types.parenR, true)) {
-          lastIsComma = true;
-          break
-        } else if (this.type === types.ellipsis) {
-          spreadStart = this.start;
-          exprList.push(this.parseParenItem(this.parseRestBinding()));
-          if (this.type === types.comma) { this.raise(this.start, "Comma is not permitted after the rest element"); }
-          break
-        } else {
-          exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));
-        }
-      }
-      var innerEndPos = this.start, innerEndLoc = this.startLoc;
-      this.expect(types.parenR);
-
-      if (canBeArrow && !this.canInsertSemicolon() && this.eat(types.arrow)) {
-        this.checkPatternErrors(refDestructuringErrors, false);
-        this.checkYieldAwaitInDefaultParams();
-        this.yieldPos = oldYieldPos;
-        this.awaitPos = oldAwaitPos;
-        return this.parseParenArrowList(startPos, startLoc, exprList)
-      }
-
-      if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }
-      if (spreadStart) { this.unexpected(spreadStart); }
-      this.checkExpressionErrors(refDestructuringErrors, true);
-      this.yieldPos = oldYieldPos || this.yieldPos;
-      this.awaitPos = oldAwaitPos || this.awaitPos;
-
-      if (exprList.length > 1) {
-        val = this.startNodeAt(innerStartPos, innerStartLoc);
-        val.expressions = exprList;
-        this.finishNodeAt(val, "SequenceExpression", innerEndPos, innerEndLoc);
-      } else {
-        val = exprList[0];
-      }
-    } else {
-      val = this.parseParenExpression();
-    }
-
-    if (this.options.preserveParens) {
-      var par = this.startNodeAt(startPos, startLoc);
-      par.expression = val;
-      return this.finishNode(par, "ParenthesizedExpression")
-    } else {
-      return val
-    }
-  };
-
-  pp$3.parseParenItem = function(item) {
-    return item
-  };
-
-  pp$3.parseParenArrowList = function(startPos, startLoc, exprList) {
-    return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList)
-  };
-
-  // New's precedence is slightly tricky. It must allow its argument to
-  // be a `[]` or dot subscript expression, but not a call — at least,
-  // not without wrapping it in parentheses. Thus, it uses the noCalls
-  // argument to parseSubscripts to prevent it from consuming the
-  // argument list.
-
-  var empty$1 = [];
-
-  pp$3.parseNew = function() {
-    var node = this.startNode();
-    var meta = this.parseIdent(true);
-    if (this.options.ecmaVersion >= 6 && this.eat(types.dot)) {
-      node.meta = meta;
-      var containsEsc = this.containsEsc;
-      node.property = this.parseIdent(true);
-      if (node.property.name !== "target" || containsEsc)
-        { this.raiseRecoverable(node.property.start, "The only valid meta property for new is new.target"); }
-      if (!this.inNonArrowFunction())
-        { this.raiseRecoverable(node.start, "new.target can only be used in functions"); }
-      return this.finishNode(node, "MetaProperty")
-    }
-    var startPos = this.start, startLoc = this.startLoc;
-    node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true);
-    if (this.options.ecmaVersion > 10 && node.callee.type === "Import") {
-      this.raise(node.callee.start, "Cannot use new with import(...)");
-    }
-    if (this.eat(types.parenL)) { node.arguments = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8 && node.callee.type !== "Import", false); }
-    else { node.arguments = empty$1; }
-    return this.finishNode(node, "NewExpression")
-  };
-
-  // Parse template expression.
-
-  pp$3.parseTemplateElement = function(ref) {
-    var isTagged = ref.isTagged;
-
-    var elem = this.startNode();
-    if (this.type === types.invalidTemplate) {
-      if (!isTagged) {
-        this.raiseRecoverable(this.start, "Bad escape sequence in untagged template literal");
-      }
-      elem.value = {
-        raw: this.value,
-        cooked: null
-      };
-    } else {
-      elem.value = {
-        raw: this.input.slice(this.start, this.end).replace(/\r\n?/g, "\n"),
-        cooked: this.value
-      };
-    }
-    this.next();
-    elem.tail = this.type === types.backQuote;
-    return this.finishNode(elem, "TemplateElement")
-  };
-
-  pp$3.parseTemplate = function(ref) {
-    if ( ref === void 0 ) ref = {};
-    var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;
-
-    var node = this.startNode();
-    this.next();
-    node.expressions = [];
-    var curElt = this.parseTemplateElement({isTagged: isTagged});
-    node.quasis = [curElt];
-    while (!curElt.tail) {
-      if (this.type === types.eof) { this.raise(this.pos, "Unterminated template literal"); }
-      this.expect(types.dollarBraceL);
-      node.expressions.push(this.parseExpression());
-      this.expect(types.braceR);
-      node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));
-    }
-    this.next();
-    return this.finishNode(node, "TemplateLiteral")
-  };
-
-  pp$3.isAsyncProp = function(prop) {
-    return !prop.computed && prop.key.type === "Identifier" && prop.key.name === "async" &&
-      (this.type === types.name || this.type === types.num || this.type === types.string || this.type === types.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types.star)) &&
-      !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))
-  };
-
-  // Parse an object literal or binding pattern.
-
-  pp$3.parseObj = function(isPattern, refDestructuringErrors) {
-    var node = this.startNode(), first = true, propHash = {};
-    node.properties = [];
-    this.next();
-    while (!this.eat(types.braceR)) {
-      if (!first) {
-        this.expect(types.comma);
-        if (this.afterTrailingComma(types.braceR)) { break }
-      } else { first = false; }
-
-      var prop = this.parseProperty(isPattern, refDestructuringErrors);
-      if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }
-      node.properties.push(prop);
-    }
-    return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression")
-  };
-
-  pp$3.parseProperty = function(isPattern, refDestructuringErrors) {
-    var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;
-    if (this.options.ecmaVersion >= 9 && this.eat(types.ellipsis)) {
-      if (isPattern) {
-        prop.argument = this.parseIdent(false);
-        if (this.type === types.comma) {
-          this.raise(this.start, "Comma is not permitted after the rest element");
-        }
-        return this.finishNode(prop, "RestElement")
-      }
-      // To disallow parenthesized identifier via `this.toAssignable()`.
-      if (this.type === types.parenL && refDestructuringErrors) {
-        if (refDestructuringErrors.parenthesizedAssign < 0) {
-          refDestructuringErrors.parenthesizedAssign = this.start;
-        }
-        if (refDestructuringErrors.parenthesizedBind < 0) {
-          refDestructuringErrors.parenthesizedBind = this.start;
-        }
-      }
-      // Parse argument.
-      prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);
-      // To disallow trailing comma via `this.toAssignable()`.
-      if (this.type === types.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {
-        refDestructuringErrors.trailingComma = this.start;
-      }
-      // Finish
-      return this.finishNode(prop, "SpreadElement")
-    }
-    if (this.options.ecmaVersion >= 6) {
-      prop.method = false;
-      prop.shorthand = false;
-      if (isPattern || refDestructuringErrors) {
-        startPos = this.start;
-        startLoc = this.startLoc;
-      }
-      if (!isPattern)
-        { isGenerator = this.eat(types.star); }
-    }
-    var containsEsc = this.containsEsc;
-    this.parsePropertyName(prop);
-    if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {
-      isAsync = true;
-      isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star);
-      this.parsePropertyName(prop, refDestructuringErrors);
-    } else {
-      isAsync = false;
-    }
-    this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);
-    return this.finishNode(prop, "Property")
-  };
-
-  pp$3.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {
-    if ((isGenerator || isAsync) && this.type === types.colon)
-      { this.unexpected(); }
-
-    if (this.eat(types.colon)) {
-      prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);
-      prop.kind = "init";
-    } else if (this.options.ecmaVersion >= 6 && this.type === types.parenL) {
-      if (isPattern) { this.unexpected(); }
-      prop.kind = "init";
-      prop.method = true;
-      prop.value = this.parseMethod(isGenerator, isAsync);
-    } else if (!isPattern && !containsEsc &&
-               this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" &&
-               (prop.key.name === "get" || prop.key.name === "set") &&
-               (this.type !== types.comma && this.type !== types.braceR)) {
-      if (isGenerator || isAsync) { this.unexpected(); }
-      prop.kind = prop.key.name;
-      this.parsePropertyName(prop);
-      prop.value = this.parseMethod(false);
-      var paramCount = prop.kind === "get" ? 0 : 1;
-      if (prop.value.params.length !== paramCount) {
-        var start = prop.value.start;
-        if (prop.kind === "get")
-          { this.raiseRecoverable(start, "getter should have no params"); }
-        else
-          { this.raiseRecoverable(start, "setter should have exactly one param"); }
-      } else {
-        if (prop.kind === "set" && prop.value.params[0].type === "RestElement")
-          { this.raiseRecoverable(prop.value.params[0].start, "Setter cannot use rest params"); }
-      }
-    } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === "Identifier") {
-      if (isGenerator || isAsync) { this.unexpected(); }
-      this.checkUnreserved(prop.key);
-      if (prop.key.name === "await" && !this.awaitIdentPos)
-        { this.awaitIdentPos = startPos; }
-      prop.kind = "init";
-      if (isPattern) {
-        prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key);
-      } else if (this.type === types.eq && refDestructuringErrors) {
-        if (refDestructuringErrors.shorthandAssign < 0)
-          { refDestructuringErrors.shorthandAssign = this.start; }
-        prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key);
-      } else {
-        prop.value = prop.key;
-      }
-      prop.shorthand = true;
-    } else { this.unexpected(); }
-  };
-
-  pp$3.parsePropertyName = function(prop) {
-    if (this.options.ecmaVersion >= 6) {
-      if (this.eat(types.bracketL)) {
-        prop.computed = true;
-        prop.key = this.parseMaybeAssign();
-        this.expect(types.bracketR);
-        return prop.key
-      } else {
-        prop.computed = false;
-      }
-    }
-    return prop.key = this.type === types.num || this.type === types.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== "never")
-  };
-
-  // Initialize empty function node.
-
-  pp$3.initFunction = function(node) {
-    node.id = null;
-    if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }
-    if (this.options.ecmaVersion >= 8) { node.async = false; }
-  };
-
-  // Parse object or class method.
-
-  pp$3.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {
-    var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-
-    this.initFunction(node);
-    if (this.options.ecmaVersion >= 6)
-      { node.generator = isGenerator; }
-    if (this.options.ecmaVersion >= 8)
-      { node.async = !!isAsync; }
-
-    this.yieldPos = 0;
-    this.awaitPos = 0;
-    this.awaitIdentPos = 0;
-    this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));
-
-    this.expect(types.parenL);
-    node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);
-    this.checkYieldAwaitInDefaultParams();
-    this.parseFunctionBody(node, false, true);
-
-    this.yieldPos = oldYieldPos;
-    this.awaitPos = oldAwaitPos;
-    this.awaitIdentPos = oldAwaitIdentPos;
-    return this.finishNode(node, "FunctionExpression")
-  };
-
-  // Parse arrow function expression with given parameters.
-
-  pp$3.parseArrowExpression = function(node, params, isAsync) {
-    var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-
-    this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);
-    this.initFunction(node);
-    if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }
-
-    this.yieldPos = 0;
-    this.awaitPos = 0;
-    this.awaitIdentPos = 0;
-
-    node.params = this.toAssignableList(params, true);
-    this.parseFunctionBody(node, true, false);
-
-    this.yieldPos = oldYieldPos;
-    this.awaitPos = oldAwaitPos;
-    this.awaitIdentPos = oldAwaitIdentPos;
-    return this.finishNode(node, "ArrowFunctionExpression")
-  };
-
-  // Parse function body and check parameters.
-
-  pp$3.parseFunctionBody = function(node, isArrowFunction, isMethod) {
-    var isExpression = isArrowFunction && this.type !== types.braceL;
-    var oldStrict = this.strict, useStrict = false;
-
-    if (isExpression) {
-      node.body = this.parseMaybeAssign();
-      node.expression = true;
-      this.checkParams(node, false);
-    } else {
-      var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);
-      if (!oldStrict || nonSimple) {
-        useStrict = this.strictDirective(this.end);
-        // If this is a strict mode function, verify that argument names
-        // are not repeated, and it does not try to bind the words `eval`
-        // or `arguments`.
-        if (useStrict && nonSimple)
-          { this.raiseRecoverable(node.start, "Illegal 'use strict' directive in function with non-simple parameter list"); }
-      }
-      // Start a new scope with regard to labels and the `inFunction`
-      // flag (restore them to their old value afterwards).
-      var oldLabels = this.labels;
-      this.labels = [];
-      if (useStrict) { this.strict = true; }
-
-      // Add the params to varDeclaredNames to ensure that an error is thrown
-      // if a let/const declaration in the function clashes with one of the params.
-      this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));
-      node.body = this.parseBlock(false);
-      node.expression = false;
-      this.adaptDirectivePrologue(node.body.body);
-      this.labels = oldLabels;
-    }
-    this.exitScope();
-
-    // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'
-    if (this.strict && node.id) { this.checkLVal(node.id, BIND_OUTSIDE); }
-    this.strict = oldStrict;
-  };
-
-  pp$3.isSimpleParamList = function(params) {
-    for (var i = 0, list = params; i < list.length; i += 1)
-      {
-      var param = list[i];
-
-      if (param.type !== "Identifier") { return false
-    } }
-    return true
-  };
-
-  // Checks function params for various disallowed patterns such as using "eval"
-  // or "arguments" and duplicate parameters.
-
-  pp$3.checkParams = function(node, allowDuplicates) {
-    var nameHash = {};
-    for (var i = 0, list = node.params; i < list.length; i += 1)
-      {
-      var param = list[i];
-
-      this.checkLVal(param, BIND_VAR, allowDuplicates ? null : nameHash);
-    }
-  };
-
-  // Parses a comma-separated list of expressions, and returns them as
-  // an array. `close` is the token type that ends the list, and
-  // `allowEmpty` can be turned on to allow subsequent commas with
-  // nothing in between them to be parsed as `null` (which is needed
-  // for array literals).
-
-  pp$3.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {
-    var elts = [], first = true;
-    while (!this.eat(close)) {
-      if (!first) {
-        this.expect(types.comma);
-        if (allowTrailingComma && this.afterTrailingComma(close)) { break }
-      } else { first = false; }
-
-      var elt = (void 0);
-      if (allowEmpty && this.type === types.comma)
-        { elt = null; }
-      else if (this.type === types.ellipsis) {
-        elt = this.parseSpread(refDestructuringErrors);
-        if (refDestructuringErrors && this.type === types.comma && refDestructuringErrors.trailingComma < 0)
-          { refDestructuringErrors.trailingComma = this.start; }
-      } else {
-        elt = this.parseMaybeAssign(false, refDestructuringErrors);
-      }
-      elts.push(elt);
-    }
-    return elts
-  };
-
-  pp$3.checkUnreserved = function(ref) {
-    var start = ref.start;
-    var end = ref.end;
-    var name = ref.name;
-
-    if (this.inGenerator && name === "yield")
-      { this.raiseRecoverable(start, "Cannot use 'yield' as identifier inside a generator"); }
-    if (this.inAsync && name === "await")
-      { this.raiseRecoverable(start, "Cannot use 'await' as identifier inside an async function"); }
-    if (this.keywords.test(name))
-      { this.raise(start, ("Unexpected keyword '" + name + "'")); }
-    if (this.options.ecmaVersion < 6 &&
-      this.input.slice(start, end).indexOf("\\") !== -1) { return }
-    var re = this.strict ? this.reservedWordsStrict : this.reservedWords;
-    if (re.test(name)) {
-      if (!this.inAsync && name === "await")
-        { this.raiseRecoverable(start, "Cannot use keyword 'await' outside an async function"); }
-      this.raiseRecoverable(start, ("The keyword '" + name + "' is reserved"));
-    }
-  };
-
-  // Parse the next token as an identifier. If `liberal` is true (used
-  // when parsing properties), it will also convert keywords into
-  // identifiers.
-
-  pp$3.parseIdent = function(liberal, isBinding) {
-    var node = this.startNode();
-    if (this.type === types.name) {
-      node.name = this.value;
-    } else if (this.type.keyword) {
-      node.name = this.type.keyword;
-
-      // To fix https://github.com/acornjs/acorn/issues/575
-      // `class` and `function` keywords push new context into this.context.
-      // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.
-      // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword
-      if ((node.name === "class" || node.name === "function") &&
-          (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {
-        this.context.pop();
-      }
-    } else {
-      this.unexpected();
-    }
-    this.next();
-    this.finishNode(node, "Identifier");
-    if (!liberal) {
-      this.checkUnreserved(node);
-      if (node.name === "await" && !this.awaitIdentPos)
-        { this.awaitIdentPos = node.start; }
-    }
-    return node
-  };
-
-  // Parses yield expression inside generator.
-
-  pp$3.parseYield = function(noIn) {
-    if (!this.yieldPos) { this.yieldPos = this.start; }
-
-    var node = this.startNode();
-    this.next();
-    if (this.type === types.semi || this.canInsertSemicolon() || (this.type !== types.star && !this.type.startsExpr)) {
-      node.delegate = false;
-      node.argument = null;
-    } else {
-      node.delegate = this.eat(types.star);
-      node.argument = this.parseMaybeAssign(noIn);
-    }
-    return this.finishNode(node, "YieldExpression")
-  };
-
-  pp$3.parseAwait = function() {
-    if (!this.awaitPos) { this.awaitPos = this.start; }
-
-    var node = this.startNode();
-    this.next();
-    node.argument = this.parseMaybeUnary(null, true);
-    return this.finishNode(node, "AwaitExpression")
-  };
-
-  var pp$4 = Parser.prototype;
-
-  // This function is used to raise exceptions on parse errors. It
-  // takes an offset integer (into the current `input`) to indicate
-  // the location of the error, attaches the position to the end
-  // of the error message, and then raises a `SyntaxError` with that
-  // message.
-
-  pp$4.raise = function(pos, message) {
-    var loc = getLineInfo(this.input, pos);
-    message += " (" + loc.line + ":" + loc.column + ")";
-    var err = new SyntaxError(message);
-    err.pos = pos; err.loc = loc; err.raisedAt = this.pos;
-    throw err
-  };
-
-  pp$4.raiseRecoverable = pp$4.raise;
-
-  pp$4.curPosition = function() {
-    if (this.options.locations) {
-      return new Position(this.curLine, this.pos - this.lineStart)
-    }
-  };
-
-  var pp$5 = Parser.prototype;
-
-  var Scope = function Scope(flags) {
-    this.flags = flags;
-    // A list of var-declared names in the current lexical scope
-    this.var = [];
-    // A list of lexically-declared names in the current lexical scope
-    this.lexical = [];
-    // A list of lexically-declared FunctionDeclaration names in the current lexical scope
-    this.functions = [];
-  };
-
-  // The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.
-
-  pp$5.enterScope = function(flags) {
-    this.scopeStack.push(new Scope(flags));
-  };
-
-  pp$5.exitScope = function() {
-    this.scopeStack.pop();
-  };
-
-  // The spec says:
-  // > At the top level of a function, or script, function declarations are
-  // > treated like var declarations rather than like lexical declarations.
-  pp$5.treatFunctionsAsVarInScope = function(scope) {
-    return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)
-  };
-
-  pp$5.declareName = function(name, bindingType, pos) {
-    var redeclared = false;
-    if (bindingType === BIND_LEXICAL) {
-      var scope = this.currentScope();
-      redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;
-      scope.lexical.push(name);
-      if (this.inModule && (scope.flags & SCOPE_TOP))
-        { delete this.undefinedExports[name]; }
-    } else if (bindingType === BIND_SIMPLE_CATCH) {
-      var scope$1 = this.currentScope();
-      scope$1.lexical.push(name);
-    } else if (bindingType === BIND_FUNCTION) {
-      var scope$2 = this.currentScope();
-      if (this.treatFunctionsAsVar)
-        { redeclared = scope$2.lexical.indexOf(name) > -1; }
-      else
-        { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }
-      scope$2.functions.push(name);
-    } else {
-      for (var i = this.scopeStack.length - 1; i >= 0; --i) {
-        var scope$3 = this.scopeStack[i];
-        if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||
-            !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {
-          redeclared = true;
-          break
-        }
-        scope$3.var.push(name);
-        if (this.inModule && (scope$3.flags & SCOPE_TOP))
-          { delete this.undefinedExports[name]; }
-        if (scope$3.flags & SCOPE_VAR) { break }
-      }
-    }
-    if (redeclared) { this.raiseRecoverable(pos, ("Identifier '" + name + "' has already been declared")); }
-  };
-
-  pp$5.checkLocalExport = function(id) {
-    // scope.functions must be empty as Module code is always strict.
-    if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&
-        this.scopeStack[0].var.indexOf(id.name) === -1) {
-      this.undefinedExports[id.name] = id;
-    }
-  };
-
-  pp$5.currentScope = function() {
-    return this.scopeStack[this.scopeStack.length - 1]
-  };
-
-  pp$5.currentVarScope = function() {
-    for (var i = this.scopeStack.length - 1;; i--) {
-      var scope = this.scopeStack[i];
-      if (scope.flags & SCOPE_VAR) { return scope }
-    }
-  };
-
-  // Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.
-  pp$5.currentThisScope = function() {
-    for (var i = this.scopeStack.length - 1;; i--) {
-      var scope = this.scopeStack[i];
-      if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }
-    }
-  };
-
-  var Node = function Node(parser, pos, loc) {
-    this.type = "";
-    this.start = pos;
-    this.end = 0;
-    if (parser.options.locations)
-      { this.loc = new SourceLocation(parser, loc); }
-    if (parser.options.directSourceFile)
-      { this.sourceFile = parser.options.directSourceFile; }
-    if (parser.options.ranges)
-      { this.range = [pos, 0]; }
-  };
-
-  // Start an AST node, attaching a start offset.
-
-  var pp$6 = Parser.prototype;
-
-  pp$6.startNode = function() {
-    return new Node(this, this.start, this.startLoc)
-  };
-
-  pp$6.startNodeAt = function(pos, loc) {
-    return new Node(this, pos, loc)
-  };
-
-  // Finish an AST node, adding `type` and `end` properties.
-
-  function finishNodeAt(node, type, pos, loc) {
-    node.type = type;
-    node.end = pos;
-    if (this.options.locations)
-      { node.loc.end = loc; }
-    if (this.options.ranges)
-      { node.range[1] = pos; }
-    return node
-  }
-
-  pp$6.finishNode = function(node, type) {
-    return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)
-  };
-
-  // Finish node at given position
-
-  pp$6.finishNodeAt = function(node, type, pos, loc) {
-    return finishNodeAt.call(this, node, type, pos, loc)
-  };
-
-  // The algorithm used to determine whether a regexp can appear at a
-
-  var TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {
-    this.token = token;
-    this.isExpr = !!isExpr;
-    this.preserveSpace = !!preserveSpace;
-    this.override = override;
-    this.generator = !!generator;
-  };
-
-  var types$1 = {
-    b_stat: new TokContext("{", false),
-    b_expr: new TokContext("{", true),
-    b_tmpl: new TokContext("${", false),
-    p_stat: new TokContext("(", false),
-    p_expr: new TokContext("(", true),
-    q_tmpl: new TokContext("`", true, true, function (p) { return p.tryReadTemplateToken(); }),
-    f_stat: new TokContext("function", false),
-    f_expr: new TokContext("function", true),
-    f_expr_gen: new TokContext("function", true, false, null, true),
-    f_gen: new TokContext("function", false, false, null, true)
-  };
-
-  var pp$7 = Parser.prototype;
-
-  pp$7.initialContext = function() {
-    return [types$1.b_stat]
-  };
-
-  pp$7.braceIsBlock = function(prevType) {
-    var parent = this.curContext();
-    if (parent === types$1.f_expr || parent === types$1.f_stat)
-      { return true }
-    if (prevType === types.colon && (parent === types$1.b_stat || parent === types$1.b_expr))
-      { return !parent.isExpr }
-
-    // The check for `tt.name && exprAllowed` detects whether we are
-    // after a `yield` or `of` construct. See the `updateContext` for
-    // `tt.name`.
-    if (prevType === types._return || prevType === types.name && this.exprAllowed)
-      { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }
-    if (prevType === types._else || prevType === types.semi || prevType === types.eof || prevType === types.parenR || prevType === types.arrow)
-      { return true }
-    if (prevType === types.braceL)
-      { return parent === types$1.b_stat }
-    if (prevType === types._var || prevType === types._const || prevType === types.name)
-      { return false }
-    return !this.exprAllowed
-  };
-
-  pp$7.inGeneratorContext = function() {
-    for (var i = this.context.length - 1; i >= 1; i--) {
-      var context = this.context[i];
-      if (context.token === "function")
-        { return context.generator }
-    }
-    return false
-  };
-
-  pp$7.updateContext = function(prevType) {
-    var update, type = this.type;
-    if (type.keyword && prevType === types.dot)
-      { this.exprAllowed = false; }
-    else if (update = type.updateContext)
-      { update.call(this, prevType); }
-    else
-      { this.exprAllowed = type.beforeExpr; }
-  };
-
-  // Token-specific context update code
-
-  types.parenR.updateContext = types.braceR.updateContext = function() {
-    if (this.context.length === 1) {
-      this.exprAllowed = true;
-      return
-    }
-    var out = this.context.pop();
-    if (out === types$1.b_stat && this.curContext().token === "function") {
-      out = this.context.pop();
-    }
-    this.exprAllowed = !out.isExpr;
-  };
-
-  types.braceL.updateContext = function(prevType) {
-    this.context.push(this.braceIsBlock(prevType) ? types$1.b_stat : types$1.b_expr);
-    this.exprAllowed = true;
-  };
-
-  types.dollarBraceL.updateContext = function() {
-    this.context.push(types$1.b_tmpl);
-    this.exprAllowed = true;
-  };
-
-  types.parenL.updateContext = function(prevType) {
-    var statementParens = prevType === types._if || prevType === types._for || prevType === types._with || prevType === types._while;
-    this.context.push(statementParens ? types$1.p_stat : types$1.p_expr);
-    this.exprAllowed = true;
-  };
-
-  types.incDec.updateContext = function() {
-    // tokExprAllowed stays unchanged
-  };
-
-  types._function.updateContext = types._class.updateContext = function(prevType) {
-    if (prevType.beforeExpr && prevType !== types.semi && prevType !== types._else &&
-        !(prevType === types._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&
-        !((prevType === types.colon || prevType === types.braceL) && this.curContext() === types$1.b_stat))
-      { this.context.push(types$1.f_expr); }
-    else
-      { this.context.push(types$1.f_stat); }
-    this.exprAllowed = false;
-  };
-
-  types.backQuote.updateContext = function() {
-    if (this.curContext() === types$1.q_tmpl)
-      { this.context.pop(); }
-    else
-      { this.context.push(types$1.q_tmpl); }
-    this.exprAllowed = false;
-  };
-
-  types.star.updateContext = function(prevType) {
-    if (prevType === types._function) {
-      var index = this.context.length - 1;
-      if (this.context[index] === types$1.f_expr)
-        { this.context[index] = types$1.f_expr_gen; }
-      else
-        { this.context[index] = types$1.f_gen; }
-    }
-    this.exprAllowed = true;
-  };
-
-  types.name.updateContext = function(prevType) {
-    var allowed = false;
-    if (this.options.ecmaVersion >= 6 && prevType !== types.dot) {
-      if (this.value === "of" && !this.exprAllowed ||
-          this.value === "yield" && this.inGeneratorContext())
-        { allowed = true; }
-    }
-    this.exprAllowed = allowed;
-  };
-
-  // This file contains Unicode properties extracted from the ECMAScript
-  // specification. The lists are extracted like so:
-  // $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)
-
-  // #table-binary-unicode-properties
-  var ecma9BinaryProperties = "ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS";
-  var ecma10BinaryProperties = ecma9BinaryProperties + " Extended_Pictographic";
-  var ecma11BinaryProperties = ecma10BinaryProperties;
-  var unicodeBinaryProperties = {
-    9: ecma9BinaryProperties,
-    10: ecma10BinaryProperties,
-    11: ecma11BinaryProperties
-  };
-
-  // #table-unicode-general-category-values
-  var unicodeGeneralCategoryValues = "Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu";
-
-  // #table-unicode-script-values
-  var ecma9ScriptValues = "Adlam Adlm Ahom Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb";
-  var ecma10ScriptValues = ecma9ScriptValues + " Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd";
-  var ecma11ScriptValues = ecma10ScriptValues + " Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho";
-  var unicodeScriptValues = {
-    9: ecma9ScriptValues,
-    10: ecma10ScriptValues,
-    11: ecma11ScriptValues
-  };
-
-  var data = {};
-  function buildUnicodeData(ecmaVersion) {
-    var d = data[ecmaVersion] = {
-      binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + " " + unicodeGeneralCategoryValues),
-      nonBinary: {
-        General_Category: wordsRegexp(unicodeGeneralCategoryValues),
-        Script: wordsRegexp(unicodeScriptValues[ecmaVersion])
-      }
-    };
-    d.nonBinary.Script_Extensions = d.nonBinary.Script;
-
-    d.nonBinary.gc = d.nonBinary.General_Category;
-    d.nonBinary.sc = d.nonBinary.Script;
-    d.nonBinary.scx = d.nonBinary.Script_Extensions;
-  }
-  buildUnicodeData(9);
-  buildUnicodeData(10);
-  buildUnicodeData(11);
-
-  var pp$8 = Parser.prototype;
-
-  var RegExpValidationState = function RegExpValidationState(parser) {
-    this.parser = parser;
-    this.validFlags = "gim" + (parser.options.ecmaVersion >= 6 ? "uy" : "") + (parser.options.ecmaVersion >= 9 ? "s" : "");
-    this.unicodeProperties = data[parser.options.ecmaVersion >= 11 ? 11 : parser.options.ecmaVersion];
-    this.source = "";
-    this.flags = "";
-    this.start = 0;
-    this.switchU = false;
-    this.switchN = false;
-    this.pos = 0;
-    this.lastIntValue = 0;
-    this.lastStringValue = "";
-    this.lastAssertionIsQuantifiable = false;
-    this.numCapturingParens = 0;
-    this.maxBackReference = 0;
-    this.groupNames = [];
-    this.backReferenceNames = [];
-  };
-
-  RegExpValidationState.prototype.reset = function reset (start, pattern, flags) {
-    var unicode = flags.indexOf("u") !== -1;
-    this.start = start | 0;
-    this.source = pattern + "";
-    this.flags = flags;
-    this.switchU = unicode && this.parser.options.ecmaVersion >= 6;
-    this.switchN = unicode && this.parser.options.ecmaVersion >= 9;
-  };
-
-  RegExpValidationState.prototype.raise = function raise (message) {
-    this.parser.raiseRecoverable(this.start, ("Invalid regular expression: /" + (this.source) + "/: " + message));
-  };
-
-  // If u flag is given, this returns the code point at the index (it combines a surrogate pair).
-  // Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).
-  RegExpValidationState.prototype.at = function at (i) {
-    var s = this.source;
-    var l = s.length;
-    if (i >= l) {
-      return -1
-    }
-    var c = s.charCodeAt(i);
-    if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {
-      return c
-    }
-    var next = s.charCodeAt(i + 1);
-    return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c
-  };
-
-  RegExpValidationState.prototype.nextIndex = function nextIndex (i) {
-    var s = this.source;
-    var l = s.length;
-    if (i >= l) {
-      return l
-    }
-    var c = s.charCodeAt(i), next;
-    if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||
-        (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {
-      return i + 1
-    }
-    return i + 2
-  };
-
-  RegExpValidationState.prototype.current = function current () {
-    return this.at(this.pos)
-  };
-
-  RegExpValidationState.prototype.lookahead = function lookahead () {
-    return this.at(this.nextIndex(this.pos))
-  };
-
-  RegExpValidationState.prototype.advance = function advance () {
-    this.pos = this.nextIndex(this.pos);
-  };
-
-  RegExpValidationState.prototype.eat = function eat (ch) {
-    if (this.current() === ch) {
-      this.advance();
-      return true
-    }
-    return false
-  };
-
-  function codePointToString(ch) {
-    if (ch <= 0xFFFF) { return String.fromCharCode(ch) }
-    ch -= 0x10000;
-    return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00)
-  }
-
-  /**
-   * Validate the flags part of a given RegExpLiteral.
-   *
-   * @param {RegExpValidationState} state The state to validate RegExp.
-   * @returns {void}
-   */
-  pp$8.validateRegExpFlags = function(state) {
-    var validFlags = state.validFlags;
-    var flags = state.flags;
-
-    for (var i = 0; i < flags.length; i++) {
-      var flag = flags.charAt(i);
-      if (validFlags.indexOf(flag) === -1) {
-        this.raise(state.start, "Invalid regular expression flag");
-      }
-      if (flags.indexOf(flag, i + 1) > -1) {
-        this.raise(state.start, "Duplicate regular expression flag");
-      }
-    }
-  };
-
-  /**
-   * Validate the pattern part of a given RegExpLiteral.
-   *
-   * @param {RegExpValidationState} state The state to validate RegExp.
-   * @returns {void}
-   */
-  pp$8.validateRegExpPattern = function(state) {
-    this.regexp_pattern(state);
-
-    // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of
-    // parsing contains a |GroupName|, reparse with the goal symbol
-    // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*
-    // exception if _P_ did not conform to the grammar, if any elements of _P_
-    // were not matched by the parse, or if any Early Error conditions exist.
-    if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {
-      state.switchN = true;
-      this.regexp_pattern(state);
-    }
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern
-  pp$8.regexp_pattern = function(state) {
-    state.pos = 0;
-    state.lastIntValue = 0;
-    state.lastStringValue = "";
-    state.lastAssertionIsQuantifiable = false;
-    state.numCapturingParens = 0;
-    state.maxBackReference = 0;
-    state.groupNames.length = 0;
-    state.backReferenceNames.length = 0;
-
-    this.regexp_disjunction(state);
-
-    if (state.pos !== state.source.length) {
-      // Make the same messages as V8.
-      if (state.eat(0x29 /* ) */)) {
-        state.raise("Unmatched ')'");
-      }
-      if (state.eat(0x5D /* [ */) || state.eat(0x7D /* } */)) {
-        state.raise("Lone quantifier brackets");
-      }
-    }
-    if (state.maxBackReference > state.numCapturingParens) {
-      state.raise("Invalid escape");
-    }
-    for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {
-      var name = list[i];
-
-      if (state.groupNames.indexOf(name) === -1) {
-        state.raise("Invalid named capture referenced");
-      }
-    }
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction
-  pp$8.regexp_disjunction = function(state) {
-    this.regexp_alternative(state);
-    while (state.eat(0x7C /* | */)) {
-      this.regexp_alternative(state);
-    }
-
-    // Make the same message as V8.
-    if (this.regexp_eatQuantifier(state, true)) {
-      state.raise("Nothing to repeat");
-    }
-    if (state.eat(0x7B /* { */)) {
-      state.raise("Lone quantifier brackets");
-    }
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative
-  pp$8.regexp_alternative = function(state) {
-    while (state.pos < state.source.length && this.regexp_eatTerm(state))
-      { }
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term
-  pp$8.regexp_eatTerm = function(state) {
-    if (this.regexp_eatAssertion(state)) {
-      // Handle `QuantifiableAssertion Quantifier` alternative.
-      // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion
-      // is a QuantifiableAssertion.
-      if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {
-        // Make the same message as V8.
-        if (state.switchU) {
-          state.raise("Invalid quantifier");
-        }
-      }
-      return true
-    }
-
-    if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {
-      this.regexp_eatQuantifier(state);
-      return true
-    }
-
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion
-  pp$8.regexp_eatAssertion = function(state) {
-    var start = state.pos;
-    state.lastAssertionIsQuantifiable = false;
-
-    // ^, $
-    if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {
-      return true
-    }
-
-    // \b \B
-    if (state.eat(0x5C /* \ */)) {
-      if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {
-        return true
-      }
-      state.pos = start;
-    }
-
-    // Lookahead / Lookbehind
-    if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {
-      var lookbehind = false;
-      if (this.options.ecmaVersion >= 9) {
-        lookbehind = state.eat(0x3C /* < */);
-      }
-      if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {
-        this.regexp_disjunction(state);
-        if (!state.eat(0x29 /* ) */)) {
-          state.raise("Unterminated group");
-        }
-        state.lastAssertionIsQuantifiable = !lookbehind;
-        return true
-      }
-    }
-
-    state.pos = start;
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier
-  pp$8.regexp_eatQuantifier = function(state, noError) {
-    if ( noError === void 0 ) noError = false;
-
-    if (this.regexp_eatQuantifierPrefix(state, noError)) {
-      state.eat(0x3F /* ? */);
-      return true
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix
-  pp$8.regexp_eatQuantifierPrefix = function(state, noError) {
-    return (
-      state.eat(0x2A /* * */) ||
-      state.eat(0x2B /* + */) ||
-      state.eat(0x3F /* ? */) ||
-      this.regexp_eatBracedQuantifier(state, noError)
-    )
-  };
-  pp$8.regexp_eatBracedQuantifier = function(state, noError) {
-    var start = state.pos;
-    if (state.eat(0x7B /* { */)) {
-      var min = 0, max = -1;
-      if (this.regexp_eatDecimalDigits(state)) {
-        min = state.lastIntValue;
-        if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {
-          max = state.lastIntValue;
-        }
-        if (state.eat(0x7D /* } */)) {
-          // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term
-          if (max !== -1 && max < min && !noError) {
-            state.raise("numbers out of order in {} quantifier");
-          }
-          return true
-        }
-      }
-      if (state.switchU && !noError) {
-        state.raise("Incomplete quantifier");
-      }
-      state.pos = start;
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom
-  pp$8.regexp_eatAtom = function(state) {
-    return (
-      this.regexp_eatPatternCharacters(state) ||
-      state.eat(0x2E /* . */) ||
-      this.regexp_eatReverseSolidusAtomEscape(state) ||
-      this.regexp_eatCharacterClass(state) ||
-      this.regexp_eatUncapturingGroup(state) ||
-      this.regexp_eatCapturingGroup(state)
-    )
-  };
-  pp$8.regexp_eatReverseSolidusAtomEscape = function(state) {
-    var start = state.pos;
-    if (state.eat(0x5C /* \ */)) {
-      if (this.regexp_eatAtomEscape(state)) {
-        return true
-      }
-      state.pos = start;
-    }
-    return false
-  };
-  pp$8.regexp_eatUncapturingGroup = function(state) {
-    var start = state.pos;
-    if (state.eat(0x28 /* ( */)) {
-      if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {
-        this.regexp_disjunction(state);
-        if (state.eat(0x29 /* ) */)) {
-          return true
-        }
-        state.raise("Unterminated group");
-      }
-      state.pos = start;
-    }
-    return false
-  };
-  pp$8.regexp_eatCapturingGroup = function(state) {
-    if (state.eat(0x28 /* ( */)) {
-      if (this.options.ecmaVersion >= 9) {
-        this.regexp_groupSpecifier(state);
-      } else if (state.current() === 0x3F /* ? */) {
-        state.raise("Invalid group");
-      }
-      this.regexp_disjunction(state);
-      if (state.eat(0x29 /* ) */)) {
-        state.numCapturingParens += 1;
-        return true
-      }
-      state.raise("Unterminated group");
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom
-  pp$8.regexp_eatExtendedAtom = function(state) {
-    return (
-      state.eat(0x2E /* . */) ||
-      this.regexp_eatReverseSolidusAtomEscape(state) ||
-      this.regexp_eatCharacterClass(state) ||
-      this.regexp_eatUncapturingGroup(state) ||
-      this.regexp_eatCapturingGroup(state) ||
-      this.regexp_eatInvalidBracedQuantifier(state) ||
-      this.regexp_eatExtendedPatternCharacter(state)
-    )
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier
-  pp$8.regexp_eatInvalidBracedQuantifier = function(state) {
-    if (this.regexp_eatBracedQuantifier(state, true)) {
-      state.raise("Nothing to repeat");
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter
-  pp$8.regexp_eatSyntaxCharacter = function(state) {
-    var ch = state.current();
-    if (isSyntaxCharacter(ch)) {
-      state.lastIntValue = ch;
-      state.advance();
-      return true
-    }
-    return false
-  };
-  function isSyntaxCharacter(ch) {
-    return (
-      ch === 0x24 /* $ */ ||
-      ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||
-      ch === 0x2E /* . */ ||
-      ch === 0x3F /* ? */ ||
-      ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||
-      ch >= 0x7B /* { */ && ch <= 0x7D /* } */
-    )
-  }
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter
-  // But eat eager.
-  pp$8.regexp_eatPatternCharacters = function(state) {
-    var start = state.pos;
-    var ch = 0;
-    while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {
-      state.advance();
-    }
-    return state.pos !== start
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter
-  pp$8.regexp_eatExtendedPatternCharacter = function(state) {
-    var ch = state.current();
-    if (
-      ch !== -1 &&
-      ch !== 0x24 /* $ */ &&
-      !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&
-      ch !== 0x2E /* . */ &&
-      ch !== 0x3F /* ? */ &&
-      ch !== 0x5B /* [ */ &&
-      ch !== 0x5E /* ^ */ &&
-      ch !== 0x7C /* | */
-    ) {
-      state.advance();
-      return true
-    }
-    return false
-  };
-
-  // GroupSpecifier[U] ::
-  //   [empty]
-  //   `?` GroupName[?U]
-  pp$8.regexp_groupSpecifier = function(state) {
-    if (state.eat(0x3F /* ? */)) {
-      if (this.regexp_eatGroupName(state)) {
-        if (state.groupNames.indexOf(state.lastStringValue) !== -1) {
-          state.raise("Duplicate capture group name");
-        }
-        state.groupNames.push(state.lastStringValue);
-        return
-      }
-      state.raise("Invalid group");
-    }
-  };
-
-  // GroupName[U] ::
-  //   `<` RegExpIdentifierName[?U] `>`
-  // Note: this updates `state.lastStringValue` property with the eaten name.
-  pp$8.regexp_eatGroupName = function(state) {
-    state.lastStringValue = "";
-    if (state.eat(0x3C /* < */)) {
-      if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {
-        return true
-      }
-      state.raise("Invalid capture group name");
-    }
-    return false
-  };
-
-  // RegExpIdentifierName[U] ::
-  //   RegExpIdentifierStart[?U]
-  //   RegExpIdentifierName[?U] RegExpIdentifierPart[?U]
-  // Note: this updates `state.lastStringValue` property with the eaten name.
-  pp$8.regexp_eatRegExpIdentifierName = function(state) {
-    state.lastStringValue = "";
-    if (this.regexp_eatRegExpIdentifierStart(state)) {
-      state.lastStringValue += codePointToString(state.lastIntValue);
-      while (this.regexp_eatRegExpIdentifierPart(state)) {
-        state.lastStringValue += codePointToString(state.lastIntValue);
-      }
-      return true
-    }
-    return false
-  };
-
-  // RegExpIdentifierStart[U] ::
-  //   UnicodeIDStart
-  //   `$`
-  //   `_`
-  //   `\` RegExpUnicodeEscapeSequence[?U]
-  pp$8.regexp_eatRegExpIdentifierStart = function(state) {
-    var start = state.pos;
-    var ch = state.current();
-    state.advance();
-
-    if (ch === 0x5C /* \ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state)) {
-      ch = state.lastIntValue;
-    }
-    if (isRegExpIdentifierStart(ch)) {
-      state.lastIntValue = ch;
-      return true
-    }
-
-    state.pos = start;
-    return false
-  };
-  function isRegExpIdentifierStart(ch) {
-    return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */
-  }
-
-  // RegExpIdentifierPart[U] ::
-  //   UnicodeIDContinue
-  //   `$`
-  //   `_`
-  //   `\` RegExpUnicodeEscapeSequence[?U]
-  //   <ZWNJ>
-  //   <ZWJ>
-  pp$8.regexp_eatRegExpIdentifierPart = function(state) {
-    var start = state.pos;
-    var ch = state.current();
-    state.advance();
-
-    if (ch === 0x5C /* \ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state)) {
-      ch = state.lastIntValue;
-    }
-    if (isRegExpIdentifierPart(ch)) {
-      state.lastIntValue = ch;
-      return true
-    }
-
-    state.pos = start;
-    return false
-  };
-  function isRegExpIdentifierPart(ch) {
-    return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */
-  }
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape
-  pp$8.regexp_eatAtomEscape = function(state) {
-    if (
-      this.regexp_eatBackReference(state) ||
-      this.regexp_eatCharacterClassEscape(state) ||
-      this.regexp_eatCharacterEscape(state) ||
-      (state.switchN && this.regexp_eatKGroupName(state))
-    ) {
-      return true
-    }
-    if (state.switchU) {
-      // Make the same message as V8.
-      if (state.current() === 0x63 /* c */) {
-        state.raise("Invalid unicode escape");
-      }
-      state.raise("Invalid escape");
-    }
-    return false
-  };
-  pp$8.regexp_eatBackReference = function(state) {
-    var start = state.pos;
-    if (this.regexp_eatDecimalEscape(state)) {
-      var n = state.lastIntValue;
-      if (state.switchU) {
-        // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape
-        if (n > state.maxBackReference) {
-          state.maxBackReference = n;
-        }
-        return true
-      }
-      if (n <= state.numCapturingParens) {
-        return true
-      }
-      state.pos = start;
-    }
-    return false
-  };
-  pp$8.regexp_eatKGroupName = function(state) {
-    if (state.eat(0x6B /* k */)) {
-      if (this.regexp_eatGroupName(state)) {
-        state.backReferenceNames.push(state.lastStringValue);
-        return true
-      }
-      state.raise("Invalid named reference");
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape
-  pp$8.regexp_eatCharacterEscape = function(state) {
-    return (
-      this.regexp_eatControlEscape(state) ||
-      this.regexp_eatCControlLetter(state) ||
-      this.regexp_eatZero(state) ||
-      this.regexp_eatHexEscapeSequence(state) ||
-      this.regexp_eatRegExpUnicodeEscapeSequence(state) ||
-      (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||
-      this.regexp_eatIdentityEscape(state)
-    )
-  };
-  pp$8.regexp_eatCControlLetter = function(state) {
-    var start = state.pos;
-    if (state.eat(0x63 /* c */)) {
-      if (this.regexp_eatControlLetter(state)) {
-        return true
-      }
-      state.pos = start;
-    }
-    return false
-  };
-  pp$8.regexp_eatZero = function(state) {
-    if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {
-      state.lastIntValue = 0;
-      state.advance();
-      return true
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape
-  pp$8.regexp_eatControlEscape = function(state) {
-    var ch = state.current();
-    if (ch === 0x74 /* t */) {
-      state.lastIntValue = 0x09; /* \t */
-      state.advance();
-      return true
-    }
-    if (ch === 0x6E /* n */) {
-      state.lastIntValue = 0x0A; /* \n */
-      state.advance();
-      return true
-    }
-    if (ch === 0x76 /* v */) {
-      state.lastIntValue = 0x0B; /* \v */
-      state.advance();
-      return true
-    }
-    if (ch === 0x66 /* f */) {
-      state.lastIntValue = 0x0C; /* \f */
-      state.advance();
-      return true
-    }
-    if (ch === 0x72 /* r */) {
-      state.lastIntValue = 0x0D; /* \r */
-      state.advance();
-      return true
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter
-  pp$8.regexp_eatControlLetter = function(state) {
-    var ch = state.current();
-    if (isControlLetter(ch)) {
-      state.lastIntValue = ch % 0x20;
-      state.advance();
-      return true
-    }
-    return false
-  };
-  function isControlLetter(ch) {
-    return (
-      (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||
-      (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)
-    )
-  }
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence
-  pp$8.regexp_eatRegExpUnicodeEscapeSequence = function(state) {
-    var start = state.pos;
-
-    if (state.eat(0x75 /* u */)) {
-      if (this.regexp_eatFixedHexDigits(state, 4)) {
-        var lead = state.lastIntValue;
-        if (state.switchU && lead >= 0xD800 && lead <= 0xDBFF) {
-          var leadSurrogateEnd = state.pos;
-          if (state.eat(0x5C /* \ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {
-            var trail = state.lastIntValue;
-            if (trail >= 0xDC00 && trail <= 0xDFFF) {
-              state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;
-              return true
-            }
-          }
-          state.pos = leadSurrogateEnd;
-          state.lastIntValue = lead;
-        }
-        return true
-      }
-      if (
-        state.switchU &&
-        state.eat(0x7B /* { */) &&
-        this.regexp_eatHexDigits(state) &&
-        state.eat(0x7D /* } */) &&
-        isValidUnicode(state.lastIntValue)
-      ) {
-        return true
-      }
-      if (state.switchU) {
-        state.raise("Invalid unicode escape");
-      }
-      state.pos = start;
-    }
-
-    return false
-  };
-  function isValidUnicode(ch) {
-    return ch >= 0 && ch <= 0x10FFFF
-  }
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape
-  pp$8.regexp_eatIdentityEscape = function(state) {
-    if (state.switchU) {
-      if (this.regexp_eatSyntaxCharacter(state)) {
-        return true
-      }
-      if (state.eat(0x2F /* / */)) {
-        state.lastIntValue = 0x2F; /* / */
-        return true
-      }
-      return false
-    }
-
-    var ch = state.current();
-    if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {
-      state.lastIntValue = ch;
-      state.advance();
-      return true
-    }
-
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape
-  pp$8.regexp_eatDecimalEscape = function(state) {
-    state.lastIntValue = 0;
-    var ch = state.current();
-    if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {
-      do {
-        state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);
-        state.advance();
-      } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)
-      return true
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape
-  pp$8.regexp_eatCharacterClassEscape = function(state) {
-    var ch = state.current();
-
-    if (isCharacterClassEscape(ch)) {
-      state.lastIntValue = -1;
-      state.advance();
-      return true
-    }
-
-    if (
-      state.switchU &&
-      this.options.ecmaVersion >= 9 &&
-      (ch === 0x50 /* P */ || ch === 0x70 /* p */)
-    ) {
-      state.lastIntValue = -1;
-      state.advance();
-      if (
-        state.eat(0x7B /* { */) &&
-        this.regexp_eatUnicodePropertyValueExpression(state) &&
-        state.eat(0x7D /* } */)
-      ) {
-        return true
-      }
-      state.raise("Invalid property name");
-    }
-
-    return false
-  };
-  function isCharacterClassEscape(ch) {
-    return (
-      ch === 0x64 /* d */ ||
-      ch === 0x44 /* D */ ||
-      ch === 0x73 /* s */ ||
-      ch === 0x53 /* S */ ||
-      ch === 0x77 /* w */ ||
-      ch === 0x57 /* W */
-    )
-  }
-
-  // UnicodePropertyValueExpression ::
-  //   UnicodePropertyName `=` UnicodePropertyValue
-  //   LoneUnicodePropertyNameOrValue
-  pp$8.regexp_eatUnicodePropertyValueExpression = function(state) {
-    var start = state.pos;
-
-    // UnicodePropertyName `=` UnicodePropertyValue
-    if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {
-      var name = state.lastStringValue;
-      if (this.regexp_eatUnicodePropertyValue(state)) {
-        var value = state.lastStringValue;
-        this.regexp_validateUnicodePropertyNameAndValue(state, name, value);
-        return true
-      }
-    }
-    state.pos = start;
-
-    // LoneUnicodePropertyNameOrValue
-    if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {
-      var nameOrValue = state.lastStringValue;
-      this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue);
-      return true
-    }
-    return false
-  };
-  pp$8.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {
-    if (!has(state.unicodeProperties.nonBinary, name))
-      { state.raise("Invalid property name"); }
-    if (!state.unicodeProperties.nonBinary[name].test(value))
-      { state.raise("Invalid property value"); }
-  };
-  pp$8.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {
-    if (!state.unicodeProperties.binary.test(nameOrValue))
-      { state.raise("Invalid property name"); }
-  };
-
-  // UnicodePropertyName ::
-  //   UnicodePropertyNameCharacters
-  pp$8.regexp_eatUnicodePropertyName = function(state) {
-    var ch = 0;
-    state.lastStringValue = "";
-    while (isUnicodePropertyNameCharacter(ch = state.current())) {
-      state.lastStringValue += codePointToString(ch);
-      state.advance();
-    }
-    return state.lastStringValue !== ""
-  };
-  function isUnicodePropertyNameCharacter(ch) {
-    return isControlLetter(ch) || ch === 0x5F /* _ */
-  }
-
-  // UnicodePropertyValue ::
-  //   UnicodePropertyValueCharacters
-  pp$8.regexp_eatUnicodePropertyValue = function(state) {
-    var ch = 0;
-    state.lastStringValue = "";
-    while (isUnicodePropertyValueCharacter(ch = state.current())) {
-      state.lastStringValue += codePointToString(ch);
-      state.advance();
-    }
-    return state.lastStringValue !== ""
-  };
-  function isUnicodePropertyValueCharacter(ch) {
-    return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)
-  }
-
-  // LoneUnicodePropertyNameOrValue ::
-  //   UnicodePropertyValueCharacters
-  pp$8.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {
-    return this.regexp_eatUnicodePropertyValue(state)
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass
-  pp$8.regexp_eatCharacterClass = function(state) {
-    if (state.eat(0x5B /* [ */)) {
-      state.eat(0x5E /* ^ */);
-      this.regexp_classRanges(state);
-      if (state.eat(0x5D /* [ */)) {
-        return true
-      }
-      // Unreachable since it threw "unterminated regular expression" error before.
-      state.raise("Unterminated character class");
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash
-  pp$8.regexp_classRanges = function(state) {
-    while (this.regexp_eatClassAtom(state)) {
-      var left = state.lastIntValue;
-      if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {
-        var right = state.lastIntValue;
-        if (state.switchU && (left === -1 || right === -1)) {
-          state.raise("Invalid character class");
-        }
-        if (left !== -1 && right !== -1 && left > right) {
-          state.raise("Range out of order in character class");
-        }
-      }
-    }
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash
-  pp$8.regexp_eatClassAtom = function(state) {
-    var start = state.pos;
-
-    if (state.eat(0x5C /* \ */)) {
-      if (this.regexp_eatClassEscape(state)) {
-        return true
-      }
-      if (state.switchU) {
-        // Make the same message as V8.
-        var ch$1 = state.current();
-        if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {
-          state.raise("Invalid class escape");
-        }
-        state.raise("Invalid escape");
-      }
-      state.pos = start;
-    }
-
-    var ch = state.current();
-    if (ch !== 0x5D /* [ */) {
-      state.lastIntValue = ch;
-      state.advance();
-      return true
-    }
-
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape
-  pp$8.regexp_eatClassEscape = function(state) {
-    var start = state.pos;
-
-    if (state.eat(0x62 /* b */)) {
-      state.lastIntValue = 0x08; /* <BS> */
-      return true
-    }
-
-    if (state.switchU && state.eat(0x2D /* - */)) {
-      state.lastIntValue = 0x2D; /* - */
-      return true
-    }
-
-    if (!state.switchU && state.eat(0x63 /* c */)) {
-      if (this.regexp_eatClassControlLetter(state)) {
-        return true
-      }
-      state.pos = start;
-    }
-
-    return (
-      this.regexp_eatCharacterClassEscape(state) ||
-      this.regexp_eatCharacterEscape(state)
-    )
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter
-  pp$8.regexp_eatClassControlLetter = function(state) {
-    var ch = state.current();
-    if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {
-      state.lastIntValue = ch % 0x20;
-      state.advance();
-      return true
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence
-  pp$8.regexp_eatHexEscapeSequence = function(state) {
-    var start = state.pos;
-    if (state.eat(0x78 /* x */)) {
-      if (this.regexp_eatFixedHexDigits(state, 2)) {
-        return true
-      }
-      if (state.switchU) {
-        state.raise("Invalid escape");
-      }
-      state.pos = start;
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits
-  pp$8.regexp_eatDecimalDigits = function(state) {
-    var start = state.pos;
-    var ch = 0;
-    state.lastIntValue = 0;
-    while (isDecimalDigit(ch = state.current())) {
-      state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);
-      state.advance();
-    }
-    return state.pos !== start
-  };
-  function isDecimalDigit(ch) {
-    return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */
-  }
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits
-  pp$8.regexp_eatHexDigits = function(state) {
-    var start = state.pos;
-    var ch = 0;
-    state.lastIntValue = 0;
-    while (isHexDigit(ch = state.current())) {
-      state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);
-      state.advance();
-    }
-    return state.pos !== start
-  };
-  function isHexDigit(ch) {
-    return (
-      (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||
-      (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||
-      (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)
-    )
-  }
-  function hexToInt(ch) {
-    if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {
-      return 10 + (ch - 0x41 /* A */)
-    }
-    if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {
-      return 10 + (ch - 0x61 /* a */)
-    }
-    return ch - 0x30 /* 0 */
-  }
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence
-  // Allows only 0-377(octal) i.e. 0-255(decimal).
-  pp$8.regexp_eatLegacyOctalEscapeSequence = function(state) {
-    if (this.regexp_eatOctalDigit(state)) {
-      var n1 = state.lastIntValue;
-      if (this.regexp_eatOctalDigit(state)) {
-        var n2 = state.lastIntValue;
-        if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {
-          state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;
-        } else {
-          state.lastIntValue = n1 * 8 + n2;
-        }
-      } else {
-        state.lastIntValue = n1;
-      }
-      return true
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit
-  pp$8.regexp_eatOctalDigit = function(state) {
-    var ch = state.current();
-    if (isOctalDigit(ch)) {
-      state.lastIntValue = ch - 0x30; /* 0 */
-      state.advance();
-      return true
-    }
-    state.lastIntValue = 0;
-    return false
-  };
-  function isOctalDigit(ch) {
-    return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */
-  }
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit
-  // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence
-  pp$8.regexp_eatFixedHexDigits = function(state, length) {
-    var start = state.pos;
-    state.lastIntValue = 0;
-    for (var i = 0; i < length; ++i) {
-      var ch = state.current();
-      if (!isHexDigit(ch)) {
-        state.pos = start;
-        return false
-      }
-      state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);
-      state.advance();
-    }
-    return true
-  };
-
-  // Object type used to represent tokens. Note that normally, tokens
-  // simply exist as properties on the parser object. This is only
-  // used for the onToken callback and the external tokenizer.
-
-  var Token = function Token(p) {
-    this.type = p.type;
-    this.value = p.value;
-    this.start = p.start;
-    this.end = p.end;
-    if (p.options.locations)
-      { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }
-    if (p.options.ranges)
-      { this.range = [p.start, p.end]; }
-  };
-
-  // ## Tokenizer
-
-  var pp$9 = Parser.prototype;
-
-  // Move to the next token
-
-  pp$9.next = function() {
-    if (this.options.onToken)
-      { this.options.onToken(new Token(this)); }
-
-    this.lastTokEnd = this.end;
-    this.lastTokStart = this.start;
-    this.lastTokEndLoc = this.endLoc;
-    this.lastTokStartLoc = this.startLoc;
-    this.nextToken();
-  };
-
-  pp$9.getToken = function() {
-    this.next();
-    return new Token(this)
-  };
-
-  // If we're in an ES6 environment, make parsers iterable
-  if (typeof Symbol !== "undefined")
-    { pp$9[Symbol.iterator] = function() {
-      var this$1 = this;
-
-      return {
-        next: function () {
-          var token = this$1.getToken();
-          return {
-            done: token.type === types.eof,
-            value: token
-          }
-        }
-      }
-    }; }
-
-  // Toggle strict mode. Re-reads the next number or string to please
-  // pedantic tests (`"use strict"; 010;` should fail).
-
-  pp$9.curContext = function() {
-    return this.context[this.context.length - 1]
-  };
-
-  // Read a single token, updating the parser object's token-related
-  // properties.
-
-  pp$9.nextToken = function() {
-    var curContext = this.curContext();
-    if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }
-
-    this.start = this.pos;
-    if (this.options.locations) { this.startLoc = this.curPosition(); }
-    if (this.pos >= this.input.length) { return this.finishToken(types.eof) }
-
-    if (curContext.override) { return curContext.override(this) }
-    else { this.readToken(this.fullCharCodeAtPos()); }
-  };
-
-  pp$9.readToken = function(code) {
-    // Identifier or keyword. '\uXXXX' sequences are allowed in
-    // identifiers, so '\' also dispatches to that.
-    if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\' */)
-      { return this.readWord() }
-
-    return this.getTokenFromCode(code)
-  };
-
-  pp$9.fullCharCodeAtPos = function() {
-    var code = this.input.charCodeAt(this.pos);
-    if (code <= 0xd7ff || code >= 0xe000) { return code }
-    var next = this.input.charCodeAt(this.pos + 1);
-    return (code << 10) + next - 0x35fdc00
-  };
-
-  pp$9.skipBlockComment = function() {
-    var startLoc = this.options.onComment && this.curPosition();
-    var start = this.pos, end = this.input.indexOf("*/", this.pos += 2);
-    if (end === -1) { this.raise(this.pos - 2, "Unterminated comment"); }
-    this.pos = end + 2;
-    if (this.options.locations) {
-      lineBreakG.lastIndex = start;
-      var match;
-      while ((match = lineBreakG.exec(this.input)) && match.index < this.pos) {
-        ++this.curLine;
-        this.lineStart = match.index + match[0].length;
-      }
-    }
-    if (this.options.onComment)
-      { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,
-                             startLoc, this.curPosition()); }
-  };
-
-  pp$9.skipLineComment = function(startSkip) {
-    var start = this.pos;
-    var startLoc = this.options.onComment && this.curPosition();
-    var ch = this.input.charCodeAt(this.pos += startSkip);
-    while (this.pos < this.input.length && !isNewLine(ch)) {
-      ch = this.input.charCodeAt(++this.pos);
-    }
-    if (this.options.onComment)
-      { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,
-                             startLoc, this.curPosition()); }
-  };
-
-  // Called at the start of the parse and after every token. Skips
-  // whitespace and comments, and.
-
-  pp$9.skipSpace = function() {
-    loop: while (this.pos < this.input.length) {
-      var ch = this.input.charCodeAt(this.pos);
-      switch (ch) {
-      case 32: case 160: // ' '
-        ++this.pos;
-        break
-      case 13:
-        if (this.input.charCodeAt(this.pos + 1) === 10) {
-          ++this.pos;
-        }
-      case 10: case 8232: case 8233:
-        ++this.pos;
-        if (this.options.locations) {
-          ++this.curLine;
-          this.lineStart = this.pos;
-        }
-        break
-      case 47: // '/'
-        switch (this.input.charCodeAt(this.pos + 1)) {
-        case 42: // '*'
-          this.skipBlockComment();
-          break
-        case 47:
-          this.skipLineComment(2);
-          break
-        default:
-          break loop
-        }
-        break
-      default:
-        if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {
-          ++this.pos;
-        } else {
-          break loop
-        }
-      }
-    }
-  };
-
-  // Called at the end of every token. Sets `end`, `val`, and
-  // maintains `context` and `exprAllowed`, and skips the space after
-  // the token, so that the next one's `start` will point at the
-  // right position.
-
-  pp$9.finishToken = function(type, val) {
-    this.end = this.pos;
-    if (this.options.locations) { this.endLoc = this.curPosition(); }
-    var prevType = this.type;
-    this.type = type;
-    this.value = val;
-
-    this.updateContext(prevType);
-  };
-
-  // ### Token reading
-
-  // This is the function that is called to fetch the next token. It
-  // is somewhat obscure, because it works in character codes rather
-  // than characters, and because operator parsing has been inlined
-  // into it.
-  //
-  // All in the name of speed.
-  //
-  pp$9.readToken_dot = function() {
-    var next = this.input.charCodeAt(this.pos + 1);
-    if (next >= 48 && next <= 57) { return this.readNumber(true) }
-    var next2 = this.input.charCodeAt(this.pos + 2);
-    if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'
-      this.pos += 3;
-      return this.finishToken(types.ellipsis)
-    } else {
-      ++this.pos;
-      return this.finishToken(types.dot)
-    }
-  };
-
-  pp$9.readToken_slash = function() { // '/'
-    var next = this.input.charCodeAt(this.pos + 1);
-    if (this.exprAllowed) { ++this.pos; return this.readRegexp() }
-    if (next === 61) { return this.finishOp(types.assign, 2) }
-    return this.finishOp(types.slash, 1)
-  };
-
-  pp$9.readToken_mult_modulo_exp = function(code) { // '%*'
-    var next = this.input.charCodeAt(this.pos + 1);
-    var size = 1;
-    var tokentype = code === 42 ? types.star : types.modulo;
-
-    // exponentiation operator ** and **=
-    if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {
-      ++size;
-      tokentype = types.starstar;
-      next = this.input.charCodeAt(this.pos + 2);
-    }
-
-    if (next === 61) { return this.finishOp(types.assign, size + 1) }
-    return this.finishOp(tokentype, size)
-  };
-
-  pp$9.readToken_pipe_amp = function(code) { // '|&'
-    var next = this.input.charCodeAt(this.pos + 1);
-    if (next === code) { return this.finishOp(code === 124 ? types.logicalOR : types.logicalAND, 2) }
-    if (next === 61) { return this.finishOp(types.assign, 2) }
-    return this.finishOp(code === 124 ? types.bitwiseOR : types.bitwiseAND, 1)
-  };
-
-  pp$9.readToken_caret = function() { // '^'
-    var next = this.input.charCodeAt(this.pos + 1);
-    if (next === 61) { return this.finishOp(types.assign, 2) }
-    return this.finishOp(types.bitwiseXOR, 1)
-  };
-
-  pp$9.readToken_plus_min = function(code) { // '+-'
-    var next = this.input.charCodeAt(this.pos + 1);
-    if (next === code) {
-      if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&
-          (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {
-        // A `-->` line comment
-        this.skipLineComment(3);
-        this.skipSpace();
-        return this.nextToken()
-      }
-      return this.finishOp(types.incDec, 2)
-    }
-    if (next === 61) { return this.finishOp(types.assign, 2) }
-    return this.finishOp(types.plusMin, 1)
-  };
-
-  pp$9.readToken_lt_gt = function(code) { // '<>'
-    var next = this.input.charCodeAt(this.pos + 1);
-    var size = 1;
-    if (next === code) {
-      size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;
-      if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types.assign, size + 1) }
-      return this.finishOp(types.bitShift, size)
-    }
-    if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&
-        this.input.charCodeAt(this.pos + 3) === 45) {
-      // `<!--`, an XML-style comment that should be interpreted as a line comment
-      this.skipLineComment(4);
-      this.skipSpace();
-      return this.nextToken()
-    }
-    if (next === 61) { size = 2; }
-    return this.finishOp(types.relational, size)
-  };
-
-  pp$9.readToken_eq_excl = function(code) { // '=!'
-    var next = this.input.charCodeAt(this.pos + 1);
-    if (next === 61) { return this.finishOp(types.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }
-    if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'
-      this.pos += 2;
-      return this.finishToken(types.arrow)
-    }
-    return this.finishOp(code === 61 ? types.eq : types.prefix, 1)
-  };
-
-  pp$9.getTokenFromCode = function(code) {
-    switch (code) {
-    // The interpretation of a dot depends on whether it is followed
-    // by a digit or another two dots.
-    case 46: // '.'
-      return this.readToken_dot()
-
-    // Punctuation tokens.
-    case 40: ++this.pos; return this.finishToken(types.parenL)
-    case 41: ++this.pos; return this.finishToken(types.parenR)
-    case 59: ++this.pos; return this.finishToken(types.semi)
-    case 44: ++this.pos; return this.finishToken(types.comma)
-    case 91: ++this.pos; return this.finishToken(types.bracketL)
-    case 93: ++this.pos; return this.finishToken(types.bracketR)
-    case 123: ++this.pos; return this.finishToken(types.braceL)
-    case 125: ++this.pos; return this.finishToken(types.braceR)
-    case 58: ++this.pos; return this.finishToken(types.colon)
-    case 63: ++this.pos; return this.finishToken(types.question)
-
-    case 96: // '`'
-      if (this.options.ecmaVersion < 6) { break }
-      ++this.pos;
-      return this.finishToken(types.backQuote)
-
-    case 48: // '0'
-      var next = this.input.charCodeAt(this.pos + 1);
-      if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number
-      if (this.options.ecmaVersion >= 6) {
-        if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number
-        if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number
-      }
-
-    // Anything else beginning with a digit is an integer, octal
-    // number, or float.
-    case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9
-      return this.readNumber(false)
-
-    // Quotes produce strings.
-    case 34: case 39: // '"', "'"
-      return this.readString(code)
-
-    // Operators are parsed inline in tiny state machines. '=' (61) is
-    // often referred to. `finishOp` simply skips the amount of
-    // characters it is given as second argument, and returns a token
-    // of the type given by its first argument.
-
-    case 47: // '/'
-      return this.readToken_slash()
-
-    case 37: case 42: // '%*'
-      return this.readToken_mult_modulo_exp(code)
-
-    case 124: case 38: // '|&'
-      return this.readToken_pipe_amp(code)
-
-    case 94: // '^'
-      return this.readToken_caret()
-
-    case 43: case 45: // '+-'
-      return this.readToken_plus_min(code)
-
-    case 60: case 62: // '<>'
-      return this.readToken_lt_gt(code)
-
-    case 61: case 33: // '=!'
-      return this.readToken_eq_excl(code)
-
-    case 126: // '~'
-      return this.finishOp(types.prefix, 1)
-    }
-
-    this.raise(this.pos, "Unexpected character '" + codePointToString$1(code) + "'");
-  };
-
-  pp$9.finishOp = function(type, size) {
-    var str = this.input.slice(this.pos, this.pos + size);
-    this.pos += size;
-    return this.finishToken(type, str)
-  };
-
-  pp$9.readRegexp = function() {
-    var escaped, inClass, start = this.pos;
-    for (;;) {
-      if (this.pos >= this.input.length) { this.raise(start, "Unterminated regular expression"); }
-      var ch = this.input.charAt(this.pos);
-      if (lineBreak.test(ch)) { this.raise(start, "Unterminated regular expression"); }
-      if (!escaped) {
-        if (ch === "[") { inClass = true; }
-        else if (ch === "]" && inClass) { inClass = false; }
-        else if (ch === "/" && !inClass) { break }
-        escaped = ch === "\\";
-      } else { escaped = false; }
-      ++this.pos;
-    }
-    var pattern = this.input.slice(start, this.pos);
-    ++this.pos;
-    var flagsStart = this.pos;
-    var flags = this.readWord1();
-    if (this.containsEsc) { this.unexpected(flagsStart); }
-
-    // Validate pattern
-    var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));
-    state.reset(start, pattern, flags);
-    this.validateRegExpFlags(state);
-    this.validateRegExpPattern(state);
-
-    // Create Literal#value property value.
-    var value = null;
-    try {
-      value = new RegExp(pattern, flags);
-    } catch (e) {
-      // ESTree requires null if it failed to instantiate RegExp object.
-      // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral
-    }
-
-    return this.finishToken(types.regexp, {pattern: pattern, flags: flags, value: value})
-  };
-
-  // Read an integer in the given radix. Return null if zero digits
-  // were read, the integer value otherwise. When `len` is given, this
-  // will return `null` unless the integer has exactly `len` digits.
-
-  pp$9.readInt = function(radix, len) {
-    var start = this.pos, total = 0;
-    for (var i = 0, e = len == null ? Infinity : len; i < e; ++i) {
-      var code = this.input.charCodeAt(this.pos), val = (void 0);
-      if (code >= 97) { val = code - 97 + 10; } // a
-      else if (code >= 65) { val = code - 65 + 10; } // A
-      else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9
-      else { val = Infinity; }
-      if (val >= radix) { break }
-      ++this.pos;
-      total = total * radix + val;
-    }
-    if (this.pos === start || len != null && this.pos - start !== len) { return null }
-
-    return total
-  };
-
-  pp$9.readRadixNumber = function(radix) {
-    var start = this.pos;
-    this.pos += 2; // 0x
-    var val = this.readInt(radix);
-    if (val == null) { this.raise(this.start + 2, "Expected number in radix " + radix); }
-    if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {
-      val = typeof BigInt !== "undefined" ? BigInt(this.input.slice(start, this.pos)) : null;
-      ++this.pos;
-    } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }
-    return this.finishToken(types.num, val)
-  };
-
-  // Read an integer, octal integer, or floating-point number.
-
-  pp$9.readNumber = function(startsWithDot) {
-    var start = this.pos;
-    if (!startsWithDot && this.readInt(10) === null) { this.raise(start, "Invalid number"); }
-    var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;
-    if (octal && this.strict) { this.raise(start, "Invalid number"); }
-    if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }
-    var next = this.input.charCodeAt(this.pos);
-    if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {
-      var str$1 = this.input.slice(start, this.pos);
-      var val$1 = typeof BigInt !== "undefined" ? BigInt(str$1) : null;
-      ++this.pos;
-      if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }
-      return this.finishToken(types.num, val$1)
-    }
-    if (next === 46 && !octal) { // '.'
-      ++this.pos;
-      this.readInt(10);
-      next = this.input.charCodeAt(this.pos);
-    }
-    if ((next === 69 || next === 101) && !octal) { // 'eE'
-      next = this.input.charCodeAt(++this.pos);
-      if (next === 43 || next === 45) { ++this.pos; } // '+-'
-      if (this.readInt(10) === null) { this.raise(start, "Invalid number"); }
-    }
-    if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }
-
-    var str = this.input.slice(start, this.pos);
-    var val = octal ? parseInt(str, 8) : parseFloat(str);
-    return this.finishToken(types.num, val)
-  };
-
-  // Read a string value, interpreting backslash-escapes.
-
-  pp$9.readCodePoint = function() {
-    var ch = this.input.charCodeAt(this.pos), code;
-
-    if (ch === 123) { // '{'
-      if (this.options.ecmaVersion < 6) { this.unexpected(); }
-      var codePos = ++this.pos;
-      code = this.readHexChar(this.input.indexOf("}", this.pos) - this.pos);
-      ++this.pos;
-      if (code > 0x10FFFF) { this.invalidStringToken(codePos, "Code point out of bounds"); }
-    } else {
-      code = this.readHexChar(4);
-    }
-    return code
-  };
-
-  function codePointToString$1(code) {
-    // UTF-16 Decoding
-    if (code <= 0xFFFF) { return String.fromCharCode(code) }
-    code -= 0x10000;
-    return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)
-  }
-
-  pp$9.readString = function(quote) {
-    var out = "", chunkStart = ++this.pos;
-    for (;;) {
-      if (this.pos >= this.input.length) { this.raise(this.start, "Unterminated string constant"); }
-      var ch = this.input.charCodeAt(this.pos);
-      if (ch === quote) { break }
-      if (ch === 92) { // '\'
-        out += this.input.slice(chunkStart, this.pos);
-        out += this.readEscapedChar(false);
-        chunkStart = this.pos;
-      } else {
-        if (isNewLine(ch, this.options.ecmaVersion >= 10)) { this.raise(this.start, "Unterminated string constant"); }
-        ++this.pos;
-      }
-    }
-    out += this.input.slice(chunkStart, this.pos++);
-    return this.finishToken(types.string, out)
-  };
-
-  // Reads template string tokens.
-
-  var INVALID_TEMPLATE_ESCAPE_ERROR = {};
-
-  pp$9.tryReadTemplateToken = function() {
-    this.inTemplateElement = true;
-    try {
-      this.readTmplToken();
-    } catch (err) {
-      if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {
-        this.readInvalidTemplateToken();
-      } else {
-        throw err
-      }
-    }
-
-    this.inTemplateElement = false;
-  };
-
-  pp$9.invalidStringToken = function(position, message) {
-    if (this.inTemplateElement && this.options.ecmaVersion >= 9) {
-      throw INVALID_TEMPLATE_ESCAPE_ERROR
-    } else {
-      this.raise(position, message);
-    }
-  };
-
-  pp$9.readTmplToken = function() {
-    var out = "", chunkStart = this.pos;
-    for (;;) {
-      if (this.pos >= this.input.length) { this.raise(this.start, "Unterminated template"); }
-      var ch = this.input.charCodeAt(this.pos);
-      if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'
-        if (this.pos === this.start && (this.type === types.template || this.type === types.invalidTemplate)) {
-          if (ch === 36) {
-            this.pos += 2;
-            return this.finishToken(types.dollarBraceL)
-          } else {
-            ++this.pos;
-            return this.finishToken(types.backQuote)
-          }
-        }
-        out += this.input.slice(chunkStart, this.pos);
-        return this.finishToken(types.template, out)
-      }
-      if (ch === 92) { // '\'
-        out += this.input.slice(chunkStart, this.pos);
-        out += this.readEscapedChar(true);
-        chunkStart = this.pos;
-      } else if (isNewLine(ch)) {
-        out += this.input.slice(chunkStart, this.pos);
-        ++this.pos;
-        switch (ch) {
-        case 13:
-          if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }
-        case 10:
-          out += "\n";
-          break
-        default:
-          out += String.fromCharCode(ch);
-          break
-        }
-        if (this.options.locations) {
-          ++this.curLine;
-          this.lineStart = this.pos;
-        }
-        chunkStart = this.pos;
-      } else {
-        ++this.pos;
-      }
-    }
-  };
-
-  // Reads a template token to search for the end, without validating any escape sequences
-  pp$9.readInvalidTemplateToken = function() {
-    for (; this.pos < this.input.length; this.pos++) {
-      switch (this.input[this.pos]) {
-      case "\\":
-        ++this.pos;
-        break
-
-      case "$":
-        if (this.input[this.pos + 1] !== "{") {
-          break
-        }
-      // falls through
-
-      case "`":
-        return this.finishToken(types.invalidTemplate, this.input.slice(this.start, this.pos))
-
-      // no default
-      }
-    }
-    this.raise(this.start, "Unterminated template");
-  };
-
-  // Used to read escaped characters
-
-  pp$9.readEscapedChar = function(inTemplate) {
-    var ch = this.input.charCodeAt(++this.pos);
-    ++this.pos;
-    switch (ch) {
-    case 110: return "\n" // 'n' -> '\n'
-    case 114: return "\r" // 'r' -> '\r'
-    case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'
-    case 117: return codePointToString$1(this.readCodePoint()) // 'u'
-    case 116: return "\t" // 't' -> '\t'
-    case 98: return "\b" // 'b' -> '\b'
-    case 118: return "\u000b" // 'v' -> '\u000b'
-    case 102: return "\f" // 'f' -> '\f'
-    case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\r\n'
-    case 10: // ' \n'
-      if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }
-      return ""
-    default:
-      if (ch >= 48 && ch <= 55) {
-        var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];
-        var octal = parseInt(octalStr, 8);
-        if (octal > 255) {
-          octalStr = octalStr.slice(0, -1);
-          octal = parseInt(octalStr, 8);
-        }
-        this.pos += octalStr.length - 1;
-        ch = this.input.charCodeAt(this.pos);
-        if ((octalStr !== "0" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {
-          this.invalidStringToken(
-            this.pos - 1 - octalStr.length,
-            inTemplate
-              ? "Octal literal in template string"
-              : "Octal literal in strict mode"
-          );
-        }
-        return String.fromCharCode(octal)
-      }
-      if (isNewLine(ch)) {
-        // Unicode new line characters after \ get removed from output in both
-        // template literals and strings
-        return ""
-      }
-      return String.fromCharCode(ch)
-    }
-  };
-
-  // Used to read character escape sequences ('\x', '\u', '\U').
-
-  pp$9.readHexChar = function(len) {
-    var codePos = this.pos;
-    var n = this.readInt(16, len);
-    if (n === null) { this.invalidStringToken(codePos, "Bad character escape sequence"); }
-    return n
-  };
-
-  // Read an identifier, and return it as a string. Sets `this.containsEsc`
-  // to whether the word contained a '\u' escape.
-  //
-  // Incrementally adds only escaped chars, adding other chunks as-is
-  // as a micro-optimization.
-
-  pp$9.readWord1 = function() {
-    this.containsEsc = false;
-    var word = "", first = true, chunkStart = this.pos;
-    var astral = this.options.ecmaVersion >= 6;
-    while (this.pos < this.input.length) {
-      var ch = this.fullCharCodeAtPos();
-      if (isIdentifierChar(ch, astral)) {
-        this.pos += ch <= 0xffff ? 1 : 2;
-      } else if (ch === 92) { // "\"
-        this.containsEsc = true;
-        word += this.input.slice(chunkStart, this.pos);
-        var escStart = this.pos;
-        if (this.input.charCodeAt(++this.pos) !== 117) // "u"
-          { this.invalidStringToken(this.pos, "Expecting Unicode escape sequence \\uXXXX"); }
-        ++this.pos;
-        var esc = this.readCodePoint();
-        if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))
-          { this.invalidStringToken(escStart, "Invalid Unicode escape"); }
-        word += codePointToString$1(esc);
-        chunkStart = this.pos;
-      } else {
-        break
-      }
-      first = false;
-    }
-    return word + this.input.slice(chunkStart, this.pos)
-  };
-
-  // Read an identifier or keyword token. Will check for reserved
-  // words when necessary.
-
-  pp$9.readWord = function() {
-    var word = this.readWord1();
-    var type = types.name;
-    if (this.keywords.test(word)) {
-      if (this.containsEsc) { this.raiseRecoverable(this.start, "Escape sequence in keyword " + word); }
-      type = keywords$1[word];
-    }
-    return this.finishToken(type, word)
-  };
-
-  // Acorn is a tiny, fast JavaScript parser written in JavaScript.
-
-  var version = "6.4.0";
-
-  Parser.acorn = {
-    Parser: Parser,
-    version: version,
-    defaultOptions: defaultOptions,
-    Position: Position,
-    SourceLocation: SourceLocation,
-    getLineInfo: getLineInfo,
-    Node: Node,
-    TokenType: TokenType,
-    tokTypes: types,
-    keywordTypes: keywords$1,
-    TokContext: TokContext,
-    tokContexts: types$1,
-    isIdentifierChar: isIdentifierChar,
-    isIdentifierStart: isIdentifierStart,
-    Token: Token,
-    isNewLine: isNewLine,
-    lineBreak: lineBreak,
-    lineBreakG: lineBreakG,
-    nonASCIIwhitespace: nonASCIIwhitespace
-  };
-
-  // The main exported interface (under `self.acorn` when in the
-  // browser) is a `parse` function that takes a code string and
-  // returns an abstract syntax tree as specified by [Mozilla parser
-  // API][api].
-  //
-  // [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API
-
-  function parse(input, options) {
-    return Parser.parse(input, options)
-  }
-
-  // This function tries to parse a single expression at a given
-  // offset in a string. Useful for parsing mixed-language formats
-  // that embed JavaScript expressions.
-
-  function parseExpressionAt(input, pos, options) {
-    return Parser.parseExpressionAt(input, pos, options)
-  }
-
-  // Acorn is organized as a tokenizer and a recursive-descent parser.
-  // The `tokenizer` export provides an interface to the tokenizer.
-
-  function tokenizer(input, options) {
-    return Parser.tokenizer(input, options)
-  }
-
-  exports.Node = Node;
-  exports.Parser = Parser;
-  exports.Position = Position;
-  exports.SourceLocation = SourceLocation;
-  exports.TokContext = TokContext;
-  exports.Token = Token;
-  exports.TokenType = TokenType;
-  exports.defaultOptions = defaultOptions;
-  exports.getLineInfo = getLineInfo;
-  exports.isIdentifierChar = isIdentifierChar;
-  exports.isIdentifierStart = isIdentifierStart;
-  exports.isNewLine = isNewLine;
-  exports.keywordTypes = keywords$1;
-  exports.lineBreak = lineBreak;
-  exports.lineBreakG = lineBreakG;
-  exports.nonASCIIwhitespace = nonASCIIwhitespace;
-  exports.parse = parse;
-  exports.parseExpressionAt = parseExpressionAt;
-  exports.tokContexts = types$1;
-  exports.tokTypes = types;
-  exports.tokenizer = tokenizer;
-  exports.version = version;
-
-  Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
diff --git a/templetes/node_modules/acorn/dist/acorn.js.map b/templetes/node_modules/acorn/dist/acorn.js.map
deleted file mode 100644
index 7b366e95..00000000
--- a/templetes/node_modules/acorn/dist/acorn.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"acorn.js","sources":["../src/identifier.js","../src/tokentype.js","../src/whitespace.js","../src/util.js","../src/locutil.js","../src/options.js","../src/scopeflags.js","../src/state.js","../src/parseutil.js","../src/statement.js","../src/lval.js","../src/expression.js","../src/location.js","../src/scope.js","../src/node.js","../src/tokencontext.js","../src/unicode-property-data.js","../src/regexp.js","../src/tokenize.js","../src/index.js"],"sourcesContent":["// Reserved word lists for various dialects of the language\n\nexport const reservedWords = {\n  3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n  5: \"class enum extends super const export import\",\n  6: \"enum\",\n  strict: \"implements interface let package private protected public static yield\",\n  strictBind: \"eval arguments\"\n}\n\n// And the keywords\n\nconst ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\"\n\nexport const keywords = {\n  5: ecma5AndLessKeywords,\n  6: ecma5AndLessKeywords + \" const class extends export import super\"\n}\n\nexport const keywordRelationalOperator = /^in(stanceof)?$/\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point above 128.\n// Generated by `bin/generate-identifier-regex.js`.\n\nlet nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08bd\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fef\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7b9\\ua7f7-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab65\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\"\nlet nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08d3-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf2-\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1df9\\u1dfb-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\"\n\nconst nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\")\nconst nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\")\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null\n\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by bin/generate-identifier-regex.js\n\n// eslint-disable-next-line comma-spacing\nconst astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,477,28,11,0,9,21,190,52,76,44,33,24,27,35,30,0,12,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,54,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,86,26,230,43,117,63,32,0,257,0,11,39,8,0,22,0,12,39,3,3,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,270,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,68,12,0,67,12,65,1,31,6129,15,754,9486,286,82,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,4149,196,60,67,1213,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42710,42,4148,12,221,3,5761,15,7472,3104,541]\n\n// eslint-disable-next-line comma-spacing\nconst astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,525,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,4,9,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,280,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1016,45,17,3,19723,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,2214,6,110,6,6,9,792487,239]\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n  let pos = 0x10000\n  for (let i = 0; i < set.length; i += 2) {\n    pos += set[i]\n    if (pos > code) return false\n    pos += set[i + 1]\n    if (pos >= code) return true\n  }\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code, astral) {\n  if (code < 65) return code === 36\n  if (code < 91) return true\n  if (code < 97) return code === 95\n  if (code < 123) return true\n  if (code <= 0xffff) return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n  if (astral === false) return false\n  return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code, astral) {\n  if (code < 48) return code === 36\n  if (code < 58) return true\n  if (code < 65) return false\n  if (code < 91) return true\n  if (code < 97) return code === 95\n  if (code < 123) return true\n  if (code <= 0xffff) return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code))\n  if (astral === false) return false\n  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n","// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nexport class TokenType {\n  constructor(label, conf = {}) {\n    this.label = label\n    this.keyword = conf.keyword\n    this.beforeExpr = !!conf.beforeExpr\n    this.startsExpr = !!conf.startsExpr\n    this.isLoop = !!conf.isLoop\n    this.isAssign = !!conf.isAssign\n    this.prefix = !!conf.prefix\n    this.postfix = !!conf.postfix\n    this.binop = conf.binop || null\n    this.updateContext = null\n  }\n}\n\nfunction binop(name, prec) {\n  return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nconst beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true}\n\n// Map keyword names to token types.\n\nexport const keywords = {}\n\n// Succinct definitions of keyword token types\nfunction kw(name, options = {}) {\n  options.keyword = name\n  return keywords[name] = new TokenType(name, options)\n}\n\nexport const types = {\n  num: new TokenType(\"num\", startsExpr),\n  regexp: new TokenType(\"regexp\", startsExpr),\n  string: new TokenType(\"string\", startsExpr),\n  name: new TokenType(\"name\", startsExpr),\n  eof: new TokenType(\"eof\"),\n\n  // Punctuation token types.\n  bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n  bracketR: new TokenType(\"]\"),\n  braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n  braceR: new TokenType(\"}\"),\n  parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n  parenR: new TokenType(\")\"),\n  comma: new TokenType(\",\", beforeExpr),\n  semi: new TokenType(\";\", beforeExpr),\n  colon: new TokenType(\":\", beforeExpr),\n  dot: new TokenType(\".\"),\n  question: new TokenType(\"?\", beforeExpr),\n  arrow: new TokenType(\"=>\", beforeExpr),\n  template: new TokenType(\"template\"),\n  invalidTemplate: new TokenType(\"invalidTemplate\"),\n  ellipsis: new TokenType(\"...\", beforeExpr),\n  backQuote: new TokenType(\"`\", startsExpr),\n  dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n  // Operators. These carry several kinds of properties to help the\n  // parser use them properly (the presence of these properties is\n  // what categorizes them as operators).\n  //\n  // `binop`, when present, specifies that this operator is a binary\n  // operator, and will refer to its precedence.\n  //\n  // `prefix` and `postfix` mark the operator as a prefix or postfix\n  // unary operator.\n  //\n  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n  // binary operators with a very low precedence, that should result\n  // in AssignmentExpression nodes.\n\n  eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n  assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n  incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n  prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  logicalOR: binop(\"||\", 1),\n  logicalAND: binop(\"&&\", 2),\n  bitwiseOR: binop(\"|\", 3),\n  bitwiseXOR: binop(\"^\", 4),\n  bitwiseAND: binop(\"&\", 5),\n  equality: binop(\"==/!=/===/!==\", 6),\n  relational: binop(\"</>/<=/>=\", 7),\n  bitShift: binop(\"<</>>/>>>\", 8),\n  plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n  modulo: binop(\"%\", 10),\n  star: binop(\"*\", 10),\n  slash: binop(\"/\", 10),\n  starstar: new TokenType(\"**\", {beforeExpr: true}),\n\n  // Keyword token types.\n  _break: kw(\"break\"),\n  _case: kw(\"case\", beforeExpr),\n  _catch: kw(\"catch\"),\n  _continue: kw(\"continue\"),\n  _debugger: kw(\"debugger\"),\n  _default: kw(\"default\", beforeExpr),\n  _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n  _else: kw(\"else\", beforeExpr),\n  _finally: kw(\"finally\"),\n  _for: kw(\"for\", {isLoop: true}),\n  _function: kw(\"function\", startsExpr),\n  _if: kw(\"if\"),\n  _return: kw(\"return\", beforeExpr),\n  _switch: kw(\"switch\"),\n  _throw: kw(\"throw\", beforeExpr),\n  _try: kw(\"try\"),\n  _var: kw(\"var\"),\n  _const: kw(\"const\"),\n  _while: kw(\"while\", {isLoop: true}),\n  _with: kw(\"with\"),\n  _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n  _this: kw(\"this\", startsExpr),\n  _super: kw(\"super\", startsExpr),\n  _class: kw(\"class\", startsExpr),\n  _extends: kw(\"extends\", beforeExpr),\n  _export: kw(\"export\"),\n  _import: kw(\"import\"),\n  _null: kw(\"null\", startsExpr),\n  _true: kw(\"true\", startsExpr),\n  _false: kw(\"false\", startsExpr),\n  _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n  _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n  _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n}\n","// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nexport const lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/\nexport const lineBreakG = new RegExp(lineBreak.source, \"g\")\n\nexport function isNewLine(code, ecma2019String) {\n  return code === 10 || code === 13 || (!ecma2019String && (code === 0x2028 || code === 0x2029))\n}\n\nexport const nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/\n\nexport const skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g\n","const {hasOwnProperty, toString} = Object.prototype\n\n// Checks if an object has a property.\n\nexport function has(obj, propName) {\n  return hasOwnProperty.call(obj, propName)\n}\n\nexport const isArray = Array.isArray || ((obj) => (\n  toString.call(obj) === \"[object Array]\"\n))\n\nexport function wordsRegexp(words) {\n  return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\")\n}\n","import {lineBreakG} from \"./whitespace\"\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nexport class Position {\n  constructor(line, col) {\n    this.line = line\n    this.column = col\n  }\n\n  offset(n) {\n    return new Position(this.line, this.column + n)\n  }\n}\n\nexport class SourceLocation {\n  constructor(p, start, end) {\n    this.start = start\n    this.end = end\n    if (p.sourceFile !== null) this.source = p.sourceFile\n  }\n}\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nexport function getLineInfo(input, offset) {\n  for (let line = 1, cur = 0;;) {\n    lineBreakG.lastIndex = cur\n    let match = lineBreakG.exec(input)\n    if (match && match.index < offset) {\n      ++line\n      cur = match.index + match[0].length\n    } else {\n      return new Position(line, offset - cur)\n    }\n  }\n}\n","import {has, isArray} from \"./util\"\nimport {SourceLocation} from \"./locutil\"\n\n// A second optional argument can be given to further configure\n// the parser process. These options are recognized:\n\nexport const defaultOptions = {\n  // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n  // either 3, 5, 6 (2015), 7 (2016), 8 (2017), 9 (2018), or 10\n  // (2019). This influences support for strict mode, the set of\n  // reserved words, and support for new syntax features. The default\n  // is 9.\n  ecmaVersion: 9,\n  // `sourceType` indicates the mode the code should be parsed in.\n  // Can be either `\"script\"` or `\"module\"`. This influences global\n  // strict mode and parsing of `import` and `export` declarations.\n  sourceType: \"script\",\n  // `onInsertedSemicolon` can be a callback that will be called\n  // when a semicolon is automatically inserted. It will be passed\n  // the position of the comma as an offset, and if `locations` is\n  // enabled, it is given the location as a `{line, column}` object\n  // as second argument.\n  onInsertedSemicolon: null,\n  // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n  // trailing commas.\n  onTrailingComma: null,\n  // By default, reserved words are only enforced if ecmaVersion >= 5.\n  // Set `allowReserved` to a boolean value to explicitly turn this on\n  // an off. When this option has the value \"never\", reserved words\n  // and keywords can also not be used as property names.\n  allowReserved: null,\n  // When enabled, a return at the top level is not considered an\n  // error.\n  allowReturnOutsideFunction: false,\n  // When enabled, import/export statements are not constrained to\n  // appearing at the top of the program.\n  allowImportExportEverywhere: false,\n  // When enabled, await identifiers are allowed to appear at the top-level scope,\n  // but they are still not allowed in non-async functions.\n  allowAwaitOutsideFunction: false,\n  // When enabled, hashbang directive in the beginning of file\n  // is allowed and treated as a line comment.\n  allowHashBang: false,\n  // When `locations` is on, `loc` properties holding objects with\n  // `start` and `end` properties in `{line, column}` form (with\n  // line being 1-based and column 0-based) will be attached to the\n  // nodes.\n  locations: false,\n  // A function can be passed as `onToken` option, which will\n  // cause Acorn to call that function with object in the same\n  // format as tokens returned from `tokenizer().getToken()`. Note\n  // that you are not allowed to call the parser from the\n  // callback—that will corrupt its internal state.\n  onToken: null,\n  // A function can be passed as `onComment` option, which will\n  // cause Acorn to call that function with `(block, text, start,\n  // end)` parameters whenever a comment is skipped. `block` is a\n  // boolean indicating whether this is a block (`/* */`) comment,\n  // `text` is the content of the comment, and `start` and `end` are\n  // character offsets that denote the start and end of the comment.\n  // When the `locations` option is on, two more parameters are\n  // passed, the full `{line, column}` locations of the start and\n  // end of the comments. Note that you are not allowed to call the\n  // parser from the callback—that will corrupt its internal state.\n  onComment: null,\n  // Nodes have their start and end characters offsets recorded in\n  // `start` and `end` properties (directly on the node, rather than\n  // the `loc` object, which holds line/column data. To also add a\n  // [semi-standardized][range] `range` property holding a `[start,\n  // end]` array with the same numbers, set the `ranges` option to\n  // `true`.\n  //\n  // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n  ranges: false,\n  // It is possible to parse multiple files into a single AST by\n  // passing the tree produced by parsing the first file as\n  // `program` option in subsequent parses. This will add the\n  // toplevel forms of the parsed file to the `Program` (top) node\n  // of an existing parse tree.\n  program: null,\n  // When `locations` is on, you can pass this to record the source\n  // file in every node's `loc` object.\n  sourceFile: null,\n  // This value, if given, is stored in every node, whether\n  // `locations` is on or off.\n  directSourceFile: null,\n  // When enabled, parenthesized expressions are represented by\n  // (non-standard) ParenthesizedExpression nodes\n  preserveParens: false\n}\n\n// Interpret and default an options object\n\nexport function getOptions(opts) {\n  let options = {}\n\n  for (let opt in defaultOptions)\n    options[opt] = opts && has(opts, opt) ? opts[opt] : defaultOptions[opt]\n\n  if (options.ecmaVersion >= 2015)\n    options.ecmaVersion -= 2009\n\n  if (options.allowReserved == null)\n    options.allowReserved = options.ecmaVersion < 5\n\n  if (isArray(options.onToken)) {\n    let tokens = options.onToken\n    options.onToken = (token) => tokens.push(token)\n  }\n  if (isArray(options.onComment))\n    options.onComment = pushComment(options, options.onComment)\n\n  return options\n}\n\nfunction pushComment(options, array) {\n  return function(block, text, start, end, startLoc, endLoc) {\n    let comment = {\n      type: block ? \"Block\" : \"Line\",\n      value: text,\n      start: start,\n      end: end\n    }\n    if (options.locations)\n      comment.loc = new SourceLocation(this, startLoc, endLoc)\n    if (options.ranges)\n      comment.range = [start, end]\n    array.push(comment)\n  }\n}\n","// Each scope gets a bitset that may contain these flags\nexport const\n    SCOPE_TOP = 1,\n    SCOPE_FUNCTION = 2,\n    SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION,\n    SCOPE_ASYNC = 4,\n    SCOPE_GENERATOR = 8,\n    SCOPE_ARROW = 16,\n    SCOPE_SIMPLE_CATCH = 32,\n    SCOPE_SUPER = 64,\n    SCOPE_DIRECT_SUPER = 128\n\nexport function functionFlags(async, generator) {\n  return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal and declareName to determine the type of a binding\nexport const\n    BIND_NONE = 0, // Not a binding\n    BIND_VAR = 1, // Var-style binding\n    BIND_LEXICAL = 2, // Let- or const-style binding\n    BIND_FUNCTION = 3, // Function declaration\n    BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n    BIND_OUTSIDE = 5 // Special case for function names as bound inside the function\n","import {reservedWords, keywords} from \"./identifier\"\nimport {types as tt} from \"./tokentype\"\nimport {lineBreak} from \"./whitespace\"\nimport {getOptions} from \"./options\"\nimport {wordsRegexp} from \"./util\"\nimport {SCOPE_TOP, SCOPE_FUNCTION, SCOPE_ASYNC, SCOPE_GENERATOR, SCOPE_SUPER, SCOPE_DIRECT_SUPER} from \"./scopeflags\"\n\nexport class Parser {\n  constructor(options, input, startPos) {\n    this.options = options = getOptions(options)\n    this.sourceFile = options.sourceFile\n    this.keywords = wordsRegexp(keywords[options.ecmaVersion >= 6 ? 6 : 5])\n    let reserved = \"\"\n    if (!options.allowReserved) {\n      for (let v = options.ecmaVersion;; v--)\n        if (reserved = reservedWords[v]) break\n      if (options.sourceType === \"module\") reserved += \" await\"\n    }\n    this.reservedWords = wordsRegexp(reserved)\n    let reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict\n    this.reservedWordsStrict = wordsRegexp(reservedStrict)\n    this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind)\n    this.input = String(input)\n\n    // Used to signal to callers of `readWord1` whether the word\n    // contained any escape sequences. This is needed because words with\n    // escape sequences must not be interpreted as keywords.\n    this.containsEsc = false\n\n    // Set up token state\n\n    // The current position of the tokenizer in the input.\n    if (startPos) {\n      this.pos = startPos\n      this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1\n      this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length\n    } else {\n      this.pos = this.lineStart = 0\n      this.curLine = 1\n    }\n\n    // Properties of the current token:\n    // Its type\n    this.type = tt.eof\n    // For tokens that include more information than their type, the value\n    this.value = null\n    // Its start and end offset\n    this.start = this.end = this.pos\n    // And, if locations are used, the {line, column} object\n    // corresponding to those offsets\n    this.startLoc = this.endLoc = this.curPosition()\n\n    // Position information for the previous token\n    this.lastTokEndLoc = this.lastTokStartLoc = null\n    this.lastTokStart = this.lastTokEnd = this.pos\n\n    // The context stack is used to superficially track syntactic\n    // context to predict whether a regular expression is allowed in a\n    // given position.\n    this.context = this.initialContext()\n    this.exprAllowed = true\n\n    // Figure out if it's a module code.\n    this.inModule = options.sourceType === \"module\"\n    this.strict = this.inModule || this.strictDirective(this.pos)\n\n    // Used to signify the start of a potential arrow function\n    this.potentialArrowAt = -1\n\n    // Positions to delayed-check that yield/await does not exist in default parameters.\n    this.yieldPos = this.awaitPos = this.awaitIdentPos = 0\n    // Labels in scope.\n    this.labels = []\n    // Thus-far undefined exports.\n    this.undefinedExports = {}\n\n    // If enabled, skip leading hashbang line.\n    if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n      this.skipLineComment(2)\n\n    // Scope tracking for duplicate variable names (see scope.js)\n    this.scopeStack = []\n    this.enterScope(SCOPE_TOP)\n\n    // For RegExp validation\n    this.regexpState = null\n  }\n\n  parse() {\n    let node = this.options.program || this.startNode()\n    this.nextToken()\n    return this.parseTopLevel(node)\n  }\n\n  get inFunction() { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 }\n  get inGenerator() { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 }\n  get inAsync() { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 }\n  get allowSuper() { return (this.currentThisScope().flags & SCOPE_SUPER) > 0 }\n  get allowDirectSuper() { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 }\n  get treatFunctionsAsVar() { return this.treatFunctionsAsVarInScope(this.currentScope()) }\n\n  // Switch to a getter for 7.0.0.\n  inNonArrowFunction() { return (this.currentThisScope().flags & SCOPE_FUNCTION) > 0 }\n\n  static extend(...plugins) {\n    let cls = this\n    for (let i = 0; i < plugins.length; i++) cls = plugins[i](cls)\n    return cls\n  }\n\n  static parse(input, options) {\n    return new this(options, input).parse()\n  }\n\n  static parseExpressionAt(input, pos, options) {\n    let parser = new this(options, input, pos)\n    parser.nextToken()\n    return parser.parseExpression()\n  }\n\n  static tokenizer(input, options) {\n    return new this(options, input)\n  }\n}\n","import {types as tt} from \"./tokentype\"\nimport {Parser} from \"./state\"\nimport {lineBreak, skipWhiteSpace} from \"./whitespace\"\n\nconst pp = Parser.prototype\n\n// ## Parser utilities\n\nconst literal = /^(?:'((?:\\\\.|[^'])*?)'|\"((?:\\\\.|[^\"])*?)\")/\npp.strictDirective = function(start) {\n  for (;;) {\n    // Try to find string literal.\n    skipWhiteSpace.lastIndex = start\n    start += skipWhiteSpace.exec(this.input)[0].length\n    let match = literal.exec(this.input.slice(start))\n    if (!match) return false\n    if ((match[1] || match[2]) === \"use strict\") return true\n    start += match[0].length\n\n    // Skip semicolon, if any.\n    skipWhiteSpace.lastIndex = start\n    start += skipWhiteSpace.exec(this.input)[0].length\n    if (this.input[start] === \";\")\n      start++\n  }\n}\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp.eat = function(type) {\n  if (this.type === type) {\n    this.next()\n    return true\n  } else {\n    return false\n  }\n}\n\n// Tests whether parsed token is a contextual keyword.\n\npp.isContextual = function(name) {\n  return this.type === tt.name && this.value === name && !this.containsEsc\n}\n\n// Consumes contextual keyword if possible.\n\npp.eatContextual = function(name) {\n  if (!this.isContextual(name)) return false\n  this.next()\n  return true\n}\n\n// Asserts that following token is given contextual keyword.\n\npp.expectContextual = function(name) {\n  if (!this.eatContextual(name)) this.unexpected()\n}\n\n// Test whether a semicolon can be inserted at the current position.\n\npp.canInsertSemicolon = function() {\n  return this.type === tt.eof ||\n    this.type === tt.braceR ||\n    lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n}\n\npp.insertSemicolon = function() {\n  if (this.canInsertSemicolon()) {\n    if (this.options.onInsertedSemicolon)\n      this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc)\n    return true\n  }\n}\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp.semicolon = function() {\n  if (!this.eat(tt.semi) && !this.insertSemicolon()) this.unexpected()\n}\n\npp.afterTrailingComma = function(tokType, notNext) {\n  if (this.type === tokType) {\n    if (this.options.onTrailingComma)\n      this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc)\n    if (!notNext)\n      this.next()\n    return true\n  }\n}\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp.expect = function(type) {\n  this.eat(type) || this.unexpected()\n}\n\n// Raise an unexpected token error.\n\npp.unexpected = function(pos) {\n  this.raise(pos != null ? pos : this.start, \"Unexpected token\")\n}\n\nexport function DestructuringErrors() {\n  this.shorthandAssign =\n  this.trailingComma =\n  this.parenthesizedAssign =\n  this.parenthesizedBind =\n  this.doubleProto =\n    -1\n}\n\npp.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n  if (!refDestructuringErrors) return\n  if (refDestructuringErrors.trailingComma > -1)\n    this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\")\n  let parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind\n  if (parens > -1) this.raiseRecoverable(parens, \"Parenthesized pattern\")\n}\n\npp.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n  if (!refDestructuringErrors) return false\n  let {shorthandAssign, doubleProto} = refDestructuringErrors\n  if (!andThrow) return shorthandAssign >= 0 || doubleProto >= 0\n  if (shorthandAssign >= 0)\n    this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\")\n  if (doubleProto >= 0)\n    this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\")\n}\n\npp.checkYieldAwaitInDefaultParams = function() {\n  if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n    this.raise(this.yieldPos, \"Yield expression cannot be a default value\")\n  if (this.awaitPos)\n    this.raise(this.awaitPos, \"Await expression cannot be a default value\")\n}\n\npp.isSimpleAssignTarget = function(expr) {\n  if (expr.type === \"ParenthesizedExpression\")\n    return this.isSimpleAssignTarget(expr.expression)\n  return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n}\n","import {types as tt} from \"./tokentype\"\nimport {Parser} from \"./state\"\nimport {lineBreak, skipWhiteSpace} from \"./whitespace\"\nimport {isIdentifierStart, isIdentifierChar, keywordRelationalOperator} from \"./identifier\"\nimport {has} from \"./util\"\nimport {DestructuringErrors} from \"./parseutil\"\nimport {functionFlags, SCOPE_SIMPLE_CATCH, BIND_SIMPLE_CATCH, BIND_LEXICAL, BIND_VAR, BIND_FUNCTION} from \"./scopeflags\"\n\nconst pp = Parser.prototype\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node.  Optionally takes a\n// `program` argument.  If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp.parseTopLevel = function(node) {\n  let exports = {}\n  if (!node.body) node.body = []\n  while (this.type !== tt.eof) {\n    let stmt = this.parseStatement(null, true, exports)\n    node.body.push(stmt)\n  }\n  if (this.inModule)\n    for (let name of Object.keys(this.undefinedExports))\n      this.raiseRecoverable(this.undefinedExports[name].start, `Export '${name}' is not defined`)\n  this.adaptDirectivePrologue(node.body)\n  this.next()\n  if (this.options.ecmaVersion >= 6) {\n    node.sourceType = this.options.sourceType\n  }\n  return this.finishNode(node, \"Program\")\n}\n\nconst loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"}\n\npp.isLet = function(context) {\n  if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) return false\n  skipWhiteSpace.lastIndex = this.pos\n  let skip = skipWhiteSpace.exec(this.input)\n  let next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next)\n  // For ambiguous cases, determine if a LexicalDeclaration (or only a\n  // Statement) is allowed here. If context is not empty then only a Statement\n  // is allowed. However, `let [` is an explicit negative lookahead for\n  // ExpressionStatement, so special-case it first.\n  if (nextCh === 91) return true // '['\n  if (context) return false\n\n  if (nextCh === 123) return true // '{'\n  if (isIdentifierStart(nextCh, true)) {\n    let pos = next + 1\n    while (isIdentifierChar(this.input.charCodeAt(pos), true)) ++pos\n    let ident = this.input.slice(next, pos)\n    if (!keywordRelationalOperator.test(ident)) return true\n  }\n  return false\n}\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp.isAsyncFunction = function() {\n  if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n    return false\n\n  skipWhiteSpace.lastIndex = this.pos\n  let skip = skipWhiteSpace.exec(this.input)\n  let next = this.pos + skip[0].length\n  return !lineBreak.test(this.input.slice(this.pos, next)) &&\n    this.input.slice(next, next + 8) === \"function\" &&\n    (next + 8 === this.input.length || !isIdentifierChar(this.input.charAt(next + 8)))\n}\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp.parseStatement = function(context, topLevel, exports) {\n  let starttype = this.type, node = this.startNode(), kind\n\n  if (this.isLet(context)) {\n    starttype = tt._var\n    kind = \"let\"\n  }\n\n  // Most types of statements are recognized by the keyword they\n  // start with. Many are trivial to parse, some require a bit of\n  // complexity.\n\n  switch (starttype) {\n  case tt._break: case tt._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n  case tt._debugger: return this.parseDebuggerStatement(node)\n  case tt._do: return this.parseDoStatement(node)\n  case tt._for: return this.parseForStatement(node)\n  case tt._function:\n    // Function as sole body of either an if statement or a labeled statement\n    // works, but not when it is part of a labeled statement that is the sole\n    // body of an if statement.\n    if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) this.unexpected()\n    return this.parseFunctionStatement(node, false, !context)\n  case tt._class:\n    if (context) this.unexpected()\n    return this.parseClass(node, true)\n  case tt._if: return this.parseIfStatement(node)\n  case tt._return: return this.parseReturnStatement(node)\n  case tt._switch: return this.parseSwitchStatement(node)\n  case tt._throw: return this.parseThrowStatement(node)\n  case tt._try: return this.parseTryStatement(node)\n  case tt._const: case tt._var:\n    kind = kind || this.value\n    if (context && kind !== \"var\") this.unexpected()\n    return this.parseVarStatement(node, kind)\n  case tt._while: return this.parseWhileStatement(node)\n  case tt._with: return this.parseWithStatement(node)\n  case tt.braceL: return this.parseBlock(true, node)\n  case tt.semi: return this.parseEmptyStatement(node)\n  case tt._export:\n  case tt._import:\n    if (!this.options.allowImportExportEverywhere) {\n      if (!topLevel)\n        this.raise(this.start, \"'import' and 'export' may only appear at the top level\")\n      if (!this.inModule)\n        this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\")\n    }\n    return starttype === tt._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n    // If the statement does not start with a statement keyword or a\n    // brace, it's an ExpressionStatement or LabeledStatement. We\n    // simply start parsing an expression, and afterwards, if the\n    // next token is a colon and the expression was a simple\n    // Identifier node, we switch to interpreting it as a label.\n  default:\n    if (this.isAsyncFunction()) {\n      if (context) this.unexpected()\n      this.next()\n      return this.parseFunctionStatement(node, true, !context)\n    }\n\n    let maybeName = this.value, expr = this.parseExpression()\n    if (starttype === tt.name && expr.type === \"Identifier\" && this.eat(tt.colon))\n      return this.parseLabeledStatement(node, maybeName, expr, context)\n    else return this.parseExpressionStatement(node, expr)\n  }\n}\n\npp.parseBreakContinueStatement = function(node, keyword) {\n  let isBreak = keyword === \"break\"\n  this.next()\n  if (this.eat(tt.semi) || this.insertSemicolon()) node.label = null\n  else if (this.type !== tt.name) this.unexpected()\n  else {\n    node.label = this.parseIdent()\n    this.semicolon()\n  }\n\n  // Verify that there is an actual destination to break or\n  // continue to.\n  let i = 0\n  for (; i < this.labels.length; ++i) {\n    let lab = this.labels[i]\n    if (node.label == null || lab.name === node.label.name) {\n      if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break\n      if (node.label && isBreak) break\n    }\n  }\n  if (i === this.labels.length) this.raise(node.start, \"Unsyntactic \" + keyword)\n  return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n}\n\npp.parseDebuggerStatement = function(node) {\n  this.next()\n  this.semicolon()\n  return this.finishNode(node, \"DebuggerStatement\")\n}\n\npp.parseDoStatement = function(node) {\n  this.next()\n  this.labels.push(loopLabel)\n  node.body = this.parseStatement(\"do\")\n  this.labels.pop()\n  this.expect(tt._while)\n  node.test = this.parseParenExpression()\n  if (this.options.ecmaVersion >= 6)\n    this.eat(tt.semi)\n  else\n    this.semicolon()\n  return this.finishNode(node, \"DoWhileStatement\")\n}\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp.parseForStatement = function(node) {\n  this.next()\n  let awaitAt = (this.options.ecmaVersion >= 9 && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction)) && this.eatContextual(\"await\")) ? this.lastTokStart : -1\n  this.labels.push(loopLabel)\n  this.enterScope(0)\n  this.expect(tt.parenL)\n  if (this.type === tt.semi) {\n    if (awaitAt > -1) this.unexpected(awaitAt)\n    return this.parseFor(node, null)\n  }\n  let isLet = this.isLet()\n  if (this.type === tt._var || this.type === tt._const || isLet) {\n    let init = this.startNode(), kind = isLet ? \"let\" : this.value\n    this.next()\n    this.parseVar(init, true, kind)\n    this.finishNode(init, \"VariableDeclaration\")\n    if ((this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init.declarations.length === 1 &&\n        !(kind !== \"var\" && init.declarations[0].init)) {\n      if (this.options.ecmaVersion >= 9) {\n        if (this.type === tt._in) {\n          if (awaitAt > -1) this.unexpected(awaitAt)\n        } else node.await = awaitAt > -1\n      }\n      return this.parseForIn(node, init)\n    }\n    if (awaitAt > -1) this.unexpected(awaitAt)\n    return this.parseFor(node, init)\n  }\n  let refDestructuringErrors = new DestructuringErrors\n  let init = this.parseExpression(true, refDestructuringErrors)\n  if (this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n    if (this.options.ecmaVersion >= 9) {\n      if (this.type === tt._in) {\n        if (awaitAt > -1) this.unexpected(awaitAt)\n      } else node.await = awaitAt > -1\n    }\n    this.toAssignable(init, false, refDestructuringErrors)\n    this.checkLVal(init)\n    return this.parseForIn(node, init)\n  } else {\n    this.checkExpressionErrors(refDestructuringErrors, true)\n  }\n  if (awaitAt > -1) this.unexpected(awaitAt)\n  return this.parseFor(node, init)\n}\n\npp.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n  this.next()\n  return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n}\n\npp.parseIfStatement = function(node) {\n  this.next()\n  node.test = this.parseParenExpression()\n  // allow function declarations in branches, but only in non-strict mode\n  node.consequent = this.parseStatement(\"if\")\n  node.alternate = this.eat(tt._else) ? this.parseStatement(\"if\") : null\n  return this.finishNode(node, \"IfStatement\")\n}\n\npp.parseReturnStatement = function(node) {\n  if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n    this.raise(this.start, \"'return' outside of function\")\n  this.next()\n\n  // In `return` (and `break`/`continue`), the keywords with\n  // optional arguments, we eagerly look for a semicolon or the\n  // possibility to insert one.\n\n  if (this.eat(tt.semi) || this.insertSemicolon()) node.argument = null\n  else { node.argument = this.parseExpression(); this.semicolon() }\n  return this.finishNode(node, \"ReturnStatement\")\n}\n\npp.parseSwitchStatement = function(node) {\n  this.next()\n  node.discriminant = this.parseParenExpression()\n  node.cases = []\n  this.expect(tt.braceL)\n  this.labels.push(switchLabel)\n  this.enterScope(0)\n\n  // Statements under must be grouped (by label) in SwitchCase\n  // nodes. `cur` is used to keep the node that we are currently\n  // adding statements to.\n\n  let cur\n  for (let sawDefault = false; this.type !== tt.braceR;) {\n    if (this.type === tt._case || this.type === tt._default) {\n      let isCase = this.type === tt._case\n      if (cur) this.finishNode(cur, \"SwitchCase\")\n      node.cases.push(cur = this.startNode())\n      cur.consequent = []\n      this.next()\n      if (isCase) {\n        cur.test = this.parseExpression()\n      } else {\n        if (sawDefault) this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\")\n        sawDefault = true\n        cur.test = null\n      }\n      this.expect(tt.colon)\n    } else {\n      if (!cur) this.unexpected()\n      cur.consequent.push(this.parseStatement(null))\n    }\n  }\n  this.exitScope()\n  if (cur) this.finishNode(cur, \"SwitchCase\")\n  this.next() // Closing brace\n  this.labels.pop()\n  return this.finishNode(node, \"SwitchStatement\")\n}\n\npp.parseThrowStatement = function(node) {\n  this.next()\n  if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n    this.raise(this.lastTokEnd, \"Illegal newline after throw\")\n  node.argument = this.parseExpression()\n  this.semicolon()\n  return this.finishNode(node, \"ThrowStatement\")\n}\n\n// Reused empty array added for node fields that are always empty.\n\nconst empty = []\n\npp.parseTryStatement = function(node) {\n  this.next()\n  node.block = this.parseBlock()\n  node.handler = null\n  if (this.type === tt._catch) {\n    let clause = this.startNode()\n    this.next()\n    if (this.eat(tt.parenL)) {\n      clause.param = this.parseBindingAtom()\n      let simple = clause.param.type === \"Identifier\"\n      this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0)\n      this.checkLVal(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL)\n      this.expect(tt.parenR)\n    } else {\n      if (this.options.ecmaVersion < 10) this.unexpected()\n      clause.param = null\n      this.enterScope(0)\n    }\n    clause.body = this.parseBlock(false)\n    this.exitScope()\n    node.handler = this.finishNode(clause, \"CatchClause\")\n  }\n  node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null\n  if (!node.handler && !node.finalizer)\n    this.raise(node.start, \"Missing catch or finally clause\")\n  return this.finishNode(node, \"TryStatement\")\n}\n\npp.parseVarStatement = function(node, kind) {\n  this.next()\n  this.parseVar(node, false, kind)\n  this.semicolon()\n  return this.finishNode(node, \"VariableDeclaration\")\n}\n\npp.parseWhileStatement = function(node) {\n  this.next()\n  node.test = this.parseParenExpression()\n  this.labels.push(loopLabel)\n  node.body = this.parseStatement(\"while\")\n  this.labels.pop()\n  return this.finishNode(node, \"WhileStatement\")\n}\n\npp.parseWithStatement = function(node) {\n  if (this.strict) this.raise(this.start, \"'with' in strict mode\")\n  this.next()\n  node.object = this.parseParenExpression()\n  node.body = this.parseStatement(\"with\")\n  return this.finishNode(node, \"WithStatement\")\n}\n\npp.parseEmptyStatement = function(node) {\n  this.next()\n  return this.finishNode(node, \"EmptyStatement\")\n}\n\npp.parseLabeledStatement = function(node, maybeName, expr, context) {\n  for (let label of this.labels)\n    if (label.name === maybeName)\n      this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\")\n  let kind = this.type.isLoop ? \"loop\" : this.type === tt._switch ? \"switch\" : null\n  for (let i = this.labels.length - 1; i >= 0; i--) {\n    let label = this.labels[i]\n    if (label.statementStart === node.start) {\n      // Update information about previous labels on this node\n      label.statementStart = this.start\n      label.kind = kind\n    } else break\n  }\n  this.labels.push({name: maybeName, kind, statementStart: this.start})\n  node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\")\n  this.labels.pop()\n  node.label = expr\n  return this.finishNode(node, \"LabeledStatement\")\n}\n\npp.parseExpressionStatement = function(node, expr) {\n  node.expression = expr\n  this.semicolon()\n  return this.finishNode(node, \"ExpressionStatement\")\n}\n\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp.parseBlock = function(createNewLexicalScope = true, node = this.startNode()) {\n  node.body = []\n  this.expect(tt.braceL)\n  if (createNewLexicalScope) this.enterScope(0)\n  while (!this.eat(tt.braceR)) {\n    let stmt = this.parseStatement(null)\n    node.body.push(stmt)\n  }\n  if (createNewLexicalScope) this.exitScope()\n  return this.finishNode(node, \"BlockStatement\")\n}\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp.parseFor = function(node, init) {\n  node.init = init\n  this.expect(tt.semi)\n  node.test = this.type === tt.semi ? null : this.parseExpression()\n  this.expect(tt.semi)\n  node.update = this.type === tt.parenR ? null : this.parseExpression()\n  this.expect(tt.parenR)\n  node.body = this.parseStatement(\"for\")\n  this.exitScope()\n  this.labels.pop()\n  return this.finishNode(node, \"ForStatement\")\n}\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\npp.parseForIn = function(node, init) {\n  let type = this.type === tt._in ? \"ForInStatement\" : \"ForOfStatement\"\n  this.next()\n  if (type === \"ForInStatement\") {\n    if (init.type === \"AssignmentPattern\" ||\n      (init.type === \"VariableDeclaration\" && init.declarations[0].init != null &&\n       (this.strict || init.declarations[0].id.type !== \"Identifier\")))\n      this.raise(init.start, \"Invalid assignment in for-in loop head\")\n  }\n  node.left = init\n  node.right = type === \"ForInStatement\" ? this.parseExpression() : this.parseMaybeAssign()\n  this.expect(tt.parenR)\n  node.body = this.parseStatement(\"for\")\n  this.exitScope()\n  this.labels.pop()\n  return this.finishNode(node, type)\n}\n\n// Parse a list of variable declarations.\n\npp.parseVar = function(node, isFor, kind) {\n  node.declarations = []\n  node.kind = kind\n  for (;;) {\n    let decl = this.startNode()\n    this.parseVarId(decl, kind)\n    if (this.eat(tt.eq)) {\n      decl.init = this.parseMaybeAssign(isFor)\n    } else if (kind === \"const\" && !(this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n      this.unexpected()\n    } else if (decl.id.type !== \"Identifier\" && !(isFor && (this.type === tt._in || this.isContextual(\"of\")))) {\n      this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\")\n    } else {\n      decl.init = null\n    }\n    node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"))\n    if (!this.eat(tt.comma)) break\n  }\n  return node\n}\n\npp.parseVarId = function(decl, kind) {\n  if ((kind === \"const\" || kind === \"let\") && this.isContextual(\"let\")) {\n    this.raiseRecoverable(this.start, \"let is disallowed as a lexically bound name\")\n  }\n  decl.id = this.parseBindingAtom()\n  this.checkLVal(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false)\n}\n\nconst FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp.parseFunction = function(node, statement, allowExpressionBody, isAsync) {\n  this.initFunction(node)\n  if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n    if (this.type === tt.star && (statement & FUNC_HANGING_STATEMENT))\n      this.unexpected()\n    node.generator = this.eat(tt.star)\n  }\n  if (this.options.ecmaVersion >= 8)\n    node.async = !!isAsync\n\n  if (statement & FUNC_STATEMENT) {\n    node.id = (statement & FUNC_NULLABLE_ID) && this.type !== tt.name ? null : this.parseIdent()\n    if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n      // If it is a regular function declaration in sloppy mode, then it is\n      // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n      // mode depends on properties of the current scope (see\n      // treatFunctionsAsVar).\n      this.checkLVal(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION)\n  }\n\n  let oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos\n  this.yieldPos = 0\n  this.awaitPos = 0\n  this.awaitIdentPos = 0\n  this.enterScope(functionFlags(node.async, node.generator))\n\n  if (!(statement & FUNC_STATEMENT))\n    node.id = this.type === tt.name ? this.parseIdent() : null\n\n  this.parseFunctionParams(node)\n  this.parseFunctionBody(node, allowExpressionBody, false)\n\n  this.yieldPos = oldYieldPos\n  this.awaitPos = oldAwaitPos\n  this.awaitIdentPos = oldAwaitIdentPos\n  return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n}\n\npp.parseFunctionParams = function(node) {\n  this.expect(tt.parenL)\n  node.params = this.parseBindingList(tt.parenR, false, this.options.ecmaVersion >= 8)\n  this.checkYieldAwaitInDefaultParams()\n}\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp.parseClass = function(node, isStatement) {\n  this.next()\n\n  // ecma-262 14.6 Class Definitions\n  // A class definition is always strict mode code.\n  const oldStrict = this.strict\n  this.strict = true\n\n  this.parseClassId(node, isStatement)\n  this.parseClassSuper(node)\n  let classBody = this.startNode()\n  let hadConstructor = false\n  classBody.body = []\n  this.expect(tt.braceL)\n  while (!this.eat(tt.braceR)) {\n    const element = this.parseClassElement(node.superClass !== null)\n    if (element) {\n      classBody.body.push(element)\n      if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n        if (hadConstructor) this.raise(element.start, \"Duplicate constructor in the same class\")\n        hadConstructor = true\n      }\n    }\n  }\n  node.body = this.finishNode(classBody, \"ClassBody\")\n  this.strict = oldStrict\n  return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n}\n\npp.parseClassElement = function(constructorAllowsSuper) {\n  if (this.eat(tt.semi)) return null\n\n  let method = this.startNode()\n  const tryContextual = (k, noLineBreak = false) => {\n    const start = this.start, startLoc = this.startLoc\n    if (!this.eatContextual(k)) return false\n    if (this.type !== tt.parenL && (!noLineBreak || !this.canInsertSemicolon())) return true\n    if (method.key) this.unexpected()\n    method.computed = false\n    method.key = this.startNodeAt(start, startLoc)\n    method.key.name = k\n    this.finishNode(method.key, \"Identifier\")\n    return false\n  }\n\n  method.kind = \"method\"\n  method.static = tryContextual(\"static\")\n  let isGenerator = this.eat(tt.star)\n  let isAsync = false\n  if (!isGenerator) {\n    if (this.options.ecmaVersion >= 8 && tryContextual(\"async\", true)) {\n      isAsync = true\n      isGenerator = this.options.ecmaVersion >= 9 && this.eat(tt.star)\n    } else if (tryContextual(\"get\")) {\n      method.kind = \"get\"\n    } else if (tryContextual(\"set\")) {\n      method.kind = \"set\"\n    }\n  }\n  if (!method.key) this.parsePropertyName(method)\n  let {key} = method\n  let allowsDirectSuper = false\n  if (!method.computed && !method.static && (key.type === \"Identifier\" && key.name === \"constructor\" ||\n      key.type === \"Literal\" && key.value === \"constructor\")) {\n    if (method.kind !== \"method\") this.raise(key.start, \"Constructor can't have get/set modifier\")\n    if (isGenerator) this.raise(key.start, \"Constructor can't be a generator\")\n    if (isAsync) this.raise(key.start, \"Constructor can't be an async method\")\n    method.kind = \"constructor\"\n    allowsDirectSuper = constructorAllowsSuper\n  } else if (method.static && key.type === \"Identifier\" && key.name === \"prototype\") {\n    this.raise(key.start, \"Classes may not have a static property named prototype\")\n  }\n  this.parseClassMethod(method, isGenerator, isAsync, allowsDirectSuper)\n  if (method.kind === \"get\" && method.value.params.length !== 0)\n    this.raiseRecoverable(method.value.start, \"getter should have no params\")\n  if (method.kind === \"set\" && method.value.params.length !== 1)\n    this.raiseRecoverable(method.value.start, \"setter should have exactly one param\")\n  if (method.kind === \"set\" && method.value.params[0].type === \"RestElement\")\n    this.raiseRecoverable(method.value.params[0].start, \"Setter cannot use rest params\")\n  return method\n}\n\npp.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n  method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper)\n  return this.finishNode(method, \"MethodDefinition\")\n}\n\npp.parseClassId = function(node, isStatement) {\n  if (this.type === tt.name) {\n    node.id = this.parseIdent()\n    if (isStatement)\n      this.checkLVal(node.id, BIND_LEXICAL, false)\n  } else {\n    if (isStatement === true)\n      this.unexpected()\n    node.id = null\n  }\n}\n\npp.parseClassSuper = function(node) {\n  node.superClass = this.eat(tt._extends) ? this.parseExprSubscripts() : null\n}\n\n// Parses module export declaration.\n\npp.parseExport = function(node, exports) {\n  this.next()\n  // export * from '...'\n  if (this.eat(tt.star)) {\n    this.expectContextual(\"from\")\n    if (this.type !== tt.string) this.unexpected()\n    node.source = this.parseExprAtom()\n    this.semicolon()\n    return this.finishNode(node, \"ExportAllDeclaration\")\n  }\n  if (this.eat(tt._default)) { // export default ...\n    this.checkExport(exports, \"default\", this.lastTokStart)\n    let isAsync\n    if (this.type === tt._function || (isAsync = this.isAsyncFunction())) {\n      let fNode = this.startNode()\n      this.next()\n      if (isAsync) this.next()\n      node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n    } else if (this.type === tt._class) {\n      let cNode = this.startNode()\n      node.declaration = this.parseClass(cNode, \"nullableID\")\n    } else {\n      node.declaration = this.parseMaybeAssign()\n      this.semicolon()\n    }\n    return this.finishNode(node, \"ExportDefaultDeclaration\")\n  }\n  // export var|const|let|function|class ...\n  if (this.shouldParseExportStatement()) {\n    node.declaration = this.parseStatement(null)\n    if (node.declaration.type === \"VariableDeclaration\")\n      this.checkVariableExport(exports, node.declaration.declarations)\n    else\n      this.checkExport(exports, node.declaration.id.name, node.declaration.id.start)\n    node.specifiers = []\n    node.source = null\n  } else { // export { x, y as z } [from '...']\n    node.declaration = null\n    node.specifiers = this.parseExportSpecifiers(exports)\n    if (this.eatContextual(\"from\")) {\n      if (this.type !== tt.string) this.unexpected()\n      node.source = this.parseExprAtom()\n    } else {\n      for (let spec of node.specifiers) {\n        // check for keywords used as local names\n        this.checkUnreserved(spec.local)\n        // check if export is defined\n        this.checkLocalExport(spec.local)\n      }\n\n      node.source = null\n    }\n    this.semicolon()\n  }\n  return this.finishNode(node, \"ExportNamedDeclaration\")\n}\n\npp.checkExport = function(exports, name, pos) {\n  if (!exports) return\n  if (has(exports, name))\n    this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\")\n  exports[name] = true\n}\n\npp.checkPatternExport = function(exports, pat) {\n  let type = pat.type\n  if (type === \"Identifier\")\n    this.checkExport(exports, pat.name, pat.start)\n  else if (type === \"ObjectPattern\")\n    for (let prop of pat.properties)\n      this.checkPatternExport(exports, prop)\n  else if (type === \"ArrayPattern\")\n    for (let elt of pat.elements) {\n      if (elt) this.checkPatternExport(exports, elt)\n    }\n  else if (type === \"Property\")\n    this.checkPatternExport(exports, pat.value)\n  else if (type === \"AssignmentPattern\")\n    this.checkPatternExport(exports, pat.left)\n  else if (type === \"RestElement\")\n    this.checkPatternExport(exports, pat.argument)\n  else if (type === \"ParenthesizedExpression\")\n    this.checkPatternExport(exports, pat.expression)\n}\n\npp.checkVariableExport = function(exports, decls) {\n  if (!exports) return\n  for (let decl of decls)\n    this.checkPatternExport(exports, decl.id)\n}\n\npp.shouldParseExportStatement = function() {\n  return this.type.keyword === \"var\" ||\n    this.type.keyword === \"const\" ||\n    this.type.keyword === \"class\" ||\n    this.type.keyword === \"function\" ||\n    this.isLet() ||\n    this.isAsyncFunction()\n}\n\n// Parses a comma-separated list of module exports.\n\npp.parseExportSpecifiers = function(exports) {\n  let nodes = [], first = true\n  // export { x, y as z } [from '...']\n  this.expect(tt.braceL)\n  while (!this.eat(tt.braceR)) {\n    if (!first) {\n      this.expect(tt.comma)\n      if (this.afterTrailingComma(tt.braceR)) break\n    } else first = false\n\n    let node = this.startNode()\n    node.local = this.parseIdent(true)\n    node.exported = this.eatContextual(\"as\") ? this.parseIdent(true) : node.local\n    this.checkExport(exports, node.exported.name, node.exported.start)\n    nodes.push(this.finishNode(node, \"ExportSpecifier\"))\n  }\n  return nodes\n}\n\n// Parses import declaration.\n\npp.parseImport = function(node) {\n  this.next()\n  // import '...'\n  if (this.type === tt.string) {\n    node.specifiers = empty\n    node.source = this.parseExprAtom()\n  } else {\n    node.specifiers = this.parseImportSpecifiers()\n    this.expectContextual(\"from\")\n    node.source = this.type === tt.string ? this.parseExprAtom() : this.unexpected()\n  }\n  this.semicolon()\n  return this.finishNode(node, \"ImportDeclaration\")\n}\n\n// Parses a comma-separated list of module imports.\n\npp.parseImportSpecifiers = function() {\n  let nodes = [], first = true\n  if (this.type === tt.name) {\n    // import defaultObj, { x, y as z } from '...'\n    let node = this.startNode()\n    node.local = this.parseIdent()\n    this.checkLVal(node.local, BIND_LEXICAL)\n    nodes.push(this.finishNode(node, \"ImportDefaultSpecifier\"))\n    if (!this.eat(tt.comma)) return nodes\n  }\n  if (this.type === tt.star) {\n    let node = this.startNode()\n    this.next()\n    this.expectContextual(\"as\")\n    node.local = this.parseIdent()\n    this.checkLVal(node.local, BIND_LEXICAL)\n    nodes.push(this.finishNode(node, \"ImportNamespaceSpecifier\"))\n    return nodes\n  }\n  this.expect(tt.braceL)\n  while (!this.eat(tt.braceR)) {\n    if (!first) {\n      this.expect(tt.comma)\n      if (this.afterTrailingComma(tt.braceR)) break\n    } else first = false\n\n    let node = this.startNode()\n    node.imported = this.parseIdent(true)\n    if (this.eatContextual(\"as\")) {\n      node.local = this.parseIdent()\n    } else {\n      this.checkUnreserved(node.imported)\n      node.local = node.imported\n    }\n    this.checkLVal(node.local, BIND_LEXICAL)\n    nodes.push(this.finishNode(node, \"ImportSpecifier\"))\n  }\n  return nodes\n}\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp.adaptDirectivePrologue = function(statements) {\n  for (let i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n    statements[i].directive = statements[i].expression.raw.slice(1, -1)\n  }\n}\npp.isDirectiveCandidate = function(statement) {\n  return (\n    statement.type === \"ExpressionStatement\" &&\n    statement.expression.type === \"Literal\" &&\n    typeof statement.expression.value === \"string\" &&\n    // Reject parenthesized strings.\n    (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n  )\n}\n","import {types as tt} from \"./tokentype\"\nimport {Parser} from \"./state\"\nimport {has} from \"./util\"\nimport {BIND_NONE, BIND_OUTSIDE} from \"./scopeflags\"\n\nconst pp = Parser.prototype\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp.toAssignable = function(node, isBinding, refDestructuringErrors) {\n  if (this.options.ecmaVersion >= 6 && node) {\n    switch (node.type) {\n    case \"Identifier\":\n      if (this.inAsync && node.name === \"await\")\n        this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\")\n      break\n\n    case \"ObjectPattern\":\n    case \"ArrayPattern\":\n    case \"RestElement\":\n      break\n\n    case \"ObjectExpression\":\n      node.type = \"ObjectPattern\"\n      if (refDestructuringErrors) this.checkPatternErrors(refDestructuringErrors, true)\n      for (let prop of node.properties) {\n        this.toAssignable(prop, isBinding)\n        // Early error:\n        //   AssignmentRestProperty[Yield, Await] :\n        //     `...` DestructuringAssignmentTarget[Yield, Await]\n        //\n        //   It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n        if (\n          prop.type === \"RestElement\" &&\n          (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n        ) {\n          this.raise(prop.argument.start, \"Unexpected token\")\n        }\n      }\n      break\n\n    case \"Property\":\n      // AssignmentProperty has type === \"Property\"\n      if (node.kind !== \"init\") this.raise(node.key.start, \"Object pattern can't contain getter or setter\")\n      this.toAssignable(node.value, isBinding)\n      break\n\n    case \"ArrayExpression\":\n      node.type = \"ArrayPattern\"\n      if (refDestructuringErrors) this.checkPatternErrors(refDestructuringErrors, true)\n      this.toAssignableList(node.elements, isBinding)\n      break\n\n    case \"SpreadElement\":\n      node.type = \"RestElement\"\n      this.toAssignable(node.argument, isBinding)\n      if (node.argument.type === \"AssignmentPattern\")\n        this.raise(node.argument.start, \"Rest elements cannot have a default value\")\n      break\n\n    case \"AssignmentExpression\":\n      if (node.operator !== \"=\") this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\")\n      node.type = \"AssignmentPattern\"\n      delete node.operator\n      this.toAssignable(node.left, isBinding)\n      // falls through to AssignmentPattern\n\n    case \"AssignmentPattern\":\n      break\n\n    case \"ParenthesizedExpression\":\n      this.toAssignable(node.expression, isBinding, refDestructuringErrors)\n      break\n\n    case \"MemberExpression\":\n      if (!isBinding) break\n\n    default:\n      this.raise(node.start, \"Assigning to rvalue\")\n    }\n  } else if (refDestructuringErrors) this.checkPatternErrors(refDestructuringErrors, true)\n  return node\n}\n\n// Convert list of expression atoms to binding list.\n\npp.toAssignableList = function(exprList, isBinding) {\n  let end = exprList.length\n  for (let i = 0; i < end; i++) {\n    let elt = exprList[i]\n    if (elt) this.toAssignable(elt, isBinding)\n  }\n  if (end) {\n    let last = exprList[end - 1]\n    if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n      this.unexpected(last.argument.start)\n  }\n  return exprList\n}\n\n// Parses spread element.\n\npp.parseSpread = function(refDestructuringErrors) {\n  let node = this.startNode()\n  this.next()\n  node.argument = this.parseMaybeAssign(false, refDestructuringErrors)\n  return this.finishNode(node, \"SpreadElement\")\n}\n\npp.parseRestBinding = function() {\n  let node = this.startNode()\n  this.next()\n\n  // RestElement inside of a function parameter must be an identifier\n  if (this.options.ecmaVersion === 6 && this.type !== tt.name)\n    this.unexpected()\n\n  node.argument = this.parseBindingAtom()\n\n  return this.finishNode(node, \"RestElement\")\n}\n\n// Parses lvalue (assignable) atom.\n\npp.parseBindingAtom = function() {\n  if (this.options.ecmaVersion >= 6) {\n    switch (this.type) {\n    case tt.bracketL:\n      let node = this.startNode()\n      this.next()\n      node.elements = this.parseBindingList(tt.bracketR, true, true)\n      return this.finishNode(node, \"ArrayPattern\")\n\n    case tt.braceL:\n      return this.parseObj(true)\n    }\n  }\n  return this.parseIdent()\n}\n\npp.parseBindingList = function(close, allowEmpty, allowTrailingComma) {\n  let elts = [], first = true\n  while (!this.eat(close)) {\n    if (first) first = false\n    else this.expect(tt.comma)\n    if (allowEmpty && this.type === tt.comma) {\n      elts.push(null)\n    } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n      break\n    } else if (this.type === tt.ellipsis) {\n      let rest = this.parseRestBinding()\n      this.parseBindingListItem(rest)\n      elts.push(rest)\n      if (this.type === tt.comma) this.raise(this.start, \"Comma is not permitted after the rest element\")\n      this.expect(close)\n      break\n    } else {\n      let elem = this.parseMaybeDefault(this.start, this.startLoc)\n      this.parseBindingListItem(elem)\n      elts.push(elem)\n    }\n  }\n  return elts\n}\n\npp.parseBindingListItem = function(param) {\n  return param\n}\n\n// Parses assignment pattern around given atom if possible.\n\npp.parseMaybeDefault = function(startPos, startLoc, left) {\n  left = left || this.parseBindingAtom()\n  if (this.options.ecmaVersion < 6 || !this.eat(tt.eq)) return left\n  let node = this.startNodeAt(startPos, startLoc)\n  node.left = left\n  node.right = this.parseMaybeAssign()\n  return this.finishNode(node, \"AssignmentPattern\")\n}\n\n// Verify that a node is an lval — something that can be assigned\n// to.\n// bindingType can be either:\n// 'var' indicating that the lval creates a 'var' binding\n// 'let' indicating that the lval creates a lexical ('let' or 'const') binding\n// 'none' indicating that the binding should be checked for illegal identifiers, but not for duplicate references\n\npp.checkLVal = function(expr, bindingType = BIND_NONE, checkClashes) {\n  switch (expr.type) {\n  case \"Identifier\":\n    if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n      this.raiseRecoverable(expr.start, (bindingType ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\")\n    if (checkClashes) {\n      if (has(checkClashes, expr.name))\n        this.raiseRecoverable(expr.start, \"Argument name clash\")\n      checkClashes[expr.name] = true\n    }\n    if (bindingType !== BIND_NONE && bindingType !== BIND_OUTSIDE) this.declareName(expr.name, bindingType, expr.start)\n    break\n\n  case \"MemberExpression\":\n    if (bindingType) this.raiseRecoverable(expr.start, \"Binding member expression\")\n    break\n\n  case \"ObjectPattern\":\n    for (let prop of expr.properties)\n      this.checkLVal(prop, bindingType, checkClashes)\n    break\n\n  case \"Property\":\n    // AssignmentProperty has type === \"Property\"\n    this.checkLVal(expr.value, bindingType, checkClashes)\n    break\n\n  case \"ArrayPattern\":\n    for (let elem of expr.elements) {\n      if (elem) this.checkLVal(elem, bindingType, checkClashes)\n    }\n    break\n\n  case \"AssignmentPattern\":\n    this.checkLVal(expr.left, bindingType, checkClashes)\n    break\n\n  case \"RestElement\":\n    this.checkLVal(expr.argument, bindingType, checkClashes)\n    break\n\n  case \"ParenthesizedExpression\":\n    this.checkLVal(expr.expression, bindingType, checkClashes)\n    break\n\n  default:\n    this.raise(expr.start, (bindingType ? \"Binding\" : \"Assigning to\") + \" rvalue\")\n  }\n}\n","// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\nimport {types as tt} from \"./tokentype\"\nimport {Parser} from \"./state\"\nimport {DestructuringErrors} from \"./parseutil\"\nimport {lineBreak} from \"./whitespace\"\nimport {functionFlags, SCOPE_ARROW, SCOPE_SUPER, SCOPE_DIRECT_SUPER, BIND_OUTSIDE, BIND_VAR} from \"./scopeflags\"\n\nconst pp = Parser.prototype\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n  if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n    return\n  if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n    return\n  let {key} = prop, name\n  switch (key.type) {\n  case \"Identifier\": name = key.name; break\n  case \"Literal\": name = String(key.value); break\n  default: return\n  }\n  let {kind} = prop\n  if (this.options.ecmaVersion >= 6) {\n    if (name === \"__proto__\" && kind === \"init\") {\n      if (propHash.proto) {\n        if (refDestructuringErrors && refDestructuringErrors.doubleProto < 0) refDestructuringErrors.doubleProto = key.start\n        // Backwards-compat kludge. Can be removed in version 6.0\n        else this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\")\n      }\n      propHash.proto = true\n    }\n    return\n  }\n  name = \"$\" + name\n  let other = propHash[name]\n  if (other) {\n    let redefinition\n    if (kind === \"init\") {\n      redefinition = this.strict && other.init || other.get || other.set\n    } else {\n      redefinition = other.init || other[kind]\n    }\n    if (redefinition)\n      this.raiseRecoverable(key.start, \"Redefinition of property\")\n  } else {\n    other = propHash[name] = {\n      init: false,\n      get: false,\n      set: false\n    }\n  }\n  other[kind] = true\n}\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\npp.parseExpression = function(noIn, refDestructuringErrors) {\n  let startPos = this.start, startLoc = this.startLoc\n  let expr = this.parseMaybeAssign(noIn, refDestructuringErrors)\n  if (this.type === tt.comma) {\n    let node = this.startNodeAt(startPos, startLoc)\n    node.expressions = [expr]\n    while (this.eat(tt.comma)) node.expressions.push(this.parseMaybeAssign(noIn, refDestructuringErrors))\n    return this.finishNode(node, \"SequenceExpression\")\n  }\n  return expr\n}\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp.parseMaybeAssign = function(noIn, refDestructuringErrors, afterLeftParse) {\n  if (this.isContextual(\"yield\")) {\n    if (this.inGenerator) return this.parseYield(noIn)\n    // The tokenizer will assume an expression is allowed after\n    // `yield`, but this isn't that kind of yield\n    else this.exprAllowed = false\n  }\n\n  let ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldShorthandAssign = -1\n  if (refDestructuringErrors) {\n    oldParenAssign = refDestructuringErrors.parenthesizedAssign\n    oldTrailingComma = refDestructuringErrors.trailingComma\n    oldShorthandAssign = refDestructuringErrors.shorthandAssign\n    refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.shorthandAssign = -1\n  } else {\n    refDestructuringErrors = new DestructuringErrors\n    ownDestructuringErrors = true\n  }\n\n  let startPos = this.start, startLoc = this.startLoc\n  if (this.type === tt.parenL || this.type === tt.name)\n    this.potentialArrowAt = this.start\n  let left = this.parseMaybeConditional(noIn, refDestructuringErrors)\n  if (afterLeftParse) left = afterLeftParse.call(this, left, startPos, startLoc)\n  if (this.type.isAssign) {\n    let node = this.startNodeAt(startPos, startLoc)\n    node.operator = this.value\n    node.left = this.type === tt.eq ? this.toAssignable(left, false, refDestructuringErrors) : left\n    if (!ownDestructuringErrors) DestructuringErrors.call(refDestructuringErrors)\n    refDestructuringErrors.shorthandAssign = -1 // reset because shorthand default was used correctly\n    this.checkLVal(left)\n    this.next()\n    node.right = this.parseMaybeAssign(noIn)\n    return this.finishNode(node, \"AssignmentExpression\")\n  } else {\n    if (ownDestructuringErrors) this.checkExpressionErrors(refDestructuringErrors, true)\n  }\n  if (oldParenAssign > -1) refDestructuringErrors.parenthesizedAssign = oldParenAssign\n  if (oldTrailingComma > -1) refDestructuringErrors.trailingComma = oldTrailingComma\n  if (oldShorthandAssign > -1) refDestructuringErrors.shorthandAssign = oldShorthandAssign\n  return left\n}\n\n// Parse a ternary conditional (`?:`) operator.\n\npp.parseMaybeConditional = function(noIn, refDestructuringErrors) {\n  let startPos = this.start, startLoc = this.startLoc\n  let expr = this.parseExprOps(noIn, refDestructuringErrors)\n  if (this.checkExpressionErrors(refDestructuringErrors)) return expr\n  if (this.eat(tt.question)) {\n    let node = this.startNodeAt(startPos, startLoc)\n    node.test = expr\n    node.consequent = this.parseMaybeAssign()\n    this.expect(tt.colon)\n    node.alternate = this.parseMaybeAssign(noIn)\n    return this.finishNode(node, \"ConditionalExpression\")\n  }\n  return expr\n}\n\n// Start the precedence parser.\n\npp.parseExprOps = function(noIn, refDestructuringErrors) {\n  let startPos = this.start, startLoc = this.startLoc\n  let expr = this.parseMaybeUnary(refDestructuringErrors, false)\n  if (this.checkExpressionErrors(refDestructuringErrors)) return expr\n  return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, noIn)\n}\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, noIn) {\n  let prec = this.type.binop\n  if (prec != null && (!noIn || this.type !== tt._in)) {\n    if (prec > minPrec) {\n      let logical = this.type === tt.logicalOR || this.type === tt.logicalAND\n      let op = this.value\n      this.next()\n      let startPos = this.start, startLoc = this.startLoc\n      let right = this.parseExprOp(this.parseMaybeUnary(null, false), startPos, startLoc, prec, noIn)\n      let node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical)\n      return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, noIn)\n    }\n  }\n  return left\n}\n\npp.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n  let node = this.startNodeAt(startPos, startLoc)\n  node.left = left\n  node.operator = op\n  node.right = right\n  return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n}\n\n// Parse unary operators, both prefix and postfix.\n\npp.parseMaybeUnary = function(refDestructuringErrors, sawUnary) {\n  let startPos = this.start, startLoc = this.startLoc, expr\n  if (this.isContextual(\"await\") && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction))) {\n    expr = this.parseAwait()\n    sawUnary = true\n  } else if (this.type.prefix) {\n    let node = this.startNode(), update = this.type === tt.incDec\n    node.operator = this.value\n    node.prefix = true\n    this.next()\n    node.argument = this.parseMaybeUnary(null, true)\n    this.checkExpressionErrors(refDestructuringErrors, true)\n    if (update) this.checkLVal(node.argument)\n    else if (this.strict && node.operator === \"delete\" &&\n             node.argument.type === \"Identifier\")\n      this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\")\n    else sawUnary = true\n    expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\")\n  } else {\n    expr = this.parseExprSubscripts(refDestructuringErrors)\n    if (this.checkExpressionErrors(refDestructuringErrors)) return expr\n    while (this.type.postfix && !this.canInsertSemicolon()) {\n      let node = this.startNodeAt(startPos, startLoc)\n      node.operator = this.value\n      node.prefix = false\n      node.argument = expr\n      this.checkLVal(expr)\n      this.next()\n      expr = this.finishNode(node, \"UpdateExpression\")\n    }\n  }\n\n  if (!sawUnary && this.eat(tt.starstar))\n    return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false), \"**\", false)\n  else\n    return expr\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp.parseExprSubscripts = function(refDestructuringErrors) {\n  let startPos = this.start, startLoc = this.startLoc\n  let expr = this.parseExprAtom(refDestructuringErrors)\n  let skipArrowSubscripts = expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\"\n  if (this.checkExpressionErrors(refDestructuringErrors) || skipArrowSubscripts) return expr\n  let result = this.parseSubscripts(expr, startPos, startLoc)\n  if (refDestructuringErrors && result.type === \"MemberExpression\") {\n    if (refDestructuringErrors.parenthesizedAssign >= result.start) refDestructuringErrors.parenthesizedAssign = -1\n    if (refDestructuringErrors.parenthesizedBind >= result.start) refDestructuringErrors.parenthesizedBind = -1\n  }\n  return result\n}\n\npp.parseSubscripts = function(base, startPos, startLoc, noCalls) {\n  let maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n      this.lastTokEnd === base.end && !this.canInsertSemicolon() && this.input.slice(base.start, base.end) === \"async\"\n  while (true) {\n    let element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow)\n    if (element === base || element.type === \"ArrowFunctionExpression\") return element\n    base = element\n  }\n}\n\npp.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow) {\n  let computed = this.eat(tt.bracketL)\n  if (computed || this.eat(tt.dot)) {\n    let node = this.startNodeAt(startPos, startLoc)\n    node.object = base\n    node.property = computed ? this.parseExpression() : this.parseIdent(true)\n    node.computed = !!computed\n    if (computed) this.expect(tt.bracketR)\n    base = this.finishNode(node, \"MemberExpression\")\n  } else if (!noCalls && this.eat(tt.parenL)) {\n    let refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos\n    this.yieldPos = 0\n    this.awaitPos = 0\n    this.awaitIdentPos = 0\n    let exprList = this.parseExprList(tt.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors)\n    if (maybeAsyncArrow && !this.canInsertSemicolon() && this.eat(tt.arrow)) {\n      this.checkPatternErrors(refDestructuringErrors, false)\n      this.checkYieldAwaitInDefaultParams()\n      if (this.awaitIdentPos > 0)\n        this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\")\n      this.yieldPos = oldYieldPos\n      this.awaitPos = oldAwaitPos\n      this.awaitIdentPos = oldAwaitIdentPos\n      return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true)\n    }\n    this.checkExpressionErrors(refDestructuringErrors, true)\n    this.yieldPos = oldYieldPos || this.yieldPos\n    this.awaitPos = oldAwaitPos || this.awaitPos\n    this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos\n    let node = this.startNodeAt(startPos, startLoc)\n    node.callee = base\n    node.arguments = exprList\n    base = this.finishNode(node, \"CallExpression\")\n  } else if (this.type === tt.backQuote) {\n    let node = this.startNodeAt(startPos, startLoc)\n    node.tag = base\n    node.quasi = this.parseTemplate({isTagged: true})\n    base = this.finishNode(node, \"TaggedTemplateExpression\")\n  }\n  return base\n}\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp.parseExprAtom = function(refDestructuringErrors) {\n  // If a division operator appears in an expression position, the\n  // tokenizer got confused, and we force it to read a regexp instead.\n  if (this.type === tt.slash) this.readRegexp()\n\n  let node, canBeArrow = this.potentialArrowAt === this.start\n  switch (this.type) {\n  case tt._super:\n    if (!this.allowSuper)\n      this.raise(this.start, \"'super' keyword outside a method\")\n    node = this.startNode()\n    this.next()\n    if (this.type === tt.parenL && !this.allowDirectSuper)\n      this.raise(node.start, \"super() call outside constructor of a subclass\")\n    // The `super` keyword can appear at below:\n    // SuperProperty:\n    //     super [ Expression ]\n    //     super . IdentifierName\n    // SuperCall:\n    //     super Arguments\n    if (this.type !== tt.dot && this.type !== tt.bracketL && this.type !== tt.parenL)\n      this.unexpected()\n    return this.finishNode(node, \"Super\")\n\n  case tt._this:\n    node = this.startNode()\n    this.next()\n    return this.finishNode(node, \"ThisExpression\")\n\n  case tt.name:\n    let startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc\n    let id = this.parseIdent(false)\n    if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(tt._function))\n      return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true)\n    if (canBeArrow && !this.canInsertSemicolon()) {\n      if (this.eat(tt.arrow))\n        return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false)\n      if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === tt.name && !containsEsc) {\n        id = this.parseIdent(false)\n        if (this.canInsertSemicolon() || !this.eat(tt.arrow))\n          this.unexpected()\n        return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true)\n      }\n    }\n    return id\n\n  case tt.regexp:\n    let value = this.value\n    node = this.parseLiteral(value.value)\n    node.regex = {pattern: value.pattern, flags: value.flags}\n    return node\n\n  case tt.num: case tt.string:\n    return this.parseLiteral(this.value)\n\n  case tt._null: case tt._true: case tt._false:\n    node = this.startNode()\n    node.value = this.type === tt._null ? null : this.type === tt._true\n    node.raw = this.type.keyword\n    this.next()\n    return this.finishNode(node, \"Literal\")\n\n  case tt.parenL:\n    let start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow)\n    if (refDestructuringErrors) {\n      if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n        refDestructuringErrors.parenthesizedAssign = start\n      if (refDestructuringErrors.parenthesizedBind < 0)\n        refDestructuringErrors.parenthesizedBind = start\n    }\n    return expr\n\n  case tt.bracketL:\n    node = this.startNode()\n    this.next()\n    node.elements = this.parseExprList(tt.bracketR, true, true, refDestructuringErrors)\n    return this.finishNode(node, \"ArrayExpression\")\n\n  case tt.braceL:\n    return this.parseObj(false, refDestructuringErrors)\n\n  case tt._function:\n    node = this.startNode()\n    this.next()\n    return this.parseFunction(node, 0)\n\n  case tt._class:\n    return this.parseClass(this.startNode(), false)\n\n  case tt._new:\n    return this.parseNew()\n\n  case tt.backQuote:\n    return this.parseTemplate()\n\n  default:\n    this.unexpected()\n  }\n}\n\npp.parseLiteral = function(value) {\n  let node = this.startNode()\n  node.value = value\n  node.raw = this.input.slice(this.start, this.end)\n  this.next()\n  return this.finishNode(node, \"Literal\")\n}\n\npp.parseParenExpression = function() {\n  this.expect(tt.parenL)\n  let val = this.parseExpression()\n  this.expect(tt.parenR)\n  return val\n}\n\npp.parseParenAndDistinguishExpression = function(canBeArrow) {\n  let startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8\n  if (this.options.ecmaVersion >= 6) {\n    this.next()\n\n    let innerStartPos = this.start, innerStartLoc = this.startLoc\n    let exprList = [], first = true, lastIsComma = false\n    let refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart\n    this.yieldPos = 0\n    this.awaitPos = 0\n    // Do not save awaitIdentPos to allow checking awaits nested in parameters\n    while (this.type !== tt.parenR) {\n      first ? first = false : this.expect(tt.comma)\n      if (allowTrailingComma && this.afterTrailingComma(tt.parenR, true)) {\n        lastIsComma = true\n        break\n      } else if (this.type === tt.ellipsis) {\n        spreadStart = this.start\n        exprList.push(this.parseParenItem(this.parseRestBinding()))\n        if (this.type === tt.comma) this.raise(this.start, \"Comma is not permitted after the rest element\")\n        break\n      } else {\n        exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem))\n      }\n    }\n    let innerEndPos = this.start, innerEndLoc = this.startLoc\n    this.expect(tt.parenR)\n\n    if (canBeArrow && !this.canInsertSemicolon() && this.eat(tt.arrow)) {\n      this.checkPatternErrors(refDestructuringErrors, false)\n      this.checkYieldAwaitInDefaultParams()\n      this.yieldPos = oldYieldPos\n      this.awaitPos = oldAwaitPos\n      return this.parseParenArrowList(startPos, startLoc, exprList)\n    }\n\n    if (!exprList.length || lastIsComma) this.unexpected(this.lastTokStart)\n    if (spreadStart) this.unexpected(spreadStart)\n    this.checkExpressionErrors(refDestructuringErrors, true)\n    this.yieldPos = oldYieldPos || this.yieldPos\n    this.awaitPos = oldAwaitPos || this.awaitPos\n\n    if (exprList.length > 1) {\n      val = this.startNodeAt(innerStartPos, innerStartLoc)\n      val.expressions = exprList\n      this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc)\n    } else {\n      val = exprList[0]\n    }\n  } else {\n    val = this.parseParenExpression()\n  }\n\n  if (this.options.preserveParens) {\n    let par = this.startNodeAt(startPos, startLoc)\n    par.expression = val\n    return this.finishNode(par, \"ParenthesizedExpression\")\n  } else {\n    return val\n  }\n}\n\npp.parseParenItem = function(item) {\n  return item\n}\n\npp.parseParenArrowList = function(startPos, startLoc, exprList) {\n  return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList)\n}\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nconst empty = []\n\npp.parseNew = function() {\n  let node = this.startNode()\n  let meta = this.parseIdent(true)\n  if (this.options.ecmaVersion >= 6 && this.eat(tt.dot)) {\n    node.meta = meta\n    let containsEsc = this.containsEsc\n    node.property = this.parseIdent(true)\n    if (node.property.name !== \"target\" || containsEsc)\n      this.raiseRecoverable(node.property.start, \"The only valid meta property for new is new.target\")\n    if (!this.inNonArrowFunction())\n      this.raiseRecoverable(node.start, \"new.target can only be used in functions\")\n    return this.finishNode(node, \"MetaProperty\")\n  }\n  let startPos = this.start, startLoc = this.startLoc\n  node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true)\n  if (this.eat(tt.parenL)) node.arguments = this.parseExprList(tt.parenR, this.options.ecmaVersion >= 8, false)\n  else node.arguments = empty\n  return this.finishNode(node, \"NewExpression\")\n}\n\n// Parse template expression.\n\npp.parseTemplateElement = function({isTagged}) {\n  let elem = this.startNode()\n  if (this.type === tt.invalidTemplate) {\n    if (!isTagged) {\n      this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\")\n    }\n    elem.value = {\n      raw: this.value,\n      cooked: null\n    }\n  } else {\n    elem.value = {\n      raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: this.value\n    }\n  }\n  this.next()\n  elem.tail = this.type === tt.backQuote\n  return this.finishNode(elem, \"TemplateElement\")\n}\n\npp.parseTemplate = function({isTagged = false} = {}) {\n  let node = this.startNode()\n  this.next()\n  node.expressions = []\n  let curElt = this.parseTemplateElement({isTagged})\n  node.quasis = [curElt]\n  while (!curElt.tail) {\n    if (this.type === tt.eof) this.raise(this.pos, \"Unterminated template literal\")\n    this.expect(tt.dollarBraceL)\n    node.expressions.push(this.parseExpression())\n    this.expect(tt.braceR)\n    node.quasis.push(curElt = this.parseTemplateElement({isTagged}))\n  }\n  this.next()\n  return this.finishNode(node, \"TemplateLiteral\")\n}\n\npp.isAsyncProp = function(prop) {\n  return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n    (this.type === tt.name || this.type === tt.num || this.type === tt.string || this.type === tt.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === tt.star)) &&\n    !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n}\n\n// Parse an object literal or binding pattern.\n\npp.parseObj = function(isPattern, refDestructuringErrors) {\n  let node = this.startNode(), first = true, propHash = {}\n  node.properties = []\n  this.next()\n  while (!this.eat(tt.braceR)) {\n    if (!first) {\n      this.expect(tt.comma)\n      if (this.afterTrailingComma(tt.braceR)) break\n    } else first = false\n\n    const prop = this.parseProperty(isPattern, refDestructuringErrors)\n    if (!isPattern) this.checkPropClash(prop, propHash, refDestructuringErrors)\n    node.properties.push(prop)\n  }\n  return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n}\n\npp.parseProperty = function(isPattern, refDestructuringErrors) {\n  let prop = this.startNode(), isGenerator, isAsync, startPos, startLoc\n  if (this.options.ecmaVersion >= 9 && this.eat(tt.ellipsis)) {\n    if (isPattern) {\n      prop.argument = this.parseIdent(false)\n      if (this.type === tt.comma) {\n        this.raise(this.start, \"Comma is not permitted after the rest element\")\n      }\n      return this.finishNode(prop, \"RestElement\")\n    }\n    // To disallow parenthesized identifier via `this.toAssignable()`.\n    if (this.type === tt.parenL && refDestructuringErrors) {\n      if (refDestructuringErrors.parenthesizedAssign < 0) {\n        refDestructuringErrors.parenthesizedAssign = this.start\n      }\n      if (refDestructuringErrors.parenthesizedBind < 0) {\n        refDestructuringErrors.parenthesizedBind = this.start\n      }\n    }\n    // Parse argument.\n    prop.argument = this.parseMaybeAssign(false, refDestructuringErrors)\n    // To disallow trailing comma via `this.toAssignable()`.\n    if (this.type === tt.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n      refDestructuringErrors.trailingComma = this.start\n    }\n    // Finish\n    return this.finishNode(prop, \"SpreadElement\")\n  }\n  if (this.options.ecmaVersion >= 6) {\n    prop.method = false\n    prop.shorthand = false\n    if (isPattern || refDestructuringErrors) {\n      startPos = this.start\n      startLoc = this.startLoc\n    }\n    if (!isPattern)\n      isGenerator = this.eat(tt.star)\n  }\n  let containsEsc = this.containsEsc\n  this.parsePropertyName(prop)\n  if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n    isAsync = true\n    isGenerator = this.options.ecmaVersion >= 9 && this.eat(tt.star)\n    this.parsePropertyName(prop, refDestructuringErrors)\n  } else {\n    isAsync = false\n  }\n  this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc)\n  return this.finishNode(prop, \"Property\")\n}\n\npp.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n  if ((isGenerator || isAsync) && this.type === tt.colon)\n    this.unexpected()\n\n  if (this.eat(tt.colon)) {\n    prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors)\n    prop.kind = \"init\"\n  } else if (this.options.ecmaVersion >= 6 && this.type === tt.parenL) {\n    if (isPattern) this.unexpected()\n    prop.kind = \"init\"\n    prop.method = true\n    prop.value = this.parseMethod(isGenerator, isAsync)\n  } else if (!isPattern && !containsEsc &&\n             this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n             (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n             (this.type !== tt.comma && this.type !== tt.braceR)) {\n    if (isGenerator || isAsync) this.unexpected()\n    prop.kind = prop.key.name\n    this.parsePropertyName(prop)\n    prop.value = this.parseMethod(false)\n    let paramCount = prop.kind === \"get\" ? 0 : 1\n    if (prop.value.params.length !== paramCount) {\n      let start = prop.value.start\n      if (prop.kind === \"get\")\n        this.raiseRecoverable(start, \"getter should have no params\")\n      else\n        this.raiseRecoverable(start, \"setter should have exactly one param\")\n    } else {\n      if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n        this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\")\n    }\n  } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n    if (isGenerator || isAsync) this.unexpected()\n    this.checkUnreserved(prop.key)\n    if (prop.key.name === \"await\" && !this.awaitIdentPos)\n      this.awaitIdentPos = startPos\n    prop.kind = \"init\"\n    if (isPattern) {\n      prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key)\n    } else if (this.type === tt.eq && refDestructuringErrors) {\n      if (refDestructuringErrors.shorthandAssign < 0)\n        refDestructuringErrors.shorthandAssign = this.start\n      prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key)\n    } else {\n      prop.value = prop.key\n    }\n    prop.shorthand = true\n  } else this.unexpected()\n}\n\npp.parsePropertyName = function(prop) {\n  if (this.options.ecmaVersion >= 6) {\n    if (this.eat(tt.bracketL)) {\n      prop.computed = true\n      prop.key = this.parseMaybeAssign()\n      this.expect(tt.bracketR)\n      return prop.key\n    } else {\n      prop.computed = false\n    }\n  }\n  return prop.key = this.type === tt.num || this.type === tt.string ? this.parseExprAtom() : this.parseIdent(true)\n}\n\n// Initialize empty function node.\n\npp.initFunction = function(node) {\n  node.id = null\n  if (this.options.ecmaVersion >= 6) node.generator = node.expression = false\n  if (this.options.ecmaVersion >= 8) node.async = false\n}\n\n// Parse object or class method.\n\npp.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n  let node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos\n\n  this.initFunction(node)\n  if (this.options.ecmaVersion >= 6)\n    node.generator = isGenerator\n  if (this.options.ecmaVersion >= 8)\n    node.async = !!isAsync\n\n  this.yieldPos = 0\n  this.awaitPos = 0\n  this.awaitIdentPos = 0\n  this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0))\n\n  this.expect(tt.parenL)\n  node.params = this.parseBindingList(tt.parenR, false, this.options.ecmaVersion >= 8)\n  this.checkYieldAwaitInDefaultParams()\n  this.parseFunctionBody(node, false, true)\n\n  this.yieldPos = oldYieldPos\n  this.awaitPos = oldAwaitPos\n  this.awaitIdentPos = oldAwaitIdentPos\n  return this.finishNode(node, \"FunctionExpression\")\n}\n\n// Parse arrow function expression with given parameters.\n\npp.parseArrowExpression = function(node, params, isAsync) {\n  let oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos\n\n  this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW)\n  this.initFunction(node)\n  if (this.options.ecmaVersion >= 8) node.async = !!isAsync\n\n  this.yieldPos = 0\n  this.awaitPos = 0\n  this.awaitIdentPos = 0\n\n  node.params = this.toAssignableList(params, true)\n  this.parseFunctionBody(node, true, false)\n\n  this.yieldPos = oldYieldPos\n  this.awaitPos = oldAwaitPos\n  this.awaitIdentPos = oldAwaitIdentPos\n  return this.finishNode(node, \"ArrowFunctionExpression\")\n}\n\n// Parse function body and check parameters.\n\npp.parseFunctionBody = function(node, isArrowFunction, isMethod) {\n  let isExpression = isArrowFunction && this.type !== tt.braceL\n  let oldStrict = this.strict, useStrict = false\n\n  if (isExpression) {\n    node.body = this.parseMaybeAssign()\n    node.expression = true\n    this.checkParams(node, false)\n  } else {\n    let nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params)\n    if (!oldStrict || nonSimple) {\n      useStrict = this.strictDirective(this.end)\n      // If this is a strict mode function, verify that argument names\n      // are not repeated, and it does not try to bind the words `eval`\n      // or `arguments`.\n      if (useStrict && nonSimple)\n        this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\")\n    }\n    // Start a new scope with regard to labels and the `inFunction`\n    // flag (restore them to their old value afterwards).\n    let oldLabels = this.labels\n    this.labels = []\n    if (useStrict) this.strict = true\n\n    // Add the params to varDeclaredNames to ensure that an error is thrown\n    // if a let/const declaration in the function clashes with one of the params.\n    this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params))\n    node.body = this.parseBlock(false)\n    node.expression = false\n    this.adaptDirectivePrologue(node.body.body)\n    this.labels = oldLabels\n  }\n  this.exitScope()\n\n  // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n  if (this.strict && node.id) this.checkLVal(node.id, BIND_OUTSIDE)\n  this.strict = oldStrict\n}\n\npp.isSimpleParamList = function(params) {\n  for (let param of params)\n    if (param.type !== \"Identifier\") return false\n  return true\n}\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp.checkParams = function(node, allowDuplicates) {\n  let nameHash = {}\n  for (let param of node.params)\n    this.checkLVal(param, BIND_VAR, allowDuplicates ? null : nameHash)\n}\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n  let elts = [], first = true\n  while (!this.eat(close)) {\n    if (!first) {\n      this.expect(tt.comma)\n      if (allowTrailingComma && this.afterTrailingComma(close)) break\n    } else first = false\n\n    let elt\n    if (allowEmpty && this.type === tt.comma)\n      elt = null\n    else if (this.type === tt.ellipsis) {\n      elt = this.parseSpread(refDestructuringErrors)\n      if (refDestructuringErrors && this.type === tt.comma && refDestructuringErrors.trailingComma < 0)\n        refDestructuringErrors.trailingComma = this.start\n    } else {\n      elt = this.parseMaybeAssign(false, refDestructuringErrors)\n    }\n    elts.push(elt)\n  }\n  return elts\n}\n\npp.checkUnreserved = function({start, end, name}) {\n  if (this.inGenerator && name === \"yield\")\n    this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\")\n  if (this.inAsync && name === \"await\")\n    this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\")\n  if (this.keywords.test(name))\n    this.raise(start, `Unexpected keyword '${name}'`)\n  if (this.options.ecmaVersion < 6 &&\n    this.input.slice(start, end).indexOf(\"\\\\\") !== -1) return\n  const re = this.strict ? this.reservedWordsStrict : this.reservedWords\n  if (re.test(name)) {\n    if (!this.inAsync && name === \"await\")\n      this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\")\n    this.raiseRecoverable(start, `The keyword '${name}' is reserved`)\n  }\n}\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp.parseIdent = function(liberal, isBinding) {\n  let node = this.startNode()\n  if (liberal && this.options.allowReserved === \"never\") liberal = false\n  if (this.type === tt.name) {\n    node.name = this.value\n  } else if (this.type.keyword) {\n    node.name = this.type.keyword\n\n    // To fix https://github.com/acornjs/acorn/issues/575\n    // `class` and `function` keywords push new context into this.context.\n    // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n    // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n    if ((node.name === \"class\" || node.name === \"function\") &&\n        (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n      this.context.pop()\n    }\n  } else {\n    this.unexpected()\n  }\n  this.next()\n  this.finishNode(node, \"Identifier\")\n  if (!liberal) {\n    this.checkUnreserved(node)\n    if (node.name === \"await\" && !this.awaitIdentPos)\n      this.awaitIdentPos = node.start\n  }\n  return node\n}\n\n// Parses yield expression inside generator.\n\npp.parseYield = function(noIn) {\n  if (!this.yieldPos) this.yieldPos = this.start\n\n  let node = this.startNode()\n  this.next()\n  if (this.type === tt.semi || this.canInsertSemicolon() || (this.type !== tt.star && !this.type.startsExpr)) {\n    node.delegate = false\n    node.argument = null\n  } else {\n    node.delegate = this.eat(tt.star)\n    node.argument = this.parseMaybeAssign(noIn)\n  }\n  return this.finishNode(node, \"YieldExpression\")\n}\n\npp.parseAwait = function() {\n  if (!this.awaitPos) this.awaitPos = this.start\n\n  let node = this.startNode()\n  this.next()\n  node.argument = this.parseMaybeUnary(null, true)\n  return this.finishNode(node, \"AwaitExpression\")\n}\n","import {Parser} from \"./state\"\nimport {Position, getLineInfo} from \"./locutil\"\n\nconst pp = Parser.prototype\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp.raise = function(pos, message) {\n  let loc = getLineInfo(this.input, pos)\n  message += \" (\" + loc.line + \":\" + loc.column + \")\"\n  let err = new SyntaxError(message)\n  err.pos = pos; err.loc = loc; err.raisedAt = this.pos\n  throw err\n}\n\npp.raiseRecoverable = pp.raise\n\npp.curPosition = function() {\n  if (this.options.locations) {\n    return new Position(this.curLine, this.pos - this.lineStart)\n  }\n}\n","import {Parser} from \"./state\"\nimport {SCOPE_VAR, SCOPE_FUNCTION, SCOPE_TOP, SCOPE_ARROW, SCOPE_SIMPLE_CATCH, BIND_LEXICAL, BIND_SIMPLE_CATCH, BIND_FUNCTION} from \"./scopeflags\"\n\nconst pp = Parser.prototype\n\nclass Scope {\n  constructor(flags) {\n    this.flags = flags\n    // A list of var-declared names in the current lexical scope\n    this.var = []\n    // A list of lexically-declared names in the current lexical scope\n    this.lexical = []\n    // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n    this.functions = []\n  }\n}\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp.enterScope = function(flags) {\n  this.scopeStack.push(new Scope(flags))\n}\n\npp.exitScope = function() {\n  this.scopeStack.pop()\n}\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp.treatFunctionsAsVarInScope = function(scope) {\n  return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n}\n\npp.declareName = function(name, bindingType, pos) {\n  let redeclared = false\n  if (bindingType === BIND_LEXICAL) {\n    const scope = this.currentScope()\n    redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1\n    scope.lexical.push(name)\n    if (this.inModule && (scope.flags & SCOPE_TOP))\n      delete this.undefinedExports[name]\n  } else if (bindingType === BIND_SIMPLE_CATCH) {\n    const scope = this.currentScope()\n    scope.lexical.push(name)\n  } else if (bindingType === BIND_FUNCTION) {\n    const scope = this.currentScope()\n    if (this.treatFunctionsAsVar)\n      redeclared = scope.lexical.indexOf(name) > -1\n    else\n      redeclared = scope.lexical.indexOf(name) > -1 || scope.var.indexOf(name) > -1\n    scope.functions.push(name)\n  } else {\n    for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n      const scope = this.scopeStack[i]\n      if (scope.lexical.indexOf(name) > -1 && !((scope.flags & SCOPE_SIMPLE_CATCH) && scope.lexical[0] === name) ||\n          !this.treatFunctionsAsVarInScope(scope) && scope.functions.indexOf(name) > -1) {\n        redeclared = true\n        break\n      }\n      scope.var.push(name)\n      if (this.inModule && (scope.flags & SCOPE_TOP))\n        delete this.undefinedExports[name]\n      if (scope.flags & SCOPE_VAR) break\n    }\n  }\n  if (redeclared) this.raiseRecoverable(pos, `Identifier '${name}' has already been declared`)\n}\n\npp.checkLocalExport = function(id) {\n  // scope.functions must be empty as Module code is always strict.\n  if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n      this.scopeStack[0].var.indexOf(id.name) === -1) {\n    this.undefinedExports[id.name] = id\n  }\n}\n\npp.currentScope = function() {\n  return this.scopeStack[this.scopeStack.length - 1]\n}\n\npp.currentVarScope = function() {\n  for (let i = this.scopeStack.length - 1;; i--) {\n    let scope = this.scopeStack[i]\n    if (scope.flags & SCOPE_VAR) return scope\n  }\n}\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp.currentThisScope = function() {\n  for (let i = this.scopeStack.length - 1;; i--) {\n    let scope = this.scopeStack[i]\n    if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) return scope\n  }\n}\n","import {Parser} from \"./state\"\nimport {SourceLocation} from \"./locutil\"\n\nexport class Node {\n  constructor(parser, pos, loc) {\n    this.type = \"\"\n    this.start = pos\n    this.end = 0\n    if (parser.options.locations)\n      this.loc = new SourceLocation(parser, loc)\n    if (parser.options.directSourceFile)\n      this.sourceFile = parser.options.directSourceFile\n    if (parser.options.ranges)\n      this.range = [pos, 0]\n  }\n}\n\n// Start an AST node, attaching a start offset.\n\nconst pp = Parser.prototype\n\npp.startNode = function() {\n  return new Node(this, this.start, this.startLoc)\n}\n\npp.startNodeAt = function(pos, loc) {\n  return new Node(this, pos, loc)\n}\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n  node.type = type\n  node.end = pos\n  if (this.options.locations)\n    node.loc.end = loc\n  if (this.options.ranges)\n    node.range[1] = pos\n  return node\n}\n\npp.finishNode = function(node, type) {\n  return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n}\n\n// Finish node at given position\n\npp.finishNodeAt = function(node, type, pos, loc) {\n  return finishNodeAt.call(this, node, type, pos, loc)\n}\n","// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\nimport {Parser} from \"./state\"\nimport {types as tt} from \"./tokentype\"\nimport {lineBreak} from \"./whitespace\"\n\nexport class TokContext {\n  constructor(token, isExpr, preserveSpace, override, generator) {\n    this.token = token\n    this.isExpr = !!isExpr\n    this.preserveSpace = !!preserveSpace\n    this.override = override\n    this.generator = !!generator\n  }\n}\n\nexport const types = {\n  b_stat: new TokContext(\"{\", false),\n  b_expr: new TokContext(\"{\", true),\n  b_tmpl: new TokContext(\"${\", false),\n  p_stat: new TokContext(\"(\", false),\n  p_expr: new TokContext(\"(\", true),\n  q_tmpl: new TokContext(\"`\", true, true, p => p.tryReadTemplateToken()),\n  f_stat: new TokContext(\"function\", false),\n  f_expr: new TokContext(\"function\", true),\n  f_expr_gen: new TokContext(\"function\", true, false, null, true),\n  f_gen: new TokContext(\"function\", false, false, null, true)\n}\n\nconst pp = Parser.prototype\n\npp.initialContext = function() {\n  return [types.b_stat]\n}\n\npp.braceIsBlock = function(prevType) {\n  let parent = this.curContext()\n  if (parent === types.f_expr || parent === types.f_stat)\n    return true\n  if (prevType === tt.colon && (parent === types.b_stat || parent === types.b_expr))\n    return !parent.isExpr\n\n  // The check for `tt.name && exprAllowed` detects whether we are\n  // after a `yield` or `of` construct. See the `updateContext` for\n  // `tt.name`.\n  if (prevType === tt._return || prevType === tt.name && this.exprAllowed)\n    return lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n  if (prevType === tt._else || prevType === tt.semi || prevType === tt.eof || prevType === tt.parenR || prevType === tt.arrow)\n    return true\n  if (prevType === tt.braceL)\n    return parent === types.b_stat\n  if (prevType === tt._var || prevType === tt._const || prevType === tt.name)\n    return false\n  return !this.exprAllowed\n}\n\npp.inGeneratorContext = function() {\n  for (let i = this.context.length - 1; i >= 1; i--) {\n    let context = this.context[i]\n    if (context.token === \"function\")\n      return context.generator\n  }\n  return false\n}\n\npp.updateContext = function(prevType) {\n  let update, type = this.type\n  if (type.keyword && prevType === tt.dot)\n    this.exprAllowed = false\n  else if (update = type.updateContext)\n    update.call(this, prevType)\n  else\n    this.exprAllowed = type.beforeExpr\n}\n\n// Token-specific context update code\n\ntt.parenR.updateContext = tt.braceR.updateContext = function() {\n  if (this.context.length === 1) {\n    this.exprAllowed = true\n    return\n  }\n  let out = this.context.pop()\n  if (out === types.b_stat && this.curContext().token === \"function\") {\n    out = this.context.pop()\n  }\n  this.exprAllowed = !out.isExpr\n}\n\ntt.braceL.updateContext = function(prevType) {\n  this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr)\n  this.exprAllowed = true\n}\n\ntt.dollarBraceL.updateContext = function() {\n  this.context.push(types.b_tmpl)\n  this.exprAllowed = true\n}\n\ntt.parenL.updateContext = function(prevType) {\n  let statementParens = prevType === tt._if || prevType === tt._for || prevType === tt._with || prevType === tt._while\n  this.context.push(statementParens ? types.p_stat : types.p_expr)\n  this.exprAllowed = true\n}\n\ntt.incDec.updateContext = function() {\n  // tokExprAllowed stays unchanged\n}\n\ntt._function.updateContext = tt._class.updateContext = function(prevType) {\n  if (prevType.beforeExpr && prevType !== tt.semi && prevType !== tt._else &&\n      !(prevType === tt._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n      !((prevType === tt.colon || prevType === tt.braceL) && this.curContext() === types.b_stat))\n    this.context.push(types.f_expr)\n  else\n    this.context.push(types.f_stat)\n  this.exprAllowed = false\n}\n\ntt.backQuote.updateContext = function() {\n  if (this.curContext() === types.q_tmpl)\n    this.context.pop()\n  else\n    this.context.push(types.q_tmpl)\n  this.exprAllowed = false\n}\n\ntt.star.updateContext = function(prevType) {\n  if (prevType === tt._function) {\n    let index = this.context.length - 1\n    if (this.context[index] === types.f_expr)\n      this.context[index] = types.f_expr_gen\n    else\n      this.context[index] = types.f_gen\n  }\n  this.exprAllowed = true\n}\n\ntt.name.updateContext = function(prevType) {\n  let allowed = false\n  if (this.options.ecmaVersion >= 6 && prevType !== tt.dot) {\n    if (this.value === \"of\" && !this.exprAllowed ||\n        this.value === \"yield\" && this.inGeneratorContext())\n      allowed = true\n  }\n  this.exprAllowed = allowed\n}\n","import {wordsRegexp} from \"./util.js\"\n\n// This file contains Unicode properties extracted from the ECMAScript\n// specification. The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nconst ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\"\nconst unicodeBinaryProperties = {\n  9: ecma9BinaryProperties,\n  10: ecma9BinaryProperties + \" Extended_Pictographic\"\n}\n\n// #table-unicode-general-category-values\nconst unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\"\n\n// #table-unicode-script-values\nconst ecma9ScriptValues = \"Adlam Adlm Ahom Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\"\nconst unicodeScriptValues = {\n  9: ecma9ScriptValues,\n  10: ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\"\n}\n\nconst data = {}\nfunction buildUnicodeData(ecmaVersion) {\n  let d = data[ecmaVersion] = {\n    binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n    nonBinary: {\n      General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n      Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n    }\n  }\n  d.nonBinary.Script_Extensions = d.nonBinary.Script\n\n  d.nonBinary.gc = d.nonBinary.General_Category\n  d.nonBinary.sc = d.nonBinary.Script\n  d.nonBinary.scx = d.nonBinary.Script_Extensions\n}\nbuildUnicodeData(9)\nbuildUnicodeData(10)\n\nexport default data\n","import {isIdentifierStart, isIdentifierChar} from \"./identifier.js\"\nimport {Parser} from \"./state.js\"\nimport UNICODE_PROPERTY_VALUES from \"./unicode-property-data.js\"\nimport {has} from \"./util.js\"\n\nconst pp = Parser.prototype\n\nexport class RegExpValidationState {\n  constructor(parser) {\n    this.parser = parser\n    this.validFlags = `gim${parser.options.ecmaVersion >= 6 ? \"uy\" : \"\"}${parser.options.ecmaVersion >= 9 ? \"s\" : \"\"}`\n    this.unicodeProperties = UNICODE_PROPERTY_VALUES[parser.options.ecmaVersion >= 10 ? 10 : parser.options.ecmaVersion]\n    this.source = \"\"\n    this.flags = \"\"\n    this.start = 0\n    this.switchU = false\n    this.switchN = false\n    this.pos = 0\n    this.lastIntValue = 0\n    this.lastStringValue = \"\"\n    this.lastAssertionIsQuantifiable = false\n    this.numCapturingParens = 0\n    this.maxBackReference = 0\n    this.groupNames = []\n    this.backReferenceNames = []\n  }\n\n  reset(start, pattern, flags) {\n    const unicode = flags.indexOf(\"u\") !== -1\n    this.start = start | 0\n    this.source = pattern + \"\"\n    this.flags = flags\n    this.switchU = unicode && this.parser.options.ecmaVersion >= 6\n    this.switchN = unicode && this.parser.options.ecmaVersion >= 9\n  }\n\n  raise(message) {\n    this.parser.raiseRecoverable(this.start, `Invalid regular expression: /${this.source}/: ${message}`)\n  }\n\n  // If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n  // Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\n  at(i) {\n    const s = this.source\n    const l = s.length\n    if (i >= l) {\n      return -1\n    }\n    const c = s.charCodeAt(i)\n    if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n      return c\n    }\n    return (c << 10) + s.charCodeAt(i + 1) - 0x35FDC00\n  }\n\n  nextIndex(i) {\n    const s = this.source\n    const l = s.length\n    if (i >= l) {\n      return l\n    }\n    const c = s.charCodeAt(i)\n    if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n      return i + 1\n    }\n    return i + 2\n  }\n\n  current() {\n    return this.at(this.pos)\n  }\n\n  lookahead() {\n    return this.at(this.nextIndex(this.pos))\n  }\n\n  advance() {\n    this.pos = this.nextIndex(this.pos)\n  }\n\n  eat(ch) {\n    if (this.current() === ch) {\n      this.advance()\n      return true\n    }\n    return false\n  }\n}\n\nfunction codePointToString(ch) {\n  if (ch <= 0xFFFF) return String.fromCharCode(ch)\n  ch -= 0x10000\n  return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00)\n}\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp.validateRegExpFlags = function(state) {\n  const validFlags = state.validFlags\n  const flags = state.flags\n\n  for (let i = 0; i < flags.length; i++) {\n    const flag = flags.charAt(i)\n    if (validFlags.indexOf(flag) === -1) {\n      this.raise(state.start, \"Invalid regular expression flag\")\n    }\n    if (flags.indexOf(flag, i + 1) > -1) {\n      this.raise(state.start, \"Duplicate regular expression flag\")\n    }\n  }\n}\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp.validateRegExpPattern = function(state) {\n  this.regexp_pattern(state)\n\n  // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n  // parsing contains a |GroupName|, reparse with the goal symbol\n  // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n  // exception if _P_ did not conform to the grammar, if any elements of _P_\n  // were not matched by the parse, or if any Early Error conditions exist.\n  if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n    state.switchN = true\n    this.regexp_pattern(state)\n  }\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp.regexp_pattern = function(state) {\n  state.pos = 0\n  state.lastIntValue = 0\n  state.lastStringValue = \"\"\n  state.lastAssertionIsQuantifiable = false\n  state.numCapturingParens = 0\n  state.maxBackReference = 0\n  state.groupNames.length = 0\n  state.backReferenceNames.length = 0\n\n  this.regexp_disjunction(state)\n\n  if (state.pos !== state.source.length) {\n    // Make the same messages as V8.\n    if (state.eat(0x29 /* ) */)) {\n      state.raise(\"Unmatched ')'\")\n    }\n    if (state.eat(0x5D /* [ */) || state.eat(0x7D /* } */)) {\n      state.raise(\"Lone quantifier brackets\")\n    }\n  }\n  if (state.maxBackReference > state.numCapturingParens) {\n    state.raise(\"Invalid escape\")\n  }\n  for (const name of state.backReferenceNames) {\n    if (state.groupNames.indexOf(name) === -1) {\n      state.raise(\"Invalid named capture referenced\")\n    }\n  }\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp.regexp_disjunction = function(state) {\n  this.regexp_alternative(state)\n  while (state.eat(0x7C /* | */)) {\n    this.regexp_alternative(state)\n  }\n\n  // Make the same message as V8.\n  if (this.regexp_eatQuantifier(state, true)) {\n    state.raise(\"Nothing to repeat\")\n  }\n  if (state.eat(0x7B /* { */)) {\n    state.raise(\"Lone quantifier brackets\")\n  }\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp.regexp_alternative = function(state) {\n  while (state.pos < state.source.length && this.regexp_eatTerm(state))\n    ;\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp.regexp_eatTerm = function(state) {\n  if (this.regexp_eatAssertion(state)) {\n    // Handle `QuantifiableAssertion Quantifier` alternative.\n    // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n    // is a QuantifiableAssertion.\n    if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n      // Make the same message as V8.\n      if (state.switchU) {\n        state.raise(\"Invalid quantifier\")\n      }\n    }\n    return true\n  }\n\n  if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n    this.regexp_eatQuantifier(state)\n    return true\n  }\n\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp.regexp_eatAssertion = function(state) {\n  const start = state.pos\n  state.lastAssertionIsQuantifiable = false\n\n  // ^, $\n  if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n    return true\n  }\n\n  // \\b \\B\n  if (state.eat(0x5C /* \\ */)) {\n    if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n      return true\n    }\n    state.pos = start\n  }\n\n  // Lookahead / Lookbehind\n  if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n    let lookbehind = false\n    if (this.options.ecmaVersion >= 9) {\n      lookbehind = state.eat(0x3C /* < */)\n    }\n    if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n      this.regexp_disjunction(state)\n      if (!state.eat(0x29 /* ) */)) {\n        state.raise(\"Unterminated group\")\n      }\n      state.lastAssertionIsQuantifiable = !lookbehind\n      return true\n    }\n  }\n\n  state.pos = start\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp.regexp_eatQuantifier = function(state, noError = false) {\n  if (this.regexp_eatQuantifierPrefix(state, noError)) {\n    state.eat(0x3F /* ? */)\n    return true\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp.regexp_eatQuantifierPrefix = function(state, noError) {\n  return (\n    state.eat(0x2A /* * */) ||\n    state.eat(0x2B /* + */) ||\n    state.eat(0x3F /* ? */) ||\n    this.regexp_eatBracedQuantifier(state, noError)\n  )\n}\npp.regexp_eatBracedQuantifier = function(state, noError) {\n  const start = state.pos\n  if (state.eat(0x7B /* { */)) {\n    let min = 0, max = -1\n    if (this.regexp_eatDecimalDigits(state)) {\n      min = state.lastIntValue\n      if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n        max = state.lastIntValue\n      }\n      if (state.eat(0x7D /* } */)) {\n        // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n        if (max !== -1 && max < min && !noError) {\n          state.raise(\"numbers out of order in {} quantifier\")\n        }\n        return true\n      }\n    }\n    if (state.switchU && !noError) {\n      state.raise(\"Incomplete quantifier\")\n    }\n    state.pos = start\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp.regexp_eatAtom = function(state) {\n  return (\n    this.regexp_eatPatternCharacters(state) ||\n    state.eat(0x2E /* . */) ||\n    this.regexp_eatReverseSolidusAtomEscape(state) ||\n    this.regexp_eatCharacterClass(state) ||\n    this.regexp_eatUncapturingGroup(state) ||\n    this.regexp_eatCapturingGroup(state)\n  )\n}\npp.regexp_eatReverseSolidusAtomEscape = function(state) {\n  const start = state.pos\n  if (state.eat(0x5C /* \\ */)) {\n    if (this.regexp_eatAtomEscape(state)) {\n      return true\n    }\n    state.pos = start\n  }\n  return false\n}\npp.regexp_eatUncapturingGroup = function(state) {\n  const start = state.pos\n  if (state.eat(0x28 /* ( */)) {\n    if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n      this.regexp_disjunction(state)\n      if (state.eat(0x29 /* ) */)) {\n        return true\n      }\n      state.raise(\"Unterminated group\")\n    }\n    state.pos = start\n  }\n  return false\n}\npp.regexp_eatCapturingGroup = function(state) {\n  if (state.eat(0x28 /* ( */)) {\n    if (this.options.ecmaVersion >= 9) {\n      this.regexp_groupSpecifier(state)\n    } else if (state.current() === 0x3F /* ? */) {\n      state.raise(\"Invalid group\")\n    }\n    this.regexp_disjunction(state)\n    if (state.eat(0x29 /* ) */)) {\n      state.numCapturingParens += 1\n      return true\n    }\n    state.raise(\"Unterminated group\")\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp.regexp_eatExtendedAtom = function(state) {\n  return (\n    state.eat(0x2E /* . */) ||\n    this.regexp_eatReverseSolidusAtomEscape(state) ||\n    this.regexp_eatCharacterClass(state) ||\n    this.regexp_eatUncapturingGroup(state) ||\n    this.regexp_eatCapturingGroup(state) ||\n    this.regexp_eatInvalidBracedQuantifier(state) ||\n    this.regexp_eatExtendedPatternCharacter(state)\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp.regexp_eatInvalidBracedQuantifier = function(state) {\n  if (this.regexp_eatBracedQuantifier(state, true)) {\n    state.raise(\"Nothing to repeat\")\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp.regexp_eatSyntaxCharacter = function(state) {\n  const ch = state.current()\n  if (isSyntaxCharacter(ch)) {\n    state.lastIntValue = ch\n    state.advance()\n    return true\n  }\n  return false\n}\nfunction isSyntaxCharacter(ch) {\n  return (\n    ch === 0x24 /* $ */ ||\n    ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n    ch === 0x2E /* . */ ||\n    ch === 0x3F /* ? */ ||\n    ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n    ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp.regexp_eatPatternCharacters = function(state) {\n  const start = state.pos\n  let ch = 0\n  while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n    state.advance()\n  }\n  return state.pos !== start\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp.regexp_eatExtendedPatternCharacter = function(state) {\n  const ch = state.current()\n  if (\n    ch !== -1 &&\n    ch !== 0x24 /* $ */ &&\n    !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n    ch !== 0x2E /* . */ &&\n    ch !== 0x3F /* ? */ &&\n    ch !== 0x5B /* [ */ &&\n    ch !== 0x5E /* ^ */ &&\n    ch !== 0x7C /* | */\n  ) {\n    state.advance()\n    return true\n  }\n  return false\n}\n\n// GroupSpecifier[U] ::\n//   [empty]\n//   `?` GroupName[?U]\npp.regexp_groupSpecifier = function(state) {\n  if (state.eat(0x3F /* ? */)) {\n    if (this.regexp_eatGroupName(state)) {\n      if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n        state.raise(\"Duplicate capture group name\")\n      }\n      state.groupNames.push(state.lastStringValue)\n      return\n    }\n    state.raise(\"Invalid group\")\n  }\n}\n\n// GroupName[U] ::\n//   `<` RegExpIdentifierName[?U] `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp.regexp_eatGroupName = function(state) {\n  state.lastStringValue = \"\"\n  if (state.eat(0x3C /* < */)) {\n    if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n      return true\n    }\n    state.raise(\"Invalid capture group name\")\n  }\n  return false\n}\n\n// RegExpIdentifierName[U] ::\n//   RegExpIdentifierStart[?U]\n//   RegExpIdentifierName[?U] RegExpIdentifierPart[?U]\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp.regexp_eatRegExpIdentifierName = function(state) {\n  state.lastStringValue = \"\"\n  if (this.regexp_eatRegExpIdentifierStart(state)) {\n    state.lastStringValue += codePointToString(state.lastIntValue)\n    while (this.regexp_eatRegExpIdentifierPart(state)) {\n      state.lastStringValue += codePointToString(state.lastIntValue)\n    }\n    return true\n  }\n  return false\n}\n\n// RegExpIdentifierStart[U] ::\n//   UnicodeIDStart\n//   `$`\n//   `_`\n//   `\\` RegExpUnicodeEscapeSequence[?U]\npp.regexp_eatRegExpIdentifierStart = function(state) {\n  const start = state.pos\n  let ch = state.current()\n  state.advance()\n\n  if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state)) {\n    ch = state.lastIntValue\n  }\n  if (isRegExpIdentifierStart(ch)) {\n    state.lastIntValue = ch\n    return true\n  }\n\n  state.pos = start\n  return false\n}\nfunction isRegExpIdentifierStart(ch) {\n  return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart[U] ::\n//   UnicodeIDContinue\n//   `$`\n//   `_`\n//   `\\` RegExpUnicodeEscapeSequence[?U]\n//   <ZWNJ>\n//   <ZWJ>\npp.regexp_eatRegExpIdentifierPart = function(state) {\n  const start = state.pos\n  let ch = state.current()\n  state.advance()\n\n  if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state)) {\n    ch = state.lastIntValue\n  }\n  if (isRegExpIdentifierPart(ch)) {\n    state.lastIntValue = ch\n    return true\n  }\n\n  state.pos = start\n  return false\n}\nfunction isRegExpIdentifierPart(ch) {\n  return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp.regexp_eatAtomEscape = function(state) {\n  if (\n    this.regexp_eatBackReference(state) ||\n    this.regexp_eatCharacterClassEscape(state) ||\n    this.regexp_eatCharacterEscape(state) ||\n    (state.switchN && this.regexp_eatKGroupName(state))\n  ) {\n    return true\n  }\n  if (state.switchU) {\n    // Make the same message as V8.\n    if (state.current() === 0x63 /* c */) {\n      state.raise(\"Invalid unicode escape\")\n    }\n    state.raise(\"Invalid escape\")\n  }\n  return false\n}\npp.regexp_eatBackReference = function(state) {\n  const start = state.pos\n  if (this.regexp_eatDecimalEscape(state)) {\n    const n = state.lastIntValue\n    if (state.switchU) {\n      // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n      if (n > state.maxBackReference) {\n        state.maxBackReference = n\n      }\n      return true\n    }\n    if (n <= state.numCapturingParens) {\n      return true\n    }\n    state.pos = start\n  }\n  return false\n}\npp.regexp_eatKGroupName = function(state) {\n  if (state.eat(0x6B /* k */)) {\n    if (this.regexp_eatGroupName(state)) {\n      state.backReferenceNames.push(state.lastStringValue)\n      return true\n    }\n    state.raise(\"Invalid named reference\")\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp.regexp_eatCharacterEscape = function(state) {\n  return (\n    this.regexp_eatControlEscape(state) ||\n    this.regexp_eatCControlLetter(state) ||\n    this.regexp_eatZero(state) ||\n    this.regexp_eatHexEscapeSequence(state) ||\n    this.regexp_eatRegExpUnicodeEscapeSequence(state) ||\n    (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n    this.regexp_eatIdentityEscape(state)\n  )\n}\npp.regexp_eatCControlLetter = function(state) {\n  const start = state.pos\n  if (state.eat(0x63 /* c */)) {\n    if (this.regexp_eatControlLetter(state)) {\n      return true\n    }\n    state.pos = start\n  }\n  return false\n}\npp.regexp_eatZero = function(state) {\n  if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n    state.lastIntValue = 0\n    state.advance()\n    return true\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp.regexp_eatControlEscape = function(state) {\n  const ch = state.current()\n  if (ch === 0x74 /* t */) {\n    state.lastIntValue = 0x09 /* \\t */\n    state.advance()\n    return true\n  }\n  if (ch === 0x6E /* n */) {\n    state.lastIntValue = 0x0A /* \\n */\n    state.advance()\n    return true\n  }\n  if (ch === 0x76 /* v */) {\n    state.lastIntValue = 0x0B /* \\v */\n    state.advance()\n    return true\n  }\n  if (ch === 0x66 /* f */) {\n    state.lastIntValue = 0x0C /* \\f */\n    state.advance()\n    return true\n  }\n  if (ch === 0x72 /* r */) {\n    state.lastIntValue = 0x0D /* \\r */\n    state.advance()\n    return true\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp.regexp_eatControlLetter = function(state) {\n  const ch = state.current()\n  if (isControlLetter(ch)) {\n    state.lastIntValue = ch % 0x20\n    state.advance()\n    return true\n  }\n  return false\n}\nfunction isControlLetter(ch) {\n  return (\n    (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n    (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp.regexp_eatRegExpUnicodeEscapeSequence = function(state) {\n  const start = state.pos\n\n  if (state.eat(0x75 /* u */)) {\n    if (this.regexp_eatFixedHexDigits(state, 4)) {\n      const lead = state.lastIntValue\n      if (state.switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n        const leadSurrogateEnd = state.pos\n        if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n          const trail = state.lastIntValue\n          if (trail >= 0xDC00 && trail <= 0xDFFF) {\n            state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000\n            return true\n          }\n        }\n        state.pos = leadSurrogateEnd\n        state.lastIntValue = lead\n      }\n      return true\n    }\n    if (\n      state.switchU &&\n      state.eat(0x7B /* { */) &&\n      this.regexp_eatHexDigits(state) &&\n      state.eat(0x7D /* } */) &&\n      isValidUnicode(state.lastIntValue)\n    ) {\n      return true\n    }\n    if (state.switchU) {\n      state.raise(\"Invalid unicode escape\")\n    }\n    state.pos = start\n  }\n\n  return false\n}\nfunction isValidUnicode(ch) {\n  return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp.regexp_eatIdentityEscape = function(state) {\n  if (state.switchU) {\n    if (this.regexp_eatSyntaxCharacter(state)) {\n      return true\n    }\n    if (state.eat(0x2F /* / */)) {\n      state.lastIntValue = 0x2F /* / */\n      return true\n    }\n    return false\n  }\n\n  const ch = state.current()\n  if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n    state.lastIntValue = ch\n    state.advance()\n    return true\n  }\n\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp.regexp_eatDecimalEscape = function(state) {\n  state.lastIntValue = 0\n  let ch = state.current()\n  if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n    do {\n      state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */)\n      state.advance()\n    } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n    return true\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp.regexp_eatCharacterClassEscape = function(state) {\n  const ch = state.current()\n\n  if (isCharacterClassEscape(ch)) {\n    state.lastIntValue = -1\n    state.advance()\n    return true\n  }\n\n  if (\n    state.switchU &&\n    this.options.ecmaVersion >= 9 &&\n    (ch === 0x50 /* P */ || ch === 0x70 /* p */)\n  ) {\n    state.lastIntValue = -1\n    state.advance()\n    if (\n      state.eat(0x7B /* { */) &&\n      this.regexp_eatUnicodePropertyValueExpression(state) &&\n      state.eat(0x7D /* } */)\n    ) {\n      return true\n    }\n    state.raise(\"Invalid property name\")\n  }\n\n  return false\n}\nfunction isCharacterClassEscape(ch) {\n  return (\n    ch === 0x64 /* d */ ||\n    ch === 0x44 /* D */ ||\n    ch === 0x73 /* s */ ||\n    ch === 0x53 /* S */ ||\n    ch === 0x77 /* w */ ||\n    ch === 0x57 /* W */\n  )\n}\n\n// UnicodePropertyValueExpression ::\n//   UnicodePropertyName `=` UnicodePropertyValue\n//   LoneUnicodePropertyNameOrValue\npp.regexp_eatUnicodePropertyValueExpression = function(state) {\n  const start = state.pos\n\n  // UnicodePropertyName `=` UnicodePropertyValue\n  if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n    const name = state.lastStringValue\n    if (this.regexp_eatUnicodePropertyValue(state)) {\n      const value = state.lastStringValue\n      this.regexp_validateUnicodePropertyNameAndValue(state, name, value)\n      return true\n    }\n  }\n  state.pos = start\n\n  // LoneUnicodePropertyNameOrValue\n  if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n    const nameOrValue = state.lastStringValue\n    this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n    return true\n  }\n  return false\n}\npp.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n  if (!has(state.unicodeProperties.nonBinary, name))\n    state.raise(\"Invalid property name\")\n  if (!state.unicodeProperties.nonBinary[name].test(value))\n    state.raise(\"Invalid property value\")\n}\npp.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n  if (!state.unicodeProperties.binary.test(nameOrValue))\n    state.raise(\"Invalid property name\")\n}\n\n// UnicodePropertyName ::\n//   UnicodePropertyNameCharacters\npp.regexp_eatUnicodePropertyName = function(state) {\n  let ch = 0\n  state.lastStringValue = \"\"\n  while (isUnicodePropertyNameCharacter(ch = state.current())) {\n    state.lastStringValue += codePointToString(ch)\n    state.advance()\n  }\n  return state.lastStringValue !== \"\"\n}\nfunction isUnicodePropertyNameCharacter(ch) {\n  return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n//   UnicodePropertyValueCharacters\npp.regexp_eatUnicodePropertyValue = function(state) {\n  let ch = 0\n  state.lastStringValue = \"\"\n  while (isUnicodePropertyValueCharacter(ch = state.current())) {\n    state.lastStringValue += codePointToString(ch)\n    state.advance()\n  }\n  return state.lastStringValue !== \"\"\n}\nfunction isUnicodePropertyValueCharacter(ch) {\n  return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n//   UnicodePropertyValueCharacters\npp.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n  return this.regexp_eatUnicodePropertyValue(state)\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp.regexp_eatCharacterClass = function(state) {\n  if (state.eat(0x5B /* [ */)) {\n    state.eat(0x5E /* ^ */)\n    this.regexp_classRanges(state)\n    if (state.eat(0x5D /* [ */)) {\n      return true\n    }\n    // Unreachable since it threw \"unterminated regular expression\" error before.\n    state.raise(\"Unterminated character class\")\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp.regexp_classRanges = function(state) {\n  while (this.regexp_eatClassAtom(state)) {\n    const left = state.lastIntValue\n    if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n      const right = state.lastIntValue\n      if (state.switchU && (left === -1 || right === -1)) {\n        state.raise(\"Invalid character class\")\n      }\n      if (left !== -1 && right !== -1 && left > right) {\n        state.raise(\"Range out of order in character class\")\n      }\n    }\n  }\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp.regexp_eatClassAtom = function(state) {\n  const start = state.pos\n\n  if (state.eat(0x5C /* \\ */)) {\n    if (this.regexp_eatClassEscape(state)) {\n      return true\n    }\n    if (state.switchU) {\n      // Make the same message as V8.\n      const ch = state.current()\n      if (ch === 0x63 /* c */ || isOctalDigit(ch)) {\n        state.raise(\"Invalid class escape\")\n      }\n      state.raise(\"Invalid escape\")\n    }\n    state.pos = start\n  }\n\n  const ch = state.current()\n  if (ch !== 0x5D /* [ */) {\n    state.lastIntValue = ch\n    state.advance()\n    return true\n  }\n\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp.regexp_eatClassEscape = function(state) {\n  const start = state.pos\n\n  if (state.eat(0x62 /* b */)) {\n    state.lastIntValue = 0x08 /* <BS> */\n    return true\n  }\n\n  if (state.switchU && state.eat(0x2D /* - */)) {\n    state.lastIntValue = 0x2D /* - */\n    return true\n  }\n\n  if (!state.switchU && state.eat(0x63 /* c */)) {\n    if (this.regexp_eatClassControlLetter(state)) {\n      return true\n    }\n    state.pos = start\n  }\n\n  return (\n    this.regexp_eatCharacterClassEscape(state) ||\n    this.regexp_eatCharacterEscape(state)\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp.regexp_eatClassControlLetter = function(state) {\n  const ch = state.current()\n  if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n    state.lastIntValue = ch % 0x20\n    state.advance()\n    return true\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp.regexp_eatHexEscapeSequence = function(state) {\n  const start = state.pos\n  if (state.eat(0x78 /* x */)) {\n    if (this.regexp_eatFixedHexDigits(state, 2)) {\n      return true\n    }\n    if (state.switchU) {\n      state.raise(\"Invalid escape\")\n    }\n    state.pos = start\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp.regexp_eatDecimalDigits = function(state) {\n  const start = state.pos\n  let ch = 0\n  state.lastIntValue = 0\n  while (isDecimalDigit(ch = state.current())) {\n    state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */)\n    state.advance()\n  }\n  return state.pos !== start\n}\nfunction isDecimalDigit(ch) {\n  return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp.regexp_eatHexDigits = function(state) {\n  const start = state.pos\n  let ch = 0\n  state.lastIntValue = 0\n  while (isHexDigit(ch = state.current())) {\n    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch)\n    state.advance()\n  }\n  return state.pos !== start\n}\nfunction isHexDigit(ch) {\n  return (\n    (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n    (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n    (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n  )\n}\nfunction hexToInt(ch) {\n  if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n    return 10 + (ch - 0x41 /* A */)\n  }\n  if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n    return 10 + (ch - 0x61 /* a */)\n  }\n  return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp.regexp_eatLegacyOctalEscapeSequence = function(state) {\n  if (this.regexp_eatOctalDigit(state)) {\n    const n1 = state.lastIntValue\n    if (this.regexp_eatOctalDigit(state)) {\n      const n2 = state.lastIntValue\n      if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n        state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue\n      } else {\n        state.lastIntValue = n1 * 8 + n2\n      }\n    } else {\n      state.lastIntValue = n1\n    }\n    return true\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp.regexp_eatOctalDigit = function(state) {\n  const ch = state.current()\n  if (isOctalDigit(ch)) {\n    state.lastIntValue = ch - 0x30 /* 0 */\n    state.advance()\n    return true\n  }\n  state.lastIntValue = 0\n  return false\n}\nfunction isOctalDigit(ch) {\n  return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp.regexp_eatFixedHexDigits = function(state, length) {\n  const start = state.pos\n  state.lastIntValue = 0\n  for (let i = 0; i < length; ++i) {\n    const ch = state.current()\n    if (!isHexDigit(ch)) {\n      state.pos = start\n      return false\n    }\n    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch)\n    state.advance()\n  }\n  return true\n}\n","import {isIdentifierStart, isIdentifierChar} from \"./identifier\"\nimport {types as tt, keywords as keywordTypes} from \"./tokentype\"\nimport {Parser} from \"./state\"\nimport {SourceLocation} from \"./locutil\"\nimport {RegExpValidationState} from \"./regexp\"\nimport {lineBreak, lineBreakG, isNewLine, nonASCIIwhitespace} from \"./whitespace\"\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nexport class Token {\n  constructor(p) {\n    this.type = p.type\n    this.value = p.value\n    this.start = p.start\n    this.end = p.end\n    if (p.options.locations)\n      this.loc = new SourceLocation(p, p.startLoc, p.endLoc)\n    if (p.options.ranges)\n      this.range = [p.start, p.end]\n  }\n}\n\n// ## Tokenizer\n\nconst pp = Parser.prototype\n\n// Move to the next token\n\npp.next = function() {\n  if (this.options.onToken)\n    this.options.onToken(new Token(this))\n\n  this.lastTokEnd = this.end\n  this.lastTokStart = this.start\n  this.lastTokEndLoc = this.endLoc\n  this.lastTokStartLoc = this.startLoc\n  this.nextToken()\n}\n\npp.getToken = function() {\n  this.next()\n  return new Token(this)\n}\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n  pp[Symbol.iterator] = function() {\n    return {\n      next: () => {\n        let token = this.getToken()\n        return {\n          done: token.type === tt.eof,\n          value: token\n        }\n      }\n    }\n  }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\npp.curContext = function() {\n  return this.context[this.context.length - 1]\n}\n\n// Read a single token, updating the parser object's token-related\n// properties.\n\npp.nextToken = function() {\n  let curContext = this.curContext()\n  if (!curContext || !curContext.preserveSpace) this.skipSpace()\n\n  this.start = this.pos\n  if (this.options.locations) this.startLoc = this.curPosition()\n  if (this.pos >= this.input.length) return this.finishToken(tt.eof)\n\n  if (curContext.override) return curContext.override(this)\n  else this.readToken(this.fullCharCodeAtPos())\n}\n\npp.readToken = function(code) {\n  // Identifier or keyword. '\\uXXXX' sequences are allowed in\n  // identifiers, so '\\' also dispatches to that.\n  if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n    return this.readWord()\n\n  return this.getTokenFromCode(code)\n}\n\npp.fullCharCodeAtPos = function() {\n  let code = this.input.charCodeAt(this.pos)\n  if (code <= 0xd7ff || code >= 0xe000) return code\n  let next = this.input.charCodeAt(this.pos + 1)\n  return (code << 10) + next - 0x35fdc00\n}\n\npp.skipBlockComment = function() {\n  let startLoc = this.options.onComment && this.curPosition()\n  let start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2)\n  if (end === -1) this.raise(this.pos - 2, \"Unterminated comment\")\n  this.pos = end + 2\n  if (this.options.locations) {\n    lineBreakG.lastIndex = start\n    let match\n    while ((match = lineBreakG.exec(this.input)) && match.index < this.pos) {\n      ++this.curLine\n      this.lineStart = match.index + match[0].length\n    }\n  }\n  if (this.options.onComment)\n    this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n                           startLoc, this.curPosition())\n}\n\npp.skipLineComment = function(startSkip) {\n  let start = this.pos\n  let startLoc = this.options.onComment && this.curPosition()\n  let ch = this.input.charCodeAt(this.pos += startSkip)\n  while (this.pos < this.input.length && !isNewLine(ch)) {\n    ch = this.input.charCodeAt(++this.pos)\n  }\n  if (this.options.onComment)\n    this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n                           startLoc, this.curPosition())\n}\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp.skipSpace = function() {\n  loop: while (this.pos < this.input.length) {\n    let ch = this.input.charCodeAt(this.pos)\n    switch (ch) {\n    case 32: case 160: // ' '\n      ++this.pos\n      break\n    case 13:\n      if (this.input.charCodeAt(this.pos + 1) === 10) {\n        ++this.pos\n      }\n    case 10: case 8232: case 8233:\n      ++this.pos\n      if (this.options.locations) {\n        ++this.curLine\n        this.lineStart = this.pos\n      }\n      break\n    case 47: // '/'\n      switch (this.input.charCodeAt(this.pos + 1)) {\n      case 42: // '*'\n        this.skipBlockComment()\n        break\n      case 47:\n        this.skipLineComment(2)\n        break\n      default:\n        break loop\n      }\n      break\n    default:\n      if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n        ++this.pos\n      } else {\n        break loop\n      }\n    }\n  }\n}\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp.finishToken = function(type, val) {\n  this.end = this.pos\n  if (this.options.locations) this.endLoc = this.curPosition()\n  let prevType = this.type\n  this.type = type\n  this.value = val\n\n  this.updateContext(prevType)\n}\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp.readToken_dot = function() {\n  let next = this.input.charCodeAt(this.pos + 1)\n  if (next >= 48 && next <= 57) return this.readNumber(true)\n  let next2 = this.input.charCodeAt(this.pos + 2)\n  if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n    this.pos += 3\n    return this.finishToken(tt.ellipsis)\n  } else {\n    ++this.pos\n    return this.finishToken(tt.dot)\n  }\n}\n\npp.readToken_slash = function() { // '/'\n  let next = this.input.charCodeAt(this.pos + 1)\n  if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n  if (next === 61) return this.finishOp(tt.assign, 2)\n  return this.finishOp(tt.slash, 1)\n}\n\npp.readToken_mult_modulo_exp = function(code) { // '%*'\n  let next = this.input.charCodeAt(this.pos + 1)\n  let size = 1\n  let tokentype = code === 42 ? tt.star : tt.modulo\n\n  // exponentiation operator ** and **=\n  if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n    ++size\n    tokentype = tt.starstar\n    next = this.input.charCodeAt(this.pos + 2)\n  }\n\n  if (next === 61) return this.finishOp(tt.assign, size + 1)\n  return this.finishOp(tokentype, size)\n}\n\npp.readToken_pipe_amp = function(code) { // '|&'\n  let next = this.input.charCodeAt(this.pos + 1)\n  if (next === code) return this.finishOp(code === 124 ? tt.logicalOR : tt.logicalAND, 2)\n  if (next === 61) return this.finishOp(tt.assign, 2)\n  return this.finishOp(code === 124 ? tt.bitwiseOR : tt.bitwiseAND, 1)\n}\n\npp.readToken_caret = function() { // '^'\n  let next = this.input.charCodeAt(this.pos + 1)\n  if (next === 61) return this.finishOp(tt.assign, 2)\n  return this.finishOp(tt.bitwiseXOR, 1)\n}\n\npp.readToken_plus_min = function(code) { // '+-'\n  let next = this.input.charCodeAt(this.pos + 1)\n  if (next === code) {\n    if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n        (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n      // A `-->` line comment\n      this.skipLineComment(3)\n      this.skipSpace()\n      return this.nextToken()\n    }\n    return this.finishOp(tt.incDec, 2)\n  }\n  if (next === 61) return this.finishOp(tt.assign, 2)\n  return this.finishOp(tt.plusMin, 1)\n}\n\npp.readToken_lt_gt = function(code) { // '<>'\n  let next = this.input.charCodeAt(this.pos + 1)\n  let size = 1\n  if (next === code) {\n    size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2\n    if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(tt.assign, size + 1)\n    return this.finishOp(tt.bitShift, size)\n  }\n  if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n      this.input.charCodeAt(this.pos + 3) === 45) {\n    // `<!--`, an XML-style comment that should be interpreted as a line comment\n    this.skipLineComment(4)\n    this.skipSpace()\n    return this.nextToken()\n  }\n  if (next === 61) size = 2\n  return this.finishOp(tt.relational, size)\n}\n\npp.readToken_eq_excl = function(code) { // '=!'\n  let next = this.input.charCodeAt(this.pos + 1)\n  if (next === 61) return this.finishOp(tt.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2)\n  if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'\n    this.pos += 2\n    return this.finishToken(tt.arrow)\n  }\n  return this.finishOp(code === 61 ? tt.eq : tt.prefix, 1)\n}\n\npp.getTokenFromCode = function(code) {\n  switch (code) {\n  // The interpretation of a dot depends on whether it is followed\n  // by a digit or another two dots.\n  case 46: // '.'\n    return this.readToken_dot()\n\n  // Punctuation tokens.\n  case 40: ++this.pos; return this.finishToken(tt.parenL)\n  case 41: ++this.pos; return this.finishToken(tt.parenR)\n  case 59: ++this.pos; return this.finishToken(tt.semi)\n  case 44: ++this.pos; return this.finishToken(tt.comma)\n  case 91: ++this.pos; return this.finishToken(tt.bracketL)\n  case 93: ++this.pos; return this.finishToken(tt.bracketR)\n  case 123: ++this.pos; return this.finishToken(tt.braceL)\n  case 125: ++this.pos; return this.finishToken(tt.braceR)\n  case 58: ++this.pos; return this.finishToken(tt.colon)\n  case 63: ++this.pos; return this.finishToken(tt.question)\n\n  case 96: // '`'\n    if (this.options.ecmaVersion < 6) break\n    ++this.pos\n    return this.finishToken(tt.backQuote)\n\n  case 48: // '0'\n    let next = this.input.charCodeAt(this.pos + 1)\n    if (next === 120 || next === 88) return this.readRadixNumber(16) // '0x', '0X' - hex number\n    if (this.options.ecmaVersion >= 6) {\n      if (next === 111 || next === 79) return this.readRadixNumber(8) // '0o', '0O' - octal number\n      if (next === 98 || next === 66) return this.readRadixNumber(2) // '0b', '0B' - binary number\n    }\n\n  // Anything else beginning with a digit is an integer, octal\n  // number, or float.\n  case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9\n    return this.readNumber(false)\n\n  // Quotes produce strings.\n  case 34: case 39: // '\"', \"'\"\n    return this.readString(code)\n\n  // Operators are parsed inline in tiny state machines. '=' (61) is\n  // often referred to. `finishOp` simply skips the amount of\n  // characters it is given as second argument, and returns a token\n  // of the type given by its first argument.\n\n  case 47: // '/'\n    return this.readToken_slash()\n\n  case 37: case 42: // '%*'\n    return this.readToken_mult_modulo_exp(code)\n\n  case 124: case 38: // '|&'\n    return this.readToken_pipe_amp(code)\n\n  case 94: // '^'\n    return this.readToken_caret()\n\n  case 43: case 45: // '+-'\n    return this.readToken_plus_min(code)\n\n  case 60: case 62: // '<>'\n    return this.readToken_lt_gt(code)\n\n  case 61: case 33: // '=!'\n    return this.readToken_eq_excl(code)\n\n  case 126: // '~'\n    return this.finishOp(tt.prefix, 1)\n  }\n\n  this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\")\n}\n\npp.finishOp = function(type, size) {\n  let str = this.input.slice(this.pos, this.pos + size)\n  this.pos += size\n  return this.finishToken(type, str)\n}\n\npp.readRegexp = function() {\n  let escaped, inClass, start = this.pos\n  for (;;) {\n    if (this.pos >= this.input.length) this.raise(start, \"Unterminated regular expression\")\n    let ch = this.input.charAt(this.pos)\n    if (lineBreak.test(ch)) this.raise(start, \"Unterminated regular expression\")\n    if (!escaped) {\n      if (ch === \"[\") inClass = true\n      else if (ch === \"]\" && inClass) inClass = false\n      else if (ch === \"/\" && !inClass) break\n      escaped = ch === \"\\\\\"\n    } else escaped = false\n    ++this.pos\n  }\n  let pattern = this.input.slice(start, this.pos)\n  ++this.pos\n  let flagsStart = this.pos\n  let flags = this.readWord1()\n  if (this.containsEsc) this.unexpected(flagsStart)\n\n  // Validate pattern\n  const state = this.regexpState || (this.regexpState = new RegExpValidationState(this))\n  state.reset(start, pattern, flags)\n  this.validateRegExpFlags(state)\n  this.validateRegExpPattern(state)\n\n  // Create Literal#value property value.\n  let value = null\n  try {\n    value = new RegExp(pattern, flags)\n  } catch (e) {\n    // ESTree requires null if it failed to instantiate RegExp object.\n    // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n  }\n\n  return this.finishToken(tt.regexp, {pattern, flags, value})\n}\n\n// Read an integer in the given radix. Return null if zero digits\n// were read, the integer value otherwise. When `len` is given, this\n// will return `null` unless the integer has exactly `len` digits.\n\npp.readInt = function(radix, len) {\n  let start = this.pos, total = 0\n  for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n    let code = this.input.charCodeAt(this.pos), val\n    if (code >= 97) val = code - 97 + 10 // a\n    else if (code >= 65) val = code - 65 + 10 // A\n    else if (code >= 48 && code <= 57) val = code - 48 // 0-9\n    else val = Infinity\n    if (val >= radix) break\n    ++this.pos\n    total = total * radix + val\n  }\n  if (this.pos === start || len != null && this.pos - start !== len) return null\n\n  return total\n}\n\npp.readRadixNumber = function(radix) {\n  this.pos += 2 // 0x\n  let val = this.readInt(radix)\n  if (val == null) this.raise(this.start + 2, \"Expected number in radix \" + radix)\n  if (isIdentifierStart(this.fullCharCodeAtPos())) this.raise(this.pos, \"Identifier directly after number\")\n  return this.finishToken(tt.num, val)\n}\n\n// Read an integer, octal integer, or floating-point number.\n\npp.readNumber = function(startsWithDot) {\n  let start = this.pos\n  if (!startsWithDot && this.readInt(10) === null) this.raise(start, \"Invalid number\")\n  let octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48\n  if (octal && this.strict) this.raise(start, \"Invalid number\")\n  if (octal && /[89]/.test(this.input.slice(start, this.pos))) octal = false\n  let next = this.input.charCodeAt(this.pos)\n  if (next === 46 && !octal) { // '.'\n    ++this.pos\n    this.readInt(10)\n    next = this.input.charCodeAt(this.pos)\n  }\n  if ((next === 69 || next === 101) && !octal) { // 'eE'\n    next = this.input.charCodeAt(++this.pos)\n    if (next === 43 || next === 45) ++this.pos // '+-'\n    if (this.readInt(10) === null) this.raise(start, \"Invalid number\")\n  }\n  if (isIdentifierStart(this.fullCharCodeAtPos())) this.raise(this.pos, \"Identifier directly after number\")\n\n  let str = this.input.slice(start, this.pos)\n  let val = octal ? parseInt(str, 8) : parseFloat(str)\n  return this.finishToken(tt.num, val)\n}\n\n// Read a string value, interpreting backslash-escapes.\n\npp.readCodePoint = function() {\n  let ch = this.input.charCodeAt(this.pos), code\n\n  if (ch === 123) { // '{'\n    if (this.options.ecmaVersion < 6) this.unexpected()\n    let codePos = ++this.pos\n    code = this.readHexChar(this.input.indexOf(\"}\", this.pos) - this.pos)\n    ++this.pos\n    if (code > 0x10FFFF) this.invalidStringToken(codePos, \"Code point out of bounds\")\n  } else {\n    code = this.readHexChar(4)\n  }\n  return code\n}\n\nfunction codePointToString(code) {\n  // UTF-16 Decoding\n  if (code <= 0xFFFF) return String.fromCharCode(code)\n  code -= 0x10000\n  return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\npp.readString = function(quote) {\n  let out = \"\", chunkStart = ++this.pos\n  for (;;) {\n    if (this.pos >= this.input.length) this.raise(this.start, \"Unterminated string constant\")\n    let ch = this.input.charCodeAt(this.pos)\n    if (ch === quote) break\n    if (ch === 92) { // '\\'\n      out += this.input.slice(chunkStart, this.pos)\n      out += this.readEscapedChar(false)\n      chunkStart = this.pos\n    } else {\n      if (isNewLine(ch, this.options.ecmaVersion >= 10)) this.raise(this.start, \"Unterminated string constant\")\n      ++this.pos\n    }\n  }\n  out += this.input.slice(chunkStart, this.pos++)\n  return this.finishToken(tt.string, out)\n}\n\n// Reads template string tokens.\n\nconst INVALID_TEMPLATE_ESCAPE_ERROR = {}\n\npp.tryReadTemplateToken = function() {\n  this.inTemplateElement = true\n  try {\n    this.readTmplToken()\n  } catch (err) {\n    if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n      this.readInvalidTemplateToken()\n    } else {\n      throw err\n    }\n  }\n\n  this.inTemplateElement = false\n}\n\npp.invalidStringToken = function(position, message) {\n  if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n    throw INVALID_TEMPLATE_ESCAPE_ERROR\n  } else {\n    this.raise(position, message)\n  }\n}\n\npp.readTmplToken = function() {\n  let out = \"\", chunkStart = this.pos\n  for (;;) {\n    if (this.pos >= this.input.length) this.raise(this.start, \"Unterminated template\")\n    let ch = this.input.charCodeAt(this.pos)\n    if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'\n      if (this.pos === this.start && (this.type === tt.template || this.type === tt.invalidTemplate)) {\n        if (ch === 36) {\n          this.pos += 2\n          return this.finishToken(tt.dollarBraceL)\n        } else {\n          ++this.pos\n          return this.finishToken(tt.backQuote)\n        }\n      }\n      out += this.input.slice(chunkStart, this.pos)\n      return this.finishToken(tt.template, out)\n    }\n    if (ch === 92) { // '\\'\n      out += this.input.slice(chunkStart, this.pos)\n      out += this.readEscapedChar(true)\n      chunkStart = this.pos\n    } else if (isNewLine(ch)) {\n      out += this.input.slice(chunkStart, this.pos)\n      ++this.pos\n      switch (ch) {\n      case 13:\n        if (this.input.charCodeAt(this.pos) === 10) ++this.pos\n      case 10:\n        out += \"\\n\"\n        break\n      default:\n        out += String.fromCharCode(ch)\n        break\n      }\n      if (this.options.locations) {\n        ++this.curLine\n        this.lineStart = this.pos\n      }\n      chunkStart = this.pos\n    } else {\n      ++this.pos\n    }\n  }\n}\n\n// Reads a template token to search for the end, without validating any escape sequences\npp.readInvalidTemplateToken = function() {\n  for (; this.pos < this.input.length; this.pos++) {\n    switch (this.input[this.pos]) {\n    case \"\\\\\":\n      ++this.pos\n      break\n\n    case \"$\":\n      if (this.input[this.pos + 1] !== \"{\") {\n        break\n      }\n    // falls through\n\n    case \"`\":\n      return this.finishToken(tt.invalidTemplate, this.input.slice(this.start, this.pos))\n\n    // no default\n    }\n  }\n  this.raise(this.start, \"Unterminated template\")\n}\n\n// Used to read escaped characters\n\npp.readEscapedChar = function(inTemplate) {\n  let ch = this.input.charCodeAt(++this.pos)\n  ++this.pos\n  switch (ch) {\n  case 110: return \"\\n\" // 'n' -> '\\n'\n  case 114: return \"\\r\" // 'r' -> '\\r'\n  case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'\n  case 117: return codePointToString(this.readCodePoint()) // 'u'\n  case 116: return \"\\t\" // 't' -> '\\t'\n  case 98: return \"\\b\" // 'b' -> '\\b'\n  case 118: return \"\\u000b\" // 'v' -> '\\u000b'\n  case 102: return \"\\f\" // 'f' -> '\\f'\n  case 13: if (this.input.charCodeAt(this.pos) === 10) ++this.pos // '\\r\\n'\n  case 10: // ' \\n'\n    if (this.options.locations) { this.lineStart = this.pos; ++this.curLine }\n    return \"\"\n  default:\n    if (ch >= 48 && ch <= 55) {\n      let octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0]\n      let octal = parseInt(octalStr, 8)\n      if (octal > 255) {\n        octalStr = octalStr.slice(0, -1)\n        octal = parseInt(octalStr, 8)\n      }\n      this.pos += octalStr.length - 1\n      ch = this.input.charCodeAt(this.pos)\n      if ((octalStr !== \"0\" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n        this.invalidStringToken(\n          this.pos - 1 - octalStr.length,\n          inTemplate\n            ? \"Octal literal in template string\"\n            : \"Octal literal in strict mode\"\n        )\n      }\n      return String.fromCharCode(octal)\n    }\n    if (isNewLine(ch)) {\n      // Unicode new line characters after \\ get removed from output in both\n      // template literals and strings\n      return \"\"\n    }\n    return String.fromCharCode(ch)\n  }\n}\n\n// Used to read character escape sequences ('\\x', '\\u', '\\U').\n\npp.readHexChar = function(len) {\n  let codePos = this.pos\n  let n = this.readInt(16, len)\n  if (n === null) this.invalidStringToken(codePos, \"Bad character escape sequence\")\n  return n\n}\n\n// Read an identifier, and return it as a string. Sets `this.containsEsc`\n// to whether the word contained a '\\u' escape.\n//\n// Incrementally adds only escaped chars, adding other chunks as-is\n// as a micro-optimization.\n\npp.readWord1 = function() {\n  this.containsEsc = false\n  let word = \"\", first = true, chunkStart = this.pos\n  let astral = this.options.ecmaVersion >= 6\n  while (this.pos < this.input.length) {\n    let ch = this.fullCharCodeAtPos()\n    if (isIdentifierChar(ch, astral)) {\n      this.pos += ch <= 0xffff ? 1 : 2\n    } else if (ch === 92) { // \"\\\"\n      this.containsEsc = true\n      word += this.input.slice(chunkStart, this.pos)\n      let escStart = this.pos\n      if (this.input.charCodeAt(++this.pos) !== 117) // \"u\"\n        this.invalidStringToken(this.pos, \"Expecting Unicode escape sequence \\\\uXXXX\")\n      ++this.pos\n      let esc = this.readCodePoint()\n      if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))\n        this.invalidStringToken(escStart, \"Invalid Unicode escape\")\n      word += codePointToString(esc)\n      chunkStart = this.pos\n    } else {\n      break\n    }\n    first = false\n  }\n  return word + this.input.slice(chunkStart, this.pos)\n}\n\n// Read an identifier or keyword token. Will check for reserved\n// words when necessary.\n\npp.readWord = function() {\n  let word = this.readWord1()\n  let type = tt.name\n  if (this.keywords.test(word)) {\n    if (this.containsEsc) this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + word)\n    type = keywordTypes[word]\n  }\n  return this.finishToken(type, word)\n}\n","// Acorn is a tiny, fast JavaScript parser written in JavaScript.\n//\n// Acorn was written by Marijn Haverbeke, Ingvar Stepanyan, and\n// various contributors and released under an MIT license.\n//\n// Git repositories for Acorn are available at\n//\n//     http://marijnhaverbeke.nl/git/acorn\n//     https://github.com/acornjs/acorn.git\n//\n// Please use the [github bug tracker][ghbt] to report issues.\n//\n// [ghbt]: https://github.com/acornjs/acorn/issues\n//\n// [walk]: util/walk.js\n\nimport {Parser} from \"./state\"\nimport \"./parseutil\"\nimport \"./statement\"\nimport \"./lval\"\nimport \"./expression\"\nimport \"./location\"\nimport \"./scope\"\n\nexport {Parser} from \"./state\"\nexport {defaultOptions} from \"./options\"\nexport {Position, SourceLocation, getLineInfo} from \"./locutil\"\nexport {Node} from \"./node\"\nexport {TokenType, types as tokTypes, keywords as keywordTypes} from \"./tokentype\"\nexport {TokContext, types as tokContexts} from \"./tokencontext\"\nexport {isIdentifierChar, isIdentifierStart} from \"./identifier\"\nexport {Token} from \"./tokenize\"\nexport {isNewLine, lineBreak, lineBreakG, nonASCIIwhitespace} from \"./whitespace\"\n\nexport const version = \"6.1.1\"\n\n// The main exported interface (under `self.acorn` when in the\n// browser) is a `parse` function that takes a code string and\n// returns an abstract syntax tree as specified by [Mozilla parser\n// API][api].\n//\n// [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API\n\nexport function parse(input, options) {\n  return Parser.parse(input, options)\n}\n\n// This function tries to parse a single expression at a given\n// offset in a string. Useful for parsing mixed-language formats\n// that embed JavaScript expressions.\n\nexport function parseExpressionAt(input, pos, options) {\n  return Parser.parseExpressionAt(input, pos, options)\n}\n\n// Acorn is organized as a tokenizer and a recursive-descent parser.\n// The `tokenizer` export provides an interface to the tokenizer.\n\nexport function tokenizer(input, options) {\n  return Parser.tokenizer(input, options)\n}\n"],"names":["const","let","keywords","tt","this","pp","init","label","node","empty","scope","types","UNICODE_PROPERTY_VALUES","codePointToString","ch","keywordTypes"],"mappings":";;;;;;AAAA;;AAEA,AAAOA,IAAM,aAAa,GAAG;EAC3B,CAAC,EAAE,qNAAqN;EACxN,CAAC,EAAE,8CAA8C;EACjD,CAAC,EAAE,MAAM;EACT,MAAM,EAAE,wEAAwE;EAChF,UAAU,EAAE,gBAAgB;EAC7B;;;;AAIDA,IAAM,oBAAoB,GAAG,8KAA6K;;AAE1M,AAAOA,IAAM,QAAQ,GAAG;EACtB,CAAC,EAAE,oBAAoB;EACvB,CAAC,EAAE,oBAAoB,GAAG,0CAA0C;EACrE;;AAED,AAAOA,IAAM,yBAAyB,GAAG,kBAAiB;;;;;;;;;;AAU1DC,IAAI,4BAA4B,GAAG,4tIAA2tI;AAC9vIA,IAAI,uBAAuB,GAAG,sjFAAqjF;;AAEnlFD,IAAM,uBAAuB,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,4BAA4B,GAAG,GAAG,EAAC;AACpFA,IAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,GAAG,EAAC;;AAEzG,4BAA4B,GAAG,uBAAuB,GAAG,KAAI;;;;;;;;;AAS7DA,IAAM,0BAA0B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAC;;;AAGvqCA,IAAM,qBAAqB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAC;;;;;AAKnlB,SAAS,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE;EAChCC,IAAI,GAAG,GAAG,QAAO;EACjB,KAAKA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;IACtC,GAAG,IAAI,GAAG,CAAC,CAAC,EAAC;IACb,IAAI,GAAG,GAAG,IAAI,EAAE,EAAA,OAAO,KAAK,EAAA;IAC5B,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAC;IACjB,IAAI,GAAG,IAAI,IAAI,EAAE,EAAA,OAAO,IAAI,EAAA;GAC7B;CACF;;;;AAID,AAAO,SAAS,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE;EAC9C,IAAI,IAAI,GAAG,EAAE,EAAE,EAAA,OAAO,IAAI,KAAK,EAAE,EAAA;EACjC,IAAI,IAAI,GAAG,EAAE,EAAE,EAAA,OAAO,IAAI,EAAA;EAC1B,IAAI,IAAI,GAAG,EAAE,EAAE,EAAA,OAAO,IAAI,KAAK,EAAE,EAAA;EACjC,IAAI,IAAI,GAAG,GAAG,EAAE,EAAA,OAAO,IAAI,EAAA;EAC3B,IAAI,IAAI,IAAI,MAAM,EAAE,EAAA,OAAO,IAAI,IAAI,IAAI,IAAI,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAA;EAClG,IAAI,MAAM,KAAK,KAAK,EAAE,EAAA,OAAO,KAAK,EAAA;EAClC,OAAO,aAAa,CAAC,IAAI,EAAE,0BAA0B,CAAC;CACvD;;;;AAID,AAAO,SAAS,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE;EAC7C,IAAI,IAAI,GAAG,EAAE,EAAE,EAAA,OAAO,IAAI,KAAK,EAAE,EAAA;EACjC,IAAI,IAAI,GAAG,EAAE,EAAE,EAAA,OAAO,IAAI,EAAA;EAC1B,IAAI,IAAI,GAAG,EAAE,EAAE,EAAA,OAAO,KAAK,EAAA;EAC3B,IAAI,IAAI,GAAG,EAAE,EAAE,EAAA,OAAO,IAAI,EAAA;EAC1B,IAAI,IAAI,GAAG,EAAE,EAAE,EAAA,OAAO,IAAI,KAAK,EAAE,EAAA;EACjC,IAAI,IAAI,GAAG,GAAG,EAAE,EAAA,OAAO,IAAI,EAAA;EAC3B,IAAI,IAAI,IAAI,MAAM,EAAE,EAAA,OAAO,IAAI,IAAI,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAA;EAC7F,IAAI,MAAM,KAAK,KAAK,EAAE,EAAA,OAAO,KAAK,EAAA;EAClC,OAAO,aAAa,CAAC,IAAI,EAAE,0BAA0B,CAAC,IAAI,aAAa,CAAC,IAAI,EAAE,qBAAqB,CAAC;CACrG;;ACtFD;;;;;;;;;;;;;;;;;;;;;;;AAuBA,AAAO,IAAM,SAAS,GAAC,kBACV,CAAC,KAAK,EAAE,IAAS,EAAE;6BAAP,GAAG,EAAE;;EAC5B,IAAM,CAAC,KAAK,GAAG,MAAK;EACpB,IAAM,CAAC,OAAO,GAAG,IAAI,CAAC,QAAO;EAC7B,IAAM,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,WAAU;EACrC,IAAM,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,WAAU;EACrC,IAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,OAAM;EAC7B,IAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,SAAQ;EACjC,IAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,OAAM;EAC7B,IAAM,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,QAAO;EAC/B,IAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAI;EACjC,IAAM,CAAC,aAAa,GAAG,KAAI;CAC1B,CAAA;;AAGH,SAAS,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;EACzB,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;CAC5D;AACDD,IAAM,UAAU,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;IAAE,UAAU,GAAG,CAAC,UAAU,EAAE,IAAI,EAAC;;;;AAItE,AAAOA,IAAME,UAAQ,GAAG,GAAE;;;AAG1B,SAAS,EAAE,CAAC,IAAI,EAAE,OAAY,EAAE;mCAAP,GAAG,EAAE;;EAC5B,OAAO,CAAC,OAAO,GAAG,KAAI;EACtB,OAAOA,UAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;CACrD;;AAED,AAAOF,IAAM,KAAK,GAAG;EACnB,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC;EACrC,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC;EAC3C,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC;EAC3C,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;EACvC,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC;;;EAGzB,QAAQ,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;EAClE,QAAQ,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC;EAC5B,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;EAChE,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC;EAC1B,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;EAChE,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC;EAC1B,KAAK,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC;EACrC,IAAI,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC;EACpC,KAAK,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC;EACrC,GAAG,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC;EACvB,QAAQ,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC;EACxC,KAAK,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC;EACtC,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC;EACnC,eAAe,EAAE,IAAI,SAAS,CAAC,iBAAiB,CAAC;EACjD,QAAQ,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC;EAC1C,SAAS,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC;EACzC,YAAY,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;;;;;;;;;;;;;;;;EAgBvE,EAAE,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;EAC1D,MAAM,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;EAC/D,MAAM,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;EAC/E,MAAM,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;EAChF,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;EACzB,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;EAC1B,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;EACxB,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;EACzB,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;EACzB,QAAQ,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;EACnC,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;EACjC,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;EAC/B,OAAO,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;EAC3F,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;EACtB,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;EACpB,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;EACrB,QAAQ,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;;;EAGjD,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC;EACnB,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;EAC7B,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC;EACnB,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC;EACzB,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC;EACzB,QAAQ,EAAE,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;EACnC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;EAC/C,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;EAC7B,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC;EACvB,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EAC/B,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;EACrC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC;EACb,OAAO,EAAE,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;EACjC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC;EACrB,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;EAC/B,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC;EACf,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC;EACf,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC;EACnB,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACnC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC;EACjB,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;EACrD,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;EAC7B,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;EAC/B,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;EAC/B,QAAQ,EAAE,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;EACnC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC;EACrB,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC;EACrB,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;EAC7B,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;EAC7B,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;EAC/B,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;EAC3C,WAAW,EAAE,EAAE,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;EAC3D,OAAO,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;EACzE,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;EACrE,OAAO,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;CAC1E;;ACnJD;;;AAGA,AAAOA,IAAM,SAAS,GAAG,yBAAwB;AACjD,AAAOA,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAC;;AAE3D,AAAO,SAAS,SAAS,CAAC,IAAI,EAAE,cAAc,EAAE;EAC9C,OAAO,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,CAAC,CAAC;CAC/F;;AAED,AAAOA,IAAM,kBAAkB,GAAG,gDAA+C;;AAEjF,AAAOA,IAAM,cAAc,GAAG,+BAA+B;;ACZxD,OAA2B,GAAG,MAAM,CAAC,SAAS;AAA5C,IAAA,cAAc;AAAE,IAAA,QAAQ,gBAAzB;;;;AAIN,AAAO,SAAS,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE;EACjC,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;CAC1C;;AAED,AAAOA,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,UAAC,GAAG,EAAE;EAC7C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,gBAAgB;IACxC,EAAC;;AAEF,AAAO,SAAS,WAAW,CAAC,KAAK,EAAE;EACjC,OAAO,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;CAC5D;;;;;ACTD,AAAO,IAAM,QAAQ,GAAC,iBACT,CAAC,IAAI,EAAE,GAAG,EAAE;EACvB,IAAM,CAAC,IAAI,GAAG,KAAI;EAClB,IAAM,CAAC,MAAM,GAAG,IAAG;CAClB,CAAA;;AAEH,mBAAE,MAAM,oBAAC,CAAC,EAAE;EACV,OAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;CAChD,CAAA;;AAGH,AAAO,IAAM,cAAc,GAAC,uBACf,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;EAC3B,IAAM,CAAC,KAAK,GAAG,MAAK;EACpB,IAAM,CAAC,GAAG,GAAG,IAAG;EAChB,IAAM,CAAC,CAAC,UAAU,KAAK,IAAI,EAAE,EAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,WAAU,EAAA;CACtD,CAAA;;;;;;;;AASH,AAAO,SAAS,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE;EACzC,KAAKC,IAAI,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI;IAC5B,UAAU,CAAC,SAAS,GAAG,IAAG;IAC1BA,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,EAAC;IAClC,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE;MACjC,EAAE,KAAI;MACN,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAM;KACpC,MAAM;MACL,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;KACxC;GACF;CACF;;;;;ACnCD,AAAOD,IAAM,cAAc,GAAG;;;;;;EAM5B,WAAW,EAAE,CAAC;;;;EAId,UAAU,EAAE,QAAQ;;;;;;EAMpB,mBAAmB,EAAE,IAAI;;;EAGzB,eAAe,EAAE,IAAI;;;;;EAKrB,aAAa,EAAE,IAAI;;;EAGnB,0BAA0B,EAAE,KAAK;;;EAGjC,2BAA2B,EAAE,KAAK;;;EAGlC,yBAAyB,EAAE,KAAK;;;EAGhC,aAAa,EAAE,KAAK;;;;;EAKpB,SAAS,EAAE,KAAK;;;;;;EAMhB,OAAO,EAAE,IAAI;;;;;;;;;;;EAWb,SAAS,EAAE,IAAI;;;;;;;;;EASf,MAAM,EAAE,KAAK;;;;;;EAMb,OAAO,EAAE,IAAI;;;EAGb,UAAU,EAAE,IAAI;;;EAGhB,gBAAgB,EAAE,IAAI;;;EAGtB,cAAc,EAAE,KAAK;EACtB;;;;AAID,AAAO,SAAS,UAAU,CAAC,IAAI,EAAE;EAC/BC,IAAI,OAAO,GAAG,GAAE;;EAEhB,KAAKA,IAAI,GAAG,IAAI,cAAc;IAC5B,EAAA,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,EAAC,EAAA;;EAEzE,IAAI,OAAO,CAAC,WAAW,IAAI,IAAI;IAC7B,EAAA,OAAO,CAAC,WAAW,IAAI,KAAI,EAAA;;EAE7B,IAAI,OAAO,CAAC,aAAa,IAAI,IAAI;IAC/B,EAAA,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,WAAW,GAAG,EAAC,EAAA;;EAEjD,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;IAC5BA,IAAI,MAAM,GAAG,OAAO,CAAC,QAAO;IAC5B,OAAO,CAAC,OAAO,GAAG,UAAC,KAAK,EAAE,SAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAA;GAChD;EACD,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;IAC5B,EAAA,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAC,EAAA;;EAE7D,OAAO,OAAO;CACf;;AAED,SAAS,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE;EACnC,OAAO,SAAS,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE;IACzDA,IAAI,OAAO,GAAG;MACZ,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM;MAC9B,KAAK,EAAE,IAAI;MACX,KAAK,EAAE,KAAK;MACZ,GAAG,EAAE,GAAG;MACT;IACD,IAAI,OAAO,CAAC,SAAS;MACnB,EAAA,OAAO,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAC,EAAA;IAC1D,IAAI,OAAO,CAAC,MAAM;MAChB,EAAA,OAAO,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,EAAC,EAAA;IAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAC;GACpB;CACF;;ACjID;AACA,AAAOD,IACH,SAAS,GAAG,CAAC;IACb,cAAc,GAAG,CAAC;IAClB,SAAS,GAAG,SAAS,GAAG,cAAc;IACtC,WAAW,GAAG,CAAC;IACf,eAAe,GAAG,CAAC;IACnB,WAAW,GAAG,EAAE;IAChB,kBAAkB,GAAG,EAAE;IACvB,WAAW,GAAG,EAAE;IAChB,kBAAkB,GAAG,IAAG;;AAE5B,AAAO,SAAS,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE;EAC9C,OAAO,cAAc,IAAI,KAAK,GAAG,WAAW,GAAG,CAAC,CAAC,IAAI,SAAS,GAAG,eAAe,GAAG,CAAC,CAAC;CACtF;;;AAGD,AAAOA,IACH,SAAS,GAAG,CAAC;IACb,QAAQ,GAAG,CAAC;IACZ,YAAY,GAAG,CAAC;IAChB,aAAa,GAAG,CAAC;IACjB,iBAAiB,GAAG,CAAC;IACrB,YAAY,GAAG,EAAC;;AChBb,IAAM,MAAM,GAAC,eACP,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;EACtC,IAAM,CAAC,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC,OAAO,EAAC;EAC9C,IAAM,CAAC,UAAU,GAAG,OAAO,CAAC,WAAU;EACtC,IAAM,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAC;EACzE,IAAM,QAAQ,GAAG,GAAE;EACnB,IAAM,CAAC,OAAO,CAAC,aAAa,EAAE;IAC5B,KAAOC,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE;MACtC,EAAE,IAAI,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAA,KAAK,IAAA;IAC1C,IAAM,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE,EAAA,QAAQ,IAAI,SAAQ,EAAA;GAC1D;EACH,IAAM,CAAC,aAAa,GAAG,WAAW,CAAC,QAAQ,EAAC;EAC5C,IAAM,cAAc,GAAG,CAAC,QAAQ,GAAG,QAAQ,GAAG,GAAG,GAAG,EAAE,IAAI,aAAa,CAAC,OAAM;EAC9E,IAAM,CAAC,mBAAmB,GAAG,WAAW,CAAC,cAAc,EAAC;EACxD,IAAM,CAAC,uBAAuB,GAAG,WAAW,CAAC,cAAc,GAAG,GAAG,GAAG,aAAa,CAAC,UAAU,EAAC;EAC7F,IAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,EAAC;;;;;EAK5B,IAAM,CAAC,WAAW,GAAG,MAAK;;;;;EAK1B,IAAM,QAAQ,EAAE;IACd,IAAM,CAAC,GAAG,GAAG,SAAQ;IACrB,IAAM,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,EAAC;IACjE,IAAM,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAM;GAC3E,MAAM;IACP,IAAM,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,EAAC;IAC/B,IAAM,CAAC,OAAO,GAAG,EAAC;GACjB;;;;EAIH,IAAM,CAAC,IAAI,GAAGE,KAAE,CAAC,IAAG;;EAEpB,IAAM,CAAC,KAAK,GAAG,KAAI;;EAEnB,IAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAG;;;EAGlC,IAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,GAAE;;;EAGlD,IAAM,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,GAAG,KAAI;EAClD,IAAM,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAG;;;;;EAKhD,IAAM,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,GAAE;EACtC,IAAM,CAAC,WAAW,GAAG,KAAI;;;EAGzB,IAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,UAAU,KAAK,SAAQ;EACjD,IAAM,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAC;;;EAG/D,IAAM,CAAC,gBAAgB,GAAG,CAAC,EAAC;;;EAG5B,IAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,GAAG,EAAC;;EAExD,IAAM,CAAC,MAAM,GAAG,GAAE;;EAElB,IAAM,CAAC,gBAAgB,GAAG,GAAE;;;EAG5B,IAAM,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI;IAC9E,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,EAAC,EAAA;;;EAG3B,IAAM,CAAC,UAAU,GAAG,GAAE;EACtB,IAAM,CAAC,UAAU,CAAC,SAAS,EAAC;;;EAG5B,IAAM,CAAC,WAAW,GAAG,KAAI;CACxB;;4PAAA;;AAEH,iBAAE,KAAK,qBAAG;EACR,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,GAAE;EACrD,IAAM,CAAC,SAAS,GAAE;EAClB,OAAS,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;CAChC,CAAA;;AAEH,mBAAE,UAAc,mBAAG,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,GAAG,cAAc,IAAI,CAAC,EAAE,CAAA;AACjF,mBAAE,WAAe,mBAAG,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,GAAG,eAAe,IAAI,CAAC,EAAE,CAAA;AACnF,mBAAE,OAAW,mBAAG,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,GAAG,WAAW,IAAI,CAAC,EAAE,CAAA;AAC3E,mBAAE,UAAc,mBAAG,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,GAAG,WAAW,IAAI,CAAC,EAAE,CAAA;AAC/E,mBAAE,gBAAoB,mBAAG,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,GAAG,kBAAkB,IAAI,CAAC,EAAE,CAAA;AAC5F,mBAAE,mBAAuB,mBAAG,EAAE,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,CAAA;;;AAG3F,iBAAE,kBAAkB,kCAAG,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,GAAG,cAAc,IAAI,CAAC,EAAE,CAAA;;AAEtF,OAAE,MAAa,sBAAa;;;;EAC1B,IAAM,GAAG,GAAG,KAAI;EAChB,KAAOF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAA,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAC,EAAA;EAChE,OAAS,GAAG;CACX,CAAA;;AAEH,OAAE,KAAY,mBAAC,KAAK,EAAE,OAAO,EAAE;EAC7B,OAAS,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE;CACxC,CAAA;;AAEH,OAAE,iBAAwB,+BAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE;EAC9C,IAAM,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAC;EAC5C,MAAQ,CAAC,SAAS,GAAE;EACpB,OAAS,MAAM,CAAC,eAAe,EAAE;CAChC,CAAA;;AAEH,OAAE,SAAgB,uBAAC,KAAK,EAAE,OAAO,EAAE;EACjC,OAAS,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;CAChC,CAAA;;gEACF;;ACvHDD,IAAM,EAAE,GAAG,MAAM,CAAC,UAAS;;;;AAI3BA,IAAM,OAAO,GAAG,6CAA4C;AAC5D,EAAE,CAAC,eAAe,GAAG,SAAS,KAAK,EAAE;;;EACnC,SAAS;;IAEP,cAAc,CAAC,SAAS,GAAG,MAAK;IAChC,KAAK,IAAI,cAAc,CAAC,IAAI,CAACI,MAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAM;IAClDH,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,CAACG,MAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAC;IACjD,IAAI,CAAC,KAAK,EAAE,EAAA,OAAO,KAAK,EAAA;IACxB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,YAAY,EAAE,EAAA,OAAO,IAAI,EAAA;IACxD,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAM;;;IAGxB,cAAc,CAAC,SAAS,GAAG,MAAK;IAChC,KAAK,IAAI,cAAc,CAAC,IAAI,CAACA,MAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAM;IAClD,IAAIA,MAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG;MAC3B,EAAA,KAAK,GAAE,EAAA;GACV;EACF;;;;;AAKD,EAAE,CAAC,GAAG,GAAG,SAAS,IAAI,EAAE;EACtB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;IACtB,IAAI,CAAC,IAAI,GAAE;IACX,OAAO,IAAI;GACZ,MAAM;IACL,OAAO,KAAK;GACb;EACF;;;;AAID,EAAE,CAAC,YAAY,GAAG,SAAS,IAAI,EAAE;EAC/B,OAAO,IAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW;EACzE;;;;AAID,EAAE,CAAC,aAAa,GAAG,SAAS,IAAI,EAAE;EAChC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAA,OAAO,KAAK,EAAA;EAC1C,IAAI,CAAC,IAAI,GAAE;EACX,OAAO,IAAI;EACZ;;;;AAID,EAAE,CAAC,gBAAgB,GAAG,SAAS,IAAI,EAAE;EACnC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;EACjD;;;;AAID,EAAE,CAAC,kBAAkB,GAAG,WAAW;EACjC,OAAO,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,GAAG;IACzB,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,MAAM;IACvB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;EAChE;;AAED,EAAE,CAAC,eAAe,GAAG,WAAW;EAC9B,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;IAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB;MAClC,EAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAC,EAAA;IACvE,OAAO,IAAI;GACZ;EACF;;;;;AAKD,EAAE,CAAC,SAAS,GAAG,WAAW;EACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;EACrE;;AAED,EAAE,CAAC,kBAAkB,GAAG,SAAS,OAAO,EAAE,OAAO,EAAE;EACjD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;IACzB,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe;MAC9B,EAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,EAAC,EAAA;IACvE,IAAI,CAAC,OAAO;MACV,EAAA,IAAI,CAAC,IAAI,GAAE,EAAA;IACb,OAAO,IAAI;GACZ;EACF;;;;;AAKD,EAAE,CAAC,MAAM,GAAG,SAAS,IAAI,EAAE;EACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,GAAE;EACpC;;;;AAID,EAAE,CAAC,UAAU,GAAG,SAAS,GAAG,EAAE;EAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,kBAAkB,EAAC;EAC/D;;AAED,AAAO,SAAS,mBAAmB,GAAG;EACpC,IAAI,CAAC,eAAe;EACpB,IAAI,CAAC,aAAa;EAClB,IAAI,CAAC,mBAAmB;EACxB,IAAI,CAAC,iBAAiB;EACtB,IAAI,CAAC,WAAW;IACd,CAAC,EAAC;CACL;;AAED,EAAE,CAAC,kBAAkB,GAAG,SAAS,sBAAsB,EAAE,QAAQ,EAAE;EACjE,IAAI,CAAC,sBAAsB,EAAE,EAAA,MAAM,EAAA;EACnC,IAAI,sBAAsB,CAAC,aAAa,GAAG,CAAC,CAAC;IAC3C,EAAA,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,aAAa,EAAE,+CAA+C,EAAC,EAAA;EAC9GF,IAAI,MAAM,GAAG,QAAQ,GAAG,sBAAsB,CAAC,mBAAmB,GAAG,sBAAsB,CAAC,kBAAiB;EAC7G,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,EAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,EAAC,EAAA;EACxE;;AAED,EAAE,CAAC,qBAAqB,GAAG,SAAS,sBAAsB,EAAE,QAAQ,EAAE;EACpE,IAAI,CAAC,sBAAsB,EAAE,EAAA,OAAO,KAAK,EAAA;EACzC,IAAK,eAAe;EAAE,IAAA,WAAW,sCAA7B;EACJ,IAAI,CAAC,QAAQ,EAAE,EAAA,OAAO,eAAe,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,EAAA;EAC9D,IAAI,eAAe,IAAI,CAAC;IACtB,EAAA,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,yEAAyE,EAAC,EAAA;EACxG,IAAI,WAAW,IAAI,CAAC;IAClB,EAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,oCAAoC,EAAC,EAAA;EAC3E;;AAED,EAAE,CAAC,8BAA8B,GAAG,WAAW;EAC7C,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACpE,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,4CAA4C,EAAC,EAAA;EACzE,IAAI,IAAI,CAAC,QAAQ;IACf,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,4CAA4C,EAAC,EAAA;EAC1E;;AAED,EAAE,CAAC,oBAAoB,GAAG,SAAS,IAAI,EAAE;EACvC,IAAI,IAAI,CAAC,IAAI,KAAK,yBAAyB;IACzC,EAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAA;EACnD,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB;CACtE;;ACvIDD,IAAMK,IAAE,GAAG,MAAM,CAAC,UAAS;;;;;;;;;AAS3BA,IAAE,CAAC,aAAa,GAAG,SAAS,IAAI,EAAE;;;EAChCJ,IAAI,OAAO,GAAG,GAAE;EAChB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAA,IAAI,CAAC,IAAI,GAAG,GAAE,EAAA;EAC9B,OAAO,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,GAAG,EAAE;IAC3BF,IAAI,IAAI,GAAGG,MAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAC;IACnD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC;GACrB;EACD,IAAI,IAAI,CAAC,QAAQ;IACf,EAAA,KAAa,kBAAI,MAAM,CAAC,IAAI,CAACA,MAAI,CAAC,gBAAgB,CAAC,yBAAA;MAA9C;QAAAH,IAAI,IAAI;;QACXG,MAAI,CAAC,gBAAgB,CAACA,MAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,GAAE,UAAS,GAAE,IAAI,qBAAiB,GAAE;OAAA,EAAA;EAC/F,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAC;EACtC,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;IACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAU;GAC1C;EACD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;EACxC;;AAEDJ,IAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;IAAE,WAAW,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAC;;AAEhEK,IAAE,CAAC,KAAK,GAAG,SAAS,OAAO,EAAE;EAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAA,OAAO,KAAK,EAAA;EAC3E,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC,IAAG;EACnCJ,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAC;EAC1CA,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAC;;;;;EAK1E,IAAI,MAAM,KAAK,EAAE,EAAE,EAAA,OAAO,IAAI,EAAA;EAC9B,IAAI,OAAO,EAAE,EAAA,OAAO,KAAK,EAAA;;EAEzB,IAAI,MAAM,KAAK,GAAG,EAAE,EAAA,OAAO,IAAI,EAAA;EAC/B,IAAI,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;IACnCA,IAAI,GAAG,GAAG,IAAI,GAAG,EAAC;IAClB,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,EAAA,EAAE,IAAG,EAAA;IAChEA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAC;IACvC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAA,OAAO,IAAI,EAAA;GACxD;EACD,OAAO,KAAK;EACb;;;;;AAKDI,IAAE,CAAC,eAAe,GAAG,WAAW;EAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAC7D,EAAA,OAAO,KAAK,EAAA;;EAEd,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC,IAAG;EACnCJ,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAC;EAC1CA,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,OAAM;EACpC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,UAAU;KAC9C,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;EACrF;;;;;;;;;AASDI,IAAE,CAAC,cAAc,GAAG,SAAS,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE;EACvDJ,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,KAAI;;EAExD,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;IACvB,SAAS,GAAGE,KAAE,CAAC,KAAI;IACnB,IAAI,GAAG,MAAK;GACb;;;;;;EAMD,QAAQ,SAAS;EACjB,KAAKA,KAAE,CAAC,MAAM,CAAC,CAAC,KAAKA,KAAE,CAAC,SAAS,EAAE,OAAO,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC;EACnG,KAAKA,KAAE,CAAC,SAAS,EAAE,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;EAC3D,KAAKA,KAAE,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;EAC/C,KAAKA,KAAE,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;EACjD,KAAKA,KAAE,CAAC,SAAS;;;;IAIf,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;IAC7H,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC;EAC3D,KAAKA,KAAE,CAAC,MAAM;IACZ,IAAI,OAAO,EAAE,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;IAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;EACpC,KAAKA,KAAE,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;EAC/C,KAAKA,KAAE,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;EACvD,KAAKA,KAAE,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;EACvD,KAAKA,KAAE,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;EACrD,KAAKA,KAAE,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;EACjD,KAAKA,KAAE,CAAC,MAAM,CAAC,CAAC,KAAKA,KAAE,CAAC,IAAI;IAC1B,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,MAAK;IACzB,IAAI,OAAO,IAAI,IAAI,KAAK,KAAK,EAAE,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;IAChD,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC;EAC3C,KAAKA,KAAE,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;EACrD,KAAKA,KAAE,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;EACnD,KAAKA,KAAE,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;EAClD,KAAKA,KAAE,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;EACnD,KAAKA,KAAE,CAAC,OAAO,CAAC;EAChB,KAAKA,KAAE,CAAC,OAAO;IACb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE;MAC7C,IAAI,CAAC,QAAQ;QACX,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,wDAAwD,EAAC,EAAA;MAClF,IAAI,CAAC,IAAI,CAAC,QAAQ;QAChB,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,iEAAiE,EAAC,EAAA;KAC5F;IACD,OAAO,SAAS,KAAKA,KAAE,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;;;;;;;EAO5F;IACE,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;MAC1B,IAAI,OAAO,EAAE,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;MAC9B,IAAI,CAAC,IAAI,GAAE;MACX,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC;KACzD;;IAEDF,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,eAAe,GAAE;IACzD,IAAI,SAAS,KAAKE,KAAE,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,KAAK,CAAC;MAC3E,EAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,EAAA;SAC9D,EAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAA;GACtD;EACF;;AAEDE,IAAE,CAAC,2BAA2B,GAAG,SAAS,IAAI,EAAE,OAAO,EAAE;;;EACvDJ,IAAI,OAAO,GAAG,OAAO,KAAK,QAAO;EACjC,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,IAAI,CAAC,GAAG,CAACE,KAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,EAAA,IAAI,CAAC,KAAK,GAAG,KAAI,EAAA;OAC7D,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,IAAI,EAAE,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;OAC5C;IACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,GAAE;IAC9B,IAAI,CAAC,SAAS,GAAE;GACjB;;;;EAIDF,IAAI,CAAC,GAAG,EAAC;EACT,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;IAClCA,IAAI,GAAG,GAAGG,MAAI,CAAC,MAAM,CAAC,CAAC,EAAC;IACxB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;MACtD,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,EAAA,KAAK,EAAA;MAC/D,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,EAAA,KAAK,EAAA;KACjC;GACF;EACD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,EAAC,EAAA;EAC9E,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;EAC/E;;AAEDC,IAAE,CAAC,sBAAsB,GAAG,SAAS,IAAI,EAAE;EACzC,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,CAAC,SAAS,GAAE;EAChB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,mBAAmB,CAAC;EAClD;;AAEDA,IAAE,CAAC,gBAAgB,GAAG,SAAS,IAAI,EAAE;EACnC,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAC;EAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAC;EACrC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAE;EACjB,IAAI,CAAC,MAAM,CAACF,KAAE,CAAC,MAAM,EAAC;EACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,GAAE;EACvC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC;IAC/B,EAAA,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,IAAI,EAAC,EAAA;;IAEjB,EAAA,IAAI,CAAC,SAAS,GAAE,EAAA;EAClB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,CAAC;EACjD;;;;;;;;;;AAUDE,IAAE,CAAC,iBAAiB,GAAG,SAAS,IAAI,EAAE;EACpC,IAAI,CAAC,IAAI,GAAE;EACXJ,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAC;EACvL,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAC;EAC3B,IAAI,CAAC,UAAU,CAAC,CAAC,EAAC;EAClB,IAAI,CAAC,MAAM,CAACE,KAAE,CAAC,MAAM,EAAC;EACtB,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,IAAI,EAAE;IACzB,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,EAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAC,EAAA;IAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;GACjC;EACDF,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,GAAE;EACxB,IAAI,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,MAAM,IAAI,KAAK,EAAE;IAC7DF,IAAIK,MAAI,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,MAAK;IAC9D,IAAI,CAAC,IAAI,GAAE;IACX,IAAI,CAAC,QAAQ,CAACA,MAAI,EAAE,IAAI,EAAE,IAAI,EAAC;IAC/B,IAAI,CAAC,UAAU,CAACA,MAAI,EAAE,qBAAqB,EAAC;IAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,KAAKH,KAAE,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAKG,MAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;QACtH,EAAE,IAAI,KAAK,KAAK,IAAIA,MAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;MAClD,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;QACjC,IAAI,IAAI,CAAC,IAAI,KAAKH,KAAE,CAAC,GAAG,EAAE;UACxB,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,EAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAC,EAAA;SAC3C,MAAM,EAAA,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,CAAC,EAAC,EAAA;OACjC;MACD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAEG,MAAI,CAAC;KACnC;IACD,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,EAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAC,EAAA;IAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAEA,MAAI,CAAC;GACjC;EACDL,IAAI,sBAAsB,GAAG,IAAI,oBAAmB;EACpDA,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,sBAAsB,EAAC;EAC7D,IAAI,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE;IACtF,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;MACjC,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,GAAG,EAAE;QACxB,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,EAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAC,EAAA;OAC3C,MAAM,EAAA,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,CAAC,EAAC,EAAA;KACjC;IACD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,sBAAsB,EAAC;IACtD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAC;IACpB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;GACnC,MAAM;IACL,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,IAAI,EAAC;GACzD;EACD,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,EAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAC,EAAA;EAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;EACjC;;AAEDE,IAAE,CAAC,sBAAsB,GAAG,SAAS,IAAI,EAAE,OAAO,EAAE,mBAAmB,EAAE;EACvE,IAAI,CAAC,IAAI,GAAE;EACX,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,cAAc,IAAI,mBAAmB,GAAG,CAAC,GAAG,sBAAsB,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC;EACrH;;AAEDA,IAAE,CAAC,gBAAgB,GAAG,SAAS,IAAI,EAAE;EACnC,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,GAAE;;EAEvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAC;EAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAACF,KAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,KAAI;EACtE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC;EAC5C;;AAEDE,IAAE,CAAC,oBAAoB,GAAG,SAAS,IAAI,EAAE;EACvC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B;IAC9D,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,8BAA8B,EAAC,EAAA;EACxD,IAAI,CAAC,IAAI,GAAE;;;;;;EAMX,IAAI,IAAI,CAAC,GAAG,CAACF,KAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,EAAA,IAAI,CAAC,QAAQ,GAAG,KAAI,EAAA;OAChE,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,GAAE,EAAE;EACjE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC;EAChD;;AAEDE,IAAE,CAAC,oBAAoB,GAAG,SAAS,IAAI,EAAE;;;EACvC,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,GAAE;EAC/C,IAAI,CAAC,KAAK,GAAG,GAAE;EACf,IAAI,CAAC,MAAM,CAACF,KAAE,CAAC,MAAM,EAAC;EACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAC;EAC7B,IAAI,CAAC,UAAU,CAAC,CAAC,EAAC;;;;;;EAMlBF,IAAI,IAAG;EACP,KAAKA,IAAI,UAAU,GAAG,KAAK,EAAE,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,MAAM,GAAG;IACrD,IAAIC,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,KAAK,IAAIC,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,QAAQ,EAAE;MACvDF,IAAI,MAAM,GAAGG,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,MAAK;MACnC,IAAI,GAAG,EAAE,EAAAC,MAAI,CAAC,UAAU,CAAC,GAAG,EAAE,YAAY,EAAC,EAAA;MAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAGA,MAAI,CAAC,SAAS,EAAE,EAAC;MACvC,GAAG,CAAC,UAAU,GAAG,GAAE;MACnBA,MAAI,CAAC,IAAI,GAAE;MACX,IAAI,MAAM,EAAE;QACV,GAAG,CAAC,IAAI,GAAGA,MAAI,CAAC,eAAe,GAAE;OAClC,MAAM;QACL,IAAI,UAAU,EAAE,EAAAA,MAAI,CAAC,gBAAgB,CAACA,MAAI,CAAC,YAAY,EAAE,0BAA0B,EAAC,EAAA;QACpF,UAAU,GAAG,KAAI;QACjB,GAAG,CAAC,IAAI,GAAG,KAAI;OAChB;MACDA,MAAI,CAAC,MAAM,CAACD,KAAE,CAAC,KAAK,EAAC;KACtB,MAAM;MACL,IAAI,CAAC,GAAG,EAAE,EAAAC,MAAI,CAAC,UAAU,GAAE,EAAA;MAC3B,GAAG,CAAC,UAAU,CAAC,IAAI,CAACA,MAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAC;KAC/C;GACF;EACD,IAAI,CAAC,SAAS,GAAE;EAChB,IAAI,GAAG,EAAE,EAAA,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,YAAY,EAAC,EAAA;EAC3C,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,CAAC,MAAM,CAAC,GAAG,GAAE;EACjB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC;EAChD;;AAEDC,IAAE,CAAC,mBAAmB,GAAG,SAAS,IAAI,EAAE;EACtC,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,6BAA6B,EAAC,EAAA;EAC5D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,GAAE;EACtC,IAAI,CAAC,SAAS,GAAE;EAChB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC;EAC/C;;;;AAIDL,IAAM,KAAK,GAAG,GAAE;;AAEhBK,IAAE,CAAC,iBAAiB,GAAG,SAAS,IAAI,EAAE;EACpC,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,GAAE;EAC9B,IAAI,CAAC,OAAO,GAAG,KAAI;EACnB,IAAI,IAAI,CAAC,IAAI,KAAKF,KAAE,CAAC,MAAM,EAAE;IAC3BF,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,GAAE;IAC7B,IAAI,CAAC,IAAI,GAAE;IACX,IAAI,IAAI,CAAC,GAAG,CAACE,KAAE,CAAC,MAAM,CAAC,EAAE;MACvB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,GAAE;MACtCF,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,aAAY;MAC/C,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,kBAAkB,GAAG,CAAC,EAAC;MAChD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,YAAY,EAAC;MACvE,IAAI,CAAC,MAAM,CAACE,KAAE,CAAC,MAAM,EAAC;KACvB,MAAM;MACL,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,EAAE,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;MACpD,MAAM,CAAC,KAAK,GAAG,KAAI;MACnB,IAAI,CAAC,UAAU,CAAC,CAAC,EAAC;KACnB;IACD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAC;IACpC,IAAI,CAAC,SAAS,GAAE;IAChB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,EAAC;GACtD;EACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,KAAI;EACjE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS;IAClC,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,iCAAiC,EAAC,EAAA;EAC3D,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC;EAC7C;;AAEDE,IAAE,CAAC,iBAAiB,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;EAC1C,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC;EAChC,IAAI,CAAC,SAAS,GAAE;EAChB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,qBAAqB,CAAC;EACpD;;AAEDA,IAAE,CAAC,mBAAmB,GAAG,SAAS,IAAI,EAAE;EACtC,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,GAAE;EACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAC;EAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAC;EACxC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAE;EACjB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC;EAC/C;;AAEDA,IAAE,CAAC,kBAAkB,GAAG,SAAS,IAAI,EAAE;EACrC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,uBAAuB,EAAC,EAAA;EAChE,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,GAAE;EACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAC;EACvC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC;EAC9C;;AAEDA,IAAE,CAAC,mBAAmB,GAAG,SAAS,IAAI,EAAE;EACtC,IAAI,CAAC,IAAI,GAAE;EACX,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC;EAC/C;;AAEDA,IAAE,CAAC,qBAAqB,GAAG,SAAS,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;;;EAClE,KAAc,oBAAID,MAAI,CAAC,MAAM,6BAAA;IAAxB;IAAAH,IAAI,KAAK;;IACZ,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;MAC1B,EAAAG,MAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,uBAAuB,EAAC;GAAA,EAAA;EAC3EH,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,OAAO,GAAG,QAAQ,GAAG,KAAI;EACjF,KAAKF,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;IAChDA,IAAIM,OAAK,GAAGH,MAAI,CAAC,MAAM,CAAC,CAAC,EAAC;IAC1B,IAAIG,OAAK,CAAC,cAAc,KAAK,IAAI,CAAC,KAAK,EAAE;;MAEvCA,OAAK,CAAC,cAAc,GAAGH,MAAI,CAAC,MAAK;MACjCG,OAAK,CAAC,IAAI,GAAG,KAAI;KAClB,MAAM,EAAA,KAAK,EAAA;GACb;EACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,MAAA,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,EAAC;EACrE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,EAAC;EAClH,IAAI,CAAC,MAAM,CAAC,GAAG,GAAE;EACjB,IAAI,CAAC,KAAK,GAAG,KAAI;EACjB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,CAAC;EACjD;;AAEDF,IAAE,CAAC,wBAAwB,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;EACjD,IAAI,CAAC,UAAU,GAAG,KAAI;EACtB,IAAI,CAAC,SAAS,GAAE;EAChB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,qBAAqB,CAAC;EACpD;;;;;;AAMDA,IAAE,CAAC,UAAU,GAAG,SAAS,qBAA4B,EAAE,IAAuB,EAAE;oBAAlC;+DAAA,GAAG,IAAI,CAAM;6BAAA,GAAG,IAAI,CAAC,SAAS,EAAE;;EAC5E,IAAI,CAAC,IAAI,GAAG,GAAE;EACd,IAAI,CAAC,MAAM,CAACF,KAAE,CAAC,MAAM,EAAC;EACtB,IAAI,qBAAqB,EAAE,EAAA,IAAI,CAAC,UAAU,CAAC,CAAC,EAAC,EAAA;EAC7C,OAAO,CAAC,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,MAAM,CAAC,EAAE;IAC3BF,IAAI,IAAI,GAAGG,MAAI,CAAC,cAAc,CAAC,IAAI,EAAC;IACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC;GACrB;EACD,IAAI,qBAAqB,EAAE,EAAA,IAAI,CAAC,SAAS,GAAE,EAAA;EAC3C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC;EAC/C;;;;;;AAMDC,IAAE,CAAC,QAAQ,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;EACjC,IAAI,CAAC,IAAI,GAAG,KAAI;EAChB,IAAI,CAAC,MAAM,CAACF,KAAE,CAAC,IAAI,EAAC;EACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,eAAe,GAAE;EACjE,IAAI,CAAC,MAAM,CAACA,KAAE,CAAC,IAAI,EAAC;EACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,eAAe,GAAE;EACrE,IAAI,CAAC,MAAM,CAACA,KAAE,CAAC,MAAM,EAAC;EACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAC;EACtC,IAAI,CAAC,SAAS,GAAE;EAChB,IAAI,CAAC,MAAM,CAAC,GAAG,GAAE;EACjB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC;EAC7C;;;;;AAKDE,IAAE,CAAC,UAAU,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;EACnCJ,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,GAAG,GAAG,gBAAgB,GAAG,iBAAgB;EACrE,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,IAAI,KAAK,gBAAgB,EAAE;IAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB;OAClC,IAAI,CAAC,IAAI,KAAK,qBAAqB,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI;QACvE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;MAChE,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,wCAAwC,EAAC,EAAA;GACnE;EACD,IAAI,CAAC,IAAI,GAAG,KAAI;EAChB,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,gBAAgB,GAAE;EACzF,IAAI,CAAC,MAAM,CAACA,KAAE,CAAC,MAAM,EAAC;EACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAC;EACtC,IAAI,CAAC,SAAS,GAAE;EAChB,IAAI,CAAC,MAAM,CAAC,GAAG,GAAE;EACjB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;EACnC;;;;AAIDE,IAAE,CAAC,QAAQ,GAAG,SAAS,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;;;EACxC,IAAI,CAAC,YAAY,GAAG,GAAE;EACtB,IAAI,CAAC,IAAI,GAAG,KAAI;EAChB,SAAS;IACPJ,IAAI,IAAI,GAAGG,MAAI,CAAC,SAAS,GAAE;IAC3BA,MAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAC;IAC3B,IAAIA,MAAI,CAAC,GAAG,CAACD,KAAE,CAAC,EAAE,CAAC,EAAE;MACnB,IAAI,CAAC,IAAI,GAAGC,MAAI,CAAC,gBAAgB,CAAC,KAAK,EAAC;KACzC,MAAM,IAAI,IAAI,KAAK,OAAO,IAAI,EAAEA,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,GAAG,KAAKC,MAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAIA,MAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;MACpHA,MAAI,CAAC,UAAU,GAAE;KAClB,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,YAAY,IAAI,EAAE,KAAK,KAAKA,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,GAAG,IAAIC,MAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;MACzGA,MAAI,CAAC,KAAK,CAACA,MAAI,CAAC,UAAU,EAAE,0DAA0D,EAAC;KACxF,MAAM;MACL,IAAI,CAAC,IAAI,GAAG,KAAI;KACjB;IACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAACA,MAAI,CAAC,UAAU,CAAC,IAAI,EAAE,oBAAoB,CAAC,EAAC;IACnE,IAAI,CAACA,MAAI,CAAC,GAAG,CAACD,KAAE,CAAC,KAAK,CAAC,EAAE,EAAA,KAAK,EAAA;GAC/B;EACD,OAAO,IAAI;EACZ;;AAEDE,IAAE,CAAC,UAAU,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;EACnC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;IACpE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,6CAA6C,EAAC;GACjF;EACD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,gBAAgB,GAAE;EACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,KAAK,KAAK,GAAG,QAAQ,GAAG,YAAY,EAAE,KAAK,EAAC;EACzE;;AAEDL,IAAM,cAAc,GAAG,CAAC;IAAE,sBAAsB,GAAG,CAAC;IAAE,gBAAgB,GAAG,EAAC;;;;;;AAM1EK,IAAE,CAAC,aAAa,GAAG,SAAS,IAAI,EAAE,SAAS,EAAE,mBAAmB,EAAE,OAAO,EAAE;EACzE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAC;EACvB,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;IAC9E,IAAI,IAAI,CAAC,IAAI,KAAKF,KAAE,CAAC,IAAI,KAAK,SAAS,GAAG,sBAAsB,CAAC;MAC/D,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;IACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,IAAI,EAAC;GACnC;EACD,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC;IAC/B,EAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,QAAO,EAAA;;EAExB,IAAI,SAAS,GAAG,cAAc,EAAE;IAC9B,IAAI,CAAC,EAAE,GAAG,CAAC,SAAS,GAAG,gBAAgB,KAAK,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,GAAE;IAC5F,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,sBAAsB,CAAC;;;;;MAKlD,EAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,mBAAmB,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,EAAC,EAAA;GAC9I;;EAEDF,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC,cAAa;EACnG,IAAI,CAAC,QAAQ,GAAG,EAAC;EACjB,IAAI,CAAC,QAAQ,GAAG,EAAC;EACjB,IAAI,CAAC,aAAa,GAAG,EAAC;EACtB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC;;EAE1D,IAAI,EAAE,SAAS,GAAG,cAAc,CAAC;IAC/B,EAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,KAAI,EAAA;;EAE5D,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAC;EAC9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAC;;EAExD,IAAI,CAAC,QAAQ,GAAG,YAAW;EAC3B,IAAI,CAAC,QAAQ,GAAG,YAAW;EAC3B,IAAI,CAAC,aAAa,GAAG,iBAAgB;EACrC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,cAAc,IAAI,qBAAqB,GAAG,oBAAoB,CAAC;EAC1G;;AAEDE,IAAE,CAAC,mBAAmB,GAAG,SAAS,IAAI,EAAE;EACtC,IAAI,CAAC,MAAM,CAACF,KAAE,CAAC,MAAM,EAAC;EACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAACA,KAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAC;EACpF,IAAI,CAAC,8BAA8B,GAAE;EACtC;;;;;AAKDE,IAAE,CAAC,UAAU,GAAG,SAAS,IAAI,EAAE,WAAW,EAAE;;;EAC1C,IAAI,CAAC,IAAI,GAAE;;;;EAIXL,IAAM,SAAS,GAAG,IAAI,CAAC,OAAM;EAC7B,IAAI,CAAC,MAAM,GAAG,KAAI;;EAElB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,EAAC;EACpC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAC;EAC1BC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,GAAE;EAChCA,IAAI,cAAc,GAAG,MAAK;EAC1B,SAAS,CAAC,IAAI,GAAG,GAAE;EACnB,IAAI,CAAC,MAAM,CAACE,KAAE,CAAC,MAAM,EAAC;EACtB,OAAO,CAAC,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,MAAM,CAAC,EAAE;IAC3BH,IAAM,OAAO,GAAGI,MAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,EAAC;IAChE,IAAI,OAAO,EAAE;MACX,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAC;MAC5B,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE;QACzE,IAAI,cAAc,EAAE,EAAAA,MAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,yCAAyC,EAAC,EAAA;QACxF,cAAc,GAAG,KAAI;OACtB;KACF;GACF;EACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,WAAW,EAAC;EACnD,IAAI,CAAC,MAAM,GAAG,UAAS;EACvB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;EACnF;;AAEDC,IAAE,CAAC,iBAAiB,GAAG,SAAS,sBAAsB,EAAE;;;EACtD,IAAI,IAAI,CAAC,GAAG,CAACF,KAAE,CAAC,IAAI,CAAC,EAAE,EAAA,OAAO,IAAI,EAAA;;EAElCF,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,GAAE;EAC7BD,IAAM,aAAa,GAAG,UAAC,CAAC,EAAE,WAAmB,EAAE;6CAAV,GAAG,KAAK;;IAC3CA,IAAM,KAAK,GAAGI,MAAI,CAAC,KAAK,EAAE,QAAQ,GAAGA,MAAI,CAAC,SAAQ;IAClD,IAAI,CAACA,MAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAA,OAAO,KAAK,EAAA;IACxC,IAAIA,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,MAAM,KAAK,CAAC,WAAW,IAAI,CAACC,MAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,EAAA,OAAO,IAAI,EAAA;IACxF,IAAI,MAAM,CAAC,GAAG,EAAE,EAAAA,MAAI,CAAC,UAAU,GAAE,EAAA;IACjC,MAAM,CAAC,QAAQ,GAAG,MAAK;IACvB,MAAM,CAAC,GAAG,GAAGA,MAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAC;IAC9C,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,EAAC;IACnBA,MAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,EAAC;IACzC,OAAO,KAAK;IACb;;EAED,MAAM,CAAC,IAAI,GAAG,SAAQ;EACtB,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAC;EACvCH,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,CAACE,KAAE,CAAC,IAAI,EAAC;EACnCF,IAAI,OAAO,GAAG,MAAK;EACnB,IAAI,CAAC,WAAW,EAAE;IAChB,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;MACjE,OAAO,GAAG,KAAI;MACd,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAACE,KAAE,CAAC,IAAI,EAAC;KACjE,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;MAC/B,MAAM,CAAC,IAAI,GAAG,MAAK;KACpB,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;MAC/B,MAAM,CAAC,IAAI,GAAG,MAAK;KACpB;GACF;EACD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAC,EAAA;EAC/C,IAAK,GAAG,cAAJ;EACJF,IAAI,iBAAiB,GAAG,MAAK;EAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa;MAC9F,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,aAAa,CAAC,EAAE;IAC1D,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,EAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,yCAAyC,EAAC,EAAA;IAC9F,IAAI,WAAW,EAAE,EAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,kCAAkC,EAAC,EAAA;IAC1E,IAAI,OAAO,EAAE,EAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,sCAAsC,EAAC,EAAA;IAC1E,MAAM,CAAC,IAAI,GAAG,cAAa;IAC3B,iBAAiB,GAAG,uBAAsB;GAC3C,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE;IACjF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,wDAAwD,EAAC;GAChF;EACD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAC;EACtE,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;IAC3D,EAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,8BAA8B,EAAC,EAAA;EAC3E,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;IAC3D,EAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,sCAAsC,EAAC,EAAA;EACnF,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa;IACxE,EAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,+BAA+B,EAAC,EAAA;EACtF,OAAO,MAAM;EACd;;AAEDI,IAAE,CAAC,gBAAgB,GAAG,SAAS,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE;EAC9E,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAC;EACxE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,kBAAkB,CAAC;EACnD;;AAEDA,IAAE,CAAC,YAAY,GAAG,SAAS,IAAI,EAAE,WAAW,EAAE;EAC5C,IAAI,IAAI,CAAC,IAAI,KAAKF,KAAE,CAAC,IAAI,EAAE;IACzB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,GAAE;IAC3B,IAAI,WAAW;MACb,EAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAC,EAAA;GAC/C,MAAM;IACL,IAAI,WAAW,KAAK,IAAI;MACtB,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;IACnB,IAAI,CAAC,EAAE,GAAG,KAAI;GACf;EACF;;AAEDE,IAAE,CAAC,eAAe,GAAG,SAAS,IAAI,EAAE;EAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAACF,KAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,KAAI;EAC5E;;;;AAIDE,IAAE,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE,OAAO,EAAE;;;EACvC,IAAI,CAAC,IAAI,GAAE;;EAEX,IAAI,IAAI,CAAC,GAAG,CAACF,KAAE,CAAC,IAAI,CAAC,EAAE;IACrB,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAC;IAC7B,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,MAAM,EAAE,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;IAC9C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,GAAE;IAClC,IAAI,CAAC,SAAS,GAAE;IAChB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,sBAAsB,CAAC;GACrD;EACD,IAAI,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,QAAQ,CAAC,EAAE;IACzB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,EAAC;IACvDF,IAAI,QAAO;IACX,IAAI,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,SAAS,KAAK,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE;MACpEF,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,GAAE;MAC5B,IAAI,CAAC,IAAI,GAAE;MACX,IAAI,OAAO,EAAE,EAAA,IAAI,CAAC,IAAI,GAAE,EAAA;MACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAC;KAChG,MAAM,IAAI,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,MAAM,EAAE;MAClCF,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,GAAE;MAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,EAAC;KACxD,MAAM;MACL,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,GAAE;MAC1C,IAAI,CAAC,SAAS,GAAE;KACjB;IACD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,0BAA0B,CAAC;GACzD;;EAED,IAAI,IAAI,CAAC,0BAA0B,EAAE,EAAE;IACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAC;IAC5C,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,qBAAqB;MACjD,EAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY,EAAC,EAAA;;MAEhE,EAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAC,EAAA;IAChF,IAAI,CAAC,UAAU,GAAG,GAAE;IACpB,IAAI,CAAC,MAAM,GAAG,KAAI;GACnB,MAAM;IACL,IAAI,CAAC,WAAW,GAAG,KAAI;IACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAC;IACrD,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;MAC9B,IAAI,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,MAAM,EAAE,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;MAC9C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,GAAE;KACnC,MAAM;MACL,KAAa,kBAAI,IAAI,CAAC,UAAU,yBAAA,EAAE;;QAA7BF,IAAI,IAAI;;QAEXG,MAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAC;;QAEhCA,MAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAC;OAClC;;MAED,IAAI,CAAC,MAAM,GAAG,KAAI;KACnB;IACD,IAAI,CAAC,SAAS,GAAE;GACjB;EACD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,wBAAwB,CAAC;EACvD;;AAEDC,IAAE,CAAC,WAAW,GAAG,SAAS,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE;EAC5C,IAAI,CAAC,OAAO,EAAE,EAAA,MAAM,EAAA;EACpB,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;IACpB,EAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,oBAAoB,GAAG,IAAI,GAAG,GAAG,EAAC,EAAA;EAC/D,OAAO,CAAC,IAAI,CAAC,GAAG,KAAI;EACrB;;AAEDA,IAAE,CAAC,kBAAkB,GAAG,SAAS,OAAO,EAAE,GAAG,EAAE;;;EAC7CJ,IAAI,IAAI,GAAG,GAAG,CAAC,KAAI;EACnB,IAAI,IAAI,KAAK,YAAY;IACvB,EAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAC,EAAA;OAC3C,IAAI,IAAI,KAAK,eAAe;IAC/B,EAAA,KAAa,kBAAI,GAAG,CAAC,UAAU,yBAAA;MAA1B;QAAAA,IAAI,IAAI;;QACXG,MAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAC;OAAA,EAAA;OACrC,IAAI,IAAI,KAAK,cAAc;IAC9B,EAAA,KAAY,sBAAI,GAAG,CAAC,QAAQ,+BAAA,EAAE;MAAzBH,IAAI,GAAG;;QACV,IAAI,GAAG,EAAE,EAAAG,MAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAC,EAAA;KAC/C,EAAA;OACE,IAAI,IAAI,KAAK,UAAU;IAC1B,EAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,EAAC,EAAA;OACxC,IAAI,IAAI,KAAK,mBAAmB;IACnC,EAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAC,EAAA;OACvC,IAAI,IAAI,KAAK,aAAa;IAC7B,EAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAC,EAAA;OAC3C,IAAI,IAAI,KAAK,yBAAyB;IACzC,EAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,EAAC,EAAA;EACnD;;AAEDC,IAAE,CAAC,mBAAmB,GAAG,SAAS,OAAO,EAAE,KAAK,EAAE;;;EAChD,IAAI,CAAC,OAAO,EAAE,EAAA,MAAM,EAAA;EACpB,KAAa,kBAAI,KAAK,yBAAA;IAAjB;IAAAJ,IAAI,IAAI;;IACXG,MAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAC;GAAA;EAC5C;;AAEDC,IAAE,CAAC,0BAA0B,GAAG,WAAW;EACzC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK;IAChC,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO;IAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO;IAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,UAAU;IAChC,IAAI,CAAC,KAAK,EAAE;IACZ,IAAI,CAAC,eAAe,EAAE;EACzB;;;;AAIDA,IAAE,CAAC,qBAAqB,GAAG,SAAS,OAAO,EAAE;;;EAC3CJ,IAAI,KAAK,GAAG,EAAE,EAAE,KAAK,GAAG,KAAI;;EAE5B,IAAI,CAAC,MAAM,CAACE,KAAE,CAAC,MAAM,EAAC;EACtB,OAAO,CAAC,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,MAAM,CAAC,EAAE;IAC3B,IAAI,CAAC,KAAK,EAAE;MACVC,MAAI,CAAC,MAAM,CAACD,KAAE,CAAC,KAAK,EAAC;MACrB,IAAIC,MAAI,CAAC,kBAAkB,CAACD,KAAE,CAAC,MAAM,CAAC,EAAE,EAAA,KAAK,EAAA;KAC9C,MAAM,EAAA,KAAK,GAAG,MAAK,EAAA;;IAEpBF,IAAI,IAAI,GAAGG,MAAI,CAAC,SAAS,GAAE;IAC3B,IAAI,CAAC,KAAK,GAAGA,MAAI,CAAC,UAAU,CAAC,IAAI,EAAC;IAClC,IAAI,CAAC,QAAQ,GAAGA,MAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAGA,MAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAK;IAC7EA,MAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAC;IAClE,KAAK,CAAC,IAAI,CAACA,MAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAC;GACrD;EACD,OAAO,KAAK;EACb;;;;AAIDC,IAAE,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE;EAC9B,IAAI,CAAC,IAAI,GAAE;;EAEX,IAAI,IAAI,CAAC,IAAI,KAAKF,KAAE,CAAC,MAAM,EAAE;IAC3B,IAAI,CAAC,UAAU,GAAG,MAAK;IACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,GAAE;GACnC,MAAM;IACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,qBAAqB,GAAE;IAC9C,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAC;IAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,UAAU,GAAE;GACjF;EACD,IAAI,CAAC,SAAS,GAAE;EAChB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,mBAAmB,CAAC;EAClD;;;;AAIDE,IAAE,CAAC,qBAAqB,GAAG,WAAW;;;EACpCJ,IAAI,KAAK,GAAG,EAAE,EAAE,KAAK,GAAG,KAAI;EAC5B,IAAI,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,IAAI,EAAE;;IAEzBF,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;IAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,GAAE;IAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAC;IACxC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,wBAAwB,CAAC,EAAC;IAC3D,IAAI,CAAC,IAAI,CAAC,GAAG,CAACE,KAAE,CAAC,KAAK,CAAC,EAAE,EAAA,OAAO,KAAK,EAAA;GACtC;EACD,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,IAAI,EAAE;IACzBF,IAAIO,MAAI,GAAG,IAAI,CAAC,SAAS,GAAE;IAC3B,IAAI,CAAC,IAAI,GAAE;IACX,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAC;IAC3BA,MAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,GAAE;IAC9B,IAAI,CAAC,SAAS,CAACA,MAAI,CAAC,KAAK,EAAE,YAAY,EAAC;IACxC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAACA,MAAI,EAAE,0BAA0B,CAAC,EAAC;IAC7D,OAAO,KAAK;GACb;EACD,IAAI,CAAC,MAAM,CAACL,KAAE,CAAC,MAAM,EAAC;EACtB,OAAO,CAAC,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,MAAM,CAAC,EAAE;IAC3B,IAAI,CAAC,KAAK,EAAE;MACVC,MAAI,CAAC,MAAM,CAACD,KAAE,CAAC,KAAK,EAAC;MACrB,IAAIC,MAAI,CAAC,kBAAkB,CAACD,KAAE,CAAC,MAAM,CAAC,EAAE,EAAA,KAAK,EAAA;KAC9C,MAAM,EAAA,KAAK,GAAG,MAAK,EAAA;;IAEpBF,IAAIO,MAAI,GAAGJ,MAAI,CAAC,SAAS,GAAE;IAC3BI,MAAI,CAAC,QAAQ,GAAGJ,MAAI,CAAC,UAAU,CAAC,IAAI,EAAC;IACrC,IAAIA,MAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;MAC5BI,MAAI,CAAC,KAAK,GAAGJ,MAAI,CAAC,UAAU,GAAE;KAC/B,MAAM;MACLA,MAAI,CAAC,eAAe,CAACI,MAAI,CAAC,QAAQ,EAAC;MACnCA,MAAI,CAAC,KAAK,GAAGA,MAAI,CAAC,SAAQ;KAC3B;IACDJ,MAAI,CAAC,SAAS,CAACI,MAAI,CAAC,KAAK,EAAE,YAAY,EAAC;IACxC,KAAK,CAAC,IAAI,CAACJ,MAAI,CAAC,UAAU,CAACI,MAAI,EAAE,iBAAiB,CAAC,EAAC;GACrD;EACD,OAAO,KAAK;EACb;;;AAGDH,IAAE,CAAC,sBAAsB,GAAG,SAAS,UAAU,EAAE;EAC/C,KAAKJ,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;IACtF,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC;GACpE;EACF;AACDI,IAAE,CAAC,oBAAoB,GAAG,SAAS,SAAS,EAAE;EAC5C;IACE,SAAS,CAAC,IAAI,KAAK,qBAAqB;IACxC,SAAS,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS;IACvC,OAAO,SAAS,CAAC,UAAU,CAAC,KAAK,KAAK,QAAQ;;KAE7C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;GAC9E;CACF;;AC30BDL,IAAMK,IAAE,GAAG,MAAM,CAAC,UAAS;;;;;AAK3BA,IAAE,CAAC,YAAY,GAAG,SAAS,IAAI,EAAE,SAAS,EAAE,sBAAsB,EAAE;;;EAClE,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,EAAE;IACzC,QAAQ,IAAI,CAAC,IAAI;IACjB,KAAK,YAAY;MACf,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QACvC,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,2DAA2D,EAAC,EAAA;MACrF,KAAK;;IAEP,KAAK,eAAe,CAAC;IACrB,KAAK,cAAc,CAAC;IACpB,KAAK,aAAa;MAChB,KAAK;;IAEP,KAAK,kBAAkB;MACrB,IAAI,CAAC,IAAI,GAAG,gBAAe;MAC3B,IAAI,sBAAsB,EAAE,EAAA,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,IAAI,EAAC,EAAA;MACjF,KAAa,kBAAI,IAAI,CAAC,UAAU,yBAAA,EAAE;QAA7BJ,IAAI,IAAI;;MACXG,MAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAC;;;;;;QAMlC;UACE,IAAI,CAAC,IAAI,KAAK,aAAa;WAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,eAAe,CAAC;UACjF;UACAA,MAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,EAAC;SACpD;OACF;MACD,KAAK;;IAEP,KAAK,UAAU;;MAEb,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,+CAA+C,EAAC,EAAA;MACrG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAC;MACxC,KAAK;;IAEP,KAAK,iBAAiB;MACpB,IAAI,CAAC,IAAI,GAAG,eAAc;MAC1B,IAAI,sBAAsB,EAAE,EAAA,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,IAAI,EAAC,EAAA;MACjF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAC;MAC/C,KAAK;;IAEP,KAAK,eAAe;MAClB,IAAI,CAAC,IAAI,GAAG,cAAa;MACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAC;MAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,mBAAmB;QAC5C,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,2CAA2C,EAAC,EAAA;MAC9E,KAAK;;IAEP,KAAK,sBAAsB;MACzB,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,EAAE,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,6DAA6D,EAAC,EAAA;MACnH,IAAI,CAAC,IAAI,GAAG,oBAAmB;MAC/B,OAAO,IAAI,CAAC,SAAQ;MACpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAC;;;IAGzC,KAAK,mBAAmB;MACtB,KAAK;;IAEP,KAAK,yBAAyB;MAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,sBAAsB,EAAC;MACrE,KAAK;;IAEP,KAAK,kBAAkB;MACrB,IAAI,CAAC,SAAS,EAAE,EAAA,KAAK,EAAA;;IAEvB;MACE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,qBAAqB,EAAC;KAC9C;GACF,MAAM,IAAI,sBAAsB,EAAE,EAAA,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,IAAI,EAAC,EAAA;EACxF,OAAO,IAAI;EACZ;;;;AAIDC,IAAE,CAAC,gBAAgB,GAAG,SAAS,QAAQ,EAAE,SAAS,EAAE;;;EAClDJ,IAAI,GAAG,GAAG,QAAQ,CAAC,OAAM;EACzB,KAAKA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;IAC5BA,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAC;IACrB,IAAI,GAAG,EAAE,EAAAG,MAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAC,EAAA;GAC3C;EACD,IAAI,GAAG,EAAE;IACPH,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAC;IAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,IAAI,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;MAC3H,EAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAC,EAAA;GACvC;EACD,OAAO,QAAQ;EAChB;;;;AAIDI,IAAE,CAAC,WAAW,GAAG,SAAS,sBAAsB,EAAE;EAChDJ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;EAC3B,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,EAAC;EACpE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC;EAC9C;;AAEDI,IAAE,CAAC,gBAAgB,GAAG,WAAW;EAC/BJ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;EAC3B,IAAI,CAAC,IAAI,GAAE;;;EAGX,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,IAAI;IACzD,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;;EAEnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,GAAE;;EAEvC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC;EAC5C;;;;AAIDE,IAAE,CAAC,gBAAgB,GAAG,WAAW;EAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;IACjC,QAAQ,IAAI,CAAC,IAAI;IACjB,KAAKF,KAAE,CAAC,QAAQ;MACdF,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;MAC3B,IAAI,CAAC,IAAI,GAAE;MACX,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAACE,KAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAC;MAC9D,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC;;IAE9C,KAAKA,KAAE,CAAC,MAAM;MACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC3B;GACF;EACD,OAAO,IAAI,CAAC,UAAU,EAAE;EACzB;;AAEDE,IAAE,CAAC,gBAAgB,GAAG,SAAS,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE;;;EACpEJ,IAAI,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,KAAI;EAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;IACvB,IAAI,KAAK,EAAE,EAAA,KAAK,GAAG,MAAK,EAAA;SACnB,EAAAG,MAAI,CAAC,MAAM,CAACD,KAAE,CAAC,KAAK,EAAC,EAAA;IAC1B,IAAI,UAAU,IAAIC,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,KAAK,EAAE;MACxC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC;KAChB,MAAM,IAAI,kBAAkB,IAAIC,MAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;MAC/D,KAAK;KACN,MAAM,IAAIA,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,QAAQ,EAAE;MACpCF,IAAI,IAAI,GAAGG,MAAI,CAAC,gBAAgB,GAAE;MAClCA,MAAI,CAAC,oBAAoB,CAAC,IAAI,EAAC;MAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC;MACf,IAAIA,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,KAAK,EAAE,EAAAC,MAAI,CAAC,KAAK,CAACA,MAAI,CAAC,KAAK,EAAE,+CAA+C,EAAC,EAAA;MACnGA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAC;MAClB,KAAK;KACN,MAAM;MACLH,IAAI,IAAI,GAAGG,MAAI,CAAC,iBAAiB,CAACA,MAAI,CAAC,KAAK,EAAEA,MAAI,CAAC,QAAQ,EAAC;MAC5DA,MAAI,CAAC,oBAAoB,CAAC,IAAI,EAAC;MAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC;KAChB;GACF;EACD,OAAO,IAAI;EACZ;;AAEDC,IAAE,CAAC,oBAAoB,GAAG,SAAS,KAAK,EAAE;EACxC,OAAO,KAAK;EACb;;;;AAIDA,IAAE,CAAC,iBAAiB,GAAG,SAAS,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;EACxD,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,gBAAgB,GAAE;EACtC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAACF,KAAE,CAAC,EAAE,CAAC,EAAE,EAAA,OAAO,IAAI,EAAA;EACjEF,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAC;EAC/C,IAAI,CAAC,IAAI,GAAG,KAAI;EAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,GAAE;EACpC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,mBAAmB,CAAC;EAClD;;;;;;;;;AASDI,IAAE,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE,WAAuB,EAAE,YAAY,EAAE;oBAA5B;2CAAA,GAAG,SAAS;;EACnD,QAAQ,IAAI,CAAC,IAAI;EACjB,KAAK,YAAY;IACf,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;MAC7D,EAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,GAAG,UAAU,GAAG,eAAe,IAAI,IAAI,CAAC,IAAI,GAAG,iBAAiB,EAAC,EAAA;IACjH,IAAI,YAAY,EAAE;MAChB,IAAI,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC;QAC9B,EAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,qBAAqB,EAAC,EAAA;MAC1D,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAI;KAC/B;IACD,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,YAAY,EAAE,EAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAC,EAAA;IACnH,KAAK;;EAEP,KAAK,kBAAkB;IACrB,IAAI,WAAW,EAAE,EAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,2BAA2B,EAAC,EAAA;IAC/E,KAAK;;EAEP,KAAK,eAAe;IAClB,KAAa,kBAAI,IAAI,CAAC,UAAU,yBAAA;MAA3B;IAAAJ,IAAI,IAAI;;IACXG,MAAI,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAC;GAAA;IACjD,KAAK;;EAEP,KAAK,UAAU;;IAEb,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAC;IACrD,KAAK;;EAEP,KAAK,cAAc;IACjB,KAAa,sBAAI,IAAI,CAAC,QAAQ,+BAAA,EAAE;MAA3BH,IAAI,IAAI;;IACX,IAAI,IAAI,EAAE,EAAAG,MAAI,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAC,EAAA;KAC1D;IACD,KAAK;;EAEP,KAAK,mBAAmB;IACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAC;IACpD,KAAK;;EAEP,KAAK,aAAa;IAChB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAC;IACxD,KAAK;;EAEP,KAAK,yBAAyB;IAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,EAAC;IAC1D,KAAK;;EAEP;IACE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,GAAG,SAAS,GAAG,cAAc,IAAI,SAAS,EAAC;GAC/E;CACF;;AC5OD;;;;;;;;;;;;;;;;;;AAkBA,AAMAJ,IAAMK,IAAE,GAAG,MAAM,CAAC,UAAS;;;;;;;AAO3BA,IAAE,CAAC,cAAc,GAAG,SAAS,IAAI,EAAE,QAAQ,EAAE,sBAAsB,EAAE;EACnE,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe;IAChE,EAAA,MAAM,EAAA;EACR,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC;IACnF,EAAA,MAAM,EAAA;EACR,IAAK,GAAG;EAAJ,IAAc,KAAI;EACtB,QAAQ,GAAG,CAAC,IAAI;EAChB,KAAK,YAAY,EAAE,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK;EACzC,KAAK,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;EAC/C,SAAS,MAAM;GACd;EACD,IAAK,IAAI,aAAL;EACJ,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;IACjC,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,MAAM,EAAE;MAC3C,IAAI,QAAQ,CAAC,KAAK,EAAE;QAClB,IAAI,sBAAsB,IAAI,sBAAsB,CAAC,WAAW,GAAG,CAAC,EAAE,EAAA,sBAAsB,CAAC,WAAW,GAAG,GAAG,CAAC,MAAK,EAAA;;aAE/G,EAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,oCAAoC,EAAC,EAAA;OAC5E;MACD,QAAQ,CAAC,KAAK,GAAG,KAAI;KACtB;IACD,MAAM;GACP;EACD,IAAI,GAAG,GAAG,GAAG,KAAI;EACjBJ,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAC;EAC1B,IAAI,KAAK,EAAE;IACTA,IAAI,aAAY;IAChB,IAAI,IAAI,KAAK,MAAM,EAAE;MACnB,YAAY,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,IAAG;KACnE,MAAM;MACL,YAAY,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAC;KACzC;IACD,IAAI,YAAY;MACd,EAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,0BAA0B,EAAC,EAAA;GAC/D,MAAM;IACL,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG;MACvB,IAAI,EAAE,KAAK;MACX,GAAG,EAAE,KAAK;MACV,GAAG,EAAE,KAAK;MACX;GACF;EACD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAI;EACnB;;;;;;;;;;;;;;;;;AAiBDI,IAAE,CAAC,eAAe,GAAG,SAAS,IAAI,EAAE,sBAAsB,EAAE;;;EAC1DJ,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,SAAQ;EACnDA,IAAI,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,EAAC;EAC9D,IAAI,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,KAAK,EAAE;IAC1BF,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAC;IAC/C,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,EAAC;IACzB,OAAO,IAAI,CAAC,GAAG,CAACE,KAAE,CAAC,KAAK,CAAC,EAAE,EAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAACC,MAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,CAAC,EAAC,EAAA;IACrG,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,oBAAoB,CAAC;GACnD;EACD,OAAO,IAAI;EACZ;;;;;AAKDC,IAAE,CAAC,gBAAgB,GAAG,SAAS,IAAI,EAAE,sBAAsB,EAAE,cAAc,EAAE;EAC3E,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;IAC9B,IAAI,IAAI,CAAC,WAAW,EAAE,EAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAA;;;SAG7C,EAAA,IAAI,CAAC,WAAW,GAAG,MAAK,EAAA;GAC9B;;EAEDJ,IAAI,sBAAsB,GAAG,KAAK,EAAE,cAAc,GAAG,CAAC,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,EAAC;EACvG,IAAI,sBAAsB,EAAE;IAC1B,cAAc,GAAG,sBAAsB,CAAC,oBAAmB;IAC3D,gBAAgB,GAAG,sBAAsB,CAAC,cAAa;IACvD,kBAAkB,GAAG,sBAAsB,CAAC,gBAAe;IAC3D,sBAAsB,CAAC,mBAAmB,GAAG,sBAAsB,CAAC,aAAa,GAAG,sBAAsB,CAAC,eAAe,GAAG,CAAC,EAAC;GAChI,MAAM;IACL,sBAAsB,GAAG,IAAI,oBAAmB;IAChD,sBAAsB,GAAG,KAAI;GAC9B;;EAEDA,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,SAAQ;EACnD,IAAI,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,IAAI;IAClD,EAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAK,EAAA;EACpCF,IAAI,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,EAAC;EACnE,IAAI,cAAc,EAAE,EAAA,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAC,EAAA;EAC9E,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;IACtBA,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAC;IAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAK;IAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,sBAAsB,CAAC,GAAG,KAAI;IAC/F,IAAI,CAAC,sBAAsB,EAAE,EAAA,mBAAmB,CAAC,IAAI,CAAC,sBAAsB,EAAC,EAAA;IAC7E,sBAAsB,CAAC,eAAe,GAAG,CAAC,EAAC;IAC3C,IAAI,CAAC,SAAS,CAAC,IAAI,EAAC;IACpB,IAAI,CAAC,IAAI,GAAE;IACX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAC;IACxC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,sBAAsB,CAAC;GACrD,MAAM;IACL,IAAI,sBAAsB,EAAE,EAAA,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,IAAI,EAAC,EAAA;GACrF;EACD,IAAI,cAAc,GAAG,CAAC,CAAC,EAAE,EAAA,sBAAsB,CAAC,mBAAmB,GAAG,eAAc,EAAA;EACpF,IAAI,gBAAgB,GAAG,CAAC,CAAC,EAAE,EAAA,sBAAsB,CAAC,aAAa,GAAG,iBAAgB,EAAA;EAClF,IAAI,kBAAkB,GAAG,CAAC,CAAC,EAAE,EAAA,sBAAsB,CAAC,eAAe,GAAG,mBAAkB,EAAA;EACxF,OAAO,IAAI;EACZ;;;;AAIDE,IAAE,CAAC,qBAAqB,GAAG,SAAS,IAAI,EAAE,sBAAsB,EAAE;EAChEJ,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,SAAQ;EACnDA,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,sBAAsB,EAAC;EAC1D,IAAI,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,EAAE,EAAA,OAAO,IAAI,EAAA;EACnE,IAAI,IAAI,CAAC,GAAG,CAACE,KAAE,CAAC,QAAQ,CAAC,EAAE;IACzBF,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAC;IAC/C,IAAI,CAAC,IAAI,GAAG,KAAI;IAChB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,GAAE;IACzC,IAAI,CAAC,MAAM,CAACE,KAAE,CAAC,KAAK,EAAC;IACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAC;IAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,uBAAuB,CAAC;GACtD;EACD,OAAO,IAAI;EACZ;;;;AAIDE,IAAE,CAAC,YAAY,GAAG,SAAS,IAAI,EAAE,sBAAsB,EAAE;EACvDJ,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,SAAQ;EACnDA,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE,KAAK,EAAC;EAC9D,IAAI,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,EAAE,EAAA,OAAO,IAAI,EAAA;EACnE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,yBAAyB,GAAG,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC;EACxI;;;;;;;;AAQDI,IAAE,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;EACzEJ,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAK;EAC1B,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,GAAG,CAAC,EAAE;IACnD,IAAI,IAAI,GAAG,OAAO,EAAE;MAClBF,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,WAAU;MACvEF,IAAI,EAAE,GAAG,IAAI,CAAC,MAAK;MACnB,IAAI,CAAC,IAAI,GAAE;MACXA,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,SAAQ;MACnDA,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAC;MAC/FA,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAC;MACjF,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;KACzE;GACF;EACD,OAAO,IAAI;EACZ;;AAEDI,IAAE,CAAC,WAAW,GAAG,SAAS,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACtEJ,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAC;EAC/C,IAAI,CAAC,IAAI,GAAG,KAAI;EAChB,IAAI,CAAC,QAAQ,GAAG,GAAE;EAClB,IAAI,CAAC,KAAK,GAAG,MAAK;EAClB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;EACjF;;;;AAIDI,IAAE,CAAC,eAAe,GAAG,SAAS,sBAAsB,EAAE,QAAQ,EAAE;;;EAC9DJ,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAI;EACzD,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,EAAE;IAChH,IAAI,GAAG,IAAI,CAAC,UAAU,GAAE;IACxB,QAAQ,GAAG,KAAI;GAChB,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;IAC3BA,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,OAAM;IAC7D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAK;IAC1B,IAAI,CAAC,MAAM,GAAG,KAAI;IAClB,IAAI,CAAC,IAAI,GAAE;IACX,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAC;IAChD,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,IAAI,EAAC;IACxD,IAAI,MAAM,EAAE,EAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAC,EAAA;SACpC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;aACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;MAC1C,EAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,wCAAwC,EAAC,EAAA;SACxE,EAAA,QAAQ,GAAG,KAAI,EAAA;IACpB,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,iBAAiB,EAAC;GAC9E,MAAM;IACL,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,EAAC;IACvD,IAAI,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,EAAE,EAAA,OAAO,IAAI,EAAA;IACnE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;MACtDF,IAAIO,MAAI,GAAGJ,MAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAC;MAC/CI,MAAI,CAAC,QAAQ,GAAGJ,MAAI,CAAC,MAAK;MAC1BI,MAAI,CAAC,MAAM,GAAG,MAAK;MACnBA,MAAI,CAAC,QAAQ,GAAG,KAAI;MACpBJ,MAAI,CAAC,SAAS,CAAC,IAAI,EAAC;MACpBA,MAAI,CAAC,IAAI,GAAE;MACX,IAAI,GAAGA,MAAI,CAAC,UAAU,CAACI,MAAI,EAAE,kBAAkB,EAAC;KACjD;GACF;;EAED,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAACL,KAAE,CAAC,QAAQ,CAAC;IACpC,EAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EAAA;;IAEjG,EAAA,OAAO,IAAI,EAAA;EACd;;;;AAIDE,IAAE,CAAC,mBAAmB,GAAG,SAAS,sBAAsB,EAAE;EACxDJ,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,SAAQ;EACnDA,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAC;EACrDA,IAAI,mBAAmB,GAAG,IAAI,CAAC,IAAI,KAAK,yBAAyB,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,IAAG;EACjI,IAAI,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,IAAI,mBAAmB,EAAE,EAAA,OAAO,IAAI,EAAA;EAC1FA,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAC;EAC3D,IAAI,sBAAsB,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE;IAChE,IAAI,sBAAsB,CAAC,mBAAmB,IAAI,MAAM,CAAC,KAAK,EAAE,EAAA,sBAAsB,CAAC,mBAAmB,GAAG,CAAC,EAAC,EAAA;IAC/G,IAAI,sBAAsB,CAAC,iBAAiB,IAAI,MAAM,CAAC,KAAK,EAAE,EAAA,sBAAsB,CAAC,iBAAiB,GAAG,CAAC,EAAC,EAAA;GAC5G;EACD,OAAO,MAAM;EACd;;AAEDI,IAAE,CAAC,eAAe,GAAG,SAAS,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE;;;EAC/DJ,IAAI,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;MACtG,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,QAAO;EACpH,OAAO,IAAI,EAAE;IACXA,IAAI,OAAO,GAAGG,MAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAC;IACrF,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,yBAAyB,EAAE,EAAA,OAAO,OAAO,EAAA;IAClF,IAAI,GAAG,QAAO;GACf;EACF;;AAEDC,IAAE,CAAC,cAAc,GAAG,SAAS,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE;EAC/EJ,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAACE,KAAE,CAAC,QAAQ,EAAC;EACpC,IAAI,QAAQ,IAAI,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,GAAG,CAAC,EAAE;IAChCF,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAC;IAC/C,IAAI,CAAC,MAAM,GAAG,KAAI;IAClB,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAC;IACzE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAQ;IAC1B,IAAI,QAAQ,EAAE,EAAA,IAAI,CAAC,MAAM,CAACE,KAAE,CAAC,QAAQ,EAAC,EAAA;IACtC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,EAAC;GACjD,MAAM,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,MAAM,CAAC,EAAE;IAC1CF,IAAI,sBAAsB,GAAG,IAAI,mBAAmB,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC,cAAa;IACrJ,IAAI,CAAC,QAAQ,GAAG,EAAC;IACjB,IAAI,CAAC,QAAQ,GAAG,EAAC;IACjB,IAAI,CAAC,aAAa,GAAG,EAAC;IACtBA,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAACE,KAAE,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAC;IAC1G,IAAI,eAAe,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,KAAK,CAAC,EAAE;MACvE,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,KAAK,EAAC;MACtD,IAAI,CAAC,8BAA8B,GAAE;MACrC,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;QACxB,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,2DAA2D,EAAC,EAAA;MAC7F,IAAI,CAAC,QAAQ,GAAG,YAAW;MAC3B,IAAI,CAAC,QAAQ,GAAG,YAAW;MAC3B,IAAI,CAAC,aAAa,GAAG,iBAAgB;MACrC,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC;KACvF;IACD,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,IAAI,EAAC;IACxD,IAAI,CAAC,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,SAAQ;IAC5C,IAAI,CAAC,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,SAAQ;IAC5C,IAAI,CAAC,aAAa,GAAG,gBAAgB,IAAI,IAAI,CAAC,cAAa;IAC3DF,IAAIO,MAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAC;IAC/CA,MAAI,CAAC,MAAM,GAAG,KAAI;IAClBA,MAAI,CAAC,SAAS,GAAG,SAAQ;IACzB,IAAI,GAAG,IAAI,CAAC,UAAU,CAACA,MAAI,EAAE,gBAAgB,EAAC;GAC/C,MAAM,IAAI,IAAI,CAAC,IAAI,KAAKL,KAAE,CAAC,SAAS,EAAE;IACrCF,IAAIO,MAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAC;IAC/CA,MAAI,CAAC,GAAG,GAAG,KAAI;IACfA,MAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAC;IACjD,IAAI,GAAG,IAAI,CAAC,UAAU,CAACA,MAAI,EAAE,0BAA0B,EAAC;GACzD;EACD,OAAO,IAAI;EACZ;;;;;;;AAODH,IAAE,CAAC,aAAa,GAAG,SAAS,sBAAsB,EAAE;;;EAGlD,IAAI,IAAI,CAAC,IAAI,KAAKF,KAAE,CAAC,KAAK,EAAE,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;;EAE7CF,IAAI,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,MAAK;EAC3D,QAAQ,IAAI,CAAC,IAAI;EACjB,KAAKE,KAAE,CAAC,MAAM;IACZ,IAAI,CAAC,IAAI,CAAC,UAAU;MAClB,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,kCAAkC,EAAC,EAAA;IAC5D,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;IACvB,IAAI,CAAC,IAAI,GAAE;IACX,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB;MACnD,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,gDAAgD,EAAC,EAAA;;;;;;;IAO1E,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,MAAM;MAC9E,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;IACnB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;;EAEvC,KAAKA,KAAE,CAAC,KAAK;IACX,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;IACvB,IAAI,CAAC,IAAI,GAAE;IACX,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC;;EAEhD,KAAKA,KAAE,CAAC,IAAI;IACVF,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,YAAW;IACnFA,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAC;IAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,GAAG,CAACE,KAAE,CAAC,SAAS,CAAC;MAC9H,EAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAA;IACjF,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;MAC5C,IAAI,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,KAAK,CAAC;QACpB,EAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAA;MACrF,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;QACjG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAC;QAC3B,IAAI,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,KAAK,CAAC;UAClD,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;QACnB,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;OACnF;KACF;IACD,OAAO,EAAE;;EAEX,KAAKA,KAAE,CAAC,MAAM;IACZF,IAAI,KAAK,GAAG,IAAI,CAAC,MAAK;IACtB,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAC;IACrC,IAAI,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAC;IACzD,OAAO,IAAI;;EAEb,KAAKE,KAAE,CAAC,GAAG,CAAC,CAAC,KAAKA,KAAE,CAAC,MAAM;IACzB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;EAEtC,KAAKA,KAAE,CAAC,KAAK,CAAC,CAAC,KAAKA,KAAE,CAAC,KAAK,CAAC,CAAC,KAAKA,KAAE,CAAC,MAAM;IAC1C,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;IACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,MAAK;IACnE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAO;IAC5B,IAAI,CAAC,IAAI,GAAE;IACX,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;;EAEzC,KAAKA,KAAE,CAAC,MAAM;IACZF,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,kCAAkC,CAAC,UAAU,EAAC;IAClF,IAAI,sBAAsB,EAAE;MAC1B,IAAI,sBAAsB,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;QACpF,EAAA,sBAAsB,CAAC,mBAAmB,GAAG,MAAK,EAAA;MACpD,IAAI,sBAAsB,CAAC,iBAAiB,GAAG,CAAC;QAC9C,EAAA,sBAAsB,CAAC,iBAAiB,GAAG,MAAK,EAAA;KACnD;IACD,OAAO,IAAI;;EAEb,KAAKE,KAAE,CAAC,QAAQ;IACd,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;IACvB,IAAI,CAAC,IAAI,GAAE;IACX,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAACA,KAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,sBAAsB,EAAC;IACnF,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC;;EAEjD,KAAKA,KAAE,CAAC,MAAM;IACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;;EAErD,KAAKA,KAAE,CAAC,SAAS;IACf,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;IACvB,IAAI,CAAC,IAAI,GAAE;IACX,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;;EAEpC,KAAKA,KAAE,CAAC,MAAM;IACZ,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC;;EAEjD,KAAKA,KAAE,CAAC,IAAI;IACV,OAAO,IAAI,CAAC,QAAQ,EAAE;;EAExB,KAAKA,KAAE,CAAC,SAAS;IACf,OAAO,IAAI,CAAC,aAAa,EAAE;;EAE7B;IACE,IAAI,CAAC,UAAU,GAAE;GAClB;EACF;;AAEDE,IAAE,CAAC,YAAY,GAAG,SAAS,KAAK,EAAE;EAChCJ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;EAC3B,IAAI,CAAC,KAAK,GAAG,MAAK;EAClB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAC;EACjD,IAAI,CAAC,IAAI,GAAE;EACX,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;EACxC;;AAEDI,IAAE,CAAC,oBAAoB,GAAG,WAAW;EACnC,IAAI,CAAC,MAAM,CAACF,KAAE,CAAC,MAAM,EAAC;EACtBF,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,GAAE;EAChC,IAAI,CAAC,MAAM,CAACE,KAAE,CAAC,MAAM,EAAC;EACtB,OAAO,GAAG;EACX;;AAEDE,IAAE,CAAC,kCAAkC,GAAG,SAAS,UAAU,EAAE;;;EAC3DJ,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAC;EAC5G,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;IACjC,IAAI,CAAC,IAAI,GAAE;;IAEXA,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC,SAAQ;IAC7DA,IAAI,QAAQ,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,WAAW,GAAG,MAAK;IACpDA,IAAI,sBAAsB,GAAG,IAAI,mBAAmB,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAW;IAC3H,IAAI,CAAC,QAAQ,GAAG,EAAC;IACjB,IAAI,CAAC,QAAQ,GAAG,EAAC;;IAEjB,OAAO,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,MAAM,EAAE;MAC9B,KAAK,GAAG,KAAK,GAAG,KAAK,GAAGC,MAAI,CAAC,MAAM,CAACD,KAAE,CAAC,KAAK,EAAC;MAC7C,IAAI,kBAAkB,IAAIC,MAAI,CAAC,kBAAkB,CAACD,KAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;QAClE,WAAW,GAAG,KAAI;QAClB,KAAK;OACN,MAAM,IAAIC,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,QAAQ,EAAE;QACpC,WAAW,GAAGC,MAAI,CAAC,MAAK;QACxB,QAAQ,CAAC,IAAI,CAACA,MAAI,CAAC,cAAc,CAACA,MAAI,CAAC,gBAAgB,EAAE,CAAC,EAAC;QAC3D,IAAIA,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,KAAK,EAAE,EAAAC,MAAI,CAAC,KAAK,CAACA,MAAI,CAAC,KAAK,EAAE,+CAA+C,EAAC,EAAA;QACnG,KAAK;OACN,MAAM;QACL,QAAQ,CAAC,IAAI,CAACA,MAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,EAAEA,MAAI,CAAC,cAAc,CAAC,EAAC;OACzF;KACF;IACDH,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC,SAAQ;IACzD,IAAI,CAAC,MAAM,CAACE,KAAE,CAAC,MAAM,EAAC;;IAEtB,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,KAAK,CAAC,EAAE;MAClE,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,KAAK,EAAC;MACtD,IAAI,CAAC,8BAA8B,GAAE;MACrC,IAAI,CAAC,QAAQ,GAAG,YAAW;MAC3B,IAAI,CAAC,QAAQ,GAAG,YAAW;MAC3B,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;KAC9D;;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,WAAW,EAAE,EAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAC,EAAA;IACvE,IAAI,WAAW,EAAE,EAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAC,EAAA;IAC7C,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,IAAI,EAAC;IACxD,IAAI,CAAC,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,SAAQ;IAC5C,IAAI,CAAC,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,SAAQ;;IAE5C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;MACvB,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,aAAa,EAAC;MACpD,GAAG,CAAC,WAAW,GAAG,SAAQ;MAC1B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAC;KACvE,MAAM;MACL,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAC;KAClB;GACF,MAAM;IACL,GAAG,GAAG,IAAI,CAAC,oBAAoB,GAAE;GAClC;;EAED,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;IAC/BF,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAC;IAC9C,GAAG,CAAC,UAAU,GAAG,IAAG;IACpB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,yBAAyB,CAAC;GACvD,MAAM;IACL,OAAO,GAAG;GACX;EACF;;AAEDI,IAAE,CAAC,cAAc,GAAG,SAAS,IAAI,EAAE;EACjC,OAAO,IAAI;EACZ;;AAEDA,IAAE,CAAC,mBAAmB,GAAG,SAAS,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE;EAC9D,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;EACjF;;;;;;;;AAQDL,IAAMS,OAAK,GAAG,GAAE;;AAEhBJ,IAAE,CAAC,QAAQ,GAAG,WAAW;EACvBJ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;EAC3BA,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAC;EAChC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAACE,KAAE,CAAC,GAAG,CAAC,EAAE;IACrD,IAAI,CAAC,IAAI,GAAG,KAAI;IAChBF,IAAI,WAAW,GAAG,IAAI,CAAC,YAAW;IAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAC;IACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW;MAChD,EAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,oDAAoD,EAAC,EAAA;IAClG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;MAC5B,EAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,0CAA0C,EAAC,EAAA;IAC/E,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC;GAC7C;EACDA,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,SAAQ;EACnD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAC;EAClF,IAAI,IAAI,CAAC,GAAG,CAACE,KAAE,CAAC,MAAM,CAAC,EAAE,EAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAACA,KAAE,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,KAAK,EAAC,EAAA;OACxG,EAAA,IAAI,CAAC,SAAS,GAAGM,QAAK,EAAA;EAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC;EAC9C;;;;AAIDJ,IAAE,CAAC,oBAAoB,GAAG,SAAS,GAAA,EAAY;MAAX,QAAQ;;EAC1CJ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;EAC3B,IAAI,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,eAAe,EAAE;IACpC,IAAI,CAAC,QAAQ,EAAE;MACb,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,kDAAkD,EAAC;KACtF;IACD,IAAI,CAAC,KAAK,GAAG;MACX,GAAG,EAAE,IAAI,CAAC,KAAK;MACf,MAAM,EAAE,IAAI;MACb;GACF,MAAM;IACL,IAAI,CAAC,KAAK,GAAG;MACX,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;MACnE,MAAM,EAAE,IAAI,CAAC,KAAK;MACnB;GACF;EACD,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,UAAS;EACtC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC;EAChD;;AAEDE,IAAE,CAAC,aAAa,GAAG,SAAS,GAAA,EAAyB;oBAAP;2BAAA,GAAG,EAAE,CAAX;qEAAA,KAAK;;EAC3CJ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;EAC3B,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,CAAC,WAAW,GAAG,GAAE;EACrBA,IAAI,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,UAAA,QAAQ,CAAC,EAAC;EAClD,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,EAAC;EACtB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;IACnB,IAAIG,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,GAAG,EAAE,EAAAC,MAAI,CAAC,KAAK,CAACA,MAAI,CAAC,GAAG,EAAE,+BAA+B,EAAC,EAAA;IAC/EA,MAAI,CAAC,MAAM,CAACD,KAAE,CAAC,YAAY,EAAC;IAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAACC,MAAI,CAAC,eAAe,EAAE,EAAC;IAC7CA,MAAI,CAAC,MAAM,CAACD,KAAE,CAAC,MAAM,EAAC;IACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAGC,MAAI,CAAC,oBAAoB,CAAC,CAAC,UAAA,QAAQ,CAAC,CAAC,EAAC;GACjE;EACD,IAAI,CAAC,IAAI,GAAE;EACX,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC;EAChD;;AAEDC,IAAE,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE;EAC9B,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO;KACjF,IAAI,CAAC,IAAI,KAAKF,KAAE,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,IAAI,CAAC,CAAC;IACxL,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;EACjE;;;;AAIDE,IAAE,CAAC,QAAQ,GAAG,SAAS,SAAS,EAAE,sBAAsB,EAAE;;;EACxDJ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,QAAQ,GAAG,GAAE;EACxD,IAAI,CAAC,UAAU,GAAG,GAAE;EACpB,IAAI,CAAC,IAAI,GAAE;EACX,OAAO,CAAC,IAAI,CAAC,GAAG,CAACE,KAAE,CAAC,MAAM,CAAC,EAAE;IAC3B,IAAI,CAAC,KAAK,EAAE;MACVC,MAAI,CAAC,MAAM,CAACD,KAAE,CAAC,KAAK,EAAC;MACrB,IAAIC,MAAI,CAAC,kBAAkB,CAACD,KAAE,CAAC,MAAM,CAAC,EAAE,EAAA,KAAK,EAAA;KAC9C,MAAM,EAAA,KAAK,GAAG,MAAK,EAAA;;IAEpBH,IAAM,IAAI,GAAGI,MAAI,CAAC,aAAa,CAAC,SAAS,EAAE,sBAAsB,EAAC;IAClE,IAAI,CAAC,SAAS,EAAE,EAAAA,MAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,sBAAsB,EAAC,EAAA;IAC3E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAC;GAC3B;EACD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,eAAe,GAAG,kBAAkB,CAAC;EAC/E;;AAEDC,IAAE,CAAC,aAAa,GAAG,SAAS,SAAS,EAAE,sBAAsB,EAAE;EAC7DJ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAQ;EACrE,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAACE,KAAE,CAAC,QAAQ,CAAC,EAAE;IAC1D,IAAI,SAAS,EAAE;MACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAC;MACtC,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,KAAK,EAAE;QAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,+CAA+C,EAAC;OACxE;MACD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC;KAC5C;;IAED,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,MAAM,IAAI,sBAAsB,EAAE;MACrD,IAAI,sBAAsB,CAAC,mBAAmB,GAAG,CAAC,EAAE;QAClD,sBAAsB,CAAC,mBAAmB,GAAG,IAAI,CAAC,MAAK;OACxD;MACD,IAAI,sBAAsB,CAAC,iBAAiB,GAAG,CAAC,EAAE;QAChD,sBAAsB,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAK;OACtD;KACF;;IAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,EAAC;;IAEpE,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,KAAK,IAAI,sBAAsB,IAAI,sBAAsB,CAAC,aAAa,GAAG,CAAC,EAAE;MAChG,sBAAsB,CAAC,aAAa,GAAG,IAAI,CAAC,MAAK;KAClD;;IAED,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC;GAC9C;EACD,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;IACjC,IAAI,CAAC,MAAM,GAAG,MAAK;IACnB,IAAI,CAAC,SAAS,GAAG,MAAK;IACtB,IAAI,SAAS,IAAI,sBAAsB,EAAE;MACvC,QAAQ,GAAG,IAAI,CAAC,MAAK;MACrB,QAAQ,GAAG,IAAI,CAAC,SAAQ;KACzB;IACD,IAAI,CAAC,SAAS;MACZ,EAAA,WAAW,GAAG,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,IAAI,EAAC,EAAA;GAClC;EACDF,IAAI,WAAW,GAAG,IAAI,CAAC,YAAW;EAClC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAC;EAC5B,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;IACzG,OAAO,GAAG,KAAI;IACd,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAACE,KAAE,CAAC,IAAI,EAAC;IAChE,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,sBAAsB,EAAC;GACrD,MAAM;IACL,OAAO,GAAG,MAAK;GAChB;EACD,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,sBAAsB,EAAE,WAAW,EAAC;EACvH,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC;EACzC;;AAEDE,IAAE,CAAC,kBAAkB,GAAG,SAAS,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,sBAAsB,EAAE,WAAW,EAAE;EAC/H,IAAI,CAAC,WAAW,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,KAAKF,KAAE,CAAC,KAAK;IACpD,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;;EAEnB,IAAI,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,KAAK,CAAC,EAAE;IACtB,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,EAAC;IACjI,IAAI,CAAC,IAAI,GAAG,OAAM;GACnB,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,MAAM,EAAE;IACnE,IAAI,SAAS,EAAE,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;IAChC,IAAI,CAAC,IAAI,GAAG,OAAM;IAClB,IAAI,CAAC,MAAM,GAAG,KAAI;IAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,EAAC;GACpD,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW;aAC1B,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY;cAChF,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC;cACnD,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,MAAM,CAAC,EAAE;IAC9D,IAAI,WAAW,IAAI,OAAO,EAAE,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;IAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAI;IACzB,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAC;IAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAC;IACpCF,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,GAAG,EAAC;IAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;MAC3CA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAK;MAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;QACrB,EAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,8BAA8B,EAAC,EAAA;;QAE5D,EAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,sCAAsC,EAAC,EAAA;KACvE,MAAM;MACL,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa;QACpE,EAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,+BAA+B,EAAC,EAAA;KACrF;GACF,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE;IAC5F,IAAI,WAAW,IAAI,OAAO,EAAE,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;IAC7C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAC;IAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa;MAClD,EAAA,IAAI,CAAC,aAAa,GAAG,SAAQ,EAAA;IAC/B,IAAI,CAAC,IAAI,GAAG,OAAM;IAClB,IAAI,SAAS,EAAE;MACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAC;KAClE,MAAM,IAAI,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,EAAE,IAAI,sBAAsB,EAAE;MACxD,IAAI,sBAAsB,CAAC,eAAe,GAAG,CAAC;QAC5C,EAAA,sBAAsB,CAAC,eAAe,GAAG,IAAI,CAAC,MAAK,EAAA;MACrD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAC;KAClE,MAAM;MACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAG;KACtB;IACD,IAAI,CAAC,SAAS,GAAG,KAAI;GACtB,MAAM,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;EACzB;;AAEDE,IAAE,CAAC,iBAAiB,GAAG,SAAS,IAAI,EAAE;EACpC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;IACjC,IAAI,IAAI,CAAC,GAAG,CAACF,KAAE,CAAC,QAAQ,CAAC,EAAE;MACzB,IAAI,CAAC,QAAQ,GAAG,KAAI;MACpB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,GAAE;MAClC,IAAI,CAAC,MAAM,CAACA,KAAE,CAAC,QAAQ,EAAC;MACxB,OAAO,IAAI,CAAC,GAAG;KAChB,MAAM;MACL,IAAI,CAAC,QAAQ,GAAG,MAAK;KACtB;GACF;EACD,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;EACjH;;;;AAIDE,IAAE,CAAC,YAAY,GAAG,SAAS,IAAI,EAAE;EAC/B,IAAI,CAAC,EAAE,GAAG,KAAI;EACd,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,EAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,MAAK,EAAA;EAC3E,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,EAAA,IAAI,CAAC,KAAK,GAAG,MAAK,EAAA;EACtD;;;;AAIDA,IAAE,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE;EAChEJ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC,cAAa;;EAE5H,IAAI,CAAC,YAAY,CAAC,IAAI,EAAC;EACvB,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC;IAC/B,EAAA,IAAI,CAAC,SAAS,GAAG,YAAW,EAAA;EAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC;IAC/B,EAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,QAAO,EAAA;;EAExB,IAAI,CAAC,QAAQ,GAAG,EAAC;EACjB,IAAI,CAAC,QAAQ,GAAG,EAAC;EACjB,IAAI,CAAC,aAAa,GAAG,EAAC;EACtB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,IAAI,gBAAgB,GAAG,kBAAkB,GAAG,CAAC,CAAC,EAAC;;EAEnH,IAAI,CAAC,MAAM,CAACE,KAAE,CAAC,MAAM,EAAC;EACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAACA,KAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAC;EACpF,IAAI,CAAC,8BAA8B,GAAE;EACrC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC;;EAEzC,IAAI,CAAC,QAAQ,GAAG,YAAW;EAC3B,IAAI,CAAC,QAAQ,GAAG,YAAW;EAC3B,IAAI,CAAC,aAAa,GAAG,iBAAgB;EACrC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,oBAAoB,CAAC;EACnD;;;;AAIDE,IAAE,CAAC,oBAAoB,GAAG,SAAS,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;EACxDJ,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC,cAAa;;EAEnG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,WAAW,EAAC;EAC5D,IAAI,CAAC,YAAY,CAAC,IAAI,EAAC;EACvB,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,EAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,QAAO,EAAA;;EAEzD,IAAI,CAAC,QAAQ,GAAG,EAAC;EACjB,IAAI,CAAC,QAAQ,GAAG,EAAC;EACjB,IAAI,CAAC,aAAa,GAAG,EAAC;;EAEtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAC;EACjD,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC;;EAEzC,IAAI,CAAC,QAAQ,GAAG,YAAW;EAC3B,IAAI,CAAC,QAAQ,GAAG,YAAW;EAC3B,IAAI,CAAC,aAAa,GAAG,iBAAgB;EACrC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,yBAAyB,CAAC;EACxD;;;;AAIDI,IAAE,CAAC,iBAAiB,GAAG,SAAS,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE;EAC/DJ,IAAI,YAAY,GAAG,eAAe,IAAI,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,OAAM;EAC7DF,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,MAAK;;EAE9C,IAAI,YAAY,EAAE;IAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,GAAE;IACnC,IAAI,CAAC,UAAU,GAAG,KAAI;IACtB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAC;GAC9B,MAAM;IACLA,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAC;IACrF,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;MAC3B,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAC;;;;MAI1C,IAAI,SAAS,IAAI,SAAS;QACxB,EAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,2EAA2E,EAAC,EAAA;KACjH;;;IAGDA,IAAI,SAAS,GAAG,IAAI,CAAC,OAAM;IAC3B,IAAI,CAAC,MAAM,GAAG,GAAE;IAChB,IAAI,SAAS,EAAE,EAAA,IAAI,CAAC,MAAM,GAAG,KAAI,EAAA;;;;IAIjC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,SAAS,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAC;IACxH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAC;IAClC,IAAI,CAAC,UAAU,GAAG,MAAK;IACvB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC;IAC3C,IAAI,CAAC,MAAM,GAAG,UAAS;GACxB;EACD,IAAI,CAAC,SAAS,GAAE;;;EAGhB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,EAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAC,EAAA;EACjE,IAAI,CAAC,MAAM,GAAG,UAAS;EACxB;;AAEDI,IAAE,CAAC,iBAAiB,GAAG,SAAS,MAAM,EAAE;EACtC,KAAc,kBAAI,MAAM,yBAAA;IAAnB;IAAAJ,IAAI,KAAK;;IACZ,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,EAAA,OAAO,KAAK;GAAA,EAAA;EAC/C,OAAO,IAAI;EACZ;;;;;AAKDI,IAAE,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE,eAAe,EAAE;;;EAC/CJ,IAAI,QAAQ,GAAG,GAAE;EACjB,KAAc,kBAAI,IAAI,CAAC,MAAM,yBAAA;IAAxB;IAAAA,IAAI,KAAK;;IACZG,MAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,QAAQ,EAAC;GAAA;EACrE;;;;;;;;AAQDC,IAAE,CAAC,aAAa,GAAG,SAAS,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,sBAAsB,EAAE;;;EACzFJ,IAAI,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,KAAI;EAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;IACvB,IAAI,CAAC,KAAK,EAAE;MACVG,MAAI,CAAC,MAAM,CAACD,KAAE,CAAC,KAAK,EAAC;MACrB,IAAI,kBAAkB,IAAIC,MAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAA,KAAK,EAAA;KAChE,MAAM,EAAA,KAAK,GAAG,MAAK,EAAA;;IAEpBH,IAAI,GAAG,YAAA;IACP,IAAI,UAAU,IAAIG,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,KAAK;MACtC,EAAA,GAAG,GAAG,KAAI,EAAA;SACP,IAAIC,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,QAAQ,EAAE;MAClC,GAAG,GAAGC,MAAI,CAAC,WAAW,CAAC,sBAAsB,EAAC;MAC9C,IAAI,sBAAsB,IAAIA,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,KAAK,IAAI,sBAAsB,CAAC,aAAa,GAAG,CAAC;QAC9F,EAAA,sBAAsB,CAAC,aAAa,GAAGC,MAAI,CAAC,MAAK,EAAA;KACpD,MAAM;MACL,GAAG,GAAGA,MAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,EAAC;KAC3D;IACD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAC;GACf;EACD,OAAO,IAAI;EACZ;;AAEDC,IAAE,CAAC,eAAe,GAAG,SAAS,GAAA,EAAoB;MAAnB,KAAK,aAAE;MAAA,GAAG,WAAE;MAAA,IAAI;;EAC7C,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,KAAK,OAAO;IACtC,EAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,qDAAqD,EAAC,EAAA;EACrF,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,OAAO;IAClC,EAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,2DAA2D,EAAC,EAAA;EAC3F,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1B,EAAA,IAAI,CAAC,KAAK,CAAC,KAAK,GAAE,sBAAqB,GAAE,IAAI,MAAE,GAAE,EAAA;EACnD,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC;IAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAA,MAAM,EAAA;EAC3DL,IAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAa;EACtE,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;IACjB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,OAAO;MACnC,EAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,sDAAsD,EAAC,EAAA;IACtF,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAE,eAAc,GAAE,IAAI,kBAAc,GAAE;GAClE;EACF;;;;;;AAMDK,IAAE,CAAC,UAAU,GAAG,SAAS,OAAO,EAAE,SAAS,EAAE;EAC3CJ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;EAC3B,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,OAAO,EAAE,EAAA,OAAO,GAAG,MAAK,EAAA;EACtE,IAAI,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,IAAI,EAAE;IACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAK;GACvB,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;IAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAO;;;;;;IAM7B,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;SACjD,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE;MAClG,IAAI,CAAC,OAAO,CAAC,GAAG,GAAE;KACnB;GACF,MAAM;IACL,IAAI,CAAC,UAAU,GAAE;GAClB;EACD,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,EAAC;EACnC,IAAI,CAAC,OAAO,EAAE;IACZ,IAAI,CAAC,eAAe,CAAC,IAAI,EAAC;IAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa;MAC9C,EAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAK,EAAA;GAClC;EACD,OAAO,IAAI;EACZ;;;;AAIDE,IAAE,CAAC,UAAU,GAAG,SAAS,IAAI,EAAE;EAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAK,EAAA;;EAE9CJ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;EAC3B,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,IAAI,CAAC,IAAI,KAAKE,KAAE,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI,CAAC,IAAI,KAAKA,KAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;IAC1G,IAAI,CAAC,QAAQ,GAAG,MAAK;IACrB,IAAI,CAAC,QAAQ,GAAG,KAAI;GACrB,MAAM;IACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAACA,KAAE,CAAC,IAAI,EAAC;IACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAC;GAC5C;EACD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC;EAChD;;AAEDE,IAAE,CAAC,UAAU,GAAG,WAAW;EACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAK,EAAA;;EAE9CJ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;EAC3B,IAAI,CAAC,IAAI,GAAE;EACX,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAC;EAChD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC;CAChD;;AC15BDD,IAAMK,IAAE,GAAG,MAAM,CAAC,UAAS;;;;;;;;AAQ3BA,IAAE,CAAC,KAAK,GAAG,SAAS,GAAG,EAAE,OAAO,EAAE;EAChCJ,IAAI,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAC;EACtC,OAAO,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,IAAG;EACnDA,IAAI,GAAG,GAAG,IAAI,WAAW,CAAC,OAAO,EAAC;EAClC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAG;EACrD,MAAM,GAAG;EACV;;AAEDI,IAAE,CAAC,gBAAgB,GAAGA,IAAE,CAAC,MAAK;;AAE9BA,IAAE,CAAC,WAAW,GAAG,WAAW;EAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;IAC1B,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;GAC7D;CACF;;ACtBDL,IAAMK,IAAE,GAAG,MAAM,CAAC,UAAS;;AAE3B,IAAM,KAAK,GAAC,cACC,CAAC,KAAK,EAAE;EACnB,IAAM,CAAC,KAAK,GAAG,MAAK;;EAEpB,IAAM,CAAC,GAAG,GAAG,GAAE;;EAEf,IAAM,CAAC,OAAO,GAAG,GAAE;;EAEnB,IAAM,CAAC,SAAS,GAAG,GAAE;CACpB,CAAA;;;;AAKHA,IAAE,CAAC,UAAU,GAAG,SAAS,KAAK,EAAE;EAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAC;EACvC;;AAEDA,IAAE,CAAC,SAAS,GAAG,WAAW;EACxB,IAAI,CAAC,UAAU,CAAC,GAAG,GAAE;EACtB;;;;;AAKDA,IAAE,CAAC,0BAA0B,GAAG,SAAS,KAAK,EAAE;EAC9C,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;EACrF;;AAEDA,IAAE,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;;;EAChDJ,IAAI,UAAU,GAAG,MAAK;EACtB,IAAI,WAAW,KAAK,YAAY,EAAE;IAChCD,IAAM,KAAK,GAAG,IAAI,CAAC,YAAY,GAAE;IACjC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAC;IACnH,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAC;IACxB,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;MAC5C,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAC,EAAA;GACrC,MAAM,IAAI,WAAW,KAAK,iBAAiB,EAAE;IAC5CA,IAAMU,OAAK,GAAG,IAAI,CAAC,YAAY,GAAE;IACjCA,OAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAC;GACzB,MAAM,IAAI,WAAW,KAAK,aAAa,EAAE;IACxCV,IAAMU,OAAK,GAAG,IAAI,CAAC,YAAY,GAAE;IACjC,IAAI,IAAI,CAAC,mBAAmB;MAC1B,EAAA,UAAU,GAAGA,OAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAC,EAAA;;MAE7C,EAAA,UAAU,GAAGA,OAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAIA,OAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAC,EAAA;IAC/EA,OAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAC;GAC3B,MAAM;IACL,KAAKT,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;MACpDD,IAAMU,OAAK,GAAGN,MAAI,CAAC,UAAU,CAAC,CAAC,EAAC;MAChC,IAAIM,OAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAACA,OAAK,CAAC,KAAK,GAAG,kBAAkB,KAAKA,OAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;UACtG,CAACN,MAAI,CAAC,0BAA0B,CAACM,OAAK,CAAC,IAAIA,OAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;QACjF,UAAU,GAAG,KAAI;QACjB,KAAK;OACN;MACDA,OAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAC;MACpB,IAAIN,MAAI,CAAC,QAAQ,KAAKM,OAAK,CAAC,KAAK,GAAG,SAAS,CAAC;QAC5C,EAAA,OAAON,MAAI,CAAC,gBAAgB,CAAC,IAAI,EAAC,EAAA;MACpC,IAAIM,OAAK,CAAC,KAAK,GAAG,SAAS,EAAE,EAAA,KAAK,EAAA;KACnC;GACF;EACD,IAAI,UAAU,EAAE,EAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,GAAE,cAAa,GAAE,IAAI,gCAA4B,GAAE,EAAA;EAC7F;;AAEDL,IAAE,CAAC,gBAAgB,GAAG,SAAS,EAAE,EAAE;;EAEjC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;MAClD,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;IAClD,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAE;GACpC;EACF;;AAEDA,IAAE,CAAC,YAAY,GAAG,WAAW;EAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;EACnD;;AAEDA,IAAE,CAAC,eAAe,GAAG,WAAW;;;EAC9B,KAAKJ,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE;IAC7CA,IAAI,KAAK,GAAGG,MAAI,CAAC,UAAU,CAAC,CAAC,EAAC;IAC9B,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS,EAAE,EAAA,OAAO,KAAK,EAAA;GAC1C;EACF;;;AAGDC,IAAE,CAAC,gBAAgB,GAAG,WAAW;;;EAC/B,KAAKJ,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE;IAC7CA,IAAI,KAAK,GAAGG,MAAI,CAAC,UAAU,CAAC,CAAC,EAAC;IAC9B,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,EAAE,EAAA,OAAO,KAAK,EAAA;GAC1E;CACF;;AC3FM,IAAM,IAAI,GAAC,aACL,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;EAC9B,IAAM,CAAC,IAAI,GAAG,GAAE;EAChB,IAAM,CAAC,KAAK,GAAG,IAAG;EAClB,IAAM,CAAC,GAAG,GAAG,EAAC;EACd,IAAM,MAAM,CAAC,OAAO,CAAC,SAAS;IAC5B,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,GAAG,EAAC,EAAA;EAC9C,IAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB;IACnC,EAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAgB,EAAA;EACrD,IAAM,MAAM,CAAC,OAAO,CAAC,MAAM;IACzB,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,EAAC,EAAA;CACxB,CAAA;;;;AAKHJ,IAAMK,IAAE,GAAG,MAAM,CAAC,UAAS;;AAE3BA,IAAE,CAAC,SAAS,GAAG,WAAW;EACxB,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;EACjD;;AAEDA,IAAE,CAAC,WAAW,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE;EAClC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;EAChC;;;;AAID,SAAS,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;EAC1C,IAAI,CAAC,IAAI,GAAG,KAAI;EAChB,IAAI,CAAC,GAAG,GAAG,IAAG;EACd,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS;IACxB,EAAA,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,IAAG,EAAA;EACpB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;IACrB,EAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAG,EAAA;EACrB,OAAO,IAAI;CACZ;;AAEDA,IAAE,CAAC,UAAU,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;EACnC,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC;EAChF;;;;AAIDA,IAAE,CAAC,YAAY,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;EAC/C,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;CACrD;;ACjDD;;;;AAIA,AAIO,IAAM,UAAU,GAAC,mBACX,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE;EAC/D,IAAM,CAAC,KAAK,GAAG,MAAK;EACpB,IAAM,CAAC,MAAM,GAAG,CAAC,CAAC,OAAM;EACxB,IAAM,CAAC,aAAa,GAAG,CAAC,CAAC,cAAa;EACtC,IAAM,CAAC,QAAQ,GAAG,SAAQ;EAC1B,IAAM,CAAC,SAAS,GAAG,CAAC,CAAC,UAAS;CAC7B,CAAA;;AAGH,AAAOL,IAAMW,OAAK,GAAG;EACnB,MAAM,EAAE,IAAI,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;EAClC,MAAM,EAAE,IAAI,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;EACjC,MAAM,EAAE,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;EACnC,MAAM,EAAE,IAAI,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;EAClC,MAAM,EAAE,IAAI,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;EACjC,MAAM,EAAE,IAAI,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,UAAA,CAAC,EAAC,SAAG,CAAC,CAAC,oBAAoB,EAAE,GAAA,CAAC;EACtE,MAAM,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC;EACzC,MAAM,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC;EACxC,UAAU,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;EAC/D,KAAK,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;EAC5D;;AAEDX,IAAMK,IAAE,GAAG,MAAM,CAAC,UAAS;;AAE3BA,IAAE,CAAC,cAAc,GAAG,WAAW;EAC7B,OAAO,CAACM,OAAK,CAAC,MAAM,CAAC;EACtB;;AAEDN,IAAE,CAAC,YAAY,GAAG,SAAS,QAAQ,EAAE;EACnCJ,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,GAAE;EAC9B,IAAI,MAAM,KAAKU,OAAK,CAAC,MAAM,IAAI,MAAM,KAAKA,OAAK,CAAC,MAAM;IACpD,EAAA,OAAO,IAAI,EAAA;EACb,IAAI,QAAQ,KAAKR,KAAE,CAAC,KAAK,KAAK,MAAM,KAAKQ,OAAK,CAAC,MAAM,IAAI,MAAM,KAAKA,OAAK,CAAC,MAAM,CAAC;IAC/E,EAAA,OAAO,CAAC,MAAM,CAAC,MAAM,EAAA;;;;;EAKvB,IAAI,QAAQ,KAAKR,KAAE,CAAC,OAAO,IAAI,QAAQ,KAAKA,KAAE,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;IACrE,EAAA,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAA;EACtE,IAAI,QAAQ,KAAKA,KAAE,CAAC,KAAK,IAAI,QAAQ,KAAKA,KAAE,CAAC,IAAI,IAAI,QAAQ,KAAKA,KAAE,CAAC,GAAG,IAAI,QAAQ,KAAKA,KAAE,CAAC,MAAM,IAAI,QAAQ,KAAKA,KAAE,CAAC,KAAK;IACzH,EAAA,OAAO,IAAI,EAAA;EACb,IAAI,QAAQ,KAAKA,KAAE,CAAC,MAAM;IACxB,EAAA,OAAO,MAAM,KAAKQ,OAAK,CAAC,MAAM,EAAA;EAChC,IAAI,QAAQ,KAAKR,KAAE,CAAC,IAAI,IAAI,QAAQ,KAAKA,KAAE,CAAC,MAAM,IAAI,QAAQ,KAAKA,KAAE,CAAC,IAAI;IACxE,EAAA,OAAO,KAAK,EAAA;EACd,OAAO,CAAC,IAAI,CAAC,WAAW;EACzB;;AAEDE,IAAE,CAAC,kBAAkB,GAAG,WAAW;;;EACjC,KAAKJ,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;IACjDA,IAAI,OAAO,GAAGG,MAAI,CAAC,OAAO,CAAC,CAAC,EAAC;IAC7B,IAAI,OAAO,CAAC,KAAK,KAAK,UAAU;MAC9B,EAAA,OAAO,OAAO,CAAC,SAAS,EAAA;GAC3B;EACD,OAAO,KAAK;EACb;;AAEDC,IAAE,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;EACpCJ,IAAI,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC,KAAI;EAC5B,IAAI,IAAI,CAAC,OAAO,IAAI,QAAQ,KAAKE,KAAE,CAAC,GAAG;IACrC,EAAA,IAAI,CAAC,WAAW,GAAG,MAAK,EAAA;OACrB,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa;IAClC,EAAA,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAC,EAAA;;IAE3B,EAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAU,EAAA;EACrC;;;;AAIDA,KAAE,CAAC,MAAM,CAAC,aAAa,GAAGA,KAAE,CAAC,MAAM,CAAC,aAAa,GAAG,WAAW;EAC7D,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;IAC7B,IAAI,CAAC,WAAW,GAAG,KAAI;IACvB,MAAM;GACP;EACDF,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,GAAE;EAC5B,IAAI,GAAG,KAAKU,OAAK,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,KAAK,UAAU,EAAE;IAClE,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,GAAE;GACzB;EACD,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,OAAM;EAC/B;;AAEDR,KAAE,CAAC,MAAM,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;EAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAGQ,OAAK,CAAC,MAAM,GAAGA,OAAK,CAAC,MAAM,EAAC;EAC5E,IAAI,CAAC,WAAW,GAAG,KAAI;EACxB;;AAEDR,KAAE,CAAC,YAAY,CAAC,aAAa,GAAG,WAAW;EACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAACQ,OAAK,CAAC,MAAM,EAAC;EAC/B,IAAI,CAAC,WAAW,GAAG,KAAI;EACxB;;AAEDR,KAAE,CAAC,MAAM,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;EAC3CF,IAAI,eAAe,GAAG,QAAQ,KAAKE,KAAE,CAAC,GAAG,IAAI,QAAQ,KAAKA,KAAE,CAAC,IAAI,IAAI,QAAQ,KAAKA,KAAE,CAAC,KAAK,IAAI,QAAQ,KAAKA,KAAE,CAAC,OAAM;EACpH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,GAAGQ,OAAK,CAAC,MAAM,GAAGA,OAAK,CAAC,MAAM,EAAC;EAChE,IAAI,CAAC,WAAW,GAAG,KAAI;EACxB;;AAEDR,KAAE,CAAC,MAAM,CAAC,aAAa,GAAG,WAAW;;EAEpC;;AAEDA,KAAE,CAAC,SAAS,CAAC,aAAa,GAAGA,KAAE,CAAC,MAAM,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;EACxE,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,KAAKA,KAAE,CAAC,IAAI,IAAI,QAAQ,KAAKA,KAAE,CAAC,KAAK;MACpE,EAAE,QAAQ,KAAKA,KAAE,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;MAC3F,EAAE,CAAC,QAAQ,KAAKA,KAAE,CAAC,KAAK,IAAI,QAAQ,KAAKA,KAAE,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,KAAKQ,OAAK,CAAC,MAAM,CAAC;IAC5F,EAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAACA,OAAK,CAAC,MAAM,EAAC,EAAA;;IAE/B,EAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAACA,OAAK,CAAC,MAAM,EAAC,EAAA;EACjC,IAAI,CAAC,WAAW,GAAG,MAAK;EACzB;;AAEDR,KAAE,CAAC,SAAS,CAAC,aAAa,GAAG,WAAW;EACtC,IAAI,IAAI,CAAC,UAAU,EAAE,KAAKQ,OAAK,CAAC,MAAM;IACpC,EAAA,IAAI,CAAC,OAAO,CAAC,GAAG,GAAE,EAAA;;IAElB,EAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAACA,OAAK,CAAC,MAAM,EAAC,EAAA;EACjC,IAAI,CAAC,WAAW,GAAG,MAAK;EACzB;;AAEDR,KAAE,CAAC,IAAI,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;EACzC,IAAI,QAAQ,KAAKA,KAAE,CAAC,SAAS,EAAE;IAC7BF,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,EAAC;IACnC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAKU,OAAK,CAAC,MAAM;MACtC,EAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAGA,OAAK,CAAC,WAAU,EAAA;;MAEtC,EAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAGA,OAAK,CAAC,MAAK,EAAA;GACpC;EACD,IAAI,CAAC,WAAW,GAAG,KAAI;EACxB;;AAEDR,KAAE,CAAC,IAAI,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;EACzCF,IAAI,OAAO,GAAG,MAAK;EACnB,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,QAAQ,KAAKE,KAAE,CAAC,GAAG,EAAE;IACxD,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW;QACxC,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,kBAAkB,EAAE;MACrD,EAAA,OAAO,GAAG,KAAI,EAAA;GACjB;EACD,IAAI,CAAC,WAAW,GAAG,QAAO;CAC3B;;;;;;;AC7IDH,IAAM,qBAAqB,GAAG,89BAA69B;AAC3/BA,IAAM,uBAAuB,GAAG;EAC9B,CAAC,EAAE,qBAAqB;EACxB,EAAE,EAAE,qBAAqB,GAAG,wBAAwB;EACrD;;;AAGDA,IAAM,4BAA4B,GAAG,qpBAAopB;;;AAGzrBA,IAAM,iBAAiB,GAAG,2+DAA0+D;AACpgEA,IAAM,mBAAmB,GAAG;EAC1B,CAAC,EAAE,iBAAiB;EACpB,EAAE,EAAE,iBAAiB,GAAG,iHAAiH;EAC1I;;AAEDA,IAAM,IAAI,GAAG,GAAE;AACf,SAAS,gBAAgB,CAAC,WAAW,EAAE;EACrCC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG;IAC1B,MAAM,EAAE,WAAW,CAAC,uBAAuB,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,4BAA4B,CAAC;IAC9F,SAAS,EAAE;MACT,gBAAgB,EAAE,WAAW,CAAC,4BAA4B,CAAC;MAC3D,MAAM,EAAE,WAAW,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;KACtD;IACF;EACD,CAAC,CAAC,SAAS,CAAC,iBAAiB,GAAG,CAAC,CAAC,SAAS,CAAC,OAAM;;EAElD,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,iBAAgB;EAC7C,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAM;EACnC,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,kBAAiB;CAChD;AACD,gBAAgB,CAAC,CAAC,EAAC;AACnB,gBAAgB,CAAC,EAAE,CAAC;;AClCpBD,IAAMK,IAAE,GAAG,MAAM,CAAC,UAAS;;AAE3B,AAAO,IAAM,qBAAqB,GAAC,8BACtB,CAAC,MAAM,EAAE;EACpB,IAAM,CAAC,MAAM,GAAG,OAAM;EACtB,IAAM,CAAC,UAAU,GAAG,KAAI,IAAE,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,CAAA,IAAG,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,EAAA;EAClH,IAAM,CAAC,iBAAiB,GAAGO,IAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAC;EACtH,IAAM,CAAC,MAAM,GAAG,GAAE;EAClB,IAAM,CAAC,KAAK,GAAG,GAAE;EACjB,IAAM,CAAC,KAAK,GAAG,EAAC;EAChB,IAAM,CAAC,OAAO,GAAG,MAAK;EACtB,IAAM,CAAC,OAAO,GAAG,MAAK;EACtB,IAAM,CAAC,GAAG,GAAG,EAAC;EACd,IAAM,CAAC,YAAY,GAAG,EAAC;EACvB,IAAM,CAAC,eAAe,GAAG,GAAE;EAC3B,IAAM,CAAC,2BAA2B,GAAG,MAAK;EAC1C,IAAM,CAAC,kBAAkB,GAAG,EAAC;EAC7B,IAAM,CAAC,gBAAgB,GAAG,EAAC;EAC3B,IAAM,CAAC,UAAU,GAAG,GAAE;EACtB,IAAM,CAAC,kBAAkB,GAAG,GAAE;CAC7B,CAAA;;AAEH,gCAAE,KAAK,mBAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;EAC7B,IAAQ,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAC;EAC3C,IAAM,CAAC,KAAK,GAAG,KAAK,GAAG,EAAC;EACxB,IAAM,CAAC,MAAM,GAAG,OAAO,GAAG,GAAE;EAC5B,IAAM,CAAC,KAAK,GAAG,MAAK;EACpB,IAAM,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,EAAC;EAChE,IAAM,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,EAAC;CAC/D,CAAA;;AAEH,gCAAE,KAAK,mBAAC,OAAO,EAAE;EACf,IAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,GAAE,+BAA8B,IAAE,IAAI,CAAC,MAAM,CAAA,QAAI,GAAE,OAAO,GAAG;CACrG,CAAA;;;;AAIH,gCAAE,EAAE,gBAAC,CAAC,EAAE;EACN,IAAQ,CAAC,GAAG,IAAI,CAAC,OAAM;EACvB,IAAQ,CAAC,GAAG,CAAC,CAAC,OAAM;EACpB,IAAM,CAAC,IAAI,CAAC,EAAE;IACZ,OAAS,CAAC,CAAC;GACV;EACH,IAAQ,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,EAAC;EAC3B,IAAM,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC/D,OAAS,CAAC;GACT;EACH,OAAS,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS;CACnD,CAAA;;AAEH,gCAAE,SAAS,uBAAC,CAAC,EAAE;EACb,IAAQ,CAAC,GAAG,IAAI,CAAC,OAAM;EACvB,IAAQ,CAAC,GAAG,CAAC,CAAC,OAAM;EACpB,IAAM,CAAC,IAAI,CAAC,EAAE;IACZ,OAAS,CAAC;GACT;EACH,IAAQ,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,EAAC;EAC3B,IAAM,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC/D,OAAS,CAAC,GAAG,CAAC;GACb;EACH,OAAS,CAAC,GAAG,CAAC;CACb,CAAA;;AAEH,gCAAE,OAAO,uBAAG;EACV,OAAS,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;CACzB,CAAA;;AAEH,gCAAE,SAAS,yBAAG;EACZ,OAAS,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;CACzC,CAAA;;AAEH,gCAAE,OAAO,uBAAG;EACV,IAAM,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAC;CACpC,CAAA;;AAEH,gCAAE,GAAG,iBAAC,EAAE,EAAE;EACR,IAAM,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;IAC3B,IAAM,CAAC,OAAO,GAAE;IAChB,OAAS,IAAI;GACZ;EACH,OAAS,KAAK;CACb,CAAA;;AAGH,SAASC,mBAAiB,CAAC,EAAE,EAAE;EAC7B,IAAI,EAAE,IAAI,MAAM,EAAE,EAAA,OAAO,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAA;EAChD,EAAE,IAAI,QAAO;EACb,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,IAAI,MAAM,CAAC;CACxE;;;;;;;;AAQDR,IAAE,CAAC,mBAAmB,GAAG,SAAS,KAAK,EAAE;;;EACvCL,IAAM,UAAU,GAAG,KAAK,CAAC,WAAU;EACnCA,IAAM,KAAK,GAAG,KAAK,CAAC,MAAK;;EAEzB,KAAKC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACrCD,IAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAC;IAC5B,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;MACnCI,MAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,iCAAiC,EAAC;KAC3D;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;MACnCA,MAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,mCAAmC,EAAC;KAC7D;GACF;EACF;;;;;;;;AAQDC,IAAE,CAAC,qBAAqB,GAAG,SAAS,KAAK,EAAE;EACzC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAC;;;;;;;EAO1B,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;IAClF,KAAK,CAAC,OAAO,GAAG,KAAI;IACpB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAC;GAC3B;EACF;;;AAGDA,IAAE,CAAC,cAAc,GAAG,SAAS,KAAK,EAAE;EAClC,KAAK,CAAC,GAAG,GAAG,EAAC;EACb,KAAK,CAAC,YAAY,GAAG,EAAC;EACtB,KAAK,CAAC,eAAe,GAAG,GAAE;EAC1B,KAAK,CAAC,2BAA2B,GAAG,MAAK;EACzC,KAAK,CAAC,kBAAkB,GAAG,EAAC;EAC5B,KAAK,CAAC,gBAAgB,GAAG,EAAC;EAC1B,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,EAAC;EAC3B,KAAK,CAAC,kBAAkB,CAAC,MAAM,GAAG,EAAC;;EAEnC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAC;;EAE9B,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;;IAErC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;MAC3B,KAAK,CAAC,KAAK,CAAC,eAAe,EAAC;KAC7B;IACD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;MACtD,KAAK,CAAC,KAAK,CAAC,0BAA0B,EAAC;KACxC;GACF;EACD,IAAI,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,kBAAkB,EAAE;IACrD,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAC;GAC9B;EACD,KAAe,kBAAI,KAAK,CAAC,kBAAkB,yBAAA,EAAE;IAAxCL,IAAM,IAAI;;IACb,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;MACzC,KAAK,CAAC,KAAK,CAAC,kCAAkC,EAAC;KAChD;GACF;EACF;;;AAGDK,IAAE,CAAC,kBAAkB,GAAG,SAAS,KAAK,EAAE;;;EACtC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAC;EAC9B,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC9BD,MAAI,CAAC,kBAAkB,CAAC,KAAK,EAAC;GAC/B;;;EAGD,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;IAC1C,KAAK,CAAC,KAAK,CAAC,mBAAmB,EAAC;GACjC;EACD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC3B,KAAK,CAAC,KAAK,CAAC,0BAA0B,EAAC;GACxC;EACF;;;AAGDC,IAAE,CAAC,kBAAkB,GAAG,SAAS,KAAK,EAAE;EACtC,OAAO,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IAClE,EAAA,AAAC,EAAA;EACJ;;;AAGDA,IAAE,CAAC,cAAc,GAAG,SAAS,KAAK,EAAE;EAClC,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;;;;IAInC,IAAI,KAAK,CAAC,2BAA2B,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;;MAEzE,IAAI,KAAK,CAAC,OAAO,EAAE;QACjB,KAAK,CAAC,KAAK,CAAC,oBAAoB,EAAC;OAClC;KACF;IACD,OAAO,IAAI;GACZ;;EAED,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE;IACnF,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAC;IAChC,OAAO,IAAI;GACZ;;EAED,OAAO,KAAK;EACb;;;AAGDA,IAAE,CAAC,mBAAmB,GAAG,SAAS,KAAK,EAAE;EACvCL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;EACvB,KAAK,CAAC,2BAA2B,GAAG,MAAK;;;EAGzC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IACtD,OAAO,IAAI;GACZ;;;EAGD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC3B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;MACtD,OAAO,IAAI;KACZ;IACD,KAAK,CAAC,GAAG,GAAG,MAAK;GAClB;;;EAGD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IACtDC,IAAI,UAAU,GAAG,MAAK;IACtB,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;MACjC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,UAAS;KACrC;IACD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;MACtD,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAC;MAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;QAC5B,KAAK,CAAC,KAAK,CAAC,oBAAoB,EAAC;OAClC;MACD,KAAK,CAAC,2BAA2B,GAAG,CAAC,WAAU;MAC/C,OAAO,IAAI;KACZ;GACF;;EAED,KAAK,CAAC,GAAG,GAAG,MAAK;EACjB,OAAO,KAAK;EACb;;;AAGDI,IAAE,CAAC,oBAAoB,GAAG,SAAS,KAAK,EAAE,OAAe,EAAE;mCAAV,GAAG,KAAK;;EACvD,IAAI,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;IACnD,KAAK,CAAC,GAAG,CAAC,IAAI,UAAS;IACvB,OAAO,IAAI;GACZ;EACD,OAAO,KAAK;EACb;;;AAGDA,IAAE,CAAC,0BAA0B,GAAG,SAAS,KAAK,EAAE,OAAO,EAAE;EACvD;IACE,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;IACvB,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;IACvB,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;IACvB,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,OAAO,CAAC;GAChD;EACF;AACDA,IAAE,CAAC,0BAA0B,GAAG,SAAS,KAAK,EAAE,OAAO,EAAE;EACvDL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;EACvB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC3BC,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAC;IACrB,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE;MACvC,GAAG,GAAG,KAAK,CAAC,aAAY;MACxB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE;QAClE,GAAG,GAAG,KAAK,CAAC,aAAY;OACzB;MACD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;;QAE3B,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;UACvC,KAAK,CAAC,KAAK,CAAC,uCAAuC,EAAC;SACrD;QACD,OAAO,IAAI;OACZ;KACF;IACD,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE;MAC7B,KAAK,CAAC,KAAK,CAAC,uBAAuB,EAAC;KACrC;IACD,KAAK,CAAC,GAAG,GAAG,MAAK;GAClB;EACD,OAAO,KAAK;EACb;;;AAGDI,IAAE,CAAC,cAAc,GAAG,SAAS,KAAK,EAAE;EAClC;IACE,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC;IACvC,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;IACvB,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC;IAC9C,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;IACpC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC;IACtC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;GACrC;EACF;AACDA,IAAE,CAAC,kCAAkC,GAAG,SAAS,KAAK,EAAE;EACtDL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;EACvB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC3B,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;MACpC,OAAO,IAAI;KACZ;IACD,KAAK,CAAC,GAAG,GAAG,MAAK;GAClB;EACD,OAAO,KAAK;EACb;AACDK,IAAE,CAAC,0BAA0B,GAAG,SAAS,KAAK,EAAE;EAC9CL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;EACvB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC3B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;MACtD,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAC;MAC9B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;QAC3B,OAAO,IAAI;OACZ;MACD,KAAK,CAAC,KAAK,CAAC,oBAAoB,EAAC;KAClC;IACD,KAAK,CAAC,GAAG,GAAG,MAAK;GAClB;EACD,OAAO,KAAK;EACb;AACDK,IAAE,CAAC,wBAAwB,GAAG,SAAS,KAAK,EAAE;EAC5C,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;MACjC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAC;KAClC,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,UAAU;MAC3C,KAAK,CAAC,KAAK,CAAC,eAAe,EAAC;KAC7B;IACD,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAC;IAC9B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;MAC3B,KAAK,CAAC,kBAAkB,IAAI,EAAC;MAC7B,OAAO,IAAI;KACZ;IACD,KAAK,CAAC,KAAK,CAAC,oBAAoB,EAAC;GAClC;EACD,OAAO,KAAK;EACb;;;AAGDA,IAAE,CAAC,sBAAsB,GAAG,SAAS,KAAK,EAAE;EAC1C;IACE,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;IACvB,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC;IAC9C,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;IACpC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC;IACtC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;IACpC,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC;IAC7C,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC;GAC/C;EACF;;;AAGDA,IAAE,CAAC,iCAAiC,GAAG,SAAS,KAAK,EAAE;EACrD,IAAI,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;IAChD,KAAK,CAAC,KAAK,CAAC,mBAAmB,EAAC;GACjC;EACD,OAAO,KAAK;EACb;;;AAGDA,IAAE,CAAC,yBAAyB,GAAG,SAAS,KAAK,EAAE;EAC7CL,IAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAE;EAC1B,IAAI,iBAAiB,CAAC,EAAE,CAAC,EAAE;IACzB,KAAK,CAAC,YAAY,GAAG,GAAE;IACvB,KAAK,CAAC,OAAO,GAAE;IACf,OAAO,IAAI;GACZ;EACD,OAAO,KAAK;EACb;AACD,SAAS,iBAAiB,CAAC,EAAE,EAAE;EAC7B;IACE,EAAE,KAAK,IAAI;IACX,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI;IAChC,EAAE,KAAK,IAAI;IACX,EAAE,KAAK,IAAI;IACX,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI;IAChC,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI;GACjC;CACF;;;;AAIDK,IAAE,CAAC,2BAA2B,GAAG,SAAS,KAAK,EAAE;EAC/CL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;EACvBC,IAAI,EAAE,GAAG,EAAC;EACV,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE;IAC9D,KAAK,CAAC,OAAO,GAAE;GAChB;EACD,OAAO,KAAK,CAAC,GAAG,KAAK,KAAK;EAC3B;;;AAGDI,IAAE,CAAC,kCAAkC,GAAG,SAAS,KAAK,EAAE;EACtDL,IAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAE;EAC1B;IACE,EAAE,KAAK,CAAC,CAAC;IACT,EAAE,KAAK,IAAI;IACX,EAAE,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,SAAS;IAC3C,EAAE,KAAK,IAAI;IACX,EAAE,KAAK,IAAI;IACX,EAAE,KAAK,IAAI;IACX,EAAE,KAAK,IAAI;IACX,EAAE,KAAK,IAAI;IACX;IACA,KAAK,CAAC,OAAO,GAAE;IACf,OAAO,IAAI;GACZ;EACD,OAAO,KAAK;EACb;;;;;AAKDK,IAAE,CAAC,qBAAqB,GAAG,SAAS,KAAK,EAAE;EACzC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC3B,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;MACnC,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE;QAC1D,KAAK,CAAC,KAAK,CAAC,8BAA8B,EAAC;OAC5C;MACD,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAC;MAC5C,MAAM;KACP;IACD,KAAK,CAAC,KAAK,CAAC,eAAe,EAAC;GAC7B;EACF;;;;;AAKDA,IAAE,CAAC,mBAAmB,GAAG,SAAS,KAAK,EAAE;EACvC,KAAK,CAAC,eAAe,GAAG,GAAE;EAC1B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC3B,IAAI,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;MACzE,OAAO,IAAI;KACZ;IACD,KAAK,CAAC,KAAK,CAAC,4BAA4B,EAAC;GAC1C;EACD,OAAO,KAAK;EACb;;;;;;AAMDA,IAAE,CAAC,8BAA8B,GAAG,SAAS,KAAK,EAAE;EAClD,KAAK,CAAC,eAAe,GAAG,GAAE;EAC1B,IAAI,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC,EAAE;IAC/C,KAAK,CAAC,eAAe,IAAIQ,mBAAiB,CAAC,KAAK,CAAC,YAAY,EAAC;IAC9D,OAAO,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,EAAE;MACjD,KAAK,CAAC,eAAe,IAAIA,mBAAiB,CAAC,KAAK,CAAC,YAAY,EAAC;KAC/D;IACD,OAAO,IAAI;GACZ;EACD,OAAO,KAAK;EACb;;;;;;;AAODR,IAAE,CAAC,+BAA+B,GAAG,SAAS,KAAK,EAAE;EACnDL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;EACvBC,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,GAAE;EACxB,KAAK,CAAC,OAAO,GAAE;;EAEf,IAAI,EAAE,KAAK,IAAI,YAAY,IAAI,CAAC,qCAAqC,CAAC,KAAK,CAAC,EAAE;IAC5E,EAAE,GAAG,KAAK,CAAC,aAAY;GACxB;EACD,IAAI,uBAAuB,CAAC,EAAE,CAAC,EAAE;IAC/B,KAAK,CAAC,YAAY,GAAG,GAAE;IACvB,OAAO,IAAI;GACZ;;EAED,KAAK,CAAC,GAAG,GAAG,MAAK;EACjB,OAAO,KAAK;EACb;AACD,SAAS,uBAAuB,CAAC,EAAE,EAAE;EACnC,OAAO,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,YAAY,EAAE,KAAK,IAAI;CACzE;;;;;;;;;AASDI,IAAE,CAAC,8BAA8B,GAAG,SAAS,KAAK,EAAE;EAClDL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;EACvBC,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,GAAE;EACxB,KAAK,CAAC,OAAO,GAAE;;EAEf,IAAI,EAAE,KAAK,IAAI,YAAY,IAAI,CAAC,qCAAqC,CAAC,KAAK,CAAC,EAAE;IAC5E,EAAE,GAAG,KAAK,CAAC,aAAY;GACxB;EACD,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE;IAC9B,KAAK,CAAC,YAAY,GAAG,GAAE;IACvB,OAAO,IAAI;GACZ;;EAED,KAAK,CAAC,GAAG,GAAG,MAAK;EACjB,OAAO,KAAK;EACb;AACD,SAAS,sBAAsB,CAAC,EAAE,EAAE;EAClC,OAAO,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,YAAY,EAAE,KAAK,IAAI,YAAY,EAAE,KAAK,MAAM,iBAAiB,EAAE,KAAK,MAAM;CAC/H;;;AAGDI,IAAE,CAAC,oBAAoB,GAAG,SAAS,KAAK,EAAE;EACxC;IACE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;IACnC,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;IAC1C,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;KACpC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACnD;IACA,OAAO,IAAI;GACZ;EACD,IAAI,KAAK,CAAC,OAAO,EAAE;;IAEjB,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,UAAU;MACpC,KAAK,CAAC,KAAK,CAAC,wBAAwB,EAAC;KACtC;IACD,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAC;GAC9B;EACD,OAAO,KAAK;EACb;AACDA,IAAE,CAAC,uBAAuB,GAAG,SAAS,KAAK,EAAE;EAC3CL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;EACvB,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE;IACvCA,IAAM,CAAC,GAAG,KAAK,CAAC,aAAY;IAC5B,IAAI,KAAK,CAAC,OAAO,EAAE;;MAEjB,IAAI,CAAC,GAAG,KAAK,CAAC,gBAAgB,EAAE;QAC9B,KAAK,CAAC,gBAAgB,GAAG,EAAC;OAC3B;MACD,OAAO,IAAI;KACZ;IACD,IAAI,CAAC,IAAI,KAAK,CAAC,kBAAkB,EAAE;MACjC,OAAO,IAAI;KACZ;IACD,KAAK,CAAC,GAAG,GAAG,MAAK;GAClB;EACD,OAAO,KAAK;EACb;AACDK,IAAE,CAAC,oBAAoB,GAAG,SAAS,KAAK,EAAE;EACxC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC3B,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;MACnC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAC;MACpD,OAAO,IAAI;KACZ;IACD,KAAK,CAAC,KAAK,CAAC,yBAAyB,EAAC;GACvC;EACD,OAAO,KAAK;EACb;;;AAGDA,IAAE,CAAC,yBAAyB,GAAG,SAAS,KAAK,EAAE;EAC7C;IACE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;IACnC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;IACpC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IAC1B,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC;IACvC,IAAI,CAAC,qCAAqC,CAAC,KAAK,CAAC;KAChD,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,mCAAmC,CAAC,KAAK,CAAC,CAAC;IACnE,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;GACrC;EACF;AACDA,IAAE,CAAC,wBAAwB,GAAG,SAAS,KAAK,EAAE;EAC5CL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;EACvB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC3B,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE;MACvC,OAAO,IAAI;KACZ;IACD,KAAK,CAAC,GAAG,GAAG,MAAK;GAClB;EACD,OAAO,KAAK;EACb;AACDK,IAAE,CAAC,cAAc,GAAG,SAAS,KAAK,EAAE;EAClC,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE;IAC1E,KAAK,CAAC,YAAY,GAAG,EAAC;IACtB,KAAK,CAAC,OAAO,GAAE;IACf,OAAO,IAAI;GACZ;EACD,OAAO,KAAK;EACb;;;AAGDA,IAAE,CAAC,uBAAuB,GAAG,SAAS,KAAK,EAAE;EAC3CL,IAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAE;EAC1B,IAAI,EAAE,KAAK,IAAI,UAAU;IACvB,KAAK,CAAC,YAAY,GAAG,KAAI;IACzB,KAAK,CAAC,OAAO,GAAE;IACf,OAAO,IAAI;GACZ;EACD,IAAI,EAAE,KAAK,IAAI,UAAU;IACvB,KAAK,CAAC,YAAY,GAAG,KAAI;IACzB,KAAK,CAAC,OAAO,GAAE;IACf,OAAO,IAAI;GACZ;EACD,IAAI,EAAE,KAAK,IAAI,UAAU;IACvB,KAAK,CAAC,YAAY,GAAG,KAAI;IACzB,KAAK,CAAC,OAAO,GAAE;IACf,OAAO,IAAI;GACZ;EACD,IAAI,EAAE,KAAK,IAAI,UAAU;IACvB,KAAK,CAAC,YAAY,GAAG,KAAI;IACzB,KAAK,CAAC,OAAO,GAAE;IACf,OAAO,IAAI;GACZ;EACD,IAAI,EAAE,KAAK,IAAI,UAAU;IACvB,KAAK,CAAC,YAAY,GAAG,KAAI;IACzB,KAAK,CAAC,OAAO,GAAE;IACf,OAAO,IAAI;GACZ;EACD,OAAO,KAAK;EACb;;;AAGDK,IAAE,CAAC,uBAAuB,GAAG,SAAS,KAAK,EAAE;EAC3CL,IAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAE;EAC1B,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE;IACvB,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,KAAI;IAC9B,KAAK,CAAC,OAAO,GAAE;IACf,OAAO,IAAI;GACZ;EACD,OAAO,KAAK;EACb;AACD,SAAS,eAAe,CAAC,EAAE,EAAE;EAC3B;IACE,CAAC,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI;KAChC,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,SAAS;GAC3C;CACF;;;AAGDK,IAAE,CAAC,qCAAqC,GAAG,SAAS,KAAK,EAAE;EACzDL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;;EAEvB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC3B,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;MAC3CA,IAAM,IAAI,GAAG,KAAK,CAAC,aAAY;MAC/B,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE;QACrDA,IAAM,gBAAgB,GAAG,KAAK,CAAC,IAAG;QAClC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;UACjGA,IAAM,KAAK,GAAG,KAAK,CAAC,aAAY;UAChC,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,EAAE;YACtC,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,GAAG,MAAM,IAAI,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,QAAO;YACzE,OAAO,IAAI;WACZ;SACF;QACD,KAAK,CAAC,GAAG,GAAG,iBAAgB;QAC5B,KAAK,CAAC,YAAY,GAAG,KAAI;OAC1B;MACD,OAAO,IAAI;KACZ;IACD;MACE,KAAK,CAAC,OAAO;MACb,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;MACvB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;MAC/B,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;MACvB,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC;MAClC;MACA,OAAO,IAAI;KACZ;IACD,IAAI,KAAK,CAAC,OAAO,EAAE;MACjB,KAAK,CAAC,KAAK,CAAC,wBAAwB,EAAC;KACtC;IACD,KAAK,CAAC,GAAG,GAAG,MAAK;GAClB;;EAED,OAAO,KAAK;EACb;AACD,SAAS,cAAc,CAAC,EAAE,EAAE;EAC1B,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,QAAQ;CACjC;;;AAGDK,IAAE,CAAC,wBAAwB,GAAG,SAAS,KAAK,EAAE;EAC5C,IAAI,KAAK,CAAC,OAAO,EAAE;IACjB,IAAI,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE;MACzC,OAAO,IAAI;KACZ;IACD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;MAC3B,KAAK,CAAC,YAAY,GAAG,KAAI;MACzB,OAAO,IAAI;KACZ;IACD,OAAO,KAAK;GACb;;EAEDL,IAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAE;EAC1B,IAAI,EAAE,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,KAAK,IAAI,SAAS,EAAE;IAClE,KAAK,CAAC,YAAY,GAAG,GAAE;IACvB,KAAK,CAAC,OAAO,GAAE;IACf,OAAO,IAAI;GACZ;;EAED,OAAO,KAAK;EACb;;;AAGDK,IAAE,CAAC,uBAAuB,GAAG,SAAS,KAAK,EAAE;EAC3C,KAAK,CAAC,YAAY,GAAG,EAAC;EACtBJ,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,GAAE;EACxB,IAAI,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,UAAU;IAC5C,GAAG;MACD,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,KAAK,CAAC,YAAY,IAAI,EAAE,GAAG,IAAI,UAAS;MAClE,KAAK,CAAC,OAAO,GAAE;KAChB,QAAQ,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,YAAY,EAAE,IAAI,IAAI,SAAS;IACtE,OAAO,IAAI;GACZ;EACD,OAAO,KAAK;EACb;;;AAGDI,IAAE,CAAC,8BAA8B,GAAG,SAAS,KAAK,EAAE;EAClDL,IAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAE;;EAE1B,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE;IAC9B,KAAK,CAAC,YAAY,GAAG,CAAC,EAAC;IACvB,KAAK,CAAC,OAAO,GAAE;IACf,OAAO,IAAI;GACZ;;EAED;IACE,KAAK,CAAC,OAAO;IACb,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC;KAC5B,EAAE,KAAK,IAAI,YAAY,EAAE,KAAK,IAAI,SAAS;IAC5C;IACA,KAAK,CAAC,YAAY,GAAG,CAAC,EAAC;IACvB,KAAK,CAAC,OAAO,GAAE;IACf;MACE,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;MACvB,IAAI,CAAC,wCAAwC,CAAC,KAAK,CAAC;MACpD,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;MACvB;MACA,OAAO,IAAI;KACZ;IACD,KAAK,CAAC,KAAK,CAAC,uBAAuB,EAAC;GACrC;;EAED,OAAO,KAAK;EACb;AACD,SAAS,sBAAsB,CAAC,EAAE,EAAE;EAClC;IACE,EAAE,KAAK,IAAI;IACX,EAAE,KAAK,IAAI;IACX,EAAE,KAAK,IAAI;IACX,EAAE,KAAK,IAAI;IACX,EAAE,KAAK,IAAI;IACX,EAAE,KAAK,IAAI;GACZ;CACF;;;;;AAKDK,IAAE,CAAC,wCAAwC,GAAG,SAAS,KAAK,EAAE;EAC5DL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;;;EAGvB,IAAI,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IACxEA,IAAM,IAAI,GAAG,KAAK,CAAC,gBAAe;IAClC,IAAI,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,EAAE;MAC9CA,IAAM,KAAK,GAAG,KAAK,CAAC,gBAAe;MACnC,IAAI,CAAC,0CAA0C,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAC;MACnE,OAAO,IAAI;KACZ;GACF;EACD,KAAK,CAAC,GAAG,GAAG,MAAK;;;EAGjB,IAAI,IAAI,CAAC,wCAAwC,CAAC,KAAK,CAAC,EAAE;IACxDA,IAAM,WAAW,GAAG,KAAK,CAAC,gBAAe;IACzC,IAAI,CAAC,yCAAyC,CAAC,KAAK,EAAE,WAAW,EAAC;IAClE,OAAO,IAAI;GACZ;EACD,OAAO,KAAK;EACb;AACDK,IAAE,CAAC,0CAA0C,GAAG,SAAS,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;EAC3E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC;IAC/C,EAAA,KAAK,CAAC,KAAK,CAAC,uBAAuB,EAAC,EAAA;EACtC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACtD,EAAA,KAAK,CAAC,KAAK,CAAC,wBAAwB,EAAC,EAAA;EACxC;AACDA,IAAE,CAAC,yCAAyC,GAAG,SAAS,KAAK,EAAE,WAAW,EAAE;EAC1E,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;IACnD,EAAA,KAAK,CAAC,KAAK,CAAC,uBAAuB,EAAC,EAAA;EACvC;;;;AAIDA,IAAE,CAAC,6BAA6B,GAAG,SAAS,KAAK,EAAE;EACjDJ,IAAI,EAAE,GAAG,EAAC;EACV,KAAK,CAAC,eAAe,GAAG,GAAE;EAC1B,OAAO,8BAA8B,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;IAC3D,KAAK,CAAC,eAAe,IAAIY,mBAAiB,CAAC,EAAE,EAAC;IAC9C,KAAK,CAAC,OAAO,GAAE;GAChB;EACD,OAAO,KAAK,CAAC,eAAe,KAAK,EAAE;EACpC;AACD,SAAS,8BAA8B,CAAC,EAAE,EAAE;EAC1C,OAAO,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,IAAI;CAC1C;;;;AAIDR,IAAE,CAAC,8BAA8B,GAAG,SAAS,KAAK,EAAE;EAClDJ,IAAI,EAAE,GAAG,EAAC;EACV,KAAK,CAAC,eAAe,GAAG,GAAE;EAC1B,OAAO,+BAA+B,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;IAC5D,KAAK,CAAC,eAAe,IAAIY,mBAAiB,CAAC,EAAE,EAAC;IAC9C,KAAK,CAAC,OAAO,GAAE;GAChB;EACD,OAAO,KAAK,CAAC,eAAe,KAAK,EAAE;EACpC;AACD,SAAS,+BAA+B,CAAC,EAAE,EAAE;EAC3C,OAAO,8BAA8B,CAAC,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC;CAChE;;;;AAIDR,IAAE,CAAC,wCAAwC,GAAG,SAAS,KAAK,EAAE;EAC5D,OAAO,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;EAClD;;;AAGDA,IAAE,CAAC,wBAAwB,GAAG,SAAS,KAAK,EAAE;EAC5C,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC3B,KAAK,CAAC,GAAG,CAAC,IAAI,UAAS;IACvB,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAC;IAC9B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;MAC3B,OAAO,IAAI;KACZ;;IAED,KAAK,CAAC,KAAK,CAAC,8BAA8B,EAAC;GAC5C;EACD,OAAO,KAAK;EACb;;;;;AAKDA,IAAE,CAAC,kBAAkB,GAAG,SAAS,KAAK,EAAE;;;EACtC,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;IACtCL,IAAM,IAAI,GAAG,KAAK,CAAC,aAAY;IAC/B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAII,MAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;MAC9DJ,IAAM,KAAK,GAAG,KAAK,CAAC,aAAY;MAChC,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE;QAClD,KAAK,CAAC,KAAK,CAAC,yBAAyB,EAAC;OACvC;MACD,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE;QAC/C,KAAK,CAAC,KAAK,CAAC,uCAAuC,EAAC;OACrD;KACF;GACF;EACF;;;;AAIDK,IAAE,CAAC,mBAAmB,GAAG,SAAS,KAAK,EAAE;EACvCL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;;EAEvB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC3B,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE;MACrC,OAAO,IAAI;KACZ;IACD,IAAI,KAAK,CAAC,OAAO,EAAE;;MAEjBA,IAAMc,IAAE,GAAG,KAAK,CAAC,OAAO,GAAE;MAC1B,IAAIA,IAAE,KAAK,IAAI,YAAY,YAAY,CAACA,IAAE,CAAC,EAAE;QAC3C,KAAK,CAAC,KAAK,CAAC,sBAAsB,EAAC;OACpC;MACD,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAC;KAC9B;IACD,KAAK,CAAC,GAAG,GAAG,MAAK;GAClB;;EAEDd,IAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAE;EAC1B,IAAI,EAAE,KAAK,IAAI,UAAU;IACvB,KAAK,CAAC,YAAY,GAAG,GAAE;IACvB,KAAK,CAAC,OAAO,GAAE;IACf,OAAO,IAAI;GACZ;;EAED,OAAO,KAAK;EACb;;;AAGDK,IAAE,CAAC,qBAAqB,GAAG,SAAS,KAAK,EAAE;EACzCL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;;EAEvB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC3B,KAAK,CAAC,YAAY,GAAG,KAAI;IACzB,OAAO,IAAI;GACZ;;EAED,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC5C,KAAK,CAAC,YAAY,GAAG,KAAI;IACzB,OAAO,IAAI;GACZ;;EAED,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC7C,IAAI,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE;MAC5C,OAAO,IAAI;KACZ;IACD,KAAK,CAAC,GAAG,GAAG,MAAK;GAClB;;EAED;IACE,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;IAC1C,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;GACtC;EACF;;;AAGDK,IAAE,CAAC,4BAA4B,GAAG,SAAS,KAAK,EAAE;EAChDL,IAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAE;EAC1B,IAAI,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,IAAI,UAAU;IAC7C,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,KAAI;IAC9B,KAAK,CAAC,OAAO,GAAE;IACf,OAAO,IAAI;GACZ;EACD,OAAO,KAAK;EACb;;;AAGDK,IAAE,CAAC,2BAA2B,GAAG,SAAS,KAAK,EAAE;EAC/CL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;EACvB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;IAC3B,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;MAC3C,OAAO,IAAI;KACZ;IACD,IAAI,KAAK,CAAC,OAAO,EAAE;MACjB,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAC;KAC9B;IACD,KAAK,CAAC,GAAG,GAAG,MAAK;GAClB;EACD,OAAO,KAAK;EACb;;;AAGDK,IAAE,CAAC,uBAAuB,GAAG,SAAS,KAAK,EAAE;EAC3CL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;EACvBC,IAAI,EAAE,GAAG,EAAC;EACV,KAAK,CAAC,YAAY,GAAG,EAAC;EACtB,OAAO,cAAc,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;IAC3C,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,KAAK,CAAC,YAAY,IAAI,EAAE,GAAG,IAAI,UAAS;IAClE,KAAK,CAAC,OAAO,GAAE;GAChB;EACD,OAAO,KAAK,CAAC,GAAG,KAAK,KAAK;EAC3B;AACD,SAAS,cAAc,CAAC,EAAE,EAAE;EAC1B,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI;CACxC;;;AAGDI,IAAE,CAAC,mBAAmB,GAAG,SAAS,KAAK,EAAE;EACvCL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;EACvBC,IAAI,EAAE,GAAG,EAAC;EACV,KAAK,CAAC,YAAY,GAAG,EAAC;EACtB,OAAO,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;IACvC,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,EAAE,EAAC;IAC3D,KAAK,CAAC,OAAO,GAAE;GAChB;EACD,OAAO,KAAK,CAAC,GAAG,KAAK,KAAK;EAC3B;AACD,SAAS,UAAU,CAAC,EAAE,EAAE;EACtB;IACE,CAAC,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI;KAChC,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,SAAS;KACzC,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,SAAS;GAC3C;CACF;AACD,SAAS,QAAQ,CAAC,EAAE,EAAE;EACpB,IAAI,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,UAAU;IAC5C,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,SAAS;GAChC;EACD,IAAI,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,UAAU;IAC5C,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,SAAS;GAChC;EACD,OAAO,EAAE,GAAG,IAAI;CACjB;;;;AAIDI,IAAE,CAAC,mCAAmC,GAAG,SAAS,KAAK,EAAE;EACvD,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;IACpCL,IAAM,EAAE,GAAG,KAAK,CAAC,aAAY;IAC7B,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;MACpCA,IAAM,EAAE,GAAG,KAAK,CAAC,aAAY;MAC7B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;QAC/C,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,aAAY;OAC3D,MAAM;QACL,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,CAAC,GAAG,GAAE;OACjC;KACF,MAAM;MACL,KAAK,CAAC,YAAY,GAAG,GAAE;KACxB;IACD,OAAO,IAAI;GACZ;EACD,OAAO,KAAK;EACb;;;AAGDK,IAAE,CAAC,oBAAoB,GAAG,SAAS,KAAK,EAAE;EACxCL,IAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAE;EAC1B,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE;IACpB,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,KAAI;IAC9B,KAAK,CAAC,OAAO,GAAE;IACf,OAAO,IAAI;GACZ;EACD,KAAK,CAAC,YAAY,GAAG,EAAC;EACtB,OAAO,KAAK;EACb;AACD,SAAS,YAAY,CAAC,EAAE,EAAE;EACxB,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI;CACxC;;;;;AAKDK,IAAE,CAAC,wBAAwB,GAAG,SAAS,KAAK,EAAE,MAAM,EAAE;EACpDL,IAAM,KAAK,GAAG,KAAK,CAAC,IAAG;EACvB,KAAK,CAAC,YAAY,GAAG,EAAC;EACtB,KAAKC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;IAC/BD,IAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAE;IAC1B,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;MACnB,KAAK,CAAC,GAAG,GAAG,MAAK;MACjB,OAAO,KAAK;KACb;IACD,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,EAAE,EAAC;IAC3D,KAAK,CAAC,OAAO,GAAE;GAChB;EACD,OAAO,IAAI;CACZ;;;;;;ACxgCD,AAAO,IAAM,KAAK,GAAC,cACN,CAAC,CAAC,EAAE;EACf,IAAM,CAAC,IAAI,GAAG,CAAC,CAAC,KAAI;EACpB,IAAM,CAAC,KAAK,GAAG,CAAC,CAAC,MAAK;EACtB,IAAM,CAAC,KAAK,GAAG,CAAC,CAAC,MAAK;EACtB,IAAM,CAAC,GAAG,GAAG,CAAC,CAAC,IAAG;EAClB,IAAM,CAAC,CAAC,OAAO,CAAC,SAAS;IACvB,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAC,EAAA;EAC1D,IAAM,CAAC,CAAC,OAAO,CAAC,MAAM;IACpB,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAC,EAAA;CAChC,CAAA;;;;AAKHA,IAAMK,IAAE,GAAG,MAAM,CAAC,UAAS;;;;AAI3BA,IAAE,CAAC,IAAI,GAAG,WAAW;EACnB,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;IACtB,EAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAC,EAAA;;EAEvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAG;EAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAK;EAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAM;EAChC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAQ;EACpC,IAAI,CAAC,SAAS,GAAE;EACjB;;AAEDA,IAAE,CAAC,QAAQ,GAAG,WAAW;EACvB,IAAI,CAAC,IAAI,GAAE;EACX,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC;EACvB;;;AAGD,IAAI,OAAO,MAAM,KAAK,WAAW;EAC/B,EAAAA,IAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW;;;IAC/B,OAAO;MACL,IAAI,EAAE,YAAG;QACPJ,IAAI,KAAK,GAAGG,MAAI,CAAC,QAAQ,GAAE;QAC3B,OAAO;UACL,IAAI,EAAE,KAAK,CAAC,IAAI,KAAKD,KAAE,CAAC,GAAG;UAC3B,KAAK,EAAE,KAAK;SACb;OACF;KACF;IACF,EAAA;;;;;AAKHE,IAAE,CAAC,UAAU,GAAG,WAAW;EACzB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;EAC7C;;;;;AAKDA,IAAE,CAAC,SAAS,GAAG,WAAW;EACxBJ,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,GAAE;EAClC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAAA,IAAI,CAAC,SAAS,GAAE,EAAA;;EAE9D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAG;EACrB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,GAAE,EAAA;EAC9D,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAA,OAAO,IAAI,CAAC,WAAW,CAACE,KAAE,CAAC,GAAG,CAAC,EAAA;;EAElE,IAAI,UAAU,CAAC,QAAQ,EAAE,EAAA,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAA;OACpD,EAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAC,EAAA;EAC9C;;AAEDE,IAAE,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE;;;EAG5B,IAAI,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE;IACvE,EAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAA;;EAExB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;EACnC;;AAEDA,IAAE,CAAC,iBAAiB,GAAG,WAAW;EAChCJ,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAC;EAC1C,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,EAAA,OAAO,IAAI,EAAA;EACjDA,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAC;EAC9C,OAAO,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,GAAG,SAAS;EACvC;;AAEDI,IAAE,CAAC,gBAAgB,GAAG,WAAW;;;EAC/BJ,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,GAAE;EAC3DA,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,EAAC;EACnE,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,sBAAsB,EAAC,EAAA;EAChE,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,EAAC;EAClB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;IAC1B,UAAU,CAAC,SAAS,GAAG,MAAK;IAC5BA,IAAI,MAAK;IACT,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE;MACtE,EAAEG,MAAI,CAAC,QAAO;MACdA,MAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAM;KAC/C;GACF;EACD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS;IACxB,EAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG;2BACvD,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,EAAC,EAAA;EACvD;;AAEDC,IAAE,CAAC,eAAe,GAAG,SAAS,SAAS,EAAE;;;EACvCJ,IAAI,KAAK,GAAG,IAAI,CAAC,IAAG;EACpBA,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,GAAE;EAC3DA,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,SAAS,EAAC;EACrD,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;IACrD,EAAE,GAAGG,MAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAEA,MAAI,CAAC,GAAG,EAAC;GACvC;EACD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS;IACxB,EAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG;2BACrE,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,EAAC,EAAA;EACvD;;;;;AAKDC,IAAE,CAAC,SAAS,GAAG,WAAW;;;EACxB,IAAI,EAAE,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;IACzCJ,IAAI,EAAE,GAAGG,MAAI,CAAC,KAAK,CAAC,UAAU,CAACA,MAAI,CAAC,GAAG,EAAC;IACxC,QAAQ,EAAE;IACV,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG;MACf,EAAEA,MAAI,CAAC,IAAG;MACV,KAAK;IACP,KAAK,EAAE;MACL,IAAIA,MAAI,CAAC,KAAK,CAAC,UAAU,CAACA,MAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9C,EAAEA,MAAI,CAAC,IAAG;OACX;IACH,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI;MAC3B,EAAEA,MAAI,CAAC,IAAG;MACV,IAAIA,MAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QAC1B,EAAEA,MAAI,CAAC,QAAO;QACdA,MAAI,CAAC,SAAS,GAAGA,MAAI,CAAC,IAAG;OAC1B;MACD,KAAK;IACP,KAAK,EAAE;MACL,QAAQA,MAAI,CAAC,KAAK,CAAC,UAAU,CAACA,MAAI,CAAC,GAAG,GAAG,CAAC,CAAC;MAC3C,KAAK,EAAE;QACLA,MAAI,CAAC,gBAAgB,GAAE;QACvB,KAAK;MACP,KAAK,EAAE;QACLA,MAAI,CAAC,eAAe,CAAC,CAAC,EAAC;QACvB,KAAK;MACP;QACE,MAAM,IAAI;OACX;MACD,KAAK;IACP;MACE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE;QACvF,EAAEA,MAAI,CAAC,IAAG;OACX,MAAM;QACL,MAAM,IAAI;OACX;KACF;GACF;EACF;;;;;;;AAODC,IAAE,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE,GAAG,EAAE;EACnC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAG;EACnB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,GAAE,EAAA;EAC5DJ,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAI;EACxB,IAAI,CAAC,IAAI,GAAG,KAAI;EAChB,IAAI,CAAC,KAAK,GAAG,IAAG;;EAEhB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;EAC7B;;;;;;;;;;;AAWDI,IAAE,CAAC,aAAa,GAAG,WAAW;EAC5BJ,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAC;EAC9C,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,EAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAA;EAC1DA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAC;EAC/C,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE,IAAI,KAAK,KAAK,EAAE,EAAE;IAChE,IAAI,CAAC,GAAG,IAAI,EAAC;IACb,OAAO,IAAI,CAAC,WAAW,CAACE,KAAE,CAAC,QAAQ,CAAC;GACrC,MAAM;IACL,EAAE,IAAI,CAAC,IAAG;IACV,OAAO,IAAI,CAAC,WAAW,CAACA,KAAE,CAAC,GAAG,CAAC;GAChC;EACF;;AAEDE,IAAE,CAAC,eAAe,GAAG,WAAW;EAC9BJ,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAC;EAC9C,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE;EAC9D,IAAI,IAAI,KAAK,EAAE,EAAE,EAAA,OAAO,IAAI,CAAC,QAAQ,CAACE,KAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAA;EACnD,OAAO,IAAI,CAAC,QAAQ,CAACA,KAAE,CAAC,KAAK,EAAE,CAAC,CAAC;EAClC;;AAEDE,IAAE,CAAC,yBAAyB,GAAG,SAAS,IAAI,EAAE;EAC5CJ,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAC;EAC9CA,IAAI,IAAI,GAAG,EAAC;EACZA,IAAI,SAAS,GAAG,IAAI,KAAK,EAAE,GAAGE,KAAE,CAAC,IAAI,GAAGA,KAAE,CAAC,OAAM;;;EAGjD,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE;IAC/D,EAAE,KAAI;IACN,SAAS,GAAGA,KAAE,CAAC,SAAQ;IACvB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAC;GAC3C;;EAED,IAAI,IAAI,KAAK,EAAE,EAAE,EAAA,OAAO,IAAI,CAAC,QAAQ,CAACA,KAAE,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,EAAA;EAC1D,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;EACtC;;AAEDE,IAAE,CAAC,kBAAkB,GAAG,SAAS,IAAI,EAAE;EACrCJ,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAC;EAC9C,IAAI,IAAI,KAAK,IAAI,EAAE,EAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,GAAGE,KAAE,CAAC,SAAS,GAAGA,KAAE,CAAC,UAAU,EAAE,CAAC,CAAC,EAAA;EACvF,IAAI,IAAI,KAAK,EAAE,EAAE,EAAA,OAAO,IAAI,CAAC,QAAQ,CAACA,KAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAA;EACnD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,GAAGA,KAAE,CAAC,SAAS,GAAGA,KAAE,CAAC,UAAU,EAAE,CAAC,CAAC;EACrE;;AAEDE,IAAE,CAAC,eAAe,GAAG,WAAW;EAC9BJ,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAC;EAC9C,IAAI,IAAI,KAAK,EAAE,EAAE,EAAA,OAAO,IAAI,CAAC,QAAQ,CAACE,KAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAA;EACnD,OAAO,IAAI,CAAC,QAAQ,CAACA,KAAE,CAAC,UAAU,EAAE,CAAC,CAAC;EACvC;;AAEDE,IAAE,CAAC,kBAAkB,GAAG,SAAS,IAAI,EAAE;EACrCJ,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAC;EAC9C,IAAI,IAAI,KAAK,IAAI,EAAE;IACjB,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;SAC1E,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;;MAE1F,IAAI,CAAC,eAAe,CAAC,CAAC,EAAC;MACvB,IAAI,CAAC,SAAS,GAAE;MAChB,OAAO,IAAI,CAAC,SAAS,EAAE;KACxB;IACD,OAAO,IAAI,CAAC,QAAQ,CAACE,KAAE,CAAC,MAAM,EAAE,CAAC,CAAC;GACnC;EACD,IAAI,IAAI,KAAK,EAAE,EAAE,EAAA,OAAO,IAAI,CAAC,QAAQ,CAACA,KAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAA;EACnD,OAAO,IAAI,CAAC,QAAQ,CAACA,KAAE,CAAC,OAAO,EAAE,CAAC,CAAC;EACpC;;AAEDE,IAAE,CAAC,eAAe,GAAG,SAAS,IAAI,EAAE;EAClCJ,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAC;EAC9CA,IAAI,IAAI,GAAG,EAAC;EACZ,IAAI,IAAI,KAAK,IAAI,EAAE;IACjB,IAAI,GAAG,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAC;IACxE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,EAAA,OAAO,IAAI,CAAC,QAAQ,CAACE,KAAE,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,EAAA;IAC5F,OAAO,IAAI,CAAC,QAAQ,CAACA,KAAE,CAAC,QAAQ,EAAE,IAAI,CAAC;GACxC;EACD,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;MAC1F,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;;IAE9C,IAAI,CAAC,eAAe,CAAC,CAAC,EAAC;IACvB,IAAI,CAAC,SAAS,GAAE;IAChB,OAAO,IAAI,CAAC,SAAS,EAAE;GACxB;EACD,IAAI,IAAI,KAAK,EAAE,EAAE,EAAA,IAAI,GAAG,EAAC,EAAA;EACzB,OAAO,IAAI,CAAC,QAAQ,CAACA,KAAE,CAAC,UAAU,EAAE,IAAI,CAAC;EAC1C;;AAEDE,IAAE,CAAC,iBAAiB,GAAG,SAAS,IAAI,EAAE;EACpCJ,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAC;EAC9C,IAAI,IAAI,KAAK,EAAE,EAAE,EAAA,OAAO,IAAI,CAAC,QAAQ,CAACE,KAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAA;EACtG,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;IAC/D,IAAI,CAAC,GAAG,IAAI,EAAC;IACb,OAAO,IAAI,CAAC,WAAW,CAACA,KAAE,CAAC,KAAK,CAAC;GAClC;EACD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,EAAE,GAAGA,KAAE,CAAC,EAAE,GAAGA,KAAE,CAAC,MAAM,EAAE,CAAC,CAAC;EACzD;;AAEDE,IAAE,CAAC,gBAAgB,GAAG,SAAS,IAAI,EAAE;EACnC,QAAQ,IAAI;;;EAGZ,KAAK,EAAE;IACL,OAAO,IAAI,CAAC,aAAa,EAAE;;;EAG7B,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAACF,KAAE,CAAC,MAAM,CAAC;EACvD,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAACA,KAAE,CAAC,MAAM,CAAC;EACvD,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAACA,KAAE,CAAC,IAAI,CAAC;EACrD,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAACA,KAAE,CAAC,KAAK,CAAC;EACtD,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAACA,KAAE,CAAC,QAAQ,CAAC;EACzD,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAACA,KAAE,CAAC,QAAQ,CAAC;EACzD,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAACA,KAAE,CAAC,MAAM,CAAC;EACxD,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAACA,KAAE,CAAC,MAAM,CAAC;EACxD,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAACA,KAAE,CAAC,KAAK,CAAC;EACtD,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAACA,KAAE,CAAC,QAAQ,CAAC;;EAEzD,KAAK,EAAE;IACL,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,EAAA,KAAK,EAAA;IACvC,EAAE,IAAI,CAAC,IAAG;IACV,OAAO,IAAI,CAAC,WAAW,CAACA,KAAE,CAAC,SAAS,CAAC;;EAEvC,KAAK,EAAE;IACLF,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAC;IAC9C,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,EAAA,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,EAAA;IAChE,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;MACjC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,EAAA,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAA;MAC/D,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,EAAA,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAA;KAC/D;;;;EAIH,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;IAC7E,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;;EAG/B,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;IACd,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;;;;;;;EAO9B,KAAK,EAAE;IACL,OAAO,IAAI,CAAC,eAAe,EAAE;;EAE/B,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;IACd,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;;EAE7C,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE;IACf,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;;EAEtC,KAAK,EAAE;IACL,OAAO,IAAI,CAAC,eAAe,EAAE;;EAE/B,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;IACd,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;;EAEtC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;IACd,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;;EAEnC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;IACd,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;;EAErC,KAAK,GAAG;IACN,OAAO,IAAI,CAAC,QAAQ,CAACE,KAAE,CAAC,MAAM,EAAE,CAAC,CAAC;GACnC;;EAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,GAAG,EAAC;EAC/E;;AAEDE,IAAE,CAAC,QAAQ,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;EACjCJ,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,EAAC;EACrD,IAAI,CAAC,GAAG,IAAI,KAAI;EAChB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;EACnC;;AAEDI,IAAE,CAAC,UAAU,GAAG,WAAW;;;EACzBJ,IAAI,OAAO,EAAE,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC,IAAG;EACtC,SAAS;IACP,IAAIG,MAAI,CAAC,GAAG,IAAIA,MAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAAA,MAAI,CAAC,KAAK,CAAC,KAAK,EAAE,iCAAiC,EAAC,EAAA;IACvFH,IAAI,EAAE,GAAGG,MAAI,CAAC,KAAK,CAAC,MAAM,CAACA,MAAI,CAAC,GAAG,EAAC;IACpC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAAA,MAAI,CAAC,KAAK,CAAC,KAAK,EAAE,iCAAiC,EAAC,EAAA;IAC5E,IAAI,CAAC,OAAO,EAAE;MACZ,IAAI,EAAE,KAAK,GAAG,EAAE,EAAA,OAAO,GAAG,KAAI,EAAA;WACzB,IAAI,EAAE,KAAK,GAAG,IAAI,OAAO,EAAE,EAAA,OAAO,GAAG,MAAK,EAAA;WAC1C,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,EAAA,KAAK,EAAA;MACtC,OAAO,GAAG,EAAE,KAAK,KAAI;KACtB,MAAM,EAAA,OAAO,GAAG,MAAK,EAAA;IACtB,EAAEA,MAAI,CAAC,IAAG;GACX;EACDH,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAC;EAC/C,EAAE,IAAI,CAAC,IAAG;EACVA,IAAI,UAAU,GAAG,IAAI,CAAC,IAAG;EACzBA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,GAAE;EAC5B,IAAI,IAAI,CAAC,WAAW,EAAE,EAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAC,EAAA;;;EAGjDD,IAAM,KAAK,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAC;EACtF,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAC;EAClC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAC;EAC/B,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAC;;;EAGjCC,IAAI,KAAK,GAAG,KAAI;EAChB,IAAI;IACF,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,EAAC;GACnC,CAAC,OAAO,CAAC,EAAE;;;GAGX;;EAED,OAAO,IAAI,CAAC,WAAW,CAACE,KAAE,CAAC,MAAM,EAAE,CAAC,SAAA,OAAO,EAAE,OAAA,KAAK,EAAE,OAAA,KAAK,CAAC,CAAC;EAC5D;;;;;;AAMDE,IAAE,CAAC,OAAO,GAAG,SAAS,KAAK,EAAE,GAAG,EAAE;;;EAChCJ,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,EAAC;EAC/B,KAAKA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;IAC5DA,IAAI,IAAI,GAAGG,MAAI,CAAC,KAAK,CAAC,UAAU,CAACA,MAAI,CAAC,GAAG,CAAC,EAAE,GAAG,YAAA;IAC/C,IAAI,IAAI,IAAI,EAAE,EAAE,EAAA,GAAG,GAAG,IAAI,GAAG,EAAE,GAAG,GAAE,EAAA;SAC/B,IAAI,IAAI,IAAI,EAAE,EAAE,EAAA,GAAG,GAAG,IAAI,GAAG,EAAE,GAAG,GAAE,EAAA;SACpC,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,EAAA,GAAG,GAAG,IAAI,GAAG,GAAE,EAAA;SAC7C,EAAA,GAAG,GAAG,SAAQ,EAAA;IACnB,IAAI,GAAG,IAAI,KAAK,EAAE,EAAA,KAAK,EAAA;IACvB,EAAEA,MAAI,CAAC,IAAG;IACV,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,IAAG;GAC5B;EACD,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,GAAG,EAAE,EAAA,OAAO,IAAI,EAAA;;EAE9E,OAAO,KAAK;EACb;;AAEDC,IAAE,CAAC,eAAe,GAAG,SAAS,KAAK,EAAE;EACnC,IAAI,CAAC,GAAG,IAAI,EAAC;EACbJ,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAC;EAC7B,IAAI,GAAG,IAAI,IAAI,EAAE,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,2BAA2B,GAAG,KAAK,EAAC,EAAA;EAChF,IAAI,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,kCAAkC,EAAC,EAAA;EACzG,OAAO,IAAI,CAAC,WAAW,CAACE,KAAE,CAAC,GAAG,EAAE,GAAG,CAAC;EACrC;;;;AAIDE,IAAE,CAAC,UAAU,GAAG,SAAS,aAAa,EAAE;EACtCJ,IAAI,KAAK,GAAG,IAAI,CAAC,IAAG;EACpB,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,EAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,EAAC,EAAA;EACpFA,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAE;EACxE,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,EAAC,EAAA;EAC7D,IAAI,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAA,KAAK,GAAG,MAAK,EAAA;EAC1EA,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAC;EAC1C,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;IACzB,EAAE,IAAI,CAAC,IAAG;IACV,IAAI,CAAC,OAAO,CAAC,EAAE,EAAC;IAChB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAC;GACvC;EACD,IAAI,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE;IAC3C,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG,EAAC;IACxC,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,EAAA,EAAE,IAAI,CAAC,IAAG,EAAA;IAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,EAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,EAAC,EAAA;GACnE;EACD,IAAI,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,kCAAkC,EAAC,EAAA;;EAEzGA,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAC;EAC3CA,IAAI,GAAG,GAAG,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,EAAC;EACpD,OAAO,IAAI,CAAC,WAAW,CAACE,KAAE,CAAC,GAAG,EAAE,GAAG,CAAC;EACrC;;;;AAIDE,IAAE,CAAC,aAAa,GAAG,WAAW;EAC5BJ,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAI;;EAE9C,IAAI,EAAE,KAAK,GAAG,EAAE;IACd,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,EAAA,IAAI,CAAC,UAAU,GAAE,EAAA;IACnDA,IAAI,OAAO,GAAG,EAAE,IAAI,CAAC,IAAG;IACxB,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAC;IACrE,EAAE,IAAI,CAAC,IAAG;IACV,IAAI,IAAI,GAAG,QAAQ,EAAE,EAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,0BAA0B,EAAC,EAAA;GAClF,MAAM;IACL,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,EAAC;GAC3B;EACD,OAAO,IAAI;EACZ;;AAED,SAAS,iBAAiB,CAAC,IAAI,EAAE;;EAE/B,IAAI,IAAI,IAAI,MAAM,EAAE,EAAA,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAA;EACpD,IAAI,IAAI,QAAO;EACf,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC,IAAI,GAAG,IAAI,IAAI,MAAM,CAAC;CAC1E;;AAEDI,IAAE,CAAC,UAAU,GAAG,SAAS,KAAK,EAAE;;;EAC9BJ,IAAI,GAAG,GAAG,EAAE,EAAE,UAAU,GAAG,EAAE,IAAI,CAAC,IAAG;EACrC,SAAS;IACP,IAAIG,MAAI,CAAC,GAAG,IAAIA,MAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAAA,MAAI,CAAC,KAAK,CAACA,MAAI,CAAC,KAAK,EAAE,8BAA8B,EAAC,EAAA;IACzFH,IAAI,EAAE,GAAGG,MAAI,CAAC,KAAK,CAAC,UAAU,CAACA,MAAI,CAAC,GAAG,EAAC;IACxC,IAAI,EAAE,KAAK,KAAK,EAAE,EAAA,KAAK,EAAA;IACvB,IAAI,EAAE,KAAK,EAAE,EAAE;MACb,GAAG,IAAIA,MAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAEA,MAAI,CAAC,GAAG,EAAC;MAC7C,GAAG,IAAIA,MAAI,CAAC,eAAe,CAAC,KAAK,EAAC;MAClC,UAAU,GAAGA,MAAI,CAAC,IAAG;KACtB,MAAM;MACL,IAAI,SAAS,CAAC,EAAE,EAAEA,MAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,EAAAA,MAAI,CAAC,KAAK,CAACA,MAAI,CAAC,KAAK,EAAE,8BAA8B,EAAC,EAAA;MACzG,EAAEA,MAAI,CAAC,IAAG;KACX;GACF;EACD,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC;EAC/C,OAAO,IAAI,CAAC,WAAW,CAACD,KAAE,CAAC,MAAM,EAAE,GAAG,CAAC;EACxC;;;;AAIDH,IAAM,6BAA6B,GAAG,GAAE;;AAExCK,IAAE,CAAC,oBAAoB,GAAG,WAAW;EACnC,IAAI,CAAC,iBAAiB,GAAG,KAAI;EAC7B,IAAI;IACF,IAAI,CAAC,aAAa,GAAE;GACrB,CAAC,OAAO,GAAG,EAAE;IACZ,IAAI,GAAG,KAAK,6BAA6B,EAAE;MACzC,IAAI,CAAC,wBAAwB,GAAE;KAChC,MAAM;MACL,MAAM,GAAG;KACV;GACF;;EAED,IAAI,CAAC,iBAAiB,GAAG,MAAK;EAC/B;;AAEDA,IAAE,CAAC,kBAAkB,GAAG,SAAS,QAAQ,EAAE,OAAO,EAAE;EAClD,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;IAC3D,MAAM,6BAA6B;GACpC,MAAM;IACL,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAC;GAC9B;EACF;;AAEDA,IAAE,CAAC,aAAa,GAAG,WAAW;;;EAC5BJ,IAAI,GAAG,GAAG,EAAE,EAAE,UAAU,GAAG,IAAI,CAAC,IAAG;EACnC,SAAS;IACP,IAAIG,MAAI,CAAC,GAAG,IAAIA,MAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAAA,MAAI,CAAC,KAAK,CAACA,MAAI,CAAC,KAAK,EAAE,uBAAuB,EAAC,EAAA;IAClFH,IAAI,EAAE,GAAGG,MAAI,CAAC,KAAK,CAAC,UAAU,CAACA,MAAI,CAAC,GAAG,EAAC;IACxC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAIA,MAAI,CAAC,KAAK,CAAC,UAAU,CAACA,MAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;MACzE,IAAIA,MAAI,CAAC,GAAG,KAAKA,MAAI,CAAC,KAAK,KAAKA,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,QAAQ,IAAIC,MAAI,CAAC,IAAI,KAAKD,KAAE,CAAC,eAAe,CAAC,EAAE;QAC9F,IAAI,EAAE,KAAK,EAAE,EAAE;UACbC,MAAI,CAAC,GAAG,IAAI,EAAC;UACb,OAAOA,MAAI,CAAC,WAAW,CAACD,KAAE,CAAC,YAAY,CAAC;SACzC,MAAM;UACL,EAAEC,MAAI,CAAC,IAAG;UACV,OAAOA,MAAI,CAAC,WAAW,CAACD,KAAE,CAAC,SAAS,CAAC;SACtC;OACF;MACD,GAAG,IAAIC,MAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAEA,MAAI,CAAC,GAAG,EAAC;MAC7C,OAAOA,MAAI,CAAC,WAAW,CAACD,KAAE,CAAC,QAAQ,EAAE,GAAG,CAAC;KAC1C;IACD,IAAI,EAAE,KAAK,EAAE,EAAE;MACb,GAAG,IAAIC,MAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAEA,MAAI,CAAC,GAAG,EAAC;MAC7C,GAAG,IAAIA,MAAI,CAAC,eAAe,CAAC,IAAI,EAAC;MACjC,UAAU,GAAGA,MAAI,CAAC,IAAG;KACtB,MAAM,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE;MACxB,GAAG,IAAIA,MAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAEA,MAAI,CAAC,GAAG,EAAC;MAC7C,EAAEA,MAAI,CAAC,IAAG;MACV,QAAQ,EAAE;MACV,KAAK,EAAE;QACL,IAAIA,MAAI,CAAC,KAAK,CAAC,UAAU,CAACA,MAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAA,EAAEA,MAAI,CAAC,IAAG,EAAA;MACxD,KAAK,EAAE;QACL,GAAG,IAAI,KAAI;QACX,KAAK;MACP;QACE,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,EAAC;QAC9B,KAAK;OACN;MACD,IAAIA,MAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QAC1B,EAAEA,MAAI,CAAC,QAAO;QACdA,MAAI,CAAC,SAAS,GAAGA,MAAI,CAAC,IAAG;OAC1B;MACD,UAAU,GAAGA,MAAI,CAAC,IAAG;KACtB,MAAM;MACL,EAAEA,MAAI,CAAC,IAAG;KACX;GACF;EACF;;;AAGDC,IAAE,CAAC,wBAAwB,GAAG,WAAW;;;EACvC,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE;IAC/C,QAAQD,MAAI,CAAC,KAAK,CAACA,MAAI,CAAC,GAAG,CAAC;IAC5B,KAAK,IAAI;MACP,EAAEA,MAAI,CAAC,IAAG;MACV,KAAK;;IAEP,KAAK,GAAG;MACN,IAAIA,MAAI,CAAC,KAAK,CAACA,MAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;QACpC,KAAK;OACN;;;IAGH,KAAK,GAAG;MACN,OAAOA,MAAI,CAAC,WAAW,CAACD,KAAE,CAAC,eAAe,EAAEC,MAAI,CAAC,KAAK,CAAC,KAAK,CAACA,MAAI,CAAC,KAAK,EAAEA,MAAI,CAAC,GAAG,CAAC,CAAC;;;KAGpF;GACF;EACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,uBAAuB,EAAC;EAChD;;;;AAIDC,IAAE,CAAC,eAAe,GAAG,SAAS,UAAU,EAAE;EACxCJ,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG,EAAC;EAC1C,EAAE,IAAI,CAAC,IAAG;EACV,QAAQ,EAAE;EACV,KAAK,GAAG,EAAE,OAAO,IAAI;EACrB,KAAK,GAAG,EAAE,OAAO,IAAI;EACrB,KAAK,GAAG,EAAE,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;EACzD,KAAK,GAAG,EAAE,OAAO,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;EACxD,KAAK,GAAG,EAAE,OAAO,IAAI;EACrB,KAAK,EAAE,EAAE,OAAO,IAAI;EACpB,KAAK,GAAG,EAAE,OAAO,QAAQ;EACzB,KAAK,GAAG,EAAE,OAAO,IAAI;EACrB,KAAK,EAAE,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAA,EAAE,IAAI,CAAC,IAAG,EAAA;EAC/D,KAAK,EAAE;IACL,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAO,EAAE;IACzE,OAAO,EAAE;EACX;IACE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;MACxBA,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAC;MACrEA,IAAI,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAC;MACjC,IAAI,KAAK,GAAG,GAAG,EAAE;QACf,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC;QAChC,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAC;OAC9B;MACD,IAAI,CAAC,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAC;MAC/B,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAC;MACpC,IAAI,CAAC,QAAQ,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,EAAE;QAC/E,IAAI,CAAC,kBAAkB;UACrB,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM;UAC9B,UAAU;cACN,kCAAkC;cAClC,8BAA8B;UACnC;OACF;MACD,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;KAClC;IACD,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE;;;MAGjB,OAAO,EAAE;KACV;IACD,OAAO,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;GAC/B;EACF;;;;AAIDI,IAAE,CAAC,WAAW,GAAG,SAAS,GAAG,EAAE;EAC7BJ,IAAI,OAAO,GAAG,IAAI,CAAC,IAAG;EACtBA,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAC;EAC7B,IAAI,CAAC,KAAK,IAAI,EAAE,EAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,+BAA+B,EAAC,EAAA;EACjF,OAAO,CAAC;EACT;;;;;;;;AAQDI,IAAE,CAAC,SAAS,GAAG,WAAW;;;EACxB,IAAI,CAAC,WAAW,GAAG,MAAK;EACxBJ,IAAI,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,IAAG;EAClDA,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAC;EAC1C,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;IACnCA,IAAI,EAAE,GAAGG,MAAI,CAAC,iBAAiB,GAAE;IACjC,IAAI,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE;MAChCA,MAAI,CAAC,GAAG,IAAI,EAAE,IAAI,MAAM,GAAG,CAAC,GAAG,EAAC;KACjC,MAAM,IAAI,EAAE,KAAK,EAAE,EAAE;MACpBA,MAAI,CAAC,WAAW,GAAG,KAAI;MACvB,IAAI,IAAIA,MAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAEA,MAAI,CAAC,GAAG,EAAC;MAC9CH,IAAI,QAAQ,GAAGG,MAAI,CAAC,IAAG;MACvB,IAAIA,MAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAEA,MAAI,CAAC,GAAG,CAAC,KAAK,GAAG;QAC3C,EAAAA,MAAI,CAAC,kBAAkB,CAACA,MAAI,CAAC,GAAG,EAAE,2CAA2C,EAAC,EAAA;MAChF,EAAEA,MAAI,CAAC,IAAG;MACVH,IAAI,GAAG,GAAGG,MAAI,CAAC,aAAa,GAAE;MAC9B,IAAI,CAAC,CAAC,KAAK,GAAG,iBAAiB,GAAG,gBAAgB,EAAE,GAAG,EAAE,MAAM,CAAC;QAC9D,EAAAA,MAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,wBAAwB,EAAC,EAAA;MAC7D,IAAI,IAAI,iBAAiB,CAAC,GAAG,EAAC;MAC9B,UAAU,GAAGA,MAAI,CAAC,IAAG;KACtB,MAAM;MACL,KAAK;KACN;IACD,KAAK,GAAG,MAAK;GACd;EACD,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;EACrD;;;;;AAKDC,IAAE,CAAC,QAAQ,GAAG,WAAW;EACvBJ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;EAC3BA,IAAI,IAAI,GAAGE,KAAE,CAAC,KAAI;EAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;IAC5B,IAAI,IAAI,CAAC,WAAW,EAAE,EAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,6BAA6B,GAAG,IAAI,EAAC,EAAA;IAC7F,IAAI,GAAGY,UAAY,CAAC,IAAI,EAAC;GAC1B;EACD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;CACpC;;AC9rBD;;;;;;;;;;;;;;;;AAgBA,AAkBOf,IAAM,OAAO,GAAG,QAAO;;;;;;;;;AAS9B,AAAO,SAAS,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE;EACpC,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;CACpC;;;;;;AAMD,AAAO,SAAS,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE;EACrD,OAAO,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC;CACrD;;;;;AAKD,AAAO,SAAS,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;EACxC,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;CACxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
\ No newline at end of file
diff --git a/templetes/node_modules/acorn/dist/acorn.mjs b/templetes/node_modules/acorn/dist/acorn.mjs
deleted file mode 100644
index d0475938..00000000
--- a/templetes/node_modules/acorn/dist/acorn.mjs
+++ /dev/null
@@ -1,4961 +0,0 @@
-// Reserved word lists for various dialects of the language
-
-var reservedWords = {
-  3: "abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile",
-  5: "class enum extends super const export import",
-  6: "enum",
-  strict: "implements interface let package private protected public static yield",
-  strictBind: "eval arguments"
-};
-
-// And the keywords
-
-var ecma5AndLessKeywords = "break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this";
-
-var keywords = {
-  5: ecma5AndLessKeywords,
-  "5module": ecma5AndLessKeywords + " export import",
-  6: ecma5AndLessKeywords + " const class extends export import super"
-};
-
-var keywordRelationalOperator = /^in(stanceof)?$/;
-
-// ## Character categories
-
-// Big ugly regular expressions that match characters in the
-// whitespace, identifier, and identifier-start categories. These
-// are only applied when a character is found to actually have a
-// code point above 128.
-// Generated by `bin/generate-identifier-regex.js`.
-var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7c6\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab67\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
-var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1df9\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f";
-
-var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
-var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
-
-nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
-
-// These are a run-length and offset encoded representation of the
-// >0xffff code points that are a valid part of identifiers. The
-// offset starts at 0x10000, and each pair of numbers represents an
-// offset to the next range, and then a size of the range. They were
-// generated by bin/generate-identifier-regex.js
-
-// eslint-disable-next-line comma-spacing
-var astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,477,28,11,0,9,21,155,22,13,52,76,44,33,24,27,35,30,0,12,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,0,33,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,230,43,117,63,32,0,161,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,270,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,754,9486,286,50,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,2357,44,11,6,17,0,370,43,1301,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42710,42,4148,12,221,3,5761,15,7472,3104,541];
-
-// eslint-disable-next-line comma-spacing
-var astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,525,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,4,9,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,232,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1014,0,2,54,8,3,19723,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,419,13,1495,6,110,6,6,9,792487,239];
-
-// This has a complexity linear to the value of the code. The
-// assumption is that looking up astral identifier characters is
-// rare.
-function isInAstralSet(code, set) {
-  var pos = 0x10000;
-  for (var i = 0; i < set.length; i += 2) {
-    pos += set[i];
-    if (pos > code) { return false }
-    pos += set[i + 1];
-    if (pos >= code) { return true }
-  }
-}
-
-// Test whether a given character code starts an identifier.
-
-function isIdentifierStart(code, astral) {
-  if (code < 65) { return code === 36 }
-  if (code < 91) { return true }
-  if (code < 97) { return code === 95 }
-  if (code < 123) { return true }
-  if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }
-  if (astral === false) { return false }
-  return isInAstralSet(code, astralIdentifierStartCodes)
-}
-
-// Test whether a given character is part of an identifier.
-
-function isIdentifierChar(code, astral) {
-  if (code < 48) { return code === 36 }
-  if (code < 58) { return true }
-  if (code < 65) { return false }
-  if (code < 91) { return true }
-  if (code < 97) { return code === 95 }
-  if (code < 123) { return true }
-  if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }
-  if (astral === false) { return false }
-  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)
-}
-
-// ## Token types
-
-// The assignment of fine-grained, information-carrying type objects
-// allows the tokenizer to store the information it has about a
-// token in a way that is very cheap for the parser to look up.
-
-// All token type variables start with an underscore, to make them
-// easy to recognize.
-
-// The `beforeExpr` property is used to disambiguate between regular
-// expressions and divisions. It is set on all token types that can
-// be followed by an expression (thus, a slash after them would be a
-// regular expression).
-//
-// The `startsExpr` property is used to check if the token ends a
-// `yield` expression. It is set on all token types that either can
-// directly start an expression (like a quotation mark) or can
-// continue an expression (like the body of a string).
-//
-// `isLoop` marks a keyword as starting a loop, which is important
-// to know when parsing a label, in order to allow or disallow
-// continue jumps to that label.
-
-var TokenType = function TokenType(label, conf) {
-  if ( conf === void 0 ) conf = {};
-
-  this.label = label;
-  this.keyword = conf.keyword;
-  this.beforeExpr = !!conf.beforeExpr;
-  this.startsExpr = !!conf.startsExpr;
-  this.isLoop = !!conf.isLoop;
-  this.isAssign = !!conf.isAssign;
-  this.prefix = !!conf.prefix;
-  this.postfix = !!conf.postfix;
-  this.binop = conf.binop || null;
-  this.updateContext = null;
-};
-
-function binop(name, prec) {
-  return new TokenType(name, {beforeExpr: true, binop: prec})
-}
-var beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};
-
-// Map keyword names to token types.
-
-var keywords$1 = {};
-
-// Succinct definitions of keyword token types
-function kw(name, options) {
-  if ( options === void 0 ) options = {};
-
-  options.keyword = name;
-  return keywords$1[name] = new TokenType(name, options)
-}
-
-var types = {
-  num: new TokenType("num", startsExpr),
-  regexp: new TokenType("regexp", startsExpr),
-  string: new TokenType("string", startsExpr),
-  name: new TokenType("name", startsExpr),
-  eof: new TokenType("eof"),
-
-  // Punctuation token types.
-  bracketL: new TokenType("[", {beforeExpr: true, startsExpr: true}),
-  bracketR: new TokenType("]"),
-  braceL: new TokenType("{", {beforeExpr: true, startsExpr: true}),
-  braceR: new TokenType("}"),
-  parenL: new TokenType("(", {beforeExpr: true, startsExpr: true}),
-  parenR: new TokenType(")"),
-  comma: new TokenType(",", beforeExpr),
-  semi: new TokenType(";", beforeExpr),
-  colon: new TokenType(":", beforeExpr),
-  dot: new TokenType("."),
-  question: new TokenType("?", beforeExpr),
-  arrow: new TokenType("=>", beforeExpr),
-  template: new TokenType("template"),
-  invalidTemplate: new TokenType("invalidTemplate"),
-  ellipsis: new TokenType("...", beforeExpr),
-  backQuote: new TokenType("`", startsExpr),
-  dollarBraceL: new TokenType("${", {beforeExpr: true, startsExpr: true}),
-
-  // Operators. These carry several kinds of properties to help the
-  // parser use them properly (the presence of these properties is
-  // what categorizes them as operators).
-  //
-  // `binop`, when present, specifies that this operator is a binary
-  // operator, and will refer to its precedence.
-  //
-  // `prefix` and `postfix` mark the operator as a prefix or postfix
-  // unary operator.
-  //
-  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as
-  // binary operators with a very low precedence, that should result
-  // in AssignmentExpression nodes.
-
-  eq: new TokenType("=", {beforeExpr: true, isAssign: true}),
-  assign: new TokenType("_=", {beforeExpr: true, isAssign: true}),
-  incDec: new TokenType("++/--", {prefix: true, postfix: true, startsExpr: true}),
-  prefix: new TokenType("!/~", {beforeExpr: true, prefix: true, startsExpr: true}),
-  logicalOR: binop("||", 1),
-  logicalAND: binop("&&", 2),
-  bitwiseOR: binop("|", 3),
-  bitwiseXOR: binop("^", 4),
-  bitwiseAND: binop("&", 5),
-  equality: binop("==/!=/===/!==", 6),
-  relational: binop("</>/<=/>=", 7),
-  bitShift: binop("<</>>/>>>", 8),
-  plusMin: new TokenType("+/-", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),
-  modulo: binop("%", 10),
-  star: binop("*", 10),
-  slash: binop("/", 10),
-  starstar: new TokenType("**", {beforeExpr: true}),
-
-  // Keyword token types.
-  _break: kw("break"),
-  _case: kw("case", beforeExpr),
-  _catch: kw("catch"),
-  _continue: kw("continue"),
-  _debugger: kw("debugger"),
-  _default: kw("default", beforeExpr),
-  _do: kw("do", {isLoop: true, beforeExpr: true}),
-  _else: kw("else", beforeExpr),
-  _finally: kw("finally"),
-  _for: kw("for", {isLoop: true}),
-  _function: kw("function", startsExpr),
-  _if: kw("if"),
-  _return: kw("return", beforeExpr),
-  _switch: kw("switch"),
-  _throw: kw("throw", beforeExpr),
-  _try: kw("try"),
-  _var: kw("var"),
-  _const: kw("const"),
-  _while: kw("while", {isLoop: true}),
-  _with: kw("with"),
-  _new: kw("new", {beforeExpr: true, startsExpr: true}),
-  _this: kw("this", startsExpr),
-  _super: kw("super", startsExpr),
-  _class: kw("class", startsExpr),
-  _extends: kw("extends", beforeExpr),
-  _export: kw("export"),
-  _import: kw("import", startsExpr),
-  _null: kw("null", startsExpr),
-  _true: kw("true", startsExpr),
-  _false: kw("false", startsExpr),
-  _in: kw("in", {beforeExpr: true, binop: 7}),
-  _instanceof: kw("instanceof", {beforeExpr: true, binop: 7}),
-  _typeof: kw("typeof", {beforeExpr: true, prefix: true, startsExpr: true}),
-  _void: kw("void", {beforeExpr: true, prefix: true, startsExpr: true}),
-  _delete: kw("delete", {beforeExpr: true, prefix: true, startsExpr: true})
-};
-
-// Matches a whole line break (where CRLF is considered a single
-// line break). Used to count lines.
-
-var lineBreak = /\r\n?|\n|\u2028|\u2029/;
-var lineBreakG = new RegExp(lineBreak.source, "g");
-
-function isNewLine(code, ecma2019String) {
-  return code === 10 || code === 13 || (!ecma2019String && (code === 0x2028 || code === 0x2029))
-}
-
-var nonASCIIwhitespace = /[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/;
-
-var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g;
-
-var ref = Object.prototype;
-var hasOwnProperty = ref.hasOwnProperty;
-var toString = ref.toString;
-
-// Checks if an object has a property.
-
-function has(obj, propName) {
-  return hasOwnProperty.call(obj, propName)
-}
-
-var isArray = Array.isArray || (function (obj) { return (
-  toString.call(obj) === "[object Array]"
-); });
-
-function wordsRegexp(words) {
-  return new RegExp("^(?:" + words.replace(/ /g, "|") + ")$")
-}
-
-// These are used when `options.locations` is on, for the
-// `startLoc` and `endLoc` properties.
-
-var Position = function Position(line, col) {
-  this.line = line;
-  this.column = col;
-};
-
-Position.prototype.offset = function offset (n) {
-  return new Position(this.line, this.column + n)
-};
-
-var SourceLocation = function SourceLocation(p, start, end) {
-  this.start = start;
-  this.end = end;
-  if (p.sourceFile !== null) { this.source = p.sourceFile; }
-};
-
-// The `getLineInfo` function is mostly useful when the
-// `locations` option is off (for performance reasons) and you
-// want to find the line/column position for a given character
-// offset. `input` should be the code string that the offset refers
-// into.
-
-function getLineInfo(input, offset) {
-  for (var line = 1, cur = 0;;) {
-    lineBreakG.lastIndex = cur;
-    var match = lineBreakG.exec(input);
-    if (match && match.index < offset) {
-      ++line;
-      cur = match.index + match[0].length;
-    } else {
-      return new Position(line, offset - cur)
-    }
-  }
-}
-
-// A second optional argument can be given to further configure
-// the parser process. These options are recognized:
-
-var defaultOptions = {
-  // `ecmaVersion` indicates the ECMAScript version to parse. Must be
-  // either 3, 5, 6 (2015), 7 (2016), 8 (2017), 9 (2018), or 10
-  // (2019). This influences support for strict mode, the set of
-  // reserved words, and support for new syntax features. The default
-  // is 9.
-  ecmaVersion: 9,
-  // `sourceType` indicates the mode the code should be parsed in.
-  // Can be either `"script"` or `"module"`. This influences global
-  // strict mode and parsing of `import` and `export` declarations.
-  sourceType: "script",
-  // `onInsertedSemicolon` can be a callback that will be called
-  // when a semicolon is automatically inserted. It will be passed
-  // the position of the comma as an offset, and if `locations` is
-  // enabled, it is given the location as a `{line, column}` object
-  // as second argument.
-  onInsertedSemicolon: null,
-  // `onTrailingComma` is similar to `onInsertedSemicolon`, but for
-  // trailing commas.
-  onTrailingComma: null,
-  // By default, reserved words are only enforced if ecmaVersion >= 5.
-  // Set `allowReserved` to a boolean value to explicitly turn this on
-  // an off. When this option has the value "never", reserved words
-  // and keywords can also not be used as property names.
-  allowReserved: null,
-  // When enabled, a return at the top level is not considered an
-  // error.
-  allowReturnOutsideFunction: false,
-  // When enabled, import/export statements are not constrained to
-  // appearing at the top of the program.
-  allowImportExportEverywhere: false,
-  // When enabled, await identifiers are allowed to appear at the top-level scope,
-  // but they are still not allowed in non-async functions.
-  allowAwaitOutsideFunction: false,
-  // When enabled, hashbang directive in the beginning of file
-  // is allowed and treated as a line comment.
-  allowHashBang: false,
-  // When `locations` is on, `loc` properties holding objects with
-  // `start` and `end` properties in `{line, column}` form (with
-  // line being 1-based and column 0-based) will be attached to the
-  // nodes.
-  locations: false,
-  // A function can be passed as `onToken` option, which will
-  // cause Acorn to call that function with object in the same
-  // format as tokens returned from `tokenizer().getToken()`. Note
-  // that you are not allowed to call the parser from the
-  // callback—that will corrupt its internal state.
-  onToken: null,
-  // A function can be passed as `onComment` option, which will
-  // cause Acorn to call that function with `(block, text, start,
-  // end)` parameters whenever a comment is skipped. `block` is a
-  // boolean indicating whether this is a block (`/* */`) comment,
-  // `text` is the content of the comment, and `start` and `end` are
-  // character offsets that denote the start and end of the comment.
-  // When the `locations` option is on, two more parameters are
-  // passed, the full `{line, column}` locations of the start and
-  // end of the comments. Note that you are not allowed to call the
-  // parser from the callback—that will corrupt its internal state.
-  onComment: null,
-  // Nodes have their start and end characters offsets recorded in
-  // `start` and `end` properties (directly on the node, rather than
-  // the `loc` object, which holds line/column data. To also add a
-  // [semi-standardized][range] `range` property holding a `[start,
-  // end]` array with the same numbers, set the `ranges` option to
-  // `true`.
-  //
-  // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678
-  ranges: false,
-  // It is possible to parse multiple files into a single AST by
-  // passing the tree produced by parsing the first file as
-  // `program` option in subsequent parses. This will add the
-  // toplevel forms of the parsed file to the `Program` (top) node
-  // of an existing parse tree.
-  program: null,
-  // When `locations` is on, you can pass this to record the source
-  // file in every node's `loc` object.
-  sourceFile: null,
-  // This value, if given, is stored in every node, whether
-  // `locations` is on or off.
-  directSourceFile: null,
-  // When enabled, parenthesized expressions are represented by
-  // (non-standard) ParenthesizedExpression nodes
-  preserveParens: false
-};
-
-// Interpret and default an options object
-
-function getOptions(opts) {
-  var options = {};
-
-  for (var opt in defaultOptions)
-    { options[opt] = opts && has(opts, opt) ? opts[opt] : defaultOptions[opt]; }
-
-  if (options.ecmaVersion >= 2015)
-    { options.ecmaVersion -= 2009; }
-
-  if (options.allowReserved == null)
-    { options.allowReserved = options.ecmaVersion < 5; }
-
-  if (isArray(options.onToken)) {
-    var tokens = options.onToken;
-    options.onToken = function (token) { return tokens.push(token); };
-  }
-  if (isArray(options.onComment))
-    { options.onComment = pushComment(options, options.onComment); }
-
-  return options
-}
-
-function pushComment(options, array) {
-  return function(block, text, start, end, startLoc, endLoc) {
-    var comment = {
-      type: block ? "Block" : "Line",
-      value: text,
-      start: start,
-      end: end
-    };
-    if (options.locations)
-      { comment.loc = new SourceLocation(this, startLoc, endLoc); }
-    if (options.ranges)
-      { comment.range = [start, end]; }
-    array.push(comment);
-  }
-}
-
-// Each scope gets a bitset that may contain these flags
-var
-    SCOPE_TOP = 1,
-    SCOPE_FUNCTION = 2,
-    SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION,
-    SCOPE_ASYNC = 4,
-    SCOPE_GENERATOR = 8,
-    SCOPE_ARROW = 16,
-    SCOPE_SIMPLE_CATCH = 32,
-    SCOPE_SUPER = 64,
-    SCOPE_DIRECT_SUPER = 128;
-
-function functionFlags(async, generator) {
-  return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)
-}
-
-// Used in checkLVal and declareName to determine the type of a binding
-var
-    BIND_NONE = 0, // Not a binding
-    BIND_VAR = 1, // Var-style binding
-    BIND_LEXICAL = 2, // Let- or const-style binding
-    BIND_FUNCTION = 3, // Function declaration
-    BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding
-    BIND_OUTSIDE = 5; // Special case for function names as bound inside the function
-
-var Parser = function Parser(options, input, startPos) {
-  this.options = options = getOptions(options);
-  this.sourceFile = options.sourceFile;
-  this.keywords = wordsRegexp(keywords[options.ecmaVersion >= 6 ? 6 : options.sourceType === "module" ? "5module" : 5]);
-  var reserved = "";
-  if (options.allowReserved !== true) {
-    for (var v = options.ecmaVersion;; v--)
-      { if (reserved = reservedWords[v]) { break } }
-    if (options.sourceType === "module") { reserved += " await"; }
-  }
-  this.reservedWords = wordsRegexp(reserved);
-  var reservedStrict = (reserved ? reserved + " " : "") + reservedWords.strict;
-  this.reservedWordsStrict = wordsRegexp(reservedStrict);
-  this.reservedWordsStrictBind = wordsRegexp(reservedStrict + " " + reservedWords.strictBind);
-  this.input = String(input);
-
-  // Used to signal to callers of `readWord1` whether the word
-  // contained any escape sequences. This is needed because words with
-  // escape sequences must not be interpreted as keywords.
-  this.containsEsc = false;
-
-  // Set up token state
-
-  // The current position of the tokenizer in the input.
-  if (startPos) {
-    this.pos = startPos;
-    this.lineStart = this.input.lastIndexOf("\n", startPos - 1) + 1;
-    this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;
-  } else {
-    this.pos = this.lineStart = 0;
-    this.curLine = 1;
-  }
-
-  // Properties of the current token:
-  // Its type
-  this.type = types.eof;
-  // For tokens that include more information than their type, the value
-  this.value = null;
-  // Its start and end offset
-  this.start = this.end = this.pos;
-  // And, if locations are used, the {line, column} object
-  // corresponding to those offsets
-  this.startLoc = this.endLoc = this.curPosition();
-
-  // Position information for the previous token
-  this.lastTokEndLoc = this.lastTokStartLoc = null;
-  this.lastTokStart = this.lastTokEnd = this.pos;
-
-  // The context stack is used to superficially track syntactic
-  // context to predict whether a regular expression is allowed in a
-  // given position.
-  this.context = this.initialContext();
-  this.exprAllowed = true;
-
-  // Figure out if it's a module code.
-  this.inModule = options.sourceType === "module";
-  this.strict = this.inModule || this.strictDirective(this.pos);
-
-  // Used to signify the start of a potential arrow function
-  this.potentialArrowAt = -1;
-
-  // Positions to delayed-check that yield/await does not exist in default parameters.
-  this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;
-  // Labels in scope.
-  this.labels = [];
-  // Thus-far undefined exports.
-  this.undefinedExports = {};
-
-  // If enabled, skip leading hashbang line.
-  if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === "#!")
-    { this.skipLineComment(2); }
-
-  // Scope tracking for duplicate variable names (see scope.js)
-  this.scopeStack = [];
-  this.enterScope(SCOPE_TOP);
-
-  // For RegExp validation
-  this.regexpState = null;
-};
-
-var prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true } };
-
-Parser.prototype.parse = function parse () {
-  var node = this.options.program || this.startNode();
-  this.nextToken();
-  return this.parseTopLevel(node)
-};
-
-prototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };
-prototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 };
-prototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 };
-prototypeAccessors.allowSuper.get = function () { return (this.currentThisScope().flags & SCOPE_SUPER) > 0 };
-prototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };
-prototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };
-
-// Switch to a getter for 7.0.0.
-Parser.prototype.inNonArrowFunction = function inNonArrowFunction () { return (this.currentThisScope().flags & SCOPE_FUNCTION) > 0 };
-
-Parser.extend = function extend () {
-    var plugins = [], len = arguments.length;
-    while ( len-- ) plugins[ len ] = arguments[ len ];
-
-  var cls = this;
-  for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }
-  return cls
-};
-
-Parser.parse = function parse (input, options) {
-  return new this(options, input).parse()
-};
-
-Parser.parseExpressionAt = function parseExpressionAt (input, pos, options) {
-  var parser = new this(options, input, pos);
-  parser.nextToken();
-  return parser.parseExpression()
-};
-
-Parser.tokenizer = function tokenizer (input, options) {
-  return new this(options, input)
-};
-
-Object.defineProperties( Parser.prototype, prototypeAccessors );
-
-var pp = Parser.prototype;
-
-// ## Parser utilities
-
-var literal = /^(?:'((?:\\.|[^'])*?)'|"((?:\\.|[^"])*?)")/;
-pp.strictDirective = function(start) {
-  for (;;) {
-    // Try to find string literal.
-    skipWhiteSpace.lastIndex = start;
-    start += skipWhiteSpace.exec(this.input)[0].length;
-    var match = literal.exec(this.input.slice(start));
-    if (!match) { return false }
-    if ((match[1] || match[2]) === "use strict") { return true }
-    start += match[0].length;
-
-    // Skip semicolon, if any.
-    skipWhiteSpace.lastIndex = start;
-    start += skipWhiteSpace.exec(this.input)[0].length;
-    if (this.input[start] === ";")
-      { start++; }
-  }
-};
-
-// Predicate that tests whether the next token is of the given
-// type, and if yes, consumes it as a side effect.
-
-pp.eat = function(type) {
-  if (this.type === type) {
-    this.next();
-    return true
-  } else {
-    return false
-  }
-};
-
-// Tests whether parsed token is a contextual keyword.
-
-pp.isContextual = function(name) {
-  return this.type === types.name && this.value === name && !this.containsEsc
-};
-
-// Consumes contextual keyword if possible.
-
-pp.eatContextual = function(name) {
-  if (!this.isContextual(name)) { return false }
-  this.next();
-  return true
-};
-
-// Asserts that following token is given contextual keyword.
-
-pp.expectContextual = function(name) {
-  if (!this.eatContextual(name)) { this.unexpected(); }
-};
-
-// Test whether a semicolon can be inserted at the current position.
-
-pp.canInsertSemicolon = function() {
-  return this.type === types.eof ||
-    this.type === types.braceR ||
-    lineBreak.test(this.input.slice(this.lastTokEnd, this.start))
-};
-
-pp.insertSemicolon = function() {
-  if (this.canInsertSemicolon()) {
-    if (this.options.onInsertedSemicolon)
-      { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }
-    return true
-  }
-};
-
-// Consume a semicolon, or, failing that, see if we are allowed to
-// pretend that there is a semicolon at this position.
-
-pp.semicolon = function() {
-  if (!this.eat(types.semi) && !this.insertSemicolon()) { this.unexpected(); }
-};
-
-pp.afterTrailingComma = function(tokType, notNext) {
-  if (this.type === tokType) {
-    if (this.options.onTrailingComma)
-      { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }
-    if (!notNext)
-      { this.next(); }
-    return true
-  }
-};
-
-// Expect a token of a given type. If found, consume it, otherwise,
-// raise an unexpected token error.
-
-pp.expect = function(type) {
-  this.eat(type) || this.unexpected();
-};
-
-// Raise an unexpected token error.
-
-pp.unexpected = function(pos) {
-  this.raise(pos != null ? pos : this.start, "Unexpected token");
-};
-
-function DestructuringErrors() {
-  this.shorthandAssign =
-  this.trailingComma =
-  this.parenthesizedAssign =
-  this.parenthesizedBind =
-  this.doubleProto =
-    -1;
-}
-
-pp.checkPatternErrors = function(refDestructuringErrors, isAssign) {
-  if (!refDestructuringErrors) { return }
-  if (refDestructuringErrors.trailingComma > -1)
-    { this.raiseRecoverable(refDestructuringErrors.trailingComma, "Comma is not permitted after the rest element"); }
-  var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;
-  if (parens > -1) { this.raiseRecoverable(parens, "Parenthesized pattern"); }
-};
-
-pp.checkExpressionErrors = function(refDestructuringErrors, andThrow) {
-  if (!refDestructuringErrors) { return false }
-  var shorthandAssign = refDestructuringErrors.shorthandAssign;
-  var doubleProto = refDestructuringErrors.doubleProto;
-  if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }
-  if (shorthandAssign >= 0)
-    { this.raise(shorthandAssign, "Shorthand property assignments are valid only in destructuring patterns"); }
-  if (doubleProto >= 0)
-    { this.raiseRecoverable(doubleProto, "Redefinition of __proto__ property"); }
-};
-
-pp.checkYieldAwaitInDefaultParams = function() {
-  if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))
-    { this.raise(this.yieldPos, "Yield expression cannot be a default value"); }
-  if (this.awaitPos)
-    { this.raise(this.awaitPos, "Await expression cannot be a default value"); }
-};
-
-pp.isSimpleAssignTarget = function(expr) {
-  if (expr.type === "ParenthesizedExpression")
-    { return this.isSimpleAssignTarget(expr.expression) }
-  return expr.type === "Identifier" || expr.type === "MemberExpression"
-};
-
-var pp$1 = Parser.prototype;
-
-// ### Statement parsing
-
-// Parse a program. Initializes the parser, reads any number of
-// statements, and wraps them in a Program node.  Optionally takes a
-// `program` argument.  If present, the statements will be appended
-// to its body instead of creating a new node.
-
-pp$1.parseTopLevel = function(node) {
-  var exports = {};
-  if (!node.body) { node.body = []; }
-  while (this.type !== types.eof) {
-    var stmt = this.parseStatement(null, true, exports);
-    node.body.push(stmt);
-  }
-  if (this.inModule)
-    { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)
-      {
-        var name = list[i];
-
-        this.raiseRecoverable(this.undefinedExports[name].start, ("Export '" + name + "' is not defined"));
-      } }
-  this.adaptDirectivePrologue(node.body);
-  this.next();
-  node.sourceType = this.options.sourceType;
-  return this.finishNode(node, "Program")
-};
-
-var loopLabel = {kind: "loop"}, switchLabel = {kind: "switch"};
-
-pp$1.isLet = function(context) {
-  if (this.options.ecmaVersion < 6 || !this.isContextual("let")) { return false }
-  skipWhiteSpace.lastIndex = this.pos;
-  var skip = skipWhiteSpace.exec(this.input);
-  var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);
-  // For ambiguous cases, determine if a LexicalDeclaration (or only a
-  // Statement) is allowed here. If context is not empty then only a Statement
-  // is allowed. However, `let [` is an explicit negative lookahead for
-  // ExpressionStatement, so special-case it first.
-  if (nextCh === 91) { return true } // '['
-  if (context) { return false }
-
-  if (nextCh === 123) { return true } // '{'
-  if (isIdentifierStart(nextCh, true)) {
-    var pos = next + 1;
-    while (isIdentifierChar(this.input.charCodeAt(pos), true)) { ++pos; }
-    var ident = this.input.slice(next, pos);
-    if (!keywordRelationalOperator.test(ident)) { return true }
-  }
-  return false
-};
-
-// check 'async [no LineTerminator here] function'
-// - 'async /*foo*/ function' is OK.
-// - 'async /*\n*/ function' is invalid.
-pp$1.isAsyncFunction = function() {
-  if (this.options.ecmaVersion < 8 || !this.isContextual("async"))
-    { return false }
-
-  skipWhiteSpace.lastIndex = this.pos;
-  var skip = skipWhiteSpace.exec(this.input);
-  var next = this.pos + skip[0].length;
-  return !lineBreak.test(this.input.slice(this.pos, next)) &&
-    this.input.slice(next, next + 8) === "function" &&
-    (next + 8 === this.input.length || !isIdentifierChar(this.input.charAt(next + 8)))
-};
-
-// Parse a single statement.
-//
-// If expecting a statement and finding a slash operator, parse a
-// regular expression literal. This is to handle cases like
-// `if (foo) /blah/.exec(foo)`, where looking at the previous token
-// does not help.
-
-pp$1.parseStatement = function(context, topLevel, exports) {
-  var starttype = this.type, node = this.startNode(), kind;
-
-  if (this.isLet(context)) {
-    starttype = types._var;
-    kind = "let";
-  }
-
-  // Most types of statements are recognized by the keyword they
-  // start with. Many are trivial to parse, some require a bit of
-  // complexity.
-
-  switch (starttype) {
-  case types._break: case types._continue: return this.parseBreakContinueStatement(node, starttype.keyword)
-  case types._debugger: return this.parseDebuggerStatement(node)
-  case types._do: return this.parseDoStatement(node)
-  case types._for: return this.parseForStatement(node)
-  case types._function:
-    // Function as sole body of either an if statement or a labeled statement
-    // works, but not when it is part of a labeled statement that is the sole
-    // body of an if statement.
-    if ((context && (this.strict || context !== "if" && context !== "label")) && this.options.ecmaVersion >= 6) { this.unexpected(); }
-    return this.parseFunctionStatement(node, false, !context)
-  case types._class:
-    if (context) { this.unexpected(); }
-    return this.parseClass(node, true)
-  case types._if: return this.parseIfStatement(node)
-  case types._return: return this.parseReturnStatement(node)
-  case types._switch: return this.parseSwitchStatement(node)
-  case types._throw: return this.parseThrowStatement(node)
-  case types._try: return this.parseTryStatement(node)
-  case types._const: case types._var:
-    kind = kind || this.value;
-    if (context && kind !== "var") { this.unexpected(); }
-    return this.parseVarStatement(node, kind)
-  case types._while: return this.parseWhileStatement(node)
-  case types._with: return this.parseWithStatement(node)
-  case types.braceL: return this.parseBlock(true, node)
-  case types.semi: return this.parseEmptyStatement(node)
-  case types._export:
-  case types._import:
-    if (this.options.ecmaVersion > 10 && starttype === types._import) {
-      skipWhiteSpace.lastIndex = this.pos;
-      var skip = skipWhiteSpace.exec(this.input);
-      var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);
-      if (nextCh === 40) // '('
-        { return this.parseExpressionStatement(node, this.parseExpression()) }
-    }
-
-    if (!this.options.allowImportExportEverywhere) {
-      if (!topLevel)
-        { this.raise(this.start, "'import' and 'export' may only appear at the top level"); }
-      if (!this.inModule)
-        { this.raise(this.start, "'import' and 'export' may appear only with 'sourceType: module'"); }
-    }
-    return starttype === types._import ? this.parseImport(node) : this.parseExport(node, exports)
-
-    // If the statement does not start with a statement keyword or a
-    // brace, it's an ExpressionStatement or LabeledStatement. We
-    // simply start parsing an expression, and afterwards, if the
-    // next token is a colon and the expression was a simple
-    // Identifier node, we switch to interpreting it as a label.
-  default:
-    if (this.isAsyncFunction()) {
-      if (context) { this.unexpected(); }
-      this.next();
-      return this.parseFunctionStatement(node, true, !context)
-    }
-
-    var maybeName = this.value, expr = this.parseExpression();
-    if (starttype === types.name && expr.type === "Identifier" && this.eat(types.colon))
-      { return this.parseLabeledStatement(node, maybeName, expr, context) }
-    else { return this.parseExpressionStatement(node, expr) }
-  }
-};
-
-pp$1.parseBreakContinueStatement = function(node, keyword) {
-  var isBreak = keyword === "break";
-  this.next();
-  if (this.eat(types.semi) || this.insertSemicolon()) { node.label = null; }
-  else if (this.type !== types.name) { this.unexpected(); }
-  else {
-    node.label = this.parseIdent();
-    this.semicolon();
-  }
-
-  // Verify that there is an actual destination to break or
-  // continue to.
-  var i = 0;
-  for (; i < this.labels.length; ++i) {
-    var lab = this.labels[i];
-    if (node.label == null || lab.name === node.label.name) {
-      if (lab.kind != null && (isBreak || lab.kind === "loop")) { break }
-      if (node.label && isBreak) { break }
-    }
-  }
-  if (i === this.labels.length) { this.raise(node.start, "Unsyntactic " + keyword); }
-  return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement")
-};
-
-pp$1.parseDebuggerStatement = function(node) {
-  this.next();
-  this.semicolon();
-  return this.finishNode(node, "DebuggerStatement")
-};
-
-pp$1.parseDoStatement = function(node) {
-  this.next();
-  this.labels.push(loopLabel);
-  node.body = this.parseStatement("do");
-  this.labels.pop();
-  this.expect(types._while);
-  node.test = this.parseParenExpression();
-  if (this.options.ecmaVersion >= 6)
-    { this.eat(types.semi); }
-  else
-    { this.semicolon(); }
-  return this.finishNode(node, "DoWhileStatement")
-};
-
-// Disambiguating between a `for` and a `for`/`in` or `for`/`of`
-// loop is non-trivial. Basically, we have to parse the init `var`
-// statement or expression, disallowing the `in` operator (see
-// the second parameter to `parseExpression`), and then check
-// whether the next token is `in` or `of`. When there is no init
-// part (semicolon immediately after the opening parenthesis), it
-// is a regular `for` loop.
-
-pp$1.parseForStatement = function(node) {
-  this.next();
-  var awaitAt = (this.options.ecmaVersion >= 9 && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction)) && this.eatContextual("await")) ? this.lastTokStart : -1;
-  this.labels.push(loopLabel);
-  this.enterScope(0);
-  this.expect(types.parenL);
-  if (this.type === types.semi) {
-    if (awaitAt > -1) { this.unexpected(awaitAt); }
-    return this.parseFor(node, null)
-  }
-  var isLet = this.isLet();
-  if (this.type === types._var || this.type === types._const || isLet) {
-    var init$1 = this.startNode(), kind = isLet ? "let" : this.value;
-    this.next();
-    this.parseVar(init$1, true, kind);
-    this.finishNode(init$1, "VariableDeclaration");
-    if ((this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) && init$1.declarations.length === 1) {
-      if (this.options.ecmaVersion >= 9) {
-        if (this.type === types._in) {
-          if (awaitAt > -1) { this.unexpected(awaitAt); }
-        } else { node.await = awaitAt > -1; }
-      }
-      return this.parseForIn(node, init$1)
-    }
-    if (awaitAt > -1) { this.unexpected(awaitAt); }
-    return this.parseFor(node, init$1)
-  }
-  var refDestructuringErrors = new DestructuringErrors;
-  var init = this.parseExpression(true, refDestructuringErrors);
-  if (this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) {
-    if (this.options.ecmaVersion >= 9) {
-      if (this.type === types._in) {
-        if (awaitAt > -1) { this.unexpected(awaitAt); }
-      } else { node.await = awaitAt > -1; }
-    }
-    this.toAssignable(init, false, refDestructuringErrors);
-    this.checkLVal(init);
-    return this.parseForIn(node, init)
-  } else {
-    this.checkExpressionErrors(refDestructuringErrors, true);
-  }
-  if (awaitAt > -1) { this.unexpected(awaitAt); }
-  return this.parseFor(node, init)
-};
-
-pp$1.parseFunctionStatement = function(node, isAsync, declarationPosition) {
-  this.next();
-  return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)
-};
-
-pp$1.parseIfStatement = function(node) {
-  this.next();
-  node.test = this.parseParenExpression();
-  // allow function declarations in branches, but only in non-strict mode
-  node.consequent = this.parseStatement("if");
-  node.alternate = this.eat(types._else) ? this.parseStatement("if") : null;
-  return this.finishNode(node, "IfStatement")
-};
-
-pp$1.parseReturnStatement = function(node) {
-  if (!this.inFunction && !this.options.allowReturnOutsideFunction)
-    { this.raise(this.start, "'return' outside of function"); }
-  this.next();
-
-  // In `return` (and `break`/`continue`), the keywords with
-  // optional arguments, we eagerly look for a semicolon or the
-  // possibility to insert one.
-
-  if (this.eat(types.semi) || this.insertSemicolon()) { node.argument = null; }
-  else { node.argument = this.parseExpression(); this.semicolon(); }
-  return this.finishNode(node, "ReturnStatement")
-};
-
-pp$1.parseSwitchStatement = function(node) {
-  this.next();
-  node.discriminant = this.parseParenExpression();
-  node.cases = [];
-  this.expect(types.braceL);
-  this.labels.push(switchLabel);
-  this.enterScope(0);
-
-  // Statements under must be grouped (by label) in SwitchCase
-  // nodes. `cur` is used to keep the node that we are currently
-  // adding statements to.
-
-  var cur;
-  for (var sawDefault = false; this.type !== types.braceR;) {
-    if (this.type === types._case || this.type === types._default) {
-      var isCase = this.type === types._case;
-      if (cur) { this.finishNode(cur, "SwitchCase"); }
-      node.cases.push(cur = this.startNode());
-      cur.consequent = [];
-      this.next();
-      if (isCase) {
-        cur.test = this.parseExpression();
-      } else {
-        if (sawDefault) { this.raiseRecoverable(this.lastTokStart, "Multiple default clauses"); }
-        sawDefault = true;
-        cur.test = null;
-      }
-      this.expect(types.colon);
-    } else {
-      if (!cur) { this.unexpected(); }
-      cur.consequent.push(this.parseStatement(null));
-    }
-  }
-  this.exitScope();
-  if (cur) { this.finishNode(cur, "SwitchCase"); }
-  this.next(); // Closing brace
-  this.labels.pop();
-  return this.finishNode(node, "SwitchStatement")
-};
-
-pp$1.parseThrowStatement = function(node) {
-  this.next();
-  if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))
-    { this.raise(this.lastTokEnd, "Illegal newline after throw"); }
-  node.argument = this.parseExpression();
-  this.semicolon();
-  return this.finishNode(node, "ThrowStatement")
-};
-
-// Reused empty array added for node fields that are always empty.
-
-var empty = [];
-
-pp$1.parseTryStatement = function(node) {
-  this.next();
-  node.block = this.parseBlock();
-  node.handler = null;
-  if (this.type === types._catch) {
-    var clause = this.startNode();
-    this.next();
-    if (this.eat(types.parenL)) {
-      clause.param = this.parseBindingAtom();
-      var simple = clause.param.type === "Identifier";
-      this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);
-      this.checkLVal(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);
-      this.expect(types.parenR);
-    } else {
-      if (this.options.ecmaVersion < 10) { this.unexpected(); }
-      clause.param = null;
-      this.enterScope(0);
-    }
-    clause.body = this.parseBlock(false);
-    this.exitScope();
-    node.handler = this.finishNode(clause, "CatchClause");
-  }
-  node.finalizer = this.eat(types._finally) ? this.parseBlock() : null;
-  if (!node.handler && !node.finalizer)
-    { this.raise(node.start, "Missing catch or finally clause"); }
-  return this.finishNode(node, "TryStatement")
-};
-
-pp$1.parseVarStatement = function(node, kind) {
-  this.next();
-  this.parseVar(node, false, kind);
-  this.semicolon();
-  return this.finishNode(node, "VariableDeclaration")
-};
-
-pp$1.parseWhileStatement = function(node) {
-  this.next();
-  node.test = this.parseParenExpression();
-  this.labels.push(loopLabel);
-  node.body = this.parseStatement("while");
-  this.labels.pop();
-  return this.finishNode(node, "WhileStatement")
-};
-
-pp$1.parseWithStatement = function(node) {
-  if (this.strict) { this.raise(this.start, "'with' in strict mode"); }
-  this.next();
-  node.object = this.parseParenExpression();
-  node.body = this.parseStatement("with");
-  return this.finishNode(node, "WithStatement")
-};
-
-pp$1.parseEmptyStatement = function(node) {
-  this.next();
-  return this.finishNode(node, "EmptyStatement")
-};
-
-pp$1.parseLabeledStatement = function(node, maybeName, expr, context) {
-  for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)
-    {
-    var label = list[i$1];
-
-    if (label.name === maybeName)
-      { this.raise(expr.start, "Label '" + maybeName + "' is already declared");
-  } }
-  var kind = this.type.isLoop ? "loop" : this.type === types._switch ? "switch" : null;
-  for (var i = this.labels.length - 1; i >= 0; i--) {
-    var label$1 = this.labels[i];
-    if (label$1.statementStart === node.start) {
-      // Update information about previous labels on this node
-      label$1.statementStart = this.start;
-      label$1.kind = kind;
-    } else { break }
-  }
-  this.labels.push({name: maybeName, kind: kind, statementStart: this.start});
-  node.body = this.parseStatement(context ? context.indexOf("label") === -1 ? context + "label" : context : "label");
-  this.labels.pop();
-  node.label = expr;
-  return this.finishNode(node, "LabeledStatement")
-};
-
-pp$1.parseExpressionStatement = function(node, expr) {
-  node.expression = expr;
-  this.semicolon();
-  return this.finishNode(node, "ExpressionStatement")
-};
-
-// Parse a semicolon-enclosed block of statements, handling `"use
-// strict"` declarations when `allowStrict` is true (used for
-// function bodies).
-
-pp$1.parseBlock = function(createNewLexicalScope, node) {
-  if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;
-  if ( node === void 0 ) node = this.startNode();
-
-  node.body = [];
-  this.expect(types.braceL);
-  if (createNewLexicalScope) { this.enterScope(0); }
-  while (!this.eat(types.braceR)) {
-    var stmt = this.parseStatement(null);
-    node.body.push(stmt);
-  }
-  if (createNewLexicalScope) { this.exitScope(); }
-  return this.finishNode(node, "BlockStatement")
-};
-
-// Parse a regular `for` loop. The disambiguation code in
-// `parseStatement` will already have parsed the init statement or
-// expression.
-
-pp$1.parseFor = function(node, init) {
-  node.init = init;
-  this.expect(types.semi);
-  node.test = this.type === types.semi ? null : this.parseExpression();
-  this.expect(types.semi);
-  node.update = this.type === types.parenR ? null : this.parseExpression();
-  this.expect(types.parenR);
-  node.body = this.parseStatement("for");
-  this.exitScope();
-  this.labels.pop();
-  return this.finishNode(node, "ForStatement")
-};
-
-// Parse a `for`/`in` and `for`/`of` loop, which are almost
-// same from parser's perspective.
-
-pp$1.parseForIn = function(node, init) {
-  var isForIn = this.type === types._in;
-  this.next();
-
-  if (
-    init.type === "VariableDeclaration" &&
-    init.declarations[0].init != null &&
-    (
-      !isForIn ||
-      this.options.ecmaVersion < 8 ||
-      this.strict ||
-      init.kind !== "var" ||
-      init.declarations[0].id.type !== "Identifier"
-    )
-  ) {
-    this.raise(
-      init.start,
-      ((isForIn ? "for-in" : "for-of") + " loop variable declaration may not have an initializer")
-    );
-  } else if (init.type === "AssignmentPattern") {
-    this.raise(init.start, "Invalid left-hand side in for-loop");
-  }
-  node.left = init;
-  node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();
-  this.expect(types.parenR);
-  node.body = this.parseStatement("for");
-  this.exitScope();
-  this.labels.pop();
-  return this.finishNode(node, isForIn ? "ForInStatement" : "ForOfStatement")
-};
-
-// Parse a list of variable declarations.
-
-pp$1.parseVar = function(node, isFor, kind) {
-  node.declarations = [];
-  node.kind = kind;
-  for (;;) {
-    var decl = this.startNode();
-    this.parseVarId(decl, kind);
-    if (this.eat(types.eq)) {
-      decl.init = this.parseMaybeAssign(isFor);
-    } else if (kind === "const" && !(this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of")))) {
-      this.unexpected();
-    } else if (decl.id.type !== "Identifier" && !(isFor && (this.type === types._in || this.isContextual("of")))) {
-      this.raise(this.lastTokEnd, "Complex binding patterns require an initialization value");
-    } else {
-      decl.init = null;
-    }
-    node.declarations.push(this.finishNode(decl, "VariableDeclarator"));
-    if (!this.eat(types.comma)) { break }
-  }
-  return node
-};
-
-pp$1.parseVarId = function(decl, kind) {
-  decl.id = this.parseBindingAtom();
-  this.checkLVal(decl.id, kind === "var" ? BIND_VAR : BIND_LEXICAL, false);
-};
-
-var FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;
-
-// Parse a function declaration or literal (depending on the
-// `statement & FUNC_STATEMENT`).
-
-// Remove `allowExpressionBody` for 7.0.0, as it is only called with false
-pp$1.parseFunction = function(node, statement, allowExpressionBody, isAsync) {
-  this.initFunction(node);
-  if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {
-    if (this.type === types.star && (statement & FUNC_HANGING_STATEMENT))
-      { this.unexpected(); }
-    node.generator = this.eat(types.star);
-  }
-  if (this.options.ecmaVersion >= 8)
-    { node.async = !!isAsync; }
-
-  if (statement & FUNC_STATEMENT) {
-    node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types.name ? null : this.parseIdent();
-    if (node.id && !(statement & FUNC_HANGING_STATEMENT))
-      // If it is a regular function declaration in sloppy mode, then it is
-      // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding
-      // mode depends on properties of the current scope (see
-      // treatFunctionsAsVar).
-      { this.checkLVal(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }
-  }
-
-  var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-  this.yieldPos = 0;
-  this.awaitPos = 0;
-  this.awaitIdentPos = 0;
-  this.enterScope(functionFlags(node.async, node.generator));
-
-  if (!(statement & FUNC_STATEMENT))
-    { node.id = this.type === types.name ? this.parseIdent() : null; }
-
-  this.parseFunctionParams(node);
-  this.parseFunctionBody(node, allowExpressionBody, false);
-
-  this.yieldPos = oldYieldPos;
-  this.awaitPos = oldAwaitPos;
-  this.awaitIdentPos = oldAwaitIdentPos;
-  return this.finishNode(node, (statement & FUNC_STATEMENT) ? "FunctionDeclaration" : "FunctionExpression")
-};
-
-pp$1.parseFunctionParams = function(node) {
-  this.expect(types.parenL);
-  node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);
-  this.checkYieldAwaitInDefaultParams();
-};
-
-// Parse a class declaration or literal (depending on the
-// `isStatement` parameter).
-
-pp$1.parseClass = function(node, isStatement) {
-  this.next();
-
-  // ecma-262 14.6 Class Definitions
-  // A class definition is always strict mode code.
-  var oldStrict = this.strict;
-  this.strict = true;
-
-  this.parseClassId(node, isStatement);
-  this.parseClassSuper(node);
-  var classBody = this.startNode();
-  var hadConstructor = false;
-  classBody.body = [];
-  this.expect(types.braceL);
-  while (!this.eat(types.braceR)) {
-    var element = this.parseClassElement(node.superClass !== null);
-    if (element) {
-      classBody.body.push(element);
-      if (element.type === "MethodDefinition" && element.kind === "constructor") {
-        if (hadConstructor) { this.raise(element.start, "Duplicate constructor in the same class"); }
-        hadConstructor = true;
-      }
-    }
-  }
-  node.body = this.finishNode(classBody, "ClassBody");
-  this.strict = oldStrict;
-  return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression")
-};
-
-pp$1.parseClassElement = function(constructorAllowsSuper) {
-  var this$1 = this;
-
-  if (this.eat(types.semi)) { return null }
-
-  var method = this.startNode();
-  var tryContextual = function (k, noLineBreak) {
-    if ( noLineBreak === void 0 ) noLineBreak = false;
-
-    var start = this$1.start, startLoc = this$1.startLoc;
-    if (!this$1.eatContextual(k)) { return false }
-    if (this$1.type !== types.parenL && (!noLineBreak || !this$1.canInsertSemicolon())) { return true }
-    if (method.key) { this$1.unexpected(); }
-    method.computed = false;
-    method.key = this$1.startNodeAt(start, startLoc);
-    method.key.name = k;
-    this$1.finishNode(method.key, "Identifier");
-    return false
-  };
-
-  method.kind = "method";
-  method.static = tryContextual("static");
-  var isGenerator = this.eat(types.star);
-  var isAsync = false;
-  if (!isGenerator) {
-    if (this.options.ecmaVersion >= 8 && tryContextual("async", true)) {
-      isAsync = true;
-      isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star);
-    } else if (tryContextual("get")) {
-      method.kind = "get";
-    } else if (tryContextual("set")) {
-      method.kind = "set";
-    }
-  }
-  if (!method.key) { this.parsePropertyName(method); }
-  var key = method.key;
-  var allowsDirectSuper = false;
-  if (!method.computed && !method.static && (key.type === "Identifier" && key.name === "constructor" ||
-      key.type === "Literal" && key.value === "constructor")) {
-    if (method.kind !== "method") { this.raise(key.start, "Constructor can't have get/set modifier"); }
-    if (isGenerator) { this.raise(key.start, "Constructor can't be a generator"); }
-    if (isAsync) { this.raise(key.start, "Constructor can't be an async method"); }
-    method.kind = "constructor";
-    allowsDirectSuper = constructorAllowsSuper;
-  } else if (method.static && key.type === "Identifier" && key.name === "prototype") {
-    this.raise(key.start, "Classes may not have a static property named prototype");
-  }
-  this.parseClassMethod(method, isGenerator, isAsync, allowsDirectSuper);
-  if (method.kind === "get" && method.value.params.length !== 0)
-    { this.raiseRecoverable(method.value.start, "getter should have no params"); }
-  if (method.kind === "set" && method.value.params.length !== 1)
-    { this.raiseRecoverable(method.value.start, "setter should have exactly one param"); }
-  if (method.kind === "set" && method.value.params[0].type === "RestElement")
-    { this.raiseRecoverable(method.value.params[0].start, "Setter cannot use rest params"); }
-  return method
-};
-
-pp$1.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {
-  method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);
-  return this.finishNode(method, "MethodDefinition")
-};
-
-pp$1.parseClassId = function(node, isStatement) {
-  if (this.type === types.name) {
-    node.id = this.parseIdent();
-    if (isStatement)
-      { this.checkLVal(node.id, BIND_LEXICAL, false); }
-  } else {
-    if (isStatement === true)
-      { this.unexpected(); }
-    node.id = null;
-  }
-};
-
-pp$1.parseClassSuper = function(node) {
-  node.superClass = this.eat(types._extends) ? this.parseExprSubscripts() : null;
-};
-
-// Parses module export declaration.
-
-pp$1.parseExport = function(node, exports) {
-  this.next();
-  // export * from '...'
-  if (this.eat(types.star)) {
-    this.expectContextual("from");
-    if (this.type !== types.string) { this.unexpected(); }
-    node.source = this.parseExprAtom();
-    this.semicolon();
-    return this.finishNode(node, "ExportAllDeclaration")
-  }
-  if (this.eat(types._default)) { // export default ...
-    this.checkExport(exports, "default", this.lastTokStart);
-    var isAsync;
-    if (this.type === types._function || (isAsync = this.isAsyncFunction())) {
-      var fNode = this.startNode();
-      this.next();
-      if (isAsync) { this.next(); }
-      node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync);
-    } else if (this.type === types._class) {
-      var cNode = this.startNode();
-      node.declaration = this.parseClass(cNode, "nullableID");
-    } else {
-      node.declaration = this.parseMaybeAssign();
-      this.semicolon();
-    }
-    return this.finishNode(node, "ExportDefaultDeclaration")
-  }
-  // export var|const|let|function|class ...
-  if (this.shouldParseExportStatement()) {
-    node.declaration = this.parseStatement(null);
-    if (node.declaration.type === "VariableDeclaration")
-      { this.checkVariableExport(exports, node.declaration.declarations); }
-    else
-      { this.checkExport(exports, node.declaration.id.name, node.declaration.id.start); }
-    node.specifiers = [];
-    node.source = null;
-  } else { // export { x, y as z } [from '...']
-    node.declaration = null;
-    node.specifiers = this.parseExportSpecifiers(exports);
-    if (this.eatContextual("from")) {
-      if (this.type !== types.string) { this.unexpected(); }
-      node.source = this.parseExprAtom();
-    } else {
-      for (var i = 0, list = node.specifiers; i < list.length; i += 1) {
-        // check for keywords used as local names
-        var spec = list[i];
-
-        this.checkUnreserved(spec.local);
-        // check if export is defined
-        this.checkLocalExport(spec.local);
-      }
-
-      node.source = null;
-    }
-    this.semicolon();
-  }
-  return this.finishNode(node, "ExportNamedDeclaration")
-};
-
-pp$1.checkExport = function(exports, name, pos) {
-  if (!exports) { return }
-  if (has(exports, name))
-    { this.raiseRecoverable(pos, "Duplicate export '" + name + "'"); }
-  exports[name] = true;
-};
-
-pp$1.checkPatternExport = function(exports, pat) {
-  var type = pat.type;
-  if (type === "Identifier")
-    { this.checkExport(exports, pat.name, pat.start); }
-  else if (type === "ObjectPattern")
-    { for (var i = 0, list = pat.properties; i < list.length; i += 1)
-      {
-        var prop = list[i];
-
-        this.checkPatternExport(exports, prop);
-      } }
-  else if (type === "ArrayPattern")
-    { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {
-      var elt = list$1[i$1];
-
-        if (elt) { this.checkPatternExport(exports, elt); }
-    } }
-  else if (type === "Property")
-    { this.checkPatternExport(exports, pat.value); }
-  else if (type === "AssignmentPattern")
-    { this.checkPatternExport(exports, pat.left); }
-  else if (type === "RestElement")
-    { this.checkPatternExport(exports, pat.argument); }
-  else if (type === "ParenthesizedExpression")
-    { this.checkPatternExport(exports, pat.expression); }
-};
-
-pp$1.checkVariableExport = function(exports, decls) {
-  if (!exports) { return }
-  for (var i = 0, list = decls; i < list.length; i += 1)
-    {
-    var decl = list[i];
-
-    this.checkPatternExport(exports, decl.id);
-  }
-};
-
-pp$1.shouldParseExportStatement = function() {
-  return this.type.keyword === "var" ||
-    this.type.keyword === "const" ||
-    this.type.keyword === "class" ||
-    this.type.keyword === "function" ||
-    this.isLet() ||
-    this.isAsyncFunction()
-};
-
-// Parses a comma-separated list of module exports.
-
-pp$1.parseExportSpecifiers = function(exports) {
-  var nodes = [], first = true;
-  // export { x, y as z } [from '...']
-  this.expect(types.braceL);
-  while (!this.eat(types.braceR)) {
-    if (!first) {
-      this.expect(types.comma);
-      if (this.afterTrailingComma(types.braceR)) { break }
-    } else { first = false; }
-
-    var node = this.startNode();
-    node.local = this.parseIdent(true);
-    node.exported = this.eatContextual("as") ? this.parseIdent(true) : node.local;
-    this.checkExport(exports, node.exported.name, node.exported.start);
-    nodes.push(this.finishNode(node, "ExportSpecifier"));
-  }
-  return nodes
-};
-
-// Parses import declaration.
-
-pp$1.parseImport = function(node) {
-  this.next();
-  // import '...'
-  if (this.type === types.string) {
-    node.specifiers = empty;
-    node.source = this.parseExprAtom();
-  } else {
-    node.specifiers = this.parseImportSpecifiers();
-    this.expectContextual("from");
-    node.source = this.type === types.string ? this.parseExprAtom() : this.unexpected();
-  }
-  this.semicolon();
-  return this.finishNode(node, "ImportDeclaration")
-};
-
-// Parses a comma-separated list of module imports.
-
-pp$1.parseImportSpecifiers = function() {
-  var nodes = [], first = true;
-  if (this.type === types.name) {
-    // import defaultObj, { x, y as z } from '...'
-    var node = this.startNode();
-    node.local = this.parseIdent();
-    this.checkLVal(node.local, BIND_LEXICAL);
-    nodes.push(this.finishNode(node, "ImportDefaultSpecifier"));
-    if (!this.eat(types.comma)) { return nodes }
-  }
-  if (this.type === types.star) {
-    var node$1 = this.startNode();
-    this.next();
-    this.expectContextual("as");
-    node$1.local = this.parseIdent();
-    this.checkLVal(node$1.local, BIND_LEXICAL);
-    nodes.push(this.finishNode(node$1, "ImportNamespaceSpecifier"));
-    return nodes
-  }
-  this.expect(types.braceL);
-  while (!this.eat(types.braceR)) {
-    if (!first) {
-      this.expect(types.comma);
-      if (this.afterTrailingComma(types.braceR)) { break }
-    } else { first = false; }
-
-    var node$2 = this.startNode();
-    node$2.imported = this.parseIdent(true);
-    if (this.eatContextual("as")) {
-      node$2.local = this.parseIdent();
-    } else {
-      this.checkUnreserved(node$2.imported);
-      node$2.local = node$2.imported;
-    }
-    this.checkLVal(node$2.local, BIND_LEXICAL);
-    nodes.push(this.finishNode(node$2, "ImportSpecifier"));
-  }
-  return nodes
-};
-
-// Set `ExpressionStatement#directive` property for directive prologues.
-pp$1.adaptDirectivePrologue = function(statements) {
-  for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {
-    statements[i].directive = statements[i].expression.raw.slice(1, -1);
-  }
-};
-pp$1.isDirectiveCandidate = function(statement) {
-  return (
-    statement.type === "ExpressionStatement" &&
-    statement.expression.type === "Literal" &&
-    typeof statement.expression.value === "string" &&
-    // Reject parenthesized strings.
-    (this.input[statement.start] === "\"" || this.input[statement.start] === "'")
-  )
-};
-
-var pp$2 = Parser.prototype;
-
-// Convert existing expression atom to assignable pattern
-// if possible.
-
-pp$2.toAssignable = function(node, isBinding, refDestructuringErrors) {
-  if (this.options.ecmaVersion >= 6 && node) {
-    switch (node.type) {
-    case "Identifier":
-      if (this.inAsync && node.name === "await")
-        { this.raise(node.start, "Cannot use 'await' as identifier inside an async function"); }
-      break
-
-    case "ObjectPattern":
-    case "ArrayPattern":
-    case "RestElement":
-      break
-
-    case "ObjectExpression":
-      node.type = "ObjectPattern";
-      if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }
-      for (var i = 0, list = node.properties; i < list.length; i += 1) {
-        var prop = list[i];
-
-      this.toAssignable(prop, isBinding);
-        // Early error:
-        //   AssignmentRestProperty[Yield, Await] :
-        //     `...` DestructuringAssignmentTarget[Yield, Await]
-        //
-        //   It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.
-        if (
-          prop.type === "RestElement" &&
-          (prop.argument.type === "ArrayPattern" || prop.argument.type === "ObjectPattern")
-        ) {
-          this.raise(prop.argument.start, "Unexpected token");
-        }
-      }
-      break
-
-    case "Property":
-      // AssignmentProperty has type === "Property"
-      if (node.kind !== "init") { this.raise(node.key.start, "Object pattern can't contain getter or setter"); }
-      this.toAssignable(node.value, isBinding);
-      break
-
-    case "ArrayExpression":
-      node.type = "ArrayPattern";
-      if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }
-      this.toAssignableList(node.elements, isBinding);
-      break
-
-    case "SpreadElement":
-      node.type = "RestElement";
-      this.toAssignable(node.argument, isBinding);
-      if (node.argument.type === "AssignmentPattern")
-        { this.raise(node.argument.start, "Rest elements cannot have a default value"); }
-      break
-
-    case "AssignmentExpression":
-      if (node.operator !== "=") { this.raise(node.left.end, "Only '=' operator can be used for specifying default value."); }
-      node.type = "AssignmentPattern";
-      delete node.operator;
-      this.toAssignable(node.left, isBinding);
-      // falls through to AssignmentPattern
-
-    case "AssignmentPattern":
-      break
-
-    case "ParenthesizedExpression":
-      this.toAssignable(node.expression, isBinding, refDestructuringErrors);
-      break
-
-    case "MemberExpression":
-      if (!isBinding) { break }
-
-    default:
-      this.raise(node.start, "Assigning to rvalue");
-    }
-  } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }
-  return node
-};
-
-// Convert list of expression atoms to binding list.
-
-pp$2.toAssignableList = function(exprList, isBinding) {
-  var end = exprList.length;
-  for (var i = 0; i < end; i++) {
-    var elt = exprList[i];
-    if (elt) { this.toAssignable(elt, isBinding); }
-  }
-  if (end) {
-    var last = exprList[end - 1];
-    if (this.options.ecmaVersion === 6 && isBinding && last && last.type === "RestElement" && last.argument.type !== "Identifier")
-      { this.unexpected(last.argument.start); }
-  }
-  return exprList
-};
-
-// Parses spread element.
-
-pp$2.parseSpread = function(refDestructuringErrors) {
-  var node = this.startNode();
-  this.next();
-  node.argument = this.parseMaybeAssign(false, refDestructuringErrors);
-  return this.finishNode(node, "SpreadElement")
-};
-
-pp$2.parseRestBinding = function() {
-  var node = this.startNode();
-  this.next();
-
-  // RestElement inside of a function parameter must be an identifier
-  if (this.options.ecmaVersion === 6 && this.type !== types.name)
-    { this.unexpected(); }
-
-  node.argument = this.parseBindingAtom();
-
-  return this.finishNode(node, "RestElement")
-};
-
-// Parses lvalue (assignable) atom.
-
-pp$2.parseBindingAtom = function() {
-  if (this.options.ecmaVersion >= 6) {
-    switch (this.type) {
-    case types.bracketL:
-      var node = this.startNode();
-      this.next();
-      node.elements = this.parseBindingList(types.bracketR, true, true);
-      return this.finishNode(node, "ArrayPattern")
-
-    case types.braceL:
-      return this.parseObj(true)
-    }
-  }
-  return this.parseIdent()
-};
-
-pp$2.parseBindingList = function(close, allowEmpty, allowTrailingComma) {
-  var elts = [], first = true;
-  while (!this.eat(close)) {
-    if (first) { first = false; }
-    else { this.expect(types.comma); }
-    if (allowEmpty && this.type === types.comma) {
-      elts.push(null);
-    } else if (allowTrailingComma && this.afterTrailingComma(close)) {
-      break
-    } else if (this.type === types.ellipsis) {
-      var rest = this.parseRestBinding();
-      this.parseBindingListItem(rest);
-      elts.push(rest);
-      if (this.type === types.comma) { this.raise(this.start, "Comma is not permitted after the rest element"); }
-      this.expect(close);
-      break
-    } else {
-      var elem = this.parseMaybeDefault(this.start, this.startLoc);
-      this.parseBindingListItem(elem);
-      elts.push(elem);
-    }
-  }
-  return elts
-};
-
-pp$2.parseBindingListItem = function(param) {
-  return param
-};
-
-// Parses assignment pattern around given atom if possible.
-
-pp$2.parseMaybeDefault = function(startPos, startLoc, left) {
-  left = left || this.parseBindingAtom();
-  if (this.options.ecmaVersion < 6 || !this.eat(types.eq)) { return left }
-  var node = this.startNodeAt(startPos, startLoc);
-  node.left = left;
-  node.right = this.parseMaybeAssign();
-  return this.finishNode(node, "AssignmentPattern")
-};
-
-// Verify that a node is an lval — something that can be assigned
-// to.
-// bindingType can be either:
-// 'var' indicating that the lval creates a 'var' binding
-// 'let' indicating that the lval creates a lexical ('let' or 'const') binding
-// 'none' indicating that the binding should be checked for illegal identifiers, but not for duplicate references
-
-pp$2.checkLVal = function(expr, bindingType, checkClashes) {
-  if ( bindingType === void 0 ) bindingType = BIND_NONE;
-
-  switch (expr.type) {
-  case "Identifier":
-    if (bindingType === BIND_LEXICAL && expr.name === "let")
-      { this.raiseRecoverable(expr.start, "let is disallowed as a lexically bound name"); }
-    if (this.strict && this.reservedWordsStrictBind.test(expr.name))
-      { this.raiseRecoverable(expr.start, (bindingType ? "Binding " : "Assigning to ") + expr.name + " in strict mode"); }
-    if (checkClashes) {
-      if (has(checkClashes, expr.name))
-        { this.raiseRecoverable(expr.start, "Argument name clash"); }
-      checkClashes[expr.name] = true;
-    }
-    if (bindingType !== BIND_NONE && bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }
-    break
-
-  case "MemberExpression":
-    if (bindingType) { this.raiseRecoverable(expr.start, "Binding member expression"); }
-    break
-
-  case "ObjectPattern":
-    for (var i = 0, list = expr.properties; i < list.length; i += 1)
-      {
-    var prop = list[i];
-
-    this.checkLVal(prop, bindingType, checkClashes);
-  }
-    break
-
-  case "Property":
-    // AssignmentProperty has type === "Property"
-    this.checkLVal(expr.value, bindingType, checkClashes);
-    break
-
-  case "ArrayPattern":
-    for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {
-      var elem = list$1[i$1];
-
-    if (elem) { this.checkLVal(elem, bindingType, checkClashes); }
-    }
-    break
-
-  case "AssignmentPattern":
-    this.checkLVal(expr.left, bindingType, checkClashes);
-    break
-
-  case "RestElement":
-    this.checkLVal(expr.argument, bindingType, checkClashes);
-    break
-
-  case "ParenthesizedExpression":
-    this.checkLVal(expr.expression, bindingType, checkClashes);
-    break
-
-  default:
-    this.raise(expr.start, (bindingType ? "Binding" : "Assigning to") + " rvalue");
-  }
-};
-
-// A recursive descent parser operates by defining functions for all
-
-var pp$3 = Parser.prototype;
-
-// Check if property name clashes with already added.
-// Object/class getters and setters are not allowed to clash —
-// either with each other or with an init property — and in
-// strict mode, init properties are also not allowed to be repeated.
-
-pp$3.checkPropClash = function(prop, propHash, refDestructuringErrors) {
-  if (this.options.ecmaVersion >= 9 && prop.type === "SpreadElement")
-    { return }
-  if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))
-    { return }
-  var key = prop.key;
-  var name;
-  switch (key.type) {
-  case "Identifier": name = key.name; break
-  case "Literal": name = String(key.value); break
-  default: return
-  }
-  var kind = prop.kind;
-  if (this.options.ecmaVersion >= 6) {
-    if (name === "__proto__" && kind === "init") {
-      if (propHash.proto) {
-        if (refDestructuringErrors && refDestructuringErrors.doubleProto < 0) { refDestructuringErrors.doubleProto = key.start; }
-        // Backwards-compat kludge. Can be removed in version 6.0
-        else { this.raiseRecoverable(key.start, "Redefinition of __proto__ property"); }
-      }
-      propHash.proto = true;
-    }
-    return
-  }
-  name = "$" + name;
-  var other = propHash[name];
-  if (other) {
-    var redefinition;
-    if (kind === "init") {
-      redefinition = this.strict && other.init || other.get || other.set;
-    } else {
-      redefinition = other.init || other[kind];
-    }
-    if (redefinition)
-      { this.raiseRecoverable(key.start, "Redefinition of property"); }
-  } else {
-    other = propHash[name] = {
-      init: false,
-      get: false,
-      set: false
-    };
-  }
-  other[kind] = true;
-};
-
-// ### Expression parsing
-
-// These nest, from the most general expression type at the top to
-// 'atomic', nondivisible expression types at the bottom. Most of
-// the functions will simply let the function(s) below them parse,
-// and, *if* the syntactic construct they handle is present, wrap
-// the AST node that the inner parser gave them in another node.
-
-// Parse a full expression. The optional arguments are used to
-// forbid the `in` operator (in for loops initalization expressions)
-// and provide reference for storing '=' operator inside shorthand
-// property assignment in contexts where both object expression
-// and object pattern might appear (so it's possible to raise
-// delayed syntax error at correct position).
-
-pp$3.parseExpression = function(noIn, refDestructuringErrors) {
-  var startPos = this.start, startLoc = this.startLoc;
-  var expr = this.parseMaybeAssign(noIn, refDestructuringErrors);
-  if (this.type === types.comma) {
-    var node = this.startNodeAt(startPos, startLoc);
-    node.expressions = [expr];
-    while (this.eat(types.comma)) { node.expressions.push(this.parseMaybeAssign(noIn, refDestructuringErrors)); }
-    return this.finishNode(node, "SequenceExpression")
-  }
-  return expr
-};
-
-// Parse an assignment expression. This includes applications of
-// operators like `+=`.
-
-pp$3.parseMaybeAssign = function(noIn, refDestructuringErrors, afterLeftParse) {
-  if (this.isContextual("yield")) {
-    if (this.inGenerator) { return this.parseYield(noIn) }
-    // The tokenizer will assume an expression is allowed after
-    // `yield`, but this isn't that kind of yield
-    else { this.exprAllowed = false; }
-  }
-
-  var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldShorthandAssign = -1;
-  if (refDestructuringErrors) {
-    oldParenAssign = refDestructuringErrors.parenthesizedAssign;
-    oldTrailingComma = refDestructuringErrors.trailingComma;
-    oldShorthandAssign = refDestructuringErrors.shorthandAssign;
-    refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.shorthandAssign = -1;
-  } else {
-    refDestructuringErrors = new DestructuringErrors;
-    ownDestructuringErrors = true;
-  }
-
-  var startPos = this.start, startLoc = this.startLoc;
-  if (this.type === types.parenL || this.type === types.name)
-    { this.potentialArrowAt = this.start; }
-  var left = this.parseMaybeConditional(noIn, refDestructuringErrors);
-  if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }
-  if (this.type.isAssign) {
-    var node = this.startNodeAt(startPos, startLoc);
-    node.operator = this.value;
-    node.left = this.type === types.eq ? this.toAssignable(left, false, refDestructuringErrors) : left;
-    if (!ownDestructuringErrors) { DestructuringErrors.call(refDestructuringErrors); }
-    refDestructuringErrors.shorthandAssign = -1; // reset because shorthand default was used correctly
-    this.checkLVal(left);
-    this.next();
-    node.right = this.parseMaybeAssign(noIn);
-    return this.finishNode(node, "AssignmentExpression")
-  } else {
-    if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }
-  }
-  if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }
-  if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }
-  if (oldShorthandAssign > -1) { refDestructuringErrors.shorthandAssign = oldShorthandAssign; }
-  return left
-};
-
-// Parse a ternary conditional (`?:`) operator.
-
-pp$3.parseMaybeConditional = function(noIn, refDestructuringErrors) {
-  var startPos = this.start, startLoc = this.startLoc;
-  var expr = this.parseExprOps(noIn, refDestructuringErrors);
-  if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
-  if (this.eat(types.question)) {
-    var node = this.startNodeAt(startPos, startLoc);
-    node.test = expr;
-    node.consequent = this.parseMaybeAssign();
-    this.expect(types.colon);
-    node.alternate = this.parseMaybeAssign(noIn);
-    return this.finishNode(node, "ConditionalExpression")
-  }
-  return expr
-};
-
-// Start the precedence parser.
-
-pp$3.parseExprOps = function(noIn, refDestructuringErrors) {
-  var startPos = this.start, startLoc = this.startLoc;
-  var expr = this.parseMaybeUnary(refDestructuringErrors, false);
-  if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
-  return expr.start === startPos && expr.type === "ArrowFunctionExpression" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, noIn)
-};
-
-// Parse binary operators with the operator precedence parsing
-// algorithm. `left` is the left-hand side of the operator.
-// `minPrec` provides context that allows the function to stop and
-// defer further parser to one of its callers when it encounters an
-// operator that has a lower precedence than the set it is parsing.
-
-pp$3.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, noIn) {
-  var prec = this.type.binop;
-  if (prec != null && (!noIn || this.type !== types._in)) {
-    if (prec > minPrec) {
-      var logical = this.type === types.logicalOR || this.type === types.logicalAND;
-      var op = this.value;
-      this.next();
-      var startPos = this.start, startLoc = this.startLoc;
-      var right = this.parseExprOp(this.parseMaybeUnary(null, false), startPos, startLoc, prec, noIn);
-      var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical);
-      return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, noIn)
-    }
-  }
-  return left
-};
-
-pp$3.buildBinary = function(startPos, startLoc, left, right, op, logical) {
-  var node = this.startNodeAt(startPos, startLoc);
-  node.left = left;
-  node.operator = op;
-  node.right = right;
-  return this.finishNode(node, logical ? "LogicalExpression" : "BinaryExpression")
-};
-
-// Parse unary operators, both prefix and postfix.
-
-pp$3.parseMaybeUnary = function(refDestructuringErrors, sawUnary) {
-  var startPos = this.start, startLoc = this.startLoc, expr;
-  if (this.isContextual("await") && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction))) {
-    expr = this.parseAwait();
-    sawUnary = true;
-  } else if (this.type.prefix) {
-    var node = this.startNode(), update = this.type === types.incDec;
-    node.operator = this.value;
-    node.prefix = true;
-    this.next();
-    node.argument = this.parseMaybeUnary(null, true);
-    this.checkExpressionErrors(refDestructuringErrors, true);
-    if (update) { this.checkLVal(node.argument); }
-    else if (this.strict && node.operator === "delete" &&
-             node.argument.type === "Identifier")
-      { this.raiseRecoverable(node.start, "Deleting local variable in strict mode"); }
-    else { sawUnary = true; }
-    expr = this.finishNode(node, update ? "UpdateExpression" : "UnaryExpression");
-  } else {
-    expr = this.parseExprSubscripts(refDestructuringErrors);
-    if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
-    while (this.type.postfix && !this.canInsertSemicolon()) {
-      var node$1 = this.startNodeAt(startPos, startLoc);
-      node$1.operator = this.value;
-      node$1.prefix = false;
-      node$1.argument = expr;
-      this.checkLVal(expr);
-      this.next();
-      expr = this.finishNode(node$1, "UpdateExpression");
-    }
-  }
-
-  if (!sawUnary && this.eat(types.starstar))
-    { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false), "**", false) }
-  else
-    { return expr }
-};
-
-// Parse call, dot, and `[]`-subscript expressions.
-
-pp$3.parseExprSubscripts = function(refDestructuringErrors) {
-  var startPos = this.start, startLoc = this.startLoc;
-  var expr = this.parseExprAtom(refDestructuringErrors);
-  var skipArrowSubscripts = expr.type === "ArrowFunctionExpression" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== ")";
-  if (this.checkExpressionErrors(refDestructuringErrors) || skipArrowSubscripts) { return expr }
-  var result = this.parseSubscripts(expr, startPos, startLoc);
-  if (refDestructuringErrors && result.type === "MemberExpression") {
-    if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }
-    if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }
-  }
-  return result
-};
-
-pp$3.parseSubscripts = function(base, startPos, startLoc, noCalls) {
-  var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === "Identifier" && base.name === "async" &&
-      this.lastTokEnd === base.end && !this.canInsertSemicolon() && this.input.slice(base.start, base.end) === "async";
-  while (true) {
-    var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow);
-    if (element === base || element.type === "ArrowFunctionExpression") { return element }
-    base = element;
-  }
-};
-
-pp$3.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow) {
-  var computed = this.eat(types.bracketL);
-  if (computed || this.eat(types.dot)) {
-    var node = this.startNodeAt(startPos, startLoc);
-    node.object = base;
-    node.property = computed ? this.parseExpression() : this.parseIdent(this.options.allowReserved !== "never");
-    node.computed = !!computed;
-    if (computed) { this.expect(types.bracketR); }
-    base = this.finishNode(node, "MemberExpression");
-  } else if (!noCalls && this.eat(types.parenL)) {
-    var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-    this.yieldPos = 0;
-    this.awaitPos = 0;
-    this.awaitIdentPos = 0;
-    var exprList = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8 && base.type !== "Import", false, refDestructuringErrors);
-    if (maybeAsyncArrow && !this.canInsertSemicolon() && this.eat(types.arrow)) {
-      this.checkPatternErrors(refDestructuringErrors, false);
-      this.checkYieldAwaitInDefaultParams();
-      if (this.awaitIdentPos > 0)
-        { this.raise(this.awaitIdentPos, "Cannot use 'await' as identifier inside an async function"); }
-      this.yieldPos = oldYieldPos;
-      this.awaitPos = oldAwaitPos;
-      this.awaitIdentPos = oldAwaitIdentPos;
-      return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true)
-    }
-    this.checkExpressionErrors(refDestructuringErrors, true);
-    this.yieldPos = oldYieldPos || this.yieldPos;
-    this.awaitPos = oldAwaitPos || this.awaitPos;
-    this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;
-    var node$1 = this.startNodeAt(startPos, startLoc);
-    node$1.callee = base;
-    node$1.arguments = exprList;
-    if (node$1.callee.type === "Import") {
-      if (node$1.arguments.length !== 1) {
-        this.raise(node$1.start, "import() requires exactly one argument");
-      }
-
-      var importArg = node$1.arguments[0];
-      if (importArg && importArg.type === "SpreadElement") {
-        this.raise(importArg.start, "... is not allowed in import()");
-      }
-    }
-    base = this.finishNode(node$1, "CallExpression");
-  } else if (this.type === types.backQuote) {
-    var node$2 = this.startNodeAt(startPos, startLoc);
-    node$2.tag = base;
-    node$2.quasi = this.parseTemplate({isTagged: true});
-    base = this.finishNode(node$2, "TaggedTemplateExpression");
-  }
-  return base
-};
-
-// Parse an atomic expression — either a single token that is an
-// expression, an expression started by a keyword like `function` or
-// `new`, or an expression wrapped in punctuation like `()`, `[]`,
-// or `{}`.
-
-pp$3.parseExprAtom = function(refDestructuringErrors) {
-  // If a division operator appears in an expression position, the
-  // tokenizer got confused, and we force it to read a regexp instead.
-  if (this.type === types.slash) { this.readRegexp(); }
-
-  var node, canBeArrow = this.potentialArrowAt === this.start;
-  switch (this.type) {
-  case types._super:
-    if (!this.allowSuper)
-      { this.raise(this.start, "'super' keyword outside a method"); }
-    node = this.startNode();
-    this.next();
-    if (this.type === types.parenL && !this.allowDirectSuper)
-      { this.raise(node.start, "super() call outside constructor of a subclass"); }
-    // The `super` keyword can appear at below:
-    // SuperProperty:
-    //     super [ Expression ]
-    //     super . IdentifierName
-    // SuperCall:
-    //     super Arguments
-    if (this.type !== types.dot && this.type !== types.bracketL && this.type !== types.parenL)
-      { this.unexpected(); }
-    return this.finishNode(node, "Super")
-
-  case types._this:
-    node = this.startNode();
-    this.next();
-    return this.finishNode(node, "ThisExpression")
-
-  case types.name:
-    var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;
-    var id = this.parseIdent(false);
-    if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === "async" && !this.canInsertSemicolon() && this.eat(types._function))
-      { return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true) }
-    if (canBeArrow && !this.canInsertSemicolon()) {
-      if (this.eat(types.arrow))
-        { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false) }
-      if (this.options.ecmaVersion >= 8 && id.name === "async" && this.type === types.name && !containsEsc) {
-        id = this.parseIdent(false);
-        if (this.canInsertSemicolon() || !this.eat(types.arrow))
-          { this.unexpected(); }
-        return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true)
-      }
-    }
-    return id
-
-  case types.regexp:
-    var value = this.value;
-    node = this.parseLiteral(value.value);
-    node.regex = {pattern: value.pattern, flags: value.flags};
-    return node
-
-  case types.num: case types.string:
-    return this.parseLiteral(this.value)
-
-  case types._null: case types._true: case types._false:
-    node = this.startNode();
-    node.value = this.type === types._null ? null : this.type === types._true;
-    node.raw = this.type.keyword;
-    this.next();
-    return this.finishNode(node, "Literal")
-
-  case types.parenL:
-    var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow);
-    if (refDestructuringErrors) {
-      if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))
-        { refDestructuringErrors.parenthesizedAssign = start; }
-      if (refDestructuringErrors.parenthesizedBind < 0)
-        { refDestructuringErrors.parenthesizedBind = start; }
-    }
-    return expr
-
-  case types.bracketL:
-    node = this.startNode();
-    this.next();
-    node.elements = this.parseExprList(types.bracketR, true, true, refDestructuringErrors);
-    return this.finishNode(node, "ArrayExpression")
-
-  case types.braceL:
-    return this.parseObj(false, refDestructuringErrors)
-
-  case types._function:
-    node = this.startNode();
-    this.next();
-    return this.parseFunction(node, 0)
-
-  case types._class:
-    return this.parseClass(this.startNode(), false)
-
-  case types._new:
-    return this.parseNew()
-
-  case types.backQuote:
-    return this.parseTemplate()
-
-  case types._import:
-    if (this.options.ecmaVersion > 10) {
-      return this.parseDynamicImport()
-    } else {
-      return this.unexpected()
-    }
-
-  default:
-    this.unexpected();
-  }
-};
-
-pp$3.parseDynamicImport = function() {
-  var node = this.startNode();
-  this.next();
-  if (this.type !== types.parenL) {
-    this.unexpected();
-  }
-  return this.finishNode(node, "Import")
-};
-
-pp$3.parseLiteral = function(value) {
-  var node = this.startNode();
-  node.value = value;
-  node.raw = this.input.slice(this.start, this.end);
-  if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1); }
-  this.next();
-  return this.finishNode(node, "Literal")
-};
-
-pp$3.parseParenExpression = function() {
-  this.expect(types.parenL);
-  var val = this.parseExpression();
-  this.expect(types.parenR);
-  return val
-};
-
-pp$3.parseParenAndDistinguishExpression = function(canBeArrow) {
-  var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;
-  if (this.options.ecmaVersion >= 6) {
-    this.next();
-
-    var innerStartPos = this.start, innerStartLoc = this.startLoc;
-    var exprList = [], first = true, lastIsComma = false;
-    var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;
-    this.yieldPos = 0;
-    this.awaitPos = 0;
-    // Do not save awaitIdentPos to allow checking awaits nested in parameters
-    while (this.type !== types.parenR) {
-      first ? first = false : this.expect(types.comma);
-      if (allowTrailingComma && this.afterTrailingComma(types.parenR, true)) {
-        lastIsComma = true;
-        break
-      } else if (this.type === types.ellipsis) {
-        spreadStart = this.start;
-        exprList.push(this.parseParenItem(this.parseRestBinding()));
-        if (this.type === types.comma) { this.raise(this.start, "Comma is not permitted after the rest element"); }
-        break
-      } else {
-        exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));
-      }
-    }
-    var innerEndPos = this.start, innerEndLoc = this.startLoc;
-    this.expect(types.parenR);
-
-    if (canBeArrow && !this.canInsertSemicolon() && this.eat(types.arrow)) {
-      this.checkPatternErrors(refDestructuringErrors, false);
-      this.checkYieldAwaitInDefaultParams();
-      this.yieldPos = oldYieldPos;
-      this.awaitPos = oldAwaitPos;
-      return this.parseParenArrowList(startPos, startLoc, exprList)
-    }
-
-    if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }
-    if (spreadStart) { this.unexpected(spreadStart); }
-    this.checkExpressionErrors(refDestructuringErrors, true);
-    this.yieldPos = oldYieldPos || this.yieldPos;
-    this.awaitPos = oldAwaitPos || this.awaitPos;
-
-    if (exprList.length > 1) {
-      val = this.startNodeAt(innerStartPos, innerStartLoc);
-      val.expressions = exprList;
-      this.finishNodeAt(val, "SequenceExpression", innerEndPos, innerEndLoc);
-    } else {
-      val = exprList[0];
-    }
-  } else {
-    val = this.parseParenExpression();
-  }
-
-  if (this.options.preserveParens) {
-    var par = this.startNodeAt(startPos, startLoc);
-    par.expression = val;
-    return this.finishNode(par, "ParenthesizedExpression")
-  } else {
-    return val
-  }
-};
-
-pp$3.parseParenItem = function(item) {
-  return item
-};
-
-pp$3.parseParenArrowList = function(startPos, startLoc, exprList) {
-  return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList)
-};
-
-// New's precedence is slightly tricky. It must allow its argument to
-// be a `[]` or dot subscript expression, but not a call — at least,
-// not without wrapping it in parentheses. Thus, it uses the noCalls
-// argument to parseSubscripts to prevent it from consuming the
-// argument list.
-
-var empty$1 = [];
-
-pp$3.parseNew = function() {
-  var node = this.startNode();
-  var meta = this.parseIdent(true);
-  if (this.options.ecmaVersion >= 6 && this.eat(types.dot)) {
-    node.meta = meta;
-    var containsEsc = this.containsEsc;
-    node.property = this.parseIdent(true);
-    if (node.property.name !== "target" || containsEsc)
-      { this.raiseRecoverable(node.property.start, "The only valid meta property for new is new.target"); }
-    if (!this.inNonArrowFunction())
-      { this.raiseRecoverable(node.start, "new.target can only be used in functions"); }
-    return this.finishNode(node, "MetaProperty")
-  }
-  var startPos = this.start, startLoc = this.startLoc;
-  node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true);
-  if (this.options.ecmaVersion > 10 && node.callee.type === "Import") {
-    this.raise(node.callee.start, "Cannot use new with import(...)");
-  }
-  if (this.eat(types.parenL)) { node.arguments = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8 && node.callee.type !== "Import", false); }
-  else { node.arguments = empty$1; }
-  return this.finishNode(node, "NewExpression")
-};
-
-// Parse template expression.
-
-pp$3.parseTemplateElement = function(ref) {
-  var isTagged = ref.isTagged;
-
-  var elem = this.startNode();
-  if (this.type === types.invalidTemplate) {
-    if (!isTagged) {
-      this.raiseRecoverable(this.start, "Bad escape sequence in untagged template literal");
-    }
-    elem.value = {
-      raw: this.value,
-      cooked: null
-    };
-  } else {
-    elem.value = {
-      raw: this.input.slice(this.start, this.end).replace(/\r\n?/g, "\n"),
-      cooked: this.value
-    };
-  }
-  this.next();
-  elem.tail = this.type === types.backQuote;
-  return this.finishNode(elem, "TemplateElement")
-};
-
-pp$3.parseTemplate = function(ref) {
-  if ( ref === void 0 ) ref = {};
-  var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;
-
-  var node = this.startNode();
-  this.next();
-  node.expressions = [];
-  var curElt = this.parseTemplateElement({isTagged: isTagged});
-  node.quasis = [curElt];
-  while (!curElt.tail) {
-    if (this.type === types.eof) { this.raise(this.pos, "Unterminated template literal"); }
-    this.expect(types.dollarBraceL);
-    node.expressions.push(this.parseExpression());
-    this.expect(types.braceR);
-    node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));
-  }
-  this.next();
-  return this.finishNode(node, "TemplateLiteral")
-};
-
-pp$3.isAsyncProp = function(prop) {
-  return !prop.computed && prop.key.type === "Identifier" && prop.key.name === "async" &&
-    (this.type === types.name || this.type === types.num || this.type === types.string || this.type === types.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types.star)) &&
-    !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))
-};
-
-// Parse an object literal or binding pattern.
-
-pp$3.parseObj = function(isPattern, refDestructuringErrors) {
-  var node = this.startNode(), first = true, propHash = {};
-  node.properties = [];
-  this.next();
-  while (!this.eat(types.braceR)) {
-    if (!first) {
-      this.expect(types.comma);
-      if (this.afterTrailingComma(types.braceR)) { break }
-    } else { first = false; }
-
-    var prop = this.parseProperty(isPattern, refDestructuringErrors);
-    if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }
-    node.properties.push(prop);
-  }
-  return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression")
-};
-
-pp$3.parseProperty = function(isPattern, refDestructuringErrors) {
-  var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;
-  if (this.options.ecmaVersion >= 9 && this.eat(types.ellipsis)) {
-    if (isPattern) {
-      prop.argument = this.parseIdent(false);
-      if (this.type === types.comma) {
-        this.raise(this.start, "Comma is not permitted after the rest element");
-      }
-      return this.finishNode(prop, "RestElement")
-    }
-    // To disallow parenthesized identifier via `this.toAssignable()`.
-    if (this.type === types.parenL && refDestructuringErrors) {
-      if (refDestructuringErrors.parenthesizedAssign < 0) {
-        refDestructuringErrors.parenthesizedAssign = this.start;
-      }
-      if (refDestructuringErrors.parenthesizedBind < 0) {
-        refDestructuringErrors.parenthesizedBind = this.start;
-      }
-    }
-    // Parse argument.
-    prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);
-    // To disallow trailing comma via `this.toAssignable()`.
-    if (this.type === types.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {
-      refDestructuringErrors.trailingComma = this.start;
-    }
-    // Finish
-    return this.finishNode(prop, "SpreadElement")
-  }
-  if (this.options.ecmaVersion >= 6) {
-    prop.method = false;
-    prop.shorthand = false;
-    if (isPattern || refDestructuringErrors) {
-      startPos = this.start;
-      startLoc = this.startLoc;
-    }
-    if (!isPattern)
-      { isGenerator = this.eat(types.star); }
-  }
-  var containsEsc = this.containsEsc;
-  this.parsePropertyName(prop);
-  if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {
-    isAsync = true;
-    isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star);
-    this.parsePropertyName(prop, refDestructuringErrors);
-  } else {
-    isAsync = false;
-  }
-  this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);
-  return this.finishNode(prop, "Property")
-};
-
-pp$3.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {
-  if ((isGenerator || isAsync) && this.type === types.colon)
-    { this.unexpected(); }
-
-  if (this.eat(types.colon)) {
-    prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);
-    prop.kind = "init";
-  } else if (this.options.ecmaVersion >= 6 && this.type === types.parenL) {
-    if (isPattern) { this.unexpected(); }
-    prop.kind = "init";
-    prop.method = true;
-    prop.value = this.parseMethod(isGenerator, isAsync);
-  } else if (!isPattern && !containsEsc &&
-             this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" &&
-             (prop.key.name === "get" || prop.key.name === "set") &&
-             (this.type !== types.comma && this.type !== types.braceR)) {
-    if (isGenerator || isAsync) { this.unexpected(); }
-    prop.kind = prop.key.name;
-    this.parsePropertyName(prop);
-    prop.value = this.parseMethod(false);
-    var paramCount = prop.kind === "get" ? 0 : 1;
-    if (prop.value.params.length !== paramCount) {
-      var start = prop.value.start;
-      if (prop.kind === "get")
-        { this.raiseRecoverable(start, "getter should have no params"); }
-      else
-        { this.raiseRecoverable(start, "setter should have exactly one param"); }
-    } else {
-      if (prop.kind === "set" && prop.value.params[0].type === "RestElement")
-        { this.raiseRecoverable(prop.value.params[0].start, "Setter cannot use rest params"); }
-    }
-  } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === "Identifier") {
-    if (isGenerator || isAsync) { this.unexpected(); }
-    this.checkUnreserved(prop.key);
-    if (prop.key.name === "await" && !this.awaitIdentPos)
-      { this.awaitIdentPos = startPos; }
-    prop.kind = "init";
-    if (isPattern) {
-      prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key);
-    } else if (this.type === types.eq && refDestructuringErrors) {
-      if (refDestructuringErrors.shorthandAssign < 0)
-        { refDestructuringErrors.shorthandAssign = this.start; }
-      prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key);
-    } else {
-      prop.value = prop.key;
-    }
-    prop.shorthand = true;
-  } else { this.unexpected(); }
-};
-
-pp$3.parsePropertyName = function(prop) {
-  if (this.options.ecmaVersion >= 6) {
-    if (this.eat(types.bracketL)) {
-      prop.computed = true;
-      prop.key = this.parseMaybeAssign();
-      this.expect(types.bracketR);
-      return prop.key
-    } else {
-      prop.computed = false;
-    }
-  }
-  return prop.key = this.type === types.num || this.type === types.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== "never")
-};
-
-// Initialize empty function node.
-
-pp$3.initFunction = function(node) {
-  node.id = null;
-  if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }
-  if (this.options.ecmaVersion >= 8) { node.async = false; }
-};
-
-// Parse object or class method.
-
-pp$3.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {
-  var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-
-  this.initFunction(node);
-  if (this.options.ecmaVersion >= 6)
-    { node.generator = isGenerator; }
-  if (this.options.ecmaVersion >= 8)
-    { node.async = !!isAsync; }
-
-  this.yieldPos = 0;
-  this.awaitPos = 0;
-  this.awaitIdentPos = 0;
-  this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));
-
-  this.expect(types.parenL);
-  node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);
-  this.checkYieldAwaitInDefaultParams();
-  this.parseFunctionBody(node, false, true);
-
-  this.yieldPos = oldYieldPos;
-  this.awaitPos = oldAwaitPos;
-  this.awaitIdentPos = oldAwaitIdentPos;
-  return this.finishNode(node, "FunctionExpression")
-};
-
-// Parse arrow function expression with given parameters.
-
-pp$3.parseArrowExpression = function(node, params, isAsync) {
-  var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-
-  this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);
-  this.initFunction(node);
-  if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }
-
-  this.yieldPos = 0;
-  this.awaitPos = 0;
-  this.awaitIdentPos = 0;
-
-  node.params = this.toAssignableList(params, true);
-  this.parseFunctionBody(node, true, false);
-
-  this.yieldPos = oldYieldPos;
-  this.awaitPos = oldAwaitPos;
-  this.awaitIdentPos = oldAwaitIdentPos;
-  return this.finishNode(node, "ArrowFunctionExpression")
-};
-
-// Parse function body and check parameters.
-
-pp$3.parseFunctionBody = function(node, isArrowFunction, isMethod) {
-  var isExpression = isArrowFunction && this.type !== types.braceL;
-  var oldStrict = this.strict, useStrict = false;
-
-  if (isExpression) {
-    node.body = this.parseMaybeAssign();
-    node.expression = true;
-    this.checkParams(node, false);
-  } else {
-    var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);
-    if (!oldStrict || nonSimple) {
-      useStrict = this.strictDirective(this.end);
-      // If this is a strict mode function, verify that argument names
-      // are not repeated, and it does not try to bind the words `eval`
-      // or `arguments`.
-      if (useStrict && nonSimple)
-        { this.raiseRecoverable(node.start, "Illegal 'use strict' directive in function with non-simple parameter list"); }
-    }
-    // Start a new scope with regard to labels and the `inFunction`
-    // flag (restore them to their old value afterwards).
-    var oldLabels = this.labels;
-    this.labels = [];
-    if (useStrict) { this.strict = true; }
-
-    // Add the params to varDeclaredNames to ensure that an error is thrown
-    // if a let/const declaration in the function clashes with one of the params.
-    this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));
-    node.body = this.parseBlock(false);
-    node.expression = false;
-    this.adaptDirectivePrologue(node.body.body);
-    this.labels = oldLabels;
-  }
-  this.exitScope();
-
-  // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'
-  if (this.strict && node.id) { this.checkLVal(node.id, BIND_OUTSIDE); }
-  this.strict = oldStrict;
-};
-
-pp$3.isSimpleParamList = function(params) {
-  for (var i = 0, list = params; i < list.length; i += 1)
-    {
-    var param = list[i];
-
-    if (param.type !== "Identifier") { return false
-  } }
-  return true
-};
-
-// Checks function params for various disallowed patterns such as using "eval"
-// or "arguments" and duplicate parameters.
-
-pp$3.checkParams = function(node, allowDuplicates) {
-  var nameHash = {};
-  for (var i = 0, list = node.params; i < list.length; i += 1)
-    {
-    var param = list[i];
-
-    this.checkLVal(param, BIND_VAR, allowDuplicates ? null : nameHash);
-  }
-};
-
-// Parses a comma-separated list of expressions, and returns them as
-// an array. `close` is the token type that ends the list, and
-// `allowEmpty` can be turned on to allow subsequent commas with
-// nothing in between them to be parsed as `null` (which is needed
-// for array literals).
-
-pp$3.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {
-  var elts = [], first = true;
-  while (!this.eat(close)) {
-    if (!first) {
-      this.expect(types.comma);
-      if (allowTrailingComma && this.afterTrailingComma(close)) { break }
-    } else { first = false; }
-
-    var elt = (void 0);
-    if (allowEmpty && this.type === types.comma)
-      { elt = null; }
-    else if (this.type === types.ellipsis) {
-      elt = this.parseSpread(refDestructuringErrors);
-      if (refDestructuringErrors && this.type === types.comma && refDestructuringErrors.trailingComma < 0)
-        { refDestructuringErrors.trailingComma = this.start; }
-    } else {
-      elt = this.parseMaybeAssign(false, refDestructuringErrors);
-    }
-    elts.push(elt);
-  }
-  return elts
-};
-
-pp$3.checkUnreserved = function(ref) {
-  var start = ref.start;
-  var end = ref.end;
-  var name = ref.name;
-
-  if (this.inGenerator && name === "yield")
-    { this.raiseRecoverable(start, "Cannot use 'yield' as identifier inside a generator"); }
-  if (this.inAsync && name === "await")
-    { this.raiseRecoverable(start, "Cannot use 'await' as identifier inside an async function"); }
-  if (this.keywords.test(name))
-    { this.raise(start, ("Unexpected keyword '" + name + "'")); }
-  if (this.options.ecmaVersion < 6 &&
-    this.input.slice(start, end).indexOf("\\") !== -1) { return }
-  var re = this.strict ? this.reservedWordsStrict : this.reservedWords;
-  if (re.test(name)) {
-    if (!this.inAsync && name === "await")
-      { this.raiseRecoverable(start, "Cannot use keyword 'await' outside an async function"); }
-    this.raiseRecoverable(start, ("The keyword '" + name + "' is reserved"));
-  }
-};
-
-// Parse the next token as an identifier. If `liberal` is true (used
-// when parsing properties), it will also convert keywords into
-// identifiers.
-
-pp$3.parseIdent = function(liberal, isBinding) {
-  var node = this.startNode();
-  if (this.type === types.name) {
-    node.name = this.value;
-  } else if (this.type.keyword) {
-    node.name = this.type.keyword;
-
-    // To fix https://github.com/acornjs/acorn/issues/575
-    // `class` and `function` keywords push new context into this.context.
-    // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.
-    // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword
-    if ((node.name === "class" || node.name === "function") &&
-        (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {
-      this.context.pop();
-    }
-  } else {
-    this.unexpected();
-  }
-  this.next();
-  this.finishNode(node, "Identifier");
-  if (!liberal) {
-    this.checkUnreserved(node);
-    if (node.name === "await" && !this.awaitIdentPos)
-      { this.awaitIdentPos = node.start; }
-  }
-  return node
-};
-
-// Parses yield expression inside generator.
-
-pp$3.parseYield = function(noIn) {
-  if (!this.yieldPos) { this.yieldPos = this.start; }
-
-  var node = this.startNode();
-  this.next();
-  if (this.type === types.semi || this.canInsertSemicolon() || (this.type !== types.star && !this.type.startsExpr)) {
-    node.delegate = false;
-    node.argument = null;
-  } else {
-    node.delegate = this.eat(types.star);
-    node.argument = this.parseMaybeAssign(noIn);
-  }
-  return this.finishNode(node, "YieldExpression")
-};
-
-pp$3.parseAwait = function() {
-  if (!this.awaitPos) { this.awaitPos = this.start; }
-
-  var node = this.startNode();
-  this.next();
-  node.argument = this.parseMaybeUnary(null, true);
-  return this.finishNode(node, "AwaitExpression")
-};
-
-var pp$4 = Parser.prototype;
-
-// This function is used to raise exceptions on parse errors. It
-// takes an offset integer (into the current `input`) to indicate
-// the location of the error, attaches the position to the end
-// of the error message, and then raises a `SyntaxError` with that
-// message.
-
-pp$4.raise = function(pos, message) {
-  var loc = getLineInfo(this.input, pos);
-  message += " (" + loc.line + ":" + loc.column + ")";
-  var err = new SyntaxError(message);
-  err.pos = pos; err.loc = loc; err.raisedAt = this.pos;
-  throw err
-};
-
-pp$4.raiseRecoverable = pp$4.raise;
-
-pp$4.curPosition = function() {
-  if (this.options.locations) {
-    return new Position(this.curLine, this.pos - this.lineStart)
-  }
-};
-
-var pp$5 = Parser.prototype;
-
-var Scope = function Scope(flags) {
-  this.flags = flags;
-  // A list of var-declared names in the current lexical scope
-  this.var = [];
-  // A list of lexically-declared names in the current lexical scope
-  this.lexical = [];
-  // A list of lexically-declared FunctionDeclaration names in the current lexical scope
-  this.functions = [];
-};
-
-// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.
-
-pp$5.enterScope = function(flags) {
-  this.scopeStack.push(new Scope(flags));
-};
-
-pp$5.exitScope = function() {
-  this.scopeStack.pop();
-};
-
-// The spec says:
-// > At the top level of a function, or script, function declarations are
-// > treated like var declarations rather than like lexical declarations.
-pp$5.treatFunctionsAsVarInScope = function(scope) {
-  return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)
-};
-
-pp$5.declareName = function(name, bindingType, pos) {
-  var redeclared = false;
-  if (bindingType === BIND_LEXICAL) {
-    var scope = this.currentScope();
-    redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;
-    scope.lexical.push(name);
-    if (this.inModule && (scope.flags & SCOPE_TOP))
-      { delete this.undefinedExports[name]; }
-  } else if (bindingType === BIND_SIMPLE_CATCH) {
-    var scope$1 = this.currentScope();
-    scope$1.lexical.push(name);
-  } else if (bindingType === BIND_FUNCTION) {
-    var scope$2 = this.currentScope();
-    if (this.treatFunctionsAsVar)
-      { redeclared = scope$2.lexical.indexOf(name) > -1; }
-    else
-      { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }
-    scope$2.functions.push(name);
-  } else {
-    for (var i = this.scopeStack.length - 1; i >= 0; --i) {
-      var scope$3 = this.scopeStack[i];
-      if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||
-          !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {
-        redeclared = true;
-        break
-      }
-      scope$3.var.push(name);
-      if (this.inModule && (scope$3.flags & SCOPE_TOP))
-        { delete this.undefinedExports[name]; }
-      if (scope$3.flags & SCOPE_VAR) { break }
-    }
-  }
-  if (redeclared) { this.raiseRecoverable(pos, ("Identifier '" + name + "' has already been declared")); }
-};
-
-pp$5.checkLocalExport = function(id) {
-  // scope.functions must be empty as Module code is always strict.
-  if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&
-      this.scopeStack[0].var.indexOf(id.name) === -1) {
-    this.undefinedExports[id.name] = id;
-  }
-};
-
-pp$5.currentScope = function() {
-  return this.scopeStack[this.scopeStack.length - 1]
-};
-
-pp$5.currentVarScope = function() {
-  for (var i = this.scopeStack.length - 1;; i--) {
-    var scope = this.scopeStack[i];
-    if (scope.flags & SCOPE_VAR) { return scope }
-  }
-};
-
-// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.
-pp$5.currentThisScope = function() {
-  for (var i = this.scopeStack.length - 1;; i--) {
-    var scope = this.scopeStack[i];
-    if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }
-  }
-};
-
-var Node = function Node(parser, pos, loc) {
-  this.type = "";
-  this.start = pos;
-  this.end = 0;
-  if (parser.options.locations)
-    { this.loc = new SourceLocation(parser, loc); }
-  if (parser.options.directSourceFile)
-    { this.sourceFile = parser.options.directSourceFile; }
-  if (parser.options.ranges)
-    { this.range = [pos, 0]; }
-};
-
-// Start an AST node, attaching a start offset.
-
-var pp$6 = Parser.prototype;
-
-pp$6.startNode = function() {
-  return new Node(this, this.start, this.startLoc)
-};
-
-pp$6.startNodeAt = function(pos, loc) {
-  return new Node(this, pos, loc)
-};
-
-// Finish an AST node, adding `type` and `end` properties.
-
-function finishNodeAt(node, type, pos, loc) {
-  node.type = type;
-  node.end = pos;
-  if (this.options.locations)
-    { node.loc.end = loc; }
-  if (this.options.ranges)
-    { node.range[1] = pos; }
-  return node
-}
-
-pp$6.finishNode = function(node, type) {
-  return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)
-};
-
-// Finish node at given position
-
-pp$6.finishNodeAt = function(node, type, pos, loc) {
-  return finishNodeAt.call(this, node, type, pos, loc)
-};
-
-// The algorithm used to determine whether a regexp can appear at a
-
-var TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {
-  this.token = token;
-  this.isExpr = !!isExpr;
-  this.preserveSpace = !!preserveSpace;
-  this.override = override;
-  this.generator = !!generator;
-};
-
-var types$1 = {
-  b_stat: new TokContext("{", false),
-  b_expr: new TokContext("{", true),
-  b_tmpl: new TokContext("${", false),
-  p_stat: new TokContext("(", false),
-  p_expr: new TokContext("(", true),
-  q_tmpl: new TokContext("`", true, true, function (p) { return p.tryReadTemplateToken(); }),
-  f_stat: new TokContext("function", false),
-  f_expr: new TokContext("function", true),
-  f_expr_gen: new TokContext("function", true, false, null, true),
-  f_gen: new TokContext("function", false, false, null, true)
-};
-
-var pp$7 = Parser.prototype;
-
-pp$7.initialContext = function() {
-  return [types$1.b_stat]
-};
-
-pp$7.braceIsBlock = function(prevType) {
-  var parent = this.curContext();
-  if (parent === types$1.f_expr || parent === types$1.f_stat)
-    { return true }
-  if (prevType === types.colon && (parent === types$1.b_stat || parent === types$1.b_expr))
-    { return !parent.isExpr }
-
-  // The check for `tt.name && exprAllowed` detects whether we are
-  // after a `yield` or `of` construct. See the `updateContext` for
-  // `tt.name`.
-  if (prevType === types._return || prevType === types.name && this.exprAllowed)
-    { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }
-  if (prevType === types._else || prevType === types.semi || prevType === types.eof || prevType === types.parenR || prevType === types.arrow)
-    { return true }
-  if (prevType === types.braceL)
-    { return parent === types$1.b_stat }
-  if (prevType === types._var || prevType === types._const || prevType === types.name)
-    { return false }
-  return !this.exprAllowed
-};
-
-pp$7.inGeneratorContext = function() {
-  for (var i = this.context.length - 1; i >= 1; i--) {
-    var context = this.context[i];
-    if (context.token === "function")
-      { return context.generator }
-  }
-  return false
-};
-
-pp$7.updateContext = function(prevType) {
-  var update, type = this.type;
-  if (type.keyword && prevType === types.dot)
-    { this.exprAllowed = false; }
-  else if (update = type.updateContext)
-    { update.call(this, prevType); }
-  else
-    { this.exprAllowed = type.beforeExpr; }
-};
-
-// Token-specific context update code
-
-types.parenR.updateContext = types.braceR.updateContext = function() {
-  if (this.context.length === 1) {
-    this.exprAllowed = true;
-    return
-  }
-  var out = this.context.pop();
-  if (out === types$1.b_stat && this.curContext().token === "function") {
-    out = this.context.pop();
-  }
-  this.exprAllowed = !out.isExpr;
-};
-
-types.braceL.updateContext = function(prevType) {
-  this.context.push(this.braceIsBlock(prevType) ? types$1.b_stat : types$1.b_expr);
-  this.exprAllowed = true;
-};
-
-types.dollarBraceL.updateContext = function() {
-  this.context.push(types$1.b_tmpl);
-  this.exprAllowed = true;
-};
-
-types.parenL.updateContext = function(prevType) {
-  var statementParens = prevType === types._if || prevType === types._for || prevType === types._with || prevType === types._while;
-  this.context.push(statementParens ? types$1.p_stat : types$1.p_expr);
-  this.exprAllowed = true;
-};
-
-types.incDec.updateContext = function() {
-  // tokExprAllowed stays unchanged
-};
-
-types._function.updateContext = types._class.updateContext = function(prevType) {
-  if (prevType.beforeExpr && prevType !== types.semi && prevType !== types._else &&
-      !(prevType === types._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&
-      !((prevType === types.colon || prevType === types.braceL) && this.curContext() === types$1.b_stat))
-    { this.context.push(types$1.f_expr); }
-  else
-    { this.context.push(types$1.f_stat); }
-  this.exprAllowed = false;
-};
-
-types.backQuote.updateContext = function() {
-  if (this.curContext() === types$1.q_tmpl)
-    { this.context.pop(); }
-  else
-    { this.context.push(types$1.q_tmpl); }
-  this.exprAllowed = false;
-};
-
-types.star.updateContext = function(prevType) {
-  if (prevType === types._function) {
-    var index = this.context.length - 1;
-    if (this.context[index] === types$1.f_expr)
-      { this.context[index] = types$1.f_expr_gen; }
-    else
-      { this.context[index] = types$1.f_gen; }
-  }
-  this.exprAllowed = true;
-};
-
-types.name.updateContext = function(prevType) {
-  var allowed = false;
-  if (this.options.ecmaVersion >= 6 && prevType !== types.dot) {
-    if (this.value === "of" && !this.exprAllowed ||
-        this.value === "yield" && this.inGeneratorContext())
-      { allowed = true; }
-  }
-  this.exprAllowed = allowed;
-};
-
-// This file contains Unicode properties extracted from the ECMAScript
-// specification. The lists are extracted like so:
-// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)
-
-// #table-binary-unicode-properties
-var ecma9BinaryProperties = "ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS";
-var ecma10BinaryProperties = ecma9BinaryProperties + " Extended_Pictographic";
-var ecma11BinaryProperties = ecma10BinaryProperties;
-var unicodeBinaryProperties = {
-  9: ecma9BinaryProperties,
-  10: ecma10BinaryProperties,
-  11: ecma11BinaryProperties
-};
-
-// #table-unicode-general-category-values
-var unicodeGeneralCategoryValues = "Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu";
-
-// #table-unicode-script-values
-var ecma9ScriptValues = "Adlam Adlm Ahom Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb";
-var ecma10ScriptValues = ecma9ScriptValues + " Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd";
-var ecma11ScriptValues = ecma10ScriptValues + " Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho";
-var unicodeScriptValues = {
-  9: ecma9ScriptValues,
-  10: ecma10ScriptValues,
-  11: ecma11ScriptValues
-};
-
-var data = {};
-function buildUnicodeData(ecmaVersion) {
-  var d = data[ecmaVersion] = {
-    binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + " " + unicodeGeneralCategoryValues),
-    nonBinary: {
-      General_Category: wordsRegexp(unicodeGeneralCategoryValues),
-      Script: wordsRegexp(unicodeScriptValues[ecmaVersion])
-    }
-  };
-  d.nonBinary.Script_Extensions = d.nonBinary.Script;
-
-  d.nonBinary.gc = d.nonBinary.General_Category;
-  d.nonBinary.sc = d.nonBinary.Script;
-  d.nonBinary.scx = d.nonBinary.Script_Extensions;
-}
-buildUnicodeData(9);
-buildUnicodeData(10);
-buildUnicodeData(11);
-
-var pp$8 = Parser.prototype;
-
-var RegExpValidationState = function RegExpValidationState(parser) {
-  this.parser = parser;
-  this.validFlags = "gim" + (parser.options.ecmaVersion >= 6 ? "uy" : "") + (parser.options.ecmaVersion >= 9 ? "s" : "");
-  this.unicodeProperties = data[parser.options.ecmaVersion >= 11 ? 11 : parser.options.ecmaVersion];
-  this.source = "";
-  this.flags = "";
-  this.start = 0;
-  this.switchU = false;
-  this.switchN = false;
-  this.pos = 0;
-  this.lastIntValue = 0;
-  this.lastStringValue = "";
-  this.lastAssertionIsQuantifiable = false;
-  this.numCapturingParens = 0;
-  this.maxBackReference = 0;
-  this.groupNames = [];
-  this.backReferenceNames = [];
-};
-
-RegExpValidationState.prototype.reset = function reset (start, pattern, flags) {
-  var unicode = flags.indexOf("u") !== -1;
-  this.start = start | 0;
-  this.source = pattern + "";
-  this.flags = flags;
-  this.switchU = unicode && this.parser.options.ecmaVersion >= 6;
-  this.switchN = unicode && this.parser.options.ecmaVersion >= 9;
-};
-
-RegExpValidationState.prototype.raise = function raise (message) {
-  this.parser.raiseRecoverable(this.start, ("Invalid regular expression: /" + (this.source) + "/: " + message));
-};
-
-// If u flag is given, this returns the code point at the index (it combines a surrogate pair).
-// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).
-RegExpValidationState.prototype.at = function at (i) {
-  var s = this.source;
-  var l = s.length;
-  if (i >= l) {
-    return -1
-  }
-  var c = s.charCodeAt(i);
-  if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {
-    return c
-  }
-  var next = s.charCodeAt(i + 1);
-  return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c
-};
-
-RegExpValidationState.prototype.nextIndex = function nextIndex (i) {
-  var s = this.source;
-  var l = s.length;
-  if (i >= l) {
-    return l
-  }
-  var c = s.charCodeAt(i), next;
-  if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||
-      (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {
-    return i + 1
-  }
-  return i + 2
-};
-
-RegExpValidationState.prototype.current = function current () {
-  return this.at(this.pos)
-};
-
-RegExpValidationState.prototype.lookahead = function lookahead () {
-  return this.at(this.nextIndex(this.pos))
-};
-
-RegExpValidationState.prototype.advance = function advance () {
-  this.pos = this.nextIndex(this.pos);
-};
-
-RegExpValidationState.prototype.eat = function eat (ch) {
-  if (this.current() === ch) {
-    this.advance();
-    return true
-  }
-  return false
-};
-
-function codePointToString(ch) {
-  if (ch <= 0xFFFF) { return String.fromCharCode(ch) }
-  ch -= 0x10000;
-  return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00)
-}
-
-/**
- * Validate the flags part of a given RegExpLiteral.
- *
- * @param {RegExpValidationState} state The state to validate RegExp.
- * @returns {void}
- */
-pp$8.validateRegExpFlags = function(state) {
-  var validFlags = state.validFlags;
-  var flags = state.flags;
-
-  for (var i = 0; i < flags.length; i++) {
-    var flag = flags.charAt(i);
-    if (validFlags.indexOf(flag) === -1) {
-      this.raise(state.start, "Invalid regular expression flag");
-    }
-    if (flags.indexOf(flag, i + 1) > -1) {
-      this.raise(state.start, "Duplicate regular expression flag");
-    }
-  }
-};
-
-/**
- * Validate the pattern part of a given RegExpLiteral.
- *
- * @param {RegExpValidationState} state The state to validate RegExp.
- * @returns {void}
- */
-pp$8.validateRegExpPattern = function(state) {
-  this.regexp_pattern(state);
-
-  // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of
-  // parsing contains a |GroupName|, reparse with the goal symbol
-  // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*
-  // exception if _P_ did not conform to the grammar, if any elements of _P_
-  // were not matched by the parse, or if any Early Error conditions exist.
-  if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {
-    state.switchN = true;
-    this.regexp_pattern(state);
-  }
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern
-pp$8.regexp_pattern = function(state) {
-  state.pos = 0;
-  state.lastIntValue = 0;
-  state.lastStringValue = "";
-  state.lastAssertionIsQuantifiable = false;
-  state.numCapturingParens = 0;
-  state.maxBackReference = 0;
-  state.groupNames.length = 0;
-  state.backReferenceNames.length = 0;
-
-  this.regexp_disjunction(state);
-
-  if (state.pos !== state.source.length) {
-    // Make the same messages as V8.
-    if (state.eat(0x29 /* ) */)) {
-      state.raise("Unmatched ')'");
-    }
-    if (state.eat(0x5D /* [ */) || state.eat(0x7D /* } */)) {
-      state.raise("Lone quantifier brackets");
-    }
-  }
-  if (state.maxBackReference > state.numCapturingParens) {
-    state.raise("Invalid escape");
-  }
-  for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {
-    var name = list[i];
-
-    if (state.groupNames.indexOf(name) === -1) {
-      state.raise("Invalid named capture referenced");
-    }
-  }
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction
-pp$8.regexp_disjunction = function(state) {
-  this.regexp_alternative(state);
-  while (state.eat(0x7C /* | */)) {
-    this.regexp_alternative(state);
-  }
-
-  // Make the same message as V8.
-  if (this.regexp_eatQuantifier(state, true)) {
-    state.raise("Nothing to repeat");
-  }
-  if (state.eat(0x7B /* { */)) {
-    state.raise("Lone quantifier brackets");
-  }
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative
-pp$8.regexp_alternative = function(state) {
-  while (state.pos < state.source.length && this.regexp_eatTerm(state))
-    { }
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term
-pp$8.regexp_eatTerm = function(state) {
-  if (this.regexp_eatAssertion(state)) {
-    // Handle `QuantifiableAssertion Quantifier` alternative.
-    // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion
-    // is a QuantifiableAssertion.
-    if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {
-      // Make the same message as V8.
-      if (state.switchU) {
-        state.raise("Invalid quantifier");
-      }
-    }
-    return true
-  }
-
-  if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {
-    this.regexp_eatQuantifier(state);
-    return true
-  }
-
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion
-pp$8.regexp_eatAssertion = function(state) {
-  var start = state.pos;
-  state.lastAssertionIsQuantifiable = false;
-
-  // ^, $
-  if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {
-    return true
-  }
-
-  // \b \B
-  if (state.eat(0x5C /* \ */)) {
-    if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {
-      return true
-    }
-    state.pos = start;
-  }
-
-  // Lookahead / Lookbehind
-  if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {
-    var lookbehind = false;
-    if (this.options.ecmaVersion >= 9) {
-      lookbehind = state.eat(0x3C /* < */);
-    }
-    if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {
-      this.regexp_disjunction(state);
-      if (!state.eat(0x29 /* ) */)) {
-        state.raise("Unterminated group");
-      }
-      state.lastAssertionIsQuantifiable = !lookbehind;
-      return true
-    }
-  }
-
-  state.pos = start;
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier
-pp$8.regexp_eatQuantifier = function(state, noError) {
-  if ( noError === void 0 ) noError = false;
-
-  if (this.regexp_eatQuantifierPrefix(state, noError)) {
-    state.eat(0x3F /* ? */);
-    return true
-  }
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix
-pp$8.regexp_eatQuantifierPrefix = function(state, noError) {
-  return (
-    state.eat(0x2A /* * */) ||
-    state.eat(0x2B /* + */) ||
-    state.eat(0x3F /* ? */) ||
-    this.regexp_eatBracedQuantifier(state, noError)
-  )
-};
-pp$8.regexp_eatBracedQuantifier = function(state, noError) {
-  var start = state.pos;
-  if (state.eat(0x7B /* { */)) {
-    var min = 0, max = -1;
-    if (this.regexp_eatDecimalDigits(state)) {
-      min = state.lastIntValue;
-      if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {
-        max = state.lastIntValue;
-      }
-      if (state.eat(0x7D /* } */)) {
-        // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term
-        if (max !== -1 && max < min && !noError) {
-          state.raise("numbers out of order in {} quantifier");
-        }
-        return true
-      }
-    }
-    if (state.switchU && !noError) {
-      state.raise("Incomplete quantifier");
-    }
-    state.pos = start;
-  }
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom
-pp$8.regexp_eatAtom = function(state) {
-  return (
-    this.regexp_eatPatternCharacters(state) ||
-    state.eat(0x2E /* . */) ||
-    this.regexp_eatReverseSolidusAtomEscape(state) ||
-    this.regexp_eatCharacterClass(state) ||
-    this.regexp_eatUncapturingGroup(state) ||
-    this.regexp_eatCapturingGroup(state)
-  )
-};
-pp$8.regexp_eatReverseSolidusAtomEscape = function(state) {
-  var start = state.pos;
-  if (state.eat(0x5C /* \ */)) {
-    if (this.regexp_eatAtomEscape(state)) {
-      return true
-    }
-    state.pos = start;
-  }
-  return false
-};
-pp$8.regexp_eatUncapturingGroup = function(state) {
-  var start = state.pos;
-  if (state.eat(0x28 /* ( */)) {
-    if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {
-      this.regexp_disjunction(state);
-      if (state.eat(0x29 /* ) */)) {
-        return true
-      }
-      state.raise("Unterminated group");
-    }
-    state.pos = start;
-  }
-  return false
-};
-pp$8.regexp_eatCapturingGroup = function(state) {
-  if (state.eat(0x28 /* ( */)) {
-    if (this.options.ecmaVersion >= 9) {
-      this.regexp_groupSpecifier(state);
-    } else if (state.current() === 0x3F /* ? */) {
-      state.raise("Invalid group");
-    }
-    this.regexp_disjunction(state);
-    if (state.eat(0x29 /* ) */)) {
-      state.numCapturingParens += 1;
-      return true
-    }
-    state.raise("Unterminated group");
-  }
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom
-pp$8.regexp_eatExtendedAtom = function(state) {
-  return (
-    state.eat(0x2E /* . */) ||
-    this.regexp_eatReverseSolidusAtomEscape(state) ||
-    this.regexp_eatCharacterClass(state) ||
-    this.regexp_eatUncapturingGroup(state) ||
-    this.regexp_eatCapturingGroup(state) ||
-    this.regexp_eatInvalidBracedQuantifier(state) ||
-    this.regexp_eatExtendedPatternCharacter(state)
-  )
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier
-pp$8.regexp_eatInvalidBracedQuantifier = function(state) {
-  if (this.regexp_eatBracedQuantifier(state, true)) {
-    state.raise("Nothing to repeat");
-  }
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter
-pp$8.regexp_eatSyntaxCharacter = function(state) {
-  var ch = state.current();
-  if (isSyntaxCharacter(ch)) {
-    state.lastIntValue = ch;
-    state.advance();
-    return true
-  }
-  return false
-};
-function isSyntaxCharacter(ch) {
-  return (
-    ch === 0x24 /* $ */ ||
-    ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||
-    ch === 0x2E /* . */ ||
-    ch === 0x3F /* ? */ ||
-    ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||
-    ch >= 0x7B /* { */ && ch <= 0x7D /* } */
-  )
-}
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter
-// But eat eager.
-pp$8.regexp_eatPatternCharacters = function(state) {
-  var start = state.pos;
-  var ch = 0;
-  while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {
-    state.advance();
-  }
-  return state.pos !== start
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter
-pp$8.regexp_eatExtendedPatternCharacter = function(state) {
-  var ch = state.current();
-  if (
-    ch !== -1 &&
-    ch !== 0x24 /* $ */ &&
-    !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&
-    ch !== 0x2E /* . */ &&
-    ch !== 0x3F /* ? */ &&
-    ch !== 0x5B /* [ */ &&
-    ch !== 0x5E /* ^ */ &&
-    ch !== 0x7C /* | */
-  ) {
-    state.advance();
-    return true
-  }
-  return false
-};
-
-// GroupSpecifier[U] ::
-//   [empty]
-//   `?` GroupName[?U]
-pp$8.regexp_groupSpecifier = function(state) {
-  if (state.eat(0x3F /* ? */)) {
-    if (this.regexp_eatGroupName(state)) {
-      if (state.groupNames.indexOf(state.lastStringValue) !== -1) {
-        state.raise("Duplicate capture group name");
-      }
-      state.groupNames.push(state.lastStringValue);
-      return
-    }
-    state.raise("Invalid group");
-  }
-};
-
-// GroupName[U] ::
-//   `<` RegExpIdentifierName[?U] `>`
-// Note: this updates `state.lastStringValue` property with the eaten name.
-pp$8.regexp_eatGroupName = function(state) {
-  state.lastStringValue = "";
-  if (state.eat(0x3C /* < */)) {
-    if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {
-      return true
-    }
-    state.raise("Invalid capture group name");
-  }
-  return false
-};
-
-// RegExpIdentifierName[U] ::
-//   RegExpIdentifierStart[?U]
-//   RegExpIdentifierName[?U] RegExpIdentifierPart[?U]
-// Note: this updates `state.lastStringValue` property with the eaten name.
-pp$8.regexp_eatRegExpIdentifierName = function(state) {
-  state.lastStringValue = "";
-  if (this.regexp_eatRegExpIdentifierStart(state)) {
-    state.lastStringValue += codePointToString(state.lastIntValue);
-    while (this.regexp_eatRegExpIdentifierPart(state)) {
-      state.lastStringValue += codePointToString(state.lastIntValue);
-    }
-    return true
-  }
-  return false
-};
-
-// RegExpIdentifierStart[U] ::
-//   UnicodeIDStart
-//   `$`
-//   `_`
-//   `\` RegExpUnicodeEscapeSequence[?U]
-pp$8.regexp_eatRegExpIdentifierStart = function(state) {
-  var start = state.pos;
-  var ch = state.current();
-  state.advance();
-
-  if (ch === 0x5C /* \ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state)) {
-    ch = state.lastIntValue;
-  }
-  if (isRegExpIdentifierStart(ch)) {
-    state.lastIntValue = ch;
-    return true
-  }
-
-  state.pos = start;
-  return false
-};
-function isRegExpIdentifierStart(ch) {
-  return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */
-}
-
-// RegExpIdentifierPart[U] ::
-//   UnicodeIDContinue
-//   `$`
-//   `_`
-//   `\` RegExpUnicodeEscapeSequence[?U]
-//   <ZWNJ>
-//   <ZWJ>
-pp$8.regexp_eatRegExpIdentifierPart = function(state) {
-  var start = state.pos;
-  var ch = state.current();
-  state.advance();
-
-  if (ch === 0x5C /* \ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state)) {
-    ch = state.lastIntValue;
-  }
-  if (isRegExpIdentifierPart(ch)) {
-    state.lastIntValue = ch;
-    return true
-  }
-
-  state.pos = start;
-  return false
-};
-function isRegExpIdentifierPart(ch) {
-  return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */
-}
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape
-pp$8.regexp_eatAtomEscape = function(state) {
-  if (
-    this.regexp_eatBackReference(state) ||
-    this.regexp_eatCharacterClassEscape(state) ||
-    this.regexp_eatCharacterEscape(state) ||
-    (state.switchN && this.regexp_eatKGroupName(state))
-  ) {
-    return true
-  }
-  if (state.switchU) {
-    // Make the same message as V8.
-    if (state.current() === 0x63 /* c */) {
-      state.raise("Invalid unicode escape");
-    }
-    state.raise("Invalid escape");
-  }
-  return false
-};
-pp$8.regexp_eatBackReference = function(state) {
-  var start = state.pos;
-  if (this.regexp_eatDecimalEscape(state)) {
-    var n = state.lastIntValue;
-    if (state.switchU) {
-      // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape
-      if (n > state.maxBackReference) {
-        state.maxBackReference = n;
-      }
-      return true
-    }
-    if (n <= state.numCapturingParens) {
-      return true
-    }
-    state.pos = start;
-  }
-  return false
-};
-pp$8.regexp_eatKGroupName = function(state) {
-  if (state.eat(0x6B /* k */)) {
-    if (this.regexp_eatGroupName(state)) {
-      state.backReferenceNames.push(state.lastStringValue);
-      return true
-    }
-    state.raise("Invalid named reference");
-  }
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape
-pp$8.regexp_eatCharacterEscape = function(state) {
-  return (
-    this.regexp_eatControlEscape(state) ||
-    this.regexp_eatCControlLetter(state) ||
-    this.regexp_eatZero(state) ||
-    this.regexp_eatHexEscapeSequence(state) ||
-    this.regexp_eatRegExpUnicodeEscapeSequence(state) ||
-    (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||
-    this.regexp_eatIdentityEscape(state)
-  )
-};
-pp$8.regexp_eatCControlLetter = function(state) {
-  var start = state.pos;
-  if (state.eat(0x63 /* c */)) {
-    if (this.regexp_eatControlLetter(state)) {
-      return true
-    }
-    state.pos = start;
-  }
-  return false
-};
-pp$8.regexp_eatZero = function(state) {
-  if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {
-    state.lastIntValue = 0;
-    state.advance();
-    return true
-  }
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape
-pp$8.regexp_eatControlEscape = function(state) {
-  var ch = state.current();
-  if (ch === 0x74 /* t */) {
-    state.lastIntValue = 0x09; /* \t */
-    state.advance();
-    return true
-  }
-  if (ch === 0x6E /* n */) {
-    state.lastIntValue = 0x0A; /* \n */
-    state.advance();
-    return true
-  }
-  if (ch === 0x76 /* v */) {
-    state.lastIntValue = 0x0B; /* \v */
-    state.advance();
-    return true
-  }
-  if (ch === 0x66 /* f */) {
-    state.lastIntValue = 0x0C; /* \f */
-    state.advance();
-    return true
-  }
-  if (ch === 0x72 /* r */) {
-    state.lastIntValue = 0x0D; /* \r */
-    state.advance();
-    return true
-  }
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter
-pp$8.regexp_eatControlLetter = function(state) {
-  var ch = state.current();
-  if (isControlLetter(ch)) {
-    state.lastIntValue = ch % 0x20;
-    state.advance();
-    return true
-  }
-  return false
-};
-function isControlLetter(ch) {
-  return (
-    (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||
-    (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)
-  )
-}
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence
-pp$8.regexp_eatRegExpUnicodeEscapeSequence = function(state) {
-  var start = state.pos;
-
-  if (state.eat(0x75 /* u */)) {
-    if (this.regexp_eatFixedHexDigits(state, 4)) {
-      var lead = state.lastIntValue;
-      if (state.switchU && lead >= 0xD800 && lead <= 0xDBFF) {
-        var leadSurrogateEnd = state.pos;
-        if (state.eat(0x5C /* \ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {
-          var trail = state.lastIntValue;
-          if (trail >= 0xDC00 && trail <= 0xDFFF) {
-            state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;
-            return true
-          }
-        }
-        state.pos = leadSurrogateEnd;
-        state.lastIntValue = lead;
-      }
-      return true
-    }
-    if (
-      state.switchU &&
-      state.eat(0x7B /* { */) &&
-      this.regexp_eatHexDigits(state) &&
-      state.eat(0x7D /* } */) &&
-      isValidUnicode(state.lastIntValue)
-    ) {
-      return true
-    }
-    if (state.switchU) {
-      state.raise("Invalid unicode escape");
-    }
-    state.pos = start;
-  }
-
-  return false
-};
-function isValidUnicode(ch) {
-  return ch >= 0 && ch <= 0x10FFFF
-}
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape
-pp$8.regexp_eatIdentityEscape = function(state) {
-  if (state.switchU) {
-    if (this.regexp_eatSyntaxCharacter(state)) {
-      return true
-    }
-    if (state.eat(0x2F /* / */)) {
-      state.lastIntValue = 0x2F; /* / */
-      return true
-    }
-    return false
-  }
-
-  var ch = state.current();
-  if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {
-    state.lastIntValue = ch;
-    state.advance();
-    return true
-  }
-
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape
-pp$8.regexp_eatDecimalEscape = function(state) {
-  state.lastIntValue = 0;
-  var ch = state.current();
-  if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {
-    do {
-      state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);
-      state.advance();
-    } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)
-    return true
-  }
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape
-pp$8.regexp_eatCharacterClassEscape = function(state) {
-  var ch = state.current();
-
-  if (isCharacterClassEscape(ch)) {
-    state.lastIntValue = -1;
-    state.advance();
-    return true
-  }
-
-  if (
-    state.switchU &&
-    this.options.ecmaVersion >= 9 &&
-    (ch === 0x50 /* P */ || ch === 0x70 /* p */)
-  ) {
-    state.lastIntValue = -1;
-    state.advance();
-    if (
-      state.eat(0x7B /* { */) &&
-      this.regexp_eatUnicodePropertyValueExpression(state) &&
-      state.eat(0x7D /* } */)
-    ) {
-      return true
-    }
-    state.raise("Invalid property name");
-  }
-
-  return false
-};
-function isCharacterClassEscape(ch) {
-  return (
-    ch === 0x64 /* d */ ||
-    ch === 0x44 /* D */ ||
-    ch === 0x73 /* s */ ||
-    ch === 0x53 /* S */ ||
-    ch === 0x77 /* w */ ||
-    ch === 0x57 /* W */
-  )
-}
-
-// UnicodePropertyValueExpression ::
-//   UnicodePropertyName `=` UnicodePropertyValue
-//   LoneUnicodePropertyNameOrValue
-pp$8.regexp_eatUnicodePropertyValueExpression = function(state) {
-  var start = state.pos;
-
-  // UnicodePropertyName `=` UnicodePropertyValue
-  if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {
-    var name = state.lastStringValue;
-    if (this.regexp_eatUnicodePropertyValue(state)) {
-      var value = state.lastStringValue;
-      this.regexp_validateUnicodePropertyNameAndValue(state, name, value);
-      return true
-    }
-  }
-  state.pos = start;
-
-  // LoneUnicodePropertyNameOrValue
-  if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {
-    var nameOrValue = state.lastStringValue;
-    this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue);
-    return true
-  }
-  return false
-};
-pp$8.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {
-  if (!has(state.unicodeProperties.nonBinary, name))
-    { state.raise("Invalid property name"); }
-  if (!state.unicodeProperties.nonBinary[name].test(value))
-    { state.raise("Invalid property value"); }
-};
-pp$8.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {
-  if (!state.unicodeProperties.binary.test(nameOrValue))
-    { state.raise("Invalid property name"); }
-};
-
-// UnicodePropertyName ::
-//   UnicodePropertyNameCharacters
-pp$8.regexp_eatUnicodePropertyName = function(state) {
-  var ch = 0;
-  state.lastStringValue = "";
-  while (isUnicodePropertyNameCharacter(ch = state.current())) {
-    state.lastStringValue += codePointToString(ch);
-    state.advance();
-  }
-  return state.lastStringValue !== ""
-};
-function isUnicodePropertyNameCharacter(ch) {
-  return isControlLetter(ch) || ch === 0x5F /* _ */
-}
-
-// UnicodePropertyValue ::
-//   UnicodePropertyValueCharacters
-pp$8.regexp_eatUnicodePropertyValue = function(state) {
-  var ch = 0;
-  state.lastStringValue = "";
-  while (isUnicodePropertyValueCharacter(ch = state.current())) {
-    state.lastStringValue += codePointToString(ch);
-    state.advance();
-  }
-  return state.lastStringValue !== ""
-};
-function isUnicodePropertyValueCharacter(ch) {
-  return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)
-}
-
-// LoneUnicodePropertyNameOrValue ::
-//   UnicodePropertyValueCharacters
-pp$8.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {
-  return this.regexp_eatUnicodePropertyValue(state)
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass
-pp$8.regexp_eatCharacterClass = function(state) {
-  if (state.eat(0x5B /* [ */)) {
-    state.eat(0x5E /* ^ */);
-    this.regexp_classRanges(state);
-    if (state.eat(0x5D /* [ */)) {
-      return true
-    }
-    // Unreachable since it threw "unterminated regular expression" error before.
-    state.raise("Unterminated character class");
-  }
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges
-// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges
-// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash
-pp$8.regexp_classRanges = function(state) {
-  while (this.regexp_eatClassAtom(state)) {
-    var left = state.lastIntValue;
-    if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {
-      var right = state.lastIntValue;
-      if (state.switchU && (left === -1 || right === -1)) {
-        state.raise("Invalid character class");
-      }
-      if (left !== -1 && right !== -1 && left > right) {
-        state.raise("Range out of order in character class");
-      }
-    }
-  }
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom
-// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash
-pp$8.regexp_eatClassAtom = function(state) {
-  var start = state.pos;
-
-  if (state.eat(0x5C /* \ */)) {
-    if (this.regexp_eatClassEscape(state)) {
-      return true
-    }
-    if (state.switchU) {
-      // Make the same message as V8.
-      var ch$1 = state.current();
-      if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {
-        state.raise("Invalid class escape");
-      }
-      state.raise("Invalid escape");
-    }
-    state.pos = start;
-  }
-
-  var ch = state.current();
-  if (ch !== 0x5D /* [ */) {
-    state.lastIntValue = ch;
-    state.advance();
-    return true
-  }
-
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape
-pp$8.regexp_eatClassEscape = function(state) {
-  var start = state.pos;
-
-  if (state.eat(0x62 /* b */)) {
-    state.lastIntValue = 0x08; /* <BS> */
-    return true
-  }
-
-  if (state.switchU && state.eat(0x2D /* - */)) {
-    state.lastIntValue = 0x2D; /* - */
-    return true
-  }
-
-  if (!state.switchU && state.eat(0x63 /* c */)) {
-    if (this.regexp_eatClassControlLetter(state)) {
-      return true
-    }
-    state.pos = start;
-  }
-
-  return (
-    this.regexp_eatCharacterClassEscape(state) ||
-    this.regexp_eatCharacterEscape(state)
-  )
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter
-pp$8.regexp_eatClassControlLetter = function(state) {
-  var ch = state.current();
-  if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {
-    state.lastIntValue = ch % 0x20;
-    state.advance();
-    return true
-  }
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence
-pp$8.regexp_eatHexEscapeSequence = function(state) {
-  var start = state.pos;
-  if (state.eat(0x78 /* x */)) {
-    if (this.regexp_eatFixedHexDigits(state, 2)) {
-      return true
-    }
-    if (state.switchU) {
-      state.raise("Invalid escape");
-    }
-    state.pos = start;
-  }
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits
-pp$8.regexp_eatDecimalDigits = function(state) {
-  var start = state.pos;
-  var ch = 0;
-  state.lastIntValue = 0;
-  while (isDecimalDigit(ch = state.current())) {
-    state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);
-    state.advance();
-  }
-  return state.pos !== start
-};
-function isDecimalDigit(ch) {
-  return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */
-}
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits
-pp$8.regexp_eatHexDigits = function(state) {
-  var start = state.pos;
-  var ch = 0;
-  state.lastIntValue = 0;
-  while (isHexDigit(ch = state.current())) {
-    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);
-    state.advance();
-  }
-  return state.pos !== start
-};
-function isHexDigit(ch) {
-  return (
-    (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||
-    (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||
-    (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)
-  )
-}
-function hexToInt(ch) {
-  if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {
-    return 10 + (ch - 0x41 /* A */)
-  }
-  if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {
-    return 10 + (ch - 0x61 /* a */)
-  }
-  return ch - 0x30 /* 0 */
-}
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence
-// Allows only 0-377(octal) i.e. 0-255(decimal).
-pp$8.regexp_eatLegacyOctalEscapeSequence = function(state) {
-  if (this.regexp_eatOctalDigit(state)) {
-    var n1 = state.lastIntValue;
-    if (this.regexp_eatOctalDigit(state)) {
-      var n2 = state.lastIntValue;
-      if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {
-        state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;
-      } else {
-        state.lastIntValue = n1 * 8 + n2;
-      }
-    } else {
-      state.lastIntValue = n1;
-    }
-    return true
-  }
-  return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit
-pp$8.regexp_eatOctalDigit = function(state) {
-  var ch = state.current();
-  if (isOctalDigit(ch)) {
-    state.lastIntValue = ch - 0x30; /* 0 */
-    state.advance();
-    return true
-  }
-  state.lastIntValue = 0;
-  return false
-};
-function isOctalDigit(ch) {
-  return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */
-}
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits
-// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit
-// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence
-pp$8.regexp_eatFixedHexDigits = function(state, length) {
-  var start = state.pos;
-  state.lastIntValue = 0;
-  for (var i = 0; i < length; ++i) {
-    var ch = state.current();
-    if (!isHexDigit(ch)) {
-      state.pos = start;
-      return false
-    }
-    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);
-    state.advance();
-  }
-  return true
-};
-
-// Object type used to represent tokens. Note that normally, tokens
-// simply exist as properties on the parser object. This is only
-// used for the onToken callback and the external tokenizer.
-
-var Token = function Token(p) {
-  this.type = p.type;
-  this.value = p.value;
-  this.start = p.start;
-  this.end = p.end;
-  if (p.options.locations)
-    { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }
-  if (p.options.ranges)
-    { this.range = [p.start, p.end]; }
-};
-
-// ## Tokenizer
-
-var pp$9 = Parser.prototype;
-
-// Move to the next token
-
-pp$9.next = function() {
-  if (this.options.onToken)
-    { this.options.onToken(new Token(this)); }
-
-  this.lastTokEnd = this.end;
-  this.lastTokStart = this.start;
-  this.lastTokEndLoc = this.endLoc;
-  this.lastTokStartLoc = this.startLoc;
-  this.nextToken();
-};
-
-pp$9.getToken = function() {
-  this.next();
-  return new Token(this)
-};
-
-// If we're in an ES6 environment, make parsers iterable
-if (typeof Symbol !== "undefined")
-  { pp$9[Symbol.iterator] = function() {
-    var this$1 = this;
-
-    return {
-      next: function () {
-        var token = this$1.getToken();
-        return {
-          done: token.type === types.eof,
-          value: token
-        }
-      }
-    }
-  }; }
-
-// Toggle strict mode. Re-reads the next number or string to please
-// pedantic tests (`"use strict"; 010;` should fail).
-
-pp$9.curContext = function() {
-  return this.context[this.context.length - 1]
-};
-
-// Read a single token, updating the parser object's token-related
-// properties.
-
-pp$9.nextToken = function() {
-  var curContext = this.curContext();
-  if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }
-
-  this.start = this.pos;
-  if (this.options.locations) { this.startLoc = this.curPosition(); }
-  if (this.pos >= this.input.length) { return this.finishToken(types.eof) }
-
-  if (curContext.override) { return curContext.override(this) }
-  else { this.readToken(this.fullCharCodeAtPos()); }
-};
-
-pp$9.readToken = function(code) {
-  // Identifier or keyword. '\uXXXX' sequences are allowed in
-  // identifiers, so '\' also dispatches to that.
-  if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\' */)
-    { return this.readWord() }
-
-  return this.getTokenFromCode(code)
-};
-
-pp$9.fullCharCodeAtPos = function() {
-  var code = this.input.charCodeAt(this.pos);
-  if (code <= 0xd7ff || code >= 0xe000) { return code }
-  var next = this.input.charCodeAt(this.pos + 1);
-  return (code << 10) + next - 0x35fdc00
-};
-
-pp$9.skipBlockComment = function() {
-  var startLoc = this.options.onComment && this.curPosition();
-  var start = this.pos, end = this.input.indexOf("*/", this.pos += 2);
-  if (end === -1) { this.raise(this.pos - 2, "Unterminated comment"); }
-  this.pos = end + 2;
-  if (this.options.locations) {
-    lineBreakG.lastIndex = start;
-    var match;
-    while ((match = lineBreakG.exec(this.input)) && match.index < this.pos) {
-      ++this.curLine;
-      this.lineStart = match.index + match[0].length;
-    }
-  }
-  if (this.options.onComment)
-    { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,
-                           startLoc, this.curPosition()); }
-};
-
-pp$9.skipLineComment = function(startSkip) {
-  var start = this.pos;
-  var startLoc = this.options.onComment && this.curPosition();
-  var ch = this.input.charCodeAt(this.pos += startSkip);
-  while (this.pos < this.input.length && !isNewLine(ch)) {
-    ch = this.input.charCodeAt(++this.pos);
-  }
-  if (this.options.onComment)
-    { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,
-                           startLoc, this.curPosition()); }
-};
-
-// Called at the start of the parse and after every token. Skips
-// whitespace and comments, and.
-
-pp$9.skipSpace = function() {
-  loop: while (this.pos < this.input.length) {
-    var ch = this.input.charCodeAt(this.pos);
-    switch (ch) {
-    case 32: case 160: // ' '
-      ++this.pos;
-      break
-    case 13:
-      if (this.input.charCodeAt(this.pos + 1) === 10) {
-        ++this.pos;
-      }
-    case 10: case 8232: case 8233:
-      ++this.pos;
-      if (this.options.locations) {
-        ++this.curLine;
-        this.lineStart = this.pos;
-      }
-      break
-    case 47: // '/'
-      switch (this.input.charCodeAt(this.pos + 1)) {
-      case 42: // '*'
-        this.skipBlockComment();
-        break
-      case 47:
-        this.skipLineComment(2);
-        break
-      default:
-        break loop
-      }
-      break
-    default:
-      if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {
-        ++this.pos;
-      } else {
-        break loop
-      }
-    }
-  }
-};
-
-// Called at the end of every token. Sets `end`, `val`, and
-// maintains `context` and `exprAllowed`, and skips the space after
-// the token, so that the next one's `start` will point at the
-// right position.
-
-pp$9.finishToken = function(type, val) {
-  this.end = this.pos;
-  if (this.options.locations) { this.endLoc = this.curPosition(); }
-  var prevType = this.type;
-  this.type = type;
-  this.value = val;
-
-  this.updateContext(prevType);
-};
-
-// ### Token reading
-
-// This is the function that is called to fetch the next token. It
-// is somewhat obscure, because it works in character codes rather
-// than characters, and because operator parsing has been inlined
-// into it.
-//
-// All in the name of speed.
-//
-pp$9.readToken_dot = function() {
-  var next = this.input.charCodeAt(this.pos + 1);
-  if (next >= 48 && next <= 57) { return this.readNumber(true) }
-  var next2 = this.input.charCodeAt(this.pos + 2);
-  if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'
-    this.pos += 3;
-    return this.finishToken(types.ellipsis)
-  } else {
-    ++this.pos;
-    return this.finishToken(types.dot)
-  }
-};
-
-pp$9.readToken_slash = function() { // '/'
-  var next = this.input.charCodeAt(this.pos + 1);
-  if (this.exprAllowed) { ++this.pos; return this.readRegexp() }
-  if (next === 61) { return this.finishOp(types.assign, 2) }
-  return this.finishOp(types.slash, 1)
-};
-
-pp$9.readToken_mult_modulo_exp = function(code) { // '%*'
-  var next = this.input.charCodeAt(this.pos + 1);
-  var size = 1;
-  var tokentype = code === 42 ? types.star : types.modulo;
-
-  // exponentiation operator ** and **=
-  if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {
-    ++size;
-    tokentype = types.starstar;
-    next = this.input.charCodeAt(this.pos + 2);
-  }
-
-  if (next === 61) { return this.finishOp(types.assign, size + 1) }
-  return this.finishOp(tokentype, size)
-};
-
-pp$9.readToken_pipe_amp = function(code) { // '|&'
-  var next = this.input.charCodeAt(this.pos + 1);
-  if (next === code) { return this.finishOp(code === 124 ? types.logicalOR : types.logicalAND, 2) }
-  if (next === 61) { return this.finishOp(types.assign, 2) }
-  return this.finishOp(code === 124 ? types.bitwiseOR : types.bitwiseAND, 1)
-};
-
-pp$9.readToken_caret = function() { // '^'
-  var next = this.input.charCodeAt(this.pos + 1);
-  if (next === 61) { return this.finishOp(types.assign, 2) }
-  return this.finishOp(types.bitwiseXOR, 1)
-};
-
-pp$9.readToken_plus_min = function(code) { // '+-'
-  var next = this.input.charCodeAt(this.pos + 1);
-  if (next === code) {
-    if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&
-        (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {
-      // A `-->` line comment
-      this.skipLineComment(3);
-      this.skipSpace();
-      return this.nextToken()
-    }
-    return this.finishOp(types.incDec, 2)
-  }
-  if (next === 61) { return this.finishOp(types.assign, 2) }
-  return this.finishOp(types.plusMin, 1)
-};
-
-pp$9.readToken_lt_gt = function(code) { // '<>'
-  var next = this.input.charCodeAt(this.pos + 1);
-  var size = 1;
-  if (next === code) {
-    size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;
-    if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types.assign, size + 1) }
-    return this.finishOp(types.bitShift, size)
-  }
-  if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&
-      this.input.charCodeAt(this.pos + 3) === 45) {
-    // `<!--`, an XML-style comment that should be interpreted as a line comment
-    this.skipLineComment(4);
-    this.skipSpace();
-    return this.nextToken()
-  }
-  if (next === 61) { size = 2; }
-  return this.finishOp(types.relational, size)
-};
-
-pp$9.readToken_eq_excl = function(code) { // '=!'
-  var next = this.input.charCodeAt(this.pos + 1);
-  if (next === 61) { return this.finishOp(types.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }
-  if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'
-    this.pos += 2;
-    return this.finishToken(types.arrow)
-  }
-  return this.finishOp(code === 61 ? types.eq : types.prefix, 1)
-};
-
-pp$9.getTokenFromCode = function(code) {
-  switch (code) {
-  // The interpretation of a dot depends on whether it is followed
-  // by a digit or another two dots.
-  case 46: // '.'
-    return this.readToken_dot()
-
-  // Punctuation tokens.
-  case 40: ++this.pos; return this.finishToken(types.parenL)
-  case 41: ++this.pos; return this.finishToken(types.parenR)
-  case 59: ++this.pos; return this.finishToken(types.semi)
-  case 44: ++this.pos; return this.finishToken(types.comma)
-  case 91: ++this.pos; return this.finishToken(types.bracketL)
-  case 93: ++this.pos; return this.finishToken(types.bracketR)
-  case 123: ++this.pos; return this.finishToken(types.braceL)
-  case 125: ++this.pos; return this.finishToken(types.braceR)
-  case 58: ++this.pos; return this.finishToken(types.colon)
-  case 63: ++this.pos; return this.finishToken(types.question)
-
-  case 96: // '`'
-    if (this.options.ecmaVersion < 6) { break }
-    ++this.pos;
-    return this.finishToken(types.backQuote)
-
-  case 48: // '0'
-    var next = this.input.charCodeAt(this.pos + 1);
-    if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number
-    if (this.options.ecmaVersion >= 6) {
-      if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number
-      if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number
-    }
-
-  // Anything else beginning with a digit is an integer, octal
-  // number, or float.
-  case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9
-    return this.readNumber(false)
-
-  // Quotes produce strings.
-  case 34: case 39: // '"', "'"
-    return this.readString(code)
-
-  // Operators are parsed inline in tiny state machines. '=' (61) is
-  // often referred to. `finishOp` simply skips the amount of
-  // characters it is given as second argument, and returns a token
-  // of the type given by its first argument.
-
-  case 47: // '/'
-    return this.readToken_slash()
-
-  case 37: case 42: // '%*'
-    return this.readToken_mult_modulo_exp(code)
-
-  case 124: case 38: // '|&'
-    return this.readToken_pipe_amp(code)
-
-  case 94: // '^'
-    return this.readToken_caret()
-
-  case 43: case 45: // '+-'
-    return this.readToken_plus_min(code)
-
-  case 60: case 62: // '<>'
-    return this.readToken_lt_gt(code)
-
-  case 61: case 33: // '=!'
-    return this.readToken_eq_excl(code)
-
-  case 126: // '~'
-    return this.finishOp(types.prefix, 1)
-  }
-
-  this.raise(this.pos, "Unexpected character '" + codePointToString$1(code) + "'");
-};
-
-pp$9.finishOp = function(type, size) {
-  var str = this.input.slice(this.pos, this.pos + size);
-  this.pos += size;
-  return this.finishToken(type, str)
-};
-
-pp$9.readRegexp = function() {
-  var escaped, inClass, start = this.pos;
-  for (;;) {
-    if (this.pos >= this.input.length) { this.raise(start, "Unterminated regular expression"); }
-    var ch = this.input.charAt(this.pos);
-    if (lineBreak.test(ch)) { this.raise(start, "Unterminated regular expression"); }
-    if (!escaped) {
-      if (ch === "[") { inClass = true; }
-      else if (ch === "]" && inClass) { inClass = false; }
-      else if (ch === "/" && !inClass) { break }
-      escaped = ch === "\\";
-    } else { escaped = false; }
-    ++this.pos;
-  }
-  var pattern = this.input.slice(start, this.pos);
-  ++this.pos;
-  var flagsStart = this.pos;
-  var flags = this.readWord1();
-  if (this.containsEsc) { this.unexpected(flagsStart); }
-
-  // Validate pattern
-  var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));
-  state.reset(start, pattern, flags);
-  this.validateRegExpFlags(state);
-  this.validateRegExpPattern(state);
-
-  // Create Literal#value property value.
-  var value = null;
-  try {
-    value = new RegExp(pattern, flags);
-  } catch (e) {
-    // ESTree requires null if it failed to instantiate RegExp object.
-    // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral
-  }
-
-  return this.finishToken(types.regexp, {pattern: pattern, flags: flags, value: value})
-};
-
-// Read an integer in the given radix. Return null if zero digits
-// were read, the integer value otherwise. When `len` is given, this
-// will return `null` unless the integer has exactly `len` digits.
-
-pp$9.readInt = function(radix, len) {
-  var start = this.pos, total = 0;
-  for (var i = 0, e = len == null ? Infinity : len; i < e; ++i) {
-    var code = this.input.charCodeAt(this.pos), val = (void 0);
-    if (code >= 97) { val = code - 97 + 10; } // a
-    else if (code >= 65) { val = code - 65 + 10; } // A
-    else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9
-    else { val = Infinity; }
-    if (val >= radix) { break }
-    ++this.pos;
-    total = total * radix + val;
-  }
-  if (this.pos === start || len != null && this.pos - start !== len) { return null }
-
-  return total
-};
-
-pp$9.readRadixNumber = function(radix) {
-  var start = this.pos;
-  this.pos += 2; // 0x
-  var val = this.readInt(radix);
-  if (val == null) { this.raise(this.start + 2, "Expected number in radix " + radix); }
-  if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {
-    val = typeof BigInt !== "undefined" ? BigInt(this.input.slice(start, this.pos)) : null;
-    ++this.pos;
-  } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }
-  return this.finishToken(types.num, val)
-};
-
-// Read an integer, octal integer, or floating-point number.
-
-pp$9.readNumber = function(startsWithDot) {
-  var start = this.pos;
-  if (!startsWithDot && this.readInt(10) === null) { this.raise(start, "Invalid number"); }
-  var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;
-  if (octal && this.strict) { this.raise(start, "Invalid number"); }
-  if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }
-  var next = this.input.charCodeAt(this.pos);
-  if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {
-    var str$1 = this.input.slice(start, this.pos);
-    var val$1 = typeof BigInt !== "undefined" ? BigInt(str$1) : null;
-    ++this.pos;
-    if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }
-    return this.finishToken(types.num, val$1)
-  }
-  if (next === 46 && !octal) { // '.'
-    ++this.pos;
-    this.readInt(10);
-    next = this.input.charCodeAt(this.pos);
-  }
-  if ((next === 69 || next === 101) && !octal) { // 'eE'
-    next = this.input.charCodeAt(++this.pos);
-    if (next === 43 || next === 45) { ++this.pos; } // '+-'
-    if (this.readInt(10) === null) { this.raise(start, "Invalid number"); }
-  }
-  if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }
-
-  var str = this.input.slice(start, this.pos);
-  var val = octal ? parseInt(str, 8) : parseFloat(str);
-  return this.finishToken(types.num, val)
-};
-
-// Read a string value, interpreting backslash-escapes.
-
-pp$9.readCodePoint = function() {
-  var ch = this.input.charCodeAt(this.pos), code;
-
-  if (ch === 123) { // '{'
-    if (this.options.ecmaVersion < 6) { this.unexpected(); }
-    var codePos = ++this.pos;
-    code = this.readHexChar(this.input.indexOf("}", this.pos) - this.pos);
-    ++this.pos;
-    if (code > 0x10FFFF) { this.invalidStringToken(codePos, "Code point out of bounds"); }
-  } else {
-    code = this.readHexChar(4);
-  }
-  return code
-};
-
-function codePointToString$1(code) {
-  // UTF-16 Decoding
-  if (code <= 0xFFFF) { return String.fromCharCode(code) }
-  code -= 0x10000;
-  return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)
-}
-
-pp$9.readString = function(quote) {
-  var out = "", chunkStart = ++this.pos;
-  for (;;) {
-    if (this.pos >= this.input.length) { this.raise(this.start, "Unterminated string constant"); }
-    var ch = this.input.charCodeAt(this.pos);
-    if (ch === quote) { break }
-    if (ch === 92) { // '\'
-      out += this.input.slice(chunkStart, this.pos);
-      out += this.readEscapedChar(false);
-      chunkStart = this.pos;
-    } else {
-      if (isNewLine(ch, this.options.ecmaVersion >= 10)) { this.raise(this.start, "Unterminated string constant"); }
-      ++this.pos;
-    }
-  }
-  out += this.input.slice(chunkStart, this.pos++);
-  return this.finishToken(types.string, out)
-};
-
-// Reads template string tokens.
-
-var INVALID_TEMPLATE_ESCAPE_ERROR = {};
-
-pp$9.tryReadTemplateToken = function() {
-  this.inTemplateElement = true;
-  try {
-    this.readTmplToken();
-  } catch (err) {
-    if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {
-      this.readInvalidTemplateToken();
-    } else {
-      throw err
-    }
-  }
-
-  this.inTemplateElement = false;
-};
-
-pp$9.invalidStringToken = function(position, message) {
-  if (this.inTemplateElement && this.options.ecmaVersion >= 9) {
-    throw INVALID_TEMPLATE_ESCAPE_ERROR
-  } else {
-    this.raise(position, message);
-  }
-};
-
-pp$9.readTmplToken = function() {
-  var out = "", chunkStart = this.pos;
-  for (;;) {
-    if (this.pos >= this.input.length) { this.raise(this.start, "Unterminated template"); }
-    var ch = this.input.charCodeAt(this.pos);
-    if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'
-      if (this.pos === this.start && (this.type === types.template || this.type === types.invalidTemplate)) {
-        if (ch === 36) {
-          this.pos += 2;
-          return this.finishToken(types.dollarBraceL)
-        } else {
-          ++this.pos;
-          return this.finishToken(types.backQuote)
-        }
-      }
-      out += this.input.slice(chunkStart, this.pos);
-      return this.finishToken(types.template, out)
-    }
-    if (ch === 92) { // '\'
-      out += this.input.slice(chunkStart, this.pos);
-      out += this.readEscapedChar(true);
-      chunkStart = this.pos;
-    } else if (isNewLine(ch)) {
-      out += this.input.slice(chunkStart, this.pos);
-      ++this.pos;
-      switch (ch) {
-      case 13:
-        if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }
-      case 10:
-        out += "\n";
-        break
-      default:
-        out += String.fromCharCode(ch);
-        break
-      }
-      if (this.options.locations) {
-        ++this.curLine;
-        this.lineStart = this.pos;
-      }
-      chunkStart = this.pos;
-    } else {
-      ++this.pos;
-    }
-  }
-};
-
-// Reads a template token to search for the end, without validating any escape sequences
-pp$9.readInvalidTemplateToken = function() {
-  for (; this.pos < this.input.length; this.pos++) {
-    switch (this.input[this.pos]) {
-    case "\\":
-      ++this.pos;
-      break
-
-    case "$":
-      if (this.input[this.pos + 1] !== "{") {
-        break
-      }
-    // falls through
-
-    case "`":
-      return this.finishToken(types.invalidTemplate, this.input.slice(this.start, this.pos))
-
-    // no default
-    }
-  }
-  this.raise(this.start, "Unterminated template");
-};
-
-// Used to read escaped characters
-
-pp$9.readEscapedChar = function(inTemplate) {
-  var ch = this.input.charCodeAt(++this.pos);
-  ++this.pos;
-  switch (ch) {
-  case 110: return "\n" // 'n' -> '\n'
-  case 114: return "\r" // 'r' -> '\r'
-  case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'
-  case 117: return codePointToString$1(this.readCodePoint()) // 'u'
-  case 116: return "\t" // 't' -> '\t'
-  case 98: return "\b" // 'b' -> '\b'
-  case 118: return "\u000b" // 'v' -> '\u000b'
-  case 102: return "\f" // 'f' -> '\f'
-  case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\r\n'
-  case 10: // ' \n'
-    if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }
-    return ""
-  default:
-    if (ch >= 48 && ch <= 55) {
-      var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];
-      var octal = parseInt(octalStr, 8);
-      if (octal > 255) {
-        octalStr = octalStr.slice(0, -1);
-        octal = parseInt(octalStr, 8);
-      }
-      this.pos += octalStr.length - 1;
-      ch = this.input.charCodeAt(this.pos);
-      if ((octalStr !== "0" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {
-        this.invalidStringToken(
-          this.pos - 1 - octalStr.length,
-          inTemplate
-            ? "Octal literal in template string"
-            : "Octal literal in strict mode"
-        );
-      }
-      return String.fromCharCode(octal)
-    }
-    if (isNewLine(ch)) {
-      // Unicode new line characters after \ get removed from output in both
-      // template literals and strings
-      return ""
-    }
-    return String.fromCharCode(ch)
-  }
-};
-
-// Used to read character escape sequences ('\x', '\u', '\U').
-
-pp$9.readHexChar = function(len) {
-  var codePos = this.pos;
-  var n = this.readInt(16, len);
-  if (n === null) { this.invalidStringToken(codePos, "Bad character escape sequence"); }
-  return n
-};
-
-// Read an identifier, and return it as a string. Sets `this.containsEsc`
-// to whether the word contained a '\u' escape.
-//
-// Incrementally adds only escaped chars, adding other chunks as-is
-// as a micro-optimization.
-
-pp$9.readWord1 = function() {
-  this.containsEsc = false;
-  var word = "", first = true, chunkStart = this.pos;
-  var astral = this.options.ecmaVersion >= 6;
-  while (this.pos < this.input.length) {
-    var ch = this.fullCharCodeAtPos();
-    if (isIdentifierChar(ch, astral)) {
-      this.pos += ch <= 0xffff ? 1 : 2;
-    } else if (ch === 92) { // "\"
-      this.containsEsc = true;
-      word += this.input.slice(chunkStart, this.pos);
-      var escStart = this.pos;
-      if (this.input.charCodeAt(++this.pos) !== 117) // "u"
-        { this.invalidStringToken(this.pos, "Expecting Unicode escape sequence \\uXXXX"); }
-      ++this.pos;
-      var esc = this.readCodePoint();
-      if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))
-        { this.invalidStringToken(escStart, "Invalid Unicode escape"); }
-      word += codePointToString$1(esc);
-      chunkStart = this.pos;
-    } else {
-      break
-    }
-    first = false;
-  }
-  return word + this.input.slice(chunkStart, this.pos)
-};
-
-// Read an identifier or keyword token. Will check for reserved
-// words when necessary.
-
-pp$9.readWord = function() {
-  var word = this.readWord1();
-  var type = types.name;
-  if (this.keywords.test(word)) {
-    if (this.containsEsc) { this.raiseRecoverable(this.start, "Escape sequence in keyword " + word); }
-    type = keywords$1[word];
-  }
-  return this.finishToken(type, word)
-};
-
-// Acorn is a tiny, fast JavaScript parser written in JavaScript.
-
-var version = "6.4.0";
-
-Parser.acorn = {
-  Parser: Parser,
-  version: version,
-  defaultOptions: defaultOptions,
-  Position: Position,
-  SourceLocation: SourceLocation,
-  getLineInfo: getLineInfo,
-  Node: Node,
-  TokenType: TokenType,
-  tokTypes: types,
-  keywordTypes: keywords$1,
-  TokContext: TokContext,
-  tokContexts: types$1,
-  isIdentifierChar: isIdentifierChar,
-  isIdentifierStart: isIdentifierStart,
-  Token: Token,
-  isNewLine: isNewLine,
-  lineBreak: lineBreak,
-  lineBreakG: lineBreakG,
-  nonASCIIwhitespace: nonASCIIwhitespace
-};
-
-// The main exported interface (under `self.acorn` when in the
-// browser) is a `parse` function that takes a code string and
-// returns an abstract syntax tree as specified by [Mozilla parser
-// API][api].
-//
-// [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API
-
-function parse(input, options) {
-  return Parser.parse(input, options)
-}
-
-// This function tries to parse a single expression at a given
-// offset in a string. Useful for parsing mixed-language formats
-// that embed JavaScript expressions.
-
-function parseExpressionAt(input, pos, options) {
-  return Parser.parseExpressionAt(input, pos, options)
-}
-
-// Acorn is organized as a tokenizer and a recursive-descent parser.
-// The `tokenizer` export provides an interface to the tokenizer.
-
-function tokenizer(input, options) {
-  return Parser.tokenizer(input, options)
-}
-
-export { Node, Parser, Position, SourceLocation, TokContext, Token, TokenType, defaultOptions, getLineInfo, isIdentifierChar, isIdentifierStart, isNewLine, keywords$1 as keywordTypes, lineBreak, lineBreakG, nonASCIIwhitespace, parse, parseExpressionAt, types$1 as tokContexts, types as tokTypes, tokenizer, version };
diff --git a/templetes/node_modules/acorn/dist/acorn.mjs.map b/templetes/node_modules/acorn/dist/acorn.mjs.map
deleted file mode 100644
index 76ec4d5d..00000000
--- a/templetes/node_modules/acorn/dist/acorn.mjs.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"acorn.mjs","sources":["../src/identifier.js","../src/tokentype.js","../src/whitespace.js","../src/util.js","../src/locutil.js","../src/options.js","../src/scopeflags.js","../src/state.js","../src/parseutil.js","../src/statement.js","../src/lval.js","../src/expression.js","../src/location.js","../src/scope.js","../src/node.js","../src/tokencontext.js","../src/unicode-property-data.js","../src/regexp.js","../src/tokenize.js","../src/index.js"],"sourcesContent":["// Reserved word lists for various dialects of the language\n\nexport const reservedWords = {\n  3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n  5: \"class enum extends super const export import\",\n  6: \"enum\",\n  strict: \"implements interface let package private protected public static yield\",\n  strictBind: \"eval arguments\"\n}\n\n// And the keywords\n\nconst ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\"\n\nexport const keywords = {\n  5: ecma5AndLessKeywords,\n  6: ecma5AndLessKeywords + \" const class extends export import super\"\n}\n\nexport const keywordRelationalOperator = /^in(stanceof)?$/\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point above 128.\n// Generated by `bin/generate-identifier-regex.js`.\n\nlet nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08bd\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fef\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7b9\\ua7f7-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab65\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\"\nlet nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08d3-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf2-\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1df9\\u1dfb-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\"\n\nconst nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\")\nconst nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\")\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null\n\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by bin/generate-identifier-regex.js\n\n// eslint-disable-next-line comma-spacing\nconst astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,477,28,11,0,9,21,190,52,76,44,33,24,27,35,30,0,12,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,54,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,86,26,230,43,117,63,32,0,257,0,11,39,8,0,22,0,12,39,3,3,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,270,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,68,12,0,67,12,65,1,31,6129,15,754,9486,286,82,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,4149,196,60,67,1213,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42710,42,4148,12,221,3,5761,15,7472,3104,541]\n\n// eslint-disable-next-line comma-spacing\nconst astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,525,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,4,9,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,280,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1016,45,17,3,19723,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,2214,6,110,6,6,9,792487,239]\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n  let pos = 0x10000\n  for (let i = 0; i < set.length; i += 2) {\n    pos += set[i]\n    if (pos > code) return false\n    pos += set[i + 1]\n    if (pos >= code) return true\n  }\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code, astral) {\n  if (code < 65) return code === 36\n  if (code < 91) return true\n  if (code < 97) return code === 95\n  if (code < 123) return true\n  if (code <= 0xffff) return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n  if (astral === false) return false\n  return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code, astral) {\n  if (code < 48) return code === 36\n  if (code < 58) return true\n  if (code < 65) return false\n  if (code < 91) return true\n  if (code < 97) return code === 95\n  if (code < 123) return true\n  if (code <= 0xffff) return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code))\n  if (astral === false) return false\n  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n","// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nexport class TokenType {\n  constructor(label, conf = {}) {\n    this.label = label\n    this.keyword = conf.keyword\n    this.beforeExpr = !!conf.beforeExpr\n    this.startsExpr = !!conf.startsExpr\n    this.isLoop = !!conf.isLoop\n    this.isAssign = !!conf.isAssign\n    this.prefix = !!conf.prefix\n    this.postfix = !!conf.postfix\n    this.binop = conf.binop || null\n    this.updateContext = null\n  }\n}\n\nfunction binop(name, prec) {\n  return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nconst beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true}\n\n// Map keyword names to token types.\n\nexport const keywords = {}\n\n// Succinct definitions of keyword token types\nfunction kw(name, options = {}) {\n  options.keyword = name\n  return keywords[name] = new TokenType(name, options)\n}\n\nexport const types = {\n  num: new TokenType(\"num\", startsExpr),\n  regexp: new TokenType(\"regexp\", startsExpr),\n  string: new TokenType(\"string\", startsExpr),\n  name: new TokenType(\"name\", startsExpr),\n  eof: new TokenType(\"eof\"),\n\n  // Punctuation token types.\n  bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n  bracketR: new TokenType(\"]\"),\n  braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n  braceR: new TokenType(\"}\"),\n  parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n  parenR: new TokenType(\")\"),\n  comma: new TokenType(\",\", beforeExpr),\n  semi: new TokenType(\";\", beforeExpr),\n  colon: new TokenType(\":\", beforeExpr),\n  dot: new TokenType(\".\"),\n  question: new TokenType(\"?\", beforeExpr),\n  arrow: new TokenType(\"=>\", beforeExpr),\n  template: new TokenType(\"template\"),\n  invalidTemplate: new TokenType(\"invalidTemplate\"),\n  ellipsis: new TokenType(\"...\", beforeExpr),\n  backQuote: new TokenType(\"`\", startsExpr),\n  dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n  // Operators. These carry several kinds of properties to help the\n  // parser use them properly (the presence of these properties is\n  // what categorizes them as operators).\n  //\n  // `binop`, when present, specifies that this operator is a binary\n  // operator, and will refer to its precedence.\n  //\n  // `prefix` and `postfix` mark the operator as a prefix or postfix\n  // unary operator.\n  //\n  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n  // binary operators with a very low precedence, that should result\n  // in AssignmentExpression nodes.\n\n  eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n  assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n  incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n  prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  logicalOR: binop(\"||\", 1),\n  logicalAND: binop(\"&&\", 2),\n  bitwiseOR: binop(\"|\", 3),\n  bitwiseXOR: binop(\"^\", 4),\n  bitwiseAND: binop(\"&\", 5),\n  equality: binop(\"==/!=/===/!==\", 6),\n  relational: binop(\"</>/<=/>=\", 7),\n  bitShift: binop(\"<</>>/>>>\", 8),\n  plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n  modulo: binop(\"%\", 10),\n  star: binop(\"*\", 10),\n  slash: binop(\"/\", 10),\n  starstar: new TokenType(\"**\", {beforeExpr: true}),\n\n  // Keyword token types.\n  _break: kw(\"break\"),\n  _case: kw(\"case\", beforeExpr),\n  _catch: kw(\"catch\"),\n  _continue: kw(\"continue\"),\n  _debugger: kw(\"debugger\"),\n  _default: kw(\"default\", beforeExpr),\n  _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n  _else: kw(\"else\", beforeExpr),\n  _finally: kw(\"finally\"),\n  _for: kw(\"for\", {isLoop: true}),\n  _function: kw(\"function\", startsExpr),\n  _if: kw(\"if\"),\n  _return: kw(\"return\", beforeExpr),\n  _switch: kw(\"switch\"),\n  _throw: kw(\"throw\", beforeExpr),\n  _try: kw(\"try\"),\n  _var: kw(\"var\"),\n  _const: kw(\"const\"),\n  _while: kw(\"while\", {isLoop: true}),\n  _with: kw(\"with\"),\n  _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n  _this: kw(\"this\", startsExpr),\n  _super: kw(\"super\", startsExpr),\n  _class: kw(\"class\", startsExpr),\n  _extends: kw(\"extends\", beforeExpr),\n  _export: kw(\"export\"),\n  _import: kw(\"import\"),\n  _null: kw(\"null\", startsExpr),\n  _true: kw(\"true\", startsExpr),\n  _false: kw(\"false\", startsExpr),\n  _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n  _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n  _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n}\n","// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nexport const lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/\nexport const lineBreakG = new RegExp(lineBreak.source, \"g\")\n\nexport function isNewLine(code, ecma2019String) {\n  return code === 10 || code === 13 || (!ecma2019String && (code === 0x2028 || code === 0x2029))\n}\n\nexport const nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/\n\nexport const skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g\n","const {hasOwnProperty, toString} = Object.prototype\n\n// Checks if an object has a property.\n\nexport function has(obj, propName) {\n  return hasOwnProperty.call(obj, propName)\n}\n\nexport const isArray = Array.isArray || ((obj) => (\n  toString.call(obj) === \"[object Array]\"\n))\n\nexport function wordsRegexp(words) {\n  return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\")\n}\n","import {lineBreakG} from \"./whitespace\"\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nexport class Position {\n  constructor(line, col) {\n    this.line = line\n    this.column = col\n  }\n\n  offset(n) {\n    return new Position(this.line, this.column + n)\n  }\n}\n\nexport class SourceLocation {\n  constructor(p, start, end) {\n    this.start = start\n    this.end = end\n    if (p.sourceFile !== null) this.source = p.sourceFile\n  }\n}\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nexport function getLineInfo(input, offset) {\n  for (let line = 1, cur = 0;;) {\n    lineBreakG.lastIndex = cur\n    let match = lineBreakG.exec(input)\n    if (match && match.index < offset) {\n      ++line\n      cur = match.index + match[0].length\n    } else {\n      return new Position(line, offset - cur)\n    }\n  }\n}\n","import {has, isArray} from \"./util\"\nimport {SourceLocation} from \"./locutil\"\n\n// A second optional argument can be given to further configure\n// the parser process. These options are recognized:\n\nexport const defaultOptions = {\n  // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n  // either 3, 5, 6 (2015), 7 (2016), 8 (2017), 9 (2018), or 10\n  // (2019). This influences support for strict mode, the set of\n  // reserved words, and support for new syntax features. The default\n  // is 9.\n  ecmaVersion: 9,\n  // `sourceType` indicates the mode the code should be parsed in.\n  // Can be either `\"script\"` or `\"module\"`. This influences global\n  // strict mode and parsing of `import` and `export` declarations.\n  sourceType: \"script\",\n  // `onInsertedSemicolon` can be a callback that will be called\n  // when a semicolon is automatically inserted. It will be passed\n  // the position of the comma as an offset, and if `locations` is\n  // enabled, it is given the location as a `{line, column}` object\n  // as second argument.\n  onInsertedSemicolon: null,\n  // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n  // trailing commas.\n  onTrailingComma: null,\n  // By default, reserved words are only enforced if ecmaVersion >= 5.\n  // Set `allowReserved` to a boolean value to explicitly turn this on\n  // an off. When this option has the value \"never\", reserved words\n  // and keywords can also not be used as property names.\n  allowReserved: null,\n  // When enabled, a return at the top level is not considered an\n  // error.\n  allowReturnOutsideFunction: false,\n  // When enabled, import/export statements are not constrained to\n  // appearing at the top of the program.\n  allowImportExportEverywhere: false,\n  // When enabled, await identifiers are allowed to appear at the top-level scope,\n  // but they are still not allowed in non-async functions.\n  allowAwaitOutsideFunction: false,\n  // When enabled, hashbang directive in the beginning of file\n  // is allowed and treated as a line comment.\n  allowHashBang: false,\n  // When `locations` is on, `loc` properties holding objects with\n  // `start` and `end` properties in `{line, column}` form (with\n  // line being 1-based and column 0-based) will be attached to the\n  // nodes.\n  locations: false,\n  // A function can be passed as `onToken` option, which will\n  // cause Acorn to call that function with object in the same\n  // format as tokens returned from `tokenizer().getToken()`. Note\n  // that you are not allowed to call the parser from the\n  // callback—that will corrupt its internal state.\n  onToken: null,\n  // A function can be passed as `onComment` option, which will\n  // cause Acorn to call that function with `(block, text, start,\n  // end)` parameters whenever a comment is skipped. `block` is a\n  // boolean indicating whether this is a block (`/* */`) comment,\n  // `text` is the content of the comment, and `start` and `end` are\n  // character offsets that denote the start and end of the comment.\n  // When the `locations` option is on, two more parameters are\n  // passed, the full `{line, column}` locations of the start and\n  // end of the comments. Note that you are not allowed to call the\n  // parser from the callback—that will corrupt its internal state.\n  onComment: null,\n  // Nodes have their start and end characters offsets recorded in\n  // `start` and `end` properties (directly on the node, rather than\n  // the `loc` object, which holds line/column data. To also add a\n  // [semi-standardized][range] `range` property holding a `[start,\n  // end]` array with the same numbers, set the `ranges` option to\n  // `true`.\n  //\n  // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n  ranges: false,\n  // It is possible to parse multiple files into a single AST by\n  // passing the tree produced by parsing the first file as\n  // `program` option in subsequent parses. This will add the\n  // toplevel forms of the parsed file to the `Program` (top) node\n  // of an existing parse tree.\n  program: null,\n  // When `locations` is on, you can pass this to record the source\n  // file in every node's `loc` object.\n  sourceFile: null,\n  // This value, if given, is stored in every node, whether\n  // `locations` is on or off.\n  directSourceFile: null,\n  // When enabled, parenthesized expressions are represented by\n  // (non-standard) ParenthesizedExpression nodes\n  preserveParens: false\n}\n\n// Interpret and default an options object\n\nexport function getOptions(opts) {\n  let options = {}\n\n  for (let opt in defaultOptions)\n    options[opt] = opts && has(opts, opt) ? opts[opt] : defaultOptions[opt]\n\n  if (options.ecmaVersion >= 2015)\n    options.ecmaVersion -= 2009\n\n  if (options.allowReserved == null)\n    options.allowReserved = options.ecmaVersion < 5\n\n  if (isArray(options.onToken)) {\n    let tokens = options.onToken\n    options.onToken = (token) => tokens.push(token)\n  }\n  if (isArray(options.onComment))\n    options.onComment = pushComment(options, options.onComment)\n\n  return options\n}\n\nfunction pushComment(options, array) {\n  return function(block, text, start, end, startLoc, endLoc) {\n    let comment = {\n      type: block ? \"Block\" : \"Line\",\n      value: text,\n      start: start,\n      end: end\n    }\n    if (options.locations)\n      comment.loc = new SourceLocation(this, startLoc, endLoc)\n    if (options.ranges)\n      comment.range = [start, end]\n    array.push(comment)\n  }\n}\n","// Each scope gets a bitset that may contain these flags\nexport const\n    SCOPE_TOP = 1,\n    SCOPE_FUNCTION = 2,\n    SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION,\n    SCOPE_ASYNC = 4,\n    SCOPE_GENERATOR = 8,\n    SCOPE_ARROW = 16,\n    SCOPE_SIMPLE_CATCH = 32,\n    SCOPE_SUPER = 64,\n    SCOPE_DIRECT_SUPER = 128\n\nexport function functionFlags(async, generator) {\n  return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal and declareName to determine the type of a binding\nexport const\n    BIND_NONE = 0, // Not a binding\n    BIND_VAR = 1, // Var-style binding\n    BIND_LEXICAL = 2, // Let- or const-style binding\n    BIND_FUNCTION = 3, // Function declaration\n    BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n    BIND_OUTSIDE = 5 // Special case for function names as bound inside the function\n","import {reservedWords, keywords} from \"./identifier\"\nimport {types as tt} from \"./tokentype\"\nimport {lineBreak} from \"./whitespace\"\nimport {getOptions} from \"./options\"\nimport {wordsRegexp} from \"./util\"\nimport {SCOPE_TOP, SCOPE_FUNCTION, SCOPE_ASYNC, SCOPE_GENERATOR, SCOPE_SUPER, SCOPE_DIRECT_SUPER} from \"./scopeflags\"\n\nexport class Parser {\n  constructor(options, input, startPos) {\n    this.options = options = getOptions(options)\n    this.sourceFile = options.sourceFile\n    this.keywords = wordsRegexp(keywords[options.ecmaVersion >= 6 ? 6 : 5])\n    let reserved = \"\"\n    if (!options.allowReserved) {\n      for (let v = options.ecmaVersion;; v--)\n        if (reserved = reservedWords[v]) break\n      if (options.sourceType === \"module\") reserved += \" await\"\n    }\n    this.reservedWords = wordsRegexp(reserved)\n    let reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict\n    this.reservedWordsStrict = wordsRegexp(reservedStrict)\n    this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind)\n    this.input = String(input)\n\n    // Used to signal to callers of `readWord1` whether the word\n    // contained any escape sequences. This is needed because words with\n    // escape sequences must not be interpreted as keywords.\n    this.containsEsc = false\n\n    // Set up token state\n\n    // The current position of the tokenizer in the input.\n    if (startPos) {\n      this.pos = startPos\n      this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1\n      this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length\n    } else {\n      this.pos = this.lineStart = 0\n      this.curLine = 1\n    }\n\n    // Properties of the current token:\n    // Its type\n    this.type = tt.eof\n    // For tokens that include more information than their type, the value\n    this.value = null\n    // Its start and end offset\n    this.start = this.end = this.pos\n    // And, if locations are used, the {line, column} object\n    // corresponding to those offsets\n    this.startLoc = this.endLoc = this.curPosition()\n\n    // Position information for the previous token\n    this.lastTokEndLoc = this.lastTokStartLoc = null\n    this.lastTokStart = this.lastTokEnd = this.pos\n\n    // The context stack is used to superficially track syntactic\n    // context to predict whether a regular expression is allowed in a\n    // given position.\n    this.context = this.initialContext()\n    this.exprAllowed = true\n\n    // Figure out if it's a module code.\n    this.inModule = options.sourceType === \"module\"\n    this.strict = this.inModule || this.strictDirective(this.pos)\n\n    // Used to signify the start of a potential arrow function\n    this.potentialArrowAt = -1\n\n    // Positions to delayed-check that yield/await does not exist in default parameters.\n    this.yieldPos = this.awaitPos = this.awaitIdentPos = 0\n    // Labels in scope.\n    this.labels = []\n    // Thus-far undefined exports.\n    this.undefinedExports = {}\n\n    // If enabled, skip leading hashbang line.\n    if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n      this.skipLineComment(2)\n\n    // Scope tracking for duplicate variable names (see scope.js)\n    this.scopeStack = []\n    this.enterScope(SCOPE_TOP)\n\n    // For RegExp validation\n    this.regexpState = null\n  }\n\n  parse() {\n    let node = this.options.program || this.startNode()\n    this.nextToken()\n    return this.parseTopLevel(node)\n  }\n\n  get inFunction() { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 }\n  get inGenerator() { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 }\n  get inAsync() { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 }\n  get allowSuper() { return (this.currentThisScope().flags & SCOPE_SUPER) > 0 }\n  get allowDirectSuper() { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 }\n  get treatFunctionsAsVar() { return this.treatFunctionsAsVarInScope(this.currentScope()) }\n\n  // Switch to a getter for 7.0.0.\n  inNonArrowFunction() { return (this.currentThisScope().flags & SCOPE_FUNCTION) > 0 }\n\n  static extend(...plugins) {\n    let cls = this\n    for (let i = 0; i < plugins.length; i++) cls = plugins[i](cls)\n    return cls\n  }\n\n  static parse(input, options) {\n    return new this(options, input).parse()\n  }\n\n  static parseExpressionAt(input, pos, options) {\n    let parser = new this(options, input, pos)\n    parser.nextToken()\n    return parser.parseExpression()\n  }\n\n  static tokenizer(input, options) {\n    return new this(options, input)\n  }\n}\n","import {types as tt} from \"./tokentype\"\nimport {Parser} from \"./state\"\nimport {lineBreak, skipWhiteSpace} from \"./whitespace\"\n\nconst pp = Parser.prototype\n\n// ## Parser utilities\n\nconst literal = /^(?:'((?:\\\\.|[^'])*?)'|\"((?:\\\\.|[^\"])*?)\")/\npp.strictDirective = function(start) {\n  for (;;) {\n    // Try to find string literal.\n    skipWhiteSpace.lastIndex = start\n    start += skipWhiteSpace.exec(this.input)[0].length\n    let match = literal.exec(this.input.slice(start))\n    if (!match) return false\n    if ((match[1] || match[2]) === \"use strict\") return true\n    start += match[0].length\n\n    // Skip semicolon, if any.\n    skipWhiteSpace.lastIndex = start\n    start += skipWhiteSpace.exec(this.input)[0].length\n    if (this.input[start] === \";\")\n      start++\n  }\n}\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp.eat = function(type) {\n  if (this.type === type) {\n    this.next()\n    return true\n  } else {\n    return false\n  }\n}\n\n// Tests whether parsed token is a contextual keyword.\n\npp.isContextual = function(name) {\n  return this.type === tt.name && this.value === name && !this.containsEsc\n}\n\n// Consumes contextual keyword if possible.\n\npp.eatContextual = function(name) {\n  if (!this.isContextual(name)) return false\n  this.next()\n  return true\n}\n\n// Asserts that following token is given contextual keyword.\n\npp.expectContextual = function(name) {\n  if (!this.eatContextual(name)) this.unexpected()\n}\n\n// Test whether a semicolon can be inserted at the current position.\n\npp.canInsertSemicolon = function() {\n  return this.type === tt.eof ||\n    this.type === tt.braceR ||\n    lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n}\n\npp.insertSemicolon = function() {\n  if (this.canInsertSemicolon()) {\n    if (this.options.onInsertedSemicolon)\n      this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc)\n    return true\n  }\n}\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp.semicolon = function() {\n  if (!this.eat(tt.semi) && !this.insertSemicolon()) this.unexpected()\n}\n\npp.afterTrailingComma = function(tokType, notNext) {\n  if (this.type === tokType) {\n    if (this.options.onTrailingComma)\n      this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc)\n    if (!notNext)\n      this.next()\n    return true\n  }\n}\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp.expect = function(type) {\n  this.eat(type) || this.unexpected()\n}\n\n// Raise an unexpected token error.\n\npp.unexpected = function(pos) {\n  this.raise(pos != null ? pos : this.start, \"Unexpected token\")\n}\n\nexport function DestructuringErrors() {\n  this.shorthandAssign =\n  this.trailingComma =\n  this.parenthesizedAssign =\n  this.parenthesizedBind =\n  this.doubleProto =\n    -1\n}\n\npp.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n  if (!refDestructuringErrors) return\n  if (refDestructuringErrors.trailingComma > -1)\n    this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\")\n  let parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind\n  if (parens > -1) this.raiseRecoverable(parens, \"Parenthesized pattern\")\n}\n\npp.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n  if (!refDestructuringErrors) return false\n  let {shorthandAssign, doubleProto} = refDestructuringErrors\n  if (!andThrow) return shorthandAssign >= 0 || doubleProto >= 0\n  if (shorthandAssign >= 0)\n    this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\")\n  if (doubleProto >= 0)\n    this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\")\n}\n\npp.checkYieldAwaitInDefaultParams = function() {\n  if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n    this.raise(this.yieldPos, \"Yield expression cannot be a default value\")\n  if (this.awaitPos)\n    this.raise(this.awaitPos, \"Await expression cannot be a default value\")\n}\n\npp.isSimpleAssignTarget = function(expr) {\n  if (expr.type === \"ParenthesizedExpression\")\n    return this.isSimpleAssignTarget(expr.expression)\n  return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n}\n","import {types as tt} from \"./tokentype\"\nimport {Parser} from \"./state\"\nimport {lineBreak, skipWhiteSpace} from \"./whitespace\"\nimport {isIdentifierStart, isIdentifierChar, keywordRelationalOperator} from \"./identifier\"\nimport {has} from \"./util\"\nimport {DestructuringErrors} from \"./parseutil\"\nimport {functionFlags, SCOPE_SIMPLE_CATCH, BIND_SIMPLE_CATCH, BIND_LEXICAL, BIND_VAR, BIND_FUNCTION} from \"./scopeflags\"\n\nconst pp = Parser.prototype\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node.  Optionally takes a\n// `program` argument.  If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp.parseTopLevel = function(node) {\n  let exports = {}\n  if (!node.body) node.body = []\n  while (this.type !== tt.eof) {\n    let stmt = this.parseStatement(null, true, exports)\n    node.body.push(stmt)\n  }\n  if (this.inModule)\n    for (let name of Object.keys(this.undefinedExports))\n      this.raiseRecoverable(this.undefinedExports[name].start, `Export '${name}' is not defined`)\n  this.adaptDirectivePrologue(node.body)\n  this.next()\n  if (this.options.ecmaVersion >= 6) {\n    node.sourceType = this.options.sourceType\n  }\n  return this.finishNode(node, \"Program\")\n}\n\nconst loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"}\n\npp.isLet = function(context) {\n  if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) return false\n  skipWhiteSpace.lastIndex = this.pos\n  let skip = skipWhiteSpace.exec(this.input)\n  let next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next)\n  // For ambiguous cases, determine if a LexicalDeclaration (or only a\n  // Statement) is allowed here. If context is not empty then only a Statement\n  // is allowed. However, `let [` is an explicit negative lookahead for\n  // ExpressionStatement, so special-case it first.\n  if (nextCh === 91) return true // '['\n  if (context) return false\n\n  if (nextCh === 123) return true // '{'\n  if (isIdentifierStart(nextCh, true)) {\n    let pos = next + 1\n    while (isIdentifierChar(this.input.charCodeAt(pos), true)) ++pos\n    let ident = this.input.slice(next, pos)\n    if (!keywordRelationalOperator.test(ident)) return true\n  }\n  return false\n}\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp.isAsyncFunction = function() {\n  if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n    return false\n\n  skipWhiteSpace.lastIndex = this.pos\n  let skip = skipWhiteSpace.exec(this.input)\n  let next = this.pos + skip[0].length\n  return !lineBreak.test(this.input.slice(this.pos, next)) &&\n    this.input.slice(next, next + 8) === \"function\" &&\n    (next + 8 === this.input.length || !isIdentifierChar(this.input.charAt(next + 8)))\n}\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp.parseStatement = function(context, topLevel, exports) {\n  let starttype = this.type, node = this.startNode(), kind\n\n  if (this.isLet(context)) {\n    starttype = tt._var\n    kind = \"let\"\n  }\n\n  // Most types of statements are recognized by the keyword they\n  // start with. Many are trivial to parse, some require a bit of\n  // complexity.\n\n  switch (starttype) {\n  case tt._break: case tt._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n  case tt._debugger: return this.parseDebuggerStatement(node)\n  case tt._do: return this.parseDoStatement(node)\n  case tt._for: return this.parseForStatement(node)\n  case tt._function:\n    // Function as sole body of either an if statement or a labeled statement\n    // works, but not when it is part of a labeled statement that is the sole\n    // body of an if statement.\n    if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) this.unexpected()\n    return this.parseFunctionStatement(node, false, !context)\n  case tt._class:\n    if (context) this.unexpected()\n    return this.parseClass(node, true)\n  case tt._if: return this.parseIfStatement(node)\n  case tt._return: return this.parseReturnStatement(node)\n  case tt._switch: return this.parseSwitchStatement(node)\n  case tt._throw: return this.parseThrowStatement(node)\n  case tt._try: return this.parseTryStatement(node)\n  case tt._const: case tt._var:\n    kind = kind || this.value\n    if (context && kind !== \"var\") this.unexpected()\n    return this.parseVarStatement(node, kind)\n  case tt._while: return this.parseWhileStatement(node)\n  case tt._with: return this.parseWithStatement(node)\n  case tt.braceL: return this.parseBlock(true, node)\n  case tt.semi: return this.parseEmptyStatement(node)\n  case tt._export:\n  case tt._import:\n    if (!this.options.allowImportExportEverywhere) {\n      if (!topLevel)\n        this.raise(this.start, \"'import' and 'export' may only appear at the top level\")\n      if (!this.inModule)\n        this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\")\n    }\n    return starttype === tt._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n    // If the statement does not start with a statement keyword or a\n    // brace, it's an ExpressionStatement or LabeledStatement. We\n    // simply start parsing an expression, and afterwards, if the\n    // next token is a colon and the expression was a simple\n    // Identifier node, we switch to interpreting it as a label.\n  default:\n    if (this.isAsyncFunction()) {\n      if (context) this.unexpected()\n      this.next()\n      return this.parseFunctionStatement(node, true, !context)\n    }\n\n    let maybeName = this.value, expr = this.parseExpression()\n    if (starttype === tt.name && expr.type === \"Identifier\" && this.eat(tt.colon))\n      return this.parseLabeledStatement(node, maybeName, expr, context)\n    else return this.parseExpressionStatement(node, expr)\n  }\n}\n\npp.parseBreakContinueStatement = function(node, keyword) {\n  let isBreak = keyword === \"break\"\n  this.next()\n  if (this.eat(tt.semi) || this.insertSemicolon()) node.label = null\n  else if (this.type !== tt.name) this.unexpected()\n  else {\n    node.label = this.parseIdent()\n    this.semicolon()\n  }\n\n  // Verify that there is an actual destination to break or\n  // continue to.\n  let i = 0\n  for (; i < this.labels.length; ++i) {\n    let lab = this.labels[i]\n    if (node.label == null || lab.name === node.label.name) {\n      if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break\n      if (node.label && isBreak) break\n    }\n  }\n  if (i === this.labels.length) this.raise(node.start, \"Unsyntactic \" + keyword)\n  return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n}\n\npp.parseDebuggerStatement = function(node) {\n  this.next()\n  this.semicolon()\n  return this.finishNode(node, \"DebuggerStatement\")\n}\n\npp.parseDoStatement = function(node) {\n  this.next()\n  this.labels.push(loopLabel)\n  node.body = this.parseStatement(\"do\")\n  this.labels.pop()\n  this.expect(tt._while)\n  node.test = this.parseParenExpression()\n  if (this.options.ecmaVersion >= 6)\n    this.eat(tt.semi)\n  else\n    this.semicolon()\n  return this.finishNode(node, \"DoWhileStatement\")\n}\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp.parseForStatement = function(node) {\n  this.next()\n  let awaitAt = (this.options.ecmaVersion >= 9 && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction)) && this.eatContextual(\"await\")) ? this.lastTokStart : -1\n  this.labels.push(loopLabel)\n  this.enterScope(0)\n  this.expect(tt.parenL)\n  if (this.type === tt.semi) {\n    if (awaitAt > -1) this.unexpected(awaitAt)\n    return this.parseFor(node, null)\n  }\n  let isLet = this.isLet()\n  if (this.type === tt._var || this.type === tt._const || isLet) {\n    let init = this.startNode(), kind = isLet ? \"let\" : this.value\n    this.next()\n    this.parseVar(init, true, kind)\n    this.finishNode(init, \"VariableDeclaration\")\n    if ((this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init.declarations.length === 1 &&\n        !(kind !== \"var\" && init.declarations[0].init)) {\n      if (this.options.ecmaVersion >= 9) {\n        if (this.type === tt._in) {\n          if (awaitAt > -1) this.unexpected(awaitAt)\n        } else node.await = awaitAt > -1\n      }\n      return this.parseForIn(node, init)\n    }\n    if (awaitAt > -1) this.unexpected(awaitAt)\n    return this.parseFor(node, init)\n  }\n  let refDestructuringErrors = new DestructuringErrors\n  let init = this.parseExpression(true, refDestructuringErrors)\n  if (this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n    if (this.options.ecmaVersion >= 9) {\n      if (this.type === tt._in) {\n        if (awaitAt > -1) this.unexpected(awaitAt)\n      } else node.await = awaitAt > -1\n    }\n    this.toAssignable(init, false, refDestructuringErrors)\n    this.checkLVal(init)\n    return this.parseForIn(node, init)\n  } else {\n    this.checkExpressionErrors(refDestructuringErrors, true)\n  }\n  if (awaitAt > -1) this.unexpected(awaitAt)\n  return this.parseFor(node, init)\n}\n\npp.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n  this.next()\n  return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n}\n\npp.parseIfStatement = function(node) {\n  this.next()\n  node.test = this.parseParenExpression()\n  // allow function declarations in branches, but only in non-strict mode\n  node.consequent = this.parseStatement(\"if\")\n  node.alternate = this.eat(tt._else) ? this.parseStatement(\"if\") : null\n  return this.finishNode(node, \"IfStatement\")\n}\n\npp.parseReturnStatement = function(node) {\n  if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n    this.raise(this.start, \"'return' outside of function\")\n  this.next()\n\n  // In `return` (and `break`/`continue`), the keywords with\n  // optional arguments, we eagerly look for a semicolon or the\n  // possibility to insert one.\n\n  if (this.eat(tt.semi) || this.insertSemicolon()) node.argument = null\n  else { node.argument = this.parseExpression(); this.semicolon() }\n  return this.finishNode(node, \"ReturnStatement\")\n}\n\npp.parseSwitchStatement = function(node) {\n  this.next()\n  node.discriminant = this.parseParenExpression()\n  node.cases = []\n  this.expect(tt.braceL)\n  this.labels.push(switchLabel)\n  this.enterScope(0)\n\n  // Statements under must be grouped (by label) in SwitchCase\n  // nodes. `cur` is used to keep the node that we are currently\n  // adding statements to.\n\n  let cur\n  for (let sawDefault = false; this.type !== tt.braceR;) {\n    if (this.type === tt._case || this.type === tt._default) {\n      let isCase = this.type === tt._case\n      if (cur) this.finishNode(cur, \"SwitchCase\")\n      node.cases.push(cur = this.startNode())\n      cur.consequent = []\n      this.next()\n      if (isCase) {\n        cur.test = this.parseExpression()\n      } else {\n        if (sawDefault) this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\")\n        sawDefault = true\n        cur.test = null\n      }\n      this.expect(tt.colon)\n    } else {\n      if (!cur) this.unexpected()\n      cur.consequent.push(this.parseStatement(null))\n    }\n  }\n  this.exitScope()\n  if (cur) this.finishNode(cur, \"SwitchCase\")\n  this.next() // Closing brace\n  this.labels.pop()\n  return this.finishNode(node, \"SwitchStatement\")\n}\n\npp.parseThrowStatement = function(node) {\n  this.next()\n  if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n    this.raise(this.lastTokEnd, \"Illegal newline after throw\")\n  node.argument = this.parseExpression()\n  this.semicolon()\n  return this.finishNode(node, \"ThrowStatement\")\n}\n\n// Reused empty array added for node fields that are always empty.\n\nconst empty = []\n\npp.parseTryStatement = function(node) {\n  this.next()\n  node.block = this.parseBlock()\n  node.handler = null\n  if (this.type === tt._catch) {\n    let clause = this.startNode()\n    this.next()\n    if (this.eat(tt.parenL)) {\n      clause.param = this.parseBindingAtom()\n      let simple = clause.param.type === \"Identifier\"\n      this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0)\n      this.checkLVal(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL)\n      this.expect(tt.parenR)\n    } else {\n      if (this.options.ecmaVersion < 10) this.unexpected()\n      clause.param = null\n      this.enterScope(0)\n    }\n    clause.body = this.parseBlock(false)\n    this.exitScope()\n    node.handler = this.finishNode(clause, \"CatchClause\")\n  }\n  node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null\n  if (!node.handler && !node.finalizer)\n    this.raise(node.start, \"Missing catch or finally clause\")\n  return this.finishNode(node, \"TryStatement\")\n}\n\npp.parseVarStatement = function(node, kind) {\n  this.next()\n  this.parseVar(node, false, kind)\n  this.semicolon()\n  return this.finishNode(node, \"VariableDeclaration\")\n}\n\npp.parseWhileStatement = function(node) {\n  this.next()\n  node.test = this.parseParenExpression()\n  this.labels.push(loopLabel)\n  node.body = this.parseStatement(\"while\")\n  this.labels.pop()\n  return this.finishNode(node, \"WhileStatement\")\n}\n\npp.parseWithStatement = function(node) {\n  if (this.strict) this.raise(this.start, \"'with' in strict mode\")\n  this.next()\n  node.object = this.parseParenExpression()\n  node.body = this.parseStatement(\"with\")\n  return this.finishNode(node, \"WithStatement\")\n}\n\npp.parseEmptyStatement = function(node) {\n  this.next()\n  return this.finishNode(node, \"EmptyStatement\")\n}\n\npp.parseLabeledStatement = function(node, maybeName, expr, context) {\n  for (let label of this.labels)\n    if (label.name === maybeName)\n      this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\")\n  let kind = this.type.isLoop ? \"loop\" : this.type === tt._switch ? \"switch\" : null\n  for (let i = this.labels.length - 1; i >= 0; i--) {\n    let label = this.labels[i]\n    if (label.statementStart === node.start) {\n      // Update information about previous labels on this node\n      label.statementStart = this.start\n      label.kind = kind\n    } else break\n  }\n  this.labels.push({name: maybeName, kind, statementStart: this.start})\n  node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\")\n  this.labels.pop()\n  node.label = expr\n  return this.finishNode(node, \"LabeledStatement\")\n}\n\npp.parseExpressionStatement = function(node, expr) {\n  node.expression = expr\n  this.semicolon()\n  return this.finishNode(node, \"ExpressionStatement\")\n}\n\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp.parseBlock = function(createNewLexicalScope = true, node = this.startNode()) {\n  node.body = []\n  this.expect(tt.braceL)\n  if (createNewLexicalScope) this.enterScope(0)\n  while (!this.eat(tt.braceR)) {\n    let stmt = this.parseStatement(null)\n    node.body.push(stmt)\n  }\n  if (createNewLexicalScope) this.exitScope()\n  return this.finishNode(node, \"BlockStatement\")\n}\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp.parseFor = function(node, init) {\n  node.init = init\n  this.expect(tt.semi)\n  node.test = this.type === tt.semi ? null : this.parseExpression()\n  this.expect(tt.semi)\n  node.update = this.type === tt.parenR ? null : this.parseExpression()\n  this.expect(tt.parenR)\n  node.body = this.parseStatement(\"for\")\n  this.exitScope()\n  this.labels.pop()\n  return this.finishNode(node, \"ForStatement\")\n}\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\npp.parseForIn = function(node, init) {\n  let type = this.type === tt._in ? \"ForInStatement\" : \"ForOfStatement\"\n  this.next()\n  if (type === \"ForInStatement\") {\n    if (init.type === \"AssignmentPattern\" ||\n      (init.type === \"VariableDeclaration\" && init.declarations[0].init != null &&\n       (this.strict || init.declarations[0].id.type !== \"Identifier\")))\n      this.raise(init.start, \"Invalid assignment in for-in loop head\")\n  }\n  node.left = init\n  node.right = type === \"ForInStatement\" ? this.parseExpression() : this.parseMaybeAssign()\n  this.expect(tt.parenR)\n  node.body = this.parseStatement(\"for\")\n  this.exitScope()\n  this.labels.pop()\n  return this.finishNode(node, type)\n}\n\n// Parse a list of variable declarations.\n\npp.parseVar = function(node, isFor, kind) {\n  node.declarations = []\n  node.kind = kind\n  for (;;) {\n    let decl = this.startNode()\n    this.parseVarId(decl, kind)\n    if (this.eat(tt.eq)) {\n      decl.init = this.parseMaybeAssign(isFor)\n    } else if (kind === \"const\" && !(this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n      this.unexpected()\n    } else if (decl.id.type !== \"Identifier\" && !(isFor && (this.type === tt._in || this.isContextual(\"of\")))) {\n      this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\")\n    } else {\n      decl.init = null\n    }\n    node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"))\n    if (!this.eat(tt.comma)) break\n  }\n  return node\n}\n\npp.parseVarId = function(decl, kind) {\n  if ((kind === \"const\" || kind === \"let\") && this.isContextual(\"let\")) {\n    this.raiseRecoverable(this.start, \"let is disallowed as a lexically bound name\")\n  }\n  decl.id = this.parseBindingAtom()\n  this.checkLVal(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false)\n}\n\nconst FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp.parseFunction = function(node, statement, allowExpressionBody, isAsync) {\n  this.initFunction(node)\n  if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n    if (this.type === tt.star && (statement & FUNC_HANGING_STATEMENT))\n      this.unexpected()\n    node.generator = this.eat(tt.star)\n  }\n  if (this.options.ecmaVersion >= 8)\n    node.async = !!isAsync\n\n  if (statement & FUNC_STATEMENT) {\n    node.id = (statement & FUNC_NULLABLE_ID) && this.type !== tt.name ? null : this.parseIdent()\n    if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n      // If it is a regular function declaration in sloppy mode, then it is\n      // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n      // mode depends on properties of the current scope (see\n      // treatFunctionsAsVar).\n      this.checkLVal(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION)\n  }\n\n  let oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos\n  this.yieldPos = 0\n  this.awaitPos = 0\n  this.awaitIdentPos = 0\n  this.enterScope(functionFlags(node.async, node.generator))\n\n  if (!(statement & FUNC_STATEMENT))\n    node.id = this.type === tt.name ? this.parseIdent() : null\n\n  this.parseFunctionParams(node)\n  this.parseFunctionBody(node, allowExpressionBody, false)\n\n  this.yieldPos = oldYieldPos\n  this.awaitPos = oldAwaitPos\n  this.awaitIdentPos = oldAwaitIdentPos\n  return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n}\n\npp.parseFunctionParams = function(node) {\n  this.expect(tt.parenL)\n  node.params = this.parseBindingList(tt.parenR, false, this.options.ecmaVersion >= 8)\n  this.checkYieldAwaitInDefaultParams()\n}\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp.parseClass = function(node, isStatement) {\n  this.next()\n\n  // ecma-262 14.6 Class Definitions\n  // A class definition is always strict mode code.\n  const oldStrict = this.strict\n  this.strict = true\n\n  this.parseClassId(node, isStatement)\n  this.parseClassSuper(node)\n  let classBody = this.startNode()\n  let hadConstructor = false\n  classBody.body = []\n  this.expect(tt.braceL)\n  while (!this.eat(tt.braceR)) {\n    const element = this.parseClassElement(node.superClass !== null)\n    if (element) {\n      classBody.body.push(element)\n      if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n        if (hadConstructor) this.raise(element.start, \"Duplicate constructor in the same class\")\n        hadConstructor = true\n      }\n    }\n  }\n  node.body = this.finishNode(classBody, \"ClassBody\")\n  this.strict = oldStrict\n  return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n}\n\npp.parseClassElement = function(constructorAllowsSuper) {\n  if (this.eat(tt.semi)) return null\n\n  let method = this.startNode()\n  const tryContextual = (k, noLineBreak = false) => {\n    const start = this.start, startLoc = this.startLoc\n    if (!this.eatContextual(k)) return false\n    if (this.type !== tt.parenL && (!noLineBreak || !this.canInsertSemicolon())) return true\n    if (method.key) this.unexpected()\n    method.computed = false\n    method.key = this.startNodeAt(start, startLoc)\n    method.key.name = k\n    this.finishNode(method.key, \"Identifier\")\n    return false\n  }\n\n  method.kind = \"method\"\n  method.static = tryContextual(\"static\")\n  let isGenerator = this.eat(tt.star)\n  let isAsync = false\n  if (!isGenerator) {\n    if (this.options.ecmaVersion >= 8 && tryContextual(\"async\", true)) {\n      isAsync = true\n      isGenerator = this.options.ecmaVersion >= 9 && this.eat(tt.star)\n    } else if (tryContextual(\"get\")) {\n      method.kind = \"get\"\n    } else if (tryContextual(\"set\")) {\n      method.kind = \"set\"\n    }\n  }\n  if (!method.key) this.parsePropertyName(method)\n  let {key} = method\n  let allowsDirectSuper = false\n  if (!method.computed && !method.static && (key.type === \"Identifier\" && key.name === \"constructor\" ||\n      key.type === \"Literal\" && key.value === \"constructor\")) {\n    if (method.kind !== \"method\") this.raise(key.start, \"Constructor can't have get/set modifier\")\n    if (isGenerator) this.raise(key.start, \"Constructor can't be a generator\")\n    if (isAsync) this.raise(key.start, \"Constructor can't be an async method\")\n    method.kind = \"constructor\"\n    allowsDirectSuper = constructorAllowsSuper\n  } else if (method.static && key.type === \"Identifier\" && key.name === \"prototype\") {\n    this.raise(key.start, \"Classes may not have a static property named prototype\")\n  }\n  this.parseClassMethod(method, isGenerator, isAsync, allowsDirectSuper)\n  if (method.kind === \"get\" && method.value.params.length !== 0)\n    this.raiseRecoverable(method.value.start, \"getter should have no params\")\n  if (method.kind === \"set\" && method.value.params.length !== 1)\n    this.raiseRecoverable(method.value.start, \"setter should have exactly one param\")\n  if (method.kind === \"set\" && method.value.params[0].type === \"RestElement\")\n    this.raiseRecoverable(method.value.params[0].start, \"Setter cannot use rest params\")\n  return method\n}\n\npp.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n  method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper)\n  return this.finishNode(method, \"MethodDefinition\")\n}\n\npp.parseClassId = function(node, isStatement) {\n  if (this.type === tt.name) {\n    node.id = this.parseIdent()\n    if (isStatement)\n      this.checkLVal(node.id, BIND_LEXICAL, false)\n  } else {\n    if (isStatement === true)\n      this.unexpected()\n    node.id = null\n  }\n}\n\npp.parseClassSuper = function(node) {\n  node.superClass = this.eat(tt._extends) ? this.parseExprSubscripts() : null\n}\n\n// Parses module export declaration.\n\npp.parseExport = function(node, exports) {\n  this.next()\n  // export * from '...'\n  if (this.eat(tt.star)) {\n    this.expectContextual(\"from\")\n    if (this.type !== tt.string) this.unexpected()\n    node.source = this.parseExprAtom()\n    this.semicolon()\n    return this.finishNode(node, \"ExportAllDeclaration\")\n  }\n  if (this.eat(tt._default)) { // export default ...\n    this.checkExport(exports, \"default\", this.lastTokStart)\n    let isAsync\n    if (this.type === tt._function || (isAsync = this.isAsyncFunction())) {\n      let fNode = this.startNode()\n      this.next()\n      if (isAsync) this.next()\n      node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n    } else if (this.type === tt._class) {\n      let cNode = this.startNode()\n      node.declaration = this.parseClass(cNode, \"nullableID\")\n    } else {\n      node.declaration = this.parseMaybeAssign()\n      this.semicolon()\n    }\n    return this.finishNode(node, \"ExportDefaultDeclaration\")\n  }\n  // export var|const|let|function|class ...\n  if (this.shouldParseExportStatement()) {\n    node.declaration = this.parseStatement(null)\n    if (node.declaration.type === \"VariableDeclaration\")\n      this.checkVariableExport(exports, node.declaration.declarations)\n    else\n      this.checkExport(exports, node.declaration.id.name, node.declaration.id.start)\n    node.specifiers = []\n    node.source = null\n  } else { // export { x, y as z } [from '...']\n    node.declaration = null\n    node.specifiers = this.parseExportSpecifiers(exports)\n    if (this.eatContextual(\"from\")) {\n      if (this.type !== tt.string) this.unexpected()\n      node.source = this.parseExprAtom()\n    } else {\n      for (let spec of node.specifiers) {\n        // check for keywords used as local names\n        this.checkUnreserved(spec.local)\n        // check if export is defined\n        this.checkLocalExport(spec.local)\n      }\n\n      node.source = null\n    }\n    this.semicolon()\n  }\n  return this.finishNode(node, \"ExportNamedDeclaration\")\n}\n\npp.checkExport = function(exports, name, pos) {\n  if (!exports) return\n  if (has(exports, name))\n    this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\")\n  exports[name] = true\n}\n\npp.checkPatternExport = function(exports, pat) {\n  let type = pat.type\n  if (type === \"Identifier\")\n    this.checkExport(exports, pat.name, pat.start)\n  else if (type === \"ObjectPattern\")\n    for (let prop of pat.properties)\n      this.checkPatternExport(exports, prop)\n  else if (type === \"ArrayPattern\")\n    for (let elt of pat.elements) {\n      if (elt) this.checkPatternExport(exports, elt)\n    }\n  else if (type === \"Property\")\n    this.checkPatternExport(exports, pat.value)\n  else if (type === \"AssignmentPattern\")\n    this.checkPatternExport(exports, pat.left)\n  else if (type === \"RestElement\")\n    this.checkPatternExport(exports, pat.argument)\n  else if (type === \"ParenthesizedExpression\")\n    this.checkPatternExport(exports, pat.expression)\n}\n\npp.checkVariableExport = function(exports, decls) {\n  if (!exports) return\n  for (let decl of decls)\n    this.checkPatternExport(exports, decl.id)\n}\n\npp.shouldParseExportStatement = function() {\n  return this.type.keyword === \"var\" ||\n    this.type.keyword === \"const\" ||\n    this.type.keyword === \"class\" ||\n    this.type.keyword === \"function\" ||\n    this.isLet() ||\n    this.isAsyncFunction()\n}\n\n// Parses a comma-separated list of module exports.\n\npp.parseExportSpecifiers = function(exports) {\n  let nodes = [], first = true\n  // export { x, y as z } [from '...']\n  this.expect(tt.braceL)\n  while (!this.eat(tt.braceR)) {\n    if (!first) {\n      this.expect(tt.comma)\n      if (this.afterTrailingComma(tt.braceR)) break\n    } else first = false\n\n    let node = this.startNode()\n    node.local = this.parseIdent(true)\n    node.exported = this.eatContextual(\"as\") ? this.parseIdent(true) : node.local\n    this.checkExport(exports, node.exported.name, node.exported.start)\n    nodes.push(this.finishNode(node, \"ExportSpecifier\"))\n  }\n  return nodes\n}\n\n// Parses import declaration.\n\npp.parseImport = function(node) {\n  this.next()\n  // import '...'\n  if (this.type === tt.string) {\n    node.specifiers = empty\n    node.source = this.parseExprAtom()\n  } else {\n    node.specifiers = this.parseImportSpecifiers()\n    this.expectContextual(\"from\")\n    node.source = this.type === tt.string ? this.parseExprAtom() : this.unexpected()\n  }\n  this.semicolon()\n  return this.finishNode(node, \"ImportDeclaration\")\n}\n\n// Parses a comma-separated list of module imports.\n\npp.parseImportSpecifiers = function() {\n  let nodes = [], first = true\n  if (this.type === tt.name) {\n    // import defaultObj, { x, y as z } from '...'\n    let node = this.startNode()\n    node.local = this.parseIdent()\n    this.checkLVal(node.local, BIND_LEXICAL)\n    nodes.push(this.finishNode(node, \"ImportDefaultSpecifier\"))\n    if (!this.eat(tt.comma)) return nodes\n  }\n  if (this.type === tt.star) {\n    let node = this.startNode()\n    this.next()\n    this.expectContextual(\"as\")\n    node.local = this.parseIdent()\n    this.checkLVal(node.local, BIND_LEXICAL)\n    nodes.push(this.finishNode(node, \"ImportNamespaceSpecifier\"))\n    return nodes\n  }\n  this.expect(tt.braceL)\n  while (!this.eat(tt.braceR)) {\n    if (!first) {\n      this.expect(tt.comma)\n      if (this.afterTrailingComma(tt.braceR)) break\n    } else first = false\n\n    let node = this.startNode()\n    node.imported = this.parseIdent(true)\n    if (this.eatContextual(\"as\")) {\n      node.local = this.parseIdent()\n    } else {\n      this.checkUnreserved(node.imported)\n      node.local = node.imported\n    }\n    this.checkLVal(node.local, BIND_LEXICAL)\n    nodes.push(this.finishNode(node, \"ImportSpecifier\"))\n  }\n  return nodes\n}\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp.adaptDirectivePrologue = function(statements) {\n  for (let i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n    statements[i].directive = statements[i].expression.raw.slice(1, -1)\n  }\n}\npp.isDirectiveCandidate = function(statement) {\n  return (\n    statement.type === \"ExpressionStatement\" &&\n    statement.expression.type === \"Literal\" &&\n    typeof statement.expression.value === \"string\" &&\n    // Reject parenthesized strings.\n    (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n  )\n}\n","import {types as tt} from \"./tokentype\"\nimport {Parser} from \"./state\"\nimport {has} from \"./util\"\nimport {BIND_NONE, BIND_OUTSIDE} from \"./scopeflags\"\n\nconst pp = Parser.prototype\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp.toAssignable = function(node, isBinding, refDestructuringErrors) {\n  if (this.options.ecmaVersion >= 6 && node) {\n    switch (node.type) {\n    case \"Identifier\":\n      if (this.inAsync && node.name === \"await\")\n        this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\")\n      break\n\n    case \"ObjectPattern\":\n    case \"ArrayPattern\":\n    case \"RestElement\":\n      break\n\n    case \"ObjectExpression\":\n      node.type = \"ObjectPattern\"\n      if (refDestructuringErrors) this.checkPatternErrors(refDestructuringErrors, true)\n      for (let prop of node.properties) {\n        this.toAssignable(prop, isBinding)\n        // Early error:\n        //   AssignmentRestProperty[Yield, Await] :\n        //     `...` DestructuringAssignmentTarget[Yield, Await]\n        //\n        //   It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n        if (\n          prop.type === \"RestElement\" &&\n          (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n        ) {\n          this.raise(prop.argument.start, \"Unexpected token\")\n        }\n      }\n      break\n\n    case \"Property\":\n      // AssignmentProperty has type === \"Property\"\n      if (node.kind !== \"init\") this.raise(node.key.start, \"Object pattern can't contain getter or setter\")\n      this.toAssignable(node.value, isBinding)\n      break\n\n    case \"ArrayExpression\":\n      node.type = \"ArrayPattern\"\n      if (refDestructuringErrors) this.checkPatternErrors(refDestructuringErrors, true)\n      this.toAssignableList(node.elements, isBinding)\n      break\n\n    case \"SpreadElement\":\n      node.type = \"RestElement\"\n      this.toAssignable(node.argument, isBinding)\n      if (node.argument.type === \"AssignmentPattern\")\n        this.raise(node.argument.start, \"Rest elements cannot have a default value\")\n      break\n\n    case \"AssignmentExpression\":\n      if (node.operator !== \"=\") this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\")\n      node.type = \"AssignmentPattern\"\n      delete node.operator\n      this.toAssignable(node.left, isBinding)\n      // falls through to AssignmentPattern\n\n    case \"AssignmentPattern\":\n      break\n\n    case \"ParenthesizedExpression\":\n      this.toAssignable(node.expression, isBinding, refDestructuringErrors)\n      break\n\n    case \"MemberExpression\":\n      if (!isBinding) break\n\n    default:\n      this.raise(node.start, \"Assigning to rvalue\")\n    }\n  } else if (refDestructuringErrors) this.checkPatternErrors(refDestructuringErrors, true)\n  return node\n}\n\n// Convert list of expression atoms to binding list.\n\npp.toAssignableList = function(exprList, isBinding) {\n  let end = exprList.length\n  for (let i = 0; i < end; i++) {\n    let elt = exprList[i]\n    if (elt) this.toAssignable(elt, isBinding)\n  }\n  if (end) {\n    let last = exprList[end - 1]\n    if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n      this.unexpected(last.argument.start)\n  }\n  return exprList\n}\n\n// Parses spread element.\n\npp.parseSpread = function(refDestructuringErrors) {\n  let node = this.startNode()\n  this.next()\n  node.argument = this.parseMaybeAssign(false, refDestructuringErrors)\n  return this.finishNode(node, \"SpreadElement\")\n}\n\npp.parseRestBinding = function() {\n  let node = this.startNode()\n  this.next()\n\n  // RestElement inside of a function parameter must be an identifier\n  if (this.options.ecmaVersion === 6 && this.type !== tt.name)\n    this.unexpected()\n\n  node.argument = this.parseBindingAtom()\n\n  return this.finishNode(node, \"RestElement\")\n}\n\n// Parses lvalue (assignable) atom.\n\npp.parseBindingAtom = function() {\n  if (this.options.ecmaVersion >= 6) {\n    switch (this.type) {\n    case tt.bracketL:\n      let node = this.startNode()\n      this.next()\n      node.elements = this.parseBindingList(tt.bracketR, true, true)\n      return this.finishNode(node, \"ArrayPattern\")\n\n    case tt.braceL:\n      return this.parseObj(true)\n    }\n  }\n  return this.parseIdent()\n}\n\npp.parseBindingList = function(close, allowEmpty, allowTrailingComma) {\n  let elts = [], first = true\n  while (!this.eat(close)) {\n    if (first) first = false\n    else this.expect(tt.comma)\n    if (allowEmpty && this.type === tt.comma) {\n      elts.push(null)\n    } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n      break\n    } else if (this.type === tt.ellipsis) {\n      let rest = this.parseRestBinding()\n      this.parseBindingListItem(rest)\n      elts.push(rest)\n      if (this.type === tt.comma) this.raise(this.start, \"Comma is not permitted after the rest element\")\n      this.expect(close)\n      break\n    } else {\n      let elem = this.parseMaybeDefault(this.start, this.startLoc)\n      this.parseBindingListItem(elem)\n      elts.push(elem)\n    }\n  }\n  return elts\n}\n\npp.parseBindingListItem = function(param) {\n  return param\n}\n\n// Parses assignment pattern around given atom if possible.\n\npp.parseMaybeDefault = function(startPos, startLoc, left) {\n  left = left || this.parseBindingAtom()\n  if (this.options.ecmaVersion < 6 || !this.eat(tt.eq)) return left\n  let node = this.startNodeAt(startPos, startLoc)\n  node.left = left\n  node.right = this.parseMaybeAssign()\n  return this.finishNode(node, \"AssignmentPattern\")\n}\n\n// Verify that a node is an lval — something that can be assigned\n// to.\n// bindingType can be either:\n// 'var' indicating that the lval creates a 'var' binding\n// 'let' indicating that the lval creates a lexical ('let' or 'const') binding\n// 'none' indicating that the binding should be checked for illegal identifiers, but not for duplicate references\n\npp.checkLVal = function(expr, bindingType = BIND_NONE, checkClashes) {\n  switch (expr.type) {\n  case \"Identifier\":\n    if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n      this.raiseRecoverable(expr.start, (bindingType ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\")\n    if (checkClashes) {\n      if (has(checkClashes, expr.name))\n        this.raiseRecoverable(expr.start, \"Argument name clash\")\n      checkClashes[expr.name] = true\n    }\n    if (bindingType !== BIND_NONE && bindingType !== BIND_OUTSIDE) this.declareName(expr.name, bindingType, expr.start)\n    break\n\n  case \"MemberExpression\":\n    if (bindingType) this.raiseRecoverable(expr.start, \"Binding member expression\")\n    break\n\n  case \"ObjectPattern\":\n    for (let prop of expr.properties)\n      this.checkLVal(prop, bindingType, checkClashes)\n    break\n\n  case \"Property\":\n    // AssignmentProperty has type === \"Property\"\n    this.checkLVal(expr.value, bindingType, checkClashes)\n    break\n\n  case \"ArrayPattern\":\n    for (let elem of expr.elements) {\n      if (elem) this.checkLVal(elem, bindingType, checkClashes)\n    }\n    break\n\n  case \"AssignmentPattern\":\n    this.checkLVal(expr.left, bindingType, checkClashes)\n    break\n\n  case \"RestElement\":\n    this.checkLVal(expr.argument, bindingType, checkClashes)\n    break\n\n  case \"ParenthesizedExpression\":\n    this.checkLVal(expr.expression, bindingType, checkClashes)\n    break\n\n  default:\n    this.raise(expr.start, (bindingType ? \"Binding\" : \"Assigning to\") + \" rvalue\")\n  }\n}\n","// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\nimport {types as tt} from \"./tokentype\"\nimport {Parser} from \"./state\"\nimport {DestructuringErrors} from \"./parseutil\"\nimport {lineBreak} from \"./whitespace\"\nimport {functionFlags, SCOPE_ARROW, SCOPE_SUPER, SCOPE_DIRECT_SUPER, BIND_OUTSIDE, BIND_VAR} from \"./scopeflags\"\n\nconst pp = Parser.prototype\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n  if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n    return\n  if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n    return\n  let {key} = prop, name\n  switch (key.type) {\n  case \"Identifier\": name = key.name; break\n  case \"Literal\": name = String(key.value); break\n  default: return\n  }\n  let {kind} = prop\n  if (this.options.ecmaVersion >= 6) {\n    if (name === \"__proto__\" && kind === \"init\") {\n      if (propHash.proto) {\n        if (refDestructuringErrors && refDestructuringErrors.doubleProto < 0) refDestructuringErrors.doubleProto = key.start\n        // Backwards-compat kludge. Can be removed in version 6.0\n        else this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\")\n      }\n      propHash.proto = true\n    }\n    return\n  }\n  name = \"$\" + name\n  let other = propHash[name]\n  if (other) {\n    let redefinition\n    if (kind === \"init\") {\n      redefinition = this.strict && other.init || other.get || other.set\n    } else {\n      redefinition = other.init || other[kind]\n    }\n    if (redefinition)\n      this.raiseRecoverable(key.start, \"Redefinition of property\")\n  } else {\n    other = propHash[name] = {\n      init: false,\n      get: false,\n      set: false\n    }\n  }\n  other[kind] = true\n}\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\npp.parseExpression = function(noIn, refDestructuringErrors) {\n  let startPos = this.start, startLoc = this.startLoc\n  let expr = this.parseMaybeAssign(noIn, refDestructuringErrors)\n  if (this.type === tt.comma) {\n    let node = this.startNodeAt(startPos, startLoc)\n    node.expressions = [expr]\n    while (this.eat(tt.comma)) node.expressions.push(this.parseMaybeAssign(noIn, refDestructuringErrors))\n    return this.finishNode(node, \"SequenceExpression\")\n  }\n  return expr\n}\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp.parseMaybeAssign = function(noIn, refDestructuringErrors, afterLeftParse) {\n  if (this.isContextual(\"yield\")) {\n    if (this.inGenerator) return this.parseYield(noIn)\n    // The tokenizer will assume an expression is allowed after\n    // `yield`, but this isn't that kind of yield\n    else this.exprAllowed = false\n  }\n\n  let ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldShorthandAssign = -1\n  if (refDestructuringErrors) {\n    oldParenAssign = refDestructuringErrors.parenthesizedAssign\n    oldTrailingComma = refDestructuringErrors.trailingComma\n    oldShorthandAssign = refDestructuringErrors.shorthandAssign\n    refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.shorthandAssign = -1\n  } else {\n    refDestructuringErrors = new DestructuringErrors\n    ownDestructuringErrors = true\n  }\n\n  let startPos = this.start, startLoc = this.startLoc\n  if (this.type === tt.parenL || this.type === tt.name)\n    this.potentialArrowAt = this.start\n  let left = this.parseMaybeConditional(noIn, refDestructuringErrors)\n  if (afterLeftParse) left = afterLeftParse.call(this, left, startPos, startLoc)\n  if (this.type.isAssign) {\n    let node = this.startNodeAt(startPos, startLoc)\n    node.operator = this.value\n    node.left = this.type === tt.eq ? this.toAssignable(left, false, refDestructuringErrors) : left\n    if (!ownDestructuringErrors) DestructuringErrors.call(refDestructuringErrors)\n    refDestructuringErrors.shorthandAssign = -1 // reset because shorthand default was used correctly\n    this.checkLVal(left)\n    this.next()\n    node.right = this.parseMaybeAssign(noIn)\n    return this.finishNode(node, \"AssignmentExpression\")\n  } else {\n    if (ownDestructuringErrors) this.checkExpressionErrors(refDestructuringErrors, true)\n  }\n  if (oldParenAssign > -1) refDestructuringErrors.parenthesizedAssign = oldParenAssign\n  if (oldTrailingComma > -1) refDestructuringErrors.trailingComma = oldTrailingComma\n  if (oldShorthandAssign > -1) refDestructuringErrors.shorthandAssign = oldShorthandAssign\n  return left\n}\n\n// Parse a ternary conditional (`?:`) operator.\n\npp.parseMaybeConditional = function(noIn, refDestructuringErrors) {\n  let startPos = this.start, startLoc = this.startLoc\n  let expr = this.parseExprOps(noIn, refDestructuringErrors)\n  if (this.checkExpressionErrors(refDestructuringErrors)) return expr\n  if (this.eat(tt.question)) {\n    let node = this.startNodeAt(startPos, startLoc)\n    node.test = expr\n    node.consequent = this.parseMaybeAssign()\n    this.expect(tt.colon)\n    node.alternate = this.parseMaybeAssign(noIn)\n    return this.finishNode(node, \"ConditionalExpression\")\n  }\n  return expr\n}\n\n// Start the precedence parser.\n\npp.parseExprOps = function(noIn, refDestructuringErrors) {\n  let startPos = this.start, startLoc = this.startLoc\n  let expr = this.parseMaybeUnary(refDestructuringErrors, false)\n  if (this.checkExpressionErrors(refDestructuringErrors)) return expr\n  return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, noIn)\n}\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, noIn) {\n  let prec = this.type.binop\n  if (prec != null && (!noIn || this.type !== tt._in)) {\n    if (prec > minPrec) {\n      let logical = this.type === tt.logicalOR || this.type === tt.logicalAND\n      let op = this.value\n      this.next()\n      let startPos = this.start, startLoc = this.startLoc\n      let right = this.parseExprOp(this.parseMaybeUnary(null, false), startPos, startLoc, prec, noIn)\n      let node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical)\n      return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, noIn)\n    }\n  }\n  return left\n}\n\npp.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n  let node = this.startNodeAt(startPos, startLoc)\n  node.left = left\n  node.operator = op\n  node.right = right\n  return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n}\n\n// Parse unary operators, both prefix and postfix.\n\npp.parseMaybeUnary = function(refDestructuringErrors, sawUnary) {\n  let startPos = this.start, startLoc = this.startLoc, expr\n  if (this.isContextual(\"await\") && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction))) {\n    expr = this.parseAwait()\n    sawUnary = true\n  } else if (this.type.prefix) {\n    let node = this.startNode(), update = this.type === tt.incDec\n    node.operator = this.value\n    node.prefix = true\n    this.next()\n    node.argument = this.parseMaybeUnary(null, true)\n    this.checkExpressionErrors(refDestructuringErrors, true)\n    if (update) this.checkLVal(node.argument)\n    else if (this.strict && node.operator === \"delete\" &&\n             node.argument.type === \"Identifier\")\n      this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\")\n    else sawUnary = true\n    expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\")\n  } else {\n    expr = this.parseExprSubscripts(refDestructuringErrors)\n    if (this.checkExpressionErrors(refDestructuringErrors)) return expr\n    while (this.type.postfix && !this.canInsertSemicolon()) {\n      let node = this.startNodeAt(startPos, startLoc)\n      node.operator = this.value\n      node.prefix = false\n      node.argument = expr\n      this.checkLVal(expr)\n      this.next()\n      expr = this.finishNode(node, \"UpdateExpression\")\n    }\n  }\n\n  if (!sawUnary && this.eat(tt.starstar))\n    return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false), \"**\", false)\n  else\n    return expr\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp.parseExprSubscripts = function(refDestructuringErrors) {\n  let startPos = this.start, startLoc = this.startLoc\n  let expr = this.parseExprAtom(refDestructuringErrors)\n  let skipArrowSubscripts = expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\"\n  if (this.checkExpressionErrors(refDestructuringErrors) || skipArrowSubscripts) return expr\n  let result = this.parseSubscripts(expr, startPos, startLoc)\n  if (refDestructuringErrors && result.type === \"MemberExpression\") {\n    if (refDestructuringErrors.parenthesizedAssign >= result.start) refDestructuringErrors.parenthesizedAssign = -1\n    if (refDestructuringErrors.parenthesizedBind >= result.start) refDestructuringErrors.parenthesizedBind = -1\n  }\n  return result\n}\n\npp.parseSubscripts = function(base, startPos, startLoc, noCalls) {\n  let maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n      this.lastTokEnd === base.end && !this.canInsertSemicolon() && this.input.slice(base.start, base.end) === \"async\"\n  while (true) {\n    let element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow)\n    if (element === base || element.type === \"ArrowFunctionExpression\") return element\n    base = element\n  }\n}\n\npp.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow) {\n  let computed = this.eat(tt.bracketL)\n  if (computed || this.eat(tt.dot)) {\n    let node = this.startNodeAt(startPos, startLoc)\n    node.object = base\n    node.property = computed ? this.parseExpression() : this.parseIdent(true)\n    node.computed = !!computed\n    if (computed) this.expect(tt.bracketR)\n    base = this.finishNode(node, \"MemberExpression\")\n  } else if (!noCalls && this.eat(tt.parenL)) {\n    let refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos\n    this.yieldPos = 0\n    this.awaitPos = 0\n    this.awaitIdentPos = 0\n    let exprList = this.parseExprList(tt.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors)\n    if (maybeAsyncArrow && !this.canInsertSemicolon() && this.eat(tt.arrow)) {\n      this.checkPatternErrors(refDestructuringErrors, false)\n      this.checkYieldAwaitInDefaultParams()\n      if (this.awaitIdentPos > 0)\n        this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\")\n      this.yieldPos = oldYieldPos\n      this.awaitPos = oldAwaitPos\n      this.awaitIdentPos = oldAwaitIdentPos\n      return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true)\n    }\n    this.checkExpressionErrors(refDestructuringErrors, true)\n    this.yieldPos = oldYieldPos || this.yieldPos\n    this.awaitPos = oldAwaitPos || this.awaitPos\n    this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos\n    let node = this.startNodeAt(startPos, startLoc)\n    node.callee = base\n    node.arguments = exprList\n    base = this.finishNode(node, \"CallExpression\")\n  } else if (this.type === tt.backQuote) {\n    let node = this.startNodeAt(startPos, startLoc)\n    node.tag = base\n    node.quasi = this.parseTemplate({isTagged: true})\n    base = this.finishNode(node, \"TaggedTemplateExpression\")\n  }\n  return base\n}\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp.parseExprAtom = function(refDestructuringErrors) {\n  // If a division operator appears in an expression position, the\n  // tokenizer got confused, and we force it to read a regexp instead.\n  if (this.type === tt.slash) this.readRegexp()\n\n  let node, canBeArrow = this.potentialArrowAt === this.start\n  switch (this.type) {\n  case tt._super:\n    if (!this.allowSuper)\n      this.raise(this.start, \"'super' keyword outside a method\")\n    node = this.startNode()\n    this.next()\n    if (this.type === tt.parenL && !this.allowDirectSuper)\n      this.raise(node.start, \"super() call outside constructor of a subclass\")\n    // The `super` keyword can appear at below:\n    // SuperProperty:\n    //     super [ Expression ]\n    //     super . IdentifierName\n    // SuperCall:\n    //     super Arguments\n    if (this.type !== tt.dot && this.type !== tt.bracketL && this.type !== tt.parenL)\n      this.unexpected()\n    return this.finishNode(node, \"Super\")\n\n  case tt._this:\n    node = this.startNode()\n    this.next()\n    return this.finishNode(node, \"ThisExpression\")\n\n  case tt.name:\n    let startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc\n    let id = this.parseIdent(false)\n    if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(tt._function))\n      return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true)\n    if (canBeArrow && !this.canInsertSemicolon()) {\n      if (this.eat(tt.arrow))\n        return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false)\n      if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === tt.name && !containsEsc) {\n        id = this.parseIdent(false)\n        if (this.canInsertSemicolon() || !this.eat(tt.arrow))\n          this.unexpected()\n        return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true)\n      }\n    }\n    return id\n\n  case tt.regexp:\n    let value = this.value\n    node = this.parseLiteral(value.value)\n    node.regex = {pattern: value.pattern, flags: value.flags}\n    return node\n\n  case tt.num: case tt.string:\n    return this.parseLiteral(this.value)\n\n  case tt._null: case tt._true: case tt._false:\n    node = this.startNode()\n    node.value = this.type === tt._null ? null : this.type === tt._true\n    node.raw = this.type.keyword\n    this.next()\n    return this.finishNode(node, \"Literal\")\n\n  case tt.parenL:\n    let start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow)\n    if (refDestructuringErrors) {\n      if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n        refDestructuringErrors.parenthesizedAssign = start\n      if (refDestructuringErrors.parenthesizedBind < 0)\n        refDestructuringErrors.parenthesizedBind = start\n    }\n    return expr\n\n  case tt.bracketL:\n    node = this.startNode()\n    this.next()\n    node.elements = this.parseExprList(tt.bracketR, true, true, refDestructuringErrors)\n    return this.finishNode(node, \"ArrayExpression\")\n\n  case tt.braceL:\n    return this.parseObj(false, refDestructuringErrors)\n\n  case tt._function:\n    node = this.startNode()\n    this.next()\n    return this.parseFunction(node, 0)\n\n  case tt._class:\n    return this.parseClass(this.startNode(), false)\n\n  case tt._new:\n    return this.parseNew()\n\n  case tt.backQuote:\n    return this.parseTemplate()\n\n  default:\n    this.unexpected()\n  }\n}\n\npp.parseLiteral = function(value) {\n  let node = this.startNode()\n  node.value = value\n  node.raw = this.input.slice(this.start, this.end)\n  this.next()\n  return this.finishNode(node, \"Literal\")\n}\n\npp.parseParenExpression = function() {\n  this.expect(tt.parenL)\n  let val = this.parseExpression()\n  this.expect(tt.parenR)\n  return val\n}\n\npp.parseParenAndDistinguishExpression = function(canBeArrow) {\n  let startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8\n  if (this.options.ecmaVersion >= 6) {\n    this.next()\n\n    let innerStartPos = this.start, innerStartLoc = this.startLoc\n    let exprList = [], first = true, lastIsComma = false\n    let refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart\n    this.yieldPos = 0\n    this.awaitPos = 0\n    // Do not save awaitIdentPos to allow checking awaits nested in parameters\n    while (this.type !== tt.parenR) {\n      first ? first = false : this.expect(tt.comma)\n      if (allowTrailingComma && this.afterTrailingComma(tt.parenR, true)) {\n        lastIsComma = true\n        break\n      } else if (this.type === tt.ellipsis) {\n        spreadStart = this.start\n        exprList.push(this.parseParenItem(this.parseRestBinding()))\n        if (this.type === tt.comma) this.raise(this.start, \"Comma is not permitted after the rest element\")\n        break\n      } else {\n        exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem))\n      }\n    }\n    let innerEndPos = this.start, innerEndLoc = this.startLoc\n    this.expect(tt.parenR)\n\n    if (canBeArrow && !this.canInsertSemicolon() && this.eat(tt.arrow)) {\n      this.checkPatternErrors(refDestructuringErrors, false)\n      this.checkYieldAwaitInDefaultParams()\n      this.yieldPos = oldYieldPos\n      this.awaitPos = oldAwaitPos\n      return this.parseParenArrowList(startPos, startLoc, exprList)\n    }\n\n    if (!exprList.length || lastIsComma) this.unexpected(this.lastTokStart)\n    if (spreadStart) this.unexpected(spreadStart)\n    this.checkExpressionErrors(refDestructuringErrors, true)\n    this.yieldPos = oldYieldPos || this.yieldPos\n    this.awaitPos = oldAwaitPos || this.awaitPos\n\n    if (exprList.length > 1) {\n      val = this.startNodeAt(innerStartPos, innerStartLoc)\n      val.expressions = exprList\n      this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc)\n    } else {\n      val = exprList[0]\n    }\n  } else {\n    val = this.parseParenExpression()\n  }\n\n  if (this.options.preserveParens) {\n    let par = this.startNodeAt(startPos, startLoc)\n    par.expression = val\n    return this.finishNode(par, \"ParenthesizedExpression\")\n  } else {\n    return val\n  }\n}\n\npp.parseParenItem = function(item) {\n  return item\n}\n\npp.parseParenArrowList = function(startPos, startLoc, exprList) {\n  return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList)\n}\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nconst empty = []\n\npp.parseNew = function() {\n  let node = this.startNode()\n  let meta = this.parseIdent(true)\n  if (this.options.ecmaVersion >= 6 && this.eat(tt.dot)) {\n    node.meta = meta\n    let containsEsc = this.containsEsc\n    node.property = this.parseIdent(true)\n    if (node.property.name !== \"target\" || containsEsc)\n      this.raiseRecoverable(node.property.start, \"The only valid meta property for new is new.target\")\n    if (!this.inNonArrowFunction())\n      this.raiseRecoverable(node.start, \"new.target can only be used in functions\")\n    return this.finishNode(node, \"MetaProperty\")\n  }\n  let startPos = this.start, startLoc = this.startLoc\n  node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true)\n  if (this.eat(tt.parenL)) node.arguments = this.parseExprList(tt.parenR, this.options.ecmaVersion >= 8, false)\n  else node.arguments = empty\n  return this.finishNode(node, \"NewExpression\")\n}\n\n// Parse template expression.\n\npp.parseTemplateElement = function({isTagged}) {\n  let elem = this.startNode()\n  if (this.type === tt.invalidTemplate) {\n    if (!isTagged) {\n      this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\")\n    }\n    elem.value = {\n      raw: this.value,\n      cooked: null\n    }\n  } else {\n    elem.value = {\n      raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: this.value\n    }\n  }\n  this.next()\n  elem.tail = this.type === tt.backQuote\n  return this.finishNode(elem, \"TemplateElement\")\n}\n\npp.parseTemplate = function({isTagged = false} = {}) {\n  let node = this.startNode()\n  this.next()\n  node.expressions = []\n  let curElt = this.parseTemplateElement({isTagged})\n  node.quasis = [curElt]\n  while (!curElt.tail) {\n    if (this.type === tt.eof) this.raise(this.pos, \"Unterminated template literal\")\n    this.expect(tt.dollarBraceL)\n    node.expressions.push(this.parseExpression())\n    this.expect(tt.braceR)\n    node.quasis.push(curElt = this.parseTemplateElement({isTagged}))\n  }\n  this.next()\n  return this.finishNode(node, \"TemplateLiteral\")\n}\n\npp.isAsyncProp = function(prop) {\n  return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n    (this.type === tt.name || this.type === tt.num || this.type === tt.string || this.type === tt.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === tt.star)) &&\n    !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n}\n\n// Parse an object literal or binding pattern.\n\npp.parseObj = function(isPattern, refDestructuringErrors) {\n  let node = this.startNode(), first = true, propHash = {}\n  node.properties = []\n  this.next()\n  while (!this.eat(tt.braceR)) {\n    if (!first) {\n      this.expect(tt.comma)\n      if (this.afterTrailingComma(tt.braceR)) break\n    } else first = false\n\n    const prop = this.parseProperty(isPattern, refDestructuringErrors)\n    if (!isPattern) this.checkPropClash(prop, propHash, refDestructuringErrors)\n    node.properties.push(prop)\n  }\n  return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n}\n\npp.parseProperty = function(isPattern, refDestructuringErrors) {\n  let prop = this.startNode(), isGenerator, isAsync, startPos, startLoc\n  if (this.options.ecmaVersion >= 9 && this.eat(tt.ellipsis)) {\n    if (isPattern) {\n      prop.argument = this.parseIdent(false)\n      if (this.type === tt.comma) {\n        this.raise(this.start, \"Comma is not permitted after the rest element\")\n      }\n      return this.finishNode(prop, \"RestElement\")\n    }\n    // To disallow parenthesized identifier via `this.toAssignable()`.\n    if (this.type === tt.parenL && refDestructuringErrors) {\n      if (refDestructuringErrors.parenthesizedAssign < 0) {\n        refDestructuringErrors.parenthesizedAssign = this.start\n      }\n      if (refDestructuringErrors.parenthesizedBind < 0) {\n        refDestructuringErrors.parenthesizedBind = this.start\n      }\n    }\n    // Parse argument.\n    prop.argument = this.parseMaybeAssign(false, refDestructuringErrors)\n    // To disallow trailing comma via `this.toAssignable()`.\n    if (this.type === tt.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n      refDestructuringErrors.trailingComma = this.start\n    }\n    // Finish\n    return this.finishNode(prop, \"SpreadElement\")\n  }\n  if (this.options.ecmaVersion >= 6) {\n    prop.method = false\n    prop.shorthand = false\n    if (isPattern || refDestructuringErrors) {\n      startPos = this.start\n      startLoc = this.startLoc\n    }\n    if (!isPattern)\n      isGenerator = this.eat(tt.star)\n  }\n  let containsEsc = this.containsEsc\n  this.parsePropertyName(prop)\n  if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n    isAsync = true\n    isGenerator = this.options.ecmaVersion >= 9 && this.eat(tt.star)\n    this.parsePropertyName(prop, refDestructuringErrors)\n  } else {\n    isAsync = false\n  }\n  this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc)\n  return this.finishNode(prop, \"Property\")\n}\n\npp.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n  if ((isGenerator || isAsync) && this.type === tt.colon)\n    this.unexpected()\n\n  if (this.eat(tt.colon)) {\n    prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors)\n    prop.kind = \"init\"\n  } else if (this.options.ecmaVersion >= 6 && this.type === tt.parenL) {\n    if (isPattern) this.unexpected()\n    prop.kind = \"init\"\n    prop.method = true\n    prop.value = this.parseMethod(isGenerator, isAsync)\n  } else if (!isPattern && !containsEsc &&\n             this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n             (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n             (this.type !== tt.comma && this.type !== tt.braceR)) {\n    if (isGenerator || isAsync) this.unexpected()\n    prop.kind = prop.key.name\n    this.parsePropertyName(prop)\n    prop.value = this.parseMethod(false)\n    let paramCount = prop.kind === \"get\" ? 0 : 1\n    if (prop.value.params.length !== paramCount) {\n      let start = prop.value.start\n      if (prop.kind === \"get\")\n        this.raiseRecoverable(start, \"getter should have no params\")\n      else\n        this.raiseRecoverable(start, \"setter should have exactly one param\")\n    } else {\n      if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n        this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\")\n    }\n  } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n    if (isGenerator || isAsync) this.unexpected()\n    this.checkUnreserved(prop.key)\n    if (prop.key.name === \"await\" && !this.awaitIdentPos)\n      this.awaitIdentPos = startPos\n    prop.kind = \"init\"\n    if (isPattern) {\n      prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key)\n    } else if (this.type === tt.eq && refDestructuringErrors) {\n      if (refDestructuringErrors.shorthandAssign < 0)\n        refDestructuringErrors.shorthandAssign = this.start\n      prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key)\n    } else {\n      prop.value = prop.key\n    }\n    prop.shorthand = true\n  } else this.unexpected()\n}\n\npp.parsePropertyName = function(prop) {\n  if (this.options.ecmaVersion >= 6) {\n    if (this.eat(tt.bracketL)) {\n      prop.computed = true\n      prop.key = this.parseMaybeAssign()\n      this.expect(tt.bracketR)\n      return prop.key\n    } else {\n      prop.computed = false\n    }\n  }\n  return prop.key = this.type === tt.num || this.type === tt.string ? this.parseExprAtom() : this.parseIdent(true)\n}\n\n// Initialize empty function node.\n\npp.initFunction = function(node) {\n  node.id = null\n  if (this.options.ecmaVersion >= 6) node.generator = node.expression = false\n  if (this.options.ecmaVersion >= 8) node.async = false\n}\n\n// Parse object or class method.\n\npp.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n  let node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos\n\n  this.initFunction(node)\n  if (this.options.ecmaVersion >= 6)\n    node.generator = isGenerator\n  if (this.options.ecmaVersion >= 8)\n    node.async = !!isAsync\n\n  this.yieldPos = 0\n  this.awaitPos = 0\n  this.awaitIdentPos = 0\n  this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0))\n\n  this.expect(tt.parenL)\n  node.params = this.parseBindingList(tt.parenR, false, this.options.ecmaVersion >= 8)\n  this.checkYieldAwaitInDefaultParams()\n  this.parseFunctionBody(node, false, true)\n\n  this.yieldPos = oldYieldPos\n  this.awaitPos = oldAwaitPos\n  this.awaitIdentPos = oldAwaitIdentPos\n  return this.finishNode(node, \"FunctionExpression\")\n}\n\n// Parse arrow function expression with given parameters.\n\npp.parseArrowExpression = function(node, params, isAsync) {\n  let oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos\n\n  this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW)\n  this.initFunction(node)\n  if (this.options.ecmaVersion >= 8) node.async = !!isAsync\n\n  this.yieldPos = 0\n  this.awaitPos = 0\n  this.awaitIdentPos = 0\n\n  node.params = this.toAssignableList(params, true)\n  this.parseFunctionBody(node, true, false)\n\n  this.yieldPos = oldYieldPos\n  this.awaitPos = oldAwaitPos\n  this.awaitIdentPos = oldAwaitIdentPos\n  return this.finishNode(node, \"ArrowFunctionExpression\")\n}\n\n// Parse function body and check parameters.\n\npp.parseFunctionBody = function(node, isArrowFunction, isMethod) {\n  let isExpression = isArrowFunction && this.type !== tt.braceL\n  let oldStrict = this.strict, useStrict = false\n\n  if (isExpression) {\n    node.body = this.parseMaybeAssign()\n    node.expression = true\n    this.checkParams(node, false)\n  } else {\n    let nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params)\n    if (!oldStrict || nonSimple) {\n      useStrict = this.strictDirective(this.end)\n      // If this is a strict mode function, verify that argument names\n      // are not repeated, and it does not try to bind the words `eval`\n      // or `arguments`.\n      if (useStrict && nonSimple)\n        this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\")\n    }\n    // Start a new scope with regard to labels and the `inFunction`\n    // flag (restore them to their old value afterwards).\n    let oldLabels = this.labels\n    this.labels = []\n    if (useStrict) this.strict = true\n\n    // Add the params to varDeclaredNames to ensure that an error is thrown\n    // if a let/const declaration in the function clashes with one of the params.\n    this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params))\n    node.body = this.parseBlock(false)\n    node.expression = false\n    this.adaptDirectivePrologue(node.body.body)\n    this.labels = oldLabels\n  }\n  this.exitScope()\n\n  // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n  if (this.strict && node.id) this.checkLVal(node.id, BIND_OUTSIDE)\n  this.strict = oldStrict\n}\n\npp.isSimpleParamList = function(params) {\n  for (let param of params)\n    if (param.type !== \"Identifier\") return false\n  return true\n}\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp.checkParams = function(node, allowDuplicates) {\n  let nameHash = {}\n  for (let param of node.params)\n    this.checkLVal(param, BIND_VAR, allowDuplicates ? null : nameHash)\n}\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n  let elts = [], first = true\n  while (!this.eat(close)) {\n    if (!first) {\n      this.expect(tt.comma)\n      if (allowTrailingComma && this.afterTrailingComma(close)) break\n    } else first = false\n\n    let elt\n    if (allowEmpty && this.type === tt.comma)\n      elt = null\n    else if (this.type === tt.ellipsis) {\n      elt = this.parseSpread(refDestructuringErrors)\n      if (refDestructuringErrors && this.type === tt.comma && refDestructuringErrors.trailingComma < 0)\n        refDestructuringErrors.trailingComma = this.start\n    } else {\n      elt = this.parseMaybeAssign(false, refDestructuringErrors)\n    }\n    elts.push(elt)\n  }\n  return elts\n}\n\npp.checkUnreserved = function({start, end, name}) {\n  if (this.inGenerator && name === \"yield\")\n    this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\")\n  if (this.inAsync && name === \"await\")\n    this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\")\n  if (this.keywords.test(name))\n    this.raise(start, `Unexpected keyword '${name}'`)\n  if (this.options.ecmaVersion < 6 &&\n    this.input.slice(start, end).indexOf(\"\\\\\") !== -1) return\n  const re = this.strict ? this.reservedWordsStrict : this.reservedWords\n  if (re.test(name)) {\n    if (!this.inAsync && name === \"await\")\n      this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\")\n    this.raiseRecoverable(start, `The keyword '${name}' is reserved`)\n  }\n}\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp.parseIdent = function(liberal, isBinding) {\n  let node = this.startNode()\n  if (liberal && this.options.allowReserved === \"never\") liberal = false\n  if (this.type === tt.name) {\n    node.name = this.value\n  } else if (this.type.keyword) {\n    node.name = this.type.keyword\n\n    // To fix https://github.com/acornjs/acorn/issues/575\n    // `class` and `function` keywords push new context into this.context.\n    // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n    // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n    if ((node.name === \"class\" || node.name === \"function\") &&\n        (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n      this.context.pop()\n    }\n  } else {\n    this.unexpected()\n  }\n  this.next()\n  this.finishNode(node, \"Identifier\")\n  if (!liberal) {\n    this.checkUnreserved(node)\n    if (node.name === \"await\" && !this.awaitIdentPos)\n      this.awaitIdentPos = node.start\n  }\n  return node\n}\n\n// Parses yield expression inside generator.\n\npp.parseYield = function(noIn) {\n  if (!this.yieldPos) this.yieldPos = this.start\n\n  let node = this.startNode()\n  this.next()\n  if (this.type === tt.semi || this.canInsertSemicolon() || (this.type !== tt.star && !this.type.startsExpr)) {\n    node.delegate = false\n    node.argument = null\n  } else {\n    node.delegate = this.eat(tt.star)\n    node.argument = this.parseMaybeAssign(noIn)\n  }\n  return this.finishNode(node, \"YieldExpression\")\n}\n\npp.parseAwait = function() {\n  if (!this.awaitPos) this.awaitPos = this.start\n\n  let node = this.startNode()\n  this.next()\n  node.argument = this.parseMaybeUnary(null, true)\n  return this.finishNode(node, \"AwaitExpression\")\n}\n","import {Parser} from \"./state\"\nimport {Position, getLineInfo} from \"./locutil\"\n\nconst pp = Parser.prototype\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp.raise = function(pos, message) {\n  let loc = getLineInfo(this.input, pos)\n  message += \" (\" + loc.line + \":\" + loc.column + \")\"\n  let err = new SyntaxError(message)\n  err.pos = pos; err.loc = loc; err.raisedAt = this.pos\n  throw err\n}\n\npp.raiseRecoverable = pp.raise\n\npp.curPosition = function() {\n  if (this.options.locations) {\n    return new Position(this.curLine, this.pos - this.lineStart)\n  }\n}\n","import {Parser} from \"./state\"\nimport {SCOPE_VAR, SCOPE_FUNCTION, SCOPE_TOP, SCOPE_ARROW, SCOPE_SIMPLE_CATCH, BIND_LEXICAL, BIND_SIMPLE_CATCH, BIND_FUNCTION} from \"./scopeflags\"\n\nconst pp = Parser.prototype\n\nclass Scope {\n  constructor(flags) {\n    this.flags = flags\n    // A list of var-declared names in the current lexical scope\n    this.var = []\n    // A list of lexically-declared names in the current lexical scope\n    this.lexical = []\n    // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n    this.functions = []\n  }\n}\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp.enterScope = function(flags) {\n  this.scopeStack.push(new Scope(flags))\n}\n\npp.exitScope = function() {\n  this.scopeStack.pop()\n}\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp.treatFunctionsAsVarInScope = function(scope) {\n  return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n}\n\npp.declareName = function(name, bindingType, pos) {\n  let redeclared = false\n  if (bindingType === BIND_LEXICAL) {\n    const scope = this.currentScope()\n    redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1\n    scope.lexical.push(name)\n    if (this.inModule && (scope.flags & SCOPE_TOP))\n      delete this.undefinedExports[name]\n  } else if (bindingType === BIND_SIMPLE_CATCH) {\n    const scope = this.currentScope()\n    scope.lexical.push(name)\n  } else if (bindingType === BIND_FUNCTION) {\n    const scope = this.currentScope()\n    if (this.treatFunctionsAsVar)\n      redeclared = scope.lexical.indexOf(name) > -1\n    else\n      redeclared = scope.lexical.indexOf(name) > -1 || scope.var.indexOf(name) > -1\n    scope.functions.push(name)\n  } else {\n    for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n      const scope = this.scopeStack[i]\n      if (scope.lexical.indexOf(name) > -1 && !((scope.flags & SCOPE_SIMPLE_CATCH) && scope.lexical[0] === name) ||\n          !this.treatFunctionsAsVarInScope(scope) && scope.functions.indexOf(name) > -1) {\n        redeclared = true\n        break\n      }\n      scope.var.push(name)\n      if (this.inModule && (scope.flags & SCOPE_TOP))\n        delete this.undefinedExports[name]\n      if (scope.flags & SCOPE_VAR) break\n    }\n  }\n  if (redeclared) this.raiseRecoverable(pos, `Identifier '${name}' has already been declared`)\n}\n\npp.checkLocalExport = function(id) {\n  // scope.functions must be empty as Module code is always strict.\n  if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n      this.scopeStack[0].var.indexOf(id.name) === -1) {\n    this.undefinedExports[id.name] = id\n  }\n}\n\npp.currentScope = function() {\n  return this.scopeStack[this.scopeStack.length - 1]\n}\n\npp.currentVarScope = function() {\n  for (let i = this.scopeStack.length - 1;; i--) {\n    let scope = this.scopeStack[i]\n    if (scope.flags & SCOPE_VAR) return scope\n  }\n}\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp.currentThisScope = function() {\n  for (let i = this.scopeStack.length - 1;; i--) {\n    let scope = this.scopeStack[i]\n    if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) return scope\n  }\n}\n","import {Parser} from \"./state\"\nimport {SourceLocation} from \"./locutil\"\n\nexport class Node {\n  constructor(parser, pos, loc) {\n    this.type = \"\"\n    this.start = pos\n    this.end = 0\n    if (parser.options.locations)\n      this.loc = new SourceLocation(parser, loc)\n    if (parser.options.directSourceFile)\n      this.sourceFile = parser.options.directSourceFile\n    if (parser.options.ranges)\n      this.range = [pos, 0]\n  }\n}\n\n// Start an AST node, attaching a start offset.\n\nconst pp = Parser.prototype\n\npp.startNode = function() {\n  return new Node(this, this.start, this.startLoc)\n}\n\npp.startNodeAt = function(pos, loc) {\n  return new Node(this, pos, loc)\n}\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n  node.type = type\n  node.end = pos\n  if (this.options.locations)\n    node.loc.end = loc\n  if (this.options.ranges)\n    node.range[1] = pos\n  return node\n}\n\npp.finishNode = function(node, type) {\n  return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n}\n\n// Finish node at given position\n\npp.finishNodeAt = function(node, type, pos, loc) {\n  return finishNodeAt.call(this, node, type, pos, loc)\n}\n","// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\nimport {Parser} from \"./state\"\nimport {types as tt} from \"./tokentype\"\nimport {lineBreak} from \"./whitespace\"\n\nexport class TokContext {\n  constructor(token, isExpr, preserveSpace, override, generator) {\n    this.token = token\n    this.isExpr = !!isExpr\n    this.preserveSpace = !!preserveSpace\n    this.override = override\n    this.generator = !!generator\n  }\n}\n\nexport const types = {\n  b_stat: new TokContext(\"{\", false),\n  b_expr: new TokContext(\"{\", true),\n  b_tmpl: new TokContext(\"${\", false),\n  p_stat: new TokContext(\"(\", false),\n  p_expr: new TokContext(\"(\", true),\n  q_tmpl: new TokContext(\"`\", true, true, p => p.tryReadTemplateToken()),\n  f_stat: new TokContext(\"function\", false),\n  f_expr: new TokContext(\"function\", true),\n  f_expr_gen: new TokContext(\"function\", true, false, null, true),\n  f_gen: new TokContext(\"function\", false, false, null, true)\n}\n\nconst pp = Parser.prototype\n\npp.initialContext = function() {\n  return [types.b_stat]\n}\n\npp.braceIsBlock = function(prevType) {\n  let parent = this.curContext()\n  if (parent === types.f_expr || parent === types.f_stat)\n    return true\n  if (prevType === tt.colon && (parent === types.b_stat || parent === types.b_expr))\n    return !parent.isExpr\n\n  // The check for `tt.name && exprAllowed` detects whether we are\n  // after a `yield` or `of` construct. See the `updateContext` for\n  // `tt.name`.\n  if (prevType === tt._return || prevType === tt.name && this.exprAllowed)\n    return lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n  if (prevType === tt._else || prevType === tt.semi || prevType === tt.eof || prevType === tt.parenR || prevType === tt.arrow)\n    return true\n  if (prevType === tt.braceL)\n    return parent === types.b_stat\n  if (prevType === tt._var || prevType === tt._const || prevType === tt.name)\n    return false\n  return !this.exprAllowed\n}\n\npp.inGeneratorContext = function() {\n  for (let i = this.context.length - 1; i >= 1; i--) {\n    let context = this.context[i]\n    if (context.token === \"function\")\n      return context.generator\n  }\n  return false\n}\n\npp.updateContext = function(prevType) {\n  let update, type = this.type\n  if (type.keyword && prevType === tt.dot)\n    this.exprAllowed = false\n  else if (update = type.updateContext)\n    update.call(this, prevType)\n  else\n    this.exprAllowed = type.beforeExpr\n}\n\n// Token-specific context update code\n\ntt.parenR.updateContext = tt.braceR.updateContext = function() {\n  if (this.context.length === 1) {\n    this.exprAllowed = true\n    return\n  }\n  let out = this.context.pop()\n  if (out === types.b_stat && this.curContext().token === \"function\") {\n    out = this.context.pop()\n  }\n  this.exprAllowed = !out.isExpr\n}\n\ntt.braceL.updateContext = function(prevType) {\n  this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr)\n  this.exprAllowed = true\n}\n\ntt.dollarBraceL.updateContext = function() {\n  this.context.push(types.b_tmpl)\n  this.exprAllowed = true\n}\n\ntt.parenL.updateContext = function(prevType) {\n  let statementParens = prevType === tt._if || prevType === tt._for || prevType === tt._with || prevType === tt._while\n  this.context.push(statementParens ? types.p_stat : types.p_expr)\n  this.exprAllowed = true\n}\n\ntt.incDec.updateContext = function() {\n  // tokExprAllowed stays unchanged\n}\n\ntt._function.updateContext = tt._class.updateContext = function(prevType) {\n  if (prevType.beforeExpr && prevType !== tt.semi && prevType !== tt._else &&\n      !(prevType === tt._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n      !((prevType === tt.colon || prevType === tt.braceL) && this.curContext() === types.b_stat))\n    this.context.push(types.f_expr)\n  else\n    this.context.push(types.f_stat)\n  this.exprAllowed = false\n}\n\ntt.backQuote.updateContext = function() {\n  if (this.curContext() === types.q_tmpl)\n    this.context.pop()\n  else\n    this.context.push(types.q_tmpl)\n  this.exprAllowed = false\n}\n\ntt.star.updateContext = function(prevType) {\n  if (prevType === tt._function) {\n    let index = this.context.length - 1\n    if (this.context[index] === types.f_expr)\n      this.context[index] = types.f_expr_gen\n    else\n      this.context[index] = types.f_gen\n  }\n  this.exprAllowed = true\n}\n\ntt.name.updateContext = function(prevType) {\n  let allowed = false\n  if (this.options.ecmaVersion >= 6 && prevType !== tt.dot) {\n    if (this.value === \"of\" && !this.exprAllowed ||\n        this.value === \"yield\" && this.inGeneratorContext())\n      allowed = true\n  }\n  this.exprAllowed = allowed\n}\n","import {wordsRegexp} from \"./util.js\"\n\n// This file contains Unicode properties extracted from the ECMAScript\n// specification. The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nconst ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\"\nconst unicodeBinaryProperties = {\n  9: ecma9BinaryProperties,\n  10: ecma9BinaryProperties + \" Extended_Pictographic\"\n}\n\n// #table-unicode-general-category-values\nconst unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\"\n\n// #table-unicode-script-values\nconst ecma9ScriptValues = \"Adlam Adlm Ahom Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\"\nconst unicodeScriptValues = {\n  9: ecma9ScriptValues,\n  10: ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\"\n}\n\nconst data = {}\nfunction buildUnicodeData(ecmaVersion) {\n  let d = data[ecmaVersion] = {\n    binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n    nonBinary: {\n      General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n      Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n    }\n  }\n  d.nonBinary.Script_Extensions = d.nonBinary.Script\n\n  d.nonBinary.gc = d.nonBinary.General_Category\n  d.nonBinary.sc = d.nonBinary.Script\n  d.nonBinary.scx = d.nonBinary.Script_Extensions\n}\nbuildUnicodeData(9)\nbuildUnicodeData(10)\n\nexport default data\n","import {isIdentifierStart, isIdentifierChar} from \"./identifier.js\"\nimport {Parser} from \"./state.js\"\nimport UNICODE_PROPERTY_VALUES from \"./unicode-property-data.js\"\nimport {has} from \"./util.js\"\n\nconst pp = Parser.prototype\n\nexport class RegExpValidationState {\n  constructor(parser) {\n    this.parser = parser\n    this.validFlags = `gim${parser.options.ecmaVersion >= 6 ? \"uy\" : \"\"}${parser.options.ecmaVersion >= 9 ? \"s\" : \"\"}`\n    this.unicodeProperties = UNICODE_PROPERTY_VALUES[parser.options.ecmaVersion >= 10 ? 10 : parser.options.ecmaVersion]\n    this.source = \"\"\n    this.flags = \"\"\n    this.start = 0\n    this.switchU = false\n    this.switchN = false\n    this.pos = 0\n    this.lastIntValue = 0\n    this.lastStringValue = \"\"\n    this.lastAssertionIsQuantifiable = false\n    this.numCapturingParens = 0\n    this.maxBackReference = 0\n    this.groupNames = []\n    this.backReferenceNames = []\n  }\n\n  reset(start, pattern, flags) {\n    const unicode = flags.indexOf(\"u\") !== -1\n    this.start = start | 0\n    this.source = pattern + \"\"\n    this.flags = flags\n    this.switchU = unicode && this.parser.options.ecmaVersion >= 6\n    this.switchN = unicode && this.parser.options.ecmaVersion >= 9\n  }\n\n  raise(message) {\n    this.parser.raiseRecoverable(this.start, `Invalid regular expression: /${this.source}/: ${message}`)\n  }\n\n  // If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n  // Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\n  at(i) {\n    const s = this.source\n    const l = s.length\n    if (i >= l) {\n      return -1\n    }\n    const c = s.charCodeAt(i)\n    if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n      return c\n    }\n    return (c << 10) + s.charCodeAt(i + 1) - 0x35FDC00\n  }\n\n  nextIndex(i) {\n    const s = this.source\n    const l = s.length\n    if (i >= l) {\n      return l\n    }\n    const c = s.charCodeAt(i)\n    if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n      return i + 1\n    }\n    return i + 2\n  }\n\n  current() {\n    return this.at(this.pos)\n  }\n\n  lookahead() {\n    return this.at(this.nextIndex(this.pos))\n  }\n\n  advance() {\n    this.pos = this.nextIndex(this.pos)\n  }\n\n  eat(ch) {\n    if (this.current() === ch) {\n      this.advance()\n      return true\n    }\n    return false\n  }\n}\n\nfunction codePointToString(ch) {\n  if (ch <= 0xFFFF) return String.fromCharCode(ch)\n  ch -= 0x10000\n  return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00)\n}\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp.validateRegExpFlags = function(state) {\n  const validFlags = state.validFlags\n  const flags = state.flags\n\n  for (let i = 0; i < flags.length; i++) {\n    const flag = flags.charAt(i)\n    if (validFlags.indexOf(flag) === -1) {\n      this.raise(state.start, \"Invalid regular expression flag\")\n    }\n    if (flags.indexOf(flag, i + 1) > -1) {\n      this.raise(state.start, \"Duplicate regular expression flag\")\n    }\n  }\n}\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp.validateRegExpPattern = function(state) {\n  this.regexp_pattern(state)\n\n  // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n  // parsing contains a |GroupName|, reparse with the goal symbol\n  // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n  // exception if _P_ did not conform to the grammar, if any elements of _P_\n  // were not matched by the parse, or if any Early Error conditions exist.\n  if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n    state.switchN = true\n    this.regexp_pattern(state)\n  }\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp.regexp_pattern = function(state) {\n  state.pos = 0\n  state.lastIntValue = 0\n  state.lastStringValue = \"\"\n  state.lastAssertionIsQuantifiable = false\n  state.numCapturingParens = 0\n  state.maxBackReference = 0\n  state.groupNames.length = 0\n  state.backReferenceNames.length = 0\n\n  this.regexp_disjunction(state)\n\n  if (state.pos !== state.source.length) {\n    // Make the same messages as V8.\n    if (state.eat(0x29 /* ) */)) {\n      state.raise(\"Unmatched ')'\")\n    }\n    if (state.eat(0x5D /* [ */) || state.eat(0x7D /* } */)) {\n      state.raise(\"Lone quantifier brackets\")\n    }\n  }\n  if (state.maxBackReference > state.numCapturingParens) {\n    state.raise(\"Invalid escape\")\n  }\n  for (const name of state.backReferenceNames) {\n    if (state.groupNames.indexOf(name) === -1) {\n      state.raise(\"Invalid named capture referenced\")\n    }\n  }\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp.regexp_disjunction = function(state) {\n  this.regexp_alternative(state)\n  while (state.eat(0x7C /* | */)) {\n    this.regexp_alternative(state)\n  }\n\n  // Make the same message as V8.\n  if (this.regexp_eatQuantifier(state, true)) {\n    state.raise(\"Nothing to repeat\")\n  }\n  if (state.eat(0x7B /* { */)) {\n    state.raise(\"Lone quantifier brackets\")\n  }\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp.regexp_alternative = function(state) {\n  while (state.pos < state.source.length && this.regexp_eatTerm(state))\n    ;\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp.regexp_eatTerm = function(state) {\n  if (this.regexp_eatAssertion(state)) {\n    // Handle `QuantifiableAssertion Quantifier` alternative.\n    // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n    // is a QuantifiableAssertion.\n    if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n      // Make the same message as V8.\n      if (state.switchU) {\n        state.raise(\"Invalid quantifier\")\n      }\n    }\n    return true\n  }\n\n  if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n    this.regexp_eatQuantifier(state)\n    return true\n  }\n\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp.regexp_eatAssertion = function(state) {\n  const start = state.pos\n  state.lastAssertionIsQuantifiable = false\n\n  // ^, $\n  if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n    return true\n  }\n\n  // \\b \\B\n  if (state.eat(0x5C /* \\ */)) {\n    if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n      return true\n    }\n    state.pos = start\n  }\n\n  // Lookahead / Lookbehind\n  if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n    let lookbehind = false\n    if (this.options.ecmaVersion >= 9) {\n      lookbehind = state.eat(0x3C /* < */)\n    }\n    if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n      this.regexp_disjunction(state)\n      if (!state.eat(0x29 /* ) */)) {\n        state.raise(\"Unterminated group\")\n      }\n      state.lastAssertionIsQuantifiable = !lookbehind\n      return true\n    }\n  }\n\n  state.pos = start\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp.regexp_eatQuantifier = function(state, noError = false) {\n  if (this.regexp_eatQuantifierPrefix(state, noError)) {\n    state.eat(0x3F /* ? */)\n    return true\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp.regexp_eatQuantifierPrefix = function(state, noError) {\n  return (\n    state.eat(0x2A /* * */) ||\n    state.eat(0x2B /* + */) ||\n    state.eat(0x3F /* ? */) ||\n    this.regexp_eatBracedQuantifier(state, noError)\n  )\n}\npp.regexp_eatBracedQuantifier = function(state, noError) {\n  const start = state.pos\n  if (state.eat(0x7B /* { */)) {\n    let min = 0, max = -1\n    if (this.regexp_eatDecimalDigits(state)) {\n      min = state.lastIntValue\n      if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n        max = state.lastIntValue\n      }\n      if (state.eat(0x7D /* } */)) {\n        // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n        if (max !== -1 && max < min && !noError) {\n          state.raise(\"numbers out of order in {} quantifier\")\n        }\n        return true\n      }\n    }\n    if (state.switchU && !noError) {\n      state.raise(\"Incomplete quantifier\")\n    }\n    state.pos = start\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp.regexp_eatAtom = function(state) {\n  return (\n    this.regexp_eatPatternCharacters(state) ||\n    state.eat(0x2E /* . */) ||\n    this.regexp_eatReverseSolidusAtomEscape(state) ||\n    this.regexp_eatCharacterClass(state) ||\n    this.regexp_eatUncapturingGroup(state) ||\n    this.regexp_eatCapturingGroup(state)\n  )\n}\npp.regexp_eatReverseSolidusAtomEscape = function(state) {\n  const start = state.pos\n  if (state.eat(0x5C /* \\ */)) {\n    if (this.regexp_eatAtomEscape(state)) {\n      return true\n    }\n    state.pos = start\n  }\n  return false\n}\npp.regexp_eatUncapturingGroup = function(state) {\n  const start = state.pos\n  if (state.eat(0x28 /* ( */)) {\n    if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n      this.regexp_disjunction(state)\n      if (state.eat(0x29 /* ) */)) {\n        return true\n      }\n      state.raise(\"Unterminated group\")\n    }\n    state.pos = start\n  }\n  return false\n}\npp.regexp_eatCapturingGroup = function(state) {\n  if (state.eat(0x28 /* ( */)) {\n    if (this.options.ecmaVersion >= 9) {\n      this.regexp_groupSpecifier(state)\n    } else if (state.current() === 0x3F /* ? */) {\n      state.raise(\"Invalid group\")\n    }\n    this.regexp_disjunction(state)\n    if (state.eat(0x29 /* ) */)) {\n      state.numCapturingParens += 1\n      return true\n    }\n    state.raise(\"Unterminated group\")\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp.regexp_eatExtendedAtom = function(state) {\n  return (\n    state.eat(0x2E /* . */) ||\n    this.regexp_eatReverseSolidusAtomEscape(state) ||\n    this.regexp_eatCharacterClass(state) ||\n    this.regexp_eatUncapturingGroup(state) ||\n    this.regexp_eatCapturingGroup(state) ||\n    this.regexp_eatInvalidBracedQuantifier(state) ||\n    this.regexp_eatExtendedPatternCharacter(state)\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp.regexp_eatInvalidBracedQuantifier = function(state) {\n  if (this.regexp_eatBracedQuantifier(state, true)) {\n    state.raise(\"Nothing to repeat\")\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp.regexp_eatSyntaxCharacter = function(state) {\n  const ch = state.current()\n  if (isSyntaxCharacter(ch)) {\n    state.lastIntValue = ch\n    state.advance()\n    return true\n  }\n  return false\n}\nfunction isSyntaxCharacter(ch) {\n  return (\n    ch === 0x24 /* $ */ ||\n    ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n    ch === 0x2E /* . */ ||\n    ch === 0x3F /* ? */ ||\n    ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n    ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp.regexp_eatPatternCharacters = function(state) {\n  const start = state.pos\n  let ch = 0\n  while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n    state.advance()\n  }\n  return state.pos !== start\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp.regexp_eatExtendedPatternCharacter = function(state) {\n  const ch = state.current()\n  if (\n    ch !== -1 &&\n    ch !== 0x24 /* $ */ &&\n    !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n    ch !== 0x2E /* . */ &&\n    ch !== 0x3F /* ? */ &&\n    ch !== 0x5B /* [ */ &&\n    ch !== 0x5E /* ^ */ &&\n    ch !== 0x7C /* | */\n  ) {\n    state.advance()\n    return true\n  }\n  return false\n}\n\n// GroupSpecifier[U] ::\n//   [empty]\n//   `?` GroupName[?U]\npp.regexp_groupSpecifier = function(state) {\n  if (state.eat(0x3F /* ? */)) {\n    if (this.regexp_eatGroupName(state)) {\n      if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n        state.raise(\"Duplicate capture group name\")\n      }\n      state.groupNames.push(state.lastStringValue)\n      return\n    }\n    state.raise(\"Invalid group\")\n  }\n}\n\n// GroupName[U] ::\n//   `<` RegExpIdentifierName[?U] `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp.regexp_eatGroupName = function(state) {\n  state.lastStringValue = \"\"\n  if (state.eat(0x3C /* < */)) {\n    if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n      return true\n    }\n    state.raise(\"Invalid capture group name\")\n  }\n  return false\n}\n\n// RegExpIdentifierName[U] ::\n//   RegExpIdentifierStart[?U]\n//   RegExpIdentifierName[?U] RegExpIdentifierPart[?U]\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp.regexp_eatRegExpIdentifierName = function(state) {\n  state.lastStringValue = \"\"\n  if (this.regexp_eatRegExpIdentifierStart(state)) {\n    state.lastStringValue += codePointToString(state.lastIntValue)\n    while (this.regexp_eatRegExpIdentifierPart(state)) {\n      state.lastStringValue += codePointToString(state.lastIntValue)\n    }\n    return true\n  }\n  return false\n}\n\n// RegExpIdentifierStart[U] ::\n//   UnicodeIDStart\n//   `$`\n//   `_`\n//   `\\` RegExpUnicodeEscapeSequence[?U]\npp.regexp_eatRegExpIdentifierStart = function(state) {\n  const start = state.pos\n  let ch = state.current()\n  state.advance()\n\n  if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state)) {\n    ch = state.lastIntValue\n  }\n  if (isRegExpIdentifierStart(ch)) {\n    state.lastIntValue = ch\n    return true\n  }\n\n  state.pos = start\n  return false\n}\nfunction isRegExpIdentifierStart(ch) {\n  return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart[U] ::\n//   UnicodeIDContinue\n//   `$`\n//   `_`\n//   `\\` RegExpUnicodeEscapeSequence[?U]\n//   <ZWNJ>\n//   <ZWJ>\npp.regexp_eatRegExpIdentifierPart = function(state) {\n  const start = state.pos\n  let ch = state.current()\n  state.advance()\n\n  if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state)) {\n    ch = state.lastIntValue\n  }\n  if (isRegExpIdentifierPart(ch)) {\n    state.lastIntValue = ch\n    return true\n  }\n\n  state.pos = start\n  return false\n}\nfunction isRegExpIdentifierPart(ch) {\n  return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp.regexp_eatAtomEscape = function(state) {\n  if (\n    this.regexp_eatBackReference(state) ||\n    this.regexp_eatCharacterClassEscape(state) ||\n    this.regexp_eatCharacterEscape(state) ||\n    (state.switchN && this.regexp_eatKGroupName(state))\n  ) {\n    return true\n  }\n  if (state.switchU) {\n    // Make the same message as V8.\n    if (state.current() === 0x63 /* c */) {\n      state.raise(\"Invalid unicode escape\")\n    }\n    state.raise(\"Invalid escape\")\n  }\n  return false\n}\npp.regexp_eatBackReference = function(state) {\n  const start = state.pos\n  if (this.regexp_eatDecimalEscape(state)) {\n    const n = state.lastIntValue\n    if (state.switchU) {\n      // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n      if (n > state.maxBackReference) {\n        state.maxBackReference = n\n      }\n      return true\n    }\n    if (n <= state.numCapturingParens) {\n      return true\n    }\n    state.pos = start\n  }\n  return false\n}\npp.regexp_eatKGroupName = function(state) {\n  if (state.eat(0x6B /* k */)) {\n    if (this.regexp_eatGroupName(state)) {\n      state.backReferenceNames.push(state.lastStringValue)\n      return true\n    }\n    state.raise(\"Invalid named reference\")\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp.regexp_eatCharacterEscape = function(state) {\n  return (\n    this.regexp_eatControlEscape(state) ||\n    this.regexp_eatCControlLetter(state) ||\n    this.regexp_eatZero(state) ||\n    this.regexp_eatHexEscapeSequence(state) ||\n    this.regexp_eatRegExpUnicodeEscapeSequence(state) ||\n    (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n    this.regexp_eatIdentityEscape(state)\n  )\n}\npp.regexp_eatCControlLetter = function(state) {\n  const start = state.pos\n  if (state.eat(0x63 /* c */)) {\n    if (this.regexp_eatControlLetter(state)) {\n      return true\n    }\n    state.pos = start\n  }\n  return false\n}\npp.regexp_eatZero = function(state) {\n  if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n    state.lastIntValue = 0\n    state.advance()\n    return true\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp.regexp_eatControlEscape = function(state) {\n  const ch = state.current()\n  if (ch === 0x74 /* t */) {\n    state.lastIntValue = 0x09 /* \\t */\n    state.advance()\n    return true\n  }\n  if (ch === 0x6E /* n */) {\n    state.lastIntValue = 0x0A /* \\n */\n    state.advance()\n    return true\n  }\n  if (ch === 0x76 /* v */) {\n    state.lastIntValue = 0x0B /* \\v */\n    state.advance()\n    return true\n  }\n  if (ch === 0x66 /* f */) {\n    state.lastIntValue = 0x0C /* \\f */\n    state.advance()\n    return true\n  }\n  if (ch === 0x72 /* r */) {\n    state.lastIntValue = 0x0D /* \\r */\n    state.advance()\n    return true\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp.regexp_eatControlLetter = function(state) {\n  const ch = state.current()\n  if (isControlLetter(ch)) {\n    state.lastIntValue = ch % 0x20\n    state.advance()\n    return true\n  }\n  return false\n}\nfunction isControlLetter(ch) {\n  return (\n    (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n    (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp.regexp_eatRegExpUnicodeEscapeSequence = function(state) {\n  const start = state.pos\n\n  if (state.eat(0x75 /* u */)) {\n    if (this.regexp_eatFixedHexDigits(state, 4)) {\n      const lead = state.lastIntValue\n      if (state.switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n        const leadSurrogateEnd = state.pos\n        if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n          const trail = state.lastIntValue\n          if (trail >= 0xDC00 && trail <= 0xDFFF) {\n            state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000\n            return true\n          }\n        }\n        state.pos = leadSurrogateEnd\n        state.lastIntValue = lead\n      }\n      return true\n    }\n    if (\n      state.switchU &&\n      state.eat(0x7B /* { */) &&\n      this.regexp_eatHexDigits(state) &&\n      state.eat(0x7D /* } */) &&\n      isValidUnicode(state.lastIntValue)\n    ) {\n      return true\n    }\n    if (state.switchU) {\n      state.raise(\"Invalid unicode escape\")\n    }\n    state.pos = start\n  }\n\n  return false\n}\nfunction isValidUnicode(ch) {\n  return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp.regexp_eatIdentityEscape = function(state) {\n  if (state.switchU) {\n    if (this.regexp_eatSyntaxCharacter(state)) {\n      return true\n    }\n    if (state.eat(0x2F /* / */)) {\n      state.lastIntValue = 0x2F /* / */\n      return true\n    }\n    return false\n  }\n\n  const ch = state.current()\n  if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n    state.lastIntValue = ch\n    state.advance()\n    return true\n  }\n\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp.regexp_eatDecimalEscape = function(state) {\n  state.lastIntValue = 0\n  let ch = state.current()\n  if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n    do {\n      state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */)\n      state.advance()\n    } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n    return true\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp.regexp_eatCharacterClassEscape = function(state) {\n  const ch = state.current()\n\n  if (isCharacterClassEscape(ch)) {\n    state.lastIntValue = -1\n    state.advance()\n    return true\n  }\n\n  if (\n    state.switchU &&\n    this.options.ecmaVersion >= 9 &&\n    (ch === 0x50 /* P */ || ch === 0x70 /* p */)\n  ) {\n    state.lastIntValue = -1\n    state.advance()\n    if (\n      state.eat(0x7B /* { */) &&\n      this.regexp_eatUnicodePropertyValueExpression(state) &&\n      state.eat(0x7D /* } */)\n    ) {\n      return true\n    }\n    state.raise(\"Invalid property name\")\n  }\n\n  return false\n}\nfunction isCharacterClassEscape(ch) {\n  return (\n    ch === 0x64 /* d */ ||\n    ch === 0x44 /* D */ ||\n    ch === 0x73 /* s */ ||\n    ch === 0x53 /* S */ ||\n    ch === 0x77 /* w */ ||\n    ch === 0x57 /* W */\n  )\n}\n\n// UnicodePropertyValueExpression ::\n//   UnicodePropertyName `=` UnicodePropertyValue\n//   LoneUnicodePropertyNameOrValue\npp.regexp_eatUnicodePropertyValueExpression = function(state) {\n  const start = state.pos\n\n  // UnicodePropertyName `=` UnicodePropertyValue\n  if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n    const name = state.lastStringValue\n    if (this.regexp_eatUnicodePropertyValue(state)) {\n      const value = state.lastStringValue\n      this.regexp_validateUnicodePropertyNameAndValue(state, name, value)\n      return true\n    }\n  }\n  state.pos = start\n\n  // LoneUnicodePropertyNameOrValue\n  if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n    const nameOrValue = state.lastStringValue\n    this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n    return true\n  }\n  return false\n}\npp.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n  if (!has(state.unicodeProperties.nonBinary, name))\n    state.raise(\"Invalid property name\")\n  if (!state.unicodeProperties.nonBinary[name].test(value))\n    state.raise(\"Invalid property value\")\n}\npp.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n  if (!state.unicodeProperties.binary.test(nameOrValue))\n    state.raise(\"Invalid property name\")\n}\n\n// UnicodePropertyName ::\n//   UnicodePropertyNameCharacters\npp.regexp_eatUnicodePropertyName = function(state) {\n  let ch = 0\n  state.lastStringValue = \"\"\n  while (isUnicodePropertyNameCharacter(ch = state.current())) {\n    state.lastStringValue += codePointToString(ch)\n    state.advance()\n  }\n  return state.lastStringValue !== \"\"\n}\nfunction isUnicodePropertyNameCharacter(ch) {\n  return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n//   UnicodePropertyValueCharacters\npp.regexp_eatUnicodePropertyValue = function(state) {\n  let ch = 0\n  state.lastStringValue = \"\"\n  while (isUnicodePropertyValueCharacter(ch = state.current())) {\n    state.lastStringValue += codePointToString(ch)\n    state.advance()\n  }\n  return state.lastStringValue !== \"\"\n}\nfunction isUnicodePropertyValueCharacter(ch) {\n  return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n//   UnicodePropertyValueCharacters\npp.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n  return this.regexp_eatUnicodePropertyValue(state)\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp.regexp_eatCharacterClass = function(state) {\n  if (state.eat(0x5B /* [ */)) {\n    state.eat(0x5E /* ^ */)\n    this.regexp_classRanges(state)\n    if (state.eat(0x5D /* [ */)) {\n      return true\n    }\n    // Unreachable since it threw \"unterminated regular expression\" error before.\n    state.raise(\"Unterminated character class\")\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp.regexp_classRanges = function(state) {\n  while (this.regexp_eatClassAtom(state)) {\n    const left = state.lastIntValue\n    if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n      const right = state.lastIntValue\n      if (state.switchU && (left === -1 || right === -1)) {\n        state.raise(\"Invalid character class\")\n      }\n      if (left !== -1 && right !== -1 && left > right) {\n        state.raise(\"Range out of order in character class\")\n      }\n    }\n  }\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp.regexp_eatClassAtom = function(state) {\n  const start = state.pos\n\n  if (state.eat(0x5C /* \\ */)) {\n    if (this.regexp_eatClassEscape(state)) {\n      return true\n    }\n    if (state.switchU) {\n      // Make the same message as V8.\n      const ch = state.current()\n      if (ch === 0x63 /* c */ || isOctalDigit(ch)) {\n        state.raise(\"Invalid class escape\")\n      }\n      state.raise(\"Invalid escape\")\n    }\n    state.pos = start\n  }\n\n  const ch = state.current()\n  if (ch !== 0x5D /* [ */) {\n    state.lastIntValue = ch\n    state.advance()\n    return true\n  }\n\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp.regexp_eatClassEscape = function(state) {\n  const start = state.pos\n\n  if (state.eat(0x62 /* b */)) {\n    state.lastIntValue = 0x08 /* <BS> */\n    return true\n  }\n\n  if (state.switchU && state.eat(0x2D /* - */)) {\n    state.lastIntValue = 0x2D /* - */\n    return true\n  }\n\n  if (!state.switchU && state.eat(0x63 /* c */)) {\n    if (this.regexp_eatClassControlLetter(state)) {\n      return true\n    }\n    state.pos = start\n  }\n\n  return (\n    this.regexp_eatCharacterClassEscape(state) ||\n    this.regexp_eatCharacterEscape(state)\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp.regexp_eatClassControlLetter = function(state) {\n  const ch = state.current()\n  if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n    state.lastIntValue = ch % 0x20\n    state.advance()\n    return true\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp.regexp_eatHexEscapeSequence = function(state) {\n  const start = state.pos\n  if (state.eat(0x78 /* x */)) {\n    if (this.regexp_eatFixedHexDigits(state, 2)) {\n      return true\n    }\n    if (state.switchU) {\n      state.raise(\"Invalid escape\")\n    }\n    state.pos = start\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp.regexp_eatDecimalDigits = function(state) {\n  const start = state.pos\n  let ch = 0\n  state.lastIntValue = 0\n  while (isDecimalDigit(ch = state.current())) {\n    state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */)\n    state.advance()\n  }\n  return state.pos !== start\n}\nfunction isDecimalDigit(ch) {\n  return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp.regexp_eatHexDigits = function(state) {\n  const start = state.pos\n  let ch = 0\n  state.lastIntValue = 0\n  while (isHexDigit(ch = state.current())) {\n    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch)\n    state.advance()\n  }\n  return state.pos !== start\n}\nfunction isHexDigit(ch) {\n  return (\n    (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n    (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n    (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n  )\n}\nfunction hexToInt(ch) {\n  if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n    return 10 + (ch - 0x41 /* A */)\n  }\n  if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n    return 10 + (ch - 0x61 /* a */)\n  }\n  return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp.regexp_eatLegacyOctalEscapeSequence = function(state) {\n  if (this.regexp_eatOctalDigit(state)) {\n    const n1 = state.lastIntValue\n    if (this.regexp_eatOctalDigit(state)) {\n      const n2 = state.lastIntValue\n      if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n        state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue\n      } else {\n        state.lastIntValue = n1 * 8 + n2\n      }\n    } else {\n      state.lastIntValue = n1\n    }\n    return true\n  }\n  return false\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp.regexp_eatOctalDigit = function(state) {\n  const ch = state.current()\n  if (isOctalDigit(ch)) {\n    state.lastIntValue = ch - 0x30 /* 0 */\n    state.advance()\n    return true\n  }\n  state.lastIntValue = 0\n  return false\n}\nfunction isOctalDigit(ch) {\n  return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp.regexp_eatFixedHexDigits = function(state, length) {\n  const start = state.pos\n  state.lastIntValue = 0\n  for (let i = 0; i < length; ++i) {\n    const ch = state.current()\n    if (!isHexDigit(ch)) {\n      state.pos = start\n      return false\n    }\n    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch)\n    state.advance()\n  }\n  return true\n}\n","import {isIdentifierStart, isIdentifierChar} from \"./identifier\"\nimport {types as tt, keywords as keywordTypes} from \"./tokentype\"\nimport {Parser} from \"./state\"\nimport {SourceLocation} from \"./locutil\"\nimport {RegExpValidationState} from \"./regexp\"\nimport {lineBreak, lineBreakG, isNewLine, nonASCIIwhitespace} from \"./whitespace\"\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nexport class Token {\n  constructor(p) {\n    this.type = p.type\n    this.value = p.value\n    this.start = p.start\n    this.end = p.end\n    if (p.options.locations)\n      this.loc = new SourceLocation(p, p.startLoc, p.endLoc)\n    if (p.options.ranges)\n      this.range = [p.start, p.end]\n  }\n}\n\n// ## Tokenizer\n\nconst pp = Parser.prototype\n\n// Move to the next token\n\npp.next = function() {\n  if (this.options.onToken)\n    this.options.onToken(new Token(this))\n\n  this.lastTokEnd = this.end\n  this.lastTokStart = this.start\n  this.lastTokEndLoc = this.endLoc\n  this.lastTokStartLoc = this.startLoc\n  this.nextToken()\n}\n\npp.getToken = function() {\n  this.next()\n  return new Token(this)\n}\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n  pp[Symbol.iterator] = function() {\n    return {\n      next: () => {\n        let token = this.getToken()\n        return {\n          done: token.type === tt.eof,\n          value: token\n        }\n      }\n    }\n  }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\npp.curContext = function() {\n  return this.context[this.context.length - 1]\n}\n\n// Read a single token, updating the parser object's token-related\n// properties.\n\npp.nextToken = function() {\n  let curContext = this.curContext()\n  if (!curContext || !curContext.preserveSpace) this.skipSpace()\n\n  this.start = this.pos\n  if (this.options.locations) this.startLoc = this.curPosition()\n  if (this.pos >= this.input.length) return this.finishToken(tt.eof)\n\n  if (curContext.override) return curContext.override(this)\n  else this.readToken(this.fullCharCodeAtPos())\n}\n\npp.readToken = function(code) {\n  // Identifier or keyword. '\\uXXXX' sequences are allowed in\n  // identifiers, so '\\' also dispatches to that.\n  if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n    return this.readWord()\n\n  return this.getTokenFromCode(code)\n}\n\npp.fullCharCodeAtPos = function() {\n  let code = this.input.charCodeAt(this.pos)\n  if (code <= 0xd7ff || code >= 0xe000) return code\n  let next = this.input.charCodeAt(this.pos + 1)\n  return (code << 10) + next - 0x35fdc00\n}\n\npp.skipBlockComment = function() {\n  let startLoc = this.options.onComment && this.curPosition()\n  let start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2)\n  if (end === -1) this.raise(this.pos - 2, \"Unterminated comment\")\n  this.pos = end + 2\n  if (this.options.locations) {\n    lineBreakG.lastIndex = start\n    let match\n    while ((match = lineBreakG.exec(this.input)) && match.index < this.pos) {\n      ++this.curLine\n      this.lineStart = match.index + match[0].length\n    }\n  }\n  if (this.options.onComment)\n    this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n                           startLoc, this.curPosition())\n}\n\npp.skipLineComment = function(startSkip) {\n  let start = this.pos\n  let startLoc = this.options.onComment && this.curPosition()\n  let ch = this.input.charCodeAt(this.pos += startSkip)\n  while (this.pos < this.input.length && !isNewLine(ch)) {\n    ch = this.input.charCodeAt(++this.pos)\n  }\n  if (this.options.onComment)\n    this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n                           startLoc, this.curPosition())\n}\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp.skipSpace = function() {\n  loop: while (this.pos < this.input.length) {\n    let ch = this.input.charCodeAt(this.pos)\n    switch (ch) {\n    case 32: case 160: // ' '\n      ++this.pos\n      break\n    case 13:\n      if (this.input.charCodeAt(this.pos + 1) === 10) {\n        ++this.pos\n      }\n    case 10: case 8232: case 8233:\n      ++this.pos\n      if (this.options.locations) {\n        ++this.curLine\n        this.lineStart = this.pos\n      }\n      break\n    case 47: // '/'\n      switch (this.input.charCodeAt(this.pos + 1)) {\n      case 42: // '*'\n        this.skipBlockComment()\n        break\n      case 47:\n        this.skipLineComment(2)\n        break\n      default:\n        break loop\n      }\n      break\n    default:\n      if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n        ++this.pos\n      } else {\n        break loop\n      }\n    }\n  }\n}\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp.finishToken = function(type, val) {\n  this.end = this.pos\n  if (this.options.locations) this.endLoc = this.curPosition()\n  let prevType = this.type\n  this.type = type\n  this.value = val\n\n  this.updateContext(prevType)\n}\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp.readToken_dot = function() {\n  let next = this.input.charCodeAt(this.pos + 1)\n  if (next >= 48 && next <= 57) return this.readNumber(true)\n  let next2 = this.input.charCodeAt(this.pos + 2)\n  if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n    this.pos += 3\n    return this.finishToken(tt.ellipsis)\n  } else {\n    ++this.pos\n    return this.finishToken(tt.dot)\n  }\n}\n\npp.readToken_slash = function() { // '/'\n  let next = this.input.charCodeAt(this.pos + 1)\n  if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n  if (next === 61) return this.finishOp(tt.assign, 2)\n  return this.finishOp(tt.slash, 1)\n}\n\npp.readToken_mult_modulo_exp = function(code) { // '%*'\n  let next = this.input.charCodeAt(this.pos + 1)\n  let size = 1\n  let tokentype = code === 42 ? tt.star : tt.modulo\n\n  // exponentiation operator ** and **=\n  if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n    ++size\n    tokentype = tt.starstar\n    next = this.input.charCodeAt(this.pos + 2)\n  }\n\n  if (next === 61) return this.finishOp(tt.assign, size + 1)\n  return this.finishOp(tokentype, size)\n}\n\npp.readToken_pipe_amp = function(code) { // '|&'\n  let next = this.input.charCodeAt(this.pos + 1)\n  if (next === code) return this.finishOp(code === 124 ? tt.logicalOR : tt.logicalAND, 2)\n  if (next === 61) return this.finishOp(tt.assign, 2)\n  return this.finishOp(code === 124 ? tt.bitwiseOR : tt.bitwiseAND, 1)\n}\n\npp.readToken_caret = function() { // '^'\n  let next = this.input.charCodeAt(this.pos + 1)\n  if (next === 61) return this.finishOp(tt.assign, 2)\n  return this.finishOp(tt.bitwiseXOR, 1)\n}\n\npp.readToken_plus_min = function(code) { // '+-'\n  let next = this.input.charCodeAt(this.pos + 1)\n  if (next === code) {\n    if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n        (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n      // A `-->` line comment\n      this.skipLineComment(3)\n      this.skipSpace()\n      return this.nextToken()\n    }\n    return this.finishOp(tt.incDec, 2)\n  }\n  if (next === 61) return this.finishOp(tt.assign, 2)\n  return this.finishOp(tt.plusMin, 1)\n}\n\npp.readToken_lt_gt = function(code) { // '<>'\n  let next = this.input.charCodeAt(this.pos + 1)\n  let size = 1\n  if (next === code) {\n    size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2\n    if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(tt.assign, size + 1)\n    return this.finishOp(tt.bitShift, size)\n  }\n  if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n      this.input.charCodeAt(this.pos + 3) === 45) {\n    // `<!--`, an XML-style comment that should be interpreted as a line comment\n    this.skipLineComment(4)\n    this.skipSpace()\n    return this.nextToken()\n  }\n  if (next === 61) size = 2\n  return this.finishOp(tt.relational, size)\n}\n\npp.readToken_eq_excl = function(code) { // '=!'\n  let next = this.input.charCodeAt(this.pos + 1)\n  if (next === 61) return this.finishOp(tt.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2)\n  if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'\n    this.pos += 2\n    return this.finishToken(tt.arrow)\n  }\n  return this.finishOp(code === 61 ? tt.eq : tt.prefix, 1)\n}\n\npp.getTokenFromCode = function(code) {\n  switch (code) {\n  // The interpretation of a dot depends on whether it is followed\n  // by a digit or another two dots.\n  case 46: // '.'\n    return this.readToken_dot()\n\n  // Punctuation tokens.\n  case 40: ++this.pos; return this.finishToken(tt.parenL)\n  case 41: ++this.pos; return this.finishToken(tt.parenR)\n  case 59: ++this.pos; return this.finishToken(tt.semi)\n  case 44: ++this.pos; return this.finishToken(tt.comma)\n  case 91: ++this.pos; return this.finishToken(tt.bracketL)\n  case 93: ++this.pos; return this.finishToken(tt.bracketR)\n  case 123: ++this.pos; return this.finishToken(tt.braceL)\n  case 125: ++this.pos; return this.finishToken(tt.braceR)\n  case 58: ++this.pos; return this.finishToken(tt.colon)\n  case 63: ++this.pos; return this.finishToken(tt.question)\n\n  case 96: // '`'\n    if (this.options.ecmaVersion < 6) break\n    ++this.pos\n    return this.finishToken(tt.backQuote)\n\n  case 48: // '0'\n    let next = this.input.charCodeAt(this.pos + 1)\n    if (next === 120 || next === 88) return this.readRadixNumber(16) // '0x', '0X' - hex number\n    if (this.options.ecmaVersion >= 6) {\n      if (next === 111 || next === 79) return this.readRadixNumber(8) // '0o', '0O' - octal number\n      if (next === 98 || next === 66) return this.readRadixNumber(2) // '0b', '0B' - binary number\n    }\n\n  // Anything else beginning with a digit is an integer, octal\n  // number, or float.\n  case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9\n    return this.readNumber(false)\n\n  // Quotes produce strings.\n  case 34: case 39: // '\"', \"'\"\n    return this.readString(code)\n\n  // Operators are parsed inline in tiny state machines. '=' (61) is\n  // often referred to. `finishOp` simply skips the amount of\n  // characters it is given as second argument, and returns a token\n  // of the type given by its first argument.\n\n  case 47: // '/'\n    return this.readToken_slash()\n\n  case 37: case 42: // '%*'\n    return this.readToken_mult_modulo_exp(code)\n\n  case 124: case 38: // '|&'\n    return this.readToken_pipe_amp(code)\n\n  case 94: // '^'\n    return this.readToken_caret()\n\n  case 43: case 45: // '+-'\n    return this.readToken_plus_min(code)\n\n  case 60: case 62: // '<>'\n    return this.readToken_lt_gt(code)\n\n  case 61: case 33: // '=!'\n    return this.readToken_eq_excl(code)\n\n  case 126: // '~'\n    return this.finishOp(tt.prefix, 1)\n  }\n\n  this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\")\n}\n\npp.finishOp = function(type, size) {\n  let str = this.input.slice(this.pos, this.pos + size)\n  this.pos += size\n  return this.finishToken(type, str)\n}\n\npp.readRegexp = function() {\n  let escaped, inClass, start = this.pos\n  for (;;) {\n    if (this.pos >= this.input.length) this.raise(start, \"Unterminated regular expression\")\n    let ch = this.input.charAt(this.pos)\n    if (lineBreak.test(ch)) this.raise(start, \"Unterminated regular expression\")\n    if (!escaped) {\n      if (ch === \"[\") inClass = true\n      else if (ch === \"]\" && inClass) inClass = false\n      else if (ch === \"/\" && !inClass) break\n      escaped = ch === \"\\\\\"\n    } else escaped = false\n    ++this.pos\n  }\n  let pattern = this.input.slice(start, this.pos)\n  ++this.pos\n  let flagsStart = this.pos\n  let flags = this.readWord1()\n  if (this.containsEsc) this.unexpected(flagsStart)\n\n  // Validate pattern\n  const state = this.regexpState || (this.regexpState = new RegExpValidationState(this))\n  state.reset(start, pattern, flags)\n  this.validateRegExpFlags(state)\n  this.validateRegExpPattern(state)\n\n  // Create Literal#value property value.\n  let value = null\n  try {\n    value = new RegExp(pattern, flags)\n  } catch (e) {\n    // ESTree requires null if it failed to instantiate RegExp object.\n    // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n  }\n\n  return this.finishToken(tt.regexp, {pattern, flags, value})\n}\n\n// Read an integer in the given radix. Return null if zero digits\n// were read, the integer value otherwise. When `len` is given, this\n// will return `null` unless the integer has exactly `len` digits.\n\npp.readInt = function(radix, len) {\n  let start = this.pos, total = 0\n  for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n    let code = this.input.charCodeAt(this.pos), val\n    if (code >= 97) val = code - 97 + 10 // a\n    else if (code >= 65) val = code - 65 + 10 // A\n    else if (code >= 48 && code <= 57) val = code - 48 // 0-9\n    else val = Infinity\n    if (val >= radix) break\n    ++this.pos\n    total = total * radix + val\n  }\n  if (this.pos === start || len != null && this.pos - start !== len) return null\n\n  return total\n}\n\npp.readRadixNumber = function(radix) {\n  this.pos += 2 // 0x\n  let val = this.readInt(radix)\n  if (val == null) this.raise(this.start + 2, \"Expected number in radix \" + radix)\n  if (isIdentifierStart(this.fullCharCodeAtPos())) this.raise(this.pos, \"Identifier directly after number\")\n  return this.finishToken(tt.num, val)\n}\n\n// Read an integer, octal integer, or floating-point number.\n\npp.readNumber = function(startsWithDot) {\n  let start = this.pos\n  if (!startsWithDot && this.readInt(10) === null) this.raise(start, \"Invalid number\")\n  let octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48\n  if (octal && this.strict) this.raise(start, \"Invalid number\")\n  if (octal && /[89]/.test(this.input.slice(start, this.pos))) octal = false\n  let next = this.input.charCodeAt(this.pos)\n  if (next === 46 && !octal) { // '.'\n    ++this.pos\n    this.readInt(10)\n    next = this.input.charCodeAt(this.pos)\n  }\n  if ((next === 69 || next === 101) && !octal) { // 'eE'\n    next = this.input.charCodeAt(++this.pos)\n    if (next === 43 || next === 45) ++this.pos // '+-'\n    if (this.readInt(10) === null) this.raise(start, \"Invalid number\")\n  }\n  if (isIdentifierStart(this.fullCharCodeAtPos())) this.raise(this.pos, \"Identifier directly after number\")\n\n  let str = this.input.slice(start, this.pos)\n  let val = octal ? parseInt(str, 8) : parseFloat(str)\n  return this.finishToken(tt.num, val)\n}\n\n// Read a string value, interpreting backslash-escapes.\n\npp.readCodePoint = function() {\n  let ch = this.input.charCodeAt(this.pos), code\n\n  if (ch === 123) { // '{'\n    if (this.options.ecmaVersion < 6) this.unexpected()\n    let codePos = ++this.pos\n    code = this.readHexChar(this.input.indexOf(\"}\", this.pos) - this.pos)\n    ++this.pos\n    if (code > 0x10FFFF) this.invalidStringToken(codePos, \"Code point out of bounds\")\n  } else {\n    code = this.readHexChar(4)\n  }\n  return code\n}\n\nfunction codePointToString(code) {\n  // UTF-16 Decoding\n  if (code <= 0xFFFF) return String.fromCharCode(code)\n  code -= 0x10000\n  return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\npp.readString = function(quote) {\n  let out = \"\", chunkStart = ++this.pos\n  for (;;) {\n    if (this.pos >= this.input.length) this.raise(this.start, \"Unterminated string constant\")\n    let ch = this.input.charCodeAt(this.pos)\n    if (ch === quote) break\n    if (ch === 92) { // '\\'\n      out += this.input.slice(chunkStart, this.pos)\n      out += this.readEscapedChar(false)\n      chunkStart = this.pos\n    } else {\n      if (isNewLine(ch, this.options.ecmaVersion >= 10)) this.raise(this.start, \"Unterminated string constant\")\n      ++this.pos\n    }\n  }\n  out += this.input.slice(chunkStart, this.pos++)\n  return this.finishToken(tt.string, out)\n}\n\n// Reads template string tokens.\n\nconst INVALID_TEMPLATE_ESCAPE_ERROR = {}\n\npp.tryReadTemplateToken = function() {\n  this.inTemplateElement = true\n  try {\n    this.readTmplToken()\n  } catch (err) {\n    if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n      this.readInvalidTemplateToken()\n    } else {\n      throw err\n    }\n  }\n\n  this.inTemplateElement = false\n}\n\npp.invalidStringToken = function(position, message) {\n  if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n    throw INVALID_TEMPLATE_ESCAPE_ERROR\n  } else {\n    this.raise(position, message)\n  }\n}\n\npp.readTmplToken = function() {\n  let out = \"\", chunkStart = this.pos\n  for (;;) {\n    if (this.pos >= this.input.length) this.raise(this.start, \"Unterminated template\")\n    let ch = this.input.charCodeAt(this.pos)\n    if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'\n      if (this.pos === this.start && (this.type === tt.template || this.type === tt.invalidTemplate)) {\n        if (ch === 36) {\n          this.pos += 2\n          return this.finishToken(tt.dollarBraceL)\n        } else {\n          ++this.pos\n          return this.finishToken(tt.backQuote)\n        }\n      }\n      out += this.input.slice(chunkStart, this.pos)\n      return this.finishToken(tt.template, out)\n    }\n    if (ch === 92) { // '\\'\n      out += this.input.slice(chunkStart, this.pos)\n      out += this.readEscapedChar(true)\n      chunkStart = this.pos\n    } else if (isNewLine(ch)) {\n      out += this.input.slice(chunkStart, this.pos)\n      ++this.pos\n      switch (ch) {\n      case 13:\n        if (this.input.charCodeAt(this.pos) === 10) ++this.pos\n      case 10:\n        out += \"\\n\"\n        break\n      default:\n        out += String.fromCharCode(ch)\n        break\n      }\n      if (this.options.locations) {\n        ++this.curLine\n        this.lineStart = this.pos\n      }\n      chunkStart = this.pos\n    } else {\n      ++this.pos\n    }\n  }\n}\n\n// Reads a template token to search for the end, without validating any escape sequences\npp.readInvalidTemplateToken = function() {\n  for (; this.pos < this.input.length; this.pos++) {\n    switch (this.input[this.pos]) {\n    case \"\\\\\":\n      ++this.pos\n      break\n\n    case \"$\":\n      if (this.input[this.pos + 1] !== \"{\") {\n        break\n      }\n    // falls through\n\n    case \"`\":\n      return this.finishToken(tt.invalidTemplate, this.input.slice(this.start, this.pos))\n\n    // no default\n    }\n  }\n  this.raise(this.start, \"Unterminated template\")\n}\n\n// Used to read escaped characters\n\npp.readEscapedChar = function(inTemplate) {\n  let ch = this.input.charCodeAt(++this.pos)\n  ++this.pos\n  switch (ch) {\n  case 110: return \"\\n\" // 'n' -> '\\n'\n  case 114: return \"\\r\" // 'r' -> '\\r'\n  case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'\n  case 117: return codePointToString(this.readCodePoint()) // 'u'\n  case 116: return \"\\t\" // 't' -> '\\t'\n  case 98: return \"\\b\" // 'b' -> '\\b'\n  case 118: return \"\\u000b\" // 'v' -> '\\u000b'\n  case 102: return \"\\f\" // 'f' -> '\\f'\n  case 13: if (this.input.charCodeAt(this.pos) === 10) ++this.pos // '\\r\\n'\n  case 10: // ' \\n'\n    if (this.options.locations) { this.lineStart = this.pos; ++this.curLine }\n    return \"\"\n  default:\n    if (ch >= 48 && ch <= 55) {\n      let octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0]\n      let octal = parseInt(octalStr, 8)\n      if (octal > 255) {\n        octalStr = octalStr.slice(0, -1)\n        octal = parseInt(octalStr, 8)\n      }\n      this.pos += octalStr.length - 1\n      ch = this.input.charCodeAt(this.pos)\n      if ((octalStr !== \"0\" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n        this.invalidStringToken(\n          this.pos - 1 - octalStr.length,\n          inTemplate\n            ? \"Octal literal in template string\"\n            : \"Octal literal in strict mode\"\n        )\n      }\n      return String.fromCharCode(octal)\n    }\n    if (isNewLine(ch)) {\n      // Unicode new line characters after \\ get removed from output in both\n      // template literals and strings\n      return \"\"\n    }\n    return String.fromCharCode(ch)\n  }\n}\n\n// Used to read character escape sequences ('\\x', '\\u', '\\U').\n\npp.readHexChar = function(len) {\n  let codePos = this.pos\n  let n = this.readInt(16, len)\n  if (n === null) this.invalidStringToken(codePos, \"Bad character escape sequence\")\n  return n\n}\n\n// Read an identifier, and return it as a string. Sets `this.containsEsc`\n// to whether the word contained a '\\u' escape.\n//\n// Incrementally adds only escaped chars, adding other chunks as-is\n// as a micro-optimization.\n\npp.readWord1 = function() {\n  this.containsEsc = false\n  let word = \"\", first = true, chunkStart = this.pos\n  let astral = this.options.ecmaVersion >= 6\n  while (this.pos < this.input.length) {\n    let ch = this.fullCharCodeAtPos()\n    if (isIdentifierChar(ch, astral)) {\n      this.pos += ch <= 0xffff ? 1 : 2\n    } else if (ch === 92) { // \"\\\"\n      this.containsEsc = true\n      word += this.input.slice(chunkStart, this.pos)\n      let escStart = this.pos\n      if (this.input.charCodeAt(++this.pos) !== 117) // \"u\"\n        this.invalidStringToken(this.pos, \"Expecting Unicode escape sequence \\\\uXXXX\")\n      ++this.pos\n      let esc = this.readCodePoint()\n      if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))\n        this.invalidStringToken(escStart, \"Invalid Unicode escape\")\n      word += codePointToString(esc)\n      chunkStart = this.pos\n    } else {\n      break\n    }\n    first = false\n  }\n  return word + this.input.slice(chunkStart, this.pos)\n}\n\n// Read an identifier or keyword token. Will check for reserved\n// words when necessary.\n\npp.readWord = function() {\n  let word = this.readWord1()\n  let type = tt.name\n  if (this.keywords.test(word)) {\n    if (this.containsEsc) this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + word)\n    type = keywordTypes[word]\n  }\n  return this.finishToken(type, word)\n}\n","// Acorn is a tiny, fast JavaScript parser written in JavaScript.\n//\n// Acorn was written by Marijn Haverbeke, Ingvar Stepanyan, and\n// various contributors and released under an MIT license.\n//\n// Git repositories for Acorn are available at\n//\n//     http://marijnhaverbeke.nl/git/acorn\n//     https://github.com/acornjs/acorn.git\n//\n// Please use the [github bug tracker][ghbt] to report issues.\n//\n// [ghbt]: https://github.com/acornjs/acorn/issues\n//\n// [walk]: util/walk.js\n\nimport {Parser} from \"./state\"\nimport \"./parseutil\"\nimport \"./statement\"\nimport \"./lval\"\nimport \"./expression\"\nimport \"./location\"\nimport \"./scope\"\n\nexport {Parser} from \"./state\"\nexport {defaultOptions} from \"./options\"\nexport {Position, SourceLocation, getLineInfo} from \"./locutil\"\nexport {Node} from \"./node\"\nexport {TokenType, types as tokTypes, keywords as keywordTypes} from \"./tokentype\"\nexport {TokContext, types as tokContexts} from \"./tokencontext\"\nexport {isIdentifierChar, isIdentifierStart} from \"./identifier\"\nexport {Token} from \"./tokenize\"\nexport {isNewLine, lineBreak, lineBreakG, nonASCIIwhitespace} from \"./whitespace\"\n\nexport const version = \"6.1.1\"\n\n// The main exported interface (under `self.acorn` when in the\n// browser) is a `parse` function that takes a code string and\n// returns an abstract syntax tree as specified by [Mozilla parser\n// API][api].\n//\n// [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API\n\nexport function parse(input, options) {\n  return Parser.parse(input, options)\n}\n\n// This function tries to parse a single expression at a given\n// offset in a string. Useful for parsing mixed-language formats\n// that embed JavaScript expressions.\n\nexport function parseExpressionAt(input, pos, options) {\n  return Parser.parseExpressionAt(input, pos, options)\n}\n\n// Acorn is organized as a tokenizer and a recursive-descent parser.\n// The `tokenizer` export provides an interface to the tokenizer.\n\nexport function tokenizer(input, options) {\n  return Parser.tokenizer(input, options)\n}\n"],"names":["const","let","keywords","tt","this","pp","init","label","node","empty","scope","types","UNICODE_PROPERTY_VALUES","codePointToString","ch","keywordTypes"],"mappings":"AAAA;;AAEA,AAAOA,IAAM,aAAa,GAAG;EAC3B,CAAC,EAAE,qNAAqN;EACxN,CAAC,EAAE,8CAA8C;EACjD,CAAC,EAAE,MAAM;EACT,MAAM,EAAE,wEAAwE;EAChF,UAAU,EAAE,gBAAgB;EAC7B;;;;AAIDA,IAAM,oBAAoB,GAAG,8KAA6K;;AAE1M,AAAOA,IAAM,QAAQ,GAAG;EACtB,CAAC,EAAE,oBAAoB;EACvB,CAAC,EAAE,oBAAoB,GAAG,0CAA0C;EACrE;;AAED,AAAOA,IAAM,yBAAyB,GAAG,kBAAiB;;;;;;;;;;AAU1DC,IAAI,4BAA4B,GAAG,4tIAA2tI;AAC9vIA,IAAI,uBAAuB,GAAG,sjFAAqjF;;AAEnlFD,IAAM,uBAAuB,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,4BAA4B,GAAG,GAAG,EAAC;AACpFA,IAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,GAAG,EAAC;;AAEzG,4BAA4B,GAAG,uBAAuB,GAAG,KAAI;;;;;;;;;AAS7DA,IAAM,0BAA0B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAC;;;AAGvqCA,IAAM,qBAAqB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CA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"}
\ No newline at end of file
diff --git a/templetes/node_modules/ajv-keywords/keywords/_util.js b/templetes/node_modules/ajv-keywords/keywords/_util.js
deleted file mode 100644
index dd52df72..00000000
--- a/templetes/node_modules/ajv-keywords/keywords/_util.js
+++ /dev/null
@@ -1,15 +0,0 @@
-'use strict';
-
-module.exports = {
-  metaSchemaRef: metaSchemaRef
-};
-
-var META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema';
-
-function metaSchemaRef(ajv) {
-  var defaultMeta = ajv._opts.defaultMeta;
-  if (typeof defaultMeta == 'string') return { $ref: defaultMeta };
-  if (ajv.getSchema(META_SCHEMA_ID)) return { $ref: META_SCHEMA_ID };
-  console.warn('meta schema not defined');
-  return {};
-}
diff --git a/templetes/node_modules/ajv-keywords/keywords/allRequired.js b/templetes/node_modules/ajv-keywords/keywords/allRequired.js
deleted file mode 100644
index afc73ebf..00000000
--- a/templetes/node_modules/ajv-keywords/keywords/allRequired.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-
-module.exports = function defFunc(ajv) {
-  defFunc.definition = {
-    type: 'object',
-    macro: function (schema, parentSchema) {
-      if (!schema) return true;
-      var properties = Object.keys(parentSchema.properties);
-      if (properties.length == 0) return true;
-      return {required: properties};
-    },
-    metaSchema: {type: 'boolean'},
-    dependencies: ['properties']
-  };
-
-  ajv.addKeyword('allRequired', defFunc.definition);
-  return ajv;
-};
diff --git a/templetes/node_modules/ajv/dist/ajv.bundle.js b/templetes/node_modules/ajv/dist/ajv.bundle.js
deleted file mode 100644
index dd956301..00000000
--- a/templetes/node_modules/ajv/dist/ajv.bundle.js
+++ /dev/null
@@ -1,7165 +0,0 @@
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Ajv = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
-'use strict';
-
-
-var Cache = module.exports = function Cache() {
-  this._cache = {};
-};
-
-
-Cache.prototype.put = function Cache_put(key, value) {
-  this._cache[key] = value;
-};
-
-
-Cache.prototype.get = function Cache_get(key) {
-  return this._cache[key];
-};
-
-
-Cache.prototype.del = function Cache_del(key) {
-  delete this._cache[key];
-};
-
-
-Cache.prototype.clear = function Cache_clear() {
-  this._cache = {};
-};
-
-},{}],2:[function(require,module,exports){
-'use strict';
-
-var MissingRefError = require('./error_classes').MissingRef;
-
-module.exports = compileAsync;
-
-
-/**
- * Creates validating function for passed schema with asynchronous loading of missing schemas.
- * `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.
- * @this  Ajv
- * @param {Object}   schema schema object
- * @param {Boolean}  meta optional true to compile meta-schema; this parameter can be skipped
- * @param {Function} callback an optional node-style callback, it is called with 2 parameters: error (or null) and validating function.
- * @return {Promise} promise that resolves with a validating function.
- */
-function compileAsync(schema, meta, callback) {
-  /* eslint no-shadow: 0 */
-  /* global Promise */
-  /* jshint validthis: true */
-  var self = this;
-  if (typeof this._opts.loadSchema != 'function')
-    throw new Error('options.loadSchema should be a function');
-
-  if (typeof meta == 'function') {
-    callback = meta;
-    meta = undefined;
-  }
-
-  var p = loadMetaSchemaOf(schema).then(function () {
-    var schemaObj = self._addSchema(schema, undefined, meta);
-    return schemaObj.validate || _compileAsync(schemaObj);
-  });
-
-  if (callback) {
-    p.then(
-      function(v) { callback(null, v); },
-      callback
-    );
-  }
-
-  return p;
-
-
-  function loadMetaSchemaOf(sch) {
-    var $schema = sch.$schema;
-    return $schema && !self.getSchema($schema)
-            ? compileAsync.call(self, { $ref: $schema }, true)
-            : Promise.resolve();
-  }
-
-
-  function _compileAsync(schemaObj) {
-    try { return self._compile(schemaObj); }
-    catch(e) {
-      if (e instanceof MissingRefError) return loadMissingSchema(e);
-      throw e;
-    }
-
-
-    function loadMissingSchema(e) {
-      var ref = e.missingSchema;
-      if (added(ref)) throw new Error('Schema ' + ref + ' is loaded but ' + e.missingRef + ' cannot be resolved');
-
-      var schemaPromise = self._loadingSchemas[ref];
-      if (!schemaPromise) {
-        schemaPromise = self._loadingSchemas[ref] = self._opts.loadSchema(ref);
-        schemaPromise.then(removePromise, removePromise);
-      }
-
-      return schemaPromise.then(function (sch) {
-        if (!added(ref)) {
-          return loadMetaSchemaOf(sch).then(function () {
-            if (!added(ref)) self.addSchema(sch, ref, undefined, meta);
-          });
-        }
-      }).then(function() {
-        return _compileAsync(schemaObj);
-      });
-
-      function removePromise() {
-        delete self._loadingSchemas[ref];
-      }
-
-      function added(ref) {
-        return self._refs[ref] || self._schemas[ref];
-      }
-    }
-  }
-}
-
-},{"./error_classes":3}],3:[function(require,module,exports){
-'use strict';
-
-var resolve = require('./resolve');
-
-module.exports = {
-  Validation: errorSubclass(ValidationError),
-  MissingRef: errorSubclass(MissingRefError)
-};
-
-
-function ValidationError(errors) {
-  this.message = 'validation failed';
-  this.errors = errors;
-  this.ajv = this.validation = true;
-}
-
-
-MissingRefError.message = function (baseId, ref) {
-  return 'can\'t resolve reference ' + ref + ' from id ' + baseId;
-};
-
-
-function MissingRefError(baseId, ref, message) {
-  this.message = message || MissingRefError.message(baseId, ref);
-  this.missingRef = resolve.url(baseId, ref);
-  this.missingSchema = resolve.normalizeId(resolve.fullPath(this.missingRef));
-}
-
-
-function errorSubclass(Subclass) {
-  Subclass.prototype = Object.create(Error.prototype);
-  Subclass.prototype.constructor = Subclass;
-  return Subclass;
-}
-
-},{"./resolve":6}],4:[function(require,module,exports){
-'use strict';
-
-var util = require('./util');
-
-var DATE = /^(\d\d\d\d)-(\d\d)-(\d\d)$/;
-var DAYS = [0,31,28,31,30,31,30,31,31,30,31,30,31];
-var TIME = /^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i;
-var HOSTNAME = /^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i;
-var URI = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
-var URIREF = /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
-// uri-template: https://tools.ietf.org/html/rfc6570
-var URITEMPLATE = /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i;
-// For the source: https://gist.github.com/dperini/729294
-// For test cases: https://mathiasbynens.be/demo/url-regex
-// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983.
-// var URL = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)(?:\.(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu;
-var URL = /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i;
-var UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;
-var JSON_POINTER = /^(?:\/(?:[^~/]|~0|~1)*)*$/;
-var JSON_POINTER_URI_FRAGMENT = /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;
-var RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;
-
-
-module.exports = formats;
-
-function formats(mode) {
-  mode = mode == 'full' ? 'full' : 'fast';
-  return util.copy(formats[mode]);
-}
-
-
-formats.fast = {
-  // date: http://tools.ietf.org/html/rfc3339#section-5.6
-  date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/,
-  // date-time: http://tools.ietf.org/html/rfc3339#section-5.6
-  time: /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,
-  'date-time': /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,
-  // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js
-  uri: /^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i,
-  'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,
-  'uri-template': URITEMPLATE,
-  url: URL,
-  // email (sources from jsen validator):
-  // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363
-  // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')
-  email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,
-  hostname: HOSTNAME,
-  // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html
-  ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,
-  // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses
-  ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,
-  regex: regex,
-  // uuid: http://tools.ietf.org/html/rfc4122
-  uuid: UUID,
-  // JSON-pointer: https://tools.ietf.org/html/rfc6901
-  // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A
-  'json-pointer': JSON_POINTER,
-  'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,
-  // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00
-  'relative-json-pointer': RELATIVE_JSON_POINTER
-};
-
-
-formats.full = {
-  date: date,
-  time: time,
-  'date-time': date_time,
-  uri: uri,
-  'uri-reference': URIREF,
-  'uri-template': URITEMPLATE,
-  url: URL,
-  email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,
-  hostname: HOSTNAME,
-  ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,
-  ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,
-  regex: regex,
-  uuid: UUID,
-  'json-pointer': JSON_POINTER,
-  'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,
-  'relative-json-pointer': RELATIVE_JSON_POINTER
-};
-
-
-function isLeapYear(year) {
-  // https://tools.ietf.org/html/rfc3339#appendix-C
-  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
-}
-
-
-function date(str) {
-  // full-date from http://tools.ietf.org/html/rfc3339#section-5.6
-  var matches = str.match(DATE);
-  if (!matches) return false;
-
-  var year = +matches[1];
-  var month = +matches[2];
-  var day = +matches[3];
-
-  return month >= 1 && month <= 12 && day >= 1 &&
-          day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]);
-}
-
-
-function time(str, full) {
-  var matches = str.match(TIME);
-  if (!matches) return false;
-
-  var hour = matches[1];
-  var minute = matches[2];
-  var second = matches[3];
-  var timeZone = matches[5];
-  return ((hour <= 23 && minute <= 59 && second <= 59) ||
-          (hour == 23 && minute == 59 && second == 60)) &&
-         (!full || timeZone);
-}
-
-
-var DATE_TIME_SEPARATOR = /t|\s/i;
-function date_time(str) {
-  // http://tools.ietf.org/html/rfc3339#section-5.6
-  var dateTime = str.split(DATE_TIME_SEPARATOR);
-  return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true);
-}
-
-
-var NOT_URI_FRAGMENT = /\/|:/;
-function uri(str) {
-  // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "."
-  return NOT_URI_FRAGMENT.test(str) && URI.test(str);
-}
-
-
-var Z_ANCHOR = /[^\\]\\Z/;
-function regex(str) {
-  if (Z_ANCHOR.test(str)) return false;
-  try {
-    new RegExp(str);
-    return true;
-  } catch(e) {
-    return false;
-  }
-}
-
-},{"./util":10}],5:[function(require,module,exports){
-'use strict';
-
-var resolve = require('./resolve')
-  , util = require('./util')
-  , errorClasses = require('./error_classes')
-  , stableStringify = require('fast-json-stable-stringify');
-
-var validateGenerator = require('../dotjs/validate');
-
-/**
- * Functions below are used inside compiled validations function
- */
-
-var ucs2length = util.ucs2length;
-var equal = require('fast-deep-equal');
-
-// this error is thrown by async schemas to return validation errors via exception
-var ValidationError = errorClasses.Validation;
-
-module.exports = compile;
-
-
-/**
- * Compiles schema to validation function
- * @this   Ajv
- * @param  {Object} schema schema object
- * @param  {Object} root object with information about the root schema for this schema
- * @param  {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution
- * @param  {String} baseId base ID for IDs in the schema
- * @return {Function} validation function
- */
-function compile(schema, root, localRefs, baseId) {
-  /* jshint validthis: true, evil: true */
-  /* eslint no-shadow: 0 */
-  var self = this
-    , opts = this._opts
-    , refVal = [ undefined ]
-    , refs = {}
-    , patterns = []
-    , patternsHash = {}
-    , defaults = []
-    , defaultsHash = {}
-    , customRules = [];
-
-  root = root || { schema: schema, refVal: refVal, refs: refs };
-
-  var c = checkCompiling.call(this, schema, root, baseId);
-  var compilation = this._compilations[c.index];
-  if (c.compiling) return (compilation.callValidate = callValidate);
-
-  var formats = this._formats;
-  var RULES = this.RULES;
-
-  try {
-    var v = localCompile(schema, root, localRefs, baseId);
-    compilation.validate = v;
-    var cv = compilation.callValidate;
-    if (cv) {
-      cv.schema = v.schema;
-      cv.errors = null;
-      cv.refs = v.refs;
-      cv.refVal = v.refVal;
-      cv.root = v.root;
-      cv.$async = v.$async;
-      if (opts.sourceCode) cv.source = v.source;
-    }
-    return v;
-  } finally {
-    endCompiling.call(this, schema, root, baseId);
-  }
-
-  /* @this   {*} - custom context, see passContext option */
-  function callValidate() {
-    /* jshint validthis: true */
-    var validate = compilation.validate;
-    var result = validate.apply(this, arguments);
-    callValidate.errors = validate.errors;
-    return result;
-  }
-
-  function localCompile(_schema, _root, localRefs, baseId) {
-    var isRoot = !_root || (_root && _root.schema == _schema);
-    if (_root.schema != root.schema)
-      return compile.call(self, _schema, _root, localRefs, baseId);
-
-    var $async = _schema.$async === true;
-
-    var sourceCode = validateGenerator({
-      isTop: true,
-      schema: _schema,
-      isRoot: isRoot,
-      baseId: baseId,
-      root: _root,
-      schemaPath: '',
-      errSchemaPath: '#',
-      errorPath: '""',
-      MissingRefError: errorClasses.MissingRef,
-      RULES: RULES,
-      validate: validateGenerator,
-      util: util,
-      resolve: resolve,
-      resolveRef: resolveRef,
-      usePattern: usePattern,
-      useDefault: useDefault,
-      useCustomRule: useCustomRule,
-      opts: opts,
-      formats: formats,
-      logger: self.logger,
-      self: self
-    });
-
-    sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode)
-                   + vars(defaults, defaultCode) + vars(customRules, customRuleCode)
-                   + sourceCode;
-
-    if (opts.processCode) sourceCode = opts.processCode(sourceCode);
-    // console.log('\n\n\n *** \n', JSON.stringify(sourceCode));
-    var validate;
-    try {
-      var makeValidate = new Function(
-        'self',
-        'RULES',
-        'formats',
-        'root',
-        'refVal',
-        'defaults',
-        'customRules',
-        'equal',
-        'ucs2length',
-        'ValidationError',
-        sourceCode
-      );
-
-      validate = makeValidate(
-        self,
-        RULES,
-        formats,
-        root,
-        refVal,
-        defaults,
-        customRules,
-        equal,
-        ucs2length,
-        ValidationError
-      );
-
-      refVal[0] = validate;
-    } catch(e) {
-      self.logger.error('Error compiling schema, function code:', sourceCode);
-      throw e;
-    }
-
-    validate.schema = _schema;
-    validate.errors = null;
-    validate.refs = refs;
-    validate.refVal = refVal;
-    validate.root = isRoot ? validate : _root;
-    if ($async) validate.$async = true;
-    if (opts.sourceCode === true) {
-      validate.source = {
-        code: sourceCode,
-        patterns: patterns,
-        defaults: defaults
-      };
-    }
-
-    return validate;
-  }
-
-  function resolveRef(baseId, ref, isRoot) {
-    ref = resolve.url(baseId, ref);
-    var refIndex = refs[ref];
-    var _refVal, refCode;
-    if (refIndex !== undefined) {
-      _refVal = refVal[refIndex];
-      refCode = 'refVal[' + refIndex + ']';
-      return resolvedRef(_refVal, refCode);
-    }
-    if (!isRoot && root.refs) {
-      var rootRefId = root.refs[ref];
-      if (rootRefId !== undefined) {
-        _refVal = root.refVal[rootRefId];
-        refCode = addLocalRef(ref, _refVal);
-        return resolvedRef(_refVal, refCode);
-      }
-    }
-
-    refCode = addLocalRef(ref);
-    var v = resolve.call(self, localCompile, root, ref);
-    if (v === undefined) {
-      var localSchema = localRefs && localRefs[ref];
-      if (localSchema) {
-        v = resolve.inlineRef(localSchema, opts.inlineRefs)
-            ? localSchema
-            : compile.call(self, localSchema, root, localRefs, baseId);
-      }
-    }
-
-    if (v === undefined) {
-      removeLocalRef(ref);
-    } else {
-      replaceLocalRef(ref, v);
-      return resolvedRef(v, refCode);
-    }
-  }
-
-  function addLocalRef(ref, v) {
-    var refId = refVal.length;
-    refVal[refId] = v;
-    refs[ref] = refId;
-    return 'refVal' + refId;
-  }
-
-  function removeLocalRef(ref) {
-    delete refs[ref];
-  }
-
-  function replaceLocalRef(ref, v) {
-    var refId = refs[ref];
-    refVal[refId] = v;
-  }
-
-  function resolvedRef(refVal, code) {
-    return typeof refVal == 'object' || typeof refVal == 'boolean'
-            ? { code: code, schema: refVal, inline: true }
-            : { code: code, $async: refVal && !!refVal.$async };
-  }
-
-  function usePattern(regexStr) {
-    var index = patternsHash[regexStr];
-    if (index === undefined) {
-      index = patternsHash[regexStr] = patterns.length;
-      patterns[index] = regexStr;
-    }
-    return 'pattern' + index;
-  }
-
-  function useDefault(value) {
-    switch (typeof value) {
-      case 'boolean':
-      case 'number':
-        return '' + value;
-      case 'string':
-        return util.toQuotedString(value);
-      case 'object':
-        if (value === null) return 'null';
-        var valueStr = stableStringify(value);
-        var index = defaultsHash[valueStr];
-        if (index === undefined) {
-          index = defaultsHash[valueStr] = defaults.length;
-          defaults[index] = value;
-        }
-        return 'default' + index;
-    }
-  }
-
-  function useCustomRule(rule, schema, parentSchema, it) {
-    if (self._opts.validateSchema !== false) {
-      var deps = rule.definition.dependencies;
-      if (deps && !deps.every(function(keyword) {
-        return Object.prototype.hasOwnProperty.call(parentSchema, keyword);
-      }))
-        throw new Error('parent schema must have all required keywords: ' + deps.join(','));
-
-      var validateSchema = rule.definition.validateSchema;
-      if (validateSchema) {
-        var valid = validateSchema(schema);
-        if (!valid) {
-          var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors);
-          if (self._opts.validateSchema == 'log') self.logger.error(message);
-          else throw new Error(message);
-        }
-      }
-    }
-
-    var compile = rule.definition.compile
-      , inline = rule.definition.inline
-      , macro = rule.definition.macro;
-
-    var validate;
-    if (compile) {
-      validate = compile.call(self, schema, parentSchema, it);
-    } else if (macro) {
-      validate = macro.call(self, schema, parentSchema, it);
-      if (opts.validateSchema !== false) self.validateSchema(validate, true);
-    } else if (inline) {
-      validate = inline.call(self, it, rule.keyword, schema, parentSchema);
-    } else {
-      validate = rule.definition.validate;
-      if (!validate) return;
-    }
-
-    if (validate === undefined)
-      throw new Error('custom keyword "' + rule.keyword + '"failed to compile');
-
-    var index = customRules.length;
-    customRules[index] = validate;
-
-    return {
-      code: 'customRule' + index,
-      validate: validate
-    };
-  }
-}
-
-
-/**
- * Checks if the schema is currently compiled
- * @this   Ajv
- * @param  {Object} schema schema to compile
- * @param  {Object} root root object
- * @param  {String} baseId base schema ID
- * @return {Object} object with properties "index" (compilation index) and "compiling" (boolean)
- */
-function checkCompiling(schema, root, baseId) {
-  /* jshint validthis: true */
-  var index = compIndex.call(this, schema, root, baseId);
-  if (index >= 0) return { index: index, compiling: true };
-  index = this._compilations.length;
-  this._compilations[index] = {
-    schema: schema,
-    root: root,
-    baseId: baseId
-  };
-  return { index: index, compiling: false };
-}
-
-
-/**
- * Removes the schema from the currently compiled list
- * @this   Ajv
- * @param  {Object} schema schema to compile
- * @param  {Object} root root object
- * @param  {String} baseId base schema ID
- */
-function endCompiling(schema, root, baseId) {
-  /* jshint validthis: true */
-  var i = compIndex.call(this, schema, root, baseId);
-  if (i >= 0) this._compilations.splice(i, 1);
-}
-
-
-/**
- * Index of schema compilation in the currently compiled list
- * @this   Ajv
- * @param  {Object} schema schema to compile
- * @param  {Object} root root object
- * @param  {String} baseId base schema ID
- * @return {Integer} compilation index
- */
-function compIndex(schema, root, baseId) {
-  /* jshint validthis: true */
-  for (var i=0; i<this._compilations.length; i++) {
-    var c = this._compilations[i];
-    if (c.schema == schema && c.root == root && c.baseId == baseId) return i;
-  }
-  return -1;
-}
-
-
-function patternCode(i, patterns) {
-  return 'var pattern' + i + ' = new RegExp(' + util.toQuotedString(patterns[i]) + ');';
-}
-
-
-function defaultCode(i) {
-  return 'var default' + i + ' = defaults[' + i + '];';
-}
-
-
-function refValCode(i, refVal) {
-  return refVal[i] === undefined ? '' : 'var refVal' + i + ' = refVal[' + i + '];';
-}
-
-
-function customRuleCode(i) {
-  return 'var customRule' + i + ' = customRules[' + i + '];';
-}
-
-
-function vars(arr, statement) {
-  if (!arr.length) return '';
-  var code = '';
-  for (var i=0; i<arr.length; i++)
-    code += statement(i, arr);
-  return code;
-}
-
-},{"../dotjs/validate":38,"./error_classes":3,"./resolve":6,"./util":10,"fast-deep-equal":42,"fast-json-stable-stringify":43}],6:[function(require,module,exports){
-'use strict';
-
-var URI = require('uri-js')
-  , equal = require('fast-deep-equal')
-  , util = require('./util')
-  , SchemaObject = require('./schema_obj')
-  , traverse = require('json-schema-traverse');
-
-module.exports = resolve;
-
-resolve.normalizeId = normalizeId;
-resolve.fullPath = getFullPath;
-resolve.url = resolveUrl;
-resolve.ids = resolveIds;
-resolve.inlineRef = inlineRef;
-resolve.schema = resolveSchema;
-
-/**
- * [resolve and compile the references ($ref)]
- * @this   Ajv
- * @param  {Function} compile reference to schema compilation funciton (localCompile)
- * @param  {Object} root object with information about the root schema for the current schema
- * @param  {String} ref reference to resolve
- * @return {Object|Function} schema object (if the schema can be inlined) or validation function
- */
-function resolve(compile, root, ref) {
-  /* jshint validthis: true */
-  var refVal = this._refs[ref];
-  if (typeof refVal == 'string') {
-    if (this._refs[refVal]) refVal = this._refs[refVal];
-    else return resolve.call(this, compile, root, refVal);
-  }
-
-  refVal = refVal || this._schemas[ref];
-  if (refVal instanceof SchemaObject) {
-    return inlineRef(refVal.schema, this._opts.inlineRefs)
-            ? refVal.schema
-            : refVal.validate || this._compile(refVal);
-  }
-
-  var res = resolveSchema.call(this, root, ref);
-  var schema, v, baseId;
-  if (res) {
-    schema = res.schema;
-    root = res.root;
-    baseId = res.baseId;
-  }
-
-  if (schema instanceof SchemaObject) {
-    v = schema.validate || compile.call(this, schema.schema, root, undefined, baseId);
-  } else if (schema !== undefined) {
-    v = inlineRef(schema, this._opts.inlineRefs)
-        ? schema
-        : compile.call(this, schema, root, undefined, baseId);
-  }
-
-  return v;
-}
-
-
-/**
- * Resolve schema, its root and baseId
- * @this Ajv
- * @param  {Object} root root object with properties schema, refVal, refs
- * @param  {String} ref  reference to resolve
- * @return {Object} object with properties schema, root, baseId
- */
-function resolveSchema(root, ref) {
-  /* jshint validthis: true */
-  var p = URI.parse(ref)
-    , refPath = _getFullPath(p)
-    , baseId = getFullPath(this._getId(root.schema));
-  if (Object.keys(root.schema).length === 0 || refPath !== baseId) {
-    var id = normalizeId(refPath);
-    var refVal = this._refs[id];
-    if (typeof refVal == 'string') {
-      return resolveRecursive.call(this, root, refVal, p);
-    } else if (refVal instanceof SchemaObject) {
-      if (!refVal.validate) this._compile(refVal);
-      root = refVal;
-    } else {
-      refVal = this._schemas[id];
-      if (refVal instanceof SchemaObject) {
-        if (!refVal.validate) this._compile(refVal);
-        if (id == normalizeId(ref))
-          return { schema: refVal, root: root, baseId: baseId };
-        root = refVal;
-      } else {
-        return;
-      }
-    }
-    if (!root.schema) return;
-    baseId = getFullPath(this._getId(root.schema));
-  }
-  return getJsonPointer.call(this, p, baseId, root.schema, root);
-}
-
-
-/* @this Ajv */
-function resolveRecursive(root, ref, parsedRef) {
-  /* jshint validthis: true */
-  var res = resolveSchema.call(this, root, ref);
-  if (res) {
-    var schema = res.schema;
-    var baseId = res.baseId;
-    root = res.root;
-    var id = this._getId(schema);
-    if (id) baseId = resolveUrl(baseId, id);
-    return getJsonPointer.call(this, parsedRef, baseId, schema, root);
-  }
-}
-
-
-var PREVENT_SCOPE_CHANGE = util.toHash(['properties', 'patternProperties', 'enum', 'dependencies', 'definitions']);
-/* @this Ajv */
-function getJsonPointer(parsedRef, baseId, schema, root) {
-  /* jshint validthis: true */
-  parsedRef.fragment = parsedRef.fragment || '';
-  if (parsedRef.fragment.slice(0,1) != '/') return;
-  var parts = parsedRef.fragment.split('/');
-
-  for (var i = 1; i < parts.length; i++) {
-    var part = parts[i];
-    if (part) {
-      part = util.unescapeFragment(part);
-      schema = schema[part];
-      if (schema === undefined) break;
-      var id;
-      if (!PREVENT_SCOPE_CHANGE[part]) {
-        id = this._getId(schema);
-        if (id) baseId = resolveUrl(baseId, id);
-        if (schema.$ref) {
-          var $ref = resolveUrl(baseId, schema.$ref);
-          var res = resolveSchema.call(this, root, $ref);
-          if (res) {
-            schema = res.schema;
-            root = res.root;
-            baseId = res.baseId;
-          }
-        }
-      }
-    }
-  }
-  if (schema !== undefined && schema !== root.schema)
-    return { schema: schema, root: root, baseId: baseId };
-}
-
-
-var SIMPLE_INLINED = util.toHash([
-  'type', 'format', 'pattern',
-  'maxLength', 'minLength',
-  'maxProperties', 'minProperties',
-  'maxItems', 'minItems',
-  'maximum', 'minimum',
-  'uniqueItems', 'multipleOf',
-  'required', 'enum'
-]);
-function inlineRef(schema, limit) {
-  if (limit === false) return false;
-  if (limit === undefined || limit === true) return checkNoRef(schema);
-  else if (limit) return countKeys(schema) <= limit;
-}
-
-
-function checkNoRef(schema) {
-  var item;
-  if (Array.isArray(schema)) {
-    for (var i=0; i<schema.length; i++) {
-      item = schema[i];
-      if (typeof item == 'object' && !checkNoRef(item)) return false;
-    }
-  } else {
-    for (var key in schema) {
-      if (key == '$ref') return false;
-      item = schema[key];
-      if (typeof item == 'object' && !checkNoRef(item)) return false;
-    }
-  }
-  return true;
-}
-
-
-function countKeys(schema) {
-  var count = 0, item;
-  if (Array.isArray(schema)) {
-    for (var i=0; i<schema.length; i++) {
-      item = schema[i];
-      if (typeof item == 'object') count += countKeys(item);
-      if (count == Infinity) return Infinity;
-    }
-  } else {
-    for (var key in schema) {
-      if (key == '$ref') return Infinity;
-      if (SIMPLE_INLINED[key]) {
-        count++;
-      } else {
-        item = schema[key];
-        if (typeof item == 'object') count += countKeys(item) + 1;
-        if (count == Infinity) return Infinity;
-      }
-    }
-  }
-  return count;
-}
-
-
-function getFullPath(id, normalize) {
-  if (normalize !== false) id = normalizeId(id);
-  var p = URI.parse(id);
-  return _getFullPath(p);
-}
-
-
-function _getFullPath(p) {
-  return URI.serialize(p).split('#')[0] + '#';
-}
-
-
-var TRAILING_SLASH_HASH = /#\/?$/;
-function normalizeId(id) {
-  return id ? id.replace(TRAILING_SLASH_HASH, '') : '';
-}
-
-
-function resolveUrl(baseId, id) {
-  id = normalizeId(id);
-  return URI.resolve(baseId, id);
-}
-
-
-/* @this Ajv */
-function resolveIds(schema) {
-  var schemaId = normalizeId(this._getId(schema));
-  var baseIds = {'': schemaId};
-  var fullPaths = {'': getFullPath(schemaId, false)};
-  var localRefs = {};
-  var self = this;
-
-  traverse(schema, {allKeys: true}, function(sch, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {
-    if (jsonPtr === '') return;
-    var id = self._getId(sch);
-    var baseId = baseIds[parentJsonPtr];
-    var fullPath = fullPaths[parentJsonPtr] + '/' + parentKeyword;
-    if (keyIndex !== undefined)
-      fullPath += '/' + (typeof keyIndex == 'number' ? keyIndex : util.escapeFragment(keyIndex));
-
-    if (typeof id == 'string') {
-      id = baseId = normalizeId(baseId ? URI.resolve(baseId, id) : id);
-
-      var refVal = self._refs[id];
-      if (typeof refVal == 'string') refVal = self._refs[refVal];
-      if (refVal && refVal.schema) {
-        if (!equal(sch, refVal.schema))
-          throw new Error('id "' + id + '" resolves to more than one schema');
-      } else if (id != normalizeId(fullPath)) {
-        if (id[0] == '#') {
-          if (localRefs[id] && !equal(sch, localRefs[id]))
-            throw new Error('id "' + id + '" resolves to more than one schema');
-          localRefs[id] = sch;
-        } else {
-          self._refs[id] = fullPath;
-        }
-      }
-    }
-    baseIds[jsonPtr] = baseId;
-    fullPaths[jsonPtr] = fullPath;
-  });
-
-  return localRefs;
-}
-
-},{"./schema_obj":8,"./util":10,"fast-deep-equal":42,"json-schema-traverse":44,"uri-js":45}],7:[function(require,module,exports){
-'use strict';
-
-var ruleModules = require('../dotjs')
-  , toHash = require('./util').toHash;
-
-module.exports = function rules() {
-  var RULES = [
-    { type: 'number',
-      rules: [ { 'maximum': ['exclusiveMaximum'] },
-               { 'minimum': ['exclusiveMinimum'] }, 'multipleOf', 'format'] },
-    { type: 'string',
-      rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] },
-    { type: 'array',
-      rules: [ 'maxItems', 'minItems', 'items', 'contains', 'uniqueItems' ] },
-    { type: 'object',
-      rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'propertyNames',
-               { 'properties': ['additionalProperties', 'patternProperties'] } ] },
-    { rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf', 'if' ] }
-  ];
-
-  var ALL = [ 'type', '$comment' ];
-  var KEYWORDS = [
-    '$schema', '$id', 'id', '$data', '$async', 'title',
-    'description', 'default', 'definitions',
-    'examples', 'readOnly', 'writeOnly',
-    'contentMediaType', 'contentEncoding',
-    'additionalItems', 'then', 'else'
-  ];
-  var TYPES = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ];
-  RULES.all = toHash(ALL);
-  RULES.types = toHash(TYPES);
-
-  RULES.forEach(function (group) {
-    group.rules = group.rules.map(function (keyword) {
-      var implKeywords;
-      if (typeof keyword == 'object') {
-        var key = Object.keys(keyword)[0];
-        implKeywords = keyword[key];
-        keyword = key;
-        implKeywords.forEach(function (k) {
-          ALL.push(k);
-          RULES.all[k] = true;
-        });
-      }
-      ALL.push(keyword);
-      var rule = RULES.all[keyword] = {
-        keyword: keyword,
-        code: ruleModules[keyword],
-        implements: implKeywords
-      };
-      return rule;
-    });
-
-    RULES.all.$comment = {
-      keyword: '$comment',
-      code: ruleModules.$comment
-    };
-
-    if (group.type) RULES.types[group.type] = group;
-  });
-
-  RULES.keywords = toHash(ALL.concat(KEYWORDS));
-  RULES.custom = {};
-
-  return RULES;
-};
-
-},{"../dotjs":27,"./util":10}],8:[function(require,module,exports){
-'use strict';
-
-var util = require('./util');
-
-module.exports = SchemaObject;
-
-function SchemaObject(obj) {
-  util.copy(obj, this);
-}
-
-},{"./util":10}],9:[function(require,module,exports){
-'use strict';
-
-// https://mathiasbynens.be/notes/javascript-encoding
-// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode
-module.exports = function ucs2length(str) {
-  var length = 0
-    , len = str.length
-    , pos = 0
-    , value;
-  while (pos < len) {
-    length++;
-    value = str.charCodeAt(pos++);
-    if (value >= 0xD800 && value <= 0xDBFF && pos < len) {
-      // high surrogate, and there is a next character
-      value = str.charCodeAt(pos);
-      if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate
-    }
-  }
-  return length;
-};
-
-},{}],10:[function(require,module,exports){
-'use strict';
-
-
-module.exports = {
-  copy: copy,
-  checkDataType: checkDataType,
-  checkDataTypes: checkDataTypes,
-  coerceToTypes: coerceToTypes,
-  toHash: toHash,
-  getProperty: getProperty,
-  escapeQuotes: escapeQuotes,
-  equal: require('fast-deep-equal'),
-  ucs2length: require('./ucs2length'),
-  varOccurences: varOccurences,
-  varReplace: varReplace,
-  cleanUpCode: cleanUpCode,
-  finalCleanUpCode: finalCleanUpCode,
-  schemaHasRules: schemaHasRules,
-  schemaHasRulesExcept: schemaHasRulesExcept,
-  schemaUnknownRules: schemaUnknownRules,
-  toQuotedString: toQuotedString,
-  getPathExpr: getPathExpr,
-  getPath: getPath,
-  getData: getData,
-  unescapeFragment: unescapeFragment,
-  unescapeJsonPointer: unescapeJsonPointer,
-  escapeFragment: escapeFragment,
-  escapeJsonPointer: escapeJsonPointer
-};
-
-
-function copy(o, to) {
-  to = to || {};
-  for (var key in o) to[key] = o[key];
-  return to;
-}
-
-
-function checkDataType(dataType, data, negate) {
-  var EQUAL = negate ? ' !== ' : ' === '
-    , AND = negate ? ' || ' : ' && '
-    , OK = negate ? '!' : ''
-    , NOT = negate ? '' : '!';
-  switch (dataType) {
-    case 'null': return data + EQUAL + 'null';
-    case 'array': return OK + 'Array.isArray(' + data + ')';
-    case 'object': return '(' + OK + data + AND +
-                          'typeof ' + data + EQUAL + '"object"' + AND +
-                          NOT + 'Array.isArray(' + data + '))';
-    case 'integer': return '(typeof ' + data + EQUAL + '"number"' + AND +
-                           NOT + '(' + data + ' % 1)' +
-                           AND + data + EQUAL + data + ')';
-    default: return 'typeof ' + data + EQUAL + '"' + dataType + '"';
-  }
-}
-
-
-function checkDataTypes(dataTypes, data) {
-  switch (dataTypes.length) {
-    case 1: return checkDataType(dataTypes[0], data, true);
-    default:
-      var code = '';
-      var types = toHash(dataTypes);
-      if (types.array && types.object) {
-        code = types.null ? '(': '(!' + data + ' || ';
-        code += 'typeof ' + data + ' !== "object")';
-        delete types.null;
-        delete types.array;
-        delete types.object;
-      }
-      if (types.number) delete types.integer;
-      for (var t in types)
-        code += (code ? ' && ' : '' ) + checkDataType(t, data, true);
-
-      return code;
-  }
-}
-
-
-var COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]);
-function coerceToTypes(optionCoerceTypes, dataTypes) {
-  if (Array.isArray(dataTypes)) {
-    var types = [];
-    for (var i=0; i<dataTypes.length; i++) {
-      var t = dataTypes[i];
-      if (COERCE_TO_TYPES[t]) types[types.length] = t;
-      else if (optionCoerceTypes === 'array' && t === 'array') types[types.length] = t;
-    }
-    if (types.length) return types;
-  } else if (COERCE_TO_TYPES[dataTypes]) {
-    return [dataTypes];
-  } else if (optionCoerceTypes === 'array' && dataTypes === 'array') {
-    return ['array'];
-  }
-}
-
-
-function toHash(arr) {
-  var hash = {};
-  for (var i=0; i<arr.length; i++) hash[arr[i]] = true;
-  return hash;
-}
-
-
-var IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;
-var SINGLE_QUOTE = /'|\\/g;
-function getProperty(key) {
-  return typeof key == 'number'
-          ? '[' + key + ']'
-          : IDENTIFIER.test(key)
-            ? '.' + key
-            : "['" + escapeQuotes(key) + "']";
-}
-
-
-function escapeQuotes(str) {
-  return str.replace(SINGLE_QUOTE, '\\$&')
-            .replace(/\n/g, '\\n')
-            .replace(/\r/g, '\\r')
-            .replace(/\f/g, '\\f')
-            .replace(/\t/g, '\\t');
-}
-
-
-function varOccurences(str, dataVar) {
-  dataVar += '[^0-9]';
-  var matches = str.match(new RegExp(dataVar, 'g'));
-  return matches ? matches.length : 0;
-}
-
-
-function varReplace(str, dataVar, expr) {
-  dataVar += '([^0-9])';
-  expr = expr.replace(/\$/g, '$$$$');
-  return str.replace(new RegExp(dataVar, 'g'), expr + '$1');
-}
-
-
-var EMPTY_ELSE = /else\s*{\s*}/g
-  , EMPTY_IF_NO_ELSE = /if\s*\([^)]+\)\s*\{\s*\}(?!\s*else)/g
-  , EMPTY_IF_WITH_ELSE = /if\s*\(([^)]+)\)\s*\{\s*\}\s*else(?!\s*if)/g;
-function cleanUpCode(out) {
-  return out.replace(EMPTY_ELSE, '')
-            .replace(EMPTY_IF_NO_ELSE, '')
-            .replace(EMPTY_IF_WITH_ELSE, 'if (!($1))');
-}
-
-
-var ERRORS_REGEXP = /[^v.]errors/g
-  , REMOVE_ERRORS = /var errors = 0;|var vErrors = null;|validate.errors = vErrors;/g
-  , REMOVE_ERRORS_ASYNC = /var errors = 0;|var vErrors = null;/g
-  , RETURN_VALID = 'return errors === 0;'
-  , RETURN_TRUE = 'validate.errors = null; return true;'
-  , RETURN_ASYNC = /if \(errors === 0\) return data;\s*else throw new ValidationError\(vErrors\);/
-  , RETURN_DATA_ASYNC = 'return data;'
-  , ROOTDATA_REGEXP = /[^A-Za-z_$]rootData[^A-Za-z0-9_$]/g
-  , REMOVE_ROOTDATA = /if \(rootData === undefined\) rootData = data;/;
-
-function finalCleanUpCode(out, async) {
-  var matches = out.match(ERRORS_REGEXP);
-  if (matches && matches.length == 2) {
-    out = async
-          ? out.replace(REMOVE_ERRORS_ASYNC, '')
-               .replace(RETURN_ASYNC, RETURN_DATA_ASYNC)
-          : out.replace(REMOVE_ERRORS, '')
-               .replace(RETURN_VALID, RETURN_TRUE);
-  }
-
-  matches = out.match(ROOTDATA_REGEXP);
-  if (!matches || matches.length !== 3) return out;
-  return out.replace(REMOVE_ROOTDATA, '');
-}
-
-
-function schemaHasRules(schema, rules) {
-  if (typeof schema == 'boolean') return !schema;
-  for (var key in schema) if (rules[key]) return true;
-}
-
-
-function schemaHasRulesExcept(schema, rules, exceptKeyword) {
-  if (typeof schema == 'boolean') return !schema && exceptKeyword != 'not';
-  for (var key in schema) if (key != exceptKeyword && rules[key]) return true;
-}
-
-
-function schemaUnknownRules(schema, rules) {
-  if (typeof schema == 'boolean') return;
-  for (var key in schema) if (!rules[key]) return key;
-}
-
-
-function toQuotedString(str) {
-  return '\'' + escapeQuotes(str) + '\'';
-}
-
-
-function getPathExpr(currentPath, expr, jsonPointers, isNumber) {
-  var path = jsonPointers // false by default
-              ? '\'/\' + ' + expr + (isNumber ? '' : '.replace(/~/g, \'~0\').replace(/\\//g, \'~1\')')
-              : (isNumber ? '\'[\' + ' + expr + ' + \']\'' : '\'[\\\'\' + ' + expr + ' + \'\\\']\'');
-  return joinPaths(currentPath, path);
-}
-
-
-function getPath(currentPath, prop, jsonPointers) {
-  var path = jsonPointers // false by default
-              ? toQuotedString('/' + escapeJsonPointer(prop))
-              : toQuotedString(getProperty(prop));
-  return joinPaths(currentPath, path);
-}
-
-
-var JSON_POINTER = /^\/(?:[^~]|~0|~1)*$/;
-var RELATIVE_JSON_POINTER = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;
-function getData($data, lvl, paths) {
-  var up, jsonPointer, data, matches;
-  if ($data === '') return 'rootData';
-  if ($data[0] == '/') {
-    if (!JSON_POINTER.test($data)) throw new Error('Invalid JSON-pointer: ' + $data);
-    jsonPointer = $data;
-    data = 'rootData';
-  } else {
-    matches = $data.match(RELATIVE_JSON_POINTER);
-    if (!matches) throw new Error('Invalid JSON-pointer: ' + $data);
-    up = +matches[1];
-    jsonPointer = matches[2];
-    if (jsonPointer == '#') {
-      if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);
-      return paths[lvl - up];
-    }
-
-    if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);
-    data = 'data' + ((lvl - up) || '');
-    if (!jsonPointer) return data;
-  }
-
-  var expr = data;
-  var segments = jsonPointer.split('/');
-  for (var i=0; i<segments.length; i++) {
-    var segment = segments[i];
-    if (segment) {
-      data += getProperty(unescapeJsonPointer(segment));
-      expr += ' && ' + data;
-    }
-  }
-  return expr;
-}
-
-
-function joinPaths (a, b) {
-  if (a == '""') return b;
-  return (a + ' + ' + b).replace(/' \+ '/g, '');
-}
-
-
-function unescapeFragment(str) {
-  return unescapeJsonPointer(decodeURIComponent(str));
-}
-
-
-function escapeFragment(str) {
-  return encodeURIComponent(escapeJsonPointer(str));
-}
-
-
-function escapeJsonPointer(str) {
-  return str.replace(/~/g, '~0').replace(/\//g, '~1');
-}
-
-
-function unescapeJsonPointer(str) {
-  return str.replace(/~1/g, '/').replace(/~0/g, '~');
-}
-
-},{"./ucs2length":9,"fast-deep-equal":42}],11:[function(require,module,exports){
-'use strict';
-
-var KEYWORDS = [
-  'multipleOf',
-  'maximum',
-  'exclusiveMaximum',
-  'minimum',
-  'exclusiveMinimum',
-  'maxLength',
-  'minLength',
-  'pattern',
-  'additionalItems',
-  'maxItems',
-  'minItems',
-  'uniqueItems',
-  'maxProperties',
-  'minProperties',
-  'required',
-  'additionalProperties',
-  'enum',
-  'format',
-  'const'
-];
-
-module.exports = function (metaSchema, keywordsJsonPointers) {
-  for (var i=0; i<keywordsJsonPointers.length; i++) {
-    metaSchema = JSON.parse(JSON.stringify(metaSchema));
-    var segments = keywordsJsonPointers[i].split('/');
-    var keywords = metaSchema;
-    var j;
-    for (j=1; j<segments.length; j++)
-      keywords = keywords[segments[j]];
-
-    for (j=0; j<KEYWORDS.length; j++) {
-      var key = KEYWORDS[j];
-      var schema = keywords[key];
-      if (schema) {
-        keywords[key] = {
-          anyOf: [
-            schema,
-            { $ref: 'https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/data.json#' }
-          ]
-        };
-      }
-    }
-  }
-
-  return metaSchema;
-};
-
-},{}],12:[function(require,module,exports){
-'use strict';
-
-var metaSchema = require('./refs/json-schema-draft-07.json');
-
-module.exports = {
-  $id: 'https://github.com/epoberezkin/ajv/blob/master/lib/definition_schema.js',
-  definitions: {
-    simpleTypes: metaSchema.definitions.simpleTypes
-  },
-  type: 'object',
-  dependencies: {
-    schema: ['validate'],
-    $data: ['validate'],
-    statements: ['inline'],
-    valid: {not: {required: ['macro']}}
-  },
-  properties: {
-    type: metaSchema.properties.type,
-    schema: {type: 'boolean'},
-    statements: {type: 'boolean'},
-    dependencies: {
-      type: 'array',
-      items: {type: 'string'}
-    },
-    metaSchema: {type: 'object'},
-    modifying: {type: 'boolean'},
-    valid: {type: 'boolean'},
-    $data: {type: 'boolean'},
-    async: {type: 'boolean'},
-    errors: {
-      anyOf: [
-        {type: 'boolean'},
-        {const: 'full'}
-      ]
-    }
-  }
-};
-
-},{"./refs/json-schema-draft-07.json":41}],13:[function(require,module,exports){
-'use strict';
-module.exports = function generate__limit(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $errorKeyword;
-  var $data = 'data' + ($dataLvl || '');
-  var $isData = it.opts.$data && $schema && $schema.$data,
-    $schemaValue;
-  if ($isData) {
-    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
-    $schemaValue = 'schema' + $lvl;
-  } else {
-    $schemaValue = $schema;
-  }
-  var $isMax = $keyword == 'maximum',
-    $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum',
-    $schemaExcl = it.schema[$exclusiveKeyword],
-    $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data,
-    $op = $isMax ? '<' : '>',
-    $notOp = $isMax ? '>' : '<',
-    $errorKeyword = undefined;
-  if ($isDataExcl) {
-    var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),
-      $exclusive = 'exclusive' + $lvl,
-      $exclType = 'exclType' + $lvl,
-      $exclIsNumber = 'exclIsNumber' + $lvl,
-      $opExpr = 'op' + $lvl,
-      $opStr = '\' + ' + $opExpr + ' + \'';
-    out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';
-    $schemaValueExcl = 'schemaExcl' + $lvl;
-    out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \'boolean\' && ' + ($exclType) + ' != \'undefined\' && ' + ($exclType) + ' != \'number\') { ';
-    var $errorKeyword = $exclusiveKeyword;
-    var $$outStack = $$outStack || [];
-    $$outStack.push(out);
-    out = ''; /* istanbul ignore else */
-    if (it.createErrors !== false) {
-      out += ' { keyword: \'' + ($errorKeyword || '_exclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
-      if (it.opts.messages !== false) {
-        out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' ';
-      }
-      if (it.opts.verbose) {
-        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-      }
-      out += ' } ';
-    } else {
-      out += ' {} ';
-    }
-    var __err = out;
-    out = $$outStack.pop();
-    if (!it.compositeRule && $breakOnError) {
-      /* istanbul ignore if */
-      if (it.async) {
-        out += ' throw new ValidationError([' + (__err) + ']); ';
-      } else {
-        out += ' validate.errors = [' + (__err) + ']; return false; ';
-      }
-    } else {
-      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-    }
-    out += ' } else if ( ';
-    if ($isData) {
-      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
-    }
-    out += ' ' + ($exclType) + ' == \'number\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\'; ';
-    if ($schema === undefined) {
-      $errorKeyword = $exclusiveKeyword;
-      $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;
-      $schemaValue = $schemaValueExcl;
-      $isData = $isDataExcl;
-    }
-  } else {
-    var $exclIsNumber = typeof $schemaExcl == 'number',
-      $opStr = $op;
-    if ($exclIsNumber && $isData) {
-      var $opExpr = '\'' + $opStr + '\'';
-      out += ' if ( ';
-      if ($isData) {
-        out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
-      }
-      out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { ';
-    } else {
-      if ($exclIsNumber && $schema === undefined) {
-        $exclusive = true;
-        $errorKeyword = $exclusiveKeyword;
-        $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;
-        $schemaValue = $schemaExcl;
-        $notOp += '=';
-      } else {
-        if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema);
-        if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) {
-          $exclusive = true;
-          $errorKeyword = $exclusiveKeyword;
-          $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;
-          $notOp += '=';
-        } else {
-          $exclusive = false;
-          $opStr += '=';
-        }
-      }
-      var $opExpr = '\'' + $opStr + '\'';
-      out += ' if ( ';
-      if ($isData) {
-        out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
-      }
-      out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { ';
-    }
-  }
-  $errorKeyword = $errorKeyword || $keyword;
-  var $$outStack = $$outStack || [];
-  $$outStack.push(out);
-  out = ''; /* istanbul ignore else */
-  if (it.createErrors !== false) {
-    out += ' { keyword: \'' + ($errorKeyword || '_limit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } ';
-    if (it.opts.messages !== false) {
-      out += ' , message: \'should be ' + ($opStr) + ' ';
-      if ($isData) {
-        out += '\' + ' + ($schemaValue);
-      } else {
-        out += '' + ($schemaValue) + '\'';
-      }
-    }
-    if (it.opts.verbose) {
-      out += ' , schema:  ';
-      if ($isData) {
-        out += 'validate.schema' + ($schemaPath);
-      } else {
-        out += '' + ($schema);
-      }
-      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-    }
-    out += ' } ';
-  } else {
-    out += ' {} ';
-  }
-  var __err = out;
-  out = $$outStack.pop();
-  if (!it.compositeRule && $breakOnError) {
-    /* istanbul ignore if */
-    if (it.async) {
-      out += ' throw new ValidationError([' + (__err) + ']); ';
-    } else {
-      out += ' validate.errors = [' + (__err) + ']; return false; ';
-    }
-  } else {
-    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-  }
-  out += ' } ';
-  if ($breakOnError) {
-    out += ' else { ';
-  }
-  return out;
-}
-
-},{}],14:[function(require,module,exports){
-'use strict';
-module.exports = function generate__limitItems(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $errorKeyword;
-  var $data = 'data' + ($dataLvl || '');
-  var $isData = it.opts.$data && $schema && $schema.$data,
-    $schemaValue;
-  if ($isData) {
-    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
-    $schemaValue = 'schema' + $lvl;
-  } else {
-    $schemaValue = $schema;
-  }
-  var $op = $keyword == 'maxItems' ? '>' : '<';
-  out += 'if ( ';
-  if ($isData) {
-    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
-  }
-  out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { ';
-  var $errorKeyword = $keyword;
-  var $$outStack = $$outStack || [];
-  $$outStack.push(out);
-  out = ''; /* istanbul ignore else */
-  if (it.createErrors !== false) {
-    out += ' { keyword: \'' + ($errorKeyword || '_limitItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';
-    if (it.opts.messages !== false) {
-      out += ' , message: \'should NOT have ';
-      if ($keyword == 'maxItems') {
-        out += 'more';
-      } else {
-        out += 'fewer';
-      }
-      out += ' than ';
-      if ($isData) {
-        out += '\' + ' + ($schemaValue) + ' + \'';
-      } else {
-        out += '' + ($schema);
-      }
-      out += ' items\' ';
-    }
-    if (it.opts.verbose) {
-      out += ' , schema:  ';
-      if ($isData) {
-        out += 'validate.schema' + ($schemaPath);
-      } else {
-        out += '' + ($schema);
-      }
-      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-    }
-    out += ' } ';
-  } else {
-    out += ' {} ';
-  }
-  var __err = out;
-  out = $$outStack.pop();
-  if (!it.compositeRule && $breakOnError) {
-    /* istanbul ignore if */
-    if (it.async) {
-      out += ' throw new ValidationError([' + (__err) + ']); ';
-    } else {
-      out += ' validate.errors = [' + (__err) + ']; return false; ';
-    }
-  } else {
-    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-  }
-  out += '} ';
-  if ($breakOnError) {
-    out += ' else { ';
-  }
-  return out;
-}
-
-},{}],15:[function(require,module,exports){
-'use strict';
-module.exports = function generate__limitLength(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $errorKeyword;
-  var $data = 'data' + ($dataLvl || '');
-  var $isData = it.opts.$data && $schema && $schema.$data,
-    $schemaValue;
-  if ($isData) {
-    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
-    $schemaValue = 'schema' + $lvl;
-  } else {
-    $schemaValue = $schema;
-  }
-  var $op = $keyword == 'maxLength' ? '>' : '<';
-  out += 'if ( ';
-  if ($isData) {
-    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
-  }
-  if (it.opts.unicode === false) {
-    out += ' ' + ($data) + '.length ';
-  } else {
-    out += ' ucs2length(' + ($data) + ') ';
-  }
-  out += ' ' + ($op) + ' ' + ($schemaValue) + ') { ';
-  var $errorKeyword = $keyword;
-  var $$outStack = $$outStack || [];
-  $$outStack.push(out);
-  out = ''; /* istanbul ignore else */
-  if (it.createErrors !== false) {
-    out += ' { keyword: \'' + ($errorKeyword || '_limitLength') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';
-    if (it.opts.messages !== false) {
-      out += ' , message: \'should NOT be ';
-      if ($keyword == 'maxLength') {
-        out += 'longer';
-      } else {
-        out += 'shorter';
-      }
-      out += ' than ';
-      if ($isData) {
-        out += '\' + ' + ($schemaValue) + ' + \'';
-      } else {
-        out += '' + ($schema);
-      }
-      out += ' characters\' ';
-    }
-    if (it.opts.verbose) {
-      out += ' , schema:  ';
-      if ($isData) {
-        out += 'validate.schema' + ($schemaPath);
-      } else {
-        out += '' + ($schema);
-      }
-      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-    }
-    out += ' } ';
-  } else {
-    out += ' {} ';
-  }
-  var __err = out;
-  out = $$outStack.pop();
-  if (!it.compositeRule && $breakOnError) {
-    /* istanbul ignore if */
-    if (it.async) {
-      out += ' throw new ValidationError([' + (__err) + ']); ';
-    } else {
-      out += ' validate.errors = [' + (__err) + ']; return false; ';
-    }
-  } else {
-    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-  }
-  out += '} ';
-  if ($breakOnError) {
-    out += ' else { ';
-  }
-  return out;
-}
-
-},{}],16:[function(require,module,exports){
-'use strict';
-module.exports = function generate__limitProperties(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $errorKeyword;
-  var $data = 'data' + ($dataLvl || '');
-  var $isData = it.opts.$data && $schema && $schema.$data,
-    $schemaValue;
-  if ($isData) {
-    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
-    $schemaValue = 'schema' + $lvl;
-  } else {
-    $schemaValue = $schema;
-  }
-  var $op = $keyword == 'maxProperties' ? '>' : '<';
-  out += 'if ( ';
-  if ($isData) {
-    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
-  }
-  out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { ';
-  var $errorKeyword = $keyword;
-  var $$outStack = $$outStack || [];
-  $$outStack.push(out);
-  out = ''; /* istanbul ignore else */
-  if (it.createErrors !== false) {
-    out += ' { keyword: \'' + ($errorKeyword || '_limitProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';
-    if (it.opts.messages !== false) {
-      out += ' , message: \'should NOT have ';
-      if ($keyword == 'maxProperties') {
-        out += 'more';
-      } else {
-        out += 'fewer';
-      }
-      out += ' than ';
-      if ($isData) {
-        out += '\' + ' + ($schemaValue) + ' + \'';
-      } else {
-        out += '' + ($schema);
-      }
-      out += ' properties\' ';
-    }
-    if (it.opts.verbose) {
-      out += ' , schema:  ';
-      if ($isData) {
-        out += 'validate.schema' + ($schemaPath);
-      } else {
-        out += '' + ($schema);
-      }
-      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-    }
-    out += ' } ';
-  } else {
-    out += ' {} ';
-  }
-  var __err = out;
-  out = $$outStack.pop();
-  if (!it.compositeRule && $breakOnError) {
-    /* istanbul ignore if */
-    if (it.async) {
-      out += ' throw new ValidationError([' + (__err) + ']); ';
-    } else {
-      out += ' validate.errors = [' + (__err) + ']; return false; ';
-    }
-  } else {
-    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-  }
-  out += '} ';
-  if ($breakOnError) {
-    out += ' else { ';
-  }
-  return out;
-}
-
-},{}],17:[function(require,module,exports){
-'use strict';
-module.exports = function generate_allOf(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $it = it.util.copy(it);
-  var $closingBraces = '';
-  $it.level++;
-  var $nextValid = 'valid' + $it.level;
-  var $currentBaseId = $it.baseId,
-    $allSchemasEmpty = true;
-  var arr1 = $schema;
-  if (arr1) {
-    var $sch, $i = -1,
-      l1 = arr1.length - 1;
-    while ($i < l1) {
-      $sch = arr1[$i += 1];
-      if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {
-        $allSchemasEmpty = false;
-        $it.schema = $sch;
-        $it.schemaPath = $schemaPath + '[' + $i + ']';
-        $it.errSchemaPath = $errSchemaPath + '/' + $i;
-        out += '  ' + (it.validate($it)) + ' ';
-        $it.baseId = $currentBaseId;
-        if ($breakOnError) {
-          out += ' if (' + ($nextValid) + ') { ';
-          $closingBraces += '}';
-        }
-      }
-    }
-  }
-  if ($breakOnError) {
-    if ($allSchemasEmpty) {
-      out += ' if (true) { ';
-    } else {
-      out += ' ' + ($closingBraces.slice(0, -1)) + ' ';
-    }
-  }
-  out = it.util.cleanUpCode(out);
-  return out;
-}
-
-},{}],18:[function(require,module,exports){
-'use strict';
-module.exports = function generate_anyOf(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $valid = 'valid' + $lvl;
-  var $errs = 'errs__' + $lvl;
-  var $it = it.util.copy(it);
-  var $closingBraces = '';
-  $it.level++;
-  var $nextValid = 'valid' + $it.level;
-  var $noEmptySchema = $schema.every(function($sch) {
-    return (it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all));
-  });
-  if ($noEmptySchema) {
-    var $currentBaseId = $it.baseId;
-    out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false;  ';
-    var $wasComposite = it.compositeRule;
-    it.compositeRule = $it.compositeRule = true;
-    var arr1 = $schema;
-    if (arr1) {
-      var $sch, $i = -1,
-        l1 = arr1.length - 1;
-      while ($i < l1) {
-        $sch = arr1[$i += 1];
-        $it.schema = $sch;
-        $it.schemaPath = $schemaPath + '[' + $i + ']';
-        $it.errSchemaPath = $errSchemaPath + '/' + $i;
-        out += '  ' + (it.validate($it)) + ' ';
-        $it.baseId = $currentBaseId;
-        out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { ';
-        $closingBraces += '}';
-      }
-    }
-    it.compositeRule = $it.compositeRule = $wasComposite;
-    out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */
-    if (it.createErrors !== false) {
-      out += ' { keyword: \'' + ('anyOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
-      if (it.opts.messages !== false) {
-        out += ' , message: \'should match some schema in anyOf\' ';
-      }
-      if (it.opts.verbose) {
-        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-      }
-      out += ' } ';
-    } else {
-      out += ' {} ';
-    }
-    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-    if (!it.compositeRule && $breakOnError) {
-      /* istanbul ignore if */
-      if (it.async) {
-        out += ' throw new ValidationError(vErrors); ';
-      } else {
-        out += ' validate.errors = vErrors; return false; ';
-      }
-    }
-    out += ' } else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';
-    if (it.opts.allErrors) {
-      out += ' } ';
-    }
-    out = it.util.cleanUpCode(out);
-  } else {
-    if ($breakOnError) {
-      out += ' if (true) { ';
-    }
-  }
-  return out;
-}
-
-},{}],19:[function(require,module,exports){
-'use strict';
-module.exports = function generate_comment(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $schema = it.schema[$keyword];
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $comment = it.util.toQuotedString($schema);
-  if (it.opts.$comment === true) {
-    out += ' console.log(' + ($comment) + ');';
-  } else if (typeof it.opts.$comment == 'function') {
-    out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);';
-  }
-  return out;
-}
-
-},{}],20:[function(require,module,exports){
-'use strict';
-module.exports = function generate_const(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $valid = 'valid' + $lvl;
-  var $isData = it.opts.$data && $schema && $schema.$data,
-    $schemaValue;
-  if ($isData) {
-    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
-    $schemaValue = 'schema' + $lvl;
-  } else {
-    $schemaValue = $schema;
-  }
-  if (!$isData) {
-    out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';
-  }
-  out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') {   ';
-  var $$outStack = $$outStack || [];
-  $$outStack.push(out);
-  out = ''; /* istanbul ignore else */
-  if (it.createErrors !== false) {
-    out += ' { keyword: \'' + ('const') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } ';
-    if (it.opts.messages !== false) {
-      out += ' , message: \'should be equal to constant\' ';
-    }
-    if (it.opts.verbose) {
-      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-    }
-    out += ' } ';
-  } else {
-    out += ' {} ';
-  }
-  var __err = out;
-  out = $$outStack.pop();
-  if (!it.compositeRule && $breakOnError) {
-    /* istanbul ignore if */
-    if (it.async) {
-      out += ' throw new ValidationError([' + (__err) + ']); ';
-    } else {
-      out += ' validate.errors = [' + (__err) + ']; return false; ';
-    }
-  } else {
-    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-  }
-  out += ' }';
-  if ($breakOnError) {
-    out += ' else { ';
-  }
-  return out;
-}
-
-},{}],21:[function(require,module,exports){
-'use strict';
-module.exports = function generate_contains(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $valid = 'valid' + $lvl;
-  var $errs = 'errs__' + $lvl;
-  var $it = it.util.copy(it);
-  var $closingBraces = '';
-  $it.level++;
-  var $nextValid = 'valid' + $it.level;
-  var $idx = 'i' + $lvl,
-    $dataNxt = $it.dataLevel = it.dataLevel + 1,
-    $nextData = 'data' + $dataNxt,
-    $currentBaseId = it.baseId,
-    $nonEmptySchema = (it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all));
-  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';
-  if ($nonEmptySchema) {
-    var $wasComposite = it.compositeRule;
-    it.compositeRule = $it.compositeRule = true;
-    $it.schema = $schema;
-    $it.schemaPath = $schemaPath;
-    $it.errSchemaPath = $errSchemaPath;
-    out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';
-    $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);
-    var $passData = $data + '[' + $idx + ']';
-    $it.dataPathArr[$dataNxt] = $idx;
-    var $code = it.validate($it);
-    $it.baseId = $currentBaseId;
-    if (it.util.varOccurences($code, $nextData) < 2) {
-      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
-    } else {
-      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
-    }
-    out += ' if (' + ($nextValid) + ') break; }  ';
-    it.compositeRule = $it.compositeRule = $wasComposite;
-    out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {';
-  } else {
-    out += ' if (' + ($data) + '.length == 0) {';
-  }
-  var $$outStack = $$outStack || [];
-  $$outStack.push(out);
-  out = ''; /* istanbul ignore else */
-  if (it.createErrors !== false) {
-    out += ' { keyword: \'' + ('contains') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
-    if (it.opts.messages !== false) {
-      out += ' , message: \'should contain a valid item\' ';
-    }
-    if (it.opts.verbose) {
-      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-    }
-    out += ' } ';
-  } else {
-    out += ' {} ';
-  }
-  var __err = out;
-  out = $$outStack.pop();
-  if (!it.compositeRule && $breakOnError) {
-    /* istanbul ignore if */
-    if (it.async) {
-      out += ' throw new ValidationError([' + (__err) + ']); ';
-    } else {
-      out += ' validate.errors = [' + (__err) + ']; return false; ';
-    }
-  } else {
-    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-  }
-  out += ' } else { ';
-  if ($nonEmptySchema) {
-    out += '  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';
-  }
-  if (it.opts.allErrors) {
-    out += ' } ';
-  }
-  out = it.util.cleanUpCode(out);
-  return out;
-}
-
-},{}],22:[function(require,module,exports){
-'use strict';
-module.exports = function generate_custom(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $errorKeyword;
-  var $data = 'data' + ($dataLvl || '');
-  var $valid = 'valid' + $lvl;
-  var $errs = 'errs__' + $lvl;
-  var $isData = it.opts.$data && $schema && $schema.$data,
-    $schemaValue;
-  if ($isData) {
-    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
-    $schemaValue = 'schema' + $lvl;
-  } else {
-    $schemaValue = $schema;
-  }
-  var $rule = this,
-    $definition = 'definition' + $lvl,
-    $rDef = $rule.definition,
-    $closingBraces = '';
-  var $compile, $inline, $macro, $ruleValidate, $validateCode;
-  if ($isData && $rDef.$data) {
-    $validateCode = 'keywordValidate' + $lvl;
-    var $validateSchema = $rDef.validateSchema;
-    out += ' var ' + ($definition) + ' = RULES.custom[\'' + ($keyword) + '\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;';
-  } else {
-    $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it);
-    if (!$ruleValidate) return;
-    $schemaValue = 'validate.schema' + $schemaPath;
-    $validateCode = $ruleValidate.code;
-    $compile = $rDef.compile;
-    $inline = $rDef.inline;
-    $macro = $rDef.macro;
-  }
-  var $ruleErrs = $validateCode + '.errors',
-    $i = 'i' + $lvl,
-    $ruleErr = 'ruleErr' + $lvl,
-    $asyncKeyword = $rDef.async;
-  if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema');
-  if (!($inline || $macro)) {
-    out += '' + ($ruleErrs) + ' = null;';
-  }
-  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';
-  if ($isData && $rDef.$data) {
-    $closingBraces += '}';
-    out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { ';
-    if ($validateSchema) {
-      $closingBraces += '}';
-      out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { ';
-    }
-  }
-  if ($inline) {
-    if ($rDef.statements) {
-      out += ' ' + ($ruleValidate.validate) + ' ';
-    } else {
-      out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; ';
-    }
-  } else if ($macro) {
-    var $it = it.util.copy(it);
-    var $closingBraces = '';
-    $it.level++;
-    var $nextValid = 'valid' + $it.level;
-    $it.schema = $ruleValidate.validate;
-    $it.schemaPath = '';
-    var $wasComposite = it.compositeRule;
-    it.compositeRule = $it.compositeRule = true;
-    var $code = it.validate($it).replace(/validate\.schema/g, $validateCode);
-    it.compositeRule = $it.compositeRule = $wasComposite;
-    out += ' ' + ($code);
-  } else {
-    var $$outStack = $$outStack || [];
-    $$outStack.push(out);
-    out = '';
-    out += '  ' + ($validateCode) + '.call( ';
-    if (it.opts.passContext) {
-      out += 'this';
-    } else {
-      out += 'self';
-    }
-    if ($compile || $rDef.schema === false) {
-      out += ' , ' + ($data) + ' ';
-    } else {
-      out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' ';
-    }
-    out += ' , (dataPath || \'\')';
-    if (it.errorPath != '""') {
-      out += ' + ' + (it.errorPath);
-    }
-    var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',
-      $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';
-    out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData )  ';
-    var def_callRuleValidate = out;
-    out = $$outStack.pop();
-    if ($rDef.errors === false) {
-      out += ' ' + ($valid) + ' = ';
-      if ($asyncKeyword) {
-        out += 'await ';
-      }
-      out += '' + (def_callRuleValidate) + '; ';
-    } else {
-      if ($asyncKeyword) {
-        $ruleErrs = 'customErrors' + $lvl;
-        out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = await ' + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } ';
-      } else {
-        out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; ';
-      }
-    }
-  }
-  if ($rDef.modifying) {
-    out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];';
-  }
-  out += '' + ($closingBraces);
-  if ($rDef.valid) {
-    if ($breakOnError) {
-      out += ' if (true) { ';
-    }
-  } else {
-    out += ' if ( ';
-    if ($rDef.valid === undefined) {
-      out += ' !';
-      if ($macro) {
-        out += '' + ($nextValid);
-      } else {
-        out += '' + ($valid);
-      }
-    } else {
-      out += ' ' + (!$rDef.valid) + ' ';
-    }
-    out += ') { ';
-    $errorKeyword = $rule.keyword;
-    var $$outStack = $$outStack || [];
-    $$outStack.push(out);
-    out = '';
-    var $$outStack = $$outStack || [];
-    $$outStack.push(out);
-    out = ''; /* istanbul ignore else */
-    if (it.createErrors !== false) {
-      out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } ';
-      if (it.opts.messages !== false) {
-        out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' ';
-      }
-      if (it.opts.verbose) {
-        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-      }
-      out += ' } ';
-    } else {
-      out += ' {} ';
-    }
-    var __err = out;
-    out = $$outStack.pop();
-    if (!it.compositeRule && $breakOnError) {
-      /* istanbul ignore if */
-      if (it.async) {
-        out += ' throw new ValidationError([' + (__err) + ']); ';
-      } else {
-        out += ' validate.errors = [' + (__err) + ']; return false; ';
-      }
-    } else {
-      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-    }
-    var def_customError = out;
-    out = $$outStack.pop();
-    if ($inline) {
-      if ($rDef.errors) {
-        if ($rDef.errors != 'full') {
-          out += '  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \'\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = "' + ($errSchemaPath) + '"; } ';
-          if (it.opts.verbose) {
-            out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';
-          }
-          out += ' } ';
-        }
-      } else {
-        if ($rDef.errors === false) {
-          out += ' ' + (def_customError) + ' ';
-        } else {
-          out += ' if (' + ($errs) + ' == errors) { ' + (def_customError) + ' } else {  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \'\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = "' + ($errSchemaPath) + '"; } ';
-          if (it.opts.verbose) {
-            out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';
-          }
-          out += ' } } ';
-        }
-      }
-    } else if ($macro) {
-      out += '   var err =   '; /* istanbul ignore else */
-      if (it.createErrors !== false) {
-        out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } ';
-        if (it.opts.messages !== false) {
-          out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' ';
-        }
-        if (it.opts.verbose) {
-          out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-        }
-        out += ' } ';
-      } else {
-        out += ' {} ';
-      }
-      out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-      if (!it.compositeRule && $breakOnError) {
-        /* istanbul ignore if */
-        if (it.async) {
-          out += ' throw new ValidationError(vErrors); ';
-        } else {
-          out += ' validate.errors = vErrors; return false; ';
-        }
-      }
-    } else {
-      if ($rDef.errors === false) {
-        out += ' ' + (def_customError) + ' ';
-      } else {
-        out += ' if (Array.isArray(' + ($ruleErrs) + ')) { if (vErrors === null) vErrors = ' + ($ruleErrs) + '; else vErrors = vErrors.concat(' + ($ruleErrs) + '); errors = vErrors.length;  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \'\') + ' + (it.errorPath) + ';  ' + ($ruleErr) + '.schemaPath = "' + ($errSchemaPath) + '";  ';
-        if (it.opts.verbose) {
-          out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';
-        }
-        out += ' } } else { ' + (def_customError) + ' } ';
-      }
-    }
-    out += ' } ';
-    if ($breakOnError) {
-      out += ' else { ';
-    }
-  }
-  return out;
-}
-
-},{}],23:[function(require,module,exports){
-'use strict';
-module.exports = function generate_dependencies(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $errs = 'errs__' + $lvl;
-  var $it = it.util.copy(it);
-  var $closingBraces = '';
-  $it.level++;
-  var $nextValid = 'valid' + $it.level;
-  var $schemaDeps = {},
-    $propertyDeps = {},
-    $ownProperties = it.opts.ownProperties;
-  for ($property in $schema) {
-    var $sch = $schema[$property];
-    var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;
-    $deps[$property] = $sch;
-  }
-  out += 'var ' + ($errs) + ' = errors;';
-  var $currentErrorPath = it.errorPath;
-  out += 'var missing' + ($lvl) + ';';
-  for (var $property in $propertyDeps) {
-    $deps = $propertyDeps[$property];
-    if ($deps.length) {
-      out += ' if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';
-      if ($ownProperties) {
-        out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($property)) + '\') ';
-      }
-      if ($breakOnError) {
-        out += ' && ( ';
-        var arr1 = $deps;
-        if (arr1) {
-          var $propertyKey, $i = -1,
-            l1 = arr1.length - 1;
-          while ($i < l1) {
-            $propertyKey = arr1[$i += 1];
-            if ($i) {
-              out += ' || ';
-            }
-            var $prop = it.util.getProperty($propertyKey),
-              $useData = $data + $prop;
-            out += ' ( ( ' + ($useData) + ' === undefined ';
-            if ($ownProperties) {
-              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
-            }
-            out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';
-          }
-        }
-        out += ')) {  ';
-        var $propertyPath = 'missing' + $lvl,
-          $missingProperty = '\' + ' + $propertyPath + ' + \'';
-        if (it.opts._errorDataPathProperty) {
-          it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;
-        }
-        var $$outStack = $$outStack || [];
-        $$outStack.push(out);
-        out = ''; /* istanbul ignore else */
-        if (it.createErrors !== false) {
-          out += ' { keyword: \'' + ('dependencies') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \'' + (it.util.escapeQuotes($property)) + '\', missingProperty: \'' + ($missingProperty) + '\', depsCount: ' + ($deps.length) + ', deps: \'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(", "))) + '\' } ';
-          if (it.opts.messages !== false) {
-            out += ' , message: \'should have ';
-            if ($deps.length == 1) {
-              out += 'property ' + (it.util.escapeQuotes($deps[0]));
-            } else {
-              out += 'properties ' + (it.util.escapeQuotes($deps.join(", ")));
-            }
-            out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\' ';
-          }
-          if (it.opts.verbose) {
-            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-          }
-          out += ' } ';
-        } else {
-          out += ' {} ';
-        }
-        var __err = out;
-        out = $$outStack.pop();
-        if (!it.compositeRule && $breakOnError) {
-          /* istanbul ignore if */
-          if (it.async) {
-            out += ' throw new ValidationError([' + (__err) + ']); ';
-          } else {
-            out += ' validate.errors = [' + (__err) + ']; return false; ';
-          }
-        } else {
-          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-        }
-      } else {
-        out += ' ) { ';
-        var arr2 = $deps;
-        if (arr2) {
-          var $propertyKey, i2 = -1,
-            l2 = arr2.length - 1;
-          while (i2 < l2) {
-            $propertyKey = arr2[i2 += 1];
-            var $prop = it.util.getProperty($propertyKey),
-              $missingProperty = it.util.escapeQuotes($propertyKey),
-              $useData = $data + $prop;
-            if (it.opts._errorDataPathProperty) {
-              it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);
-            }
-            out += ' if ( ' + ($useData) + ' === undefined ';
-            if ($ownProperties) {
-              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
-            }
-            out += ') {  var err =   '; /* istanbul ignore else */
-            if (it.createErrors !== false) {
-              out += ' { keyword: \'' + ('dependencies') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \'' + (it.util.escapeQuotes($property)) + '\', missingProperty: \'' + ($missingProperty) + '\', depsCount: ' + ($deps.length) + ', deps: \'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(", "))) + '\' } ';
-              if (it.opts.messages !== false) {
-                out += ' , message: \'should have ';
-                if ($deps.length == 1) {
-                  out += 'property ' + (it.util.escapeQuotes($deps[0]));
-                } else {
-                  out += 'properties ' + (it.util.escapeQuotes($deps.join(", ")));
-                }
-                out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\' ';
-              }
-              if (it.opts.verbose) {
-                out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-              }
-              out += ' } ';
-            } else {
-              out += ' {} ';
-            }
-            out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';
-          }
-        }
-      }
-      out += ' }   ';
-      if ($breakOnError) {
-        $closingBraces += '}';
-        out += ' else { ';
-      }
-    }
-  }
-  it.errorPath = $currentErrorPath;
-  var $currentBaseId = $it.baseId;
-  for (var $property in $schemaDeps) {
-    var $sch = $schemaDeps[$property];
-    if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {
-      out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';
-      if ($ownProperties) {
-        out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($property)) + '\') ';
-      }
-      out += ') { ';
-      $it.schema = $sch;
-      $it.schemaPath = $schemaPath + it.util.getProperty($property);
-      $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property);
-      out += '  ' + (it.validate($it)) + ' ';
-      $it.baseId = $currentBaseId;
-      out += ' }  ';
-      if ($breakOnError) {
-        out += ' if (' + ($nextValid) + ') { ';
-        $closingBraces += '}';
-      }
-    }
-  }
-  if ($breakOnError) {
-    out += '   ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
-  }
-  out = it.util.cleanUpCode(out);
-  return out;
-}
-
-},{}],24:[function(require,module,exports){
-'use strict';
-module.exports = function generate_enum(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $valid = 'valid' + $lvl;
-  var $isData = it.opts.$data && $schema && $schema.$data,
-    $schemaValue;
-  if ($isData) {
-    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
-    $schemaValue = 'schema' + $lvl;
-  } else {
-    $schemaValue = $schema;
-  }
-  var $i = 'i' + $lvl,
-    $vSchema = 'schema' + $lvl;
-  if (!$isData) {
-    out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';';
-  }
-  out += 'var ' + ($valid) + ';';
-  if ($isData) {
-    out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';
-  }
-  out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }';
-  if ($isData) {
-    out += '  }  ';
-  }
-  out += ' if (!' + ($valid) + ') {   ';
-  var $$outStack = $$outStack || [];
-  $$outStack.push(out);
-  out = ''; /* istanbul ignore else */
-  if (it.createErrors !== false) {
-    out += ' { keyword: \'' + ('enum') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } ';
-    if (it.opts.messages !== false) {
-      out += ' , message: \'should be equal to one of the allowed values\' ';
-    }
-    if (it.opts.verbose) {
-      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-    }
-    out += ' } ';
-  } else {
-    out += ' {} ';
-  }
-  var __err = out;
-  out = $$outStack.pop();
-  if (!it.compositeRule && $breakOnError) {
-    /* istanbul ignore if */
-    if (it.async) {
-      out += ' throw new ValidationError([' + (__err) + ']); ';
-    } else {
-      out += ' validate.errors = [' + (__err) + ']; return false; ';
-    }
-  } else {
-    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-  }
-  out += ' }';
-  if ($breakOnError) {
-    out += ' else { ';
-  }
-  return out;
-}
-
-},{}],25:[function(require,module,exports){
-'use strict';
-module.exports = function generate_format(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  if (it.opts.format === false) {
-    if ($breakOnError) {
-      out += ' if (true) { ';
-    }
-    return out;
-  }
-  var $isData = it.opts.$data && $schema && $schema.$data,
-    $schemaValue;
-  if ($isData) {
-    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
-    $schemaValue = 'schema' + $lvl;
-  } else {
-    $schemaValue = $schema;
-  }
-  var $unknownFormats = it.opts.unknownFormats,
-    $allowUnknown = Array.isArray($unknownFormats);
-  if ($isData) {
-    var $format = 'format' + $lvl,
-      $isObject = 'isObject' + $lvl,
-      $formatType = 'formatType' + $lvl;
-    out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \'object\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \'string\'; if (' + ($isObject) + ') { ';
-    if (it.async) {
-      out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; ';
-    }
-    out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if (  ';
-    if ($isData) {
-      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || ';
-    }
-    out += ' (';
-    if ($unknownFormats != 'ignore') {
-      out += ' (' + ($schemaValue) + ' && !' + ($format) + ' ';
-      if ($allowUnknown) {
-        out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 ';
-      }
-      out += ') || ';
-    }
-    out += ' (' + ($format) + ' && ' + ($formatType) + ' == \'' + ($ruleType) + '\' && !(typeof ' + ($format) + ' == \'function\' ? ';
-    if (it.async) {
-      out += ' (async' + ($lvl) + ' ? await ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) ';
-    } else {
-      out += ' ' + ($format) + '(' + ($data) + ') ';
-    }
-    out += ' : ' + ($format) + '.test(' + ($data) + '))))) {';
-  } else {
-    var $format = it.formats[$schema];
-    if (!$format) {
-      if ($unknownFormats == 'ignore') {
-        it.logger.warn('unknown format "' + $schema + '" ignored in schema at path "' + it.errSchemaPath + '"');
-        if ($breakOnError) {
-          out += ' if (true) { ';
-        }
-        return out;
-      } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) {
-        if ($breakOnError) {
-          out += ' if (true) { ';
-        }
-        return out;
-      } else {
-        throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"');
-      }
-    }
-    var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate;
-    var $formatType = $isObject && $format.type || 'string';
-    if ($isObject) {
-      var $async = $format.async === true;
-      $format = $format.validate;
-    }
-    if ($formatType != $ruleType) {
-      if ($breakOnError) {
-        out += ' if (true) { ';
-      }
-      return out;
-    }
-    if ($async) {
-      if (!it.async) throw new Error('async format in sync schema');
-      var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate';
-      out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { ';
-    } else {
-      out += ' if (! ';
-      var $formatRef = 'formats' + it.util.getProperty($schema);
-      if ($isObject) $formatRef += '.validate';
-      if (typeof $format == 'function') {
-        out += ' ' + ($formatRef) + '(' + ($data) + ') ';
-      } else {
-        out += ' ' + ($formatRef) + '.test(' + ($data) + ') ';
-      }
-      out += ') { ';
-    }
-  }
-  var $$outStack = $$outStack || [];
-  $$outStack.push(out);
-  out = ''; /* istanbul ignore else */
-  if (it.createErrors !== false) {
-    out += ' { keyword: \'' + ('format') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format:  ';
-    if ($isData) {
-      out += '' + ($schemaValue);
-    } else {
-      out += '' + (it.util.toQuotedString($schema));
-    }
-    out += '  } ';
-    if (it.opts.messages !== false) {
-      out += ' , message: \'should match format "';
-      if ($isData) {
-        out += '\' + ' + ($schemaValue) + ' + \'';
-      } else {
-        out += '' + (it.util.escapeQuotes($schema));
-      }
-      out += '"\' ';
-    }
-    if (it.opts.verbose) {
-      out += ' , schema:  ';
-      if ($isData) {
-        out += 'validate.schema' + ($schemaPath);
-      } else {
-        out += '' + (it.util.toQuotedString($schema));
-      }
-      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-    }
-    out += ' } ';
-  } else {
-    out += ' {} ';
-  }
-  var __err = out;
-  out = $$outStack.pop();
-  if (!it.compositeRule && $breakOnError) {
-    /* istanbul ignore if */
-    if (it.async) {
-      out += ' throw new ValidationError([' + (__err) + ']); ';
-    } else {
-      out += ' validate.errors = [' + (__err) + ']; return false; ';
-    }
-  } else {
-    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-  }
-  out += ' } ';
-  if ($breakOnError) {
-    out += ' else { ';
-  }
-  return out;
-}
-
-},{}],26:[function(require,module,exports){
-'use strict';
-module.exports = function generate_if(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $valid = 'valid' + $lvl;
-  var $errs = 'errs__' + $lvl;
-  var $it = it.util.copy(it);
-  $it.level++;
-  var $nextValid = 'valid' + $it.level;
-  var $thenSch = it.schema['then'],
-    $elseSch = it.schema['else'],
-    $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? typeof $thenSch == 'object' && Object.keys($thenSch).length > 0 : it.util.schemaHasRules($thenSch, it.RULES.all)),
-    $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? typeof $elseSch == 'object' && Object.keys($elseSch).length > 0 : it.util.schemaHasRules($elseSch, it.RULES.all)),
-    $currentBaseId = $it.baseId;
-  if ($thenPresent || $elsePresent) {
-    var $ifClause;
-    $it.createErrors = false;
-    $it.schema = $schema;
-    $it.schemaPath = $schemaPath;
-    $it.errSchemaPath = $errSchemaPath;
-    out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true;  ';
-    var $wasComposite = it.compositeRule;
-    it.compositeRule = $it.compositeRule = true;
-    out += '  ' + (it.validate($it)) + ' ';
-    $it.baseId = $currentBaseId;
-    $it.createErrors = true;
-    out += '  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }  ';
-    it.compositeRule = $it.compositeRule = $wasComposite;
-    if ($thenPresent) {
-      out += ' if (' + ($nextValid) + ') {  ';
-      $it.schema = it.schema['then'];
-      $it.schemaPath = it.schemaPath + '.then';
-      $it.errSchemaPath = it.errSchemaPath + '/then';
-      out += '  ' + (it.validate($it)) + ' ';
-      $it.baseId = $currentBaseId;
-      out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';
-      if ($thenPresent && $elsePresent) {
-        $ifClause = 'ifClause' + $lvl;
-        out += ' var ' + ($ifClause) + ' = \'then\'; ';
-      } else {
-        $ifClause = '\'then\'';
-      }
-      out += ' } ';
-      if ($elsePresent) {
-        out += ' else { ';
-      }
-    } else {
-      out += ' if (!' + ($nextValid) + ') { ';
-    }
-    if ($elsePresent) {
-      $it.schema = it.schema['else'];
-      $it.schemaPath = it.schemaPath + '.else';
-      $it.errSchemaPath = it.errSchemaPath + '/else';
-      out += '  ' + (it.validate($it)) + ' ';
-      $it.baseId = $currentBaseId;
-      out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';
-      if ($thenPresent && $elsePresent) {
-        $ifClause = 'ifClause' + $lvl;
-        out += ' var ' + ($ifClause) + ' = \'else\'; ';
-      } else {
-        $ifClause = '\'else\'';
-      }
-      out += ' } ';
-    }
-    out += ' if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */
-    if (it.createErrors !== false) {
-      out += ' { keyword: \'' + ('if') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } ';
-      if (it.opts.messages !== false) {
-        out += ' , message: \'should match "\' + ' + ($ifClause) + ' + \'" schema\' ';
-      }
-      if (it.opts.verbose) {
-        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-      }
-      out += ' } ';
-    } else {
-      out += ' {} ';
-    }
-    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-    if (!it.compositeRule && $breakOnError) {
-      /* istanbul ignore if */
-      if (it.async) {
-        out += ' throw new ValidationError(vErrors); ';
-      } else {
-        out += ' validate.errors = vErrors; return false; ';
-      }
-    }
-    out += ' }   ';
-    if ($breakOnError) {
-      out += ' else { ';
-    }
-    out = it.util.cleanUpCode(out);
-  } else {
-    if ($breakOnError) {
-      out += ' if (true) { ';
-    }
-  }
-  return out;
-}
-
-},{}],27:[function(require,module,exports){
-'use strict';
-
-//all requires must be explicit because browserify won't work with dynamic requires
-module.exports = {
-  '$ref': require('./ref'),
-  allOf: require('./allOf'),
-  anyOf: require('./anyOf'),
-  '$comment': require('./comment'),
-  const: require('./const'),
-  contains: require('./contains'),
-  dependencies: require('./dependencies'),
-  'enum': require('./enum'),
-  format: require('./format'),
-  'if': require('./if'),
-  items: require('./items'),
-  maximum: require('./_limit'),
-  minimum: require('./_limit'),
-  maxItems: require('./_limitItems'),
-  minItems: require('./_limitItems'),
-  maxLength: require('./_limitLength'),
-  minLength: require('./_limitLength'),
-  maxProperties: require('./_limitProperties'),
-  minProperties: require('./_limitProperties'),
-  multipleOf: require('./multipleOf'),
-  not: require('./not'),
-  oneOf: require('./oneOf'),
-  pattern: require('./pattern'),
-  properties: require('./properties'),
-  propertyNames: require('./propertyNames'),
-  required: require('./required'),
-  uniqueItems: require('./uniqueItems'),
-  validate: require('./validate')
-};
-
-},{"./_limit":13,"./_limitItems":14,"./_limitLength":15,"./_limitProperties":16,"./allOf":17,"./anyOf":18,"./comment":19,"./const":20,"./contains":21,"./dependencies":23,"./enum":24,"./format":25,"./if":26,"./items":28,"./multipleOf":29,"./not":30,"./oneOf":31,"./pattern":32,"./properties":33,"./propertyNames":34,"./ref":35,"./required":36,"./uniqueItems":37,"./validate":38}],28:[function(require,module,exports){
-'use strict';
-module.exports = function generate_items(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $valid = 'valid' + $lvl;
-  var $errs = 'errs__' + $lvl;
-  var $it = it.util.copy(it);
-  var $closingBraces = '';
-  $it.level++;
-  var $nextValid = 'valid' + $it.level;
-  var $idx = 'i' + $lvl,
-    $dataNxt = $it.dataLevel = it.dataLevel + 1,
-    $nextData = 'data' + $dataNxt,
-    $currentBaseId = it.baseId;
-  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';
-  if (Array.isArray($schema)) {
-    var $additionalItems = it.schema.additionalItems;
-    if ($additionalItems === false) {
-      out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; ';
-      var $currErrSchemaPath = $errSchemaPath;
-      $errSchemaPath = it.errSchemaPath + '/additionalItems';
-      out += '  if (!' + ($valid) + ') {   ';
-      var $$outStack = $$outStack || [];
-      $$outStack.push(out);
-      out = ''; /* istanbul ignore else */
-      if (it.createErrors !== false) {
-        out += ' { keyword: \'' + ('additionalItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } ';
-        if (it.opts.messages !== false) {
-          out += ' , message: \'should NOT have more than ' + ($schema.length) + ' items\' ';
-        }
-        if (it.opts.verbose) {
-          out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-        }
-        out += ' } ';
-      } else {
-        out += ' {} ';
-      }
-      var __err = out;
-      out = $$outStack.pop();
-      if (!it.compositeRule && $breakOnError) {
-        /* istanbul ignore if */
-        if (it.async) {
-          out += ' throw new ValidationError([' + (__err) + ']); ';
-        } else {
-          out += ' validate.errors = [' + (__err) + ']; return false; ';
-        }
-      } else {
-        out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-      }
-      out += ' } ';
-      $errSchemaPath = $currErrSchemaPath;
-      if ($breakOnError) {
-        $closingBraces += '}';
-        out += ' else { ';
-      }
-    }
-    var arr1 = $schema;
-    if (arr1) {
-      var $sch, $i = -1,
-        l1 = arr1.length - 1;
-      while ($i < l1) {
-        $sch = arr1[$i += 1];
-        if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {
-          out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { ';
-          var $passData = $data + '[' + $i + ']';
-          $it.schema = $sch;
-          $it.schemaPath = $schemaPath + '[' + $i + ']';
-          $it.errSchemaPath = $errSchemaPath + '/' + $i;
-          $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);
-          $it.dataPathArr[$dataNxt] = $i;
-          var $code = it.validate($it);
-          $it.baseId = $currentBaseId;
-          if (it.util.varOccurences($code, $nextData) < 2) {
-            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
-          } else {
-            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
-          }
-          out += ' }  ';
-          if ($breakOnError) {
-            out += ' if (' + ($nextValid) + ') { ';
-            $closingBraces += '}';
-          }
-        }
-      }
-    }
-    if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0 : it.util.schemaHasRules($additionalItems, it.RULES.all))) {
-      $it.schema = $additionalItems;
-      $it.schemaPath = it.schemaPath + '.additionalItems';
-      $it.errSchemaPath = it.errSchemaPath + '/additionalItems';
-      out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') {  for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';
-      $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);
-      var $passData = $data + '[' + $idx + ']';
-      $it.dataPathArr[$dataNxt] = $idx;
-      var $code = it.validate($it);
-      $it.baseId = $currentBaseId;
-      if (it.util.varOccurences($code, $nextData) < 2) {
-        out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
-      } else {
-        out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
-      }
-      if ($breakOnError) {
-        out += ' if (!' + ($nextValid) + ') break; ';
-      }
-      out += ' } }  ';
-      if ($breakOnError) {
-        out += ' if (' + ($nextValid) + ') { ';
-        $closingBraces += '}';
-      }
-    }
-  } else if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) {
-    $it.schema = $schema;
-    $it.schemaPath = $schemaPath;
-    $it.errSchemaPath = $errSchemaPath;
-    out += '  for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';
-    $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);
-    var $passData = $data + '[' + $idx + ']';
-    $it.dataPathArr[$dataNxt] = $idx;
-    var $code = it.validate($it);
-    $it.baseId = $currentBaseId;
-    if (it.util.varOccurences($code, $nextData) < 2) {
-      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
-    } else {
-      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
-    }
-    if ($breakOnError) {
-      out += ' if (!' + ($nextValid) + ') break; ';
-    }
-    out += ' }';
-  }
-  if ($breakOnError) {
-    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
-  }
-  out = it.util.cleanUpCode(out);
-  return out;
-}
-
-},{}],29:[function(require,module,exports){
-'use strict';
-module.exports = function generate_multipleOf(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $isData = it.opts.$data && $schema && $schema.$data,
-    $schemaValue;
-  if ($isData) {
-    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
-    $schemaValue = 'schema' + $lvl;
-  } else {
-    $schemaValue = $schema;
-  }
-  out += 'var division' + ($lvl) + ';if (';
-  if ($isData) {
-    out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \'number\' || ';
-  }
-  out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', ';
-  if (it.opts.multipleOfPrecision) {
-    out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' ';
-  } else {
-    out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') ';
-  }
-  out += ' ) ';
-  if ($isData) {
-    out += '  )  ';
-  }
-  out += ' ) {   ';
-  var $$outStack = $$outStack || [];
-  $$outStack.push(out);
-  out = ''; /* istanbul ignore else */
-  if (it.createErrors !== false) {
-    out += ' { keyword: \'' + ('multipleOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } ';
-    if (it.opts.messages !== false) {
-      out += ' , message: \'should be multiple of ';
-      if ($isData) {
-        out += '\' + ' + ($schemaValue);
-      } else {
-        out += '' + ($schemaValue) + '\'';
-      }
-    }
-    if (it.opts.verbose) {
-      out += ' , schema:  ';
-      if ($isData) {
-        out += 'validate.schema' + ($schemaPath);
-      } else {
-        out += '' + ($schema);
-      }
-      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-    }
-    out += ' } ';
-  } else {
-    out += ' {} ';
-  }
-  var __err = out;
-  out = $$outStack.pop();
-  if (!it.compositeRule && $breakOnError) {
-    /* istanbul ignore if */
-    if (it.async) {
-      out += ' throw new ValidationError([' + (__err) + ']); ';
-    } else {
-      out += ' validate.errors = [' + (__err) + ']; return false; ';
-    }
-  } else {
-    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-  }
-  out += '} ';
-  if ($breakOnError) {
-    out += ' else { ';
-  }
-  return out;
-}
-
-},{}],30:[function(require,module,exports){
-'use strict';
-module.exports = function generate_not(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $errs = 'errs__' + $lvl;
-  var $it = it.util.copy(it);
-  $it.level++;
-  var $nextValid = 'valid' + $it.level;
-  if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) {
-    $it.schema = $schema;
-    $it.schemaPath = $schemaPath;
-    $it.errSchemaPath = $errSchemaPath;
-    out += ' var ' + ($errs) + ' = errors;  ';
-    var $wasComposite = it.compositeRule;
-    it.compositeRule = $it.compositeRule = true;
-    $it.createErrors = false;
-    var $allErrorsOption;
-    if ($it.opts.allErrors) {
-      $allErrorsOption = $it.opts.allErrors;
-      $it.opts.allErrors = false;
-    }
-    out += ' ' + (it.validate($it)) + ' ';
-    $it.createErrors = true;
-    if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;
-    it.compositeRule = $it.compositeRule = $wasComposite;
-    out += ' if (' + ($nextValid) + ') {   ';
-    var $$outStack = $$outStack || [];
-    $$outStack.push(out);
-    out = ''; /* istanbul ignore else */
-    if (it.createErrors !== false) {
-      out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
-      if (it.opts.messages !== false) {
-        out += ' , message: \'should NOT be valid\' ';
-      }
-      if (it.opts.verbose) {
-        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-      }
-      out += ' } ';
-    } else {
-      out += ' {} ';
-    }
-    var __err = out;
-    out = $$outStack.pop();
-    if (!it.compositeRule && $breakOnError) {
-      /* istanbul ignore if */
-      if (it.async) {
-        out += ' throw new ValidationError([' + (__err) + ']); ';
-      } else {
-        out += ' validate.errors = [' + (__err) + ']; return false; ';
-      }
-    } else {
-      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-    }
-    out += ' } else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';
-    if (it.opts.allErrors) {
-      out += ' } ';
-    }
-  } else {
-    out += '  var err =   '; /* istanbul ignore else */
-    if (it.createErrors !== false) {
-      out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
-      if (it.opts.messages !== false) {
-        out += ' , message: \'should NOT be valid\' ';
-      }
-      if (it.opts.verbose) {
-        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-      }
-      out += ' } ';
-    } else {
-      out += ' {} ';
-    }
-    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-    if ($breakOnError) {
-      out += ' if (false) { ';
-    }
-  }
-  return out;
-}
-
-},{}],31:[function(require,module,exports){
-'use strict';
-module.exports = function generate_oneOf(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $valid = 'valid' + $lvl;
-  var $errs = 'errs__' + $lvl;
-  var $it = it.util.copy(it);
-  var $closingBraces = '';
-  $it.level++;
-  var $nextValid = 'valid' + $it.level;
-  var $currentBaseId = $it.baseId,
-    $prevValid = 'prevValid' + $lvl,
-    $passingSchemas = 'passingSchemas' + $lvl;
-  out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; ';
-  var $wasComposite = it.compositeRule;
-  it.compositeRule = $it.compositeRule = true;
-  var arr1 = $schema;
-  if (arr1) {
-    var $sch, $i = -1,
-      l1 = arr1.length - 1;
-    while ($i < l1) {
-      $sch = arr1[$i += 1];
-      if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {
-        $it.schema = $sch;
-        $it.schemaPath = $schemaPath + '[' + $i + ']';
-        $it.errSchemaPath = $errSchemaPath + '/' + $i;
-        out += '  ' + (it.validate($it)) + ' ';
-        $it.baseId = $currentBaseId;
-      } else {
-        out += ' var ' + ($nextValid) + ' = true; ';
-      }
-      if ($i) {
-        out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { ';
-        $closingBraces += '}';
-      }
-      out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }';
-    }
-  }
-  it.compositeRule = $it.compositeRule = $wasComposite;
-  out += '' + ($closingBraces) + 'if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */
-  if (it.createErrors !== false) {
-    out += ' { keyword: \'' + ('oneOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } ';
-    if (it.opts.messages !== false) {
-      out += ' , message: \'should match exactly one schema in oneOf\' ';
-    }
-    if (it.opts.verbose) {
-      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-    }
-    out += ' } ';
-  } else {
-    out += ' {} ';
-  }
-  out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-  if (!it.compositeRule && $breakOnError) {
-    /* istanbul ignore if */
-    if (it.async) {
-      out += ' throw new ValidationError(vErrors); ';
-    } else {
-      out += ' validate.errors = vErrors; return false; ';
-    }
-  }
-  out += '} else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }';
-  if (it.opts.allErrors) {
-    out += ' } ';
-  }
-  return out;
-}
-
-},{}],32:[function(require,module,exports){
-'use strict';
-module.exports = function generate_pattern(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $isData = it.opts.$data && $schema && $schema.$data,
-    $schemaValue;
-  if ($isData) {
-    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
-    $schemaValue = 'schema' + $lvl;
-  } else {
-    $schemaValue = $schema;
-  }
-  var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema);
-  out += 'if ( ';
-  if ($isData) {
-    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || ';
-  }
-  out += ' !' + ($regexp) + '.test(' + ($data) + ') ) {   ';
-  var $$outStack = $$outStack || [];
-  $$outStack.push(out);
-  out = ''; /* istanbul ignore else */
-  if (it.createErrors !== false) {
-    out += ' { keyword: \'' + ('pattern') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern:  ';
-    if ($isData) {
-      out += '' + ($schemaValue);
-    } else {
-      out += '' + (it.util.toQuotedString($schema));
-    }
-    out += '  } ';
-    if (it.opts.messages !== false) {
-      out += ' , message: \'should match pattern "';
-      if ($isData) {
-        out += '\' + ' + ($schemaValue) + ' + \'';
-      } else {
-        out += '' + (it.util.escapeQuotes($schema));
-      }
-      out += '"\' ';
-    }
-    if (it.opts.verbose) {
-      out += ' , schema:  ';
-      if ($isData) {
-        out += 'validate.schema' + ($schemaPath);
-      } else {
-        out += '' + (it.util.toQuotedString($schema));
-      }
-      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-    }
-    out += ' } ';
-  } else {
-    out += ' {} ';
-  }
-  var __err = out;
-  out = $$outStack.pop();
-  if (!it.compositeRule && $breakOnError) {
-    /* istanbul ignore if */
-    if (it.async) {
-      out += ' throw new ValidationError([' + (__err) + ']); ';
-    } else {
-      out += ' validate.errors = [' + (__err) + ']; return false; ';
-    }
-  } else {
-    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-  }
-  out += '} ';
-  if ($breakOnError) {
-    out += ' else { ';
-  }
-  return out;
-}
-
-},{}],33:[function(require,module,exports){
-'use strict';
-module.exports = function generate_properties(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $errs = 'errs__' + $lvl;
-  var $it = it.util.copy(it);
-  var $closingBraces = '';
-  $it.level++;
-  var $nextValid = 'valid' + $it.level;
-  var $key = 'key' + $lvl,
-    $idx = 'idx' + $lvl,
-    $dataNxt = $it.dataLevel = it.dataLevel + 1,
-    $nextData = 'data' + $dataNxt,
-    $dataProperties = 'dataProperties' + $lvl;
-  var $schemaKeys = Object.keys($schema || {}),
-    $pProperties = it.schema.patternProperties || {},
-    $pPropertyKeys = Object.keys($pProperties),
-    $aProperties = it.schema.additionalProperties,
-    $someProperties = $schemaKeys.length || $pPropertyKeys.length,
-    $noAdditional = $aProperties === false,
-    $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length,
-    $removeAdditional = it.opts.removeAdditional,
-    $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional,
-    $ownProperties = it.opts.ownProperties,
-    $currentBaseId = it.baseId;
-  var $required = it.schema.required;
-  if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required);
-  out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;';
-  if ($ownProperties) {
-    out += ' var ' + ($dataProperties) + ' = undefined;';
-  }
-  if ($checkAdditional) {
-    if ($ownProperties) {
-      out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';
-    } else {
-      out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';
-    }
-    if ($someProperties) {
-      out += ' var isAdditional' + ($lvl) + ' = !(false ';
-      if ($schemaKeys.length) {
-        if ($schemaKeys.length > 8) {
-          out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') ';
-        } else {
-          var arr1 = $schemaKeys;
-          if (arr1) {
-            var $propertyKey, i1 = -1,
-              l1 = arr1.length - 1;
-            while (i1 < l1) {
-              $propertyKey = arr1[i1 += 1];
-              out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' ';
-            }
-          }
-        }
-      }
-      if ($pPropertyKeys.length) {
-        var arr2 = $pPropertyKeys;
-        if (arr2) {
-          var $pProperty, $i = -1,
-            l2 = arr2.length - 1;
-          while ($i < l2) {
-            $pProperty = arr2[$i += 1];
-            out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') ';
-          }
-        }
-      }
-      out += ' ); if (isAdditional' + ($lvl) + ') { ';
-    }
-    if ($removeAdditional == 'all') {
-      out += ' delete ' + ($data) + '[' + ($key) + ']; ';
-    } else {
-      var $currentErrorPath = it.errorPath;
-      var $additionalProperty = '\' + ' + $key + ' + \'';
-      if (it.opts._errorDataPathProperty) {
-        it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
-      }
-      if ($noAdditional) {
-        if ($removeAdditional) {
-          out += ' delete ' + ($data) + '[' + ($key) + ']; ';
-        } else {
-          out += ' ' + ($nextValid) + ' = false; ';
-          var $currErrSchemaPath = $errSchemaPath;
-          $errSchemaPath = it.errSchemaPath + '/additionalProperties';
-          var $$outStack = $$outStack || [];
-          $$outStack.push(out);
-          out = ''; /* istanbul ignore else */
-          if (it.createErrors !== false) {
-            out += ' { keyword: \'' + ('additionalProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \'' + ($additionalProperty) + '\' } ';
-            if (it.opts.messages !== false) {
-              out += ' , message: \'';
-              if (it.opts._errorDataPathProperty) {
-                out += 'is an invalid additional property';
-              } else {
-                out += 'should NOT have additional properties';
-              }
-              out += '\' ';
-            }
-            if (it.opts.verbose) {
-              out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-            }
-            out += ' } ';
-          } else {
-            out += ' {} ';
-          }
-          var __err = out;
-          out = $$outStack.pop();
-          if (!it.compositeRule && $breakOnError) {
-            /* istanbul ignore if */
-            if (it.async) {
-              out += ' throw new ValidationError([' + (__err) + ']); ';
-            } else {
-              out += ' validate.errors = [' + (__err) + ']; return false; ';
-            }
-          } else {
-            out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-          }
-          $errSchemaPath = $currErrSchemaPath;
-          if ($breakOnError) {
-            out += ' break; ';
-          }
-        }
-      } else if ($additionalIsSchema) {
-        if ($removeAdditional == 'failing') {
-          out += ' var ' + ($errs) + ' = errors;  ';
-          var $wasComposite = it.compositeRule;
-          it.compositeRule = $it.compositeRule = true;
-          $it.schema = $aProperties;
-          $it.schemaPath = it.schemaPath + '.additionalProperties';
-          $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';
-          $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
-          var $passData = $data + '[' + $key + ']';
-          $it.dataPathArr[$dataNxt] = $key;
-          var $code = it.validate($it);
-          $it.baseId = $currentBaseId;
-          if (it.util.varOccurences($code, $nextData) < 2) {
-            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
-          } else {
-            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
-          }
-          out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; }  ';
-          it.compositeRule = $it.compositeRule = $wasComposite;
-        } else {
-          $it.schema = $aProperties;
-          $it.schemaPath = it.schemaPath + '.additionalProperties';
-          $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';
-          $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
-          var $passData = $data + '[' + $key + ']';
-          $it.dataPathArr[$dataNxt] = $key;
-          var $code = it.validate($it);
-          $it.baseId = $currentBaseId;
-          if (it.util.varOccurences($code, $nextData) < 2) {
-            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
-          } else {
-            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
-          }
-          if ($breakOnError) {
-            out += ' if (!' + ($nextValid) + ') break; ';
-          }
-        }
-      }
-      it.errorPath = $currentErrorPath;
-    }
-    if ($someProperties) {
-      out += ' } ';
-    }
-    out += ' }  ';
-    if ($breakOnError) {
-      out += ' if (' + ($nextValid) + ') { ';
-      $closingBraces += '}';
-    }
-  }
-  var $useDefaults = it.opts.useDefaults && !it.compositeRule;
-  if ($schemaKeys.length) {
-    var arr3 = $schemaKeys;
-    if (arr3) {
-      var $propertyKey, i3 = -1,
-        l3 = arr3.length - 1;
-      while (i3 < l3) {
-        $propertyKey = arr3[i3 += 1];
-        var $sch = $schema[$propertyKey];
-        if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {
-          var $prop = it.util.getProperty($propertyKey),
-            $passData = $data + $prop,
-            $hasDefault = $useDefaults && $sch.default !== undefined;
-          $it.schema = $sch;
-          $it.schemaPath = $schemaPath + $prop;
-          $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey);
-          $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);
-          $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);
-          var $code = it.validate($it);
-          $it.baseId = $currentBaseId;
-          if (it.util.varOccurences($code, $nextData) < 2) {
-            $code = it.util.varReplace($code, $nextData, $passData);
-            var $useData = $passData;
-          } else {
-            var $useData = $nextData;
-            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ';
-          }
-          if ($hasDefault) {
-            out += ' ' + ($code) + ' ';
-          } else {
-            if ($requiredHash && $requiredHash[$propertyKey]) {
-              out += ' if ( ' + ($useData) + ' === undefined ';
-              if ($ownProperties) {
-                out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
-              }
-              out += ') { ' + ($nextValid) + ' = false; ';
-              var $currentErrorPath = it.errorPath,
-                $currErrSchemaPath = $errSchemaPath,
-                $missingProperty = it.util.escapeQuotes($propertyKey);
-              if (it.opts._errorDataPathProperty) {
-                it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);
-              }
-              $errSchemaPath = it.errSchemaPath + '/required';
-              var $$outStack = $$outStack || [];
-              $$outStack.push(out);
-              out = ''; /* istanbul ignore else */
-              if (it.createErrors !== false) {
-                out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
-                if (it.opts.messages !== false) {
-                  out += ' , message: \'';
-                  if (it.opts._errorDataPathProperty) {
-                    out += 'is a required property';
-                  } else {
-                    out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
-                  }
-                  out += '\' ';
-                }
-                if (it.opts.verbose) {
-                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-                }
-                out += ' } ';
-              } else {
-                out += ' {} ';
-              }
-              var __err = out;
-              out = $$outStack.pop();
-              if (!it.compositeRule && $breakOnError) {
-                /* istanbul ignore if */
-                if (it.async) {
-                  out += ' throw new ValidationError([' + (__err) + ']); ';
-                } else {
-                  out += ' validate.errors = [' + (__err) + ']; return false; ';
-                }
-              } else {
-                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-              }
-              $errSchemaPath = $currErrSchemaPath;
-              it.errorPath = $currentErrorPath;
-              out += ' } else { ';
-            } else {
-              if ($breakOnError) {
-                out += ' if ( ' + ($useData) + ' === undefined ';
-                if ($ownProperties) {
-                  out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
-                }
-                out += ') { ' + ($nextValid) + ' = true; } else { ';
-              } else {
-                out += ' if (' + ($useData) + ' !== undefined ';
-                if ($ownProperties) {
-                  out += ' &&   Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
-                }
-                out += ' ) { ';
-              }
-            }
-            out += ' ' + ($code) + ' } ';
-          }
-        }
-        if ($breakOnError) {
-          out += ' if (' + ($nextValid) + ') { ';
-          $closingBraces += '}';
-        }
-      }
-    }
-  }
-  if ($pPropertyKeys.length) {
-    var arr4 = $pPropertyKeys;
-    if (arr4) {
-      var $pProperty, i4 = -1,
-        l4 = arr4.length - 1;
-      while (i4 < l4) {
-        $pProperty = arr4[i4 += 1];
-        var $sch = $pProperties[$pProperty];
-        if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {
-          $it.schema = $sch;
-          $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);
-          $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);
-          if ($ownProperties) {
-            out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';
-          } else {
-            out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';
-          }
-          out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { ';
-          $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
-          var $passData = $data + '[' + $key + ']';
-          $it.dataPathArr[$dataNxt] = $key;
-          var $code = it.validate($it);
-          $it.baseId = $currentBaseId;
-          if (it.util.varOccurences($code, $nextData) < 2) {
-            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
-          } else {
-            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
-          }
-          if ($breakOnError) {
-            out += ' if (!' + ($nextValid) + ') break; ';
-          }
-          out += ' } ';
-          if ($breakOnError) {
-            out += ' else ' + ($nextValid) + ' = true; ';
-          }
-          out += ' }  ';
-          if ($breakOnError) {
-            out += ' if (' + ($nextValid) + ') { ';
-            $closingBraces += '}';
-          }
-        }
-      }
-    }
-  }
-  if ($breakOnError) {
-    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
-  }
-  out = it.util.cleanUpCode(out);
-  return out;
-}
-
-},{}],34:[function(require,module,exports){
-'use strict';
-module.exports = function generate_propertyNames(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $errs = 'errs__' + $lvl;
-  var $it = it.util.copy(it);
-  var $closingBraces = '';
-  $it.level++;
-  var $nextValid = 'valid' + $it.level;
-  out += 'var ' + ($errs) + ' = errors;';
-  if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) {
-    $it.schema = $schema;
-    $it.schemaPath = $schemaPath;
-    $it.errSchemaPath = $errSchemaPath;
-    var $key = 'key' + $lvl,
-      $idx = 'idx' + $lvl,
-      $i = 'i' + $lvl,
-      $invalidName = '\' + ' + $key + ' + \'',
-      $dataNxt = $it.dataLevel = it.dataLevel + 1,
-      $nextData = 'data' + $dataNxt,
-      $dataProperties = 'dataProperties' + $lvl,
-      $ownProperties = it.opts.ownProperties,
-      $currentBaseId = it.baseId;
-    if ($ownProperties) {
-      out += ' var ' + ($dataProperties) + ' = undefined; ';
-    }
-    if ($ownProperties) {
-      out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';
-    } else {
-      out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';
-    }
-    out += ' var startErrs' + ($lvl) + ' = errors; ';
-    var $passData = $key;
-    var $wasComposite = it.compositeRule;
-    it.compositeRule = $it.compositeRule = true;
-    var $code = it.validate($it);
-    $it.baseId = $currentBaseId;
-    if (it.util.varOccurences($code, $nextData) < 2) {
-      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
-    } else {
-      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
-    }
-    it.compositeRule = $it.compositeRule = $wasComposite;
-    out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + '<errors; ' + ($i) + '++) { vErrors[' + ($i) + '].propertyName = ' + ($key) + '; }   var err =   '; /* istanbul ignore else */
-    if (it.createErrors !== false) {
-      out += ' { keyword: \'' + ('propertyNames') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { propertyName: \'' + ($invalidName) + '\' } ';
-      if (it.opts.messages !== false) {
-        out += ' , message: \'property name \\\'' + ($invalidName) + '\\\' is invalid\' ';
-      }
-      if (it.opts.verbose) {
-        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-      }
-      out += ' } ';
-    } else {
-      out += ' {} ';
-    }
-    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-    if (!it.compositeRule && $breakOnError) {
-      /* istanbul ignore if */
-      if (it.async) {
-        out += ' throw new ValidationError(vErrors); ';
-      } else {
-        out += ' validate.errors = vErrors; return false; ';
-      }
-    }
-    if ($breakOnError) {
-      out += ' break; ';
-    }
-    out += ' } }';
-  }
-  if ($breakOnError) {
-    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
-  }
-  out = it.util.cleanUpCode(out);
-  return out;
-}
-
-},{}],35:[function(require,module,exports){
-'use strict';
-module.exports = function generate_ref(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $valid = 'valid' + $lvl;
-  var $async, $refCode;
-  if ($schema == '#' || $schema == '#/') {
-    if (it.isRoot) {
-      $async = it.async;
-      $refCode = 'validate';
-    } else {
-      $async = it.root.schema.$async === true;
-      $refCode = 'root.refVal[0]';
-    }
-  } else {
-    var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);
-    if ($refVal === undefined) {
-      var $message = it.MissingRefError.message(it.baseId, $schema);
-      if (it.opts.missingRefs == 'fail') {
-        it.logger.error($message);
-        var $$outStack = $$outStack || [];
-        $$outStack.push(out);
-        out = ''; /* istanbul ignore else */
-        if (it.createErrors !== false) {
-          out += ' { keyword: \'' + ('$ref') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { ref: \'' + (it.util.escapeQuotes($schema)) + '\' } ';
-          if (it.opts.messages !== false) {
-            out += ' , message: \'can\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\' ';
-          }
-          if (it.opts.verbose) {
-            out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-          }
-          out += ' } ';
-        } else {
-          out += ' {} ';
-        }
-        var __err = out;
-        out = $$outStack.pop();
-        if (!it.compositeRule && $breakOnError) {
-          /* istanbul ignore if */
-          if (it.async) {
-            out += ' throw new ValidationError([' + (__err) + ']); ';
-          } else {
-            out += ' validate.errors = [' + (__err) + ']; return false; ';
-          }
-        } else {
-          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-        }
-        if ($breakOnError) {
-          out += ' if (false) { ';
-        }
-      } else if (it.opts.missingRefs == 'ignore') {
-        it.logger.warn($message);
-        if ($breakOnError) {
-          out += ' if (true) { ';
-        }
-      } else {
-        throw new it.MissingRefError(it.baseId, $schema, $message);
-      }
-    } else if ($refVal.inline) {
-      var $it = it.util.copy(it);
-      $it.level++;
-      var $nextValid = 'valid' + $it.level;
-      $it.schema = $refVal.schema;
-      $it.schemaPath = '';
-      $it.errSchemaPath = $schema;
-      var $code = it.validate($it).replace(/validate\.schema/g, $refVal.code);
-      out += ' ' + ($code) + ' ';
-      if ($breakOnError) {
-        out += ' if (' + ($nextValid) + ') { ';
-      }
-    } else {
-      $async = $refVal.$async === true || (it.async && $refVal.$async !== false);
-      $refCode = $refVal.code;
-    }
-  }
-  if ($refCode) {
-    var $$outStack = $$outStack || [];
-    $$outStack.push(out);
-    out = '';
-    if (it.opts.passContext) {
-      out += ' ' + ($refCode) + '.call(this, ';
-    } else {
-      out += ' ' + ($refCode) + '( ';
-    }
-    out += ' ' + ($data) + ', (dataPath || \'\')';
-    if (it.errorPath != '""') {
-      out += ' + ' + (it.errorPath);
-    }
-    var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',
-      $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';
-    out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ', rootData)  ';
-    var __callValidate = out;
-    out = $$outStack.pop();
-    if ($async) {
-      if (!it.async) throw new Error('async schema referenced by sync schema');
-      if ($breakOnError) {
-        out += ' var ' + ($valid) + '; ';
-      }
-      out += ' try { await ' + (__callValidate) + '; ';
-      if ($breakOnError) {
-        out += ' ' + ($valid) + ' = true; ';
-      }
-      out += ' } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ';
-      if ($breakOnError) {
-        out += ' ' + ($valid) + ' = false; ';
-      }
-      out += ' } ';
-      if ($breakOnError) {
-        out += ' if (' + ($valid) + ') { ';
-      }
-    } else {
-      out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } ';
-      if ($breakOnError) {
-        out += ' else { ';
-      }
-    }
-  }
-  return out;
-}
-
-},{}],36:[function(require,module,exports){
-'use strict';
-module.exports = function generate_required(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $valid = 'valid' + $lvl;
-  var $isData = it.opts.$data && $schema && $schema.$data,
-    $schemaValue;
-  if ($isData) {
-    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
-    $schemaValue = 'schema' + $lvl;
-  } else {
-    $schemaValue = $schema;
-  }
-  var $vSchema = 'schema' + $lvl;
-  if (!$isData) {
-    if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) {
-      var $required = [];
-      var arr1 = $schema;
-      if (arr1) {
-        var $property, i1 = -1,
-          l1 = arr1.length - 1;
-        while (i1 < l1) {
-          $property = arr1[i1 += 1];
-          var $propertySch = it.schema.properties[$property];
-          if (!($propertySch && (it.opts.strictKeywords ? typeof $propertySch == 'object' && Object.keys($propertySch).length > 0 : it.util.schemaHasRules($propertySch, it.RULES.all)))) {
-            $required[$required.length] = $property;
-          }
-        }
-      }
-    } else {
-      var $required = $schema;
-    }
-  }
-  if ($isData || $required.length) {
-    var $currentErrorPath = it.errorPath,
-      $loopRequired = $isData || $required.length >= it.opts.loopRequired,
-      $ownProperties = it.opts.ownProperties;
-    if ($breakOnError) {
-      out += ' var missing' + ($lvl) + '; ';
-      if ($loopRequired) {
-        if (!$isData) {
-          out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';
-        }
-        var $i = 'i' + $lvl,
-          $propertyPath = 'schema' + $lvl + '[' + $i + ']',
-          $missingProperty = '\' + ' + $propertyPath + ' + \'';
-        if (it.opts._errorDataPathProperty) {
-          it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);
-        }
-        out += ' var ' + ($valid) + ' = true; ';
-        if ($isData) {
-          out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';
-        }
-        out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined ';
-        if ($ownProperties) {
-          out += ' &&   Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';
-        }
-        out += '; if (!' + ($valid) + ') break; } ';
-        if ($isData) {
-          out += '  }  ';
-        }
-        out += '  if (!' + ($valid) + ') {   ';
-        var $$outStack = $$outStack || [];
-        $$outStack.push(out);
-        out = ''; /* istanbul ignore else */
-        if (it.createErrors !== false) {
-          out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
-          if (it.opts.messages !== false) {
-            out += ' , message: \'';
-            if (it.opts._errorDataPathProperty) {
-              out += 'is a required property';
-            } else {
-              out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
-            }
-            out += '\' ';
-          }
-          if (it.opts.verbose) {
-            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-          }
-          out += ' } ';
-        } else {
-          out += ' {} ';
-        }
-        var __err = out;
-        out = $$outStack.pop();
-        if (!it.compositeRule && $breakOnError) {
-          /* istanbul ignore if */
-          if (it.async) {
-            out += ' throw new ValidationError([' + (__err) + ']); ';
-          } else {
-            out += ' validate.errors = [' + (__err) + ']; return false; ';
-          }
-        } else {
-          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-        }
-        out += ' } else { ';
-      } else {
-        out += ' if ( ';
-        var arr2 = $required;
-        if (arr2) {
-          var $propertyKey, $i = -1,
-            l2 = arr2.length - 1;
-          while ($i < l2) {
-            $propertyKey = arr2[$i += 1];
-            if ($i) {
-              out += ' || ';
-            }
-            var $prop = it.util.getProperty($propertyKey),
-              $useData = $data + $prop;
-            out += ' ( ( ' + ($useData) + ' === undefined ';
-            if ($ownProperties) {
-              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
-            }
-            out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';
-          }
-        }
-        out += ') {  ';
-        var $propertyPath = 'missing' + $lvl,
-          $missingProperty = '\' + ' + $propertyPath + ' + \'';
-        if (it.opts._errorDataPathProperty) {
-          it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;
-        }
-        var $$outStack = $$outStack || [];
-        $$outStack.push(out);
-        out = ''; /* istanbul ignore else */
-        if (it.createErrors !== false) {
-          out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
-          if (it.opts.messages !== false) {
-            out += ' , message: \'';
-            if (it.opts._errorDataPathProperty) {
-              out += 'is a required property';
-            } else {
-              out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
-            }
-            out += '\' ';
-          }
-          if (it.opts.verbose) {
-            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-          }
-          out += ' } ';
-        } else {
-          out += ' {} ';
-        }
-        var __err = out;
-        out = $$outStack.pop();
-        if (!it.compositeRule && $breakOnError) {
-          /* istanbul ignore if */
-          if (it.async) {
-            out += ' throw new ValidationError([' + (__err) + ']); ';
-          } else {
-            out += ' validate.errors = [' + (__err) + ']; return false; ';
-          }
-        } else {
-          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-        }
-        out += ' } else { ';
-      }
-    } else {
-      if ($loopRequired) {
-        if (!$isData) {
-          out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';
-        }
-        var $i = 'i' + $lvl,
-          $propertyPath = 'schema' + $lvl + '[' + $i + ']',
-          $missingProperty = '\' + ' + $propertyPath + ' + \'';
-        if (it.opts._errorDataPathProperty) {
-          it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);
-        }
-        if ($isData) {
-          out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) {  var err =   '; /* istanbul ignore else */
-          if (it.createErrors !== false) {
-            out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
-            if (it.opts.messages !== false) {
-              out += ' , message: \'';
-              if (it.opts._errorDataPathProperty) {
-                out += 'is a required property';
-              } else {
-                out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
-              }
-              out += '\' ';
-            }
-            if (it.opts.verbose) {
-              out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-            }
-            out += ' } ';
-          } else {
-            out += ' {} ';
-          }
-          out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { ';
-        }
-        out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined ';
-        if ($ownProperties) {
-          out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';
-        }
-        out += ') {  var err =   '; /* istanbul ignore else */
-        if (it.createErrors !== false) {
-          out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
-          if (it.opts.messages !== false) {
-            out += ' , message: \'';
-            if (it.opts._errorDataPathProperty) {
-              out += 'is a required property';
-            } else {
-              out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
-            }
-            out += '\' ';
-          }
-          if (it.opts.verbose) {
-            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-          }
-          out += ' } ';
-        } else {
-          out += ' {} ';
-        }
-        out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';
-        if ($isData) {
-          out += '  }  ';
-        }
-      } else {
-        var arr3 = $required;
-        if (arr3) {
-          var $propertyKey, i3 = -1,
-            l3 = arr3.length - 1;
-          while (i3 < l3) {
-            $propertyKey = arr3[i3 += 1];
-            var $prop = it.util.getProperty($propertyKey),
-              $missingProperty = it.util.escapeQuotes($propertyKey),
-              $useData = $data + $prop;
-            if (it.opts._errorDataPathProperty) {
-              it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);
-            }
-            out += ' if ( ' + ($useData) + ' === undefined ';
-            if ($ownProperties) {
-              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
-            }
-            out += ') {  var err =   '; /* istanbul ignore else */
-            if (it.createErrors !== false) {
-              out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
-              if (it.opts.messages !== false) {
-                out += ' , message: \'';
-                if (it.opts._errorDataPathProperty) {
-                  out += 'is a required property';
-                } else {
-                  out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
-                }
-                out += '\' ';
-              }
-              if (it.opts.verbose) {
-                out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-              }
-              out += ' } ';
-            } else {
-              out += ' {} ';
-            }
-            out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';
-          }
-        }
-      }
-    }
-    it.errorPath = $currentErrorPath;
-  } else if ($breakOnError) {
-    out += ' if (true) {';
-  }
-  return out;
-}
-
-},{}],37:[function(require,module,exports){
-'use strict';
-module.exports = function generate_uniqueItems(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $lvl = it.level;
-  var $dataLvl = it.dataLevel;
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $data = 'data' + ($dataLvl || '');
-  var $valid = 'valid' + $lvl;
-  var $isData = it.opts.$data && $schema && $schema.$data,
-    $schemaValue;
-  if ($isData) {
-    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
-    $schemaValue = 'schema' + $lvl;
-  } else {
-    $schemaValue = $schema;
-  }
-  if (($schema || $isData) && it.opts.uniqueItems !== false) {
-    if ($isData) {
-      out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'boolean\') ' + ($valid) + ' = false; else { ';
-    }
-    out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { ';
-    var $itemType = it.schema.items && it.schema.items.type,
-      $typeIsArray = Array.isArray($itemType);
-    if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) {
-      out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } ';
-    } else {
-      out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; ';
-      var $method = 'checkDataType' + ($typeIsArray ? 's' : '');
-      out += ' if (' + (it.util[$method]($itemType, 'item', true)) + ') continue; ';
-      if ($typeIsArray) {
-        out += ' if (typeof item == \'string\') item = \'"\' + item; ';
-      }
-      out += ' if (typeof itemIndices[item] == \'number\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } ';
-    }
-    out += ' } ';
-    if ($isData) {
-      out += '  }  ';
-    }
-    out += ' if (!' + ($valid) + ') {   ';
-    var $$outStack = $$outStack || [];
-    $$outStack.push(out);
-    out = ''; /* istanbul ignore else */
-    if (it.createErrors !== false) {
-      out += ' { keyword: \'' + ('uniqueItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } ';
-      if (it.opts.messages !== false) {
-        out += ' , message: \'should NOT have duplicate items (items ## \' + j + \' and \' + i + \' are identical)\' ';
-      }
-      if (it.opts.verbose) {
-        out += ' , schema:  ';
-        if ($isData) {
-          out += 'validate.schema' + ($schemaPath);
-        } else {
-          out += '' + ($schema);
-        }
-        out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-      }
-      out += ' } ';
-    } else {
-      out += ' {} ';
-    }
-    var __err = out;
-    out = $$outStack.pop();
-    if (!it.compositeRule && $breakOnError) {
-      /* istanbul ignore if */
-      if (it.async) {
-        out += ' throw new ValidationError([' + (__err) + ']); ';
-      } else {
-        out += ' validate.errors = [' + (__err) + ']; return false; ';
-      }
-    } else {
-      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-    }
-    out += ' } ';
-    if ($breakOnError) {
-      out += ' else { ';
-    }
-  } else {
-    if ($breakOnError) {
-      out += ' if (true) { ';
-    }
-  }
-  return out;
-}
-
-},{}],38:[function(require,module,exports){
-'use strict';
-module.exports = function generate_validate(it, $keyword, $ruleType) {
-  var out = '';
-  var $async = it.schema.$async === true,
-    $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'),
-    $id = it.self._getId(it.schema);
-  if (it.opts.strictKeywords) {
-    var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords);
-    if ($unknownKwd) {
-      var $keywordsMsg = 'unknown keyword: ' + $unknownKwd;
-      if (it.opts.strictKeywords === 'log') it.logger.warn($keywordsMsg);
-      else throw new Error($keywordsMsg);
-    }
-  }
-  if (it.isTop) {
-    out += ' var validate = ';
-    if ($async) {
-      it.async = true;
-      out += 'async ';
-    }
-    out += 'function(data, dataPath, parentData, parentDataProperty, rootData) { \'use strict\'; ';
-    if ($id && (it.opts.sourceCode || it.opts.processCode)) {
-      out += ' ' + ('/\*# sourceURL=' + $id + ' */') + ' ';
-    }
-  }
-  if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) {
-    var $keyword = 'false schema';
-    var $lvl = it.level;
-    var $dataLvl = it.dataLevel;
-    var $schema = it.schema[$keyword];
-    var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-    var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-    var $breakOnError = !it.opts.allErrors;
-    var $errorKeyword;
-    var $data = 'data' + ($dataLvl || '');
-    var $valid = 'valid' + $lvl;
-    if (it.schema === false) {
-      if (it.isTop) {
-        $breakOnError = true;
-      } else {
-        out += ' var ' + ($valid) + ' = false; ';
-      }
-      var $$outStack = $$outStack || [];
-      $$outStack.push(out);
-      out = ''; /* istanbul ignore else */
-      if (it.createErrors !== false) {
-        out += ' { keyword: \'' + ($errorKeyword || 'false schema') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
-        if (it.opts.messages !== false) {
-          out += ' , message: \'boolean schema is false\' ';
-        }
-        if (it.opts.verbose) {
-          out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-        }
-        out += ' } ';
-      } else {
-        out += ' {} ';
-      }
-      var __err = out;
-      out = $$outStack.pop();
-      if (!it.compositeRule && $breakOnError) {
-        /* istanbul ignore if */
-        if (it.async) {
-          out += ' throw new ValidationError([' + (__err) + ']); ';
-        } else {
-          out += ' validate.errors = [' + (__err) + ']; return false; ';
-        }
-      } else {
-        out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-      }
-    } else {
-      if (it.isTop) {
-        if ($async) {
-          out += ' return data; ';
-        } else {
-          out += ' validate.errors = null; return true; ';
-        }
-      } else {
-        out += ' var ' + ($valid) + ' = true; ';
-      }
-    }
-    if (it.isTop) {
-      out += ' }; return validate; ';
-    }
-    return out;
-  }
-  if (it.isTop) {
-    var $top = it.isTop,
-      $lvl = it.level = 0,
-      $dataLvl = it.dataLevel = 0,
-      $data = 'data';
-    it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema));
-    it.baseId = it.baseId || it.rootId;
-    delete it.isTop;
-    it.dataPathArr = [undefined];
-    if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) {
-      var $defaultMsg = 'default is ignored in the schema root';
-      if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);
-      else throw new Error($defaultMsg);
-    }
-    out += ' var vErrors = null; ';
-    out += ' var errors = 0;     ';
-    out += ' if (rootData === undefined) rootData = data; ';
-  } else {
-    var $lvl = it.level,
-      $dataLvl = it.dataLevel,
-      $data = 'data' + ($dataLvl || '');
-    if ($id) it.baseId = it.resolve.url(it.baseId, $id);
-    if ($async && !it.async) throw new Error('async schema in sync schema');
-    out += ' var errs_' + ($lvl) + ' = errors;';
-  }
-  var $valid = 'valid' + $lvl,
-    $breakOnError = !it.opts.allErrors,
-    $closingBraces1 = '',
-    $closingBraces2 = '';
-  var $errorKeyword;
-  var $typeSchema = it.schema.type,
-    $typeIsArray = Array.isArray($typeSchema);
-  if ($typeSchema && it.opts.nullable && it.schema.nullable === true) {
-    if ($typeIsArray) {
-      if ($typeSchema.indexOf('null') == -1) $typeSchema = $typeSchema.concat('null');
-    } else if ($typeSchema != 'null') {
-      $typeSchema = [$typeSchema, 'null'];
-      $typeIsArray = true;
-    }
-  }
-  if ($typeIsArray && $typeSchema.length == 1) {
-    $typeSchema = $typeSchema[0];
-    $typeIsArray = false;
-  }
-  if (it.schema.$ref && $refKeywords) {
-    if (it.opts.extendRefs == 'fail') {
-      throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)');
-    } else if (it.opts.extendRefs !== true) {
-      $refKeywords = false;
-      it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"');
-    }
-  }
-  if (it.schema.$comment && it.opts.$comment) {
-    out += ' ' + (it.RULES.all.$comment.code(it, '$comment'));
-  }
-  if ($typeSchema) {
-    if (it.opts.coerceTypes) {
-      var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema);
-    }
-    var $rulesGroup = it.RULES.types[$typeSchema];
-    if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) {
-      var $schemaPath = it.schemaPath + '.type',
-        $errSchemaPath = it.errSchemaPath + '/type';
-      var $schemaPath = it.schemaPath + '.type',
-        $errSchemaPath = it.errSchemaPath + '/type',
-        $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType';
-      out += ' if (' + (it.util[$method]($typeSchema, $data, true)) + ') { ';
-      if ($coerceToTypes) {
-        var $dataType = 'dataType' + $lvl,
-          $coerced = 'coerced' + $lvl;
-        out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; ';
-        if (it.opts.coerceTypes == 'array') {
-          out += ' if (' + ($dataType) + ' == \'object\' && Array.isArray(' + ($data) + ')) ' + ($dataType) + ' = \'array\'; ';
-        }
-        out += ' var ' + ($coerced) + ' = undefined; ';
-        var $bracesCoercion = '';
-        var arr1 = $coerceToTypes;
-        if (arr1) {
-          var $type, $i = -1,
-            l1 = arr1.length - 1;
-          while ($i < l1) {
-            $type = arr1[$i += 1];
-            if ($i) {
-              out += ' if (' + ($coerced) + ' === undefined) { ';
-              $bracesCoercion += '}';
-            }
-            if (it.opts.coerceTypes == 'array' && $type != 'array') {
-              out += ' if (' + ($dataType) + ' == \'array\' && ' + ($data) + '.length == 1) { ' + ($coerced) + ' = ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + ';  } ';
-            }
-            if ($type == 'string') {
-              out += ' if (' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\') ' + ($coerced) + ' = \'\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \'\'; ';
-            } else if ($type == 'number' || $type == 'integer') {
-              out += ' if (' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \'string\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' ';
-              if ($type == 'integer') {
-                out += ' && !(' + ($data) + ' % 1)';
-              }
-              out += ')) ' + ($coerced) + ' = +' + ($data) + '; ';
-            } else if ($type == 'boolean') {
-              out += ' if (' + ($data) + ' === \'false\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \'true\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; ';
-            } else if ($type == 'null') {
-              out += ' if (' + ($data) + ' === \'\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; ';
-            } else if (it.opts.coerceTypes == 'array' && $type == 'array') {
-              out += ' if (' + ($dataType) + ' == \'string\' || ' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; ';
-            }
-          }
-        }
-        out += ' ' + ($bracesCoercion) + ' if (' + ($coerced) + ' === undefined) {   ';
-        var $$outStack = $$outStack || [];
-        $$outStack.push(out);
-        out = ''; /* istanbul ignore else */
-        if (it.createErrors !== false) {
-          out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \'';
-          if ($typeIsArray) {
-            out += '' + ($typeSchema.join(","));
-          } else {
-            out += '' + ($typeSchema);
-          }
-          out += '\' } ';
-          if (it.opts.messages !== false) {
-            out += ' , message: \'should be ';
-            if ($typeIsArray) {
-              out += '' + ($typeSchema.join(","));
-            } else {
-              out += '' + ($typeSchema);
-            }
-            out += '\' ';
-          }
-          if (it.opts.verbose) {
-            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-          }
-          out += ' } ';
-        } else {
-          out += ' {} ';
-        }
-        var __err = out;
-        out = $$outStack.pop();
-        if (!it.compositeRule && $breakOnError) {
-          /* istanbul ignore if */
-          if (it.async) {
-            out += ' throw new ValidationError([' + (__err) + ']); ';
-          } else {
-            out += ' validate.errors = [' + (__err) + ']; return false; ';
-          }
-        } else {
-          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-        }
-        out += ' } else {  ';
-        var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',
-          $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';
-        out += ' ' + ($data) + ' = ' + ($coerced) + '; ';
-        if (!$dataLvl) {
-          out += 'if (' + ($parentData) + ' !== undefined)';
-        }
-        out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } ';
-      } else {
-        var $$outStack = $$outStack || [];
-        $$outStack.push(out);
-        out = ''; /* istanbul ignore else */
-        if (it.createErrors !== false) {
-          out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \'';
-          if ($typeIsArray) {
-            out += '' + ($typeSchema.join(","));
-          } else {
-            out += '' + ($typeSchema);
-          }
-          out += '\' } ';
-          if (it.opts.messages !== false) {
-            out += ' , message: \'should be ';
-            if ($typeIsArray) {
-              out += '' + ($typeSchema.join(","));
-            } else {
-              out += '' + ($typeSchema);
-            }
-            out += '\' ';
-          }
-          if (it.opts.verbose) {
-            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-          }
-          out += ' } ';
-        } else {
-          out += ' {} ';
-        }
-        var __err = out;
-        out = $$outStack.pop();
-        if (!it.compositeRule && $breakOnError) {
-          /* istanbul ignore if */
-          if (it.async) {
-            out += ' throw new ValidationError([' + (__err) + ']); ';
-          } else {
-            out += ' validate.errors = [' + (__err) + ']; return false; ';
-          }
-        } else {
-          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-        }
-      }
-      out += ' } ';
-    }
-  }
-  if (it.schema.$ref && !$refKeywords) {
-    out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' ';
-    if ($breakOnError) {
-      out += ' } if (errors === ';
-      if ($top) {
-        out += '0';
-      } else {
-        out += 'errs_' + ($lvl);
-      }
-      out += ') { ';
-      $closingBraces2 += '}';
-    }
-  } else {
-    var arr2 = it.RULES;
-    if (arr2) {
-      var $rulesGroup, i2 = -1,
-        l2 = arr2.length - 1;
-      while (i2 < l2) {
-        $rulesGroup = arr2[i2 += 1];
-        if ($shouldUseGroup($rulesGroup)) {
-          if ($rulesGroup.type) {
-            out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data)) + ') { ';
-          }
-          if (it.opts.useDefaults) {
-            if ($rulesGroup.type == 'object' && it.schema.properties) {
-              var $schema = it.schema.properties,
-                $schemaKeys = Object.keys($schema);
-              var arr3 = $schemaKeys;
-              if (arr3) {
-                var $propertyKey, i3 = -1,
-                  l3 = arr3.length - 1;
-                while (i3 < l3) {
-                  $propertyKey = arr3[i3 += 1];
-                  var $sch = $schema[$propertyKey];
-                  if ($sch.default !== undefined) {
-                    var $passData = $data + it.util.getProperty($propertyKey);
-                    if (it.compositeRule) {
-                      if (it.opts.strictDefaults) {
-                        var $defaultMsg = 'default is ignored for: ' + $passData;
-                        if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);
-                        else throw new Error($defaultMsg);
-                      }
-                    } else {
-                      out += ' if (' + ($passData) + ' === undefined ';
-                      if (it.opts.useDefaults == 'empty') {
-                        out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \'\' ';
-                      }
-                      out += ' ) ' + ($passData) + ' = ';
-                      if (it.opts.useDefaults == 'shared') {
-                        out += ' ' + (it.useDefault($sch.default)) + ' ';
-                      } else {
-                        out += ' ' + (JSON.stringify($sch.default)) + ' ';
-                      }
-                      out += '; ';
-                    }
-                  }
-                }
-              }
-            } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) {
-              var arr4 = it.schema.items;
-              if (arr4) {
-                var $sch, $i = -1,
-                  l4 = arr4.length - 1;
-                while ($i < l4) {
-                  $sch = arr4[$i += 1];
-                  if ($sch.default !== undefined) {
-                    var $passData = $data + '[' + $i + ']';
-                    if (it.compositeRule) {
-                      if (it.opts.strictDefaults) {
-                        var $defaultMsg = 'default is ignored for: ' + $passData;
-                        if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);
-                        else throw new Error($defaultMsg);
-                      }
-                    } else {
-                      out += ' if (' + ($passData) + ' === undefined ';
-                      if (it.opts.useDefaults == 'empty') {
-                        out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \'\' ';
-                      }
-                      out += ' ) ' + ($passData) + ' = ';
-                      if (it.opts.useDefaults == 'shared') {
-                        out += ' ' + (it.useDefault($sch.default)) + ' ';
-                      } else {
-                        out += ' ' + (JSON.stringify($sch.default)) + ' ';
-                      }
-                      out += '; ';
-                    }
-                  }
-                }
-              }
-            }
-          }
-          var arr5 = $rulesGroup.rules;
-          if (arr5) {
-            var $rule, i5 = -1,
-              l5 = arr5.length - 1;
-            while (i5 < l5) {
-              $rule = arr5[i5 += 1];
-              if ($shouldUseRule($rule)) {
-                var $code = $rule.code(it, $rule.keyword, $rulesGroup.type);
-                if ($code) {
-                  out += ' ' + ($code) + ' ';
-                  if ($breakOnError) {
-                    $closingBraces1 += '}';
-                  }
-                }
-              }
-            }
-          }
-          if ($breakOnError) {
-            out += ' ' + ($closingBraces1) + ' ';
-            $closingBraces1 = '';
-          }
-          if ($rulesGroup.type) {
-            out += ' } ';
-            if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) {
-              out += ' else { ';
-              var $schemaPath = it.schemaPath + '.type',
-                $errSchemaPath = it.errSchemaPath + '/type';
-              var $$outStack = $$outStack || [];
-              $$outStack.push(out);
-              out = ''; /* istanbul ignore else */
-              if (it.createErrors !== false) {
-                out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \'';
-                if ($typeIsArray) {
-                  out += '' + ($typeSchema.join(","));
-                } else {
-                  out += '' + ($typeSchema);
-                }
-                out += '\' } ';
-                if (it.opts.messages !== false) {
-                  out += ' , message: \'should be ';
-                  if ($typeIsArray) {
-                    out += '' + ($typeSchema.join(","));
-                  } else {
-                    out += '' + ($typeSchema);
-                  }
-                  out += '\' ';
-                }
-                if (it.opts.verbose) {
-                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
-                }
-                out += ' } ';
-              } else {
-                out += ' {} ';
-              }
-              var __err = out;
-              out = $$outStack.pop();
-              if (!it.compositeRule && $breakOnError) {
-                /* istanbul ignore if */
-                if (it.async) {
-                  out += ' throw new ValidationError([' + (__err) + ']); ';
-                } else {
-                  out += ' validate.errors = [' + (__err) + ']; return false; ';
-                }
-              } else {
-                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
-              }
-              out += ' } ';
-            }
-          }
-          if ($breakOnError) {
-            out += ' if (errors === ';
-            if ($top) {
-              out += '0';
-            } else {
-              out += 'errs_' + ($lvl);
-            }
-            out += ') { ';
-            $closingBraces2 += '}';
-          }
-        }
-      }
-    }
-  }
-  if ($breakOnError) {
-    out += ' ' + ($closingBraces2) + ' ';
-  }
-  if ($top) {
-    if ($async) {
-      out += ' if (errors === 0) return data;           ';
-      out += ' else throw new ValidationError(vErrors); ';
-    } else {
-      out += ' validate.errors = vErrors; ';
-      out += ' return errors === 0;       ';
-    }
-    out += ' }; return validate;';
-  } else {
-    out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';';
-  }
-  out = it.util.cleanUpCode(out);
-  if ($top) {
-    out = it.util.finalCleanUpCode(out, $async);
-  }
-
-  function $shouldUseGroup($rulesGroup) {
-    var rules = $rulesGroup.rules;
-    for (var i = 0; i < rules.length; i++)
-      if ($shouldUseRule(rules[i])) return true;
-  }
-
-  function $shouldUseRule($rule) {
-    return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule));
-  }
-
-  function $ruleImplementsSomeKeyword($rule) {
-    var impl = $rule.implements;
-    for (var i = 0; i < impl.length; i++)
-      if (it.schema[impl[i]] !== undefined) return true;
-  }
-  return out;
-}
-
-},{}],39:[function(require,module,exports){
-'use strict';
-
-var IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i;
-var customRuleCode = require('./dotjs/custom');
-var definitionSchema = require('./definition_schema');
-
-module.exports = {
-  add: addKeyword,
-  get: getKeyword,
-  remove: removeKeyword,
-  validate: validateKeyword
-};
-
-
-/**
- * Define custom keyword
- * @this  Ajv
- * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords).
- * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`.
- * @return {Ajv} this for method chaining
- */
-function addKeyword(keyword, definition) {
-  /* jshint validthis: true */
-  /* eslint no-shadow: 0 */
-  var RULES = this.RULES;
-  if (RULES.keywords[keyword])
-    throw new Error('Keyword ' + keyword + ' is already defined');
-
-  if (!IDENTIFIER.test(keyword))
-    throw new Error('Keyword ' + keyword + ' is not a valid identifier');
-
-  if (definition) {
-    this.validateKeyword(definition, true);
-
-    var dataType = definition.type;
-    if (Array.isArray(dataType)) {
-      for (var i=0; i<dataType.length; i++)
-        _addRule(keyword, dataType[i], definition);
-    } else {
-      _addRule(keyword, dataType, definition);
-    }
-
-    var metaSchema = definition.metaSchema;
-    if (metaSchema) {
-      if (definition.$data && this._opts.$data) {
-        metaSchema = {
-          anyOf: [
-            metaSchema,
-            { '$ref': 'https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/data.json#' }
-          ]
-        };
-      }
-      definition.validateSchema = this.compile(metaSchema, true);
-    }
-  }
-
-  RULES.keywords[keyword] = RULES.all[keyword] = true;
-
-
-  function _addRule(keyword, dataType, definition) {
-    var ruleGroup;
-    for (var i=0; i<RULES.length; i++) {
-      var rg = RULES[i];
-      if (rg.type == dataType) {
-        ruleGroup = rg;
-        break;
-      }
-    }
-
-    if (!ruleGroup) {
-      ruleGroup = { type: dataType, rules: [] };
-      RULES.push(ruleGroup);
-    }
-
-    var rule = {
-      keyword: keyword,
-      definition: definition,
-      custom: true,
-      code: customRuleCode,
-      implements: definition.implements
-    };
-    ruleGroup.rules.push(rule);
-    RULES.custom[keyword] = rule;
-  }
-
-  return this;
-}
-
-
-/**
- * Get keyword
- * @this  Ajv
- * @param {String} keyword pre-defined or custom keyword.
- * @return {Object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise.
- */
-function getKeyword(keyword) {
-  /* jshint validthis: true */
-  var rule = this.RULES.custom[keyword];
-  return rule ? rule.definition : this.RULES.keywords[keyword] || false;
-}
-
-
-/**
- * Remove keyword
- * @this  Ajv
- * @param {String} keyword pre-defined or custom keyword.
- * @return {Ajv} this for method chaining
- */
-function removeKeyword(keyword) {
-  /* jshint validthis: true */
-  var RULES = this.RULES;
-  delete RULES.keywords[keyword];
-  delete RULES.all[keyword];
-  delete RULES.custom[keyword];
-  for (var i=0; i<RULES.length; i++) {
-    var rules = RULES[i].rules;
-    for (var j=0; j<rules.length; j++) {
-      if (rules[j].keyword == keyword) {
-        rules.splice(j, 1);
-        break;
-      }
-    }
-  }
-  return this;
-}
-
-
-/**
- * Validate keyword definition
- * @this  Ajv
- * @param {Object} definition keyword definition object.
- * @param {Boolean} throwError true to throw exception if definition is invalid
- * @return {boolean} validation result
- */
-function validateKeyword(definition, throwError) {
-  validateKeyword.errors = null;
-  var v = this._validateKeyword = this._validateKeyword
-                                  || this.compile(definitionSchema, true);
-
-  if (v(definition)) return true;
-  validateKeyword.errors = v.errors;
-  if (throwError)
-    throw new Error('custom keyword definition is invalid: '  + this.errorsText(v.errors));
-  else
-    return false;
-}
-
-},{"./definition_schema":12,"./dotjs/custom":22}],40:[function(require,module,exports){
-module.exports={
-    "$schema": "http://json-schema.org/draft-07/schema#",
-    "$id": "https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/data.json#",
-    "description": "Meta-schema for $data reference (JSON Schema extension proposal)",
-    "type": "object",
-    "required": [ "$data" ],
-    "properties": {
-        "$data": {
-            "type": "string",
-            "anyOf": [
-                { "format": "relative-json-pointer" }, 
-                { "format": "json-pointer" }
-            ]
-        }
-    },
-    "additionalProperties": false
-}
-
-},{}],41:[function(require,module,exports){
-module.exports={
-    "$schema": "http://json-schema.org/draft-07/schema#",
-    "$id": "http://json-schema.org/draft-07/schema#",
-    "title": "Core schema meta-schema",
-    "definitions": {
-        "schemaArray": {
-            "type": "array",
-            "minItems": 1,
-            "items": { "$ref": "#" }
-        },
-        "nonNegativeInteger": {
-            "type": "integer",
-            "minimum": 0
-        },
-        "nonNegativeIntegerDefault0": {
-            "allOf": [
-                { "$ref": "#/definitions/nonNegativeInteger" },
-                { "default": 0 }
-            ]
-        },
-        "simpleTypes": {
-            "enum": [
-                "array",
-                "boolean",
-                "integer",
-                "null",
-                "number",
-                "object",
-                "string"
-            ]
-        },
-        "stringArray": {
-            "type": "array",
-            "items": { "type": "string" },
-            "uniqueItems": true,
-            "default": []
-        }
-    },
-    "type": ["object", "boolean"],
-    "properties": {
-        "$id": {
-            "type": "string",
-            "format": "uri-reference"
-        },
-        "$schema": {
-            "type": "string",
-            "format": "uri"
-        },
-        "$ref": {
-            "type": "string",
-            "format": "uri-reference"
-        },
-        "$comment": {
-            "type": "string"
-        },
-        "title": {
-            "type": "string"
-        },
-        "description": {
-            "type": "string"
-        },
-        "default": true,
-        "readOnly": {
-            "type": "boolean",
-            "default": false
-        },
-        "examples": {
-            "type": "array",
-            "items": true
-        },
-        "multipleOf": {
-            "type": "number",
-            "exclusiveMinimum": 0
-        },
-        "maximum": {
-            "type": "number"
-        },
-        "exclusiveMaximum": {
-            "type": "number"
-        },
-        "minimum": {
-            "type": "number"
-        },
-        "exclusiveMinimum": {
-            "type": "number"
-        },
-        "maxLength": { "$ref": "#/definitions/nonNegativeInteger" },
-        "minLength": { "$ref": "#/definitions/nonNegativeIntegerDefault0" },
-        "pattern": {
-            "type": "string",
-            "format": "regex"
-        },
-        "additionalItems": { "$ref": "#" },
-        "items": {
-            "anyOf": [
-                { "$ref": "#" },
-                { "$ref": "#/definitions/schemaArray" }
-            ],
-            "default": true
-        },
-        "maxItems": { "$ref": "#/definitions/nonNegativeInteger" },
-        "minItems": { "$ref": "#/definitions/nonNegativeIntegerDefault0" },
-        "uniqueItems": {
-            "type": "boolean",
-            "default": false
-        },
-        "contains": { "$ref": "#" },
-        "maxProperties": { "$ref": "#/definitions/nonNegativeInteger" },
-        "minProperties": { "$ref": "#/definitions/nonNegativeIntegerDefault0" },
-        "required": { "$ref": "#/definitions/stringArray" },
-        "additionalProperties": { "$ref": "#" },
-        "definitions": {
-            "type": "object",
-            "additionalProperties": { "$ref": "#" },
-            "default": {}
-        },
-        "properties": {
-            "type": "object",
-            "additionalProperties": { "$ref": "#" },
-            "default": {}
-        },
-        "patternProperties": {
-            "type": "object",
-            "additionalProperties": { "$ref": "#" },
-            "propertyNames": { "format": "regex" },
-            "default": {}
-        },
-        "dependencies": {
-            "type": "object",
-            "additionalProperties": {
-                "anyOf": [
-                    { "$ref": "#" },
-                    { "$ref": "#/definitions/stringArray" }
-                ]
-            }
-        },
-        "propertyNames": { "$ref": "#" },
-        "const": true,
-        "enum": {
-            "type": "array",
-            "items": true,
-            "minItems": 1,
-            "uniqueItems": true
-        },
-        "type": {
-            "anyOf": [
-                { "$ref": "#/definitions/simpleTypes" },
-                {
-                    "type": "array",
-                    "items": { "$ref": "#/definitions/simpleTypes" },
-                    "minItems": 1,
-                    "uniqueItems": true
-                }
-            ]
-        },
-        "format": { "type": "string" },
-        "contentMediaType": { "type": "string" },
-        "contentEncoding": { "type": "string" },
-        "if": {"$ref": "#"},
-        "then": {"$ref": "#"},
-        "else": {"$ref": "#"},
-        "allOf": { "$ref": "#/definitions/schemaArray" },
-        "anyOf": { "$ref": "#/definitions/schemaArray" },
-        "oneOf": { "$ref": "#/definitions/schemaArray" },
-        "not": { "$ref": "#" }
-    },
-    "default": true
-}
-
-},{}],42:[function(require,module,exports){
-'use strict';
-
-// do not edit .js files directly - edit src/index.jst
-
-
-
-module.exports = function equal(a, b) {
-  if (a === b) return true;
-
-  if (a && b && typeof a == 'object' && typeof b == 'object') {
-    if (a.constructor !== b.constructor) return false;
-
-    var length, i, keys;
-    if (Array.isArray(a)) {
-      length = a.length;
-      if (length != b.length) return false;
-      for (i = length; i-- !== 0;)
-        if (!equal(a[i], b[i])) return false;
-      return true;
-    }
-
-
-
-    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
-    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
-    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
-
-    keys = Object.keys(a);
-    length = keys.length;
-    if (length !== Object.keys(b).length) return false;
-
-    for (i = length; i-- !== 0;)
-      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
-
-    for (i = length; i-- !== 0;) {
-      var key = keys[i];
-
-      if (!equal(a[key], b[key])) return false;
-    }
-
-    return true;
-  }
-
-  // true if both NaN, false otherwise
-  return a!==a && b!==b;
-};
-
-},{}],43:[function(require,module,exports){
-'use strict';
-
-module.exports = function (data, opts) {
-    if (!opts) opts = {};
-    if (typeof opts === 'function') opts = { cmp: opts };
-    var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;
-
-    var cmp = opts.cmp && (function (f) {
-        return function (node) {
-            return function (a, b) {
-                var aobj = { key: a, value: node[a] };
-                var bobj = { key: b, value: node[b] };
-                return f(aobj, bobj);
-            };
-        };
-    })(opts.cmp);
-
-    var seen = [];
-    return (function stringify (node) {
-        if (node && node.toJSON && typeof node.toJSON === 'function') {
-            node = node.toJSON();
-        }
-
-        if (node === undefined) return;
-        if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';
-        if (typeof node !== 'object') return JSON.stringify(node);
-
-        var i, out;
-        if (Array.isArray(node)) {
-            out = '[';
-            for (i = 0; i < node.length; i++) {
-                if (i) out += ',';
-                out += stringify(node[i]) || 'null';
-            }
-            return out + ']';
-        }
-
-        if (node === null) return 'null';
-
-        if (seen.indexOf(node) !== -1) {
-            if (cycles) return JSON.stringify('__cycle__');
-            throw new TypeError('Converting circular structure to JSON');
-        }
-
-        var seenIndex = seen.push(node) - 1;
-        var keys = Object.keys(node).sort(cmp && cmp(node));
-        out = '';
-        for (i = 0; i < keys.length; i++) {
-            var key = keys[i];
-            var value = stringify(node[key]);
-
-            if (!value) continue;
-            if (out) out += ',';
-            out += JSON.stringify(key) + ':' + value;
-        }
-        seen.splice(seenIndex, 1);
-        return '{' + out + '}';
-    })(data);
-};
-
-},{}],44:[function(require,module,exports){
-'use strict';
-
-var traverse = module.exports = function (schema, opts, cb) {
-  // Legacy support for v0.3.1 and earlier.
-  if (typeof opts == 'function') {
-    cb = opts;
-    opts = {};
-  }
-
-  cb = opts.cb || cb;
-  var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};
-  var post = cb.post || function() {};
-
-  _traverse(opts, pre, post, schema, '', schema);
-};
-
-
-traverse.keywords = {
-  additionalItems: true,
-  items: true,
-  contains: true,
-  additionalProperties: true,
-  propertyNames: true,
-  not: true
-};
-
-traverse.arrayKeywords = {
-  items: true,
-  allOf: true,
-  anyOf: true,
-  oneOf: true
-};
-
-traverse.propsKeywords = {
-  definitions: true,
-  properties: true,
-  patternProperties: true,
-  dependencies: true
-};
-
-traverse.skipKeywords = {
-  default: true,
-  enum: true,
-  const: true,
-  required: true,
-  maximum: true,
-  minimum: true,
-  exclusiveMaximum: true,
-  exclusiveMinimum: true,
-  multipleOf: true,
-  maxLength: true,
-  minLength: true,
-  pattern: true,
-  format: true,
-  maxItems: true,
-  minItems: true,
-  uniqueItems: true,
-  maxProperties: true,
-  minProperties: true
-};
-
-
-function _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {
-  if (schema && typeof schema == 'object' && !Array.isArray(schema)) {
-    pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);
-    for (var key in schema) {
-      var sch = schema[key];
-      if (Array.isArray(sch)) {
-        if (key in traverse.arrayKeywords) {
-          for (var i=0; i<sch.length; i++)
-            _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);
-        }
-      } else if (key in traverse.propsKeywords) {
-        if (sch && typeof sch == 'object') {
-          for (var prop in sch)
-            _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);
-        }
-      } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {
-        _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);
-      }
-    }
-    post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);
-  }
-}
-
-
-function escapeJsonPtr(str) {
-  return str.replace(/~/g, '~0').replace(/\//g, '~1');
-}
-
-},{}],45:[function(require,module,exports){
-/** @license URI.js v4.2.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */
-(function (global, factory) {
-	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
-	typeof define === 'function' && define.amd ? define(['exports'], factory) :
-	(factory((global.URI = global.URI || {})));
-}(this, (function (exports) { 'use strict';
-
-function merge() {
-    for (var _len = arguments.length, sets = Array(_len), _key = 0; _key < _len; _key++) {
-        sets[_key] = arguments[_key];
-    }
-
-    if (sets.length > 1) {
-        sets[0] = sets[0].slice(0, -1);
-        var xl = sets.length - 1;
-        for (var x = 1; x < xl; ++x) {
-            sets[x] = sets[x].slice(1, -1);
-        }
-        sets[xl] = sets[xl].slice(1);
-        return sets.join('');
-    } else {
-        return sets[0];
-    }
-}
-function subexp(str) {
-    return "(?:" + str + ")";
-}
-function typeOf(o) {
-    return o === undefined ? "undefined" : o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase();
-}
-function toUpperCase(str) {
-    return str.toUpperCase();
-}
-function toArray(obj) {
-    return obj !== undefined && obj !== null ? obj instanceof Array ? obj : typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj) : [];
-}
-function assign(target, source) {
-    var obj = target;
-    if (source) {
-        for (var key in source) {
-            obj[key] = source[key];
-        }
-    }
-    return obj;
-}
-
-function buildExps(isIRI) {
-    var ALPHA$$ = "[A-Za-z]",
-        CR$ = "[\\x0D]",
-        DIGIT$$ = "[0-9]",
-        DQUOTE$$ = "[\\x22]",
-        HEXDIG$$ = merge(DIGIT$$, "[A-Fa-f]"),
-        //case-insensitive
-    LF$$ = "[\\x0A]",
-        SP$$ = "[\\x20]",
-        PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)),
-        //expanded
-    GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]",
-        SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",
-        RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),
-        UCSCHAR$$ = isIRI ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]",
-        //subset, excludes bidi control characters
-    IPRIVATE$$ = isIRI ? "[\\uE000-\\uF8FF]" : "[]",
-        //subset
-    UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$),
-        SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"),
-        USERINFO$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]")) + "*"),
-        DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$),
-        DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$),
-        //relaxed parsing rules
-    IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$),
-        H16$ = subexp(HEXDIG$$ + "{1,4}"),
-        LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$),
-        IPV6ADDRESS1$ = subexp(subexp(H16$ + "\\:") + "{6}" + LS32$),
-        //                           6( h16 ":" ) ls32
-    IPV6ADDRESS2$ = subexp("\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$),
-        //                      "::" 5( h16 ":" ) ls32
-    IPV6ADDRESS3$ = subexp(subexp(H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$),
-        //[               h16 ] "::" 4( h16 ":" ) ls32
-    IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$),
-        //[ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
-    IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$),
-        //[ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
-    IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$),
-        //[ *3( h16 ":" ) h16 ] "::"    h16 ":"   ls32
-    IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$),
-        //[ *4( h16 ":" ) h16 ] "::"              ls32
-    IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$),
-        //[ *5( h16 ":" ) h16 ] "::"              h16
-    IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:"),
-        //[ *6( h16 ":" ) h16 ] "::"
-    IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")),
-        ZONEID$ = subexp(subexp(UNRESERVED$$ + "|" + PCT_ENCODED$) + "+"),
-        //RFC 6874
-    IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$),
-        //RFC 6874
-    IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + ZONEID$),
-        //RFC 6874, with relaxed parsing rules
-    IPVFUTURE$ = subexp("[vV]" + HEXDIG$$ + "+\\." + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]") + "+"),
-        IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"),
-        //RFC 6874
-    REG_NAME$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$)) + "*"),
-        HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")" + "|" + REG_NAME$),
-        PORT$ = subexp(DIGIT$$ + "*"),
-        AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"),
-        PCHAR$ = subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@]")),
-        SEGMENT$ = subexp(PCHAR$ + "*"),
-        SEGMENT_NZ$ = subexp(PCHAR$ + "+"),
-        SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\@]")) + "+"),
-        PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"),
-        PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"),
-        //simplified
-    PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$),
-        //simplified
-    PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$),
-        //simplified
-    PATH_EMPTY$ = "(?!" + PCHAR$ + ")",
-        PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$),
-        QUERY$ = subexp(subexp(PCHAR$ + "|" + merge("[\\/\\?]", IPRIVATE$$)) + "*"),
-        FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"),
-        HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$),
-        URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"),
-        RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$),
-        RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"),
-        URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$),
-        ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"),
-        GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$",
-        RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$",
-        ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$",
-        SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$",
-        AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$";
-    return {
-        NOT_SCHEME: new RegExp(merge("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"),
-        NOT_USERINFO: new RegExp(merge("[^\\%\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"),
-        NOT_HOST: new RegExp(merge("[^\\%\\[\\]\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"),
-        NOT_PATH: new RegExp(merge("[^\\%\\/\\:\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"),
-        NOT_PATH_NOSCHEME: new RegExp(merge("[^\\%\\/\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"),
-        NOT_QUERY: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"),
-        NOT_FRAGMENT: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"),
-        ESCAPE: new RegExp(merge("[^]", UNRESERVED$$, SUB_DELIMS$$), "g"),
-        UNRESERVED: new RegExp(UNRESERVED$$, "g"),
-        OTHER_CHARS: new RegExp(merge("[^\\%]", UNRESERVED$$, RESERVED$$), "g"),
-        PCT_ENCODED: new RegExp(PCT_ENCODED$, "g"),
-        IPV4ADDRESS: new RegExp("^(" + IPV4ADDRESS$ + ")$"),
-        IPV6ADDRESS: new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$") //RFC 6874, with relaxed parsing rules
-    };
-}
-var URI_PROTOCOL = buildExps(false);
-
-var IRI_PROTOCOL = buildExps(true);
-
-var slicedToArray = function () {
-  function sliceIterator(arr, i) {
-    var _arr = [];
-    var _n = true;
-    var _d = false;
-    var _e = undefined;
-
-    try {
-      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
-        _arr.push(_s.value);
-
-        if (i && _arr.length === i) break;
-      }
-    } catch (err) {
-      _d = true;
-      _e = err;
-    } finally {
-      try {
-        if (!_n && _i["return"]) _i["return"]();
-      } finally {
-        if (_d) throw _e;
-      }
-    }
-
-    return _arr;
-  }
-
-  return function (arr, i) {
-    if (Array.isArray(arr)) {
-      return arr;
-    } else if (Symbol.iterator in Object(arr)) {
-      return sliceIterator(arr, i);
-    } else {
-      throw new TypeError("Invalid attempt to destructure non-iterable instance");
-    }
-  };
-}();
-
-
-
-
-
-
-
-
-
-
-
-
-
-var toConsumableArray = function (arr) {
-  if (Array.isArray(arr)) {
-    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
-
-    return arr2;
-  } else {
-    return Array.from(arr);
-  }
-};
-
-/** Highest positive signed 32-bit float value */
-
-var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1
-
-/** Bootstring parameters */
-var base = 36;
-var tMin = 1;
-var tMax = 26;
-var skew = 38;
-var damp = 700;
-var initialBias = 72;
-var initialN = 128; // 0x80
-var delimiter = '-'; // '\x2D'
-
-/** Regular expressions */
-var regexPunycode = /^xn--/;
-var regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars
-var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators
-
-/** Error messages */
-var errors = {
-	'overflow': 'Overflow: input needs wider integers to process',
-	'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
-	'invalid-input': 'Invalid input'
-};
-
-/** Convenience shortcuts */
-var baseMinusTMin = base - tMin;
-var floor = Math.floor;
-var stringFromCharCode = String.fromCharCode;
-
-/*--------------------------------------------------------------------------*/
-
-/**
- * A generic error utility function.
- * @private
- * @param {String} type The error type.
- * @returns {Error} Throws a `RangeError` with the applicable error message.
- */
-function error$1(type) {
-	throw new RangeError(errors[type]);
-}
-
-/**
- * A generic `Array#map` utility function.
- * @private
- * @param {Array} array The array to iterate over.
- * @param {Function} callback The function that gets called for every array
- * item.
- * @returns {Array} A new array of values returned by the callback function.
- */
-function map(array, fn) {
-	var result = [];
-	var length = array.length;
-	while (length--) {
-		result[length] = fn(array[length]);
-	}
-	return result;
-}
-
-/**
- * A simple `Array#map`-like wrapper to work with domain name strings or email
- * addresses.
- * @private
- * @param {String} domain The domain name or email address.
- * @param {Function} callback The function that gets called for every
- * character.
- * @returns {Array} A new string of characters returned by the callback
- * function.
- */
-function mapDomain(string, fn) {
-	var parts = string.split('@');
-	var result = '';
-	if (parts.length > 1) {
-		// In email addresses, only the domain name should be punycoded. Leave
-		// the local part (i.e. everything up to `@`) intact.
-		result = parts[0] + '@';
-		string = parts[1];
-	}
-	// Avoid `split(regex)` for IE8 compatibility. See #17.
-	string = string.replace(regexSeparators, '\x2E');
-	var labels = string.split('.');
-	var encoded = map(labels, fn).join('.');
-	return result + encoded;
-}
-
-/**
- * Creates an array containing the numeric code points of each Unicode
- * character in the string. While JavaScript uses UCS-2 internally,
- * this function will convert a pair of surrogate halves (each of which
- * UCS-2 exposes as separate characters) into a single code point,
- * matching UTF-16.
- * @see `punycode.ucs2.encode`
- * @see <https://mathiasbynens.be/notes/javascript-encoding>
- * @memberOf punycode.ucs2
- * @name decode
- * @param {String} string The Unicode input string (UCS-2).
- * @returns {Array} The new array of code points.
- */
-function ucs2decode(string) {
-	var output = [];
-	var counter = 0;
-	var length = string.length;
-	while (counter < length) {
-		var value = string.charCodeAt(counter++);
-		if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
-			// It's a high surrogate, and there is a next character.
-			var extra = string.charCodeAt(counter++);
-			if ((extra & 0xFC00) == 0xDC00) {
-				// Low surrogate.
-				output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
-			} else {
-				// It's an unmatched surrogate; only append this code unit, in case the
-				// next code unit is the high surrogate of a surrogate pair.
-				output.push(value);
-				counter--;
-			}
-		} else {
-			output.push(value);
-		}
-	}
-	return output;
-}
-
-/**
- * Creates a string based on an array of numeric code points.
- * @see `punycode.ucs2.decode`
- * @memberOf punycode.ucs2
- * @name encode
- * @param {Array} codePoints The array of numeric code points.
- * @returns {String} The new Unicode string (UCS-2).
- */
-var ucs2encode = function ucs2encode(array) {
-	return String.fromCodePoint.apply(String, toConsumableArray(array));
-};
-
-/**
- * Converts a basic code point into a digit/integer.
- * @see `digitToBasic()`
- * @private
- * @param {Number} codePoint The basic numeric code point value.
- * @returns {Number} The numeric value of a basic code point (for use in
- * representing integers) in the range `0` to `base - 1`, or `base` if
- * the code point does not represent a value.
- */
-var basicToDigit = function basicToDigit(codePoint) {
-	if (codePoint - 0x30 < 0x0A) {
-		return codePoint - 0x16;
-	}
-	if (codePoint - 0x41 < 0x1A) {
-		return codePoint - 0x41;
-	}
-	if (codePoint - 0x61 < 0x1A) {
-		return codePoint - 0x61;
-	}
-	return base;
-};
-
-/**
- * Converts a digit/integer into a basic code point.
- * @see `basicToDigit()`
- * @private
- * @param {Number} digit The numeric value of a basic code point.
- * @returns {Number} The basic code point whose value (when used for
- * representing integers) is `digit`, which needs to be in the range
- * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
- * used; else, the lowercase form is used. The behavior is undefined
- * if `flag` is non-zero and `digit` has no uppercase form.
- */
-var digitToBasic = function digitToBasic(digit, flag) {
-	//  0..25 map to ASCII a..z or A..Z
-	// 26..35 map to ASCII 0..9
-	return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
-};
-
-/**
- * Bias adaptation function as per section 3.4 of RFC 3492.
- * https://tools.ietf.org/html/rfc3492#section-3.4
- * @private
- */
-var adapt = function adapt(delta, numPoints, firstTime) {
-	var k = 0;
-	delta = firstTime ? floor(delta / damp) : delta >> 1;
-	delta += floor(delta / numPoints);
-	for (; /* no initialization */delta > baseMinusTMin * tMax >> 1; k += base) {
-		delta = floor(delta / baseMinusTMin);
-	}
-	return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
-};
-
-/**
- * Converts a Punycode string of ASCII-only symbols to a string of Unicode
- * symbols.
- * @memberOf punycode
- * @param {String} input The Punycode string of ASCII-only symbols.
- * @returns {String} The resulting string of Unicode symbols.
- */
-var decode = function decode(input) {
-	// Don't use UCS-2.
-	var output = [];
-	var inputLength = input.length;
-	var i = 0;
-	var n = initialN;
-	var bias = initialBias;
-
-	// Handle the basic code points: let `basic` be the number of input code
-	// points before the last delimiter, or `0` if there is none, then copy
-	// the first basic code points to the output.
-
-	var basic = input.lastIndexOf(delimiter);
-	if (basic < 0) {
-		basic = 0;
-	}
-
-	for (var j = 0; j < basic; ++j) {
-		// if it's not a basic code point
-		if (input.charCodeAt(j) >= 0x80) {
-			error$1('not-basic');
-		}
-		output.push(input.charCodeAt(j));
-	}
-
-	// Main decoding loop: start just after the last delimiter if any basic code
-	// points were copied; start at the beginning otherwise.
-
-	for (var index = basic > 0 ? basic + 1 : 0; index < inputLength;) /* no final expression */{
-
-		// `index` is the index of the next character to be consumed.
-		// Decode a generalized variable-length integer into `delta`,
-		// which gets added to `i`. The overflow checking is easier
-		// if we increase `i` as we go, then subtract off its starting
-		// value at the end to obtain `delta`.
-		var oldi = i;
-		for (var w = 1, k = base;; /* no condition */k += base) {
-
-			if (index >= inputLength) {
-				error$1('invalid-input');
-			}
-
-			var digit = basicToDigit(input.charCodeAt(index++));
-
-			if (digit >= base || digit > floor((maxInt - i) / w)) {
-				error$1('overflow');
-			}
-
-			i += digit * w;
-			var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;
-
-			if (digit < t) {
-				break;
-			}
-
-			var baseMinusT = base - t;
-			if (w > floor(maxInt / baseMinusT)) {
-				error$1('overflow');
-			}
-
-			w *= baseMinusT;
-		}
-
-		var out = output.length + 1;
-		bias = adapt(i - oldi, out, oldi == 0);
-
-		// `i` was supposed to wrap around from `out` to `0`,
-		// incrementing `n` each time, so we'll fix that now:
-		if (floor(i / out) > maxInt - n) {
-			error$1('overflow');
-		}
-
-		n += floor(i / out);
-		i %= out;
-
-		// Insert `n` at position `i` of the output.
-		output.splice(i++, 0, n);
-	}
-
-	return String.fromCodePoint.apply(String, output);
-};
-
-/**
- * Converts a string of Unicode symbols (e.g. a domain name label) to a
- * Punycode string of ASCII-only symbols.
- * @memberOf punycode
- * @param {String} input The string of Unicode symbols.
- * @returns {String} The resulting Punycode string of ASCII-only symbols.
- */
-var encode = function encode(input) {
-	var output = [];
-
-	// Convert the input in UCS-2 to an array of Unicode code points.
-	input = ucs2decode(input);
-
-	// Cache the length.
-	var inputLength = input.length;
-
-	// Initialize the state.
-	var n = initialN;
-	var delta = 0;
-	var bias = initialBias;
-
-	// Handle the basic code points.
-	var _iteratorNormalCompletion = true;
-	var _didIteratorError = false;
-	var _iteratorError = undefined;
-
-	try {
-		for (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
-			var _currentValue2 = _step.value;
-
-			if (_currentValue2 < 0x80) {
-				output.push(stringFromCharCode(_currentValue2));
-			}
-		}
-	} catch (err) {
-		_didIteratorError = true;
-		_iteratorError = err;
-	} finally {
-		try {
-			if (!_iteratorNormalCompletion && _iterator.return) {
-				_iterator.return();
-			}
-		} finally {
-			if (_didIteratorError) {
-				throw _iteratorError;
-			}
-		}
-	}
-
-	var basicLength = output.length;
-	var handledCPCount = basicLength;
-
-	// `handledCPCount` is the number of code points that have been handled;
-	// `basicLength` is the number of basic code points.
-
-	// Finish the basic string with a delimiter unless it's empty.
-	if (basicLength) {
-		output.push(delimiter);
-	}
-
-	// Main encoding loop:
-	while (handledCPCount < inputLength) {
-
-		// All non-basic code points < n have been handled already. Find the next
-		// larger one:
-		var m = maxInt;
-		var _iteratorNormalCompletion2 = true;
-		var _didIteratorError2 = false;
-		var _iteratorError2 = undefined;
-
-		try {
-			for (var _iterator2 = input[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
-				var currentValue = _step2.value;
-
-				if (currentValue >= n && currentValue < m) {
-					m = currentValue;
-				}
-			}
-
-			// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
-			// but guard against overflow.
-		} catch (err) {
-			_didIteratorError2 = true;
-			_iteratorError2 = err;
-		} finally {
-			try {
-				if (!_iteratorNormalCompletion2 && _iterator2.return) {
-					_iterator2.return();
-				}
-			} finally {
-				if (_didIteratorError2) {
-					throw _iteratorError2;
-				}
-			}
-		}
-
-		var handledCPCountPlusOne = handledCPCount + 1;
-		if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
-			error$1('overflow');
-		}
-
-		delta += (m - n) * handledCPCountPlusOne;
-		n = m;
-
-		var _iteratorNormalCompletion3 = true;
-		var _didIteratorError3 = false;
-		var _iteratorError3 = undefined;
-
-		try {
-			for (var _iterator3 = input[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
-				var _currentValue = _step3.value;
-
-				if (_currentValue < n && ++delta > maxInt) {
-					error$1('overflow');
-				}
-				if (_currentValue == n) {
-					// Represent delta as a generalized variable-length integer.
-					var q = delta;
-					for (var k = base;; /* no condition */k += base) {
-						var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;
-						if (q < t) {
-							break;
-						}
-						var qMinusT = q - t;
-						var baseMinusT = base - t;
-						output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));
-						q = floor(qMinusT / baseMinusT);
-					}
-
-					output.push(stringFromCharCode(digitToBasic(q, 0)));
-					bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
-					delta = 0;
-					++handledCPCount;
-				}
-			}
-		} catch (err) {
-			_didIteratorError3 = true;
-			_iteratorError3 = err;
-		} finally {
-			try {
-				if (!_iteratorNormalCompletion3 && _iterator3.return) {
-					_iterator3.return();
-				}
-			} finally {
-				if (_didIteratorError3) {
-					throw _iteratorError3;
-				}
-			}
-		}
-
-		++delta;
-		++n;
-	}
-	return output.join('');
-};
-
-/**
- * Converts a Punycode string representing a domain name or an email address
- * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
- * it doesn't matter if you call it on a string that has already been
- * converted to Unicode.
- * @memberOf punycode
- * @param {String} input The Punycoded domain name or email address to
- * convert to Unicode.
- * @returns {String} The Unicode representation of the given Punycode
- * string.
- */
-var toUnicode = function toUnicode(input) {
-	return mapDomain(input, function (string) {
-		return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;
-	});
-};
-
-/**
- * Converts a Unicode string representing a domain name or an email address to
- * Punycode. Only the non-ASCII parts of the domain name will be converted,
- * i.e. it doesn't matter if you call it with a domain that's already in
- * ASCII.
- * @memberOf punycode
- * @param {String} input The domain name or email address to convert, as a
- * Unicode string.
- * @returns {String} The Punycode representation of the given domain name or
- * email address.
- */
-var toASCII = function toASCII(input) {
-	return mapDomain(input, function (string) {
-		return regexNonASCII.test(string) ? 'xn--' + encode(string) : string;
-	});
-};
-
-/*--------------------------------------------------------------------------*/
-
-/** Define the public API */
-var punycode = {
-	/**
-  * A string representing the current Punycode.js version number.
-  * @memberOf punycode
-  * @type String
-  */
-	'version': '2.1.0',
-	/**
-  * An object of methods to convert from JavaScript's internal character
-  * representation (UCS-2) to Unicode code points, and back.
-  * @see <https://mathiasbynens.be/notes/javascript-encoding>
-  * @memberOf punycode
-  * @type Object
-  */
-	'ucs2': {
-		'decode': ucs2decode,
-		'encode': ucs2encode
-	},
-	'decode': decode,
-	'encode': encode,
-	'toASCII': toASCII,
-	'toUnicode': toUnicode
-};
-
-/**
- * URI.js
- *
- * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.
- * @author <a href="mailto:gary.court@gmail.com">Gary Court</a>
- * @see http://github.com/garycourt/uri-js
- */
-/**
- * Copyright 2011 Gary Court. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- *    1. Redistributions of source code must retain the above copyright notice, this list of
- *       conditions and the following disclaimer.
- *
- *    2. 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 GARY COURT ``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 GARY COURT OR
- * CONTRIBUTORS 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.
- *
- * The views and conclusions contained in the software and documentation are those of the
- * authors and should not be interpreted as representing official policies, either expressed
- * or implied, of Gary Court.
- */
-var SCHEMES = {};
-function pctEncChar(chr) {
-    var c = chr.charCodeAt(0);
-    var e = void 0;
-    if (c < 16) e = "%0" + c.toString(16).toUpperCase();else if (c < 128) e = "%" + c.toString(16).toUpperCase();else if (c < 2048) e = "%" + (c >> 6 | 192).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase();else e = "%" + (c >> 12 | 224).toString(16).toUpperCase() + "%" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase();
-    return e;
-}
-function pctDecChars(str) {
-    var newStr = "";
-    var i = 0;
-    var il = str.length;
-    while (i < il) {
-        var c = parseInt(str.substr(i + 1, 2), 16);
-        if (c < 128) {
-            newStr += String.fromCharCode(c);
-            i += 3;
-        } else if (c >= 194 && c < 224) {
-            if (il - i >= 6) {
-                var c2 = parseInt(str.substr(i + 4, 2), 16);
-                newStr += String.fromCharCode((c & 31) << 6 | c2 & 63);
-            } else {
-                newStr += str.substr(i, 6);
-            }
-            i += 6;
-        } else if (c >= 224) {
-            if (il - i >= 9) {
-                var _c = parseInt(str.substr(i + 4, 2), 16);
-                var c3 = parseInt(str.substr(i + 7, 2), 16);
-                newStr += String.fromCharCode((c & 15) << 12 | (_c & 63) << 6 | c3 & 63);
-            } else {
-                newStr += str.substr(i, 9);
-            }
-            i += 9;
-        } else {
-            newStr += str.substr(i, 3);
-            i += 3;
-        }
-    }
-    return newStr;
-}
-function _normalizeComponentEncoding(components, protocol) {
-    function decodeUnreserved(str) {
-        var decStr = pctDecChars(str);
-        return !decStr.match(protocol.UNRESERVED) ? str : decStr;
-    }
-    if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, "");
-    if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);
-    if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);
-    if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);
-    if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);
-    if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);
-    return components;
-}
-
-function _stripLeadingZeros(str) {
-    return str.replace(/^0*(.*)/, "$1") || "0";
-}
-function _normalizeIPv4(host, protocol) {
-    var matches = host.match(protocol.IPV4ADDRESS) || [];
-
-    var _matches = slicedToArray(matches, 2),
-        address = _matches[1];
-
-    if (address) {
-        return address.split(".").map(_stripLeadingZeros).join(".");
-    } else {
-        return host;
-    }
-}
-function _normalizeIPv6(host, protocol) {
-    var matches = host.match(protocol.IPV6ADDRESS) || [];
-
-    var _matches2 = slicedToArray(matches, 3),
-        address = _matches2[1],
-        zone = _matches2[2];
-
-    if (address) {
-        var _address$toLowerCase$ = address.toLowerCase().split('::').reverse(),
-            _address$toLowerCase$2 = slicedToArray(_address$toLowerCase$, 2),
-            last = _address$toLowerCase$2[0],
-            first = _address$toLowerCase$2[1];
-
-        var firstFields = first ? first.split(":").map(_stripLeadingZeros) : [];
-        var lastFields = last.split(":").map(_stripLeadingZeros);
-        var isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);
-        var fieldCount = isLastFieldIPv4Address ? 7 : 8;
-        var lastFieldsStart = lastFields.length - fieldCount;
-        var fields = Array(fieldCount);
-        for (var x = 0; x < fieldCount; ++x) {
-            fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';
-        }
-        if (isLastFieldIPv4Address) {
-            fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);
-        }
-        var allZeroFields = fields.reduce(function (acc, field, index) {
-            if (!field || field === "0") {
-                var lastLongest = acc[acc.length - 1];
-                if (lastLongest && lastLongest.index + lastLongest.length === index) {
-                    lastLongest.length++;
-                } else {
-                    acc.push({ index: index, length: 1 });
-                }
-            }
-            return acc;
-        }, []);
-        var longestZeroFields = allZeroFields.sort(function (a, b) {
-            return b.length - a.length;
-        })[0];
-        var newHost = void 0;
-        if (longestZeroFields && longestZeroFields.length > 1) {
-            var newFirst = fields.slice(0, longestZeroFields.index);
-            var newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);
-            newHost = newFirst.join(":") + "::" + newLast.join(":");
-        } else {
-            newHost = fields.join(":");
-        }
-        if (zone) {
-            newHost += "%" + zone;
-        }
-        return newHost;
-    } else {
-        return host;
-    }
-}
-var URI_PARSE = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i;
-var NO_MATCH_IS_UNDEFINED = "".match(/(){0}/)[1] === undefined;
-function parse(uriString) {
-    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-
-    var components = {};
-    var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL;
-    if (options.reference === "suffix") uriString = (options.scheme ? options.scheme + ":" : "") + "//" + uriString;
-    var matches = uriString.match(URI_PARSE);
-    if (matches) {
-        if (NO_MATCH_IS_UNDEFINED) {
-            //store each component
-            components.scheme = matches[1];
-            components.userinfo = matches[3];
-            components.host = matches[4];
-            components.port = parseInt(matches[5], 10);
-            components.path = matches[6] || "";
-            components.query = matches[7];
-            components.fragment = matches[8];
-            //fix port number
-            if (isNaN(components.port)) {
-                components.port = matches[5];
-            }
-        } else {
-            //IE FIX for improper RegExp matching
-            //store each component
-            components.scheme = matches[1] || undefined;
-            components.userinfo = uriString.indexOf("@") !== -1 ? matches[3] : undefined;
-            components.host = uriString.indexOf("//") !== -1 ? matches[4] : undefined;
-            components.port = parseInt(matches[5], 10);
-            components.path = matches[6] || "";
-            components.query = uriString.indexOf("?") !== -1 ? matches[7] : undefined;
-            components.fragment = uriString.indexOf("#") !== -1 ? matches[8] : undefined;
-            //fix port number
-            if (isNaN(components.port)) {
-                components.port = uriString.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? matches[4] : undefined;
-            }
-        }
-        if (components.host) {
-            //normalize IP hosts
-            components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);
-        }
-        //determine reference type
-        if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {
-            components.reference = "same-document";
-        } else if (components.scheme === undefined) {
-            components.reference = "relative";
-        } else if (components.fragment === undefined) {
-            components.reference = "absolute";
-        } else {
-            components.reference = "uri";
-        }
-        //check for reference errors
-        if (options.reference && options.reference !== "suffix" && options.reference !== components.reference) {
-            components.error = components.error || "URI is not a " + options.reference + " reference.";
-        }
-        //find scheme handler
-        var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()];
-        //check if scheme can't handle IRIs
-        if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {
-            //if host component is a domain name
-            if (components.host && (options.domainHost || schemeHandler && schemeHandler.domainHost)) {
-                //convert Unicode IDN -> ASCII IDN
-                try {
-                    components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());
-                } catch (e) {
-                    components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e;
-                }
-            }
-            //convert IRI -> URI
-            _normalizeComponentEncoding(components, URI_PROTOCOL);
-        } else {
-            //normalize encodings
-            _normalizeComponentEncoding(components, protocol);
-        }
-        //perform scheme specific parsing
-        if (schemeHandler && schemeHandler.parse) {
-            schemeHandler.parse(components, options);
-        }
-    } else {
-        components.error = components.error || "URI can not be parsed.";
-    }
-    return components;
-}
-
-function _recomposeAuthority(components, options) {
-    var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL;
-    var uriTokens = [];
-    if (components.userinfo !== undefined) {
-        uriTokens.push(components.userinfo);
-        uriTokens.push("@");
-    }
-    if (components.host !== undefined) {
-        //normalize IP hosts, add brackets and escape zone separator for IPv6
-        uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, function (_, $1, $2) {
-            return "[" + $1 + ($2 ? "%25" + $2 : "") + "]";
-        }));
-    }
-    if (typeof components.port === "number") {
-        uriTokens.push(":");
-        uriTokens.push(components.port.toString(10));
-    }
-    return uriTokens.length ? uriTokens.join("") : undefined;
-}
-
-var RDS1 = /^\.\.?\//;
-var RDS2 = /^\/\.(\/|$)/;
-var RDS3 = /^\/\.\.(\/|$)/;
-var RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/;
-function removeDotSegments(input) {
-    var output = [];
-    while (input.length) {
-        if (input.match(RDS1)) {
-            input = input.replace(RDS1, "");
-        } else if (input.match(RDS2)) {
-            input = input.replace(RDS2, "/");
-        } else if (input.match(RDS3)) {
-            input = input.replace(RDS3, "/");
-            output.pop();
-        } else if (input === "." || input === "..") {
-            input = "";
-        } else {
-            var im = input.match(RDS5);
-            if (im) {
-                var s = im[0];
-                input = input.slice(s.length);
-                output.push(s);
-            } else {
-                throw new Error("Unexpected dot segment condition");
-            }
-        }
-    }
-    return output.join("");
-}
-
-function serialize(components) {
-    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-
-    var protocol = options.iri ? IRI_PROTOCOL : URI_PROTOCOL;
-    var uriTokens = [];
-    //find scheme handler
-    var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()];
-    //perform scheme specific serialization
-    if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);
-    if (components.host) {
-        //if host component is an IPv6 address
-        if (protocol.IPV6ADDRESS.test(components.host)) {}
-        //TODO: normalize IPv6 address as per RFC 5952
-
-        //if host component is a domain name
-        else if (options.domainHost || schemeHandler && schemeHandler.domainHost) {
-                //convert IDN via punycode
-                try {
-                    components.host = !options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host);
-                } catch (e) {
-                    components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e;
-                }
-            }
-    }
-    //normalize encoding
-    _normalizeComponentEncoding(components, protocol);
-    if (options.reference !== "suffix" && components.scheme) {
-        uriTokens.push(components.scheme);
-        uriTokens.push(":");
-    }
-    var authority = _recomposeAuthority(components, options);
-    if (authority !== undefined) {
-        if (options.reference !== "suffix") {
-            uriTokens.push("//");
-        }
-        uriTokens.push(authority);
-        if (components.path && components.path.charAt(0) !== "/") {
-            uriTokens.push("/");
-        }
-    }
-    if (components.path !== undefined) {
-        var s = components.path;
-        if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {
-            s = removeDotSegments(s);
-        }
-        if (authority === undefined) {
-            s = s.replace(/^\/\//, "/%2F"); //don't allow the path to start with "//"
-        }
-        uriTokens.push(s);
-    }
-    if (components.query !== undefined) {
-        uriTokens.push("?");
-        uriTokens.push(components.query);
-    }
-    if (components.fragment !== undefined) {
-        uriTokens.push("#");
-        uriTokens.push(components.fragment);
-    }
-    return uriTokens.join(""); //merge tokens into a string
-}
-
-function resolveComponents(base, relative) {
-    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
-    var skipNormalization = arguments[3];
-
-    var target = {};
-    if (!skipNormalization) {
-        base = parse(serialize(base, options), options); //normalize base components
-        relative = parse(serialize(relative, options), options); //normalize relative components
-    }
-    options = options || {};
-    if (!options.tolerant && relative.scheme) {
-        target.scheme = relative.scheme;
-        //target.authority = relative.authority;
-        target.userinfo = relative.userinfo;
-        target.host = relative.host;
-        target.port = relative.port;
-        target.path = removeDotSegments(relative.path || "");
-        target.query = relative.query;
-    } else {
-        if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {
-            //target.authority = relative.authority;
-            target.userinfo = relative.userinfo;
-            target.host = relative.host;
-            target.port = relative.port;
-            target.path = removeDotSegments(relative.path || "");
-            target.query = relative.query;
-        } else {
-            if (!relative.path) {
-                target.path = base.path;
-                if (relative.query !== undefined) {
-                    target.query = relative.query;
-                } else {
-                    target.query = base.query;
-                }
-            } else {
-                if (relative.path.charAt(0) === "/") {
-                    target.path = removeDotSegments(relative.path);
-                } else {
-                    if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {
-                        target.path = "/" + relative.path;
-                    } else if (!base.path) {
-                        target.path = relative.path;
-                    } else {
-                        target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path;
-                    }
-                    target.path = removeDotSegments(target.path);
-                }
-                target.query = relative.query;
-            }
-            //target.authority = base.authority;
-            target.userinfo = base.userinfo;
-            target.host = base.host;
-            target.port = base.port;
-        }
-        target.scheme = base.scheme;
-    }
-    target.fragment = relative.fragment;
-    return target;
-}
-
-function resolve(baseURI, relativeURI, options) {
-    var schemelessOptions = assign({ scheme: 'null' }, options);
-    return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);
-}
-
-function normalize(uri, options) {
-    if (typeof uri === "string") {
-        uri = serialize(parse(uri, options), options);
-    } else if (typeOf(uri) === "object") {
-        uri = parse(serialize(uri, options), options);
-    }
-    return uri;
-}
-
-function equal(uriA, uriB, options) {
-    if (typeof uriA === "string") {
-        uriA = serialize(parse(uriA, options), options);
-    } else if (typeOf(uriA) === "object") {
-        uriA = serialize(uriA, options);
-    }
-    if (typeof uriB === "string") {
-        uriB = serialize(parse(uriB, options), options);
-    } else if (typeOf(uriB) === "object") {
-        uriB = serialize(uriB, options);
-    }
-    return uriA === uriB;
-}
-
-function escapeComponent(str, options) {
-    return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE, pctEncChar);
-}
-
-function unescapeComponent(str, options) {
-    return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED, pctDecChars);
-}
-
-var handler = {
-    scheme: "http",
-    domainHost: true,
-    parse: function parse(components, options) {
-        //report missing host
-        if (!components.host) {
-            components.error = components.error || "HTTP URIs must have a host.";
-        }
-        return components;
-    },
-    serialize: function serialize(components, options) {
-        //normalize the default port
-        if (components.port === (String(components.scheme).toLowerCase() !== "https" ? 80 : 443) || components.port === "") {
-            components.port = undefined;
-        }
-        //normalize the empty path
-        if (!components.path) {
-            components.path = "/";
-        }
-        //NOTE: We do not parse query strings for HTTP URIs
-        //as WWW Form Url Encoded query strings are part of the HTML4+ spec,
-        //and not the HTTP spec.
-        return components;
-    }
-};
-
-var handler$1 = {
-    scheme: "https",
-    domainHost: handler.domainHost,
-    parse: handler.parse,
-    serialize: handler.serialize
-};
-
-var O = {};
-var isIRI = true;
-//RFC 3986
-var UNRESERVED$$ = "[A-Za-z0-9\\-\\.\\_\\~" + (isIRI ? "\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF" : "") + "]";
-var HEXDIG$$ = "[0-9A-Fa-f]"; //case-insensitive
-var PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)); //expanded
-//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =
-//const ATEXT$$ = "[A-Za-z0-9\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~]";
-//const WSP$$ = "[\\x20\\x09]";
-//const OBS_QTEXT$$ = "[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]";  //(%d1-8 / %d11-12 / %d14-31 / %d127)
-//const QTEXT$$ = merge("[\\x21\\x23-\\x5B\\x5D-\\x7E]", OBS_QTEXT$$);  //%d33 / %d35-91 / %d93-126 / obs-qtext
-//const VCHAR$$ = "[\\x21-\\x7E]";
-//const WSP$$ = "[\\x20\\x09]";
-//const OBS_QP$ = subexp("\\\\" + merge("[\\x00\\x0D\\x0A]", OBS_QTEXT$$));  //%d0 / CR / LF / obs-qtext
-//const FWS$ = subexp(subexp(WSP$$ + "*" + "\\x0D\\x0A") + "?" + WSP$$ + "+");
-//const QUOTED_PAIR$ = subexp(subexp("\\\\" + subexp(VCHAR$$ + "|" + WSP$$)) + "|" + OBS_QP$);
-//const QUOTED_STRING$ = subexp('\\"' + subexp(FWS$ + "?" + QCONTENT$) + "*" + FWS$ + "?" + '\\"');
-var ATEXT$$ = "[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]";
-var QTEXT$$ = "[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]";
-var VCHAR$$ = merge(QTEXT$$, "[\\\"\\\\]");
-var SOME_DELIMS$$ = "[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]";
-var UNRESERVED = new RegExp(UNRESERVED$$, "g");
-var PCT_ENCODED = new RegExp(PCT_ENCODED$, "g");
-var NOT_LOCAL_PART = new RegExp(merge("[^]", ATEXT$$, "[\\.]", '[\\"]', VCHAR$$), "g");
-var NOT_HFNAME = new RegExp(merge("[^]", UNRESERVED$$, SOME_DELIMS$$), "g");
-var NOT_HFVALUE = NOT_HFNAME;
-function decodeUnreserved(str) {
-    var decStr = pctDecChars(str);
-    return !decStr.match(UNRESERVED) ? str : decStr;
-}
-var handler$2 = {
-    scheme: "mailto",
-    parse: function parse$$1(components, options) {
-        var mailtoComponents = components;
-        var to = mailtoComponents.to = mailtoComponents.path ? mailtoComponents.path.split(",") : [];
-        mailtoComponents.path = undefined;
-        if (mailtoComponents.query) {
-            var unknownHeaders = false;
-            var headers = {};
-            var hfields = mailtoComponents.query.split("&");
-            for (var x = 0, xl = hfields.length; x < xl; ++x) {
-                var hfield = hfields[x].split("=");
-                switch (hfield[0]) {
-                    case "to":
-                        var toAddrs = hfield[1].split(",");
-                        for (var _x = 0, _xl = toAddrs.length; _x < _xl; ++_x) {
-                            to.push(toAddrs[_x]);
-                        }
-                        break;
-                    case "subject":
-                        mailtoComponents.subject = unescapeComponent(hfield[1], options);
-                        break;
-                    case "body":
-                        mailtoComponents.body = unescapeComponent(hfield[1], options);
-                        break;
-                    default:
-                        unknownHeaders = true;
-                        headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);
-                        break;
-                }
-            }
-            if (unknownHeaders) mailtoComponents.headers = headers;
-        }
-        mailtoComponents.query = undefined;
-        for (var _x2 = 0, _xl2 = to.length; _x2 < _xl2; ++_x2) {
-            var addr = to[_x2].split("@");
-            addr[0] = unescapeComponent(addr[0]);
-            if (!options.unicodeSupport) {
-                //convert Unicode IDN -> ASCII IDN
-                try {
-                    addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());
-                } catch (e) {
-                    mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e;
-                }
-            } else {
-                addr[1] = unescapeComponent(addr[1], options).toLowerCase();
-            }
-            to[_x2] = addr.join("@");
-        }
-        return mailtoComponents;
-    },
-    serialize: function serialize$$1(mailtoComponents, options) {
-        var components = mailtoComponents;
-        var to = toArray(mailtoComponents.to);
-        if (to) {
-            for (var x = 0, xl = to.length; x < xl; ++x) {
-                var toAddr = String(to[x]);
-                var atIdx = toAddr.lastIndexOf("@");
-                var localPart = toAddr.slice(0, atIdx).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);
-                var domain = toAddr.slice(atIdx + 1);
-                //convert IDN via punycode
-                try {
-                    domain = !options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain);
-                } catch (e) {
-                    components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e;
-                }
-                to[x] = localPart + "@" + domain;
-            }
-            components.path = to.join(",");
-        }
-        var headers = mailtoComponents.headers = mailtoComponents.headers || {};
-        if (mailtoComponents.subject) headers["subject"] = mailtoComponents.subject;
-        if (mailtoComponents.body) headers["body"] = mailtoComponents.body;
-        var fields = [];
-        for (var name in headers) {
-            if (headers[name] !== O[name]) {
-                fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + "=" + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar));
-            }
-        }
-        if (fields.length) {
-            components.query = fields.join("&");
-        }
-        return components;
-    }
-};
-
-var URN_PARSE = /^([^\:]+)\:(.*)/;
-//RFC 2141
-var handler$3 = {
-    scheme: "urn",
-    parse: function parse$$1(components, options) {
-        var matches = components.path && components.path.match(URN_PARSE);
-        var urnComponents = components;
-        if (matches) {
-            var scheme = options.scheme || urnComponents.scheme || "urn";
-            var nid = matches[1].toLowerCase();
-            var nss = matches[2];
-            var urnScheme = scheme + ":" + (options.nid || nid);
-            var schemeHandler = SCHEMES[urnScheme];
-            urnComponents.nid = nid;
-            urnComponents.nss = nss;
-            urnComponents.path = undefined;
-            if (schemeHandler) {
-                urnComponents = schemeHandler.parse(urnComponents, options);
-            }
-        } else {
-            urnComponents.error = urnComponents.error || "URN can not be parsed.";
-        }
-        return urnComponents;
-    },
-    serialize: function serialize$$1(urnComponents, options) {
-        var scheme = options.scheme || urnComponents.scheme || "urn";
-        var nid = urnComponents.nid;
-        var urnScheme = scheme + ":" + (options.nid || nid);
-        var schemeHandler = SCHEMES[urnScheme];
-        if (schemeHandler) {
-            urnComponents = schemeHandler.serialize(urnComponents, options);
-        }
-        var uriComponents = urnComponents;
-        var nss = urnComponents.nss;
-        uriComponents.path = (nid || options.nid) + ":" + nss;
-        return uriComponents;
-    }
-};
-
-var UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/;
-//RFC 4122
-var handler$4 = {
-    scheme: "urn:uuid",
-    parse: function parse(urnComponents, options) {
-        var uuidComponents = urnComponents;
-        uuidComponents.uuid = uuidComponents.nss;
-        uuidComponents.nss = undefined;
-        if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {
-            uuidComponents.error = uuidComponents.error || "UUID is not valid.";
-        }
-        return uuidComponents;
-    },
-    serialize: function serialize(uuidComponents, options) {
-        var urnComponents = uuidComponents;
-        //normalize UUID
-        urnComponents.nss = (uuidComponents.uuid || "").toLowerCase();
-        return urnComponents;
-    }
-};
-
-SCHEMES[handler.scheme] = handler;
-SCHEMES[handler$1.scheme] = handler$1;
-SCHEMES[handler$2.scheme] = handler$2;
-SCHEMES[handler$3.scheme] = handler$3;
-SCHEMES[handler$4.scheme] = handler$4;
-
-exports.SCHEMES = SCHEMES;
-exports.pctEncChar = pctEncChar;
-exports.pctDecChars = pctDecChars;
-exports.parse = parse;
-exports.removeDotSegments = removeDotSegments;
-exports.serialize = serialize;
-exports.resolveComponents = resolveComponents;
-exports.resolve = resolve;
-exports.normalize = normalize;
-exports.equal = equal;
-exports.escapeComponent = escapeComponent;
-exports.unescapeComponent = unescapeComponent;
-
-Object.defineProperty(exports, '__esModule', { value: true });
-
-})));
-
-
-},{}],"ajv":[function(require,module,exports){
-'use strict';
-
-var compileSchema = require('./compile')
-  , resolve = require('./compile/resolve')
-  , Cache = require('./cache')
-  , SchemaObject = require('./compile/schema_obj')
-  , stableStringify = require('fast-json-stable-stringify')
-  , formats = require('./compile/formats')
-  , rules = require('./compile/rules')
-  , $dataMetaSchema = require('./data')
-  , util = require('./compile/util');
-
-module.exports = Ajv;
-
-Ajv.prototype.validate = validate;
-Ajv.prototype.compile = compile;
-Ajv.prototype.addSchema = addSchema;
-Ajv.prototype.addMetaSchema = addMetaSchema;
-Ajv.prototype.validateSchema = validateSchema;
-Ajv.prototype.getSchema = getSchema;
-Ajv.prototype.removeSchema = removeSchema;
-Ajv.prototype.addFormat = addFormat;
-Ajv.prototype.errorsText = errorsText;
-
-Ajv.prototype._addSchema = _addSchema;
-Ajv.prototype._compile = _compile;
-
-Ajv.prototype.compileAsync = require('./compile/async');
-var customKeyword = require('./keyword');
-Ajv.prototype.addKeyword = customKeyword.add;
-Ajv.prototype.getKeyword = customKeyword.get;
-Ajv.prototype.removeKeyword = customKeyword.remove;
-Ajv.prototype.validateKeyword = customKeyword.validate;
-
-var errorClasses = require('./compile/error_classes');
-Ajv.ValidationError = errorClasses.Validation;
-Ajv.MissingRefError = errorClasses.MissingRef;
-Ajv.$dataMetaSchema = $dataMetaSchema;
-
-var META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema';
-
-var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'strictDefaults' ];
-var META_SUPPORT_DATA = ['/properties'];
-
-/**
- * Creates validator instance.
- * Usage: `Ajv(opts)`
- * @param {Object} opts optional options
- * @return {Object} ajv instance
- */
-function Ajv(opts) {
-  if (!(this instanceof Ajv)) return new Ajv(opts);
-  opts = this._opts = util.copy(opts) || {};
-  setLogger(this);
-  this._schemas = {};
-  this._refs = {};
-  this._fragments = {};
-  this._formats = formats(opts.format);
-
-  this._cache = opts.cache || new Cache;
-  this._loadingSchemas = {};
-  this._compilations = [];
-  this.RULES = rules();
-  this._getId = chooseGetId(opts);
-
-  opts.loopRequired = opts.loopRequired || Infinity;
-  if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true;
-  if (opts.serialize === undefined) opts.serialize = stableStringify;
-  this._metaOpts = getMetaSchemaOptions(this);
-
-  if (opts.formats) addInitialFormats(this);
-  if (opts.keywords) addInitialKeywords(this);
-  addDefaultMetaSchema(this);
-  if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta);
-  if (opts.nullable) this.addKeyword('nullable', {metaSchema: {type: 'boolean'}});
-  addInitialSchemas(this);
-}
-
-
-
-/**
- * Validate data using schema
- * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize.
- * @this   Ajv
- * @param  {String|Object} schemaKeyRef key, ref or schema object
- * @param  {Any} data to be validated
- * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).
- */
-function validate(schemaKeyRef, data) {
-  var v;
-  if (typeof schemaKeyRef == 'string') {
-    v = this.getSchema(schemaKeyRef);
-    if (!v) throw new Error('no schema with key or ref "' + schemaKeyRef + '"');
-  } else {
-    var schemaObj = this._addSchema(schemaKeyRef);
-    v = schemaObj.validate || this._compile(schemaObj);
-  }
-
-  var valid = v(data);
-  if (v.$async !== true) this.errors = v.errors;
-  return valid;
-}
-
-
-/**
- * Create validating function for passed schema.
- * @this   Ajv
- * @param  {Object} schema schema object
- * @param  {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords.
- * @return {Function} validating function
- */
-function compile(schema, _meta) {
-  var schemaObj = this._addSchema(schema, undefined, _meta);
-  return schemaObj.validate || this._compile(schemaObj);
-}
-
-
-/**
- * Adds schema to the instance.
- * @this   Ajv
- * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.
- * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.
- * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.
- * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.
- * @return {Ajv} this for method chaining
- */
-function addSchema(schema, key, _skipValidation, _meta) {
-  if (Array.isArray(schema)){
-    for (var i=0; i<schema.length; i++) this.addSchema(schema[i], undefined, _skipValidation, _meta);
-    return this;
-  }
-  var id = this._getId(schema);
-  if (id !== undefined && typeof id != 'string')
-    throw new Error('schema id must be string');
-  key = resolve.normalizeId(key || id);
-  checkUnique(this, key);
-  this._schemas[key] = this._addSchema(schema, _skipValidation, _meta, true);
-  return this;
-}
-
-
-/**
- * Add schema that will be used to validate other schemas
- * options in META_IGNORE_OPTIONS are alway set to false
- * @this   Ajv
- * @param {Object} schema schema object
- * @param {String} key optional schema key
- * @param {Boolean} skipValidation true to skip schema validation, can be used to override validateSchema option for meta-schema
- * @return {Ajv} this for method chaining
- */
-function addMetaSchema(schema, key, skipValidation) {
-  this.addSchema(schema, key, skipValidation, true);
-  return this;
-}
-
-
-/**
- * Validate schema
- * @this   Ajv
- * @param {Object} schema schema to validate
- * @param {Boolean} throwOrLogError pass true to throw (or log) an error if invalid
- * @return {Boolean} true if schema is valid
- */
-function validateSchema(schema, throwOrLogError) {
-  var $schema = schema.$schema;
-  if ($schema !== undefined && typeof $schema != 'string')
-    throw new Error('$schema must be a string');
-  $schema = $schema || this._opts.defaultMeta || defaultMeta(this);
-  if (!$schema) {
-    this.logger.warn('meta-schema not available');
-    this.errors = null;
-    return true;
-  }
-  var valid = this.validate($schema, schema);
-  if (!valid && throwOrLogError) {
-    var message = 'schema is invalid: ' + this.errorsText();
-    if (this._opts.validateSchema == 'log') this.logger.error(message);
-    else throw new Error(message);
-  }
-  return valid;
-}
-
-
-function defaultMeta(self) {
-  var meta = self._opts.meta;
-  self._opts.defaultMeta = typeof meta == 'object'
-                            ? self._getId(meta) || meta
-                            : self.getSchema(META_SCHEMA_ID)
-                              ? META_SCHEMA_ID
-                              : undefined;
-  return self._opts.defaultMeta;
-}
-
-
-/**
- * Get compiled schema from the instance by `key` or `ref`.
- * @this   Ajv
- * @param  {String} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id).
- * @return {Function} schema validating function (with property `schema`).
- */
-function getSchema(keyRef) {
-  var schemaObj = _getSchemaObj(this, keyRef);
-  switch (typeof schemaObj) {
-    case 'object': return schemaObj.validate || this._compile(schemaObj);
-    case 'string': return this.getSchema(schemaObj);
-    case 'undefined': return _getSchemaFragment(this, keyRef);
-  }
-}
-
-
-function _getSchemaFragment(self, ref) {
-  var res = resolve.schema.call(self, { schema: {} }, ref);
-  if (res) {
-    var schema = res.schema
-      , root = res.root
-      , baseId = res.baseId;
-    var v = compileSchema.call(self, schema, root, undefined, baseId);
-    self._fragments[ref] = new SchemaObject({
-      ref: ref,
-      fragment: true,
-      schema: schema,
-      root: root,
-      baseId: baseId,
-      validate: v
-    });
-    return v;
-  }
-}
-
-
-function _getSchemaObj(self, keyRef) {
-  keyRef = resolve.normalizeId(keyRef);
-  return self._schemas[keyRef] || self._refs[keyRef] || self._fragments[keyRef];
-}
-
-
-/**
- * Remove cached schema(s).
- * If no parameter is passed all schemas but meta-schemas are removed.
- * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.
- * Even if schema is referenced by other schemas it still can be removed as other schemas have local references.
- * @this   Ajv
- * @param  {String|Object|RegExp} schemaKeyRef key, ref, pattern to match key/ref or schema object
- * @return {Ajv} this for method chaining
- */
-function removeSchema(schemaKeyRef) {
-  if (schemaKeyRef instanceof RegExp) {
-    _removeAllSchemas(this, this._schemas, schemaKeyRef);
-    _removeAllSchemas(this, this._refs, schemaKeyRef);
-    return this;
-  }
-  switch (typeof schemaKeyRef) {
-    case 'undefined':
-      _removeAllSchemas(this, this._schemas);
-      _removeAllSchemas(this, this._refs);
-      this._cache.clear();
-      return this;
-    case 'string':
-      var schemaObj = _getSchemaObj(this, schemaKeyRef);
-      if (schemaObj) this._cache.del(schemaObj.cacheKey);
-      delete this._schemas[schemaKeyRef];
-      delete this._refs[schemaKeyRef];
-      return this;
-    case 'object':
-      var serialize = this._opts.serialize;
-      var cacheKey = serialize ? serialize(schemaKeyRef) : schemaKeyRef;
-      this._cache.del(cacheKey);
-      var id = this._getId(schemaKeyRef);
-      if (id) {
-        id = resolve.normalizeId(id);
-        delete this._schemas[id];
-        delete this._refs[id];
-      }
-  }
-  return this;
-}
-
-
-function _removeAllSchemas(self, schemas, regex) {
-  for (var keyRef in schemas) {
-    var schemaObj = schemas[keyRef];
-    if (!schemaObj.meta && (!regex || regex.test(keyRef))) {
-      self._cache.del(schemaObj.cacheKey);
-      delete schemas[keyRef];
-    }
-  }
-}
-
-
-/* @this   Ajv */
-function _addSchema(schema, skipValidation, meta, shouldAddSchema) {
-  if (typeof schema != 'object' && typeof schema != 'boolean')
-    throw new Error('schema should be object or boolean');
-  var serialize = this._opts.serialize;
-  var cacheKey = serialize ? serialize(schema) : schema;
-  var cached = this._cache.get(cacheKey);
-  if (cached) return cached;
-
-  shouldAddSchema = shouldAddSchema || this._opts.addUsedSchema !== false;
-
-  var id = resolve.normalizeId(this._getId(schema));
-  if (id && shouldAddSchema) checkUnique(this, id);
-
-  var willValidate = this._opts.validateSchema !== false && !skipValidation;
-  var recursiveMeta;
-  if (willValidate && !(recursiveMeta = id && id == resolve.normalizeId(schema.$schema)))
-    this.validateSchema(schema, true);
-
-  var localRefs = resolve.ids.call(this, schema);
-
-  var schemaObj = new SchemaObject({
-    id: id,
-    schema: schema,
-    localRefs: localRefs,
-    cacheKey: cacheKey,
-    meta: meta
-  });
-
-  if (id[0] != '#' && shouldAddSchema) this._refs[id] = schemaObj;
-  this._cache.put(cacheKey, schemaObj);
-
-  if (willValidate && recursiveMeta) this.validateSchema(schema, true);
-
-  return schemaObj;
-}
-
-
-/* @this   Ajv */
-function _compile(schemaObj, root) {
-  if (schemaObj.compiling) {
-    schemaObj.validate = callValidate;
-    callValidate.schema = schemaObj.schema;
-    callValidate.errors = null;
-    callValidate.root = root ? root : callValidate;
-    if (schemaObj.schema.$async === true)
-      callValidate.$async = true;
-    return callValidate;
-  }
-  schemaObj.compiling = true;
-
-  var currentOpts;
-  if (schemaObj.meta) {
-    currentOpts = this._opts;
-    this._opts = this._metaOpts;
-  }
-
-  var v;
-  try { v = compileSchema.call(this, schemaObj.schema, root, schemaObj.localRefs); }
-  catch(e) {
-    delete schemaObj.validate;
-    throw e;
-  }
-  finally {
-    schemaObj.compiling = false;
-    if (schemaObj.meta) this._opts = currentOpts;
-  }
-
-  schemaObj.validate = v;
-  schemaObj.refs = v.refs;
-  schemaObj.refVal = v.refVal;
-  schemaObj.root = v.root;
-  return v;
-
-
-  /* @this   {*} - custom context, see passContext option */
-  function callValidate() {
-    /* jshint validthis: true */
-    var _validate = schemaObj.validate;
-    var result = _validate.apply(this, arguments);
-    callValidate.errors = _validate.errors;
-    return result;
-  }
-}
-
-
-function chooseGetId(opts) {
-  switch (opts.schemaId) {
-    case 'auto': return _get$IdOrId;
-    case 'id': return _getId;
-    default: return _get$Id;
-  }
-}
-
-/* @this   Ajv */
-function _getId(schema) {
-  if (schema.$id) this.logger.warn('schema $id ignored', schema.$id);
-  return schema.id;
-}
-
-/* @this   Ajv */
-function _get$Id(schema) {
-  if (schema.id) this.logger.warn('schema id ignored', schema.id);
-  return schema.$id;
-}
-
-
-function _get$IdOrId(schema) {
-  if (schema.$id && schema.id && schema.$id != schema.id)
-    throw new Error('schema $id is different from id');
-  return schema.$id || schema.id;
-}
-
-
-/**
- * Convert array of error message objects to string
- * @this   Ajv
- * @param  {Array<Object>} errors optional array of validation errors, if not passed errors from the instance are used.
- * @param  {Object} options optional options with properties `separator` and `dataVar`.
- * @return {String} human readable string with all errors descriptions
- */
-function errorsText(errors, options) {
-  errors = errors || this.errors;
-  if (!errors) return 'No errors';
-  options = options || {};
-  var separator = options.separator === undefined ? ', ' : options.separator;
-  var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;
-
-  var text = '';
-  for (var i=0; i<errors.length; i++) {
-    var e = errors[i];
-    if (e) text += dataVar + e.dataPath + ' ' + e.message + separator;
-  }
-  return text.slice(0, -separator.length);
-}
-
-
-/**
- * Add custom format
- * @this   Ajv
- * @param {String} name format name
- * @param {String|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid)
- * @return {Ajv} this for method chaining
- */
-function addFormat(name, format) {
-  if (typeof format == 'string') format = new RegExp(format);
-  this._formats[name] = format;
-  return this;
-}
-
-
-function addDefaultMetaSchema(self) {
-  var $dataSchema;
-  if (self._opts.$data) {
-    $dataSchema = require('./refs/data.json');
-    self.addMetaSchema($dataSchema, $dataSchema.$id, true);
-  }
-  if (self._opts.meta === false) return;
-  var metaSchema = require('./refs/json-schema-draft-07.json');
-  if (self._opts.$data) metaSchema = $dataMetaSchema(metaSchema, META_SUPPORT_DATA);
-  self.addMetaSchema(metaSchema, META_SCHEMA_ID, true);
-  self._refs['http://json-schema.org/schema'] = META_SCHEMA_ID;
-}
-
-
-function addInitialSchemas(self) {
-  var optsSchemas = self._opts.schemas;
-  if (!optsSchemas) return;
-  if (Array.isArray(optsSchemas)) self.addSchema(optsSchemas);
-  else for (var key in optsSchemas) self.addSchema(optsSchemas[key], key);
-}
-
-
-function addInitialFormats(self) {
-  for (var name in self._opts.formats) {
-    var format = self._opts.formats[name];
-    self.addFormat(name, format);
-  }
-}
-
-
-function addInitialKeywords(self) {
-  for (var name in self._opts.keywords) {
-    var keyword = self._opts.keywords[name];
-    self.addKeyword(name, keyword);
-  }
-}
-
-
-function checkUnique(self, id) {
-  if (self._schemas[id] || self._refs[id])
-    throw new Error('schema with key or id "' + id + '" already exists');
-}
-
-
-function getMetaSchemaOptions(self) {
-  var metaOpts = util.copy(self._opts);
-  for (var i=0; i<META_IGNORE_OPTIONS.length; i++)
-    delete metaOpts[META_IGNORE_OPTIONS[i]];
-  return metaOpts;
-}
-
-
-function setLogger(self) {
-  var logger = self._opts.logger;
-  if (logger === false) {
-    self.logger = {log: noop, warn: noop, error: noop};
-  } else {
-    if (logger === undefined) logger = console;
-    if (!(typeof logger == 'object' && logger.log && logger.warn && logger.error))
-      throw new Error('logger must implement log, warn and error methods');
-    self.logger = logger;
-  }
-}
-
-
-function noop() {}
-
-},{"./cache":1,"./compile":5,"./compile/async":2,"./compile/error_classes":3,"./compile/formats":4,"./compile/resolve":6,"./compile/rules":7,"./compile/schema_obj":8,"./compile/util":10,"./data":11,"./keyword":39,"./refs/data.json":40,"./refs/json-schema-draft-07.json":41,"fast-json-stable-stringify":43}]},{},[])("ajv")
-});
diff --git a/templetes/node_modules/ajv/dist/ajv.min.js b/templetes/node_modules/ajv/dist/ajv.min.js
deleted file mode 100644
index 157af21a..00000000
--- a/templetes/node_modules/ajv/dist/ajv.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* ajv 6.12.0: Another JSON Schema Validator */
-!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Ajv=e()}}(function(){return function o(i,n,l){function c(r,e){if(!n[r]){if(!i[r]){var t="function"==typeof require&&require;if(!e&&t)return t(r,!0);if(u)return u(r,!0);var a=new Error("Cannot find module '"+r+"'");throw a.code="MODULE_NOT_FOUND",a}var s=n[r]={exports:{}};i[r][0].call(s.exports,function(e){return c(i[r][1][e]||e)},s,s.exports,o,i,n,l)}return n[r].exports}for(var u="function"==typeof require&&require,e=0;e<l.length;e++)c(l[e]);return c}({1:[function(e,r,t){"use strict";var a=r.exports=function(){this._cache={}};a.prototype.put=function(e,r){this._cache[e]=r},a.prototype.get=function(e){return this._cache[e]},a.prototype.del=function(e){delete this._cache[e]},a.prototype.clear=function(){this._cache={}}},{}],2:[function(e,r,t){"use strict";var s=e("./error_classes").MissingRef;r.exports=function t(r,i,a){var n=this;if("function"!=typeof this._opts.loadSchema)throw new Error("options.loadSchema should be a function");"function"==typeof i&&(a=i,i=void 0);var e=l(r).then(function(){var e=n._addSchema(r,void 0,i);return e.validate||c(e)});a&&e.then(function(e){a(null,e)},a);return e;function l(e){var r=e.$schema;return r&&!n.getSchema(r)?t.call(n,{$ref:r},!0):Promise.resolve()}function c(o){try{return n._compile(o)}catch(e){if(e instanceof s)return r(e);throw e}function r(e){var r=e.missingSchema;if(s(r))throw new Error("Schema "+r+" is loaded but "+e.missingRef+" cannot be resolved");var t=n._loadingSchemas[r];return t||(t=n._loadingSchemas[r]=n._opts.loadSchema(r)).then(a,a),t.then(function(e){if(!s(r))return l(e).then(function(){s(r)||n.addSchema(e,r,void 0,i)})}).then(function(){return c(o)});function a(){delete n._loadingSchemas[r]}function s(e){return n._refs[e]||n._schemas[e]}}}}},{"./error_classes":3}],3:[function(e,r,t){"use strict";var a=e("./resolve");function s(e,r,t){this.message=t||s.message(e,r),this.missingRef=a.url(e,r),this.missingSchema=a.normalizeId(a.fullPath(this.missingRef))}function o(e){return e.prototype=Object.create(Error.prototype),e.prototype.constructor=e}r.exports={Validation:o(function(e){this.message="validation failed",this.errors=e,this.ajv=this.validation=!0}),MissingRef:o(s)},s.message=function(e,r){return"can't resolve reference "+r+" from id "+e}},{"./resolve":6}],4:[function(e,r,t){"use strict";var a=e("./util"),o=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,i=[0,31,28,31,30,31,30,31,31,30,31,30,31],n=/^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i,s=/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,l=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,c=/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,u=/^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i,h=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,d=/^(?:\/(?:[^~/]|~0|~1)*)*$/,f=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,p=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;function m(e){return a.copy(m[e="full"==e?"full":"fast"])}function v(e){var r=e.match(o);if(!r)return!1;var t,a=+r[2],s=+r[3];return 1<=a&&a<=12&&1<=s&&s<=(2!=a||((t=+r[1])%4!=0||t%100==0&&t%400!=0)?i[a]:29)}function y(e,r){var t=e.match(n);if(!t)return!1;var a=t[1],s=t[2],o=t[3];return(a<=23&&s<=59&&o<=59||23==a&&59==s&&60==o)&&(!r||t[5])}(r.exports=m).fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,uri:/^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,"uri-template":c,url:u,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:s,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:w,uuid:h,"json-pointer":d,"json-pointer-uri-fragment":f,"relative-json-pointer":p},m.full={date:v,time:y,"date-time":function(e){var r=e.split(g);return 2==r.length&&v(r[0])&&y(r[1],!0)},uri:function(e){return P.test(e)&&l.test(e)},"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":c,url:u,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:s,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:w,uuid:h,"json-pointer":d,"json-pointer-uri-fragment":f,"relative-json-pointer":p};var g=/t|\s/i;var P=/\/|:/;var E=/[^\\]\\Z/;function w(e){if(E.test(e))return!1;try{return new RegExp(e),!0}catch(e){return!1}}},{"./util":10}],5:[function(e,r,t){"use strict";var j=e("./resolve"),O=e("./util"),I=e("./error_classes"),A=e("fast-json-stable-stringify"),C=e("../dotjs/validate"),k=O.ucs2length,L=e("fast-deep-equal"),z=I.Validation;function T(e,r,t){var a=s.call(this,e,r,t);return 0<=a?{index:a,compiling:!0}:{index:a=this._compilations.length,compiling:!(this._compilations[a]={schema:e,root:r,baseId:t})}}function q(e,r,t){var a=s.call(this,e,r,t);0<=a&&this._compilations.splice(a,1)}function s(e,r,t){for(var a=0;a<this._compilations.length;a++){var s=this._compilations[a];if(s.schema==e&&s.root==r&&s.baseId==t)return a}return-1}function N(e,r){return"var pattern"+e+" = new RegExp("+O.toQuotedString(r[e])+");"}function Q(e){return"var default"+e+" = defaults["+e+"];"}function U(e,r){return void 0===r[e]?"":"var refVal"+e+" = refVal["+e+"];"}function V(e){return"var customRule"+e+" = customRules["+e+"];"}function H(e,r){if(!e.length)return"";for(var t="",a=0;a<e.length;a++)t+=r(a,e);return t}r.exports=function c(e,u,h,r){var f=this,p=this._opts,d=[void 0],m={},v=[],t={},y=[],a={},g=[];u=u||{schema:e,refVal:d,refs:m};var s=T.call(this,e,u,r);var o=this._compilations[s.index];if(s.compiling)return o.callValidate=l;var P=this._formats;var E=this.RULES;try{var i=w(e,u,h,r);o.validate=i;var n=o.callValidate;return n&&(n.schema=i.schema,n.errors=null,n.refs=i.refs,n.refVal=i.refVal,n.root=i.root,n.$async=i.$async,p.sourceCode&&(n.source=i.source)),i}finally{q.call(this,e,u,r)}function l(){var e=o.validate,r=e.apply(this,arguments);return l.errors=e.errors,r}function w(e,r,t,a){var s=!r||r&&r.schema==e;if(r.schema!=u.schema)return c.call(f,e,r,t,a);var o,i=!0===e.$async,n=C({isTop:!0,schema:e,isRoot:s,baseId:a,root:r,schemaPath:"",errSchemaPath:"#",errorPath:'""',MissingRefError:I.MissingRef,RULES:E,validate:C,util:O,resolve:j,resolveRef:b,usePattern:$,useDefault:R,useCustomRule:D,opts:p,formats:P,logger:f.logger,self:f});n=H(d,U)+H(v,N)+H(y,Q)+H(g,V)+n,p.processCode&&(n=p.processCode(n));try{var l=new Function("self","RULES","formats","root","refVal","defaults","customRules","equal","ucs2length","ValidationError",n);o=l(f,E,P,u,d,y,g,L,k,z),d[0]=o}catch(e){throw f.logger.error("Error compiling schema, function code:",n),e}return o.schema=e,o.errors=null,o.refs=m,o.refVal=d,o.root=s?o:r,i&&(o.$async=!0),!0===p.sourceCode&&(o.source={code:n,patterns:v,defaults:y}),o}function b(e,r,t){r=j.url(e,r);var a,s,o=m[r];if(void 0!==o)return x(a=d[o],s="refVal["+o+"]");if(!t&&u.refs){var i=u.refs[r];if(void 0!==i)return s=S(r,a=u.refVal[i]),x(a,s)}s=S(r);var n=j.call(f,w,u,r);if(void 0===n){var l=h&&h[r];l&&(n=j.inlineRef(l,p.inlineRefs)?l:c.call(f,l,u,h,e))}if(void 0!==n)return F(r,n),x(n,s);_(r)}function S(e,r){var t=d.length;return d[t]=r,"refVal"+(m[e]=t)}function _(e){delete m[e]}function F(e,r){var t=m[e];d[t]=r}function x(e,r){return"object"==typeof e||"boolean"==typeof e?{code:r,schema:e,inline:!0}:{code:r,$async:e&&!!e.$async}}function $(e){var r=t[e];return void 0===r&&(r=t[e]=v.length,v[r]=e),"pattern"+r}function R(e){switch(typeof e){case"boolean":case"number":return""+e;case"string":return O.toQuotedString(e);case"object":if(null===e)return"null";var r=A(e),t=a[r];return void 0===t&&(t=a[r]=y.length,y[t]=e),"default"+t}}function D(e,r,t,a){if(!1!==f._opts.validateSchema){var s=e.definition.dependencies;if(s&&!s.every(function(e){return Object.prototype.hasOwnProperty.call(t,e)}))throw new Error("parent schema must have all required keywords: "+s.join(","));var o=e.definition.validateSchema;if(o){var i=o(r);if(!i){var n="keyword schema is invalid: "+f.errorsText(o.errors);if("log"!=f._opts.validateSchema)throw new Error(n);f.logger.error(n)}}}var l,c=e.definition.compile,u=e.definition.inline,h=e.definition.macro;if(c)l=c.call(f,r,t,a);else if(h)l=h.call(f,r,t,a),!1!==p.validateSchema&&f.validateSchema(l,!0);else if(u)l=u.call(f,a,e.keyword,r,t);else if(!(l=e.definition.validate))return;if(void 0===l)throw new Error('custom keyword "'+e.keyword+'"failed to compile');var d=g.length;return{code:"customRule"+d,validate:g[d]=l}}}},{"../dotjs/validate":38,"./error_classes":3,"./resolve":6,"./util":10,"fast-deep-equal":42,"fast-json-stable-stringify":43}],6:[function(e,r,t){"use strict";var m=e("uri-js"),v=e("fast-deep-equal"),y=e("./util"),l=e("./schema_obj"),a=e("json-schema-traverse");function c(e,r,t){var a=this._refs[t];if("string"==typeof a){if(!this._refs[a])return c.call(this,e,r,a);a=this._refs[a]}if((a=a||this._schemas[t])instanceof l)return d(a.schema,this._opts.inlineRefs)?a.schema:a.validate||this._compile(a);var s,o,i,n=u.call(this,r,t);return n&&(s=n.schema,r=n.root,i=n.baseId),s instanceof l?o=s.validate||e.call(this,s.schema,r,void 0,i):void 0!==s&&(o=d(s,this._opts.inlineRefs)?s:e.call(this,s,r,void 0,i)),o}function u(e,r){var t=m.parse(r),a=f(t),s=g(this._getId(e.schema));if(0===Object.keys(e.schema).length||a!==s){var o=P(a),i=this._refs[o];if("string"==typeof i)return function(e,r,t){var a=u.call(this,e,r);if(a){var s=a.schema,o=a.baseId;e=a.root;var i=this._getId(s);return i&&(o=p(o,i)),n.call(this,t,o,s,e)}}.call(this,e,i,t);if(i instanceof l)i.validate||this._compile(i),e=i;else{if(!((i=this._schemas[o])instanceof l))return;if(i.validate||this._compile(i),o==P(r))return{schema:i,root:e,baseId:s};e=i}if(!e.schema)return;s=g(this._getId(e.schema))}return n.call(this,t,s,e.schema,e)}(r.exports=c).normalizeId=P,c.fullPath=g,c.url=p,c.ids=function(e){var r=P(this._getId(e)),h={"":r},d={"":g(r,!1)},f={},p=this;return a(e,{allKeys:!0},function(e,r,t,a,s,o,i){if(""!==r){var n=p._getId(e),l=h[a],c=d[a]+"/"+s;if(void 0!==i&&(c+="/"+("number"==typeof i?i:y.escapeFragment(i))),"string"==typeof n){n=l=P(l?m.resolve(l,n):n);var u=p._refs[n];if("string"==typeof u&&(u=p._refs[u]),u&&u.schema){if(!v(e,u.schema))throw new Error('id "'+n+'" resolves to more than one schema')}else if(n!=P(c))if("#"==n[0]){if(f[n]&&!v(e,f[n]))throw new Error('id "'+n+'" resolves to more than one schema');f[n]=e}else p._refs[n]=c}h[r]=l,d[r]=c}}),f},c.inlineRef=d,c.schema=u;var h=y.toHash(["properties","patternProperties","enum","dependencies","definitions"]);function n(e,r,t,a){if(e.fragment=e.fragment||"","/"==e.fragment.slice(0,1)){for(var s=e.fragment.split("/"),o=1;o<s.length;o++){var i=s[o];if(i){if(void 0===(t=t[i=y.unescapeFragment(i)]))break;var n;if(!h[i]&&((n=this._getId(t))&&(r=p(r,n)),t.$ref)){var l=p(r,t.$ref),c=u.call(this,a,l);c&&(t=c.schema,a=c.root,r=c.baseId)}}}return void 0!==t&&t!==a.schema?{schema:t,root:a,baseId:r}:void 0}}var i=y.toHash(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum"]);function d(e,r){return!1!==r&&(void 0===r||!0===r?function e(r){var t;if(Array.isArray(r)){for(var a=0;a<r.length;a++)if("object"==typeof(t=r[a])&&!e(t))return!1}else for(var s in r){if("$ref"==s)return!1;if("object"==typeof(t=r[s])&&!e(t))return!1}return!0}(e):r?function e(r){var t,a=0;if(Array.isArray(r)){for(var s=0;s<r.length;s++)if("object"==typeof(t=r[s])&&(a+=e(t)),a==1/0)return 1/0}else for(var o in r){if("$ref"==o)return 1/0;if(i[o])a++;else if("object"==typeof(t=r[o])&&(a+=e(t)+1),a==1/0)return 1/0}return a}(e)<=r:void 0)}function g(e,r){return!1!==r&&(e=P(e)),f(m.parse(e))}function f(e){return m.serialize(e).split("#")[0]+"#"}var s=/#\/?$/;function P(e){return e?e.replace(s,""):""}function p(e,r){return r=P(r),m.resolve(e,r)}},{"./schema_obj":8,"./util":10,"fast-deep-equal":42,"json-schema-traverse":44,"uri-js":45}],7:[function(e,r,t){"use strict";var o=e("../dotjs"),i=e("./util").toHash;r.exports=function(){var a=[{type:"number",rules:[{maximum:["exclusiveMaximum"]},{minimum:["exclusiveMinimum"]},"multipleOf","format"]},{type:"string",rules:["maxLength","minLength","pattern","format"]},{type:"array",rules:["maxItems","minItems","items","contains","uniqueItems"]},{type:"object",rules:["maxProperties","minProperties","required","dependencies","propertyNames",{properties:["additionalProperties","patternProperties"]}]},{rules:["$ref","const","enum","not","anyOf","oneOf","allOf","if"]}],s=["type","$comment"];return a.all=i(s),a.types=i(["number","integer","string","array","object","boolean","null"]),a.forEach(function(e){e.rules=e.rules.map(function(e){var r;if("object"==typeof e){var t=Object.keys(e)[0];r=e[t],e=t,r.forEach(function(e){s.push(e),a.all[e]=!0})}return s.push(e),a.all[e]={keyword:e,code:o[e],implements:r}}),a.all.$comment={keyword:"$comment",code:o.$comment},e.type&&(a.types[e.type]=e)}),a.keywords=i(s.concat(["$schema","$id","id","$data","$async","title","description","default","definitions","examples","readOnly","writeOnly","contentMediaType","contentEncoding","additionalItems","then","else"])),a.custom={},a}},{"../dotjs":27,"./util":10}],8:[function(e,r,t){"use strict";var a=e("./util");r.exports=function(e){a.copy(e,this)}},{"./util":10}],9:[function(e,r,t){"use strict";r.exports=function(e){for(var r,t=0,a=e.length,s=0;s<a;)t++,55296<=(r=e.charCodeAt(s++))&&r<=56319&&s<a&&56320==(64512&(r=e.charCodeAt(s)))&&s++;return t}},{}],10:[function(e,r,t){"use strict";function o(e,r,t){var a=t?" !== ":" === ",s=t?" || ":" && ",o=t?"!":"",i=t?"":"!";switch(e){case"null":return r+a+"null";case"array":return o+"Array.isArray("+r+")";case"object":return"("+o+r+s+"typeof "+r+a+'"object"'+s+i+"Array.isArray("+r+"))";case"integer":return"(typeof "+r+a+'"number"'+s+i+"("+r+" % 1)"+s+r+a+r+")";default:return"typeof "+r+a+'"'+e+'"'}}r.exports={copy:function(e,r){for(var t in r=r||{},e)r[t]=e[t];return r},checkDataType:o,checkDataTypes:function(e,r){switch(e.length){case 1:return o(e[0],r,!0);default:var t="",a=n(e);for(var s in a.array&&a.object&&(t=a.null?"(":"(!"+r+" || ",t+="typeof "+r+' !== "object")',delete a.null,delete a.array,delete a.object),a.number&&delete a.integer,a)t+=(t?" && ":"")+o(s,r,!0);return t}},coerceToTypes:function(e,r){if(Array.isArray(r)){for(var t=[],a=0;a<r.length;a++){var s=r[a];i[s]?t[t.length]=s:"array"===e&&"array"===s&&(t[t.length]=s)}if(t.length)return t}else{if(i[r])return[r];if("array"===e&&"array"===r)return["array"]}},toHash:n,getProperty:h,escapeQuotes:l,equal:e("fast-deep-equal"),ucs2length:e("./ucs2length"),varOccurences:function(e,r){r+="[^0-9]";var t=e.match(new RegExp(r,"g"));return t?t.length:0},varReplace:function(e,r,t){return r+="([^0-9])",t=t.replace(/\$/g,"$$$$"),e.replace(new RegExp(r,"g"),t+"$1")},cleanUpCode:function(e){return e.replace(c,"").replace(u,"").replace(d,"if (!($1))")},finalCleanUpCode:function(e,r){var t=e.match(f);t&&2==t.length&&(e=r?e.replace(m,"").replace(g,P):e.replace(p,"").replace(v,y));return(t=e.match(E))&&3===t.length?e.replace(w,""):e},schemaHasRules:function(e,r){if("boolean"==typeof e)return!e;for(var t in e)if(r[t])return!0},schemaHasRulesExcept:function(e,r,t){if("boolean"==typeof e)return!e&&"not"!=t;for(var a in e)if(a!=t&&r[a])return!0},schemaUnknownRules:function(e,r){if("boolean"==typeof e)return;for(var t in e)if(!r[t])return t},toQuotedString:b,getPathExpr:function(e,r,t,a){return F(e,t?"'/' + "+r+(a?"":".replace(/~/g, '~0').replace(/\\//g, '~1')"):a?"'[' + "+r+" + ']'":"'[\\'' + "+r+" + '\\']'")},getPath:function(e,r,t){var a=b(t?"/"+x(r):h(r));return F(e,a)},getData:function(e,r,t){var a,s,o,i;if(""===e)return"rootData";if("/"==e[0]){if(!S.test(e))throw new Error("Invalid JSON-pointer: "+e);s=e,o="rootData"}else{if(!(i=e.match(_)))throw new Error("Invalid JSON-pointer: "+e);if(a=+i[1],"#"==(s=i[2])){if(r<=a)throw new Error("Cannot access property/index "+a+" levels up, current level is "+r);return t[r-a]}if(r<a)throw new Error("Cannot access data "+a+" levels up, current level is "+r);if(o="data"+(r-a||""),!s)return o}for(var n=o,l=s.split("/"),c=0;c<l.length;c++){var u=l[c];u&&(o+=h($(u)),n+=" && "+o)}return n},unescapeFragment:function(e){return $(decodeURIComponent(e))},unescapeJsonPointer:$,escapeFragment:function(e){return encodeURIComponent(x(e))},escapeJsonPointer:x};var i=n(["string","number","integer","boolean","null"]);function n(e){for(var r={},t=0;t<e.length;t++)r[e[t]]=!0;return r}var a=/^[a-z$_][a-z$_0-9]*$/i,s=/'|\\/g;function h(e){return"number"==typeof e?"["+e+"]":a.test(e)?"."+e:"['"+l(e)+"']"}function l(e){return e.replace(s,"\\$&").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\f/g,"\\f").replace(/\t/g,"\\t")}var c=/else\s*{\s*}/g,u=/if\s*\([^)]+\)\s*\{\s*\}(?!\s*else)/g,d=/if\s*\(([^)]+)\)\s*\{\s*\}\s*else(?!\s*if)/g;var f=/[^v.]errors/g,p=/var errors = 0;|var vErrors = null;|validate.errors = vErrors;/g,m=/var errors = 0;|var vErrors = null;/g,v="return errors === 0;",y="validate.errors = null; return true;",g=/if \(errors === 0\) return data;\s*else throw new ValidationError\(vErrors\);/,P="return data;",E=/[^A-Za-z_$]rootData[^A-Za-z0-9_$]/g,w=/if \(rootData === undefined\) rootData = data;/;function b(e){return"'"+l(e)+"'"}var S=/^\/(?:[^~]|~0|~1)*$/,_=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function F(e,r){return'""'==e?r:(e+" + "+r).replace(/' \+ '/g,"")}function x(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function $(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}},{"./ucs2length":9,"fast-deep-equal":42}],11:[function(e,r,t){"use strict";var l=["multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","additionalItems","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","additionalProperties","enum","format","const"];r.exports=function(e,r){for(var t=0;t<r.length;t++){e=JSON.parse(JSON.stringify(e));var a,s=r[t].split("/"),o=e;for(a=1;a<s.length;a++)o=o[s[a]];for(a=0;a<l.length;a++){var i=l[a],n=o[i];n&&(o[i]={anyOf:[n,{$ref:"https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/data.json#"}]})}}return e}},{}],12:[function(e,r,t){"use strict";var a=e("./refs/json-schema-draft-07.json");r.exports={$id:"https://github.com/epoberezkin/ajv/blob/master/lib/definition_schema.js",definitions:{simpleTypes:a.definitions.simpleTypes},type:"object",dependencies:{schema:["validate"],$data:["validate"],statements:["inline"],valid:{not:{required:["macro"]}}},properties:{type:a.properties.type,schema:{type:"boolean"},statements:{type:"boolean"},dependencies:{type:"array",items:{type:"string"}},metaSchema:{type:"object"},modifying:{type:"boolean"},valid:{type:"boolean"},$data:{type:"boolean"},async:{type:"boolean"},errors:{anyOf:[{type:"boolean"},{const:"full"}]}}}},{"./refs/json-schema-draft-07.json":41}],13:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+e.util.getProperty(r),l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,u="data"+(o||""),h=e.opts.$data&&i&&i.$data;t=h?(a+=" var schema"+s+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ","schema"+s):i;var d="maximum"==r,f=d?"exclusiveMaximum":"exclusiveMinimum",p=e.schema[f],m=e.opts.$data&&p&&p.$data,v=d?"<":">",y=d?">":"<",g=void 0;if(m){var P=e.util.getData(p.$data,o,e.dataPathArr),E="exclusive"+s,w="exclType"+s,b="exclIsNumber"+s,S="' + "+(x="op"+s)+" + '";a+=" var schemaExcl"+s+" = "+P+"; ";var _;g=f;(_=_||[]).push(a+=" var "+E+"; var "+w+" = typeof "+(P="schemaExcl"+s)+"; if ("+w+" != 'boolean' && "+w+" != 'undefined' && "+w+" != 'number') { "),a="",!1!==e.createErrors?(a+=" { keyword: '"+(g||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: {} ",!1!==e.opts.messages&&(a+=" , message: '"+f+" should be boolean' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";var F=a;a=_.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+F+"]); ":" validate.errors = ["+F+"]; return false; ":" var err = "+F+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } else if ( ",h&&(a+=" ("+t+" !== undefined && typeof "+t+" != 'number') || "),a+=" "+w+" == 'number' ? ( ("+E+" = "+t+" === undefined || "+P+" "+v+"= "+t+") ? "+u+" "+y+"= "+P+" : "+u+" "+y+" "+t+" ) : ( ("+E+" = "+P+" === true) ? "+u+" "+y+"= "+t+" : "+u+" "+y+" "+t+" ) || "+u+" !== "+u+") { var op"+s+" = "+E+" ? '"+v+"' : '"+v+"='; ",void 0===i&&(l=e.errSchemaPath+"/"+(g=f),t=P,h=m)}else{S=v;if((b="number"==typeof p)&&h){var x="'"+S+"'";a+=" if ( ",h&&(a+=" ("+t+" !== undefined && typeof "+t+" != 'number') || "),a+=" ( "+t+" === undefined || "+p+" "+v+"= "+t+" ? "+u+" "+y+"= "+p+" : "+u+" "+y+" "+t+" ) || "+u+" !== "+u+") { "}else{b&&void 0===i?(E=!0,l=e.errSchemaPath+"/"+(g=f),t=p,y+="="):(b&&(t=Math[d?"min":"max"](p,i)),p===(!b||t)?(E=!0,l=e.errSchemaPath+"/"+(g=f),y+="="):(E=!1,S+="="));x="'"+S+"'";a+=" if ( ",h&&(a+=" ("+t+" !== undefined && typeof "+t+" != 'number') || "),a+=" "+u+" "+y+" "+t+" || "+u+" !== "+u+") { "}}g=g||r,(_=_||[]).push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(g||"_limit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { comparison: "+x+", limit: "+t+", exclusive: "+E+" } ",!1!==e.opts.messages&&(a+=" , message: 'should be "+S+" ",a+=h?"' + "+t:t+"'"),e.opts.verbose&&(a+=" , schema:  ",a+=h?"validate.schema"+n:""+i,a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";F=a;return a=_.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+F+"]); ":" validate.errors = ["+F+"]; return false; ":" var err = "+F+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",c&&(a+=" else { "),a}},{}],14:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+e.util.getProperty(r),l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,u="data"+(o||""),h=e.opts.$data&&i&&i.$data;t=h?(a+=" var schema"+s+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ","schema"+s):i,a+="if ( ",h&&(a+=" ("+t+" !== undefined && typeof "+t+" != 'number') || ");var d=r,f=f||[];f.push(a+=" "+u+".length "+("maxItems"==r?">":"<")+" "+t+") { "),a="",!1!==e.createErrors?(a+=" { keyword: '"+(d||"_limitItems")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { limit: "+t+" } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have ",a+="maxItems"==r?"more":"fewer",a+=" than ",a+=h?"' + "+t+" + '":""+i,a+=" items' "),e.opts.verbose&&(a+=" , schema:  ",a+=h?"validate.schema"+n:""+i,a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";var p=a;return a=f.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+p+"]); ":" validate.errors = ["+p+"]; return false; ":" var err = "+p+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},{}],15:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+e.util.getProperty(r),l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,u="data"+(o||""),h=e.opts.$data&&i&&i.$data;t=h?(a+=" var schema"+s+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ","schema"+s):i,a+="if ( ",h&&(a+=" ("+t+" !== undefined && typeof "+t+" != 'number') || "),a+=!1===e.opts.unicode?" "+u+".length ":" ucs2length("+u+") ";var d=r,f=f||[];f.push(a+=" "+("maxLength"==r?">":"<")+" "+t+") { "),a="",!1!==e.createErrors?(a+=" { keyword: '"+(d||"_limitLength")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { limit: "+t+" } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT be ",a+="maxLength"==r?"longer":"shorter",a+=" than ",a+=h?"' + "+t+" + '":""+i,a+=" characters' "),e.opts.verbose&&(a+=" , schema:  ",a+=h?"validate.schema"+n:""+i,a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";var p=a;return a=f.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+p+"]); ":" validate.errors = ["+p+"]; return false; ":" var err = "+p+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},{}],16:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+e.util.getProperty(r),l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,u="data"+(o||""),h=e.opts.$data&&i&&i.$data;t=h?(a+=" var schema"+s+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ","schema"+s):i,a+="if ( ",h&&(a+=" ("+t+" !== undefined && typeof "+t+" != 'number') || ");var d=r,f=f||[];f.push(a+=" Object.keys("+u+").length "+("maxProperties"==r?">":"<")+" "+t+") { "),a="",!1!==e.createErrors?(a+=" { keyword: '"+(d||"_limitProperties")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { limit: "+t+" } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have ",a+="maxProperties"==r?"more":"fewer",a+=" than ",a+=h?"' + "+t+" + '":""+i,a+=" properties' "),e.opts.verbose&&(a+=" , schema:  ",a+=h?"validate.schema"+n:""+i,a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";var p=a;return a=f.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+p+"]); ":" validate.errors = ["+p+"]; return false; ":" var err = "+p+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},{}],17:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.schema[r],s=e.schemaPath+e.util.getProperty(r),o=e.errSchemaPath+"/"+r,i=!e.opts.allErrors,n=e.util.copy(e),l="";n.level++;var c="valid"+n.level,u=n.baseId,h=!0,d=a;if(d)for(var f,p=-1,m=d.length-1;p<m;)f=d[p+=1],(e.opts.strictKeywords?"object"==typeof f&&0<Object.keys(f).length:e.util.schemaHasRules(f,e.RULES.all))&&(h=!1,n.schema=f,n.schemaPath=s+"["+p+"]",n.errSchemaPath=o+"/"+p,t+="  "+e.validate(n)+" ",n.baseId=u,i&&(t+=" if ("+c+") { ",l+="}"));return i&&(t+=h?" if (true) { ":" "+l.slice(0,-1)+" "),t=e.util.cleanUpCode(t)}},{}],18:[function(e,r,t){"use strict";r.exports=function(r,e){var t=" ",a=r.level,s=r.dataLevel,o=r.schema[e],i=r.schemaPath+r.util.getProperty(e),n=r.errSchemaPath+"/"+e,l=!r.opts.allErrors,c="data"+(s||""),u="valid"+a,h="errs__"+a,d=r.util.copy(r),f="";d.level++;var p="valid"+d.level;if(o.every(function(e){return r.opts.strictKeywords?"object"==typeof e&&0<Object.keys(e).length:r.util.schemaHasRules(e,r.RULES.all)})){var m=d.baseId;t+=" var "+h+" = errors; var "+u+" = false;  ";var v=r.compositeRule;r.compositeRule=d.compositeRule=!0;var y=o;if(y)for(var g,P=-1,E=y.length-1;P<E;)g=y[P+=1],d.schema=g,d.schemaPath=i+"["+P+"]",d.errSchemaPath=n+"/"+P,t+="  "+r.validate(d)+" ",d.baseId=m,t+=" "+u+" = "+u+" || "+p+"; if (!"+u+") { ",f+="}";r.compositeRule=d.compositeRule=v,t+=" "+f+" if (!"+u+") {   var err =   ",!1!==r.createErrors?(t+=" { keyword: 'anyOf' , dataPath: (dataPath || '') + "+r.errorPath+" , schemaPath: "+r.util.toQuotedString(n)+" , params: {} ",!1!==r.opts.messages&&(t+=" , message: 'should match some schema in anyOf' "),r.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+r.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ",t+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!r.compositeRule&&l&&(t+=r.async?" throw new ValidationError(vErrors); ":" validate.errors = vErrors; return false; "),t+=" } else {  errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; } ",r.opts.allErrors&&(t+=" } "),t=r.util.cleanUpCode(t)}else l&&(t+=" if (true) { ");return t}},{}],19:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.errSchemaPath+"/"+r,s=e.util.toQuotedString(e.schema[r]);return!0===e.opts.$comment?t+=" console.log("+s+");":"function"==typeof e.opts.$comment&&(t+=" self._opts.$comment("+s+", "+e.util.toQuotedString(a)+", validate.root.schema);"),t}},{}],20:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u="valid"+a,h=e.opts.$data&&o&&o.$data;h&&(t+=" var schema"+a+" = "+e.util.getData(o.$data,s,e.dataPathArr)+"; "),h||(t+=" var schema"+a+" = validate.schema"+i+";");var d=d||[];d.push(t+="var "+u+" = equal("+c+", schema"+a+"); if (!"+u+") {   "),t="",!1!==e.createErrors?(t+=" { keyword: 'const' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { allowedValue: schema"+a+" } ",!1!==e.opts.messages&&(t+=" , message: 'should be equal to constant' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var f=t;return t=d.pop(),t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+f+"]); ":" validate.errors = ["+f+"]; return false; ":" var err = "+f+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",t+=" }",l&&(t+=" else { "),t}},{}],21:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u="valid"+a,h="errs__"+a,d=e.util.copy(e);d.level++;var f="valid"+d.level,p="i"+a,m=d.dataLevel=e.dataLevel+1,v="data"+m,y=e.baseId,g=e.opts.strictKeywords?"object"==typeof o&&0<Object.keys(o).length:e.util.schemaHasRules(o,e.RULES.all);if(t+="var "+h+" = errors;var "+u+";",g){var P=e.compositeRule;e.compositeRule=d.compositeRule=!0,d.schema=o,d.schemaPath=i,d.errSchemaPath=n,t+=" var "+f+" = false; for (var "+p+" = 0; "+p+" < "+c+".length; "+p+"++) { ",d.errorPath=e.util.getPathExpr(e.errorPath,p,e.opts.jsonPointers,!0);var E=c+"["+p+"]";d.dataPathArr[m]=p;var w=e.validate(d);d.baseId=y,e.util.varOccurences(w,v)<2?t+=" "+e.util.varReplace(w,v,E)+" ":t+=" var "+v+" = "+E+"; "+w+" ",t+=" if ("+f+") break; }  ",e.compositeRule=d.compositeRule=P,t+="  if (!"+f+") {"}else t+=" if ("+c+".length == 0) {";var b=b||[];b.push(t),t="",!1!==e.createErrors?(t+=" { keyword: 'contains' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: {} ",!1!==e.opts.messages&&(t+=" , message: 'should contain a valid item' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var S=t;return t=b.pop(),t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+S+"]); ":" validate.errors = ["+S+"]; return false; ":" var err = "+S+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",t+=" } else { ",g&&(t+="  errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; } "),e.opts.allErrors&&(t+=" } "),t=e.util.cleanUpCode(t)}},{}],22:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a,s=" ",o=e.level,i=e.dataLevel,n=e.schema[r],l=e.schemaPath+e.util.getProperty(r),c=e.errSchemaPath+"/"+r,u=!e.opts.allErrors,h="data"+(i||""),d="valid"+o,f="errs__"+o,p=e.opts.$data&&n&&n.$data;a=p?(s+=" var schema"+o+" = "+e.util.getData(n.$data,i,e.dataPathArr)+"; ","schema"+o):n;var m,v,y,g,P,E=this,w="definition"+o,b=E.definition,S="";if(p&&b.$data){var _=b.validateSchema;s+=" var "+w+" = RULES.custom['"+r+"'].definition; var "+(P="keywordValidate"+o)+" = "+w+".validate;"}else{if(!(g=e.useCustomRule(E,n,e.schema,e)))return;a="validate.schema"+l,P=g.code,m=b.compile,v=b.inline,y=b.macro}var F=P+".errors",x="i"+o,$="ruleErr"+o,R=b.async;if(R&&!e.async)throw new Error("async keyword in sync schema");if(v||y||(s+=F+" = null;"),s+="var "+f+" = errors;var "+d+";",p&&b.$data&&(S+="}",s+=" if ("+a+" === undefined) { "+d+" = true; } else { ",_&&(S+="}",s+=" "+d+" = "+w+".validateSchema("+a+"); if ("+d+") { ")),v)s+=b.statements?" "+g.validate+" ":" "+d+" = "+g.validate+"; ";else if(y){var D=e.util.copy(e);S="";D.level++;var j="valid"+D.level;D.schema=g.validate,D.schemaPath="";var O=e.compositeRule;e.compositeRule=D.compositeRule=!0;var I=e.validate(D).replace(/validate\.schema/g,P);e.compositeRule=D.compositeRule=O,s+=" "+I}else{(L=L||[]).push(s),s="",s+="  "+P+".call( ",s+=e.opts.passContext?"this":"self",s+=m||!1===b.schema?" , "+h+" ":" , "+a+" , "+h+" , validate.schema"+e.schemaPath+" ",s+=" , (dataPath || '')",'""'!=e.errorPath&&(s+=" + "+e.errorPath);var A=i?"data"+(i-1||""):"parentData",C=i?e.dataPathArr[i]:"parentDataProperty",k=s+=" , "+A+" , "+C+" , rootData )  ";s=L.pop(),!1===b.errors?(s+=" "+d+" = ",R&&(s+="await "),s+=k+"; "):s+=R?" var "+(F="customErrors"+o)+" = null; try { "+d+" = await "+k+"; } catch (e) { "+d+" = false; if (e instanceof ValidationError) "+F+" = e.errors; else throw e; } ":" "+F+" = null; "+d+" = "+k+"; "}if(b.modifying&&(s+=" if ("+A+") "+h+" = "+A+"["+C+"];"),s+=""+S,b.valid)u&&(s+=" if (true) { ");else{var L;s+=" if ( ",void 0===b.valid?(s+=" !",s+=y?""+j:d):s+=" "+!b.valid+" ",t=E.keyword,(L=L||[]).push(s+=") { "),(L=L||[]).push(s=""),s="",!1!==e.createErrors?(s+=" { keyword: '"+(t||"custom")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { keyword: '"+E.keyword+"' } ",!1!==e.opts.messages&&(s+=" , message: 'should pass \""+E.keyword+"\" keyword validation' "),e.opts.verbose&&(s+=" , schema: validate.schema"+l+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),s+=" } "):s+=" {} ";var z=s;s=L.pop();var T=s+=!e.compositeRule&&u?e.async?" throw new ValidationError(["+z+"]); ":" validate.errors = ["+z+"]; return false; ":" var err = "+z+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";s=L.pop(),v?b.errors?"full"!=b.errors&&(s+="  for (var "+x+"="+f+"; "+x+"<errors; "+x+"++) { var "+$+" = vErrors["+x+"]; if ("+$+".dataPath === undefined) "+$+".dataPath = (dataPath || '') + "+e.errorPath+"; if ("+$+".schemaPath === undefined) { "+$+'.schemaPath = "'+c+'"; } ',e.opts.verbose&&(s+=" "+$+".schema = "+a+"; "+$+".data = "+h+"; "),s+=" } "):!1===b.errors?s+=" "+T+" ":(s+=" if ("+f+" == errors) { "+T+" } else {  for (var "+x+"="+f+"; "+x+"<errors; "+x+"++) { var "+$+" = vErrors["+x+"]; if ("+$+".dataPath === undefined) "+$+".dataPath = (dataPath || '') + "+e.errorPath+"; if ("+$+".schemaPath === undefined) { "+$+'.schemaPath = "'+c+'"; } ',e.opts.verbose&&(s+=" "+$+".schema = "+a+"; "+$+".data = "+h+"; "),s+=" } } "):y?(s+="   var err =   ",!1!==e.createErrors?(s+=" { keyword: '"+(t||"custom")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { keyword: '"+E.keyword+"' } ",!1!==e.opts.messages&&(s+=" , message: 'should pass \""+E.keyword+"\" keyword validation' "),e.opts.verbose&&(s+=" , schema: validate.schema"+l+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),s+=" } "):s+=" {} ",s+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!e.compositeRule&&u&&(s+=e.async?" throw new ValidationError(vErrors); ":" validate.errors = vErrors; return false; ")):!1===b.errors?s+=" "+T+" ":(s+=" if (Array.isArray("+F+")) { if (vErrors === null) vErrors = "+F+"; else vErrors = vErrors.concat("+F+"); errors = vErrors.length;  for (var "+x+"="+f+"; "+x+"<errors; "+x+"++) { var "+$+" = vErrors["+x+"]; if ("+$+".dataPath === undefined) "+$+".dataPath = (dataPath || '') + "+e.errorPath+";  "+$+'.schemaPath = "'+c+'";  ',e.opts.verbose&&(s+=" "+$+".schema = "+a+"; "+$+".data = "+h+"; "),s+=" } } else { "+T+" } "),s+=" } ",u&&(s+=" else { ")}return s}},{}],23:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u="errs__"+a,h=e.util.copy(e),d="";h.level++;var f="valid"+h.level,p={},m={},v=e.opts.ownProperties;for(E in o){var y=o[E],g=Array.isArray(y)?m:p;g[E]=y}t+="var "+u+" = errors;";var P=e.errorPath;for(var E in t+="var missing"+a+";",m)if((g=m[E]).length){if(t+=" if ( "+c+e.util.getProperty(E)+" !== undefined ",v&&(t+=" && Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(E)+"') "),l){t+=" && ( ";var w=g;if(w)for(var b=-1,S=w.length-1;b<S;){D=w[b+=1],b&&(t+=" || "),t+=" ( ( "+(A=c+(I=e.util.getProperty(D)))+" === undefined ",v&&(t+=" || ! Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(D)+"') "),t+=") && (missing"+a+" = "+e.util.toQuotedString(e.opts.jsonPointers?D:I)+") ) "}t+=")) {  ";var _="missing"+a,F="' + "+_+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.opts.jsonPointers?e.util.getPathExpr(P,_,!0):P+" + "+_);var x=x||[];x.push(t),t="",!1!==e.createErrors?(t+=" { keyword: 'dependencies' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { property: '"+e.util.escapeQuotes(E)+"', missingProperty: '"+F+"', depsCount: "+g.length+", deps: '"+e.util.escapeQuotes(1==g.length?g[0]:g.join(", "))+"' } ",!1!==e.opts.messages&&(t+=" , message: 'should have ",t+=1==g.length?"property "+e.util.escapeQuotes(g[0]):"properties "+e.util.escapeQuotes(g.join(", ")),t+=" when property "+e.util.escapeQuotes(E)+" is present' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var $=t;t=x.pop(),t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+$+"]); ":" validate.errors = ["+$+"]; return false; ":" var err = "+$+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}else{t+=" ) { ";var R=g;if(R)for(var D,j=-1,O=R.length-1;j<O;){D=R[j+=1];var I=e.util.getProperty(D),A=(F=e.util.escapeQuotes(D),c+I);e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPath(P,D,e.opts.jsonPointers)),t+=" if ( "+A+" === undefined ",v&&(t+=" || ! Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(D)+"') "),t+=") {  var err =   ",!1!==e.createErrors?(t+=" { keyword: 'dependencies' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { property: '"+e.util.escapeQuotes(E)+"', missingProperty: '"+F+"', depsCount: "+g.length+", deps: '"+e.util.escapeQuotes(1==g.length?g[0]:g.join(", "))+"' } ",!1!==e.opts.messages&&(t+=" , message: 'should have ",t+=1==g.length?"property "+e.util.escapeQuotes(g[0]):"properties "+e.util.escapeQuotes(g.join(", ")),t+=" when property "+e.util.escapeQuotes(E)+" is present' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ",t+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } "}}t+=" }   ",l&&(d+="}",t+=" else { ")}e.errorPath=P;var C=h.baseId;for(var E in p){y=p[E];(e.opts.strictKeywords?"object"==typeof y&&0<Object.keys(y).length:e.util.schemaHasRules(y,e.RULES.all))&&(t+=" "+f+" = true; if ( "+c+e.util.getProperty(E)+" !== undefined ",v&&(t+=" && Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(E)+"') "),t+=") { ",h.schema=y,h.schemaPath=i+e.util.getProperty(E),h.errSchemaPath=n+"/"+e.util.escapeFragment(E),t+="  "+e.validate(h)+" ",h.baseId=C,t+=" }  ",l&&(t+=" if ("+f+") { ",d+="}"))}return l&&(t+="   "+d+" if ("+u+" == errors) {"),t=e.util.cleanUpCode(t)}},{}],24:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u="valid"+a,h=e.opts.$data&&o&&o.$data;h&&(t+=" var schema"+a+" = "+e.util.getData(o.$data,s,e.dataPathArr)+"; ");var d="i"+a,f="schema"+a;h||(t+=" var "+f+" = validate.schema"+i+";"),t+="var "+u+";",h&&(t+=" if (schema"+a+" === undefined) "+u+" = true; else if (!Array.isArray(schema"+a+")) "+u+" = false; else {"),t+=u+" = false;for (var "+d+"=0; "+d+"<"+f+".length; "+d+"++) if (equal("+c+", "+f+"["+d+"])) { "+u+" = true; break; }",h&&(t+="  }  ");var p=p||[];p.push(t+=" if (!"+u+") {   "),t="",!1!==e.createErrors?(t+=" { keyword: 'enum' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { allowedValues: schema"+a+" } ",!1!==e.opts.messages&&(t+=" , message: 'should be equal to one of the allowed values' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var m=t;return t=p.pop(),t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+m+"]); ":" validate.errors = ["+m+"]; return false; ":" var err = "+m+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",t+=" }",l&&(t+=" else { "),t}},{}],25:[function(e,r,t){"use strict";r.exports=function(e,r,t){var a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+e.util.getProperty(r),l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,u="data"+(o||"");if(!1===e.opts.format)return c&&(a+=" if (true) { "),a;var h,d=e.opts.$data&&i&&i.$data;h=d?(a+=" var schema"+s+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ","schema"+s):i;var f=e.opts.unknownFormats,p=Array.isArray(f);if(d){a+=" var "+(m="format"+s)+" = formats["+h+"]; var "+(v="isObject"+s)+" = typeof "+m+" == 'object' && !("+m+" instanceof RegExp) && "+m+".validate; var "+(y="formatType"+s)+" = "+v+" && "+m+".type || 'string'; if ("+v+") { ",e.async&&(a+=" var async"+s+" = "+m+".async; "),a+=" "+m+" = "+m+".validate; } if (  ",d&&(a+=" ("+h+" !== undefined && typeof "+h+" != 'string') || "),a+=" (","ignore"!=f&&(a+=" ("+h+" && !"+m+" ",p&&(a+=" && self._opts.unknownFormats.indexOf("+h+") == -1 "),a+=") || "),a+=" ("+m+" && "+y+" == '"+t+"' && !(typeof "+m+" == 'function' ? ",a+=e.async?" (async"+s+" ? await "+m+"("+u+") : "+m+"("+u+")) ":" "+m+"("+u+") ",a+=" : "+m+".test("+u+"))))) {"}else{var m;if(!(m=e.formats[i])){if("ignore"==f)return e.logger.warn('unknown format "'+i+'" ignored in schema at path "'+e.errSchemaPath+'"'),c&&(a+=" if (true) { "),a;if(p&&0<=f.indexOf(i))return c&&(a+=" if (true) { "),a;throw new Error('unknown format "'+i+'" is used in schema at path "'+e.errSchemaPath+'"')}var v,y=(v="object"==typeof m&&!(m instanceof RegExp)&&m.validate)&&m.type||"string";if(v){var g=!0===m.async;m=m.validate}if(y!=t)return c&&(a+=" if (true) { "),a;if(g){if(!e.async)throw new Error("async format in sync schema");a+=" if (!(await "+(P="formats"+e.util.getProperty(i)+".validate")+"("+u+"))) { "}else{a+=" if (! ";var P="formats"+e.util.getProperty(i);v&&(P+=".validate"),a+="function"==typeof m?" "+P+"("+u+") ":" "+P+".test("+u+") ",a+=") { "}}var E=E||[];E.push(a),a="",!1!==e.createErrors?(a+=" { keyword: 'format' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { format:  ",a+=d?""+h:""+e.util.toQuotedString(i),a+="  } ",!1!==e.opts.messages&&(a+=" , message: 'should match format \"",a+=d?"' + "+h+" + '":""+e.util.escapeQuotes(i),a+="\"' "),e.opts.verbose&&(a+=" , schema:  ",a+=d?"validate.schema"+n:""+e.util.toQuotedString(i),a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";var w=a;return a=E.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+w+"]); ":" validate.errors = ["+w+"]; return false; ":" var err = "+w+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",c&&(a+=" else { "),a}},{}],26:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u="valid"+a,h="errs__"+a,d=e.util.copy(e);d.level++;var f="valid"+d.level,p=e.schema.then,m=e.schema.else,v=void 0!==p&&(e.opts.strictKeywords?"object"==typeof p&&0<Object.keys(p).length:e.util.schemaHasRules(p,e.RULES.all)),y=void 0!==m&&(e.opts.strictKeywords?"object"==typeof m&&0<Object.keys(m).length:e.util.schemaHasRules(m,e.RULES.all)),g=d.baseId;if(v||y){var P;d.createErrors=!1,d.schema=o,d.schemaPath=i,d.errSchemaPath=n,t+=" var "+h+" = errors; var "+u+" = true;  ";var E=e.compositeRule;e.compositeRule=d.compositeRule=!0,t+="  "+e.validate(d)+" ",d.baseId=g,d.createErrors=!0,t+="  errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; }  ",e.compositeRule=d.compositeRule=E,v?(t+=" if ("+f+") {  ",d.schema=e.schema.then,d.schemaPath=e.schemaPath+".then",d.errSchemaPath=e.errSchemaPath+"/then",t+="  "+e.validate(d)+" ",d.baseId=g,t+=" "+u+" = "+f+"; ",v&&y?t+=" var "+(P="ifClause"+a)+" = 'then'; ":P="'then'",t+=" } ",y&&(t+=" else { ")):t+=" if (!"+f+") { ",y&&(d.schema=e.schema.else,d.schemaPath=e.schemaPath+".else",d.errSchemaPath=e.errSchemaPath+"/else",t+="  "+e.validate(d)+" ",d.baseId=g,t+=" "+u+" = "+f+"; ",v&&y?t+=" var "+(P="ifClause"+a)+" = 'else'; ":P="'else'",t+=" } "),t+=" if (!"+u+") {   var err =   ",!1!==e.createErrors?(t+=" { keyword: 'if' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { failingKeyword: "+P+" } ",!1!==e.opts.messages&&(t+=" , message: 'should match \"' + "+P+" + '\" schema' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ",t+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!e.compositeRule&&l&&(t+=e.async?" throw new ValidationError(vErrors); ":" validate.errors = vErrors; return false; "),t+=" }   ",l&&(t+=" else { "),t=e.util.cleanUpCode(t)}else l&&(t+=" if (true) { ");return t}},{}],27:[function(e,r,t){"use strict";r.exports={$ref:e("./ref"),allOf:e("./allOf"),anyOf:e("./anyOf"),$comment:e("./comment"),const:e("./const"),contains:e("./contains"),dependencies:e("./dependencies"),enum:e("./enum"),format:e("./format"),if:e("./if"),items:e("./items"),maximum:e("./_limit"),minimum:e("./_limit"),maxItems:e("./_limitItems"),minItems:e("./_limitItems"),maxLength:e("./_limitLength"),minLength:e("./_limitLength"),maxProperties:e("./_limitProperties"),minProperties:e("./_limitProperties"),multipleOf:e("./multipleOf"),not:e("./not"),oneOf:e("./oneOf"),pattern:e("./pattern"),properties:e("./properties"),propertyNames:e("./propertyNames"),required:e("./required"),uniqueItems:e("./uniqueItems"),validate:e("./validate")}},{"./_limit":13,"./_limitItems":14,"./_limitLength":15,"./_limitProperties":16,"./allOf":17,"./anyOf":18,"./comment":19,"./const":20,"./contains":21,"./dependencies":23,"./enum":24,"./format":25,"./if":26,"./items":28,"./multipleOf":29,"./not":30,"./oneOf":31,"./pattern":32,"./properties":33,"./propertyNames":34,"./ref":35,"./required":36,"./uniqueItems":37,"./validate":38}],28:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u="valid"+a,h="errs__"+a,d=e.util.copy(e),f="";d.level++;var p="valid"+d.level,m="i"+a,v=d.dataLevel=e.dataLevel+1,y="data"+v,g=e.baseId;if(t+="var "+h+" = errors;var "+u+";",Array.isArray(o)){var P=e.schema.additionalItems;if(!1===P){t+=" "+u+" = "+c+".length <= "+o.length+"; ";var E=n;n=e.errSchemaPath+"/additionalItems";var w=w||[];w.push(t+="  if (!"+u+") {   "),t="",!1!==e.createErrors?(t+=" { keyword: 'additionalItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { limit: "+o.length+" } ",!1!==e.opts.messages&&(t+=" , message: 'should NOT have more than "+o.length+" items' "),e.opts.verbose&&(t+=" , schema: false , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var b=t;t=w.pop(),t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+b+"]); ":" validate.errors = ["+b+"]; return false; ":" var err = "+b+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",t+=" } ",n=E,l&&(f+="}",t+=" else { ")}var S=o;if(S)for(var _,F=-1,x=S.length-1;F<x;)if(_=S[F+=1],e.opts.strictKeywords?"object"==typeof _&&0<Object.keys(_).length:e.util.schemaHasRules(_,e.RULES.all)){t+=" "+p+" = true; if ("+c+".length > "+F+") { ";var $=c+"["+F+"]";d.schema=_,d.schemaPath=i+"["+F+"]",d.errSchemaPath=n+"/"+F,d.errorPath=e.util.getPathExpr(e.errorPath,F,e.opts.jsonPointers,!0),d.dataPathArr[v]=F;var R=e.validate(d);d.baseId=g,e.util.varOccurences(R,y)<2?t+=" "+e.util.varReplace(R,y,$)+" ":t+=" var "+y+" = "+$+"; "+R+" ",t+=" }  ",l&&(t+=" if ("+p+") { ",f+="}")}if("object"==typeof P&&(e.opts.strictKeywords?"object"==typeof P&&0<Object.keys(P).length:e.util.schemaHasRules(P,e.RULES.all))){d.schema=P,d.schemaPath=e.schemaPath+".additionalItems",d.errSchemaPath=e.errSchemaPath+"/additionalItems",t+=" "+p+" = true; if ("+c+".length > "+o.length+") {  for (var "+m+" = "+o.length+"; "+m+" < "+c+".length; "+m+"++) { ",d.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers,!0);$=c+"["+m+"]";d.dataPathArr[v]=m;R=e.validate(d);d.baseId=g,e.util.varOccurences(R,y)<2?t+=" "+e.util.varReplace(R,y,$)+" ":t+=" var "+y+" = "+$+"; "+R+" ",l&&(t+=" if (!"+p+") break; "),t+=" } }  ",l&&(t+=" if ("+p+") { ",f+="}")}}else if(e.opts.strictKeywords?"object"==typeof o&&0<Object.keys(o).length:e.util.schemaHasRules(o,e.RULES.all)){d.schema=o,d.schemaPath=i,d.errSchemaPath=n,t+="  for (var "+m+" = 0; "+m+" < "+c+".length; "+m+"++) { ",d.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers,!0);$=c+"["+m+"]";d.dataPathArr[v]=m;R=e.validate(d);d.baseId=g,e.util.varOccurences(R,y)<2?t+=" "+e.util.varReplace(R,y,$)+" ":t+=" var "+y+" = "+$+"; "+R+" ",l&&(t+=" if (!"+p+") break; "),t+=" }"}return l&&(t+=" "+f+" if ("+h+" == errors) {"),t=e.util.cleanUpCode(t)}},{}],29:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+e.util.getProperty(r),l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,u="data"+(o||""),h=e.opts.$data&&i&&i.$data;t=h?(a+=" var schema"+s+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ","schema"+s):i,a+="var division"+s+";if (",h&&(a+=" "+t+" !== undefined && ( typeof "+t+" != 'number' || "),a+=" (division"+s+" = "+u+" / "+t+", ",a+=e.opts.multipleOfPrecision?" Math.abs(Math.round(division"+s+") - division"+s+") > 1e-"+e.opts.multipleOfPrecision+" ":" division"+s+" !== parseInt(division"+s+") ",a+=" ) ",h&&(a+="  )  ");var d=d||[];d.push(a+=" ) {   "),a="",!1!==e.createErrors?(a+=" { keyword: 'multipleOf' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { multipleOf: "+t+" } ",!1!==e.opts.messages&&(a+=" , message: 'should be multiple of ",a+=h?"' + "+t:t+"'"),e.opts.verbose&&(a+=" , schema:  ",a+=h?"validate.schema"+n:""+i,a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";var f=a;return a=d.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+f+"]); ":" validate.errors = ["+f+"]; return false; ":" var err = "+f+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},{}],30:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u="errs__"+a,h=e.util.copy(e);h.level++;var d="valid"+h.level;if(e.opts.strictKeywords?"object"==typeof o&&0<Object.keys(o).length:e.util.schemaHasRules(o,e.RULES.all)){h.schema=o,h.schemaPath=i,h.errSchemaPath=n,t+=" var "+u+" = errors;  ";var f,p=e.compositeRule;e.compositeRule=h.compositeRule=!0,h.createErrors=!1,h.opts.allErrors&&(f=h.opts.allErrors,h.opts.allErrors=!1),t+=" "+e.validate(h)+" ",h.createErrors=!0,f&&(h.opts.allErrors=f),e.compositeRule=h.compositeRule=p;var m=m||[];m.push(t+=" if ("+d+") {   "),t="",!1!==e.createErrors?(t+=" { keyword: 'not' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: {} ",!1!==e.opts.messages&&(t+=" , message: 'should NOT be valid' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var v=t;t=m.pop(),t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+v+"]); ":" validate.errors = ["+v+"]; return false; ":" var err = "+v+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",t+=" } else {  errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; } ",e.opts.allErrors&&(t+=" } ")}else t+="  var err =   ",!1!==e.createErrors?(t+=" { keyword: 'not' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: {} ",!1!==e.opts.messages&&(t+=" , message: 'should NOT be valid' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ",t+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l&&(t+=" if (false) { ");return t}},{}],31:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u="valid"+a,h="errs__"+a,d=e.util.copy(e),f="";d.level++;var p="valid"+d.level,m=d.baseId,v="prevValid"+a,y="passingSchemas"+a;t+="var "+h+" = errors , "+v+" = false , "+u+" = false , "+y+" = null; ";var g=e.compositeRule;e.compositeRule=d.compositeRule=!0;var P=o;if(P)for(var E,w=-1,b=P.length-1;w<b;)E=P[w+=1],(e.opts.strictKeywords?"object"==typeof E&&0<Object.keys(E).length:e.util.schemaHasRules(E,e.RULES.all))?(d.schema=E,d.schemaPath=i+"["+w+"]",d.errSchemaPath=n+"/"+w,t+="  "+e.validate(d)+" ",d.baseId=m):t+=" var "+p+" = true; ",w&&(t+=" if ("+p+" && "+v+") { "+u+" = false; "+y+" = ["+y+", "+w+"]; } else { ",f+="}"),t+=" if ("+p+") { "+u+" = "+v+" = true; "+y+" = "+w+"; }";return e.compositeRule=d.compositeRule=g,t+=f+"if (!"+u+") {   var err =   ",!1!==e.createErrors?(t+=" { keyword: 'oneOf' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { passingSchemas: "+y+" } ",!1!==e.opts.messages&&(t+=" , message: 'should match exactly one schema in oneOf' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ",t+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!e.compositeRule&&l&&(t+=e.async?" throw new ValidationError(vErrors); ":" validate.errors = vErrors; return false; "),t+="} else {  errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; }",e.opts.allErrors&&(t+=" } "),t}},{}],32:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+e.util.getProperty(r),l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,u="data"+(o||""),h=e.opts.$data&&i&&i.$data;t=h?(a+=" var schema"+s+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ","schema"+s):i;var d=h?"(new RegExp("+t+"))":e.usePattern(i);a+="if ( ",h&&(a+=" ("+t+" !== undefined && typeof "+t+" != 'string') || ");var f=f||[];f.push(a+=" !"+d+".test("+u+") ) {   "),a="",!1!==e.createErrors?(a+=" { keyword: 'pattern' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { pattern:  ",a+=h?""+t:""+e.util.toQuotedString(i),a+="  } ",!1!==e.opts.messages&&(a+=" , message: 'should match pattern \"",a+=h?"' + "+t+" + '":""+e.util.escapeQuotes(i),a+="\"' "),e.opts.verbose&&(a+=" , schema:  ",a+=h?"validate.schema"+n:""+e.util.toQuotedString(i),a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";var p=a;return a=f.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+p+"]); ":" validate.errors = ["+p+"]; return false; ":" var err = "+p+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},{}],33:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u="errs__"+a,h=e.util.copy(e),d="";h.level++;var f="valid"+h.level,p="key"+a,m="idx"+a,v=h.dataLevel=e.dataLevel+1,y="data"+v,g="dataProperties"+a,P=Object.keys(o||{}),E=e.schema.patternProperties||{},w=Object.keys(E),b=e.schema.additionalProperties,S=P.length||w.length,_=!1===b,F="object"==typeof b&&Object.keys(b).length,x=e.opts.removeAdditional,$=_||F||x,R=e.opts.ownProperties,D=e.baseId,j=e.schema.required;if(j&&(!e.opts.$data||!j.$data)&&j.length<e.opts.loopRequired)var O=e.util.toHash(j);if(t+="var "+u+" = errors;var "+f+" = true;",R&&(t+=" var "+g+" = undefined;"),$){if(t+=R?" "+g+" = "+g+" || Object.keys("+c+"); for (var "+m+"=0; "+m+"<"+g+".length; "+m+"++) { var "+p+" = "+g+"["+m+"]; ":" for (var "+p+" in "+c+") { ",S){if(t+=" var isAdditional"+a+" = !(false ",P.length)if(8<P.length)t+=" || validate.schema"+i+".hasOwnProperty("+p+") ";else{var I=P;if(I)for(var A=-1,C=I.length-1;A<C;)B=I[A+=1],t+=" || "+p+" == "+e.util.toQuotedString(B)+" "}if(w.length){var k=w;if(k)for(var L=-1,z=k.length-1;L<z;)ae=k[L+=1],t+=" || "+e.usePattern(ae)+".test("+p+") "}t+=" ); if (isAdditional"+a+") { "}if("all"==x)t+=" delete "+c+"["+p+"]; ";else{var T=e.errorPath,q="' + "+p+" + '";if(e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(e.errorPath,p,e.opts.jsonPointers)),_)if(x)t+=" delete "+c+"["+p+"]; ";else{var N=n;n=e.errSchemaPath+"/additionalProperties",(ee=ee||[]).push(t+=" "+f+" = false; "),t="",!1!==e.createErrors?(t+=" { keyword: 'additionalProperties' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { additionalProperty: '"+q+"' } ",!1!==e.opts.messages&&(t+=" , message: '",t+=e.opts._errorDataPathProperty?"is an invalid additional property":"should NOT have additional properties",t+="' "),e.opts.verbose&&(t+=" , schema: false , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var Q=t;t=ee.pop(),t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+Q+"]); ":" validate.errors = ["+Q+"]; return false; ":" var err = "+Q+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n=N,l&&(t+=" break; ")}else if(F)if("failing"==x){t+=" var "+u+" = errors;  ";var U=e.compositeRule;e.compositeRule=h.compositeRule=!0,h.schema=b,h.schemaPath=e.schemaPath+".additionalProperties",h.errSchemaPath=e.errSchemaPath+"/additionalProperties",h.errorPath=e.opts._errorDataPathProperty?e.errorPath:e.util.getPathExpr(e.errorPath,p,e.opts.jsonPointers);var V=c+"["+p+"]";h.dataPathArr[v]=p;var H=e.validate(h);h.baseId=D,e.util.varOccurences(H,y)<2?t+=" "+e.util.varReplace(H,y,V)+" ":t+=" var "+y+" = "+V+"; "+H+" ",t+=" if (!"+f+") { errors = "+u+"; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete "+c+"["+p+"]; }  ",e.compositeRule=h.compositeRule=U}else{h.schema=b,h.schemaPath=e.schemaPath+".additionalProperties",h.errSchemaPath=e.errSchemaPath+"/additionalProperties",h.errorPath=e.opts._errorDataPathProperty?e.errorPath:e.util.getPathExpr(e.errorPath,p,e.opts.jsonPointers);V=c+"["+p+"]";h.dataPathArr[v]=p;H=e.validate(h);h.baseId=D,e.util.varOccurences(H,y)<2?t+=" "+e.util.varReplace(H,y,V)+" ":t+=" var "+y+" = "+V+"; "+H+" ",l&&(t+=" if (!"+f+") break; ")}e.errorPath=T}S&&(t+=" } "),t+=" }  ",l&&(t+=" if ("+f+") { ",d+="}")}var K=e.opts.useDefaults&&!e.compositeRule;if(P.length){var M=P;if(M)for(var B,J=-1,Z=M.length-1;J<Z;){var G=o[B=M[J+=1]];if(e.opts.strictKeywords?"object"==typeof G&&0<Object.keys(G).length:e.util.schemaHasRules(G,e.RULES.all)){var Y=e.util.getProperty(B),W=(V=c+Y,K&&void 0!==G.default);h.schema=G,h.schemaPath=i+Y,h.errSchemaPath=n+"/"+e.util.escapeFragment(B),h.errorPath=e.util.getPath(e.errorPath,B,e.opts.jsonPointers),h.dataPathArr[v]=e.util.toQuotedString(B);H=e.validate(h);if(h.baseId=D,e.util.varOccurences(H,y)<2){H=e.util.varReplace(H,y,V);var X=V}else{X=y;t+=" var "+y+" = "+V+"; "}if(W)t+=" "+H+" ";else{if(O&&O[B]){t+=" if ( "+X+" === undefined ",R&&(t+=" || ! Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(B)+"') "),t+=") { "+f+" = false; ";T=e.errorPath,N=n;var ee,re=e.util.escapeQuotes(B);e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPath(T,B,e.opts.jsonPointers)),n=e.errSchemaPath+"/required",(ee=ee||[]).push(t),t="",!1!==e.createErrors?(t+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { missingProperty: '"+re+"' } ",!1!==e.opts.messages&&(t+=" , message: '",t+=e.opts._errorDataPathProperty?"is a required property":"should have required property \\'"+re+"\\'",t+="' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";Q=t;t=ee.pop(),t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+Q+"]); ":" validate.errors = ["+Q+"]; return false; ":" var err = "+Q+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n=N,e.errorPath=T,t+=" } else { "}else l?(t+=" if ( "+X+" === undefined ",R&&(t+=" || ! Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(B)+"') "),t+=") { "+f+" = true; } else { "):(t+=" if ("+X+" !== undefined ",R&&(t+=" &&   Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(B)+"') "),t+=" ) { ");t+=" "+H+" } "}}l&&(t+=" if ("+f+") { ",d+="}")}}if(w.length){var te=w;if(te)for(var ae,se=-1,oe=te.length-1;se<oe;){G=E[ae=te[se+=1]];if(e.opts.strictKeywords?"object"==typeof G&&0<Object.keys(G).length:e.util.schemaHasRules(G,e.RULES.all)){h.schema=G,h.schemaPath=e.schemaPath+".patternProperties"+e.util.getProperty(ae),h.errSchemaPath=e.errSchemaPath+"/patternProperties/"+e.util.escapeFragment(ae),t+=R?" "+g+" = "+g+" || Object.keys("+c+"); for (var "+m+"=0; "+m+"<"+g+".length; "+m+"++) { var "+p+" = "+g+"["+m+"]; ":" for (var "+p+" in "+c+") { ",t+=" if ("+e.usePattern(ae)+".test("+p+")) { ",h.errorPath=e.util.getPathExpr(e.errorPath,p,e.opts.jsonPointers);V=c+"["+p+"]";h.dataPathArr[v]=p;H=e.validate(h);h.baseId=D,e.util.varOccurences(H,y)<2?t+=" "+e.util.varReplace(H,y,V)+" ":t+=" var "+y+" = "+V+"; "+H+" ",l&&(t+=" if (!"+f+") break; "),t+=" } ",l&&(t+=" else "+f+" = true; "),t+=" }  ",l&&(t+=" if ("+f+") { ",d+="}")}}}return l&&(t+=" "+d+" if ("+u+" == errors) {"),t=e.util.cleanUpCode(t)}},{}],34:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u="errs__"+a,h=e.util.copy(e);h.level++;var d="valid"+h.level;if(t+="var "+u+" = errors;",e.opts.strictKeywords?"object"==typeof o&&0<Object.keys(o).length:e.util.schemaHasRules(o,e.RULES.all)){h.schema=o,h.schemaPath=i,h.errSchemaPath=n;var f="key"+a,p="idx"+a,m="i"+a,v="' + "+f+" + '",y="data"+(h.dataLevel=e.dataLevel+1),g="dataProperties"+a,P=e.opts.ownProperties,E=e.baseId;P&&(t+=" var "+g+" = undefined; "),t+=P?" "+g+" = "+g+" || Object.keys("+c+"); for (var "+p+"=0; "+p+"<"+g+".length; "+p+"++) { var "+f+" = "+g+"["+p+"]; ":" for (var "+f+" in "+c+") { ",t+=" var startErrs"+a+" = errors; ";var w=f,b=e.compositeRule;e.compositeRule=h.compositeRule=!0;var S=e.validate(h);h.baseId=E,e.util.varOccurences(S,y)<2?t+=" "+e.util.varReplace(S,y,w)+" ":t+=" var "+y+" = "+w+"; "+S+" ",e.compositeRule=h.compositeRule=b,t+=" if (!"+d+") { for (var "+m+"=startErrs"+a+"; "+m+"<errors; "+m+"++) { vErrors["+m+"].propertyName = "+f+"; }   var err =   ",!1!==e.createErrors?(t+=" { keyword: 'propertyNames' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { propertyName: '"+v+"' } ",!1!==e.opts.messages&&(t+=" , message: 'property name \\'"+v+"\\' is invalid' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ",t+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!e.compositeRule&&l&&(t+=e.async?" throw new ValidationError(vErrors); ":" validate.errors = vErrors; return false; "),l&&(t+=" break; "),t+=" } }"}return l&&(t+="  if ("+u+" == errors) {"),t=e.util.cleanUpCode(t)}},{}],35:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a,s=" ",o=e.dataLevel,i=e.schema[r],n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(o||""),u="valid"+e.level;if("#"==i||"#/"==i)a=e.isRoot?(t=e.async,"validate"):(t=!0===e.root.schema.$async,"root.refVal[0]");else{var h=e.resolveRef(e.baseId,i,e.isRoot);if(void 0===h){var d=e.MissingRefError.message(e.baseId,i);if("fail"==e.opts.missingRefs){e.logger.error(d),(v=v||[]).push(s),s="",!1!==e.createErrors?(s+=" { keyword: '$ref' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { ref: '"+e.util.escapeQuotes(i)+"' } ",!1!==e.opts.messages&&(s+=" , message: 'can\\'t resolve reference "+e.util.escapeQuotes(i)+"' "),e.opts.verbose&&(s+=" , schema: "+e.util.toQuotedString(i)+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),s+=" } "):s+=" {} ";var f=s;s=v.pop(),s+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+f+"]); ":" validate.errors = ["+f+"]; return false; ":" var err = "+f+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l&&(s+=" if (false) { ")}else{if("ignore"!=e.opts.missingRefs)throw new e.MissingRefError(e.baseId,i,d);e.logger.warn(d),l&&(s+=" if (true) { ")}}else if(h.inline){var p=e.util.copy(e);p.level++;var m="valid"+p.level;p.schema=h.schema,p.schemaPath="",p.errSchemaPath=i,s+=" "+e.validate(p).replace(/validate\.schema/g,h.code)+" ",l&&(s+=" if ("+m+") { ")}else t=!0===h.$async||e.async&&!1!==h.$async,a=h.code}if(a){var v;(v=v||[]).push(s),s="",s+=e.opts.passContext?" "+a+".call(this, ":" "+a+"( ",s+=" "+c+", (dataPath || '')",'""'!=e.errorPath&&(s+=" + "+e.errorPath);var y=s+=" , "+(o?"data"+(o-1||""):"parentData")+" , "+(o?e.dataPathArr[o]:"parentDataProperty")+", rootData)  ";if(s=v.pop(),t){if(!e.async)throw new Error("async schema referenced by sync schema");l&&(s+=" var "+u+"; "),s+=" try { await "+y+"; ",l&&(s+=" "+u+" = true; "),s+=" } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ",l&&(s+=" "+u+" = false; "),s+=" } ",l&&(s+=" if ("+u+") { ")}else s+=" if (!"+y+") { if (vErrors === null) vErrors = "+a+".errors; else vErrors = vErrors.concat("+a+".errors); errors = vErrors.length; } ",l&&(s+=" else { ")}return s}},{}],36:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u="valid"+a,h=e.opts.$data&&o&&o.$data;h&&(t+=" var schema"+a+" = "+e.util.getData(o.$data,s,e.dataPathArr)+"; ");var d="schema"+a;if(!h)if(o.length<e.opts.loopRequired&&e.schema.properties&&Object.keys(e.schema.properties).length){var f=[],p=o;if(p)for(var m,v=-1,y=p.length-1;v<y;){m=p[v+=1];var g=e.schema.properties[m];g&&(e.opts.strictKeywords?"object"==typeof g&&0<Object.keys(g).length:e.util.schemaHasRules(g,e.RULES.all))||(f[f.length]=m)}}else f=o;if(h||f.length){var P=e.errorPath,E=h||e.opts.loopRequired<=f.length,w=e.opts.ownProperties;if(l)if(t+=" var missing"+a+"; ",E){h||(t+=" var "+d+" = validate.schema"+i+"; ");var b="' + "+(R="schema"+a+"["+(F="i"+a)+"]")+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(P,R,e.opts.jsonPointers)),t+=" var "+u+" = true; ",h&&(t+=" if (schema"+a+" === undefined) "+u+" = true; else if (!Array.isArray(schema"+a+")) "+u+" = false; else {"),t+=" for (var "+F+" = 0; "+F+" < "+d+".length; "+F+"++) { "+u+" = "+c+"["+d+"["+F+"]] !== undefined ",w&&(t+=" &&   Object.prototype.hasOwnProperty.call("+c+", "+d+"["+F+"]) "),t+="; if (!"+u+") break; } ",h&&(t+="  }  "),($=$||[]).push(t+="  if (!"+u+") {   "),t="",!1!==e.createErrors?(t+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { missingProperty: '"+b+"' } ",!1!==e.opts.messages&&(t+=" , message: '",t+=e.opts._errorDataPathProperty?"is a required property":"should have required property \\'"+b+"\\'",t+="' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var S=t;t=$.pop(),t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+S+"]); ":" validate.errors = ["+S+"]; return false; ":" var err = "+S+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",t+=" } else { "}else{t+=" if ( ";var _=f;if(_)for(var F=-1,x=_.length-1;F<x;){j=_[F+=1],F&&(t+=" || "),t+=" ( ( "+(C=c+(A=e.util.getProperty(j)))+" === undefined ",w&&(t+=" || ! Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(j)+"') "),t+=") && (missing"+a+" = "+e.util.toQuotedString(e.opts.jsonPointers?j:A)+") ) "}t+=") {  ";var $;b="' + "+(R="missing"+a)+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.opts.jsonPointers?e.util.getPathExpr(P,R,!0):P+" + "+R),($=$||[]).push(t),t="",!1!==e.createErrors?(t+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { missingProperty: '"+b+"' } ",!1!==e.opts.messages&&(t+=" , message: '",t+=e.opts._errorDataPathProperty?"is a required property":"should have required property \\'"+b+"\\'",t+="' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";S=t;t=$.pop(),t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+S+"]); ":" validate.errors = ["+S+"]; return false; ":" var err = "+S+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",t+=" } else { "}else if(E){h||(t+=" var "+d+" = validate.schema"+i+"; ");var R;b="' + "+(R="schema"+a+"["+(F="i"+a)+"]")+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(P,R,e.opts.jsonPointers)),h&&(t+=" if ("+d+" && !Array.isArray("+d+")) {  var err =   ",!1!==e.createErrors?(t+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { missingProperty: '"+b+"' } ",!1!==e.opts.messages&&(t+=" , message: '",t+=e.opts._errorDataPathProperty?"is a required property":"should have required property \\'"+b+"\\'",t+="' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ",t+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if ("+d+" !== undefined) { "),t+=" for (var "+F+" = 0; "+F+" < "+d+".length; "+F+"++) { if ("+c+"["+d+"["+F+"]] === undefined ",w&&(t+=" || ! Object.prototype.hasOwnProperty.call("+c+", "+d+"["+F+"]) "),t+=") {  var err =   ",!1!==e.createErrors?(t+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { missingProperty: '"+b+"' } ",!1!==e.opts.messages&&(t+=" , message: '",t+=e.opts._errorDataPathProperty?"is a required property":"should have required property \\'"+b+"\\'",t+="' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ",t+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ",h&&(t+="  }  ")}else{var D=f;if(D)for(var j,O=-1,I=D.length-1;O<I;){j=D[O+=1];var A=e.util.getProperty(j),C=(b=e.util.escapeQuotes(j),c+A);e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPath(P,j,e.opts.jsonPointers)),t+=" if ( "+C+" === undefined ",w&&(t+=" || ! Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(j)+"') "),t+=") {  var err =   ",!1!==e.createErrors?(t+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { missingProperty: '"+b+"' } ",!1!==e.opts.messages&&(t+=" , message: '",t+=e.opts._errorDataPathProperty?"is a required property":"should have required property \\'"+b+"\\'",t+="' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ",t+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } "}}e.errorPath=P}else l&&(t+=" if (true) {");return t}},{}],37:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+e.util.getProperty(r),l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,u="data"+(o||""),h="valid"+s,d=e.opts.$data&&i&&i.$data;if(t=d?(a+=" var schema"+s+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ","schema"+s):i,(i||d)&&!1!==e.opts.uniqueItems){d&&(a+=" var "+h+"; if ("+t+" === false || "+t+" === undefined) "+h+" = true; else if (typeof "+t+" != 'boolean') "+h+" = false; else { "),a+=" var i = "+u+".length , "+h+" = true , j; if (i > 1) { ";var f=e.schema.items&&e.schema.items.type,p=Array.isArray(f);if(!f||"object"==f||"array"==f||p&&(0<=f.indexOf("object")||0<=f.indexOf("array")))a+=" outer: for (;i--;) { for (j = i; j--;) { if (equal("+u+"[i], "+u+"[j])) { "+h+" = false; break outer; } } } ";else a+=" var itemIndices = {}, item; for (;i--;) { var item = "+u+"[i]; ",a+=" if ("+e.util["checkDataType"+(p?"s":"")](f,"item",!0)+") continue; ",p&&(a+=" if (typeof item == 'string') item = '\"' + item; "),a+=" if (typeof itemIndices[item] == 'number') { "+h+" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } ";a+=" } ",d&&(a+="  }  ");var m=m||[];m.push(a+=" if (!"+h+") {   "),a="",!1!==e.createErrors?(a+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { i: i, j: j } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),e.opts.verbose&&(a+=" , schema:  ",a+=d?"validate.schema"+n:""+i,a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";var v=a;a=m.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+v+"]); ":" validate.errors = ["+v+"]; return false; ":" var err = "+v+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",c&&(a+=" else { ")}else c&&(a+=" if (true) { ");return a}},{}],38:[function(e,r,t){"use strict";r.exports=function(a,e){var r="",t=!0===a.schema.$async,s=a.util.schemaHasRulesExcept(a.schema,a.RULES.all,"$ref"),o=a.self._getId(a.schema);if(a.opts.strictKeywords){var i=a.util.schemaUnknownRules(a.schema,a.RULES.keywords);if(i){var n="unknown keyword: "+i;if("log"!==a.opts.strictKeywords)throw new Error(n);a.logger.warn(n)}}if(a.isTop&&(r+=" var validate = ",t&&(a.async=!0,r+="async "),r+="function(data, dataPath, parentData, parentDataProperty, rootData) { 'use strict'; ",o&&(a.opts.sourceCode||a.opts.processCode)&&(r+=" /*# sourceURL="+o+" */ ")),"boolean"==typeof a.schema||!s&&!a.schema.$ref){var l=a.level,c=a.dataLevel,u=a.schema[e="false schema"],h=a.schemaPath+a.util.getProperty(e),d=a.errSchemaPath+"/"+e,f=!a.opts.allErrors,p="data"+(c||""),m="valid"+l;if(!1===a.schema){a.isTop?f=!0:r+=" var "+m+" = false; ",(Z=Z||[]).push(r),r="",!1!==a.createErrors?(r+=" { keyword: 'false schema' , dataPath: (dataPath || '') + "+a.errorPath+" , schemaPath: "+a.util.toQuotedString(d)+" , params: {} ",!1!==a.opts.messages&&(r+=" , message: 'boolean schema is false' "),a.opts.verbose&&(r+=" , schema: false , parentSchema: validate.schema"+a.schemaPath+" , data: "+p+" "),r+=" } "):r+=" {} ";var v=r;r=Z.pop(),r+=!a.compositeRule&&f?a.async?" throw new ValidationError(["+v+"]); ":" validate.errors = ["+v+"]; return false; ":" var err = "+v+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}else r+=a.isTop?t?" return data; ":" validate.errors = null; return true; ":" var "+m+" = true; ";return a.isTop&&(r+=" }; return validate; "),r}if(a.isTop){var y=a.isTop;l=a.level=0,c=a.dataLevel=0,p="data";if(a.rootId=a.resolve.fullPath(a.self._getId(a.root.schema)),a.baseId=a.baseId||a.rootId,delete a.isTop,a.dataPathArr=[void 0],void 0!==a.schema.default&&a.opts.useDefaults&&a.opts.strictDefaults){var g="default is ignored in the schema root";if("log"!==a.opts.strictDefaults)throw new Error(g);a.logger.warn(g)}r+=" var vErrors = null; ",r+=" var errors = 0;     ",r+=" if (rootData === undefined) rootData = data; "}else{l=a.level,p="data"+((c=a.dataLevel)||"");if(o&&(a.baseId=a.resolve.url(a.baseId,o)),t&&!a.async)throw new Error("async schema in sync schema");r+=" var errs_"+l+" = errors;"}m="valid"+l,f=!a.opts.allErrors;var P="",E="",w=a.schema.type,b=Array.isArray(w);if(w&&a.opts.nullable&&!0===a.schema.nullable&&(b?-1==w.indexOf("null")&&(w=w.concat("null")):"null"!=w&&(w=[w,"null"],b=!0)),b&&1==w.length&&(w=w[0],b=!1),a.schema.$ref&&s){if("fail"==a.opts.extendRefs)throw new Error('$ref: validation keywords used in schema at path "'+a.errSchemaPath+'" (see option extendRefs)');!0!==a.opts.extendRefs&&(s=!1,a.logger.warn('$ref: keywords ignored in schema at path "'+a.errSchemaPath+'"'))}if(a.schema.$comment&&a.opts.$comment&&(r+=" "+a.RULES.all.$comment.code(a,"$comment")),w){if(a.opts.coerceTypes)var S=a.util.coerceToTypes(a.opts.coerceTypes,w);var _=a.RULES.types[w];if(S||b||!0===_||_&&!G(_)){h=a.schemaPath+".type",d=a.errSchemaPath+"/type",h=a.schemaPath+".type",d=a.errSchemaPath+"/type";if(r+=" if ("+a.util[b?"checkDataTypes":"checkDataType"](w,p,!0)+") { ",S){var F="dataType"+l,x="coerced"+l;r+=" var "+F+" = typeof "+p+"; ","array"==a.opts.coerceTypes&&(r+=" if ("+F+" == 'object' && Array.isArray("+p+")) "+F+" = 'array'; "),r+=" var "+x+" = undefined; ";var $="",R=S;if(R)for(var D,j=-1,O=R.length-1;j<O;)D=R[j+=1],j&&(r+=" if ("+x+" === undefined) { ",$+="}"),"array"==a.opts.coerceTypes&&"array"!=D&&(r+=" if ("+F+" == 'array' && "+p+".length == 1) { "+x+" = "+p+" = "+p+"[0]; "+F+" = typeof "+p+";  } "),"string"==D?r+=" if ("+F+" == 'number' || "+F+" == 'boolean') "+x+" = '' + "+p+"; else if ("+p+" === null) "+x+" = ''; ":"number"==D||"integer"==D?(r+=" if ("+F+" == 'boolean' || "+p+" === null || ("+F+" == 'string' && "+p+" && "+p+" == +"+p+" ","integer"==D&&(r+=" && !("+p+" % 1)"),r+=")) "+x+" = +"+p+"; "):"boolean"==D?r+=" if ("+p+" === 'false' || "+p+" === 0 || "+p+" === null) "+x+" = false; else if ("+p+" === 'true' || "+p+" === 1) "+x+" = true; ":"null"==D?r+=" if ("+p+" === '' || "+p+" === 0 || "+p+" === false) "+x+" = null; ":"array"==a.opts.coerceTypes&&"array"==D&&(r+=" if ("+F+" == 'string' || "+F+" == 'number' || "+F+" == 'boolean' || "+p+" == null) "+x+" = ["+p+"]; ");(Z=Z||[]).push(r+=" "+$+" if ("+x+" === undefined) {   "),r="",!1!==a.createErrors?(r+=" { keyword: 'type' , dataPath: (dataPath || '') + "+a.errorPath+" , schemaPath: "+a.util.toQuotedString(d)+" , params: { type: '",r+=b?""+w.join(","):""+w,r+="' } ",!1!==a.opts.messages&&(r+=" , message: 'should be ",r+=b?""+w.join(","):""+w,r+="' "),a.opts.verbose&&(r+=" , schema: validate.schema"+h+" , parentSchema: validate.schema"+a.schemaPath+" , data: "+p+" "),r+=" } "):r+=" {} ";v=r;r=Z.pop(),r+=!a.compositeRule&&f?a.async?" throw new ValidationError(["+v+"]); ":" validate.errors = ["+v+"]; return false; ":" var err = "+v+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",r+=" } else {  ";var I=c?"data"+(c-1||""):"parentData";r+=" "+p+" = "+x+"; ",c||(r+="if ("+I+" !== undefined)"),r+=" "+I+"["+(c?a.dataPathArr[c]:"parentDataProperty")+"] = "+x+"; } "}else{(Z=Z||[]).push(r),r="",!1!==a.createErrors?(r+=" { keyword: 'type' , dataPath: (dataPath || '') + "+a.errorPath+" , schemaPath: "+a.util.toQuotedString(d)+" , params: { type: '",r+=b?""+w.join(","):""+w,r+="' } ",!1!==a.opts.messages&&(r+=" , message: 'should be ",r+=b?""+w.join(","):""+w,r+="' "),a.opts.verbose&&(r+=" , schema: validate.schema"+h+" , parentSchema: validate.schema"+a.schemaPath+" , data: "+p+" "),r+=" } "):r+=" {} ";v=r;r=Z.pop(),r+=!a.compositeRule&&f?a.async?" throw new ValidationError(["+v+"]); ":" validate.errors = ["+v+"]; return false; ":" var err = "+v+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}r+=" } "}}if(a.schema.$ref&&!s)r+=" "+a.RULES.all.$ref.code(a,"$ref")+" ",f&&(r+=" } if (errors === ",r+=y?"0":"errs_"+l,r+=") { ",E+="}");else{var A=a.RULES;if(A)for(var C=-1,k=A.length-1;C<k;)if(G(_=A[C+=1])){if(_.type&&(r+=" if ("+a.util.checkDataType(_.type,p)+") { "),a.opts.useDefaults)if("object"==_.type&&a.schema.properties){u=a.schema.properties;var L=Object.keys(u);if(L)for(var z,T=-1,q=L.length-1;T<q;){if(void 0!==(U=u[z=L[T+=1]]).default){var N=p+a.util.getProperty(z);if(a.compositeRule){if(a.opts.strictDefaults){g="default is ignored for: "+N;if("log"!==a.opts.strictDefaults)throw new Error(g);a.logger.warn(g)}}else r+=" if ("+N+" === undefined ","empty"==a.opts.useDefaults&&(r+=" || "+N+" === null || "+N+" === '' "),r+=" ) "+N+" = ",r+="shared"==a.opts.useDefaults?" "+a.useDefault(U.default)+" ":" "+JSON.stringify(U.default)+" ",r+="; "}}}else if("array"==_.type&&Array.isArray(a.schema.items)){var Q=a.schema.items;if(Q){j=-1;for(var U,V=Q.length-1;j<V;)if(void 0!==(U=Q[j+=1]).default){N=p+"["+j+"]";if(a.compositeRule){if(a.opts.strictDefaults){g="default is ignored for: "+N;if("log"!==a.opts.strictDefaults)throw new Error(g);a.logger.warn(g)}}else r+=" if ("+N+" === undefined ","empty"==a.opts.useDefaults&&(r+=" || "+N+" === null || "+N+" === '' "),r+=" ) "+N+" = ",r+="shared"==a.opts.useDefaults?" "+a.useDefault(U.default)+" ":" "+JSON.stringify(U.default)+" ",r+="; "}}}var H=_.rules;if(H)for(var K,M=-1,B=H.length-1;M<B;)if(Y(K=H[M+=1])){var J=K.code(a,K.keyword,_.type);J&&(r+=" "+J+" ",f&&(P+="}"))}if(f&&(r+=" "+P+" ",P=""),_.type&&(r+=" } ",w&&w===_.type&&!S)){var Z;h=a.schemaPath+".type",d=a.errSchemaPath+"/type";(Z=Z||[]).push(r+=" else { "),r="",!1!==a.createErrors?(r+=" { keyword: 'type' , dataPath: (dataPath || '') + "+a.errorPath+" , schemaPath: "+a.util.toQuotedString(d)+" , params: { type: '",r+=b?""+w.join(","):""+w,r+="' } ",!1!==a.opts.messages&&(r+=" , message: 'should be ",r+=b?""+w.join(","):""+w,r+="' "),a.opts.verbose&&(r+=" , schema: validate.schema"+h+" , parentSchema: validate.schema"+a.schemaPath+" , data: "+p+" "),r+=" } "):r+=" {} ";v=r;r=Z.pop(),r+=!a.compositeRule&&f?a.async?" throw new ValidationError(["+v+"]); ":" validate.errors = ["+v+"]; return false; ":" var err = "+v+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",r+=" } "}f&&(r+=" if (errors === ",r+=y?"0":"errs_"+l,r+=") { ",E+="}")}}function G(e){for(var r=e.rules,t=0;t<r.length;t++)if(Y(r[t]))return 1}function Y(e){return void 0!==a.schema[e.keyword]||e.implements&&function(e){for(var r=e.implements,t=0;t<r.length;t++)if(void 0!==a.schema[r[t]])return!0}(e)}return f&&(r+=" "+E+" "),y?(t?(r+=" if (errors === 0) return data;           ",r+=" else throw new ValidationError(vErrors); "):(r+=" validate.errors = vErrors; ",r+=" return errors === 0;       "),r+=" }; return validate;"):r+=" var "+m+" = errors === errs_"+l+";",r=a.util.cleanUpCode(r),y&&(r=a.util.finalCleanUpCode(r,t)),r}},{}],39:[function(e,r,t){"use strict";var i=/^[a-z_$][a-z0-9_$-]*$/i,l=e("./dotjs/custom"),s=e("./definition_schema");r.exports={add:function(e,r){var n=this.RULES;if(n.keywords[e])throw new Error("Keyword "+e+" is already defined");if(!i.test(e))throw new Error("Keyword "+e+" is not a valid identifier");if(r){this.validateKeyword(r,!0);var t=r.type;if(Array.isArray(t))for(var a=0;a<t.length;a++)o(e,t[a],r);else o(e,t,r);var s=r.metaSchema;s&&(r.$data&&this._opts.$data&&(s={anyOf:[s,{$ref:"https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/data.json#"}]}),r.validateSchema=this.compile(s,!0))}function o(e,r,t){for(var a,s=0;s<n.length;s++){var o=n[s];if(o.type==r){a=o;break}}a||n.push(a={type:r,rules:[]});var i={keyword:e,definition:t,custom:!0,code:l,implements:t.implements};a.rules.push(i),n.custom[e]=i}return n.keywords[e]=n.all[e]=!0,this},get:function(e){var r=this.RULES.custom[e];return r?r.definition:this.RULES.keywords[e]||!1},remove:function(e){var r=this.RULES;delete r.keywords[e],delete r.all[e],delete r.custom[e];for(var t=0;t<r.length;t++)for(var a=r[t].rules,s=0;s<a.length;s++)if(a[s].keyword==e){a.splice(s,1);break}return this},validate:function e(r,t){e.errors=null;var a=this._validateKeyword=this._validateKeyword||this.compile(s,!0);if(a(r))return!0;e.errors=a.errors;{if(t)throw new Error("custom keyword definition is invalid: "+this.errorsText(a.errors));return!1}}}},{"./definition_schema":12,"./dotjs/custom":22}],40:[function(e,r,t){r.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON Schema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}},{}],41:[function(e,r,t){r.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}},{}],42:[function(e,r,t){"use strict";r.exports=function e(r,t){if(r===t)return!0;if(r&&t&&"object"==typeof r&&"object"==typeof t){if(r.constructor!==t.constructor)return!1;var a,s,o;if(Array.isArray(r)){if((a=r.length)!=t.length)return!1;for(s=a;0!=s--;)if(!e(r[s],t[s]))return!1;return!0}if(r.constructor===RegExp)return r.source===t.source&&r.flags===t.flags;if(r.valueOf!==Object.prototype.valueOf)return r.valueOf()===t.valueOf();if(r.toString!==Object.prototype.toString)return r.toString()===t.toString();if((a=(o=Object.keys(r)).length)!==Object.keys(t).length)return!1;for(s=a;0!=s--;)if(!Object.prototype.hasOwnProperty.call(t,o[s]))return!1;for(s=a;0!=s--;){var i=o[s];if(!e(r[i],t[i]))return!1}return!0}return r!=r&&t!=t}},{}],43:[function(e,r,t){"use strict";r.exports=function(e,r){"function"==typeof(r=r||{})&&(r={cmp:r});var a,l="boolean"==typeof r.cycles&&r.cycles,c=r.cmp&&(a=r.cmp,function(t){return function(e,r){return a({key:e,value:t[e]},{key:r,value:t[r]})}}),u=[];return function e(r){if(r&&r.toJSON&&"function"==typeof r.toJSON&&(r=r.toJSON()),void 0!==r){if("number"==typeof r)return isFinite(r)?""+r:"null";if("object"!=typeof r)return JSON.stringify(r);var t,a;if(Array.isArray(r)){for(a="[",t=0;t<r.length;t++)t&&(a+=","),a+=e(r[t])||"null";return a+"]"}if(null===r)return"null";if(-1!==u.indexOf(r)){if(l)return JSON.stringify("__cycle__");throw new TypeError("Converting circular structure to JSON")}var s=u.push(r)-1,o=Object.keys(r).sort(c&&c(r));for(a="",t=0;t<o.length;t++){var i=o[t],n=e(r[i]);n&&(a&&(a+=","),a+=JSON.stringify(i)+":"+n)}return u.splice(s,1),"{"+a+"}"}}(e)}},{}],44:[function(e,r,t){"use strict";var m=r.exports=function(e,r,t){"function"==typeof r&&(t=r,r={}),function e(r,t,a,s,o,i,n,l,c,u){if(s&&"object"==typeof s&&!Array.isArray(s)){for(var h in t(s,o,i,n,l,c,u),s){var d=s[h];if(Array.isArray(d)){if(h in m.arrayKeywords)for(var f=0;f<d.length;f++)e(r,t,a,d[f],o+"/"+h+"/"+f,i,o,h,s,f)}else if(h in m.propsKeywords){if(d&&"object"==typeof d)for(var p in d)e(r,t,a,d[p],o+"/"+h+"/"+p.replace(/~/g,"~0").replace(/\//g,"~1"),i,o,h,s,p)}else(h in m.keywords||r.allKeys&&!(h in m.skipKeywords))&&e(r,t,a,d,o+"/"+h,i,o,h,s)}a(s,o,i,n,l,c,u)}}(r,"function"==typeof(t=r.cb||t)?t:t.pre||function(){},t.post||function(){},e,"",e)};m.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0},m.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},m.propsKeywords={definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},m.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0}},{}],45:[function(e,r,t){var a;a=this,function(e){"use strict";function J(){for(var e=arguments.length,r=Array(e),t=0;t<e;t++)r[t]=arguments[t];if(1<r.length){r[0]=r[0].slice(0,-1);for(var a=r.length-1,s=1;s<a;++s)r[s]=r[s].slice(1,-1);return r[a]=r[a].slice(1),r.join("")}return r[0]}function Z(e){return"(?:"+e+")"}function a(e){return void 0===e?"undefined":null===e?"null":Object.prototype.toString.call(e).split(" ").pop().split("]").shift().toLowerCase()}function p(e){return e.toUpperCase()}function r(e){var r="[A-Za-z]",t="[0-9]",a=J(t,"[A-Fa-f]"),s=Z(Z("%[EFef]"+a+"%"+a+a+"%"+a+a)+"|"+Z("%[89A-Fa-f]"+a+"%"+a+a)+"|"+Z("%"+a+a)),o="[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",i=J("[\\:\\/\\?\\#\\[\\]\\@]",o),n=e?"[\\uE000-\\uF8FF]":"[]",l=J(r,t,"[\\-\\.\\_\\~]",e?"[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]":"[]"),c=Z(r+J(r,t,"[\\+\\-\\.]")+"*"),u=Z(Z(s+"|"+J(l,o,"[\\:]"))+"*"),h=(Z("(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9][0-9])|(?:[1-9][0-9])|"+t),Z("(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9][0-9])|(?:0?[1-9][0-9])|0?0?"+t)),d=Z(h+"\\."+h+"\\."+h+"\\."+h),f=Z(a+"{1,4}"),p=Z(Z(f+"\\:"+f)+"|"+d),m=Z(Z(f+"\\:")+"{6}"+p),v=Z("\\:\\:"+Z(f+"\\:")+"{5}"+p),y=Z(Z(f)+"?\\:\\:"+Z(f+"\\:")+"{4}"+p),g=Z(Z(Z(f+"\\:")+"{0,1}"+f)+"?\\:\\:"+Z(f+"\\:")+"{3}"+p),P=Z(Z(Z(f+"\\:")+"{0,2}"+f)+"?\\:\\:"+Z(f+"\\:")+"{2}"+p),E=Z(Z(Z(f+"\\:")+"{0,3}"+f)+"?\\:\\:"+f+"\\:"+p),w=Z(Z(Z(f+"\\:")+"{0,4}"+f)+"?\\:\\:"+p),b=Z(Z(Z(f+"\\:")+"{0,5}"+f)+"?\\:\\:"+f),S=Z(Z(Z(f+"\\:")+"{0,6}"+f)+"?\\:\\:"),_=Z([m,v,y,g,P,E,w,b,S].join("|")),F=Z(Z(l+"|"+s)+"+"),x=(Z(_+"\\%25"+F),Z(_+Z("\\%25|\\%(?!"+a+"{2})")+F)),$=Z("[vV]"+a+"+\\."+J(l,o,"[\\:]")+"+"),R=Z("\\["+Z(x+"|"+_+"|"+$)+"\\]"),D=Z(Z(s+"|"+J(l,o))+"*"),j=Z(R+"|"+d+"(?!"+D+")|"+D),O=Z(t+"*"),I=Z(Z(u+"@")+"?"+j+Z("\\:"+O)+"?"),A=Z(s+"|"+J(l,o,"[\\:\\@]")),C=Z(A+"*"),k=Z(A+"+"),L=Z(Z(s+"|"+J(l,o,"[\\@]"))+"+"),z=Z(Z("\\/"+C)+"*"),T=Z("\\/"+Z(k+z)+"?"),q=Z(L+z),N=Z(k+z),Q="(?!"+A+")",U=(Z(z+"|"+T+"|"+q+"|"+N+"|"+Q),Z(Z(A+"|"+J("[\\/\\?]",n))+"*")),V=Z(Z(A+"|[\\/\\?]")+"*"),H=Z(Z("\\/\\/"+I+z)+"|"+T+"|"+N+"|"+Q),K=Z(c+"\\:"+H+Z("\\?"+U)+"?"+Z("\\#"+V)+"?"),M=Z(Z("\\/\\/"+I+z)+"|"+T+"|"+q+"|"+Q),B=Z(M+Z("\\?"+U)+"?"+Z("\\#"+V)+"?");Z(K+"|"+B),Z(c+"\\:"+H+Z("\\?"+U)+"?"),Z(Z("\\/\\/("+Z("("+u+")@")+"?("+j+")"+Z("\\:("+O+")")+"?)")+"?("+z+"|"+T+"|"+N+"|"+Q+")"),Z("\\?("+U+")"),Z("\\#("+V+")"),Z(Z("\\/\\/("+Z("("+u+")@")+"?("+j+")"+Z("\\:("+O+")")+"?)")+"?("+z+"|"+T+"|"+q+"|"+Q+")"),Z("\\?("+U+")"),Z("\\#("+V+")"),Z(Z("\\/\\/("+Z("("+u+")@")+"?("+j+")"+Z("\\:("+O+")")+"?)")+"?("+z+"|"+T+"|"+N+"|"+Q+")"),Z("\\?("+U+")"),Z("\\#("+V+")"),Z("("+u+")@"),Z("\\:("+O+")");return{NOT_SCHEME:new RegExp(J("[^]",r,t,"[\\+\\-\\.]"),"g"),NOT_USERINFO:new RegExp(J("[^\\%\\:]",l,o),"g"),NOT_HOST:new RegExp(J("[^\\%\\[\\]\\:]",l,o),"g"),NOT_PATH:new RegExp(J("[^\\%\\/\\:\\@]",l,o),"g"),NOT_PATH_NOSCHEME:new RegExp(J("[^\\%\\/\\@]",l,o),"g"),NOT_QUERY:new RegExp(J("[^\\%]",l,o,"[\\:\\@\\/\\?]",n),"g"),NOT_FRAGMENT:new RegExp(J("[^\\%]",l,o,"[\\:\\@\\/\\?]"),"g"),ESCAPE:new RegExp(J("[^]",l,o),"g"),UNRESERVED:new RegExp(l,"g"),OTHER_CHARS:new RegExp(J("[^\\%]",l,i),"g"),PCT_ENCODED:new RegExp(s,"g"),IPV4ADDRESS:new RegExp("^("+d+")$"),IPV6ADDRESS:new RegExp("^\\[?("+_+")"+Z(Z("\\%25|\\%(?!"+a+"{2})")+"("+F+")")+"?\\]?$")}}var u=r(!1),h=r(!0),w=function(e,r){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,r){var t=[],a=!0,s=!1,o=void 0;try{for(var i,n=e[Symbol.iterator]();!(a=(i=n.next()).done)&&(t.push(i.value),!r||t.length!==r);a=!0);}catch(e){s=!0,o=e}finally{try{!a&&n.return&&n.return()}finally{if(s)throw o}}return t}(e,r);throw new TypeError("Invalid attempt to destructure non-iterable instance")},A=2147483647,t=/^xn--/,s=/[^\0-\x7E]/,o=/[\x2E\u3002\uFF0E\uFF61]/g,i={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},C=Math.floor,k=String.fromCharCode;function L(e){throw new RangeError(i[e])}function n(e,r){var t=e.split("@"),a="";return 1<t.length&&(a=t[0]+"@",e=t[1]),a+function(e,r){for(var t=[],a=e.length;a--;)t[a]=r(e[a]);return t}((e=e.replace(o,".")).split("."),r).join(".")}function z(e){for(var r=[],t=0,a=e.length;t<a;){var s=e.charCodeAt(t++);if(55296<=s&&s<=56319&&t<a){var o=e.charCodeAt(t++);56320==(64512&o)?r.push(((1023&s)<<10)+(1023&o)+65536):(r.push(s),t--)}else r.push(s)}return r}function T(e,r){return e+22+75*(e<26)-((0!=r)<<5)}function q(e,r,t){var a=0;for(e=t?C(e/700):e>>1,e+=C(e/r);455<e;a+=36)e=C(e/35);return C(a+36*e/(e+38))}function l(e){var r,t=[],a=e.length,s=0,o=128,i=72,n=e.lastIndexOf("-");n<0&&(n=0);for(var l=0;l<n;++l)128<=e.charCodeAt(l)&&L("not-basic"),t.push(e.charCodeAt(l));for(var c=0<n?n+1:0;c<a;){for(var u=s,h=1,d=36;;d+=36){a<=c&&L("invalid-input");var f=(r=e.charCodeAt(c++))-48<10?r-22:r-65<26?r-65:r-97<26?r-97:36;(36<=f||f>C((A-s)/h))&&L("overflow"),s+=f*h;var p=d<=i?1:i+26<=d?26:d-i;if(f<p)break;var m=36-p;h>C(A/m)&&L("overflow"),h*=m}var v=t.length+1;i=q(s-u,v,0==u),C(s/v)>A-o&&L("overflow"),o+=C(s/v),s%=v,t.splice(s++,0,o)}return String.fromCodePoint.apply(String,t)}function c(e){var r=[],t=(e=z(e)).length,a=128,s=0,o=72,i=!0,n=!1,l=void 0;try{for(var c,u=e[Symbol.iterator]();!(i=(c=u.next()).done);i=!0){var h=c.value;h<128&&r.push(k(h))}}catch(e){n=!0,l=e}finally{try{!i&&u.return&&u.return()}finally{if(n)throw l}}var d=r.length,f=d;for(d&&r.push("-");f<t;){var p=A,m=!0,v=!1,y=void 0;try{for(var g,P=e[Symbol.iterator]();!(m=(g=P.next()).done);m=!0){var E=g.value;a<=E&&E<p&&(p=E)}}catch(e){v=!0,y=e}finally{try{!m&&P.return&&P.return()}finally{if(v)throw y}}var w=f+1;p-a>C((A-s)/w)&&L("overflow"),s+=(p-a)*w,a=p;var b=!0,S=!1,_=void 0;try{for(var F,x=e[Symbol.iterator]();!(b=(F=x.next()).done);b=!0){var $=F.value;if($<a&&++s>A&&L("overflow"),$==a){for(var R=s,D=36;;D+=36){var j=D<=o?1:o+26<=D?26:D-o;if(R<j)break;var O=R-j,I=36-j;r.push(k(T(j+O%I,0))),R=C(O/I)}r.push(k(T(R,0))),o=q(s,w,f==d),s=0,++f}}}catch(e){S=!0,_=e}finally{try{!b&&x.return&&x.return()}finally{if(S)throw _}}++s,++a}return r.join("")}var v={version:"2.1.0",ucs2:{decode:z,encode:function(e){return String.fromCodePoint.apply(String,function(e){if(Array.isArray(e)){for(var r=0,t=Array(e.length);r<e.length;r++)t[r]=e[r];return t}return Array.from(e)}(e))}},decode:l,encode:c,toASCII:function(e){return n(e,function(e){return s.test(e)?"xn--"+c(e):e})},toUnicode:function(e){return n(e,function(e){return t.test(e)?l(e.slice(4).toLowerCase()):e})}},d={};function m(e){var r=e.charCodeAt(0);return r<16?"%0"+r.toString(16).toUpperCase():r<128?"%"+r.toString(16).toUpperCase():r<2048?"%"+(r>>6|192).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase():"%"+(r>>12|224).toString(16).toUpperCase()+"%"+(r>>6&63|128).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase()}function f(e){for(var r="",t=0,a=e.length;t<a;){var s=parseInt(e.substr(t+1,2),16);if(s<128)r+=String.fromCharCode(s),t+=3;else if(194<=s&&s<224){if(6<=a-t){var o=parseInt(e.substr(t+4,2),16);r+=String.fromCharCode((31&s)<<6|63&o)}else r+=e.substr(t,6);t+=6}else if(224<=s){if(9<=a-t){var i=parseInt(e.substr(t+4,2),16),n=parseInt(e.substr(t+7,2),16);r+=String.fromCharCode((15&s)<<12|(63&i)<<6|63&n)}else r+=e.substr(t,9);t+=9}else r+=e.substr(t,3),t+=3}return r}function y(e,t){function r(e){var r=f(e);return r.match(t.UNRESERVED)?r:e}return e.scheme&&(e.scheme=String(e.scheme).replace(t.PCT_ENCODED,r).toLowerCase().replace(t.NOT_SCHEME,"")),void 0!==e.userinfo&&(e.userinfo=String(e.userinfo).replace(t.PCT_ENCODED,r).replace(t.NOT_USERINFO,m).replace(t.PCT_ENCODED,p)),void 0!==e.host&&(e.host=String(e.host).replace(t.PCT_ENCODED,r).toLowerCase().replace(t.NOT_HOST,m).replace(t.PCT_ENCODED,p)),void 0!==e.path&&(e.path=String(e.path).replace(t.PCT_ENCODED,r).replace(e.scheme?t.NOT_PATH:t.NOT_PATH_NOSCHEME,m).replace(t.PCT_ENCODED,p)),void 0!==e.query&&(e.query=String(e.query).replace(t.PCT_ENCODED,r).replace(t.NOT_QUERY,m).replace(t.PCT_ENCODED,p)),void 0!==e.fragment&&(e.fragment=String(e.fragment).replace(t.PCT_ENCODED,r).replace(t.NOT_FRAGMENT,m).replace(t.PCT_ENCODED,p)),e}function b(e){return e.replace(/^0*(.*)/,"$1")||"0"}function S(e,r){var t=e.match(r.IPV4ADDRESS)||[],a=w(t,2)[1];return a?a.split(".").map(b).join("."):e}function g(e,r){var t=e.match(r.IPV6ADDRESS)||[],a=w(t,3),s=a[1],o=a[2];if(s){for(var i=s.toLowerCase().split("::").reverse(),n=w(i,2),l=n[0],c=n[1],u=c?c.split(":").map(b):[],h=l.split(":").map(b),d=r.IPV4ADDRESS.test(h[h.length-1]),f=d?7:8,p=h.length-f,m=Array(f),v=0;v<f;++v)m[v]=u[v]||h[p+v]||"";d&&(m[f-1]=S(m[f-1],r));var y=m.reduce(function(e,r,t){if(!r||"0"===r){var a=e[e.length-1];a&&a.index+a.length===t?a.length++:e.push({index:t,length:1})}return e},[]).sort(function(e,r){return r.length-e.length})[0],g=void 0;if(y&&1<y.length){var P=m.slice(0,y.index),E=m.slice(y.index+y.length);g=P.join(":")+"::"+E.join(":")}else g=m.join(":");return o&&(g+="%"+o),g}return e}var P=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,E=void 0==="".match(/(){0}/)[1];function _(e){var r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t={},a=!1!==r.iri?h:u;"suffix"===r.reference&&(e=(r.scheme?r.scheme+":":"")+"//"+e);var s=e.match(P);if(s){E?(t.scheme=s[1],t.userinfo=s[3],t.host=s[4],t.port=parseInt(s[5],10),t.path=s[6]||"",t.query=s[7],t.fragment=s[8],isNaN(t.port)&&(t.port=s[5])):(t.scheme=s[1]||void 0,t.userinfo=-1!==e.indexOf("@")?s[3]:void 0,t.host=-1!==e.indexOf("//")?s[4]:void 0,t.port=parseInt(s[5],10),t.path=s[6]||"",t.query=-1!==e.indexOf("?")?s[7]:void 0,t.fragment=-1!==e.indexOf("#")?s[8]:void 0,isNaN(t.port)&&(t.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?s[4]:void 0)),t.host&&(t.host=g(S(t.host,a),a)),t.reference=void 0!==t.scheme||void 0!==t.userinfo||void 0!==t.host||void 0!==t.port||t.path||void 0!==t.query?void 0===t.scheme?"relative":void 0===t.fragment?"absolute":"uri":"same-document",r.reference&&"suffix"!==r.reference&&r.reference!==t.reference&&(t.error=t.error||"URI is not a "+r.reference+" reference.");var o=d[(r.scheme||t.scheme||"").toLowerCase()];if(r.unicodeSupport||o&&o.unicodeSupport)y(t,a);else{if(t.host&&(r.domainHost||o&&o.domainHost))try{t.host=v.toASCII(t.host.replace(a.PCT_ENCODED,f).toLowerCase())}catch(e){t.error=t.error||"Host's domain name can not be converted to ASCII via punycode: "+e}y(t,u)}o&&o.parse&&o.parse(t,r)}else t.error=t.error||"URI can not be parsed.";return t}var F=/^\.\.?\//,x=/^\/\.(\/|$)/,$=/^\/\.\.(\/|$)/,R=/^\/?(?:.|\n)*?(?=\/|$)/;function D(e){for(var r=[];e.length;)if(e.match(F))e=e.replace(F,"");else if(e.match(x))e=e.replace(x,"/");else if(e.match($))e=e.replace($,"/"),r.pop();else if("."===e||".."===e)e="";else{var t=e.match(R);if(!t)throw new Error("Unexpected dot segment condition");var a=t[0];e=e.slice(a.length),r.push(a)}return r.join("")}function j(r){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},e=t.iri?h:u,a=[],s=d[(t.scheme||r.scheme||"").toLowerCase()];if(s&&s.serialize&&s.serialize(r,t),r.host&&!e.IPV6ADDRESS.test(r.host)&&(t.domainHost||s&&s.domainHost))try{r.host=t.iri?v.toUnicode(r.host):v.toASCII(r.host.replace(e.PCT_ENCODED,f).toLowerCase())}catch(e){r.error=r.error||"Host's domain name can not be converted to "+(t.iri?"Unicode":"ASCII")+" via punycode: "+e}y(r,e),"suffix"!==t.reference&&r.scheme&&(a.push(r.scheme),a.push(":"));var o,i,n,l=(i=!1!==t.iri?h:u,n=[],void 0!==(o=r).userinfo&&(n.push(o.userinfo),n.push("@")),void 0!==o.host&&n.push(g(S(String(o.host),i),i).replace(i.IPV6ADDRESS,function(e,r,t){return"["+r+(t?"%25"+t:"")+"]"})),"number"==typeof o.port&&(n.push(":"),n.push(o.port.toString(10))),n.length?n.join(""):void 0);if(void 0!==l&&("suffix"!==t.reference&&a.push("//"),a.push(l),r.path&&"/"!==r.path.charAt(0)&&a.push("/")),void 0!==r.path){var c=r.path;t.absolutePath||s&&s.absolutePath||(c=D(c)),void 0===l&&(c=c.replace(/^\/\//,"/%2F")),a.push(c)}return void 0!==r.query&&(a.push("?"),a.push(r.query)),void 0!==r.fragment&&(a.push("#"),a.push(r.fragment)),a.join("")}function O(e,r){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},a={};return arguments[3]||(e=_(j(e,t),t),r=_(j(r,t),t)),!(t=t||{}).tolerant&&r.scheme?(a.scheme=r.scheme,a.userinfo=r.userinfo,a.host=r.host,a.port=r.port,a.path=D(r.path||""),a.query=r.query):(void 0!==r.userinfo||void 0!==r.host||void 0!==r.port?(a.userinfo=r.userinfo,a.host=r.host,a.port=r.port,a.path=D(r.path||""),a.query=r.query):(r.path?("/"===r.path.charAt(0)?a.path=D(r.path):(a.path=void 0===e.userinfo&&void 0===e.host&&void 0===e.port||e.path?e.path?e.path.slice(0,e.path.lastIndexOf("/")+1)+r.path:r.path:"/"+r.path,a.path=D(a.path)),a.query=r.query):(a.path=e.path,a.query=void 0!==r.query?r.query:e.query),a.userinfo=e.userinfo,a.host=e.host,a.port=e.port),a.scheme=e.scheme),a.fragment=r.fragment,a}function I(e,r){return e&&e.toString().replace(r&&r.iri?h.PCT_ENCODED:u.PCT_ENCODED,f)}var N={scheme:"http",domainHost:!0,parse:function(e){return e.host||(e.error=e.error||"HTTP URIs must have a host."),e},serialize:function(e){return e.port!==("https"!==String(e.scheme).toLowerCase()?80:443)&&""!==e.port||(e.port=void 0),e.path||(e.path="/"),e}},Q={scheme:"https",domainHost:N.domainHost,parse:N.parse,serialize:N.serialize},U={},V="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",H="[0-9A-Fa-f]",K=(Z(Z("%[EFef]"+H+"%"+H+H+"%"+H+H)+"|"+Z("%[89A-Fa-f]"+H+"%"+H+H)+"|"+Z("%"+H+H)),J("[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",'[\\"\\\\]')),M=new RegExp(V,"g"),B=new RegExp("(?:(?:%[EFef][0-9A-Fa-f]%[0-9A-Fa-f][0-9A-Fa-f]%[0-9A-Fa-f][0-9A-Fa-f])|(?:%[89A-Fa-f][0-9A-Fa-f]%[0-9A-Fa-f][0-9A-Fa-f])|(?:%[0-9A-Fa-f][0-9A-Fa-f]))","g"),G=new RegExp(J("[^]","[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]","[\\.]",'[\\"]',K),"g"),Y=new RegExp(J("[^]",V,"[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"),"g"),W=Y;function X(e){var r=f(e);return r.match(M)?r:e}var ee={scheme:"mailto",parse:function(e,r){var t=e,a=t.to=t.path?t.path.split(","):[];if(t.path=void 0,t.query){for(var s=!1,o={},i=t.query.split("&"),n=0,l=i.length;n<l;++n){var c=i[n].split("=");switch(c[0]){case"to":for(var u=c[1].split(","),h=0,d=u.length;h<d;++h)a.push(u[h]);break;case"subject":t.subject=I(c[1],r);break;case"body":t.body=I(c[1],r);break;default:s=!0,o[I(c[0],r)]=I(c[1],r)}}s&&(t.headers=o)}t.query=void 0;for(var f=0,p=a.length;f<p;++f){var m=a[f].split("@");if(m[0]=I(m[0]),r.unicodeSupport)m[1]=I(m[1],r).toLowerCase();else try{m[1]=v.toASCII(I(m[1],r).toLowerCase())}catch(e){t.error=t.error||"Email address's domain name can not be converted to ASCII via punycode: "+e}a[f]=m.join("@")}return t},serialize:function(e,r){var t,a=e,s=null!=(t=e.to)?t instanceof Array?t:"number"!=typeof t.length||t.split||t.setInterval||t.call?[t]:Array.prototype.slice.call(t):[];if(s){for(var o=0,i=s.length;o<i;++o){var n=String(s[o]),l=n.lastIndexOf("@"),c=n.slice(0,l).replace(B,X).replace(B,p).replace(G,m),u=n.slice(l+1);try{u=r.iri?v.toUnicode(u):v.toASCII(I(u,r).toLowerCase())}catch(e){a.error=a.error||"Email address's domain name can not be converted to "+(r.iri?"Unicode":"ASCII")+" via punycode: "+e}s[o]=c+"@"+u}a.path=s.join(",")}var h=e.headers=e.headers||{};e.subject&&(h.subject=e.subject),e.body&&(h.body=e.body);var d=[];for(var f in h)h[f]!==U[f]&&d.push(f.replace(B,X).replace(B,p).replace(Y,m)+"="+h[f].replace(B,X).replace(B,p).replace(W,m));return d.length&&(a.query=d.join("&")),a}},re=/^([^\:]+)\:(.*)/,te={scheme:"urn",parse:function(e,r){var t=e.path&&e.path.match(re),a=e;if(t){var s=r.scheme||a.scheme||"urn",o=t[1].toLowerCase(),i=t[2],n=d[s+":"+(r.nid||o)];a.nid=o,a.nss=i,a.path=void 0,n&&(a=n.parse(a,r))}else a.error=a.error||"URN can not be parsed.";return a},serialize:function(e,r){var t=e.nid,a=d[(r.scheme||e.scheme||"urn")+":"+(r.nid||t)];a&&(e=a.serialize(e,r));var s=e;return s.path=(t||r.nid)+":"+e.nss,s}},ae=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/,se={scheme:"urn:uuid",parse:function(e,r){var t=e;return t.uuid=t.nss,t.nss=void 0,r.tolerant||t.uuid&&t.uuid.match(ae)||(t.error=t.error||"UUID is not valid."),t},serialize:function(e){var r=e;return r.nss=(e.uuid||"").toLowerCase(),r}};d[N.scheme]=N,d[Q.scheme]=Q,d[ee.scheme]=ee,d[te.scheme]=te,d[se.scheme]=se,e.SCHEMES=d,e.pctEncChar=m,e.pctDecChars=f,e.parse=_,e.removeDotSegments=D,e.serialize=j,e.resolveComponents=O,e.resolve=function(e,r,t){var a=function(e,r){var t=e;if(r)for(var a in r)t[a]=r[a];return t}({scheme:"null"},t);return j(O(_(e,a),_(r,a),a,!0),a)},e.normalize=function(e,r){return"string"==typeof e?e=j(_(e,r),r):"object"===a(e)&&(e=_(j(e,r),r)),e},e.equal=function(e,r,t){return"string"==typeof e?e=j(_(e,t),t):"object"===a(e)&&(e=j(e,t)),"string"==typeof r?r=j(_(r,t),t):"object"===a(r)&&(r=j(r,t)),e===r},e.escapeComponent=function(e,r){return e&&e.toString().replace(r&&r.iri?h.ESCAPE:u.ESCAPE,m)},e.unescapeComponent=I,Object.defineProperty(e,"__esModule",{value:!0})}("object"==typeof t&&void 0!==r?t:a.URI=a.URI||{})},{}],ajv:[function(a,e,r){"use strict";var n=a("./compile"),d=a("./compile/resolve"),t=a("./cache"),f=a("./compile/schema_obj"),s=a("fast-json-stable-stringify"),o=a("./compile/formats"),i=a("./compile/rules"),l=a("./data"),c=a("./compile/util");(e.exports=y).prototype.validate=function(e,r){var t;if("string"==typeof e){if(!(t=this.getSchema(e)))throw new Error('no schema with key or ref "'+e+'"')}else{var a=this._addSchema(e);t=a.validate||this._compile(a)}var s=t(r);!0!==t.$async&&(this.errors=t.errors);return s},y.prototype.compile=function(e,r){var t=this._addSchema(e,void 0,r);return t.validate||this._compile(t)},y.prototype.addSchema=function(e,r,t,a){if(Array.isArray(e)){for(var s=0;s<e.length;s++)this.addSchema(e[s],void 0,t,a);return this}var o=this._getId(e);if(void 0!==o&&"string"!=typeof o)throw new Error("schema id must be string");return S(this,r=d.normalizeId(r||o)),this._schemas[r]=this._addSchema(e,t,a,!0),this},y.prototype.addMetaSchema=function(e,r,t){return this.addSchema(e,r,t,!0),this},y.prototype.validateSchema=function(e,r){var t=e.$schema;if(void 0!==t&&"string"!=typeof t)throw new Error("$schema must be a string");if(!(t=t||this._opts.defaultMeta||function(e){var r=e._opts.meta;return e._opts.defaultMeta="object"==typeof r?e._getId(r)||r:e.getSchema(p)?p:void 0,e._opts.defaultMeta}(this)))return this.logger.warn("meta-schema not available"),!(this.errors=null);var a=this.validate(t,e);if(!a&&r){var s="schema is invalid: "+this.errorsText();if("log"!=this._opts.validateSchema)throw new Error(s);this.logger.error(s)}return a},y.prototype.getSchema=function(e){var r=g(this,e);switch(typeof r){case"object":return r.validate||this._compile(r);case"string":return this.getSchema(r);case"undefined":return function(e,r){var t=d.schema.call(e,{schema:{}},r);if(t){var a=t.schema,s=t.root,o=t.baseId,i=n.call(e,a,s,void 0,o);return e._fragments[r]=new f({ref:r,fragment:!0,schema:a,root:s,baseId:o,validate:i}),i}}(this,e)}},y.prototype.removeSchema=function(e){if(e instanceof RegExp)return P(this,this._schemas,e),P(this,this._refs,e),this;switch(typeof e){case"undefined":return P(this,this._schemas),P(this,this._refs),this._cache.clear(),this;case"string":var r=g(this,e);return r&&this._cache.del(r.cacheKey),delete this._schemas[e],delete this._refs[e],this;case"object":var t=this._opts.serialize,a=t?t(e):e;this._cache.del(a);var s=this._getId(e);s&&(s=d.normalizeId(s),delete this._schemas[s],delete this._refs[s])}return this},y.prototype.addFormat=function(e,r){"string"==typeof r&&(r=new RegExp(r));return this._formats[e]=r,this},y.prototype.errorsText=function(e,r){if(!(e=e||this.errors))return"No errors";for(var t=void 0===(r=r||{}).separator?", ":r.separator,a=void 0===r.dataVar?"data":r.dataVar,s="",o=0;o<e.length;o++){var i=e[o];i&&(s+=a+i.dataPath+" "+i.message+t)}return s.slice(0,-t.length)},y.prototype._addSchema=function(e,r,t,a){if("object"!=typeof e&&"boolean"!=typeof e)throw new Error("schema should be object or boolean");var s=this._opts.serialize,o=s?s(e):e,i=this._cache.get(o);if(i)return i;a=a||!1!==this._opts.addUsedSchema;var n=d.normalizeId(this._getId(e));n&&a&&S(this,n);var l,c=!1!==this._opts.validateSchema&&!r;c&&!(l=n&&n==d.normalizeId(e.$schema))&&this.validateSchema(e,!0);var u=d.ids.call(this,e),h=new f({id:n,schema:e,localRefs:u,cacheKey:o,meta:t});"#"!=n[0]&&a&&(this._refs[n]=h);this._cache.put(o,h),c&&l&&this.validateSchema(e,!0);return h},y.prototype._compile=function(t,e){if(t.compiling)return(t.validate=s).schema=t.schema,s.errors=null,s.root=e||s,!0===t.schema.$async&&(s.$async=!0),s;var r,a;t.compiling=!0,t.meta&&(r=this._opts,this._opts=this._metaOpts);try{a=n.call(this,t.schema,e,t.localRefs)}catch(e){throw delete t.validate,e}finally{t.compiling=!1,t.meta&&(this._opts=r)}return t.validate=a,t.refs=a.refs,t.refVal=a.refVal,t.root=a.root,a;function s(){var e=t.validate,r=e.apply(this,arguments);return s.errors=e.errors,r}},y.prototype.compileAsync=a("./compile/async");var u=a("./keyword");y.prototype.addKeyword=u.add,y.prototype.getKeyword=u.get,y.prototype.removeKeyword=u.remove,y.prototype.validateKeyword=u.validate;var h=a("./compile/error_classes");y.ValidationError=h.Validation,y.MissingRefError=h.MissingRef,y.$dataMetaSchema=l;var p="http://json-schema.org/draft-07/schema",m=["removeAdditional","useDefaults","coerceTypes","strictDefaults"],v=["/properties"];function y(e){if(!(this instanceof y))return new y(e);e=this._opts=c.copy(e)||{},function(e){var r=e._opts.logger;if(!1===r)e.logger={log:_,warn:_,error:_};else{if(void 0===r&&(r=console),!("object"==typeof r&&r.log&&r.warn&&r.error))throw new Error("logger must implement log, warn and error methods");e.logger=r}}(this),this._schemas={},this._refs={},this._fragments={},this._formats=o(e.format),this._cache=e.cache||new t,this._loadingSchemas={},this._compilations=[],this.RULES=i(),this._getId=function(e){switch(e.schemaId){case"auto":return b;case"id":return E;default:return w}}(e),e.loopRequired=e.loopRequired||1/0,"property"==e.errorDataPath&&(e._errorDataPathProperty=!0),void 0===e.serialize&&(e.serialize=s),this._metaOpts=function(e){for(var r=c.copy(e._opts),t=0;t<m.length;t++)delete r[m[t]];return r}(this),e.formats&&function(e){for(var r in e._opts.formats){e.addFormat(r,e._opts.formats[r])}}(this),e.keywords&&function(e){for(var r in e._opts.keywords){e.addKeyword(r,e._opts.keywords[r])}}(this),function(e){var r;e._opts.$data&&(r=a("./refs/data.json"),e.addMetaSchema(r,r.$id,!0));if(!1===e._opts.meta)return;var t=a("./refs/json-schema-draft-07.json");e._opts.$data&&(t=l(t,v));e.addMetaSchema(t,p,!0),e._refs["http://json-schema.org/schema"]=p}(this),"object"==typeof e.meta&&this.addMetaSchema(e.meta),e.nullable&&this.addKeyword("nullable",{metaSchema:{type:"boolean"}}),function(e){var r=e._opts.schemas;if(!r)return;if(Array.isArray(r))e.addSchema(r);else for(var t in r)e.addSchema(r[t],t)}(this)}function g(e,r){return r=d.normalizeId(r),e._schemas[r]||e._refs[r]||e._fragments[r]}function P(e,r,t){for(var a in r){var s=r[a];s.meta||t&&!t.test(a)||(e._cache.del(s.cacheKey),delete r[a])}}function E(e){return e.$id&&this.logger.warn("schema $id ignored",e.$id),e.id}function w(e){return e.id&&this.logger.warn("schema id ignored",e.id),e.$id}function b(e){if(e.$id&&e.id&&e.$id!=e.id)throw new Error("schema $id is different from id");return e.$id||e.id}function S(e,r){if(e._schemas[r]||e._refs[r])throw new Error('schema with key or id "'+r+'" already exists')}function _(){}},{"./cache":1,"./compile":5,"./compile/async":2,"./compile/error_classes":3,"./compile/formats":4,"./compile/resolve":6,"./compile/rules":7,"./compile/schema_obj":8,"./compile/util":10,"./data":11,"./keyword":39,"./refs/data.json":40,"./refs/json-schema-draft-07.json":41,"fast-json-stable-stringify":43}]},{},[])("ajv")});
-//# sourceMappingURL=ajv.min.js.map
\ No newline at end of file
diff --git a/templetes/node_modules/ajv/dist/ajv.min.js.map b/templetes/node_modules/ajv/dist/ajv.min.js.map
deleted file mode 100644
index 8b5fe567..00000000
--- a/templetes/node_modules/ajv/dist/ajv.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["0"],"names":["f","exports","module","define","amd","window","global","self","this","Ajv","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","Cache","_cache","prototype","put","key","value","get","del","clear","2","MissingRefError","MissingRef","compileAsync","schema","meta","callback","_opts","loadSchema","undefined","loadMetaSchemaOf","then","schemaObj","_addSchema","validate","_compileAsync","v","sch","$schema","getSchema","$ref","Promise","resolve","_compile","loadMissingSchema","ref","missingSchema","added","missingRef","schemaPromise","_loadingSchemas","removePromise","addSchema","_refs","_schemas","./error_classes","3","baseId","message","url","normalizeId","fullPath","errorSubclass","Subclass","Object","create","constructor","Validation","errors","ajv","validation","./resolve","4","util","DATE","DAYS","TIME","HOSTNAME","URI","URITEMPLATE","URL","UUID","JSON_POINTER","JSON_POINTER_URI_FRAGMENT","RELATIVE_JSON_POINTER","formats","mode","copy","date","str","matches","match","year","month","day","time","full","hour","minute","second","fast","date-time","uri","uri-reference","uri-template","email","hostname","ipv4","ipv6","regex","uuid","json-pointer","json-pointer-uri-fragment","relative-json-pointer","dateTime","split","DATE_TIME_SEPARATOR","NOT_URI_FRAGMENT","test","Z_ANCHOR","RegExp","./util","5","errorClasses","stableStringify","validateGenerator","ucs2length","equal","ValidationError","checkCompiling","root","index","compIndex","compiling","_compilations","endCompiling","splice","patternCode","patterns","toQuotedString","defaultCode","refValCode","refVal","customRuleCode","vars","arr","statement","compile","localRefs","opts","refs","patternsHash","defaults","defaultsHash","customRules","compilation","callValidate","_formats","RULES","localCompile","cv","$async","sourceCode","source","result","apply","arguments","_schema","_root","isRoot","isTop","schemaPath","errSchemaPath","errorPath","resolveRef","usePattern","useDefault","useCustomRule","logger","processCode","makeValidate","Function","error","_refVal","refCode","refIndex","resolvedRef","rootRefId","addLocalRef","localSchema","inlineRef","inlineRefs","replaceLocalRef","removeLocalRef","refId","inline","regexStr","valueStr","rule","parentSchema","it","validateSchema","deps","definition","dependencies","every","keyword","hasOwnProperty","join","valid","errorsText","macro","../dotjs/validate","fast-deep-equal","fast-json-stable-stringify","6","SchemaObject","traverse","res","resolveSchema","parse","refPath","_getFullPath","getFullPath","_getId","keys","id","parsedRef","resolveUrl","getJsonPointer","ids","schemaId","baseIds","","fullPaths","allKeys","jsonPtr","rootSchema","parentJsonPtr","parentKeyword","keyIndex","escapeFragment","PREVENT_SCOPE_CHANGE","toHash","fragment","slice","parts","part","unescapeFragment","SIMPLE_INLINED","limit","checkNoRef","item","Array","isArray","countKeys","count","Infinity","normalize","serialize","TRAILING_SLASH_HASH","replace","./schema_obj","json-schema-traverse","uri-js","7","ruleModules","type","rules","maximum","minimum","properties","ALL","all","types","forEach","group","map","implKeywords","k","push","implements","$comment","keywords","concat","custom","../dotjs","8","obj","9","len","pos","charCodeAt","10","checkDataType","dataType","data","negate","EQUAL","AND","OK","NOT","to","checkDataTypes","dataTypes","array","object","null","number","integer","coerceToTypes","optionCoerceTypes","COERCE_TO_TYPES","getProperty","escapeQuotes","varOccurences","dataVar","varReplace","expr","cleanUpCode","out","EMPTY_ELSE","EMPTY_IF_NO_ELSE","EMPTY_IF_WITH_ELSE","finalCleanUpCode","async","ERRORS_REGEXP","REMOVE_ERRORS_ASYNC","RETURN_ASYNC","RETURN_DATA_ASYNC","REMOVE_ERRORS","RETURN_VALID","RETURN_TRUE","ROOTDATA_REGEXP","REMOVE_ROOTDATA","schemaHasRules","schemaHasRulesExcept","exceptKeyword","schemaUnknownRules","getPathExpr","currentPath","jsonPointers","isNumber","joinPaths","getPath","prop","path","escapeJsonPointer","getData","$data","lvl","paths","up","jsonPointer","segments","segment","unescapeJsonPointer","decodeURIComponent","encodeURIComponent","hash","IDENTIFIER","SINGLE_QUOTE","b","./ucs2length","11","KEYWORDS","metaSchema","keywordsJsonPointers","JSON","stringify","j","anyOf","12","$id","definitions","simpleTypes","statements","not","required","items","modifying","const","./refs/json-schema-draft-07.json","13","$keyword","$schemaValue","$lvl","level","$dataLvl","dataLevel","$schemaPath","$errSchemaPath","$breakOnError","allErrors","$isData","dataPathArr","$isMax","$exclusiveKeyword","$schemaExcl","$isDataExcl","$op","$notOp","$errorKeyword","$schemaValueExcl","$exclusive","$exclType","$exclIsNumber","$opStr","$opExpr","$$outStack","createErrors","messages","verbose","__err","pop","compositeRule","Math","14","15","unicode","16","17","$it","$closingBraces","$nextValid","$currentBaseId","$allSchemasEmpty","arr1","$sch","$i","l1","strictKeywords","18","$valid","$errs","$wasComposite","19","20","21","$idx","$dataNxt","$nextData","$nonEmptySchema","$passData","$code","22","$compile","$inline","$macro","$ruleValidate","$validateCode","$rule","$definition","$rDef","$validateSchema","$ruleErrs","$ruleErr","$asyncKeyword","passContext","$parentData","$parentDataProperty","def_callRuleValidate","def_customError","23","$schemaDeps","$propertyDeps","$ownProperties","ownProperties","$property","$deps","$currentErrorPath","$propertyKey","$useData","$prop","$propertyPath","$missingProperty","_errorDataPathProperty","arr2","i2","l2","24","$vSchema","25","$ruleType","format","$unknownFormats","unknownFormats","$allowUnknown","$format","$isObject","$formatType","warn","indexOf","$formatRef","26","$thenSch","$elseSch","$thenPresent","$elsePresent","$ifClause","27","allOf","contains","enum","if","maxItems","minItems","maxLength","minLength","maxProperties","minProperties","multipleOf","oneOf","pattern","propertyNames","uniqueItems","./_limit","./_limitItems","./_limitLength","./_limitProperties","./allOf","./anyOf","./comment","./const","./contains","./dependencies","./enum","./format","./if","./items","./multipleOf","./not","./oneOf","./pattern","./properties","./propertyNames","./ref","./required","./uniqueItems","./validate","28","$additionalItems","additionalItems","$currErrSchemaPath","29","multipleOfPrecision","30","$allErrorsOption","31","$prevValid","$passingSchemas","32","$regexp","33","$key","$dataProperties","$schemaKeys","$pProperties","patternProperties","$pPropertyKeys","$aProperties","additionalProperties","$someProperties","$noAdditional","$additionalIsSchema","$removeAdditional","removeAdditional","$checkAdditional","$required","loopRequired","$requiredHash","i1","$pProperty","$additionalProperty","$useDefaults","useDefaults","arr3","i3","l3","$hasDefault","default","arr4","i4","l4","34","$invalidName","35","$refCode","$refVal","$message","missingRefs","__callValidate","36","$propertySch","$loopRequired","37","$itemType","$typeIsArray","38","$refKeywords","$unknownKwd","$keywordsMsg","$top","rootId","strictDefaults","$defaultMsg","$closingBraces1","$closingBraces2","$typeSchema","nullable","extendRefs","coerceTypes","$coerceToTypes","$rulesGroup","$shouldUseGroup","$dataType","$coerced","$bracesCoercion","$type","arr5","i5","l5","$shouldUseRule","impl","$ruleImplementsSomeKeyword","39","definitionSchema","add","validateKeyword","_addRule","ruleGroup","rg","remove","throwError","_validateKeyword","./definition_schema","./dotjs/custom","40","description","41","title","schemaArray","nonNegativeInteger","nonNegativeIntegerDefault0","stringArray","readOnly","examples","exclusiveMinimum","exclusiveMaximum","contentMediaType","contentEncoding","else","42","flags","valueOf","toString","43","cmp","cycles","node","seen","toJSON","isFinite","TypeError","seenIndex","sort","44","cb","_traverse","pre","post","arrayKeywords","propsKeywords","skipKeywords","45","merge","_len","sets","_key","xl","x","subexp","typeOf","shift","toLowerCase","toUpperCase","buildExps","isIRI","ALPHA$$","DIGIT$$","HEXDIG$$","PCT_ENCODED$","SUB_DELIMS$$","RESERVED$$","IPRIVATE$$","UNRESERVED$$","SCHEME$","USERINFO$","DEC_OCTET_RELAXED$","IPV4ADDRESS$","H16$","LS32$","IPV6ADDRESS1$","IPV6ADDRESS2$","IPV6ADDRESS3$","IPV6ADDRESS4$","IPV6ADDRESS5$","IPV6ADDRESS6$","IPV6ADDRESS7$","IPV6ADDRESS8$","IPV6ADDRESS9$","IPV6ADDRESS$","ZONEID$","IPV6ADDRZ_RELAXED$","IPVFUTURE$","IP_LITERAL$","REG_NAME$","HOST$","PORT$","AUTHORITY$","PCHAR$","SEGMENT$","SEGMENT_NZ$","SEGMENT_NZ_NC$","PATH_ABEMPTY$","PATH_ABSOLUTE$","PATH_NOSCHEME$","PATH_ROOTLESS$","PATH_EMPTY$","QUERY$","FRAGMENT$","HIER_PART$","URI$","RELATIVE_PART$","RELATIVE$","NOT_SCHEME","NOT_USERINFO","NOT_HOST","NOT_PATH","NOT_PATH_NOSCHEME","NOT_QUERY","NOT_FRAGMENT","ESCAPE","UNRESERVED","OTHER_CHARS","PCT_ENCODED","IPV4ADDRESS","IPV6ADDRESS","URI_PROTOCOL","IRI_PROTOCOL","slicedToArray","Symbol","iterator","_arr","_n","_d","_e","_s","_i","next","done","err","sliceIterator","maxInt","regexPunycode","regexNonASCII","regexSeparators","overflow","not-basic","invalid-input","floor","stringFromCharCode","String","fromCharCode","error$1","RangeError","mapDomain","string","fn","ucs2decode","output","counter","extra","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","baseMinusTMin","base","decode","input","codePoint","inputLength","bias","basic","lastIndexOf","oldi","w","baseMinusT","fromCodePoint","encode","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","_currentValue2","return","basicLength","handledCPCount","m","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","currentValue","handledCPCountPlusOne","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","_currentValue","q","qMinusT","punycode","version","ucs2","from","toConsumableArray","toASCII","toUnicode","SCHEMES","pctEncChar","chr","pctDecChars","newStr","il","parseInt","substr","c2","_c","c3","_normalizeComponentEncoding","components","protocol","decodeUnreserved","decStr","scheme","userinfo","host","query","_stripLeadingZeros","_normalizeIPv4","address","_normalizeIPv6","_matches2","zone","_address$toLowerCase$","reverse","_address$toLowerCase$2","last","first","firstFields","lastFields","isLastFieldIPv4Address","fieldCount","lastFieldsStart","fields","longestZeroFields","reduce","acc","field","lastLongest","newHost","newFirst","newLast","URI_PARSE","NO_MATCH_IS_UNDEFINED","uriString","options","iri","reference","port","isNaN","schemeHandler","unicodeSupport","domainHost","RDS1","RDS2","RDS3","RDS5","removeDotSegments","im","s","uriTokens","authority","_","$1","$2","charAt","absolutePath","resolveComponents","relative","target","tolerant","unescapeComponent","handler","handler$1","O","VCHAR$$","NOT_LOCAL_PART","NOT_HFNAME","NOT_HFVALUE","handler$2","mailtoComponents","unknownHeaders","headers","hfields","hfield","toAddrs","_x","_xl","subject","body","_x2","_xl2","addr","setInterval","toAddr","atIdx","localPart","domain","name","URN_PARSE","handler$3","urnComponents","nid","nss","uriComponents","handler$4","uuidComponents","baseURI","relativeURI","schemelessOptions","assign","uriA","uriB","escapeComponent","defineProperty","factory","compileSchema","$dataMetaSchema","schemaKeyRef","_meta","_skipValidation","checkUnique","addMetaSchema","skipValidation","throwOrLogError","defaultMeta","META_SCHEMA_ID","keyRef","_getSchemaObj","_fragments","_getSchemaFragment","removeSchema","_removeAllSchemas","cacheKey","addFormat","separator","text","dataPath","shouldAddSchema","cached","addUsedSchema","recursiveMeta","willValidate","currentOpts","_metaOpts","_validate","customKeyword","addKeyword","getKeyword","removeKeyword","META_IGNORE_OPTIONS","META_SUPPORT_DATA","log","noop","console","setLogger","cache","_get$IdOrId","_get$Id","chooseGetId","errorDataPath","metaOpts","getMetaSchemaOptions","addInitialFormats","addInitialKeywords","$dataSchema","addDefaultMetaSchema","optsSchemas","schemas","addInitialSchemas","./cache","./compile","./compile/async","./compile/error_classes","./compile/formats","./compile/resolve","./compile/rules","./compile/schema_obj","./compile/util","./data","./keyword","./refs/data.json"],"mappings":"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","file":"ajv.min.js"}
\ No newline at end of file
diff --git a/templetes/node_modules/ajv/lib/ajv.d.ts b/templetes/node_modules/ajv/lib/ajv.d.ts
deleted file mode 100644
index cb600e16..00000000
--- a/templetes/node_modules/ajv/lib/ajv.d.ts
+++ /dev/null
@@ -1,395 +0,0 @@
-declare var ajv: {
-  (options?: ajv.Options): ajv.Ajv;
-  new(options?: ajv.Options): ajv.Ajv;
-  ValidationError: typeof AjvErrors.ValidationError;
-  MissingRefError: typeof AjvErrors.MissingRefError;
-  $dataMetaSchema: object;
-}
-
-declare namespace AjvErrors {
-  class ValidationError extends Error {
-    constructor(errors: Array<ajv.ErrorObject>);
-
-    message: string;
-    errors: Array<ajv.ErrorObject>;
-    ajv: true;
-    validation: true;
-  }
-
-  class MissingRefError extends Error {
-    constructor(baseId: string, ref: string, message?: string);
-    static message: (baseId: string, ref: string) => string;
-
-    message: string;
-    missingRef: string;
-    missingSchema: string;
-  }
-}
-
-declare namespace ajv {
-  type ValidationError = AjvErrors.ValidationError;
-
-  type MissingRefError = AjvErrors.MissingRefError;
-
-  interface Ajv {
-    /**
-    * Validate data using schema
-    * Schema will be compiled and cached (using serialized JSON as key, [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize by default).
-    * @param  {string|object|Boolean} schemaKeyRef key, ref or schema object
-    * @param  {Any} data to be validated
-    * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).
-    */
-    validate(schemaKeyRef: object | string | boolean, data: any): boolean | PromiseLike<any>;
-    /**
-    * Create validating function for passed schema.
-    * @param  {object|Boolean} schema schema object
-    * @return {Function} validating function
-    */
-    compile(schema: object | boolean): ValidateFunction;
-    /**
-    * Creates validating function for passed schema with asynchronous loading of missing schemas.
-    * `loadSchema` option should be a function that accepts schema uri and node-style callback.
-    * @this  Ajv
-    * @param {object|Boolean} schema schema object
-    * @param {Boolean} meta optional true to compile meta-schema; this parameter can be skipped
-    * @param {Function} callback optional node-style callback, it is always called with 2 parameters: error (or null) and validating function.
-    * @return {PromiseLike<ValidateFunction>} validating function
-    */
-    compileAsync(schema: object | boolean, meta?: Boolean, callback?: (err: Error, validate: ValidateFunction) => any): PromiseLike<ValidateFunction>;
-    /**
-    * Adds schema to the instance.
-    * @param {object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.
-    * @param {string} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.
-    * @return {Ajv} this for method chaining
-    */
-    addSchema(schema: Array<object> | object, key?: string): Ajv;
-    /**
-    * Add schema that will be used to validate other schemas
-    * options in META_IGNORE_OPTIONS are alway set to false
-    * @param {object} schema schema object
-    * @param {string} key optional schema key
-    * @return {Ajv} this for method chaining
-    */
-    addMetaSchema(schema: object, key?: string): Ajv;
-    /**
-    * Validate schema
-    * @param {object|Boolean} schema schema to validate
-    * @return {Boolean} true if schema is valid
-    */
-    validateSchema(schema: object | boolean): boolean;
-    /**
-    * Get compiled schema from the instance by `key` or `ref`.
-    * @param  {string} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id).
-    * @return {Function} schema validating function (with property `schema`). Returns undefined if keyRef can't be resolved to an existing schema.
-    */
-    getSchema(keyRef: string): ValidateFunction | undefined;
-    /**
-    * Remove cached schema(s).
-    * If no parameter is passed all schemas but meta-schemas are removed.
-    * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.
-    * Even if schema is referenced by other schemas it still can be removed as other schemas have local references.
-    * @param  {string|object|RegExp|Boolean} schemaKeyRef key, ref, pattern to match key/ref or schema object
-    * @return {Ajv} this for method chaining
-    */
-    removeSchema(schemaKeyRef?: object | string | RegExp | boolean): Ajv;
-    /**
-    * Add custom format
-    * @param {string} name format name
-    * @param {string|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid)
-    * @return {Ajv} this for method chaining
-    */
-    addFormat(name: string, format: FormatValidator | FormatDefinition): Ajv;
-    /**
-    * Define custom keyword
-    * @this  Ajv
-    * @param {string} keyword custom keyword, should be a valid identifier, should be different from all standard, custom and macro keywords.
-    * @param {object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`.
-    * @return {Ajv} this for method chaining
-    */
-    addKeyword(keyword: string, definition: KeywordDefinition): Ajv;
-    /**
-    * Get keyword definition
-    * @this  Ajv
-    * @param {string} keyword pre-defined or custom keyword.
-    * @return {object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise.
-    */
-    getKeyword(keyword: string): object | boolean;
-    /**
-    * Remove keyword
-    * @this  Ajv
-    * @param {string} keyword pre-defined or custom keyword.
-    * @return {Ajv} this for method chaining
-    */
-    removeKeyword(keyword: string): Ajv;
-    /**
-    * Validate keyword
-    * @this  Ajv
-    * @param {object} definition keyword definition object
-    * @param {boolean} throwError true to throw exception if definition is invalid
-    * @return {boolean} validation result
-    */
-    validateKeyword(definition: KeywordDefinition, throwError: boolean): boolean;
-    /**
-    * Convert array of error message objects to string
-    * @param  {Array<object>} errors optional array of validation errors, if not passed errors from the instance are used.
-    * @param  {object} options optional options with properties `separator` and `dataVar`.
-    * @return {string} human readable string with all errors descriptions
-    */
-    errorsText(errors?: Array<ErrorObject> | null, options?: ErrorsTextOptions): string;
-    errors?: Array<ErrorObject> | null;
-  }
-
-  interface CustomLogger {
-    log(...args: any[]): any;
-    warn(...args: any[]): any;
-    error(...args: any[]): any;
-  }
-
-  interface ValidateFunction {
-    (
-      data: any,
-      dataPath?: string,
-      parentData?: object | Array<any>,
-      parentDataProperty?: string | number,
-      rootData?: object | Array<any>
-    ): boolean | PromiseLike<any>;
-    schema?: object | boolean;
-    errors?: null | Array<ErrorObject>;
-    refs?: object;
-    refVal?: Array<any>;
-    root?: ValidateFunction | object;
-    $async?: true;
-    source?: object;
-  }
-
-  interface Options {
-    $data?: boolean;
-    allErrors?: boolean;
-    verbose?: boolean;
-    jsonPointers?: boolean;
-    uniqueItems?: boolean;
-    unicode?: boolean;
-    format?: false | string;
-    formats?: object;
-    keywords?: object;
-    unknownFormats?: true | string[] | 'ignore';
-    schemas?: Array<object> | object;
-    schemaId?: '$id' | 'id' | 'auto';
-    missingRefs?: true | 'ignore' | 'fail';
-    extendRefs?: true | 'ignore' | 'fail';
-    loadSchema?: (uri: string, cb?: (err: Error, schema: object) => void) => PromiseLike<object | boolean>;
-    removeAdditional?: boolean | 'all' | 'failing';
-    useDefaults?: boolean | 'empty' | 'shared';
-    coerceTypes?: boolean | 'array';
-    strictDefaults?: boolean | 'log';
-    strictKeywords?: boolean | 'log';
-    async?: boolean | string;
-    transpile?: string | ((code: string) => string);
-    meta?: boolean | object;
-    validateSchema?: boolean | 'log';
-    addUsedSchema?: boolean;
-    inlineRefs?: boolean | number;
-    passContext?: boolean;
-    loopRequired?: number;
-    ownProperties?: boolean;
-    multipleOfPrecision?: boolean | number;
-    errorDataPath?: string,
-    messages?: boolean;
-    sourceCode?: boolean;
-    processCode?: (code: string) => string;
-    cache?: object;
-    logger?: CustomLogger | false;
-    nullable?: boolean;
-    serialize?: ((schema: object | boolean) => any) | false;
-  }
-
-  type FormatValidator = string | RegExp | ((data: string) => boolean | PromiseLike<any>);
-  type NumberFormatValidator = ((data: number) => boolean | PromiseLike<any>);
-
-  interface NumberFormatDefinition {
-    type: "number",
-    validate: NumberFormatValidator;
-    compare?: (data1: number, data2: number) => number;
-    async?: boolean;
-  }
-
-  interface StringFormatDefinition {
-    type?: "string",
-    validate: FormatValidator;
-    compare?: (data1: string, data2: string) => number;
-    async?: boolean;
-  }
-
-  type FormatDefinition = NumberFormatDefinition | StringFormatDefinition;
-
-  interface KeywordDefinition {
-    type?: string | Array<string>;
-    async?: boolean;
-    $data?: boolean;
-    errors?: boolean | string;
-    metaSchema?: object;
-    // schema: false makes validate not to expect schema (ValidateFunction)
-    schema?: boolean;
-    statements?: boolean;
-    dependencies?: Array<string>;
-    modifying?: boolean;
-    valid?: boolean;
-    // one and only one of the following properties should be present
-    validate?: SchemaValidateFunction | ValidateFunction;
-    compile?: (schema: any, parentSchema: object, it: CompilationContext) => ValidateFunction;
-    macro?: (schema: any, parentSchema: object, it: CompilationContext) => object | boolean;
-    inline?: (it: CompilationContext, keyword: string, schema: any, parentSchema: object) => string;
-  }
-
-  interface CompilationContext {
-    level: number;
-    dataLevel: number;
-    dataPathArr: string[];
-    schema: any;
-    schemaPath: string;
-    baseId: string;
-    async: boolean;
-    opts: Options;
-    formats: {
-      [index: string]: FormatDefinition | undefined;
-    };
-    keywords: {
-      [index: string]: KeywordDefinition | undefined;
-    };
-    compositeRule: boolean;
-    validate: (schema: object) => boolean;
-    util: {
-      copy(obj: any, target?: any): any;
-      toHash(source: string[]): { [index: string]: true | undefined };
-      equal(obj: any, target: any): boolean;
-      getProperty(str: string): string;
-      schemaHasRules(schema: object, rules: any): string;
-      escapeQuotes(str: string): string;
-      toQuotedString(str: string): string;
-      getData(jsonPointer: string, dataLevel: number, paths: string[]): string;
-      escapeJsonPointer(str: string): string;
-      unescapeJsonPointer(str: string): string;
-      escapeFragment(str: string): string;
-      unescapeFragment(str: string): string;
-    };
-    self: Ajv;
-  }
-
-  interface SchemaValidateFunction {
-    (
-      schema: any,
-      data: any,
-      parentSchema?: object,
-      dataPath?: string,
-      parentData?: object | Array<any>,
-      parentDataProperty?: string | number,
-      rootData?: object | Array<any>
-    ): boolean | PromiseLike<any>;
-    errors?: Array<ErrorObject>;
-  }
-
-  interface ErrorsTextOptions {
-    separator?: string;
-    dataVar?: string;
-  }
-
-  interface ErrorObject {
-    keyword: string;
-    dataPath: string;
-    schemaPath: string;
-    params: ErrorParameters;
-    // Added to validation errors of propertyNames keyword schema
-    propertyName?: string;
-    // Excluded if messages set to false.
-    message?: string;
-    // These are added with the `verbose` option.
-    schema?: any;
-    parentSchema?: object;
-    data?: any;
-  }
-
-  type ErrorParameters = RefParams | LimitParams | AdditionalPropertiesParams |
-    DependenciesParams | FormatParams | ComparisonParams |
-    MultipleOfParams | PatternParams | RequiredParams |
-    TypeParams | UniqueItemsParams | CustomParams |
-    PatternRequiredParams | PropertyNamesParams |
-    IfParams | SwitchParams | NoParams | EnumParams;
-
-  interface RefParams {
-    ref: string;
-  }
-
-  interface LimitParams {
-    limit: number;
-  }
-
-  interface AdditionalPropertiesParams {
-    additionalProperty: string;
-  }
-
-  interface DependenciesParams {
-    property: string;
-    missingProperty: string;
-    depsCount: number;
-    deps: string;
-  }
-
-  interface FormatParams {
-    format: string
-  }
-
-  interface ComparisonParams {
-    comparison: string;
-    limit: number | string;
-    exclusive: boolean;
-  }
-
-  interface MultipleOfParams {
-    multipleOf: number;
-  }
-
-  interface PatternParams {
-    pattern: string;
-  }
-
-  interface RequiredParams {
-    missingProperty: string;
-  }
-
-  interface TypeParams {
-    type: string;
-  }
-
-  interface UniqueItemsParams {
-    i: number;
-    j: number;
-  }
-
-  interface CustomParams {
-    keyword: string;
-  }
-
-  interface PatternRequiredParams {
-    missingPattern: string;
-  }
-
-  interface PropertyNamesParams {
-    propertyName: string;
-  }
-
-  interface IfParams {
-    failingKeyword: string;
-  }
-
-  interface SwitchParams {
-    caseIndex: number;
-  }
-
-  interface NoParams { }
-
-  interface EnumParams {
-    allowedValues: Array<any>;
-  }
-}
-
-export = ajv;
diff --git a/templetes/node_modules/ajv/lib/ajv.js b/templetes/node_modules/ajv/lib/ajv.js
deleted file mode 100644
index 06a45b65..00000000
--- a/templetes/node_modules/ajv/lib/ajv.js
+++ /dev/null
@@ -1,506 +0,0 @@
-'use strict';
-
-var compileSchema = require('./compile')
-  , resolve = require('./compile/resolve')
-  , Cache = require('./cache')
-  , SchemaObject = require('./compile/schema_obj')
-  , stableStringify = require('fast-json-stable-stringify')
-  , formats = require('./compile/formats')
-  , rules = require('./compile/rules')
-  , $dataMetaSchema = require('./data')
-  , util = require('./compile/util');
-
-module.exports = Ajv;
-
-Ajv.prototype.validate = validate;
-Ajv.prototype.compile = compile;
-Ajv.prototype.addSchema = addSchema;
-Ajv.prototype.addMetaSchema = addMetaSchema;
-Ajv.prototype.validateSchema = validateSchema;
-Ajv.prototype.getSchema = getSchema;
-Ajv.prototype.removeSchema = removeSchema;
-Ajv.prototype.addFormat = addFormat;
-Ajv.prototype.errorsText = errorsText;
-
-Ajv.prototype._addSchema = _addSchema;
-Ajv.prototype._compile = _compile;
-
-Ajv.prototype.compileAsync = require('./compile/async');
-var customKeyword = require('./keyword');
-Ajv.prototype.addKeyword = customKeyword.add;
-Ajv.prototype.getKeyword = customKeyword.get;
-Ajv.prototype.removeKeyword = customKeyword.remove;
-Ajv.prototype.validateKeyword = customKeyword.validate;
-
-var errorClasses = require('./compile/error_classes');
-Ajv.ValidationError = errorClasses.Validation;
-Ajv.MissingRefError = errorClasses.MissingRef;
-Ajv.$dataMetaSchema = $dataMetaSchema;
-
-var META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema';
-
-var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'strictDefaults' ];
-var META_SUPPORT_DATA = ['/properties'];
-
-/**
- * Creates validator instance.
- * Usage: `Ajv(opts)`
- * @param {Object} opts optional options
- * @return {Object} ajv instance
- */
-function Ajv(opts) {
-  if (!(this instanceof Ajv)) return new Ajv(opts);
-  opts = this._opts = util.copy(opts) || {};
-  setLogger(this);
-  this._schemas = {};
-  this._refs = {};
-  this._fragments = {};
-  this._formats = formats(opts.format);
-
-  this._cache = opts.cache || new Cache;
-  this._loadingSchemas = {};
-  this._compilations = [];
-  this.RULES = rules();
-  this._getId = chooseGetId(opts);
-
-  opts.loopRequired = opts.loopRequired || Infinity;
-  if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true;
-  if (opts.serialize === undefined) opts.serialize = stableStringify;
-  this._metaOpts = getMetaSchemaOptions(this);
-
-  if (opts.formats) addInitialFormats(this);
-  if (opts.keywords) addInitialKeywords(this);
-  addDefaultMetaSchema(this);
-  if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta);
-  if (opts.nullable) this.addKeyword('nullable', {metaSchema: {type: 'boolean'}});
-  addInitialSchemas(this);
-}
-
-
-
-/**
- * Validate data using schema
- * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize.
- * @this   Ajv
- * @param  {String|Object} schemaKeyRef key, ref or schema object
- * @param  {Any} data to be validated
- * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).
- */
-function validate(schemaKeyRef, data) {
-  var v;
-  if (typeof schemaKeyRef == 'string') {
-    v = this.getSchema(schemaKeyRef);
-    if (!v) throw new Error('no schema with key or ref "' + schemaKeyRef + '"');
-  } else {
-    var schemaObj = this._addSchema(schemaKeyRef);
-    v = schemaObj.validate || this._compile(schemaObj);
-  }
-
-  var valid = v(data);
-  if (v.$async !== true) this.errors = v.errors;
-  return valid;
-}
-
-
-/**
- * Create validating function for passed schema.
- * @this   Ajv
- * @param  {Object} schema schema object
- * @param  {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords.
- * @return {Function} validating function
- */
-function compile(schema, _meta) {
-  var schemaObj = this._addSchema(schema, undefined, _meta);
-  return schemaObj.validate || this._compile(schemaObj);
-}
-
-
-/**
- * Adds schema to the instance.
- * @this   Ajv
- * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.
- * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.
- * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.
- * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.
- * @return {Ajv} this for method chaining
- */
-function addSchema(schema, key, _skipValidation, _meta) {
-  if (Array.isArray(schema)){
-    for (var i=0; i<schema.length; i++) this.addSchema(schema[i], undefined, _skipValidation, _meta);
-    return this;
-  }
-  var id = this._getId(schema);
-  if (id !== undefined && typeof id != 'string')
-    throw new Error('schema id must be string');
-  key = resolve.normalizeId(key || id);
-  checkUnique(this, key);
-  this._schemas[key] = this._addSchema(schema, _skipValidation, _meta, true);
-  return this;
-}
-
-
-/**
- * Add schema that will be used to validate other schemas
- * options in META_IGNORE_OPTIONS are alway set to false
- * @this   Ajv
- * @param {Object} schema schema object
- * @param {String} key optional schema key
- * @param {Boolean} skipValidation true to skip schema validation, can be used to override validateSchema option for meta-schema
- * @return {Ajv} this for method chaining
- */
-function addMetaSchema(schema, key, skipValidation) {
-  this.addSchema(schema, key, skipValidation, true);
-  return this;
-}
-
-
-/**
- * Validate schema
- * @this   Ajv
- * @param {Object} schema schema to validate
- * @param {Boolean} throwOrLogError pass true to throw (or log) an error if invalid
- * @return {Boolean} true if schema is valid
- */
-function validateSchema(schema, throwOrLogError) {
-  var $schema = schema.$schema;
-  if ($schema !== undefined && typeof $schema != 'string')
-    throw new Error('$schema must be a string');
-  $schema = $schema || this._opts.defaultMeta || defaultMeta(this);
-  if (!$schema) {
-    this.logger.warn('meta-schema not available');
-    this.errors = null;
-    return true;
-  }
-  var valid = this.validate($schema, schema);
-  if (!valid && throwOrLogError) {
-    var message = 'schema is invalid: ' + this.errorsText();
-    if (this._opts.validateSchema == 'log') this.logger.error(message);
-    else throw new Error(message);
-  }
-  return valid;
-}
-
-
-function defaultMeta(self) {
-  var meta = self._opts.meta;
-  self._opts.defaultMeta = typeof meta == 'object'
-                            ? self._getId(meta) || meta
-                            : self.getSchema(META_SCHEMA_ID)
-                              ? META_SCHEMA_ID
-                              : undefined;
-  return self._opts.defaultMeta;
-}
-
-
-/**
- * Get compiled schema from the instance by `key` or `ref`.
- * @this   Ajv
- * @param  {String} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id).
- * @return {Function} schema validating function (with property `schema`).
- */
-function getSchema(keyRef) {
-  var schemaObj = _getSchemaObj(this, keyRef);
-  switch (typeof schemaObj) {
-    case 'object': return schemaObj.validate || this._compile(schemaObj);
-    case 'string': return this.getSchema(schemaObj);
-    case 'undefined': return _getSchemaFragment(this, keyRef);
-  }
-}
-
-
-function _getSchemaFragment(self, ref) {
-  var res = resolve.schema.call(self, { schema: {} }, ref);
-  if (res) {
-    var schema = res.schema
-      , root = res.root
-      , baseId = res.baseId;
-    var v = compileSchema.call(self, schema, root, undefined, baseId);
-    self._fragments[ref] = new SchemaObject({
-      ref: ref,
-      fragment: true,
-      schema: schema,
-      root: root,
-      baseId: baseId,
-      validate: v
-    });
-    return v;
-  }
-}
-
-
-function _getSchemaObj(self, keyRef) {
-  keyRef = resolve.normalizeId(keyRef);
-  return self._schemas[keyRef] || self._refs[keyRef] || self._fragments[keyRef];
-}
-
-
-/**
- * Remove cached schema(s).
- * If no parameter is passed all schemas but meta-schemas are removed.
- * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.
- * Even if schema is referenced by other schemas it still can be removed as other schemas have local references.
- * @this   Ajv
- * @param  {String|Object|RegExp} schemaKeyRef key, ref, pattern to match key/ref or schema object
- * @return {Ajv} this for method chaining
- */
-function removeSchema(schemaKeyRef) {
-  if (schemaKeyRef instanceof RegExp) {
-    _removeAllSchemas(this, this._schemas, schemaKeyRef);
-    _removeAllSchemas(this, this._refs, schemaKeyRef);
-    return this;
-  }
-  switch (typeof schemaKeyRef) {
-    case 'undefined':
-      _removeAllSchemas(this, this._schemas);
-      _removeAllSchemas(this, this._refs);
-      this._cache.clear();
-      return this;
-    case 'string':
-      var schemaObj = _getSchemaObj(this, schemaKeyRef);
-      if (schemaObj) this._cache.del(schemaObj.cacheKey);
-      delete this._schemas[schemaKeyRef];
-      delete this._refs[schemaKeyRef];
-      return this;
-    case 'object':
-      var serialize = this._opts.serialize;
-      var cacheKey = serialize ? serialize(schemaKeyRef) : schemaKeyRef;
-      this._cache.del(cacheKey);
-      var id = this._getId(schemaKeyRef);
-      if (id) {
-        id = resolve.normalizeId(id);
-        delete this._schemas[id];
-        delete this._refs[id];
-      }
-  }
-  return this;
-}
-
-
-function _removeAllSchemas(self, schemas, regex) {
-  for (var keyRef in schemas) {
-    var schemaObj = schemas[keyRef];
-    if (!schemaObj.meta && (!regex || regex.test(keyRef))) {
-      self._cache.del(schemaObj.cacheKey);
-      delete schemas[keyRef];
-    }
-  }
-}
-
-
-/* @this   Ajv */
-function _addSchema(schema, skipValidation, meta, shouldAddSchema) {
-  if (typeof schema != 'object' && typeof schema != 'boolean')
-    throw new Error('schema should be object or boolean');
-  var serialize = this._opts.serialize;
-  var cacheKey = serialize ? serialize(schema) : schema;
-  var cached = this._cache.get(cacheKey);
-  if (cached) return cached;
-
-  shouldAddSchema = shouldAddSchema || this._opts.addUsedSchema !== false;
-
-  var id = resolve.normalizeId(this._getId(schema));
-  if (id && shouldAddSchema) checkUnique(this, id);
-
-  var willValidate = this._opts.validateSchema !== false && !skipValidation;
-  var recursiveMeta;
-  if (willValidate && !(recursiveMeta = id && id == resolve.normalizeId(schema.$schema)))
-    this.validateSchema(schema, true);
-
-  var localRefs = resolve.ids.call(this, schema);
-
-  var schemaObj = new SchemaObject({
-    id: id,
-    schema: schema,
-    localRefs: localRefs,
-    cacheKey: cacheKey,
-    meta: meta
-  });
-
-  if (id[0] != '#' && shouldAddSchema) this._refs[id] = schemaObj;
-  this._cache.put(cacheKey, schemaObj);
-
-  if (willValidate && recursiveMeta) this.validateSchema(schema, true);
-
-  return schemaObj;
-}
-
-
-/* @this   Ajv */
-function _compile(schemaObj, root) {
-  if (schemaObj.compiling) {
-    schemaObj.validate = callValidate;
-    callValidate.schema = schemaObj.schema;
-    callValidate.errors = null;
-    callValidate.root = root ? root : callValidate;
-    if (schemaObj.schema.$async === true)
-      callValidate.$async = true;
-    return callValidate;
-  }
-  schemaObj.compiling = true;
-
-  var currentOpts;
-  if (schemaObj.meta) {
-    currentOpts = this._opts;
-    this._opts = this._metaOpts;
-  }
-
-  var v;
-  try { v = compileSchema.call(this, schemaObj.schema, root, schemaObj.localRefs); }
-  catch(e) {
-    delete schemaObj.validate;
-    throw e;
-  }
-  finally {
-    schemaObj.compiling = false;
-    if (schemaObj.meta) this._opts = currentOpts;
-  }
-
-  schemaObj.validate = v;
-  schemaObj.refs = v.refs;
-  schemaObj.refVal = v.refVal;
-  schemaObj.root = v.root;
-  return v;
-
-
-  /* @this   {*} - custom context, see passContext option */
-  function callValidate() {
-    /* jshint validthis: true */
-    var _validate = schemaObj.validate;
-    var result = _validate.apply(this, arguments);
-    callValidate.errors = _validate.errors;
-    return result;
-  }
-}
-
-
-function chooseGetId(opts) {
-  switch (opts.schemaId) {
-    case 'auto': return _get$IdOrId;
-    case 'id': return _getId;
-    default: return _get$Id;
-  }
-}
-
-/* @this   Ajv */
-function _getId(schema) {
-  if (schema.$id) this.logger.warn('schema $id ignored', schema.$id);
-  return schema.id;
-}
-
-/* @this   Ajv */
-function _get$Id(schema) {
-  if (schema.id) this.logger.warn('schema id ignored', schema.id);
-  return schema.$id;
-}
-
-
-function _get$IdOrId(schema) {
-  if (schema.$id && schema.id && schema.$id != schema.id)
-    throw new Error('schema $id is different from id');
-  return schema.$id || schema.id;
-}
-
-
-/**
- * Convert array of error message objects to string
- * @this   Ajv
- * @param  {Array<Object>} errors optional array of validation errors, if not passed errors from the instance are used.
- * @param  {Object} options optional options with properties `separator` and `dataVar`.
- * @return {String} human readable string with all errors descriptions
- */
-function errorsText(errors, options) {
-  errors = errors || this.errors;
-  if (!errors) return 'No errors';
-  options = options || {};
-  var separator = options.separator === undefined ? ', ' : options.separator;
-  var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;
-
-  var text = '';
-  for (var i=0; i<errors.length; i++) {
-    var e = errors[i];
-    if (e) text += dataVar + e.dataPath + ' ' + e.message + separator;
-  }
-  return text.slice(0, -separator.length);
-}
-
-
-/**
- * Add custom format
- * @this   Ajv
- * @param {String} name format name
- * @param {String|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid)
- * @return {Ajv} this for method chaining
- */
-function addFormat(name, format) {
-  if (typeof format == 'string') format = new RegExp(format);
-  this._formats[name] = format;
-  return this;
-}
-
-
-function addDefaultMetaSchema(self) {
-  var $dataSchema;
-  if (self._opts.$data) {
-    $dataSchema = require('./refs/data.json');
-    self.addMetaSchema($dataSchema, $dataSchema.$id, true);
-  }
-  if (self._opts.meta === false) return;
-  var metaSchema = require('./refs/json-schema-draft-07.json');
-  if (self._opts.$data) metaSchema = $dataMetaSchema(metaSchema, META_SUPPORT_DATA);
-  self.addMetaSchema(metaSchema, META_SCHEMA_ID, true);
-  self._refs['http://json-schema.org/schema'] = META_SCHEMA_ID;
-}
-
-
-function addInitialSchemas(self) {
-  var optsSchemas = self._opts.schemas;
-  if (!optsSchemas) return;
-  if (Array.isArray(optsSchemas)) self.addSchema(optsSchemas);
-  else for (var key in optsSchemas) self.addSchema(optsSchemas[key], key);
-}
-
-
-function addInitialFormats(self) {
-  for (var name in self._opts.formats) {
-    var format = self._opts.formats[name];
-    self.addFormat(name, format);
-  }
-}
-
-
-function addInitialKeywords(self) {
-  for (var name in self._opts.keywords) {
-    var keyword = self._opts.keywords[name];
-    self.addKeyword(name, keyword);
-  }
-}
-
-
-function checkUnique(self, id) {
-  if (self._schemas[id] || self._refs[id])
-    throw new Error('schema with key or id "' + id + '" already exists');
-}
-
-
-function getMetaSchemaOptions(self) {
-  var metaOpts = util.copy(self._opts);
-  for (var i=0; i<META_IGNORE_OPTIONS.length; i++)
-    delete metaOpts[META_IGNORE_OPTIONS[i]];
-  return metaOpts;
-}
-
-
-function setLogger(self) {
-  var logger = self._opts.logger;
-  if (logger === false) {
-    self.logger = {log: noop, warn: noop, error: noop};
-  } else {
-    if (logger === undefined) logger = console;
-    if (!(typeof logger == 'object' && logger.log && logger.warn && logger.error))
-      throw new Error('logger must implement log, warn and error methods');
-    self.logger = logger;
-  }
-}
-
-
-function noop() {}
diff --git a/templetes/node_modules/ajv/lib/dot/allOf.jst b/templetes/node_modules/ajv/lib/dot/allOf.jst
deleted file mode 100644
index 4c283631..00000000
--- a/templetes/node_modules/ajv/lib/dot/allOf.jst
+++ /dev/null
@@ -1,34 +0,0 @@
-{{# def.definitions }}
-{{# def.errors }}
-{{# def.setupKeyword }}
-{{# def.setupNextLevel }}
-
-{{
-  var $currentBaseId = $it.baseId
-    , $allSchemasEmpty = true;
-}}
-
-{{~ $schema:$sch:$i }}
-  {{? {{# def.nonEmptySchema:$sch }} }}
-    {{
-      $allSchemasEmpty = false;
-      $it.schema = $sch;
-      $it.schemaPath = $schemaPath + '[' + $i + ']';
-      $it.errSchemaPath = $errSchemaPath + '/' + $i;
-    }}
-
-    {{# def.insertSubschemaCode }}
-
-    {{# def.ifResultValid }}
-  {{?}}
-{{~}}
-
-{{? $breakOnError }}
-  {{? $allSchemasEmpty }}
-    if (true) {
-  {{??}}
-    {{= $closingBraces.slice(0,-1) }}
-  {{?}}
-{{?}}
-
-{{# def.cleanUp }}
diff --git a/templetes/node_modules/ajv/lib/dotjs/allOf.js b/templetes/node_modules/ajv/lib/dotjs/allOf.js
deleted file mode 100644
index 4bad914d..00000000
--- a/templetes/node_modules/ajv/lib/dotjs/allOf.js
+++ /dev/null
@@ -1,43 +0,0 @@
-'use strict';
-module.exports = function generate_allOf(it, $keyword, $ruleType) {
-  var out = ' ';
-  var $schema = it.schema[$keyword];
-  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
-  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
-  var $breakOnError = !it.opts.allErrors;
-  var $it = it.util.copy(it);
-  var $closingBraces = '';
-  $it.level++;
-  var $nextValid = 'valid' + $it.level;
-  var $currentBaseId = $it.baseId,
-    $allSchemasEmpty = true;
-  var arr1 = $schema;
-  if (arr1) {
-    var $sch, $i = -1,
-      l1 = arr1.length - 1;
-    while ($i < l1) {
-      $sch = arr1[$i += 1];
-      if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {
-        $allSchemasEmpty = false;
-        $it.schema = $sch;
-        $it.schemaPath = $schemaPath + '[' + $i + ']';
-        $it.errSchemaPath = $errSchemaPath + '/' + $i;
-        out += '  ' + (it.validate($it)) + ' ';
-        $it.baseId = $currentBaseId;
-        if ($breakOnError) {
-          out += ' if (' + ($nextValid) + ') { ';
-          $closingBraces += '}';
-        }
-      }
-    }
-  }
-  if ($breakOnError) {
-    if ($allSchemasEmpty) {
-      out += ' if (true) { ';
-    } else {
-      out += ' ' + ($closingBraces.slice(0, -1)) + ' ';
-    }
-  }
-  out = it.util.cleanUpCode(out);
-  return out;
-}
diff --git a/templetes/node_modules/async/all.js b/templetes/node_modules/async/all.js
deleted file mode 100644
index d0565b04..00000000
--- a/templetes/node_modules/async/all.js
+++ /dev/null
@@ -1,50 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _createTester = require('./internal/createTester');
-
-var _createTester2 = _interopRequireDefault(_createTester);
-
-var _doParallel = require('./internal/doParallel');
-
-var _doParallel2 = _interopRequireDefault(_doParallel);
-
-var _notId = require('./internal/notId');
-
-var _notId2 = _interopRequireDefault(_notId);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-/**
- * Returns `true` if every element in `coll` satisfies an async test. If any
- * iteratee call returns `false`, the main `callback` is immediately called.
- *
- * @name every
- * @static
- * @memberOf module:Collections
- * @method
- * @alias all
- * @category Collection
- * @param {Array|Iterable|Object} coll - A collection to iterate over.
- * @param {AsyncFunction} iteratee - An async truth test to apply to each item
- * in the collection in parallel.
- * The iteratee must complete with a boolean result value.
- * Invoked with (item, callback).
- * @param {Function} [callback] - A callback which is called after all the
- * `iteratee` functions have finished. Result will be either `true` or `false`
- * depending on the values of the async tests. Invoked with (err, result).
- * @example
- *
- * async.every(['file1','file2','file3'], function(filePath, callback) {
- *     fs.access(filePath, function(err) {
- *         callback(null, !err)
- *     });
- * }, function(err, result) {
- *     // if result is true then every file exists
- * });
- */
-exports.default = (0, _doParallel2.default)((0, _createTester2.default)(_notId2.default, _notId2.default));
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/templetes/node_modules/async/allLimit.js b/templetes/node_modules/async/allLimit.js
deleted file mode 100644
index a1a759a2..00000000
--- a/templetes/node_modules/async/allLimit.js
+++ /dev/null
@@ -1,42 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _createTester = require('./internal/createTester');
-
-var _createTester2 = _interopRequireDefault(_createTester);
-
-var _doParallelLimit = require('./internal/doParallelLimit');
-
-var _doParallelLimit2 = _interopRequireDefault(_doParallelLimit);
-
-var _notId = require('./internal/notId');
-
-var _notId2 = _interopRequireDefault(_notId);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-/**
- * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time.
- *
- * @name everyLimit
- * @static
- * @memberOf module:Collections
- * @method
- * @see [async.every]{@link module:Collections.every}
- * @alias allLimit
- * @category Collection
- * @param {Array|Iterable|Object} coll - A collection to iterate over.
- * @param {number} limit - The maximum number of async operations at a time.
- * @param {AsyncFunction} iteratee - An async truth test to apply to each item
- * in the collection in parallel.
- * The iteratee must complete with a boolean result value.
- * Invoked with (item, callback).
- * @param {Function} [callback] - A callback which is called after all the
- * `iteratee` functions have finished. Result will be either `true` or `false`
- * depending on the values of the async tests. Invoked with (err, result).
- */
-exports.default = (0, _doParallelLimit2.default)((0, _createTester2.default)(_notId2.default, _notId2.default));
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/templetes/node_modules/async/allSeries.js b/templetes/node_modules/async/allSeries.js
deleted file mode 100644
index 23bfebb5..00000000
--- a/templetes/node_modules/async/allSeries.js
+++ /dev/null
@@ -1,37 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _everyLimit = require('./everyLimit');
-
-var _everyLimit2 = _interopRequireDefault(_everyLimit);
-
-var _doLimit = require('./internal/doLimit');
-
-var _doLimit2 = _interopRequireDefault(_doLimit);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-/**
- * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time.
- *
- * @name everySeries
- * @static
- * @memberOf module:Collections
- * @method
- * @see [async.every]{@link module:Collections.every}
- * @alias allSeries
- * @category Collection
- * @param {Array|Iterable|Object} coll - A collection to iterate over.
- * @param {AsyncFunction} iteratee - An async truth test to apply to each item
- * in the collection in series.
- * The iteratee must complete with a boolean result value.
- * Invoked with (item, callback).
- * @param {Function} [callback] - A callback which is called after all the
- * `iteratee` functions have finished. Result will be either `true` or `false`
- * depending on the values of the async tests. Invoked with (err, result).
- */
-exports.default = (0, _doLimit2.default)(_everyLimit2.default, 1);
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/templetes/node_modules/babel-runtime/core-js/math/acosh.js b/templetes/node_modules/babel-runtime/core-js/math/acosh.js
deleted file mode 100644
index 37e2202d..00000000
--- a/templetes/node_modules/babel-runtime/core-js/math/acosh.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = { "default": require("core-js/library/fn/math/acosh"), __esModule: true };
\ No newline at end of file
diff --git a/templetes/node_modules/babel-runtime/helpers/_possible-constructor-return.js b/templetes/node_modules/babel-runtime/helpers/_possible-constructor-return.js
deleted file mode 100644
index 09018d77..00000000
--- a/templetes/node_modules/babel-runtime/helpers/_possible-constructor-return.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require("./possibleConstructorReturn.js");
\ No newline at end of file
diff --git a/templetes/node_modules/babel-runtime/helpers/_self-global.js b/templetes/node_modules/babel-runtime/helpers/_self-global.js
deleted file mode 100644
index c3d45f33..00000000
--- a/templetes/node_modules/babel-runtime/helpers/_self-global.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require("./selfGlobal.js");
\ No newline at end of file
diff --git a/templetes/node_modules/babel-runtime/helpers/_set.js b/templetes/node_modules/babel-runtime/helpers/_set.js
deleted file mode 100644
index e4dd5eaf..00000000
--- a/templetes/node_modules/babel-runtime/helpers/_set.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require("./set.js");
\ No newline at end of file
diff --git a/templetes/node_modules/babel-runtime/helpers/_sliced-to-array-loose.js b/templetes/node_modules/babel-runtime/helpers/_sliced-to-array-loose.js
deleted file mode 100644
index 8bb56d33..00000000
--- a/templetes/node_modules/babel-runtime/helpers/_sliced-to-array-loose.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require("./slicedToArrayLoose.js");
\ No newline at end of file
diff --git a/templetes/node_modules/babel-runtime/helpers/_sliced-to-array.js b/templetes/node_modules/babel-runtime/helpers/_sliced-to-array.js
deleted file mode 100644
index 28d7fd82..00000000
--- a/templetes/node_modules/babel-runtime/helpers/_sliced-to-array.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require("./slicedToArray.js");
\ No newline at end of file
diff --git a/templetes/node_modules/babel-runtime/helpers/_tagged-template-literal-loose.js b/templetes/node_modules/babel-runtime/helpers/_tagged-template-literal-loose.js
deleted file mode 100644
index 8ffa3f71..00000000
--- a/templetes/node_modules/babel-runtime/helpers/_tagged-template-literal-loose.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require("./taggedTemplateLiteralLoose.js");
\ No newline at end of file
diff --git a/templetes/node_modules/babel-runtime/helpers/_tagged-template-literal.js b/templetes/node_modules/babel-runtime/helpers/_tagged-template-literal.js
deleted file mode 100644
index 160a9178..00000000
--- a/templetes/node_modules/babel-runtime/helpers/_tagged-template-literal.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require("./taggedTemplateLiteral.js");
\ No newline at end of file
diff --git a/templetes/node_modules/babel-runtime/helpers/_temporal-ref.js b/templetes/node_modules/babel-runtime/helpers/_temporal-ref.js
deleted file mode 100644
index cf2e4e45..00000000
--- a/templetes/node_modules/babel-runtime/helpers/_temporal-ref.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require("./temporalRef.js");
\ No newline at end of file
diff --git a/templetes/node_modules/babel-runtime/helpers/_temporal-undefined.js b/templetes/node_modules/babel-runtime/helpers/_temporal-undefined.js
deleted file mode 100644
index 234fc339..00000000
--- a/templetes/node_modules/babel-runtime/helpers/_temporal-undefined.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require("./temporalUndefined.js");
\ No newline at end of file
diff --git a/templetes/node_modules/babel-runtime/helpers/_to-array.js b/templetes/node_modules/babel-runtime/helpers/_to-array.js
deleted file mode 100644
index d89ee39a..00000000
--- a/templetes/node_modules/babel-runtime/helpers/_to-array.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require("./toArray.js");
\ No newline at end of file
diff --git a/templetes/node_modules/babel-runtime/helpers/_to-consumable-array.js b/templetes/node_modules/babel-runtime/helpers/_to-consumable-array.js
deleted file mode 100644
index 0aad718d..00000000
--- a/templetes/node_modules/babel-runtime/helpers/_to-consumable-array.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require("./toConsumableArray.js");
\ No newline at end of file
diff --git a/templetes/node_modules/babel-runtime/helpers/_typeof.js b/templetes/node_modules/babel-runtime/helpers/_typeof.js
deleted file mode 100644
index 14fd11cd..00000000
--- a/templetes/node_modules/babel-runtime/helpers/_typeof.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require("./typeof.js");
\ No newline at end of file
diff --git a/templetes/node_modules/browserify-aes/aes.js b/templetes/node_modules/browserify-aes/aes.js
deleted file mode 100644
index ca32ab70..00000000
--- a/templetes/node_modules/browserify-aes/aes.js
+++ /dev/null
@@ -1,228 +0,0 @@
-// based on the aes implimentation in triple sec
-// https://github.com/keybase/triplesec
-// which is in turn based on the one from crypto-js
-// https://code.google.com/p/crypto-js/
-
-var Buffer = require('safe-buffer').Buffer
-
-function asUInt32Array (buf) {
-  if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)
-
-  var len = (buf.length / 4) | 0
-  var out = new Array(len)
-
-  for (var i = 0; i < len; i++) {
-    out[i] = buf.readUInt32BE(i * 4)
-  }
-
-  return out
-}
-
-function scrubVec (v) {
-  for (var i = 0; i < v.length; v++) {
-    v[i] = 0
-  }
-}
-
-function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {
-  var SUB_MIX0 = SUB_MIX[0]
-  var SUB_MIX1 = SUB_MIX[1]
-  var SUB_MIX2 = SUB_MIX[2]
-  var SUB_MIX3 = SUB_MIX[3]
-
-  var s0 = M[0] ^ keySchedule[0]
-  var s1 = M[1] ^ keySchedule[1]
-  var s2 = M[2] ^ keySchedule[2]
-  var s3 = M[3] ^ keySchedule[3]
-  var t0, t1, t2, t3
-  var ksRow = 4
-
-  for (var round = 1; round < nRounds; round++) {
-    t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]
-    t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]
-    t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]
-    t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]
-    s0 = t0
-    s1 = t1
-    s2 = t2
-    s3 = t3
-  }
-
-  t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
-  t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
-  t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
-  t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
-  t0 = t0 >>> 0
-  t1 = t1 >>> 0
-  t2 = t2 >>> 0
-  t3 = t3 >>> 0
-
-  return [t0, t1, t2, t3]
-}
-
-// AES constants
-var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
-var G = (function () {
-  // Compute double table
-  var d = new Array(256)
-  for (var j = 0; j < 256; j++) {
-    if (j < 128) {
-      d[j] = j << 1
-    } else {
-      d[j] = (j << 1) ^ 0x11b
-    }
-  }
-
-  var SBOX = []
-  var INV_SBOX = []
-  var SUB_MIX = [[], [], [], []]
-  var INV_SUB_MIX = [[], [], [], []]
-
-  // Walk GF(2^8)
-  var x = 0
-  var xi = 0
-  for (var i = 0; i < 256; ++i) {
-    // Compute sbox
-    var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
-    sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
-    SBOX[x] = sx
-    INV_SBOX[sx] = x
-
-    // Compute multiplication
-    var x2 = d[x]
-    var x4 = d[x2]
-    var x8 = d[x4]
-
-    // Compute sub bytes, mix columns tables
-    var t = (d[sx] * 0x101) ^ (sx * 0x1010100)
-    SUB_MIX[0][x] = (t << 24) | (t >>> 8)
-    SUB_MIX[1][x] = (t << 16) | (t >>> 16)
-    SUB_MIX[2][x] = (t << 8) | (t >>> 24)
-    SUB_MIX[3][x] = t
-
-    // Compute inv sub bytes, inv mix columns tables
-    t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
-    INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
-    INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
-    INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
-    INV_SUB_MIX[3][sx] = t
-
-    if (x === 0) {
-      x = xi = 1
-    } else {
-      x = x2 ^ d[d[d[x8 ^ x2]]]
-      xi ^= d[d[xi]]
-    }
-  }
-
-  return {
-    SBOX: SBOX,
-    INV_SBOX: INV_SBOX,
-    SUB_MIX: SUB_MIX,
-    INV_SUB_MIX: INV_SUB_MIX
-  }
-})()
-
-function AES (key) {
-  this._key = asUInt32Array(key)
-  this._reset()
-}
-
-AES.blockSize = 4 * 4
-AES.keySize = 256 / 8
-AES.prototype.blockSize = AES.blockSize
-AES.prototype.keySize = AES.keySize
-AES.prototype._reset = function () {
-  var keyWords = this._key
-  var keySize = keyWords.length
-  var nRounds = keySize + 6
-  var ksRows = (nRounds + 1) * 4
-
-  var keySchedule = []
-  for (var k = 0; k < keySize; k++) {
-    keySchedule[k] = keyWords[k]
-  }
-
-  for (k = keySize; k < ksRows; k++) {
-    var t = keySchedule[k - 1]
-
-    if (k % keySize === 0) {
-      t = (t << 8) | (t >>> 24)
-      t =
-        (G.SBOX[t >>> 24] << 24) |
-        (G.SBOX[(t >>> 16) & 0xff] << 16) |
-        (G.SBOX[(t >>> 8) & 0xff] << 8) |
-        (G.SBOX[t & 0xff])
-
-      t ^= RCON[(k / keySize) | 0] << 24
-    } else if (keySize > 6 && k % keySize === 4) {
-      t =
-        (G.SBOX[t >>> 24] << 24) |
-        (G.SBOX[(t >>> 16) & 0xff] << 16) |
-        (G.SBOX[(t >>> 8) & 0xff] << 8) |
-        (G.SBOX[t & 0xff])
-    }
-
-    keySchedule[k] = keySchedule[k - keySize] ^ t
-  }
-
-  var invKeySchedule = []
-  for (var ik = 0; ik < ksRows; ik++) {
-    var ksR = ksRows - ik
-    var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]
-
-    if (ik < 4 || ksR <= 4) {
-      invKeySchedule[ik] = tt
-    } else {
-      invKeySchedule[ik] =
-        G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^
-        G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^
-        G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^
-        G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]
-    }
-  }
-
-  this._nRounds = nRounds
-  this._keySchedule = keySchedule
-  this._invKeySchedule = invKeySchedule
-}
-
-AES.prototype.encryptBlockRaw = function (M) {
-  M = asUInt32Array(M)
-  return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)
-}
-
-AES.prototype.encryptBlock = function (M) {
-  var out = this.encryptBlockRaw(M)
-  var buf = Buffer.allocUnsafe(16)
-  buf.writeUInt32BE(out[0], 0)
-  buf.writeUInt32BE(out[1], 4)
-  buf.writeUInt32BE(out[2], 8)
-  buf.writeUInt32BE(out[3], 12)
-  return buf
-}
-
-AES.prototype.decryptBlock = function (M) {
-  M = asUInt32Array(M)
-
-  // swap
-  var m1 = M[1]
-  M[1] = M[3]
-  M[3] = m1
-
-  var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)
-  var buf = Buffer.allocUnsafe(16)
-  buf.writeUInt32BE(out[0], 0)
-  buf.writeUInt32BE(out[3], 4)
-  buf.writeUInt32BE(out[2], 8)
-  buf.writeUInt32BE(out[1], 12)
-  return buf
-}
-
-AES.prototype.scrub = function () {
-  scrubVec(this._keySchedule)
-  scrubVec(this._invKeySchedule)
-  scrubVec(this._key)
-}
-
-module.exports.AES = AES
diff --git a/templetes/node_modules/browserify-sign/algos.js b/templetes/node_modules/browserify-sign/algos.js
deleted file mode 100644
index dff5b78a..00000000
--- a/templetes/node_modules/browserify-sign/algos.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('./browser/algorithms.json')
diff --git a/templetes/node_modules/browserify-sign/browser/algorithms.json b/templetes/node_modules/browserify-sign/browser/algorithms.json
deleted file mode 100644
index 39324a3f..00000000
--- a/templetes/node_modules/browserify-sign/browser/algorithms.json
+++ /dev/null
@@ -1,152 +0,0 @@
-{
-  "sha224WithRSAEncryption": {
-    "sign": "rsa",
-    "hash": "sha224",
-    "id": "302d300d06096086480165030402040500041c"
-  },
-  "RSA-SHA224": {
-    "sign": "ecdsa/rsa",
-    "hash": "sha224",
-    "id": "302d300d06096086480165030402040500041c"
-  },
-  "sha256WithRSAEncryption": {
-    "sign": "rsa",
-    "hash": "sha256",
-    "id": "3031300d060960864801650304020105000420"
-  },
-  "RSA-SHA256": {
-    "sign": "ecdsa/rsa",
-    "hash": "sha256",
-    "id": "3031300d060960864801650304020105000420"
-  },
-  "sha384WithRSAEncryption": {
-    "sign": "rsa",
-    "hash": "sha384",
-    "id": "3041300d060960864801650304020205000430"
-  },
-  "RSA-SHA384": {
-    "sign": "ecdsa/rsa",
-    "hash": "sha384",
-    "id": "3041300d060960864801650304020205000430"
-  },
-  "sha512WithRSAEncryption": {
-    "sign": "rsa",
-    "hash": "sha512",
-    "id": "3051300d060960864801650304020305000440"
-  },
-  "RSA-SHA512": {
-    "sign": "ecdsa/rsa",
-    "hash": "sha512",
-    "id": "3051300d060960864801650304020305000440"
-  },
-  "RSA-SHA1": {
-    "sign": "rsa",
-    "hash": "sha1",
-    "id": "3021300906052b0e03021a05000414"
-  },
-  "ecdsa-with-SHA1": {
-    "sign": "ecdsa",
-    "hash": "sha1",
-    "id": ""
-  },
-  "sha256": {
-    "sign": "ecdsa",
-    "hash": "sha256",
-    "id": ""
-  },
-  "sha224": {
-    "sign": "ecdsa",
-    "hash": "sha224",
-    "id": ""
-  },
-  "sha384": {
-    "sign": "ecdsa",
-    "hash": "sha384",
-    "id": ""
-  },
-  "sha512": {
-    "sign": "ecdsa",
-    "hash": "sha512",
-    "id": ""
-  },
-  "DSA-SHA": {
-    "sign": "dsa",
-    "hash": "sha1",
-    "id": ""
-  },
-  "DSA-SHA1": {
-    "sign": "dsa",
-    "hash": "sha1",
-    "id": ""
-  },
-  "DSA": {
-    "sign": "dsa",
-    "hash": "sha1",
-    "id": ""
-  },
-  "DSA-WITH-SHA224": {
-    "sign": "dsa",
-    "hash": "sha224",
-    "id": ""
-  },
-  "DSA-SHA224": {
-    "sign": "dsa",
-    "hash": "sha224",
-    "id": ""
-  },
-  "DSA-WITH-SHA256": {
-    "sign": "dsa",
-    "hash": "sha256",
-    "id": ""
-  },
-  "DSA-SHA256": {
-    "sign": "dsa",
-    "hash": "sha256",
-    "id": ""
-  },
-  "DSA-WITH-SHA384": {
-    "sign": "dsa",
-    "hash": "sha384",
-    "id": ""
-  },
-  "DSA-SHA384": {
-    "sign": "dsa",
-    "hash": "sha384",
-    "id": ""
-  },
-  "DSA-WITH-SHA512": {
-    "sign": "dsa",
-    "hash": "sha512",
-    "id": ""
-  },
-  "DSA-SHA512": {
-    "sign": "dsa",
-    "hash": "sha512",
-    "id": ""
-  },
-  "DSA-RIPEMD160": {
-    "sign": "dsa",
-    "hash": "rmd160",
-    "id": ""
-  },
-  "ripemd160WithRSA": {
-    "sign": "rsa",
-    "hash": "rmd160",
-    "id": "3021300906052b2403020105000414"
-  },
-  "RSA-RIPEMD160": {
-    "sign": "rsa",
-    "hash": "rmd160",
-    "id": "3021300906052b2403020105000414"
-  },
-  "md5WithRSAEncryption": {
-    "sign": "rsa",
-    "hash": "md5",
-    "id": "3020300c06082a864886f70d020505000410"
-  },
-  "RSA-MD5": {
-    "sign": "rsa",
-    "hash": "md5",
-    "id": "3020300c06082a864886f70d020505000410"
-  }
-}
diff --git a/templetes/node_modules/buffer/test/_polyfill.js b/templetes/node_modules/buffer/test/_polyfill.js
deleted file mode 100644
index 61f9c180..00000000
--- a/templetes/node_modules/buffer/test/_polyfill.js
+++ /dev/null
@@ -1,150 +0,0 @@
-if (!Array.prototype.forEach) {
-
-  Array.prototype.forEach = function(callback, thisArg) {
-
-    var T, k;
-
-    if (this == null) {
-      throw new TypeError(' this is null or not defined');
-    }
-
-    // 1. Let O be the result of calling ToObject passing the |this| value as the argument.
-    var O = Object(this);
-
-    // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length".
-    // 3. Let len be ToUint32(lenValue).
-    var len = O.length >>> 0;
-
-    // 4. If IsCallable(callback) is false, throw a TypeError exception.
-    // See: http://es5.github.com/#x9.11
-    if (typeof callback !== "function") {
-      throw new TypeError(callback + ' is not a function');
-    }
-
-    // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
-    if (arguments.length > 1) {
-      T = thisArg;
-    }
-
-    // 6. Let k be 0
-    k = 0;
-
-    // 7. Repeat, while k < len
-    while (k < len) {
-
-      var kValue;
-
-      // a. Let Pk be ToString(k).
-      //   This is implicit for LHS operands of the in operator
-      // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk.
-      //   This step can be combined with c
-      // c. If kPresent is true, then
-      if (k in O) {
-
-        // i. Let kValue be the result of calling the Get internal method of O with argument Pk.
-        kValue = O[k];
-
-        // ii. Call the Call internal method of callback with T as the this value and
-        // argument list containing kValue, k, and O.
-        callback.call(T, kValue, k, O);
-      }
-      // d. Increase k by 1.
-      k++;
-    }
-    // 8. return undefined
-  };
-}
-
-if (!Array.isArray) {
-  Array.isArray = function(arg) {
-    return Object.prototype.toString.call(arg) === '[object Array]';
-  };
-}
-
-if (!Array.prototype.map) {
-
-  Array.prototype.map = function(callback, thisArg) {
-
-    var T, A, k;
-
-    if (this == null) {
-      throw new TypeError(' this is null or not defined');
-    }
-
-    // 1. Let O be the result of calling ToObject passing the |this|
-    //    value as the argument.
-    var O = Object(this);
-
-    // 2. Let lenValue be the result of calling the Get internal
-    //    method of O with the argument "length".
-    // 3. Let len be ToUint32(lenValue).
-    var len = O.length >>> 0;
-
-    // 4. If IsCallable(callback) is false, throw a TypeError exception.
-    // See: http://es5.github.com/#x9.11
-    if (typeof callback !== 'function') {
-      throw new TypeError(callback + ' is not a function');
-    }
-
-    // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
-    if (arguments.length > 1) {
-      T = thisArg;
-    }
-
-    // 6. Let A be a new array created as if by the expression new Array(len)
-    //    where Array is the standard built-in constructor with that name and
-    //    len is the value of len.
-    A = new Array(len);
-
-    // 7. Let k be 0
-    k = 0;
-
-    // 8. Repeat, while k < len
-    while (k < len) {
-
-      var kValue, mappedValue;
-
-      // a. Let Pk be ToString(k).
-      //   This is implicit for LHS operands of the in operator
-      // b. Let kPresent be the result of calling the HasProperty internal
-      //    method of O with argument Pk.
-      //   This step can be combined with c
-      // c. If kPresent is true, then
-      if (k in O) {
-
-        // i. Let kValue be the result of calling the Get internal
-        //    method of O with argument Pk.
-        kValue = O[k];
-
-        // ii. Let mappedValue be the result of calling the Call internal
-        //     method of callback with T as the this value and argument
-        //     list containing kValue, k, and O.
-        mappedValue = callback.call(T, kValue, k, O);
-
-        // iii. Call the DefineOwnProperty internal method of A with arguments
-        // Pk, Property Descriptor
-        // { Value: mappedValue,
-        //   Writable: true,
-        //   Enumerable: true,
-        //   Configurable: true },
-        // and false.
-
-        // In browsers that support Object.defineProperty, use the following:
-        // Object.defineProperty(A, k, {
-        //   value: mappedValue,
-        //   writable: true,
-        //   enumerable: true,
-        //   configurable: true
-        // });
-
-        // For best browser support, use the following:
-        A[k] = mappedValue;
-      }
-      // d. Increase k by 1.
-      k++;
-    }
-
-    // 9. return A
-    return A;
-  };
-}
diff --git a/templetes/node_modules/core-js/fn/math/acosh.js b/templetes/node_modules/core-js/fn/math/acosh.js
deleted file mode 100644
index 950dbcb2..00000000
--- a/templetes/node_modules/core-js/fn/math/acosh.js
+++ /dev/null
@@ -1,2 +0,0 @@
-require('../../modules/es6.math.acosh');
-module.exports = require('../../modules/_core').Math.acosh;
diff --git a/templetes/node_modules/core-js/library/fn/math/acosh.js b/templetes/node_modules/core-js/library/fn/math/acosh.js
deleted file mode 100644
index 950dbcb2..00000000
--- a/templetes/node_modules/core-js/library/fn/math/acosh.js
+++ /dev/null
@@ -1,2 +0,0 @@
-require('../../modules/es6.math.acosh');
-module.exports = require('../../modules/_core').Math.acosh;
diff --git a/templetes/node_modules/core-js/library/modules/_path.js b/templetes/node_modules/core-js/library/modules/_path.js
deleted file mode 100644
index 2796ebcb..00000000
--- a/templetes/node_modules/core-js/library/modules/_path.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('./_core');
diff --git a/templetes/node_modules/core-js/library/modules/_perform.js b/templetes/node_modules/core-js/library/modules/_perform.js
deleted file mode 100644
index bfc7b296..00000000
--- a/templetes/node_modules/core-js/library/modules/_perform.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = function (exec) {
-  try {
-    return { e: false, v: exec() };
-  } catch (e) {
-    return { e: true, v: e };
-  }
-};
diff --git a/templetes/node_modules/core-js/library/modules/_promise-resolve.js b/templetes/node_modules/core-js/library/modules/_promise-resolve.js
deleted file mode 100644
index c3cac764..00000000
--- a/templetes/node_modules/core-js/library/modules/_promise-resolve.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var anObject = require('./_an-object');
-var isObject = require('./_is-object');
-var newPromiseCapability = require('./_new-promise-capability');
-
-module.exports = function (C, x) {
-  anObject(C);
-  if (isObject(x) && x.constructor === C) return x;
-  var promiseCapability = newPromiseCapability.f(C);
-  var resolve = promiseCapability.resolve;
-  resolve(x);
-  return promiseCapability.promise;
-};
diff --git a/templetes/node_modules/core-js/library/modules/_property-desc.js b/templetes/node_modules/core-js/library/modules/_property-desc.js
deleted file mode 100644
index 09059340..00000000
--- a/templetes/node_modules/core-js/library/modules/_property-desc.js
+++ /dev/null
@@ -1,8 +0,0 @@
-module.exports = function (bitmap, value) {
-  return {
-    enumerable: !(bitmap & 1),
-    configurable: !(bitmap & 2),
-    writable: !(bitmap & 4),
-    value: value
-  };
-};
diff --git a/templetes/node_modules/core-js/library/modules/_redefine-all.js b/templetes/node_modules/core-js/library/modules/_redefine-all.js
deleted file mode 100644
index bf8c0ea3..00000000
--- a/templetes/node_modules/core-js/library/modules/_redefine-all.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var hide = require('./_hide');
-module.exports = function (target, src, safe) {
-  for (var key in src) {
-    if (safe && target[key]) target[key] = src[key];
-    else hide(target, key, src[key]);
-  } return target;
-};
diff --git a/templetes/node_modules/core-js/library/modules/_redefine.js b/templetes/node_modules/core-js/library/modules/_redefine.js
deleted file mode 100644
index fde6108e..00000000
--- a/templetes/node_modules/core-js/library/modules/_redefine.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('./_hide');
diff --git a/templetes/node_modules/core-js/library/modules/_regexp-exec-abstract.js b/templetes/node_modules/core-js/library/modules/_regexp-exec-abstract.js
deleted file mode 100644
index 8b1a3937..00000000
--- a/templetes/node_modules/core-js/library/modules/_regexp-exec-abstract.js
+++ /dev/null
@@ -1 +0,0 @@
-// empty
diff --git a/templetes/node_modules/core-js/library/modules/_regexp-exec.js b/templetes/node_modules/core-js/library/modules/_regexp-exec.js
deleted file mode 100644
index 8b1a3937..00000000
--- a/templetes/node_modules/core-js/library/modules/_regexp-exec.js
+++ /dev/null
@@ -1 +0,0 @@
-// empty
diff --git a/templetes/node_modules/core-js/library/modules/_replacer.js b/templetes/node_modules/core-js/library/modules/_replacer.js
deleted file mode 100644
index c37703dd..00000000
--- a/templetes/node_modules/core-js/library/modules/_replacer.js
+++ /dev/null
@@ -1,8 +0,0 @@
-module.exports = function (regExp, replace) {
-  var replacer = replace === Object(replace) ? function (part) {
-    return replace[part];
-  } : replace;
-  return function (it) {
-    return String(it).replace(regExp, replacer);
-  };
-};
diff --git a/templetes/node_modules/core-js/library/modules/_same-value.js b/templetes/node_modules/core-js/library/modules/_same-value.js
deleted file mode 100644
index c6d045e8..00000000
--- a/templetes/node_modules/core-js/library/modules/_same-value.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// 7.2.9 SameValue(x, y)
-module.exports = Object.is || function is(x, y) {
-  // eslint-disable-next-line no-self-compare
-  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
-};
diff --git a/templetes/node_modules/core-js/library/modules/_set-collection-from.js b/templetes/node_modules/core-js/library/modules/_set-collection-from.js
deleted file mode 100644
index d5001f93..00000000
--- a/templetes/node_modules/core-js/library/modules/_set-collection-from.js
+++ /dev/null
@@ -1,28 +0,0 @@
-'use strict';
-// https://tc39.github.io/proposal-setmap-offrom/
-var $export = require('./_export');
-var aFunction = require('./_a-function');
-var ctx = require('./_ctx');
-var forOf = require('./_for-of');
-
-module.exports = function (COLLECTION) {
-  $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {
-    var mapFn = arguments[1];
-    var mapping, A, n, cb;
-    aFunction(this);
-    mapping = mapFn !== undefined;
-    if (mapping) aFunction(mapFn);
-    if (source == undefined) return new this();
-    A = [];
-    if (mapping) {
-      n = 0;
-      cb = ctx(mapFn, arguments[2], 2);
-      forOf(source, false, function (nextItem) {
-        A.push(cb(nextItem, n++));
-      });
-    } else {
-      forOf(source, false, A.push, A);
-    }
-    return new this(A);
-  } });
-};
diff --git a/templetes/node_modules/core-js/library/modules/_set-collection-of.js b/templetes/node_modules/core-js/library/modules/_set-collection-of.js
deleted file mode 100644
index f559af3f..00000000
--- a/templetes/node_modules/core-js/library/modules/_set-collection-of.js
+++ /dev/null
@@ -1,12 +0,0 @@
-'use strict';
-// https://tc39.github.io/proposal-setmap-offrom/
-var $export = require('./_export');
-
-module.exports = function (COLLECTION) {
-  $export($export.S, COLLECTION, { of: function of() {
-    var length = arguments.length;
-    var A = new Array(length);
-    while (length--) A[length] = arguments[length];
-    return new this(A);
-  } });
-};
diff --git a/templetes/node_modules/core-js/library/modules/_set-proto.js b/templetes/node_modules/core-js/library/modules/_set-proto.js
deleted file mode 100644
index c1990622..00000000
--- a/templetes/node_modules/core-js/library/modules/_set-proto.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// Works with __proto__ only. Old v8 can't work with null proto objects.
-/* eslint-disable no-proto */
-var isObject = require('./_is-object');
-var anObject = require('./_an-object');
-var check = function (O, proto) {
-  anObject(O);
-  if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
-};
-module.exports = {
-  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
-    function (test, buggy, set) {
-      try {
-        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);
-        set(test, []);
-        buggy = !(test instanceof Array);
-      } catch (e) { buggy = true; }
-      return function setPrototypeOf(O, proto) {
-        check(O, proto);
-        if (buggy) O.__proto__ = proto;
-        else set(O, proto);
-        return O;
-      };
-    }({}, false) : undefined),
-  check: check
-};
diff --git a/templetes/node_modules/core-js/library/modules/_set-species.js b/templetes/node_modules/core-js/library/modules/_set-species.js
deleted file mode 100644
index 1f25fde1..00000000
--- a/templetes/node_modules/core-js/library/modules/_set-species.js
+++ /dev/null
@@ -1,14 +0,0 @@
-'use strict';
-var global = require('./_global');
-var core = require('./_core');
-var dP = require('./_object-dp');
-var DESCRIPTORS = require('./_descriptors');
-var SPECIES = require('./_wks')('species');
-
-module.exports = function (KEY) {
-  var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];
-  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {
-    configurable: true,
-    get: function () { return this; }
-  });
-};
diff --git a/templetes/node_modules/core-js/library/modules/_set-to-string-tag.js b/templetes/node_modules/core-js/library/modules/_set-to-string-tag.js
deleted file mode 100644
index 5bd64144..00000000
--- a/templetes/node_modules/core-js/library/modules/_set-to-string-tag.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var def = require('./_object-dp').f;
-var has = require('./_has');
-var TAG = require('./_wks')('toStringTag');
-
-module.exports = function (it, tag, stat) {
-  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
-};
diff --git a/templetes/node_modules/core-js/library/modules/_shared-key.js b/templetes/node_modules/core-js/library/modules/_shared-key.js
deleted file mode 100644
index d47fe7a2..00000000
--- a/templetes/node_modules/core-js/library/modules/_shared-key.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var shared = require('./_shared')('keys');
-var uid = require('./_uid');
-module.exports = function (key) {
-  return shared[key] || (shared[key] = uid(key));
-};
diff --git a/templetes/node_modules/core-js/library/modules/_shared.js b/templetes/node_modules/core-js/library/modules/_shared.js
deleted file mode 100644
index 3adec722..00000000
--- a/templetes/node_modules/core-js/library/modules/_shared.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var core = require('./_core');
-var global = require('./_global');
-var SHARED = '__core-js_shared__';
-var store = global[SHARED] || (global[SHARED] = {});
-
-(module.exports = function (key, value) {
-  return store[key] || (store[key] = value !== undefined ? value : {});
-})('versions', []).push({
-  version: core.version,
-  mode: require('./_library') ? 'pure' : 'global',
-  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'
-});
diff --git a/templetes/node_modules/core-js/library/modules/_species-constructor.js b/templetes/node_modules/core-js/library/modules/_species-constructor.js
deleted file mode 100644
index 0cb4ffb8..00000000
--- a/templetes/node_modules/core-js/library/modules/_species-constructor.js
+++ /dev/null
@@ -1,9 +0,0 @@
-// 7.3.20 SpeciesConstructor(O, defaultConstructor)
-var anObject = require('./_an-object');
-var aFunction = require('./_a-function');
-var SPECIES = require('./_wks')('species');
-module.exports = function (O, D) {
-  var C = anObject(O).constructor;
-  var S;
-  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
-};
diff --git a/templetes/node_modules/core-js/library/modules/_strict-method.js b/templetes/node_modules/core-js/library/modules/_strict-method.js
deleted file mode 100644
index e68f41bb..00000000
--- a/templetes/node_modules/core-js/library/modules/_strict-method.js
+++ /dev/null
@@ -1,9 +0,0 @@
-'use strict';
-var fails = require('./_fails');
-
-module.exports = function (method, arg) {
-  return !!method && fails(function () {
-    // eslint-disable-next-line no-useless-call
-    arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);
-  });
-};
diff --git a/templetes/node_modules/core-js/library/modules/_string-at.js b/templetes/node_modules/core-js/library/modules/_string-at.js
deleted file mode 100644
index 88d66bd1..00000000
--- a/templetes/node_modules/core-js/library/modules/_string-at.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var toInteger = require('./_to-integer');
-var defined = require('./_defined');
-// true  -> String#at
-// false -> String#codePointAt
-module.exports = function (TO_STRING) {
-  return function (that, pos) {
-    var s = String(defined(that));
-    var i = toInteger(pos);
-    var l = s.length;
-    var a, b;
-    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
-    a = s.charCodeAt(i);
-    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
-      ? TO_STRING ? s.charAt(i) : a
-      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
-  };
-};
diff --git a/templetes/node_modules/core-js/library/modules/_string-context.js b/templetes/node_modules/core-js/library/modules/_string-context.js
deleted file mode 100644
index becf3fbe..00000000
--- a/templetes/node_modules/core-js/library/modules/_string-context.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// helper for String#{startsWith, endsWith, includes}
-var isRegExp = require('./_is-regexp');
-var defined = require('./_defined');
-
-module.exports = function (that, searchString, NAME) {
-  if (isRegExp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!");
-  return String(defined(that));
-};
diff --git a/templetes/node_modules/core-js/library/modules/_string-html.js b/templetes/node_modules/core-js/library/modules/_string-html.js
deleted file mode 100644
index 1dcc95bc..00000000
--- a/templetes/node_modules/core-js/library/modules/_string-html.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var $export = require('./_export');
-var fails = require('./_fails');
-var defined = require('./_defined');
-var quot = /"/g;
-// B.2.3.2.1 CreateHTML(string, tag, attribute, value)
-var createHTML = function (string, tag, attribute, value) {
-  var S = String(defined(string));
-  var p1 = '<' + tag;
-  if (attribute !== '') p1 += ' ' + attribute + '="' + String(value).replace(quot, '&quot;') + '"';
-  return p1 + '>' + S + '</' + tag + '>';
-};
-module.exports = function (NAME, exec) {
-  var O = {};
-  O[NAME] = exec(createHTML);
-  $export($export.P + $export.F * fails(function () {
-    var test = ''[NAME]('"');
-    return test !== test.toLowerCase() || test.split('"').length > 3;
-  }), 'String', O);
-};
diff --git a/templetes/node_modules/core-js/library/modules/_string-pad.js b/templetes/node_modules/core-js/library/modules/_string-pad.js
deleted file mode 100644
index ceb6077f..00000000
--- a/templetes/node_modules/core-js/library/modules/_string-pad.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// https://github.com/tc39/proposal-string-pad-start-end
-var toLength = require('./_to-length');
-var repeat = require('./_string-repeat');
-var defined = require('./_defined');
-
-module.exports = function (that, maxLength, fillString, left) {
-  var S = String(defined(that));
-  var stringLength = S.length;
-  var fillStr = fillString === undefined ? ' ' : String(fillString);
-  var intMaxLength = toLength(maxLength);
-  if (intMaxLength <= stringLength || fillStr == '') return S;
-  var fillLen = intMaxLength - stringLength;
-  var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
-  if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);
-  return left ? stringFiller + S : S + stringFiller;
-};
diff --git a/templetes/node_modules/core-js/library/modules/_string-repeat.js b/templetes/node_modules/core-js/library/modules/_string-repeat.js
deleted file mode 100644
index a69b9626..00000000
--- a/templetes/node_modules/core-js/library/modules/_string-repeat.js
+++ /dev/null
@@ -1,12 +0,0 @@
-'use strict';
-var toInteger = require('./_to-integer');
-var defined = require('./_defined');
-
-module.exports = function repeat(count) {
-  var str = String(defined(this));
-  var res = '';
-  var n = toInteger(count);
-  if (n < 0 || n == Infinity) throw RangeError("Count can't be negative");
-  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;
-  return res;
-};
diff --git a/templetes/node_modules/core-js/library/modules/_string-trim.js b/templetes/node_modules/core-js/library/modules/_string-trim.js
deleted file mode 100644
index 6b54a81a..00000000
--- a/templetes/node_modules/core-js/library/modules/_string-trim.js
+++ /dev/null
@@ -1,30 +0,0 @@
-var $export = require('./_export');
-var defined = require('./_defined');
-var fails = require('./_fails');
-var spaces = require('./_string-ws');
-var space = '[' + spaces + ']';
-var non = '\u200b\u0085';
-var ltrim = RegExp('^' + space + space + '*');
-var rtrim = RegExp(space + space + '*$');
-
-var exporter = function (KEY, exec, ALIAS) {
-  var exp = {};
-  var FORCE = fails(function () {
-    return !!spaces[KEY]() || non[KEY]() != non;
-  });
-  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];
-  if (ALIAS) exp[ALIAS] = fn;
-  $export($export.P + $export.F * FORCE, 'String', exp);
-};
-
-// 1 -> String#trimLeft
-// 2 -> String#trimRight
-// 3 -> String#trim
-var trim = exporter.trim = function (string, TYPE) {
-  string = String(defined(string));
-  if (TYPE & 1) string = string.replace(ltrim, '');
-  if (TYPE & 2) string = string.replace(rtrim, '');
-  return string;
-};
-
-module.exports = exporter;
diff --git a/templetes/node_modules/core-js/library/modules/_string-ws.js b/templetes/node_modules/core-js/library/modules/_string-ws.js
deleted file mode 100644
index 2c68cf9f..00000000
--- a/templetes/node_modules/core-js/library/modules/_string-ws.js
+++ /dev/null
@@ -1,2 +0,0 @@
-module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
-  '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
diff --git a/templetes/node_modules/core-js/library/modules/_task.js b/templetes/node_modules/core-js/library/modules/_task.js
deleted file mode 100644
index 8777a6e2..00000000
--- a/templetes/node_modules/core-js/library/modules/_task.js
+++ /dev/null
@@ -1,84 +0,0 @@
-var ctx = require('./_ctx');
-var invoke = require('./_invoke');
-var html = require('./_html');
-var cel = require('./_dom-create');
-var global = require('./_global');
-var process = global.process;
-var setTask = global.setImmediate;
-var clearTask = global.clearImmediate;
-var MessageChannel = global.MessageChannel;
-var Dispatch = global.Dispatch;
-var counter = 0;
-var queue = {};
-var ONREADYSTATECHANGE = 'onreadystatechange';
-var defer, channel, port;
-var run = function () {
-  var id = +this;
-  // eslint-disable-next-line no-prototype-builtins
-  if (queue.hasOwnProperty(id)) {
-    var fn = queue[id];
-    delete queue[id];
-    fn();
-  }
-};
-var listener = function (event) {
-  run.call(event.data);
-};
-// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
-if (!setTask || !clearTask) {
-  setTask = function setImmediate(fn) {
-    var args = [];
-    var i = 1;
-    while (arguments.length > i) args.push(arguments[i++]);
-    queue[++counter] = function () {
-      // eslint-disable-next-line no-new-func
-      invoke(typeof fn == 'function' ? fn : Function(fn), args);
-    };
-    defer(counter);
-    return counter;
-  };
-  clearTask = function clearImmediate(id) {
-    delete queue[id];
-  };
-  // Node.js 0.8-
-  if (require('./_cof')(process) == 'process') {
-    defer = function (id) {
-      process.nextTick(ctx(run, id, 1));
-    };
-  // Sphere (JS game engine) Dispatch API
-  } else if (Dispatch && Dispatch.now) {
-    defer = function (id) {
-      Dispatch.now(ctx(run, id, 1));
-    };
-  // Browsers with MessageChannel, includes WebWorkers
-  } else if (MessageChannel) {
-    channel = new MessageChannel();
-    port = channel.port2;
-    channel.port1.onmessage = listener;
-    defer = ctx(port.postMessage, port, 1);
-  // Browsers with postMessage, skip WebWorkers
-  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
-  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {
-    defer = function (id) {
-      global.postMessage(id + '', '*');
-    };
-    global.addEventListener('message', listener, false);
-  // IE8-
-  } else if (ONREADYSTATECHANGE in cel('script')) {
-    defer = function (id) {
-      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {
-        html.removeChild(this);
-        run.call(id);
-      };
-    };
-  // Rest old browsers
-  } else {
-    defer = function (id) {
-      setTimeout(ctx(run, id, 1), 0);
-    };
-  }
-}
-module.exports = {
-  set: setTask,
-  clear: clearTask
-};
diff --git a/templetes/node_modules/core-js/library/modules/_to-absolute-index.js b/templetes/node_modules/core-js/library/modules/_to-absolute-index.js
deleted file mode 100644
index dfee02e8..00000000
--- a/templetes/node_modules/core-js/library/modules/_to-absolute-index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var toInteger = require('./_to-integer');
-var max = Math.max;
-var min = Math.min;
-module.exports = function (index, length) {
-  index = toInteger(index);
-  return index < 0 ? max(index + length, 0) : min(index, length);
-};
diff --git a/templetes/node_modules/core-js/library/modules/_to-index.js b/templetes/node_modules/core-js/library/modules/_to-index.js
deleted file mode 100644
index 8f51c32d..00000000
--- a/templetes/node_modules/core-js/library/modules/_to-index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-// https://tc39.github.io/ecma262/#sec-toindex
-var toInteger = require('./_to-integer');
-var toLength = require('./_to-length');
-module.exports = function (it) {
-  if (it === undefined) return 0;
-  var number = toInteger(it);
-  var length = toLength(number);
-  if (number !== length) throw RangeError('Wrong length!');
-  return length;
-};
diff --git a/templetes/node_modules/core-js/library/modules/_to-integer.js b/templetes/node_modules/core-js/library/modules/_to-integer.js
deleted file mode 100644
index 3d50f97d..00000000
--- a/templetes/node_modules/core-js/library/modules/_to-integer.js
+++ /dev/null
@@ -1,6 +0,0 @@
-// 7.1.4 ToInteger
-var ceil = Math.ceil;
-var floor = Math.floor;
-module.exports = function (it) {
-  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
-};
diff --git a/templetes/node_modules/core-js/library/modules/_to-iobject.js b/templetes/node_modules/core-js/library/modules/_to-iobject.js
deleted file mode 100644
index 7614503a..00000000
--- a/templetes/node_modules/core-js/library/modules/_to-iobject.js
+++ /dev/null
@@ -1,6 +0,0 @@
-// to indexed object, toObject with fallback for non-array-like ES3 strings
-var IObject = require('./_iobject');
-var defined = require('./_defined');
-module.exports = function (it) {
-  return IObject(defined(it));
-};
diff --git a/templetes/node_modules/core-js/library/modules/_to-length.js b/templetes/node_modules/core-js/library/modules/_to-length.js
deleted file mode 100644
index a9db5017..00000000
--- a/templetes/node_modules/core-js/library/modules/_to-length.js
+++ /dev/null
@@ -1,6 +0,0 @@
-// 7.1.15 ToLength
-var toInteger = require('./_to-integer');
-var min = Math.min;
-module.exports = function (it) {
-  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
-};
diff --git a/templetes/node_modules/core-js/library/modules/_to-object.js b/templetes/node_modules/core-js/library/modules/_to-object.js
deleted file mode 100644
index 0efea4c6..00000000
--- a/templetes/node_modules/core-js/library/modules/_to-object.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// 7.1.13 ToObject(argument)
-var defined = require('./_defined');
-module.exports = function (it) {
-  return Object(defined(it));
-};
diff --git a/templetes/node_modules/core-js/library/modules/_to-primitive.js b/templetes/node_modules/core-js/library/modules/_to-primitive.js
deleted file mode 100644
index de3dd6b1..00000000
--- a/templetes/node_modules/core-js/library/modules/_to-primitive.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// 7.1.1 ToPrimitive(input [, PreferredType])
-var isObject = require('./_is-object');
-// instead of the ES6 spec version, we didn't implement @@toPrimitive case
-// and the second argument - flag - preferred type is a string
-module.exports = function (it, S) {
-  if (!isObject(it)) return it;
-  var fn, val;
-  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
-  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
-  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
-  throw TypeError("Can't convert object to primitive value");
-};
diff --git a/templetes/node_modules/core-js/library/modules/_typed-array.js b/templetes/node_modules/core-js/library/modules/_typed-array.js
deleted file mode 100644
index 30d9c0ba..00000000
--- a/templetes/node_modules/core-js/library/modules/_typed-array.js
+++ /dev/null
@@ -1,480 +0,0 @@
-'use strict';
-if (require('./_descriptors')) {
-  var LIBRARY = require('./_library');
-  var global = require('./_global');
-  var fails = require('./_fails');
-  var $export = require('./_export');
-  var $typed = require('./_typed');
-  var $buffer = require('./_typed-buffer');
-  var ctx = require('./_ctx');
-  var anInstance = require('./_an-instance');
-  var propertyDesc = require('./_property-desc');
-  var hide = require('./_hide');
-  var redefineAll = require('./_redefine-all');
-  var toInteger = require('./_to-integer');
-  var toLength = require('./_to-length');
-  var toIndex = require('./_to-index');
-  var toAbsoluteIndex = require('./_to-absolute-index');
-  var toPrimitive = require('./_to-primitive');
-  var has = require('./_has');
-  var classof = require('./_classof');
-  var isObject = require('./_is-object');
-  var toObject = require('./_to-object');
-  var isArrayIter = require('./_is-array-iter');
-  var create = require('./_object-create');
-  var getPrototypeOf = require('./_object-gpo');
-  var gOPN = require('./_object-gopn').f;
-  var getIterFn = require('./core.get-iterator-method');
-  var uid = require('./_uid');
-  var wks = require('./_wks');
-  var createArrayMethod = require('./_array-methods');
-  var createArrayIncludes = require('./_array-includes');
-  var speciesConstructor = require('./_species-constructor');
-  var ArrayIterators = require('./es6.array.iterator');
-  var Iterators = require('./_iterators');
-  var $iterDetect = require('./_iter-detect');
-  var setSpecies = require('./_set-species');
-  var arrayFill = require('./_array-fill');
-  var arrayCopyWithin = require('./_array-copy-within');
-  var $DP = require('./_object-dp');
-  var $GOPD = require('./_object-gopd');
-  var dP = $DP.f;
-  var gOPD = $GOPD.f;
-  var RangeError = global.RangeError;
-  var TypeError = global.TypeError;
-  var Uint8Array = global.Uint8Array;
-  var ARRAY_BUFFER = 'ArrayBuffer';
-  var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;
-  var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';
-  var PROTOTYPE = 'prototype';
-  var ArrayProto = Array[PROTOTYPE];
-  var $ArrayBuffer = $buffer.ArrayBuffer;
-  var $DataView = $buffer.DataView;
-  var arrayForEach = createArrayMethod(0);
-  var arrayFilter = createArrayMethod(2);
-  var arraySome = createArrayMethod(3);
-  var arrayEvery = createArrayMethod(4);
-  var arrayFind = createArrayMethod(5);
-  var arrayFindIndex = createArrayMethod(6);
-  var arrayIncludes = createArrayIncludes(true);
-  var arrayIndexOf = createArrayIncludes(false);
-  var arrayValues = ArrayIterators.values;
-  var arrayKeys = ArrayIterators.keys;
-  var arrayEntries = ArrayIterators.entries;
-  var arrayLastIndexOf = ArrayProto.lastIndexOf;
-  var arrayReduce = ArrayProto.reduce;
-  var arrayReduceRight = ArrayProto.reduceRight;
-  var arrayJoin = ArrayProto.join;
-  var arraySort = ArrayProto.sort;
-  var arraySlice = ArrayProto.slice;
-  var arrayToString = ArrayProto.toString;
-  var arrayToLocaleString = ArrayProto.toLocaleString;
-  var ITERATOR = wks('iterator');
-  var TAG = wks('toStringTag');
-  var TYPED_CONSTRUCTOR = uid('typed_constructor');
-  var DEF_CONSTRUCTOR = uid('def_constructor');
-  var ALL_CONSTRUCTORS = $typed.CONSTR;
-  var TYPED_ARRAY = $typed.TYPED;
-  var VIEW = $typed.VIEW;
-  var WRONG_LENGTH = 'Wrong length!';
-
-  var $map = createArrayMethod(1, function (O, length) {
-    return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);
-  });
-
-  var LITTLE_ENDIAN = fails(function () {
-    // eslint-disable-next-line no-undef
-    return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;
-  });
-
-  var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {
-    new Uint8Array(1).set({});
-  });
-
-  var toOffset = function (it, BYTES) {
-    var offset = toInteger(it);
-    if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');
-    return offset;
-  };
-
-  var validate = function (it) {
-    if (isObject(it) && TYPED_ARRAY in it) return it;
-    throw TypeError(it + ' is not a typed array!');
-  };
-
-  var allocate = function (C, length) {
-    if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {
-      throw TypeError('It is not a typed array constructor!');
-    } return new C(length);
-  };
-
-  var speciesFromList = function (O, list) {
-    return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);
-  };
-
-  var fromList = function (C, list) {
-    var index = 0;
-    var length = list.length;
-    var result = allocate(C, length);
-    while (length > index) result[index] = list[index++];
-    return result;
-  };
-
-  var addGetter = function (it, key, internal) {
-    dP(it, key, { get: function () { return this._d[internal]; } });
-  };
-
-  var $from = function from(source /* , mapfn, thisArg */) {
-    var O = toObject(source);
-    var aLen = arguments.length;
-    var mapfn = aLen > 1 ? arguments[1] : undefined;
-    var mapping = mapfn !== undefined;
-    var iterFn = getIterFn(O);
-    var i, length, values, result, step, iterator;
-    if (iterFn != undefined && !isArrayIter(iterFn)) {
-      for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {
-        values.push(step.value);
-      } O = values;
-    }
-    if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);
-    for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {
-      result[i] = mapping ? mapfn(O[i], i) : O[i];
-    }
-    return result;
-  };
-
-  var $of = function of(/* ...items */) {
-    var index = 0;
-    var length = arguments.length;
-    var result = allocate(this, length);
-    while (length > index) result[index] = arguments[index++];
-    return result;
-  };
-
-  // iOS Safari 6.x fails here
-  var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });
-
-  var $toLocaleString = function toLocaleString() {
-    return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);
-  };
-
-  var proto = {
-    copyWithin: function copyWithin(target, start /* , end */) {
-      return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
-    },
-    every: function every(callbackfn /* , thisArg */) {
-      return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars
-      return arrayFill.apply(validate(this), arguments);
-    },
-    filter: function filter(callbackfn /* , thisArg */) {
-      return speciesFromList(this, arrayFilter(validate(this), callbackfn,
-        arguments.length > 1 ? arguments[1] : undefined));
-    },
-    find: function find(predicate /* , thisArg */) {
-      return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    findIndex: function findIndex(predicate /* , thisArg */) {
-      return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    forEach: function forEach(callbackfn /* , thisArg */) {
-      arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    indexOf: function indexOf(searchElement /* , fromIndex */) {
-      return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    includes: function includes(searchElement /* , fromIndex */) {
-      return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    join: function join(separator) { // eslint-disable-line no-unused-vars
-      return arrayJoin.apply(validate(this), arguments);
-    },
-    lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars
-      return arrayLastIndexOf.apply(validate(this), arguments);
-    },
-    map: function map(mapfn /* , thisArg */) {
-      return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars
-      return arrayReduce.apply(validate(this), arguments);
-    },
-    reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars
-      return arrayReduceRight.apply(validate(this), arguments);
-    },
-    reverse: function reverse() {
-      var that = this;
-      var length = validate(that).length;
-      var middle = Math.floor(length / 2);
-      var index = 0;
-      var value;
-      while (index < middle) {
-        value = that[index];
-        that[index++] = that[--length];
-        that[length] = value;
-      } return that;
-    },
-    some: function some(callbackfn /* , thisArg */) {
-      return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    sort: function sort(comparefn) {
-      return arraySort.call(validate(this), comparefn);
-    },
-    subarray: function subarray(begin, end) {
-      var O = validate(this);
-      var length = O.length;
-      var $begin = toAbsoluteIndex(begin, length);
-      return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(
-        O.buffer,
-        O.byteOffset + $begin * O.BYTES_PER_ELEMENT,
-        toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)
-      );
-    }
-  };
-
-  var $slice = function slice(start, end) {
-    return speciesFromList(this, arraySlice.call(validate(this), start, end));
-  };
-
-  var $set = function set(arrayLike /* , offset */) {
-    validate(this);
-    var offset = toOffset(arguments[1], 1);
-    var length = this.length;
-    var src = toObject(arrayLike);
-    var len = toLength(src.length);
-    var index = 0;
-    if (len + offset > length) throw RangeError(WRONG_LENGTH);
-    while (index < len) this[offset + index] = src[index++];
-  };
-
-  var $iterators = {
-    entries: function entries() {
-      return arrayEntries.call(validate(this));
-    },
-    keys: function keys() {
-      return arrayKeys.call(validate(this));
-    },
-    values: function values() {
-      return arrayValues.call(validate(this));
-    }
-  };
-
-  var isTAIndex = function (target, key) {
-    return isObject(target)
-      && target[TYPED_ARRAY]
-      && typeof key != 'symbol'
-      && key in target
-      && String(+key) == String(key);
-  };
-  var $getDesc = function getOwnPropertyDescriptor(target, key) {
-    return isTAIndex(target, key = toPrimitive(key, true))
-      ? propertyDesc(2, target[key])
-      : gOPD(target, key);
-  };
-  var $setDesc = function defineProperty(target, key, desc) {
-    if (isTAIndex(target, key = toPrimitive(key, true))
-      && isObject(desc)
-      && has(desc, 'value')
-      && !has(desc, 'get')
-      && !has(desc, 'set')
-      // TODO: add validation descriptor w/o calling accessors
-      && !desc.configurable
-      && (!has(desc, 'writable') || desc.writable)
-      && (!has(desc, 'enumerable') || desc.enumerable)
-    ) {
-      target[key] = desc.value;
-      return target;
-    } return dP(target, key, desc);
-  };
-
-  if (!ALL_CONSTRUCTORS) {
-    $GOPD.f = $getDesc;
-    $DP.f = $setDesc;
-  }
-
-  $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {
-    getOwnPropertyDescriptor: $getDesc,
-    defineProperty: $setDesc
-  });
-
-  if (fails(function () { arrayToString.call({}); })) {
-    arrayToString = arrayToLocaleString = function toString() {
-      return arrayJoin.call(this);
-    };
-  }
-
-  var $TypedArrayPrototype$ = redefineAll({}, proto);
-  redefineAll($TypedArrayPrototype$, $iterators);
-  hide($TypedArrayPrototype$, ITERATOR, $iterators.values);
-  redefineAll($TypedArrayPrototype$, {
-    slice: $slice,
-    set: $set,
-    constructor: function () { /* noop */ },
-    toString: arrayToString,
-    toLocaleString: $toLocaleString
-  });
-  addGetter($TypedArrayPrototype$, 'buffer', 'b');
-  addGetter($TypedArrayPrototype$, 'byteOffset', 'o');
-  addGetter($TypedArrayPrototype$, 'byteLength', 'l');
-  addGetter($TypedArrayPrototype$, 'length', 'e');
-  dP($TypedArrayPrototype$, TAG, {
-    get: function () { return this[TYPED_ARRAY]; }
-  });
-
-  // eslint-disable-next-line max-statements
-  module.exports = function (KEY, BYTES, wrapper, CLAMPED) {
-    CLAMPED = !!CLAMPED;
-    var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';
-    var GETTER = 'get' + KEY;
-    var SETTER = 'set' + KEY;
-    var TypedArray = global[NAME];
-    var Base = TypedArray || {};
-    var TAC = TypedArray && getPrototypeOf(TypedArray);
-    var FORCED = !TypedArray || !$typed.ABV;
-    var O = {};
-    var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];
-    var getter = function (that, index) {
-      var data = that._d;
-      return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);
-    };
-    var setter = function (that, index, value) {
-      var data = that._d;
-      if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;
-      data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);
-    };
-    var addElement = function (that, index) {
-      dP(that, index, {
-        get: function () {
-          return getter(this, index);
-        },
-        set: function (value) {
-          return setter(this, index, value);
-        },
-        enumerable: true
-      });
-    };
-    if (FORCED) {
-      TypedArray = wrapper(function (that, data, $offset, $length) {
-        anInstance(that, TypedArray, NAME, '_d');
-        var index = 0;
-        var offset = 0;
-        var buffer, byteLength, length, klass;
-        if (!isObject(data)) {
-          length = toIndex(data);
-          byteLength = length * BYTES;
-          buffer = new $ArrayBuffer(byteLength);
-        } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
-          buffer = data;
-          offset = toOffset($offset, BYTES);
-          var $len = data.byteLength;
-          if ($length === undefined) {
-            if ($len % BYTES) throw RangeError(WRONG_LENGTH);
-            byteLength = $len - offset;
-            if (byteLength < 0) throw RangeError(WRONG_LENGTH);
-          } else {
-            byteLength = toLength($length) * BYTES;
-            if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);
-          }
-          length = byteLength / BYTES;
-        } else if (TYPED_ARRAY in data) {
-          return fromList(TypedArray, data);
-        } else {
-          return $from.call(TypedArray, data);
-        }
-        hide(that, '_d', {
-          b: buffer,
-          o: offset,
-          l: byteLength,
-          e: length,
-          v: new $DataView(buffer)
-        });
-        while (index < length) addElement(that, index++);
-      });
-      TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);
-      hide(TypedArrayPrototype, 'constructor', TypedArray);
-    } else if (!fails(function () {
-      TypedArray(1);
-    }) || !fails(function () {
-      new TypedArray(-1); // eslint-disable-line no-new
-    }) || !$iterDetect(function (iter) {
-      new TypedArray(); // eslint-disable-line no-new
-      new TypedArray(null); // eslint-disable-line no-new
-      new TypedArray(1.5); // eslint-disable-line no-new
-      new TypedArray(iter); // eslint-disable-line no-new
-    }, true)) {
-      TypedArray = wrapper(function (that, data, $offset, $length) {
-        anInstance(that, TypedArray, NAME);
-        var klass;
-        // `ws` module bug, temporarily remove validation length for Uint8Array
-        // https://github.com/websockets/ws/pull/645
-        if (!isObject(data)) return new Base(toIndex(data));
-        if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
-          return $length !== undefined
-            ? new Base(data, toOffset($offset, BYTES), $length)
-            : $offset !== undefined
-              ? new Base(data, toOffset($offset, BYTES))
-              : new Base(data);
-        }
-        if (TYPED_ARRAY in data) return fromList(TypedArray, data);
-        return $from.call(TypedArray, data);
-      });
-      arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {
-        if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);
-      });
-      TypedArray[PROTOTYPE] = TypedArrayPrototype;
-      if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;
-    }
-    var $nativeIterator = TypedArrayPrototype[ITERATOR];
-    var CORRECT_ITER_NAME = !!$nativeIterator
-      && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);
-    var $iterator = $iterators.values;
-    hide(TypedArray, TYPED_CONSTRUCTOR, true);
-    hide(TypedArrayPrototype, TYPED_ARRAY, NAME);
-    hide(TypedArrayPrototype, VIEW, true);
-    hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
-
-    if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {
-      dP(TypedArrayPrototype, TAG, {
-        get: function () { return NAME; }
-      });
-    }
-
-    O[NAME] = TypedArray;
-
-    $export($export.G + $export.W + $export.F * (TypedArray != Base), O);
-
-    $export($export.S, NAME, {
-      BYTES_PER_ELEMENT: BYTES
-    });
-
-    $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {
-      from: $from,
-      of: $of
-    });
-
-    if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);
-
-    $export($export.P, NAME, proto);
-
-    setSpecies(NAME);
-
-    $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });
-
-    $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);
-
-    if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;
-
-    $export($export.P + $export.F * fails(function () {
-      new TypedArray(1).slice();
-    }), NAME, { slice: $slice });
-
-    $export($export.P + $export.F * (fails(function () {
-      return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();
-    }) || !fails(function () {
-      TypedArrayPrototype.toLocaleString.call([1, 2]);
-    })), NAME, { toLocaleString: $toLocaleString });
-
-    Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;
-    if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);
-  };
-} else module.exports = function () { /* empty */ };
diff --git a/templetes/node_modules/core-js/library/modules/_typed-buffer.js b/templetes/node_modules/core-js/library/modules/_typed-buffer.js
deleted file mode 100644
index c24cef38..00000000
--- a/templetes/node_modules/core-js/library/modules/_typed-buffer.js
+++ /dev/null
@@ -1,276 +0,0 @@
-'use strict';
-var global = require('./_global');
-var DESCRIPTORS = require('./_descriptors');
-var LIBRARY = require('./_library');
-var $typed = require('./_typed');
-var hide = require('./_hide');
-var redefineAll = require('./_redefine-all');
-var fails = require('./_fails');
-var anInstance = require('./_an-instance');
-var toInteger = require('./_to-integer');
-var toLength = require('./_to-length');
-var toIndex = require('./_to-index');
-var gOPN = require('./_object-gopn').f;
-var dP = require('./_object-dp').f;
-var arrayFill = require('./_array-fill');
-var setToStringTag = require('./_set-to-string-tag');
-var ARRAY_BUFFER = 'ArrayBuffer';
-var DATA_VIEW = 'DataView';
-var PROTOTYPE = 'prototype';
-var WRONG_LENGTH = 'Wrong length!';
-var WRONG_INDEX = 'Wrong index!';
-var $ArrayBuffer = global[ARRAY_BUFFER];
-var $DataView = global[DATA_VIEW];
-var Math = global.Math;
-var RangeError = global.RangeError;
-// eslint-disable-next-line no-shadow-restricted-names
-var Infinity = global.Infinity;
-var BaseBuffer = $ArrayBuffer;
-var abs = Math.abs;
-var pow = Math.pow;
-var floor = Math.floor;
-var log = Math.log;
-var LN2 = Math.LN2;
-var BUFFER = 'buffer';
-var BYTE_LENGTH = 'byteLength';
-var BYTE_OFFSET = 'byteOffset';
-var $BUFFER = DESCRIPTORS ? '_b' : BUFFER;
-var $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;
-var $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;
-
-// IEEE754 conversions based on https://github.com/feross/ieee754
-function packIEEE754(value, mLen, nBytes) {
-  var buffer = new Array(nBytes);
-  var eLen = nBytes * 8 - mLen - 1;
-  var eMax = (1 << eLen) - 1;
-  var eBias = eMax >> 1;
-  var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;
-  var i = 0;
-  var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
-  var e, m, c;
-  value = abs(value);
-  // eslint-disable-next-line no-self-compare
-  if (value != value || value === Infinity) {
-    // eslint-disable-next-line no-self-compare
-    m = value != value ? 1 : 0;
-    e = eMax;
-  } else {
-    e = floor(log(value) / LN2);
-    if (value * (c = pow(2, -e)) < 1) {
-      e--;
-      c *= 2;
-    }
-    if (e + eBias >= 1) {
-      value += rt / c;
-    } else {
-      value += rt * pow(2, 1 - eBias);
-    }
-    if (value * c >= 2) {
-      e++;
-      c /= 2;
-    }
-    if (e + eBias >= eMax) {
-      m = 0;
-      e = eMax;
-    } else if (e + eBias >= 1) {
-      m = (value * c - 1) * pow(2, mLen);
-      e = e + eBias;
-    } else {
-      m = value * pow(2, eBias - 1) * pow(2, mLen);
-      e = 0;
-    }
-  }
-  for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);
-  e = e << mLen | m;
-  eLen += mLen;
-  for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);
-  buffer[--i] |= s * 128;
-  return buffer;
-}
-function unpackIEEE754(buffer, mLen, nBytes) {
-  var eLen = nBytes * 8 - mLen - 1;
-  var eMax = (1 << eLen) - 1;
-  var eBias = eMax >> 1;
-  var nBits = eLen - 7;
-  var i = nBytes - 1;
-  var s = buffer[i--];
-  var e = s & 127;
-  var m;
-  s >>= 7;
-  for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);
-  m = e & (1 << -nBits) - 1;
-  e >>= -nBits;
-  nBits += mLen;
-  for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);
-  if (e === 0) {
-    e = 1 - eBias;
-  } else if (e === eMax) {
-    return m ? NaN : s ? -Infinity : Infinity;
-  } else {
-    m = m + pow(2, mLen);
-    e = e - eBias;
-  } return (s ? -1 : 1) * m * pow(2, e - mLen);
-}
-
-function unpackI32(bytes) {
-  return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];
-}
-function packI8(it) {
-  return [it & 0xff];
-}
-function packI16(it) {
-  return [it & 0xff, it >> 8 & 0xff];
-}
-function packI32(it) {
-  return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];
-}
-function packF64(it) {
-  return packIEEE754(it, 52, 8);
-}
-function packF32(it) {
-  return packIEEE754(it, 23, 4);
-}
-
-function addGetter(C, key, internal) {
-  dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });
-}
-
-function get(view, bytes, index, isLittleEndian) {
-  var numIndex = +index;
-  var intIndex = toIndex(numIndex);
-  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
-  var store = view[$BUFFER]._b;
-  var start = intIndex + view[$OFFSET];
-  var pack = store.slice(start, start + bytes);
-  return isLittleEndian ? pack : pack.reverse();
-}
-function set(view, bytes, index, conversion, value, isLittleEndian) {
-  var numIndex = +index;
-  var intIndex = toIndex(numIndex);
-  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
-  var store = view[$BUFFER]._b;
-  var start = intIndex + view[$OFFSET];
-  var pack = conversion(+value);
-  for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];
-}
-
-if (!$typed.ABV) {
-  $ArrayBuffer = function ArrayBuffer(length) {
-    anInstance(this, $ArrayBuffer, ARRAY_BUFFER);
-    var byteLength = toIndex(length);
-    this._b = arrayFill.call(new Array(byteLength), 0);
-    this[$LENGTH] = byteLength;
-  };
-
-  $DataView = function DataView(buffer, byteOffset, byteLength) {
-    anInstance(this, $DataView, DATA_VIEW);
-    anInstance(buffer, $ArrayBuffer, DATA_VIEW);
-    var bufferLength = buffer[$LENGTH];
-    var offset = toInteger(byteOffset);
-    if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');
-    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
-    if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);
-    this[$BUFFER] = buffer;
-    this[$OFFSET] = offset;
-    this[$LENGTH] = byteLength;
-  };
-
-  if (DESCRIPTORS) {
-    addGetter($ArrayBuffer, BYTE_LENGTH, '_l');
-    addGetter($DataView, BUFFER, '_b');
-    addGetter($DataView, BYTE_LENGTH, '_l');
-    addGetter($DataView, BYTE_OFFSET, '_o');
-  }
-
-  redefineAll($DataView[PROTOTYPE], {
-    getInt8: function getInt8(byteOffset) {
-      return get(this, 1, byteOffset)[0] << 24 >> 24;
-    },
-    getUint8: function getUint8(byteOffset) {
-      return get(this, 1, byteOffset)[0];
-    },
-    getInt16: function getInt16(byteOffset /* , littleEndian */) {
-      var bytes = get(this, 2, byteOffset, arguments[1]);
-      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;
-    },
-    getUint16: function getUint16(byteOffset /* , littleEndian */) {
-      var bytes = get(this, 2, byteOffset, arguments[1]);
-      return bytes[1] << 8 | bytes[0];
-    },
-    getInt32: function getInt32(byteOffset /* , littleEndian */) {
-      return unpackI32(get(this, 4, byteOffset, arguments[1]));
-    },
-    getUint32: function getUint32(byteOffset /* , littleEndian */) {
-      return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;
-    },
-    getFloat32: function getFloat32(byteOffset /* , littleEndian */) {
-      return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);
-    },
-    getFloat64: function getFloat64(byteOffset /* , littleEndian */) {
-      return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);
-    },
-    setInt8: function setInt8(byteOffset, value) {
-      set(this, 1, byteOffset, packI8, value);
-    },
-    setUint8: function setUint8(byteOffset, value) {
-      set(this, 1, byteOffset, packI8, value);
-    },
-    setInt16: function setInt16(byteOffset, value /* , littleEndian */) {
-      set(this, 2, byteOffset, packI16, value, arguments[2]);
-    },
-    setUint16: function setUint16(byteOffset, value /* , littleEndian */) {
-      set(this, 2, byteOffset, packI16, value, arguments[2]);
-    },
-    setInt32: function setInt32(byteOffset, value /* , littleEndian */) {
-      set(this, 4, byteOffset, packI32, value, arguments[2]);
-    },
-    setUint32: function setUint32(byteOffset, value /* , littleEndian */) {
-      set(this, 4, byteOffset, packI32, value, arguments[2]);
-    },
-    setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {
-      set(this, 4, byteOffset, packF32, value, arguments[2]);
-    },
-    setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {
-      set(this, 8, byteOffset, packF64, value, arguments[2]);
-    }
-  });
-} else {
-  if (!fails(function () {
-    $ArrayBuffer(1);
-  }) || !fails(function () {
-    new $ArrayBuffer(-1); // eslint-disable-line no-new
-  }) || fails(function () {
-    new $ArrayBuffer(); // eslint-disable-line no-new
-    new $ArrayBuffer(1.5); // eslint-disable-line no-new
-    new $ArrayBuffer(NaN); // eslint-disable-line no-new
-    return $ArrayBuffer.name != ARRAY_BUFFER;
-  })) {
-    $ArrayBuffer = function ArrayBuffer(length) {
-      anInstance(this, $ArrayBuffer);
-      return new BaseBuffer(toIndex(length));
-    };
-    var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];
-    for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {
-      if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);
-    }
-    if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;
-  }
-  // iOS Safari 7.x bug
-  var view = new $DataView(new $ArrayBuffer(2));
-  var $setInt8 = $DataView[PROTOTYPE].setInt8;
-  view.setInt8(0, 2147483648);
-  view.setInt8(1, 2147483649);
-  if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {
-    setInt8: function setInt8(byteOffset, value) {
-      $setInt8.call(this, byteOffset, value << 24 >> 24);
-    },
-    setUint8: function setUint8(byteOffset, value) {
-      $setInt8.call(this, byteOffset, value << 24 >> 24);
-    }
-  }, true);
-}
-setToStringTag($ArrayBuffer, ARRAY_BUFFER);
-setToStringTag($DataView, DATA_VIEW);
-hide($DataView[PROTOTYPE], $typed.VIEW, true);
-exports[ARRAY_BUFFER] = $ArrayBuffer;
-exports[DATA_VIEW] = $DataView;
diff --git a/templetes/node_modules/core-js/library/modules/_typed.js b/templetes/node_modules/core-js/library/modules/_typed.js
deleted file mode 100644
index 8747ffd7..00000000
--- a/templetes/node_modules/core-js/library/modules/_typed.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var global = require('./_global');
-var hide = require('./_hide');
-var uid = require('./_uid');
-var TYPED = uid('typed_array');
-var VIEW = uid('view');
-var ABV = !!(global.ArrayBuffer && global.DataView);
-var CONSTR = ABV;
-var i = 0;
-var l = 9;
-var Typed;
-
-var TypedArrayConstructors = (
-  'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'
-).split(',');
-
-while (i < l) {
-  if (Typed = global[TypedArrayConstructors[i++]]) {
-    hide(Typed.prototype, TYPED, true);
-    hide(Typed.prototype, VIEW, true);
-  } else CONSTR = false;
-}
-
-module.exports = {
-  ABV: ABV,
-  CONSTR: CONSTR,
-  TYPED: TYPED,
-  VIEW: VIEW
-};
diff --git a/templetes/node_modules/core-js/library/modules/_uid.js b/templetes/node_modules/core-js/library/modules/_uid.js
deleted file mode 100644
index ffbe7185..00000000
--- a/templetes/node_modules/core-js/library/modules/_uid.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var id = 0;
-var px = Math.random();
-module.exports = function (key) {
-  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
-};
diff --git a/templetes/node_modules/core-js/library/modules/_user-agent.js b/templetes/node_modules/core-js/library/modules/_user-agent.js
deleted file mode 100644
index 363fedc2..00000000
--- a/templetes/node_modules/core-js/library/modules/_user-agent.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var global = require('./_global');
-var navigator = global.navigator;
-
-module.exports = navigator && navigator.userAgent || '';
diff --git a/templetes/node_modules/core-js/library/modules/_validate-collection.js b/templetes/node_modules/core-js/library/modules/_validate-collection.js
deleted file mode 100644
index cec1ceff..00000000
--- a/templetes/node_modules/core-js/library/modules/_validate-collection.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var isObject = require('./_is-object');
-module.exports = function (it, TYPE) {
-  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
-  return it;
-};
diff --git a/templetes/node_modules/core-js/library/modules/_wks-define.js b/templetes/node_modules/core-js/library/modules/_wks-define.js
deleted file mode 100644
index 7284d6ad..00000000
--- a/templetes/node_modules/core-js/library/modules/_wks-define.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var global = require('./_global');
-var core = require('./_core');
-var LIBRARY = require('./_library');
-var wksExt = require('./_wks-ext');
-var defineProperty = require('./_object-dp').f;
-module.exports = function (name) {
-  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
-  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
-};
diff --git a/templetes/node_modules/core-js/library/modules/_wks-ext.js b/templetes/node_modules/core-js/library/modules/_wks-ext.js
deleted file mode 100644
index 13bd83b1..00000000
--- a/templetes/node_modules/core-js/library/modules/_wks-ext.js
+++ /dev/null
@@ -1 +0,0 @@
-exports.f = require('./_wks');
diff --git a/templetes/node_modules/core-js/library/modules/_wks.js b/templetes/node_modules/core-js/library/modules/_wks.js
deleted file mode 100644
index e33f857a..00000000
--- a/templetes/node_modules/core-js/library/modules/_wks.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var store = require('./_shared')('wks');
-var uid = require('./_uid');
-var Symbol = require('./_global').Symbol;
-var USE_SYMBOL = typeof Symbol == 'function';
-
-var $exports = module.exports = function (name) {
-  return store[name] || (store[name] =
-    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
-};
-
-$exports.store = store;
diff --git a/templetes/node_modules/core-js/modules/_path.js b/templetes/node_modules/core-js/modules/_path.js
deleted file mode 100644
index 754592ad..00000000
--- a/templetes/node_modules/core-js/modules/_path.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('./_global');
diff --git a/templetes/node_modules/core-js/modules/_perform.js b/templetes/node_modules/core-js/modules/_perform.js
deleted file mode 100644
index bfc7b296..00000000
--- a/templetes/node_modules/core-js/modules/_perform.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = function (exec) {
-  try {
-    return { e: false, v: exec() };
-  } catch (e) {
-    return { e: true, v: e };
-  }
-};
diff --git a/templetes/node_modules/core-js/modules/_promise-resolve.js b/templetes/node_modules/core-js/modules/_promise-resolve.js
deleted file mode 100644
index c3cac764..00000000
--- a/templetes/node_modules/core-js/modules/_promise-resolve.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var anObject = require('./_an-object');
-var isObject = require('./_is-object');
-var newPromiseCapability = require('./_new-promise-capability');
-
-module.exports = function (C, x) {
-  anObject(C);
-  if (isObject(x) && x.constructor === C) return x;
-  var promiseCapability = newPromiseCapability.f(C);
-  var resolve = promiseCapability.resolve;
-  resolve(x);
-  return promiseCapability.promise;
-};
diff --git a/templetes/node_modules/core-js/modules/_property-desc.js b/templetes/node_modules/core-js/modules/_property-desc.js
deleted file mode 100644
index 09059340..00000000
--- a/templetes/node_modules/core-js/modules/_property-desc.js
+++ /dev/null
@@ -1,8 +0,0 @@
-module.exports = function (bitmap, value) {
-  return {
-    enumerable: !(bitmap & 1),
-    configurable: !(bitmap & 2),
-    writable: !(bitmap & 4),
-    value: value
-  };
-};
diff --git a/templetes/node_modules/core-js/modules/_redefine-all.js b/templetes/node_modules/core-js/modules/_redefine-all.js
deleted file mode 100644
index dcf7944f..00000000
--- a/templetes/node_modules/core-js/modules/_redefine-all.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var redefine = require('./_redefine');
-module.exports = function (target, src, safe) {
-  for (var key in src) redefine(target, key, src[key], safe);
-  return target;
-};
diff --git a/templetes/node_modules/core-js/modules/_redefine.js b/templetes/node_modules/core-js/modules/_redefine.js
deleted file mode 100644
index 442ea611..00000000
--- a/templetes/node_modules/core-js/modules/_redefine.js
+++ /dev/null
@@ -1,31 +0,0 @@
-var global = require('./_global');
-var hide = require('./_hide');
-var has = require('./_has');
-var SRC = require('./_uid')('src');
-var $toString = require('./_function-to-string');
-var TO_STRING = 'toString';
-var TPL = ('' + $toString).split(TO_STRING);
-
-require('./_core').inspectSource = function (it) {
-  return $toString.call(it);
-};
-
-(module.exports = function (O, key, val, safe) {
-  var isFunction = typeof val == 'function';
-  if (isFunction) has(val, 'name') || hide(val, 'name', key);
-  if (O[key] === val) return;
-  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
-  if (O === global) {
-    O[key] = val;
-  } else if (!safe) {
-    delete O[key];
-    hide(O, key, val);
-  } else if (O[key]) {
-    O[key] = val;
-  } else {
-    hide(O, key, val);
-  }
-// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
-})(Function.prototype, TO_STRING, function toString() {
-  return typeof this == 'function' && this[SRC] || $toString.call(this);
-});
diff --git a/templetes/node_modules/core-js/modules/_regexp-exec-abstract.js b/templetes/node_modules/core-js/modules/_regexp-exec-abstract.js
deleted file mode 100644
index b722aad1..00000000
--- a/templetes/node_modules/core-js/modules/_regexp-exec-abstract.js
+++ /dev/null
@@ -1,21 +0,0 @@
-'use strict';
-
-var classof = require('./_classof');
-var builtinExec = RegExp.prototype.exec;
-
- // `RegExpExec` abstract operation
-// https://tc39.github.io/ecma262/#sec-regexpexec
-module.exports = function (R, S) {
-  var exec = R.exec;
-  if (typeof exec === 'function') {
-    var result = exec.call(R, S);
-    if (typeof result !== 'object') {
-      throw new TypeError('RegExp exec method returned something other than an Object or null');
-    }
-    return result;
-  }
-  if (classof(R) !== 'RegExp') {
-    throw new TypeError('RegExp#exec called on incompatible receiver');
-  }
-  return builtinExec.call(R, S);
-};
diff --git a/templetes/node_modules/core-js/modules/_regexp-exec.js b/templetes/node_modules/core-js/modules/_regexp-exec.js
deleted file mode 100644
index f88bfe99..00000000
--- a/templetes/node_modules/core-js/modules/_regexp-exec.js
+++ /dev/null
@@ -1,58 +0,0 @@
-'use strict';
-
-var regexpFlags = require('./_flags');
-
-var nativeExec = RegExp.prototype.exec;
-// This always refers to the native implementation, because the
-// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,
-// which loads this file before patching the method.
-var nativeReplace = String.prototype.replace;
-
-var patchedExec = nativeExec;
-
-var LAST_INDEX = 'lastIndex';
-
-var UPDATES_LAST_INDEX_WRONG = (function () {
-  var re1 = /a/,
-      re2 = /b*/g;
-  nativeExec.call(re1, 'a');
-  nativeExec.call(re2, 'a');
-  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;
-})();
-
-// nonparticipating capturing group, copied from es5-shim's String#split patch.
-var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;
-
-var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;
-
-if (PATCH) {
-  patchedExec = function exec(str) {
-    var re = this;
-    var lastIndex, reCopy, match, i;
-
-    if (NPCG_INCLUDED) {
-      reCopy = new RegExp('^' + re.source + '$(?!\\s)', regexpFlags.call(re));
-    }
-    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];
-
-    match = nativeExec.call(re, str);
-
-    if (UPDATES_LAST_INDEX_WRONG && match) {
-      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;
-    }
-    if (NPCG_INCLUDED && match && match.length > 1) {
-      // Fix browsers whose `exec` methods don't consistently return `undefined`
-      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
-      // eslint-disable-next-line no-loop-func
-      nativeReplace.call(match[0], reCopy, function () {
-        for (i = 1; i < arguments.length - 2; i++) {
-          if (arguments[i] === undefined) match[i] = undefined;
-        }
-      });
-    }
-
-    return match;
-  };
-}
-
-module.exports = patchedExec;
diff --git a/templetes/node_modules/core-js/modules/_replacer.js b/templetes/node_modules/core-js/modules/_replacer.js
deleted file mode 100644
index c37703dd..00000000
--- a/templetes/node_modules/core-js/modules/_replacer.js
+++ /dev/null
@@ -1,8 +0,0 @@
-module.exports = function (regExp, replace) {
-  var replacer = replace === Object(replace) ? function (part) {
-    return replace[part];
-  } : replace;
-  return function (it) {
-    return String(it).replace(regExp, replacer);
-  };
-};
diff --git a/templetes/node_modules/core-js/modules/_same-value.js b/templetes/node_modules/core-js/modules/_same-value.js
deleted file mode 100644
index c6d045e8..00000000
--- a/templetes/node_modules/core-js/modules/_same-value.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// 7.2.9 SameValue(x, y)
-module.exports = Object.is || function is(x, y) {
-  // eslint-disable-next-line no-self-compare
-  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
-};
diff --git a/templetes/node_modules/core-js/modules/_set-collection-from.js b/templetes/node_modules/core-js/modules/_set-collection-from.js
deleted file mode 100644
index d5001f93..00000000
--- a/templetes/node_modules/core-js/modules/_set-collection-from.js
+++ /dev/null
@@ -1,28 +0,0 @@
-'use strict';
-// https://tc39.github.io/proposal-setmap-offrom/
-var $export = require('./_export');
-var aFunction = require('./_a-function');
-var ctx = require('./_ctx');
-var forOf = require('./_for-of');
-
-module.exports = function (COLLECTION) {
-  $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {
-    var mapFn = arguments[1];
-    var mapping, A, n, cb;
-    aFunction(this);
-    mapping = mapFn !== undefined;
-    if (mapping) aFunction(mapFn);
-    if (source == undefined) return new this();
-    A = [];
-    if (mapping) {
-      n = 0;
-      cb = ctx(mapFn, arguments[2], 2);
-      forOf(source, false, function (nextItem) {
-        A.push(cb(nextItem, n++));
-      });
-    } else {
-      forOf(source, false, A.push, A);
-    }
-    return new this(A);
-  } });
-};
diff --git a/templetes/node_modules/core-js/modules/_set-collection-of.js b/templetes/node_modules/core-js/modules/_set-collection-of.js
deleted file mode 100644
index f559af3f..00000000
--- a/templetes/node_modules/core-js/modules/_set-collection-of.js
+++ /dev/null
@@ -1,12 +0,0 @@
-'use strict';
-// https://tc39.github.io/proposal-setmap-offrom/
-var $export = require('./_export');
-
-module.exports = function (COLLECTION) {
-  $export($export.S, COLLECTION, { of: function of() {
-    var length = arguments.length;
-    var A = new Array(length);
-    while (length--) A[length] = arguments[length];
-    return new this(A);
-  } });
-};
diff --git a/templetes/node_modules/core-js/modules/_set-proto.js b/templetes/node_modules/core-js/modules/_set-proto.js
deleted file mode 100644
index c1990622..00000000
--- a/templetes/node_modules/core-js/modules/_set-proto.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// Works with __proto__ only. Old v8 can't work with null proto objects.
-/* eslint-disable no-proto */
-var isObject = require('./_is-object');
-var anObject = require('./_an-object');
-var check = function (O, proto) {
-  anObject(O);
-  if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
-};
-module.exports = {
-  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
-    function (test, buggy, set) {
-      try {
-        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);
-        set(test, []);
-        buggy = !(test instanceof Array);
-      } catch (e) { buggy = true; }
-      return function setPrototypeOf(O, proto) {
-        check(O, proto);
-        if (buggy) O.__proto__ = proto;
-        else set(O, proto);
-        return O;
-      };
-    }({}, false) : undefined),
-  check: check
-};
diff --git a/templetes/node_modules/core-js/modules/_set-species.js b/templetes/node_modules/core-js/modules/_set-species.js
deleted file mode 100644
index 2d505d2a..00000000
--- a/templetes/node_modules/core-js/modules/_set-species.js
+++ /dev/null
@@ -1,13 +0,0 @@
-'use strict';
-var global = require('./_global');
-var dP = require('./_object-dp');
-var DESCRIPTORS = require('./_descriptors');
-var SPECIES = require('./_wks')('species');
-
-module.exports = function (KEY) {
-  var C = global[KEY];
-  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {
-    configurable: true,
-    get: function () { return this; }
-  });
-};
diff --git a/templetes/node_modules/core-js/modules/_set-to-string-tag.js b/templetes/node_modules/core-js/modules/_set-to-string-tag.js
deleted file mode 100644
index 5bd64144..00000000
--- a/templetes/node_modules/core-js/modules/_set-to-string-tag.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var def = require('./_object-dp').f;
-var has = require('./_has');
-var TAG = require('./_wks')('toStringTag');
-
-module.exports = function (it, tag, stat) {
-  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
-};
diff --git a/templetes/node_modules/core-js/modules/_shared-key.js b/templetes/node_modules/core-js/modules/_shared-key.js
deleted file mode 100644
index d47fe7a2..00000000
--- a/templetes/node_modules/core-js/modules/_shared-key.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var shared = require('./_shared')('keys');
-var uid = require('./_uid');
-module.exports = function (key) {
-  return shared[key] || (shared[key] = uid(key));
-};
diff --git a/templetes/node_modules/core-js/modules/_shared.js b/templetes/node_modules/core-js/modules/_shared.js
deleted file mode 100644
index 3adec722..00000000
--- a/templetes/node_modules/core-js/modules/_shared.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var core = require('./_core');
-var global = require('./_global');
-var SHARED = '__core-js_shared__';
-var store = global[SHARED] || (global[SHARED] = {});
-
-(module.exports = function (key, value) {
-  return store[key] || (store[key] = value !== undefined ? value : {});
-})('versions', []).push({
-  version: core.version,
-  mode: require('./_library') ? 'pure' : 'global',
-  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'
-});
diff --git a/templetes/node_modules/core-js/modules/_species-constructor.js b/templetes/node_modules/core-js/modules/_species-constructor.js
deleted file mode 100644
index 0cb4ffb8..00000000
--- a/templetes/node_modules/core-js/modules/_species-constructor.js
+++ /dev/null
@@ -1,9 +0,0 @@
-// 7.3.20 SpeciesConstructor(O, defaultConstructor)
-var anObject = require('./_an-object');
-var aFunction = require('./_a-function');
-var SPECIES = require('./_wks')('species');
-module.exports = function (O, D) {
-  var C = anObject(O).constructor;
-  var S;
-  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
-};
diff --git a/templetes/node_modules/core-js/modules/_strict-method.js b/templetes/node_modules/core-js/modules/_strict-method.js
deleted file mode 100644
index e68f41bb..00000000
--- a/templetes/node_modules/core-js/modules/_strict-method.js
+++ /dev/null
@@ -1,9 +0,0 @@
-'use strict';
-var fails = require('./_fails');
-
-module.exports = function (method, arg) {
-  return !!method && fails(function () {
-    // eslint-disable-next-line no-useless-call
-    arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);
-  });
-};
diff --git a/templetes/node_modules/core-js/modules/_string-at.js b/templetes/node_modules/core-js/modules/_string-at.js
deleted file mode 100644
index 88d66bd1..00000000
--- a/templetes/node_modules/core-js/modules/_string-at.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var toInteger = require('./_to-integer');
-var defined = require('./_defined');
-// true  -> String#at
-// false -> String#codePointAt
-module.exports = function (TO_STRING) {
-  return function (that, pos) {
-    var s = String(defined(that));
-    var i = toInteger(pos);
-    var l = s.length;
-    var a, b;
-    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
-    a = s.charCodeAt(i);
-    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
-      ? TO_STRING ? s.charAt(i) : a
-      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
-  };
-};
diff --git a/templetes/node_modules/core-js/modules/_string-context.js b/templetes/node_modules/core-js/modules/_string-context.js
deleted file mode 100644
index becf3fbe..00000000
--- a/templetes/node_modules/core-js/modules/_string-context.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// helper for String#{startsWith, endsWith, includes}
-var isRegExp = require('./_is-regexp');
-var defined = require('./_defined');
-
-module.exports = function (that, searchString, NAME) {
-  if (isRegExp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!");
-  return String(defined(that));
-};
diff --git a/templetes/node_modules/core-js/modules/_string-html.js b/templetes/node_modules/core-js/modules/_string-html.js
deleted file mode 100644
index 1dcc95bc..00000000
--- a/templetes/node_modules/core-js/modules/_string-html.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var $export = require('./_export');
-var fails = require('./_fails');
-var defined = require('./_defined');
-var quot = /"/g;
-// B.2.3.2.1 CreateHTML(string, tag, attribute, value)
-var createHTML = function (string, tag, attribute, value) {
-  var S = String(defined(string));
-  var p1 = '<' + tag;
-  if (attribute !== '') p1 += ' ' + attribute + '="' + String(value).replace(quot, '&quot;') + '"';
-  return p1 + '>' + S + '</' + tag + '>';
-};
-module.exports = function (NAME, exec) {
-  var O = {};
-  O[NAME] = exec(createHTML);
-  $export($export.P + $export.F * fails(function () {
-    var test = ''[NAME]('"');
-    return test !== test.toLowerCase() || test.split('"').length > 3;
-  }), 'String', O);
-};
diff --git a/templetes/node_modules/core-js/modules/_string-pad.js b/templetes/node_modules/core-js/modules/_string-pad.js
deleted file mode 100644
index ceb6077f..00000000
--- a/templetes/node_modules/core-js/modules/_string-pad.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// https://github.com/tc39/proposal-string-pad-start-end
-var toLength = require('./_to-length');
-var repeat = require('./_string-repeat');
-var defined = require('./_defined');
-
-module.exports = function (that, maxLength, fillString, left) {
-  var S = String(defined(that));
-  var stringLength = S.length;
-  var fillStr = fillString === undefined ? ' ' : String(fillString);
-  var intMaxLength = toLength(maxLength);
-  if (intMaxLength <= stringLength || fillStr == '') return S;
-  var fillLen = intMaxLength - stringLength;
-  var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
-  if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);
-  return left ? stringFiller + S : S + stringFiller;
-};
diff --git a/templetes/node_modules/core-js/modules/_string-repeat.js b/templetes/node_modules/core-js/modules/_string-repeat.js
deleted file mode 100644
index a69b9626..00000000
--- a/templetes/node_modules/core-js/modules/_string-repeat.js
+++ /dev/null
@@ -1,12 +0,0 @@
-'use strict';
-var toInteger = require('./_to-integer');
-var defined = require('./_defined');
-
-module.exports = function repeat(count) {
-  var str = String(defined(this));
-  var res = '';
-  var n = toInteger(count);
-  if (n < 0 || n == Infinity) throw RangeError("Count can't be negative");
-  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;
-  return res;
-};
diff --git a/templetes/node_modules/core-js/modules/_string-trim.js b/templetes/node_modules/core-js/modules/_string-trim.js
deleted file mode 100644
index 6b54a81a..00000000
--- a/templetes/node_modules/core-js/modules/_string-trim.js
+++ /dev/null
@@ -1,30 +0,0 @@
-var $export = require('./_export');
-var defined = require('./_defined');
-var fails = require('./_fails');
-var spaces = require('./_string-ws');
-var space = '[' + spaces + ']';
-var non = '\u200b\u0085';
-var ltrim = RegExp('^' + space + space + '*');
-var rtrim = RegExp(space + space + '*$');
-
-var exporter = function (KEY, exec, ALIAS) {
-  var exp = {};
-  var FORCE = fails(function () {
-    return !!spaces[KEY]() || non[KEY]() != non;
-  });
-  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];
-  if (ALIAS) exp[ALIAS] = fn;
-  $export($export.P + $export.F * FORCE, 'String', exp);
-};
-
-// 1 -> String#trimLeft
-// 2 -> String#trimRight
-// 3 -> String#trim
-var trim = exporter.trim = function (string, TYPE) {
-  string = String(defined(string));
-  if (TYPE & 1) string = string.replace(ltrim, '');
-  if (TYPE & 2) string = string.replace(rtrim, '');
-  return string;
-};
-
-module.exports = exporter;
diff --git a/templetes/node_modules/core-js/modules/_string-ws.js b/templetes/node_modules/core-js/modules/_string-ws.js
deleted file mode 100644
index 2c68cf9f..00000000
--- a/templetes/node_modules/core-js/modules/_string-ws.js
+++ /dev/null
@@ -1,2 +0,0 @@
-module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
-  '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
diff --git a/templetes/node_modules/core-js/modules/_task.js b/templetes/node_modules/core-js/modules/_task.js
deleted file mode 100644
index 8777a6e2..00000000
--- a/templetes/node_modules/core-js/modules/_task.js
+++ /dev/null
@@ -1,84 +0,0 @@
-var ctx = require('./_ctx');
-var invoke = require('./_invoke');
-var html = require('./_html');
-var cel = require('./_dom-create');
-var global = require('./_global');
-var process = global.process;
-var setTask = global.setImmediate;
-var clearTask = global.clearImmediate;
-var MessageChannel = global.MessageChannel;
-var Dispatch = global.Dispatch;
-var counter = 0;
-var queue = {};
-var ONREADYSTATECHANGE = 'onreadystatechange';
-var defer, channel, port;
-var run = function () {
-  var id = +this;
-  // eslint-disable-next-line no-prototype-builtins
-  if (queue.hasOwnProperty(id)) {
-    var fn = queue[id];
-    delete queue[id];
-    fn();
-  }
-};
-var listener = function (event) {
-  run.call(event.data);
-};
-// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
-if (!setTask || !clearTask) {
-  setTask = function setImmediate(fn) {
-    var args = [];
-    var i = 1;
-    while (arguments.length > i) args.push(arguments[i++]);
-    queue[++counter] = function () {
-      // eslint-disable-next-line no-new-func
-      invoke(typeof fn == 'function' ? fn : Function(fn), args);
-    };
-    defer(counter);
-    return counter;
-  };
-  clearTask = function clearImmediate(id) {
-    delete queue[id];
-  };
-  // Node.js 0.8-
-  if (require('./_cof')(process) == 'process') {
-    defer = function (id) {
-      process.nextTick(ctx(run, id, 1));
-    };
-  // Sphere (JS game engine) Dispatch API
-  } else if (Dispatch && Dispatch.now) {
-    defer = function (id) {
-      Dispatch.now(ctx(run, id, 1));
-    };
-  // Browsers with MessageChannel, includes WebWorkers
-  } else if (MessageChannel) {
-    channel = new MessageChannel();
-    port = channel.port2;
-    channel.port1.onmessage = listener;
-    defer = ctx(port.postMessage, port, 1);
-  // Browsers with postMessage, skip WebWorkers
-  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
-  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {
-    defer = function (id) {
-      global.postMessage(id + '', '*');
-    };
-    global.addEventListener('message', listener, false);
-  // IE8-
-  } else if (ONREADYSTATECHANGE in cel('script')) {
-    defer = function (id) {
-      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {
-        html.removeChild(this);
-        run.call(id);
-      };
-    };
-  // Rest old browsers
-  } else {
-    defer = function (id) {
-      setTimeout(ctx(run, id, 1), 0);
-    };
-  }
-}
-module.exports = {
-  set: setTask,
-  clear: clearTask
-};
diff --git a/templetes/node_modules/core-js/modules/_to-absolute-index.js b/templetes/node_modules/core-js/modules/_to-absolute-index.js
deleted file mode 100644
index dfee02e8..00000000
--- a/templetes/node_modules/core-js/modules/_to-absolute-index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var toInteger = require('./_to-integer');
-var max = Math.max;
-var min = Math.min;
-module.exports = function (index, length) {
-  index = toInteger(index);
-  return index < 0 ? max(index + length, 0) : min(index, length);
-};
diff --git a/templetes/node_modules/core-js/modules/_to-index.js b/templetes/node_modules/core-js/modules/_to-index.js
deleted file mode 100644
index 8f51c32d..00000000
--- a/templetes/node_modules/core-js/modules/_to-index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-// https://tc39.github.io/ecma262/#sec-toindex
-var toInteger = require('./_to-integer');
-var toLength = require('./_to-length');
-module.exports = function (it) {
-  if (it === undefined) return 0;
-  var number = toInteger(it);
-  var length = toLength(number);
-  if (number !== length) throw RangeError('Wrong length!');
-  return length;
-};
diff --git a/templetes/node_modules/core-js/modules/_to-integer.js b/templetes/node_modules/core-js/modules/_to-integer.js
deleted file mode 100644
index 3d50f97d..00000000
--- a/templetes/node_modules/core-js/modules/_to-integer.js
+++ /dev/null
@@ -1,6 +0,0 @@
-// 7.1.4 ToInteger
-var ceil = Math.ceil;
-var floor = Math.floor;
-module.exports = function (it) {
-  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
-};
diff --git a/templetes/node_modules/core-js/modules/_to-iobject.js b/templetes/node_modules/core-js/modules/_to-iobject.js
deleted file mode 100644
index 7614503a..00000000
--- a/templetes/node_modules/core-js/modules/_to-iobject.js
+++ /dev/null
@@ -1,6 +0,0 @@
-// to indexed object, toObject with fallback for non-array-like ES3 strings
-var IObject = require('./_iobject');
-var defined = require('./_defined');
-module.exports = function (it) {
-  return IObject(defined(it));
-};
diff --git a/templetes/node_modules/core-js/modules/_to-length.js b/templetes/node_modules/core-js/modules/_to-length.js
deleted file mode 100644
index a9db5017..00000000
--- a/templetes/node_modules/core-js/modules/_to-length.js
+++ /dev/null
@@ -1,6 +0,0 @@
-// 7.1.15 ToLength
-var toInteger = require('./_to-integer');
-var min = Math.min;
-module.exports = function (it) {
-  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
-};
diff --git a/templetes/node_modules/core-js/modules/_to-object.js b/templetes/node_modules/core-js/modules/_to-object.js
deleted file mode 100644
index 0efea4c6..00000000
--- a/templetes/node_modules/core-js/modules/_to-object.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// 7.1.13 ToObject(argument)
-var defined = require('./_defined');
-module.exports = function (it) {
-  return Object(defined(it));
-};
diff --git a/templetes/node_modules/core-js/modules/_to-primitive.js b/templetes/node_modules/core-js/modules/_to-primitive.js
deleted file mode 100644
index de3dd6b1..00000000
--- a/templetes/node_modules/core-js/modules/_to-primitive.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// 7.1.1 ToPrimitive(input [, PreferredType])
-var isObject = require('./_is-object');
-// instead of the ES6 spec version, we didn't implement @@toPrimitive case
-// and the second argument - flag - preferred type is a string
-module.exports = function (it, S) {
-  if (!isObject(it)) return it;
-  var fn, val;
-  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
-  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
-  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
-  throw TypeError("Can't convert object to primitive value");
-};
diff --git a/templetes/node_modules/core-js/modules/_typed-array.js b/templetes/node_modules/core-js/modules/_typed-array.js
deleted file mode 100644
index 30d9c0ba..00000000
--- a/templetes/node_modules/core-js/modules/_typed-array.js
+++ /dev/null
@@ -1,480 +0,0 @@
-'use strict';
-if (require('./_descriptors')) {
-  var LIBRARY = require('./_library');
-  var global = require('./_global');
-  var fails = require('./_fails');
-  var $export = require('./_export');
-  var $typed = require('./_typed');
-  var $buffer = require('./_typed-buffer');
-  var ctx = require('./_ctx');
-  var anInstance = require('./_an-instance');
-  var propertyDesc = require('./_property-desc');
-  var hide = require('./_hide');
-  var redefineAll = require('./_redefine-all');
-  var toInteger = require('./_to-integer');
-  var toLength = require('./_to-length');
-  var toIndex = require('./_to-index');
-  var toAbsoluteIndex = require('./_to-absolute-index');
-  var toPrimitive = require('./_to-primitive');
-  var has = require('./_has');
-  var classof = require('./_classof');
-  var isObject = require('./_is-object');
-  var toObject = require('./_to-object');
-  var isArrayIter = require('./_is-array-iter');
-  var create = require('./_object-create');
-  var getPrototypeOf = require('./_object-gpo');
-  var gOPN = require('./_object-gopn').f;
-  var getIterFn = require('./core.get-iterator-method');
-  var uid = require('./_uid');
-  var wks = require('./_wks');
-  var createArrayMethod = require('./_array-methods');
-  var createArrayIncludes = require('./_array-includes');
-  var speciesConstructor = require('./_species-constructor');
-  var ArrayIterators = require('./es6.array.iterator');
-  var Iterators = require('./_iterators');
-  var $iterDetect = require('./_iter-detect');
-  var setSpecies = require('./_set-species');
-  var arrayFill = require('./_array-fill');
-  var arrayCopyWithin = require('./_array-copy-within');
-  var $DP = require('./_object-dp');
-  var $GOPD = require('./_object-gopd');
-  var dP = $DP.f;
-  var gOPD = $GOPD.f;
-  var RangeError = global.RangeError;
-  var TypeError = global.TypeError;
-  var Uint8Array = global.Uint8Array;
-  var ARRAY_BUFFER = 'ArrayBuffer';
-  var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;
-  var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';
-  var PROTOTYPE = 'prototype';
-  var ArrayProto = Array[PROTOTYPE];
-  var $ArrayBuffer = $buffer.ArrayBuffer;
-  var $DataView = $buffer.DataView;
-  var arrayForEach = createArrayMethod(0);
-  var arrayFilter = createArrayMethod(2);
-  var arraySome = createArrayMethod(3);
-  var arrayEvery = createArrayMethod(4);
-  var arrayFind = createArrayMethod(5);
-  var arrayFindIndex = createArrayMethod(6);
-  var arrayIncludes = createArrayIncludes(true);
-  var arrayIndexOf = createArrayIncludes(false);
-  var arrayValues = ArrayIterators.values;
-  var arrayKeys = ArrayIterators.keys;
-  var arrayEntries = ArrayIterators.entries;
-  var arrayLastIndexOf = ArrayProto.lastIndexOf;
-  var arrayReduce = ArrayProto.reduce;
-  var arrayReduceRight = ArrayProto.reduceRight;
-  var arrayJoin = ArrayProto.join;
-  var arraySort = ArrayProto.sort;
-  var arraySlice = ArrayProto.slice;
-  var arrayToString = ArrayProto.toString;
-  var arrayToLocaleString = ArrayProto.toLocaleString;
-  var ITERATOR = wks('iterator');
-  var TAG = wks('toStringTag');
-  var TYPED_CONSTRUCTOR = uid('typed_constructor');
-  var DEF_CONSTRUCTOR = uid('def_constructor');
-  var ALL_CONSTRUCTORS = $typed.CONSTR;
-  var TYPED_ARRAY = $typed.TYPED;
-  var VIEW = $typed.VIEW;
-  var WRONG_LENGTH = 'Wrong length!';
-
-  var $map = createArrayMethod(1, function (O, length) {
-    return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);
-  });
-
-  var LITTLE_ENDIAN = fails(function () {
-    // eslint-disable-next-line no-undef
-    return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;
-  });
-
-  var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {
-    new Uint8Array(1).set({});
-  });
-
-  var toOffset = function (it, BYTES) {
-    var offset = toInteger(it);
-    if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');
-    return offset;
-  };
-
-  var validate = function (it) {
-    if (isObject(it) && TYPED_ARRAY in it) return it;
-    throw TypeError(it + ' is not a typed array!');
-  };
-
-  var allocate = function (C, length) {
-    if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {
-      throw TypeError('It is not a typed array constructor!');
-    } return new C(length);
-  };
-
-  var speciesFromList = function (O, list) {
-    return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);
-  };
-
-  var fromList = function (C, list) {
-    var index = 0;
-    var length = list.length;
-    var result = allocate(C, length);
-    while (length > index) result[index] = list[index++];
-    return result;
-  };
-
-  var addGetter = function (it, key, internal) {
-    dP(it, key, { get: function () { return this._d[internal]; } });
-  };
-
-  var $from = function from(source /* , mapfn, thisArg */) {
-    var O = toObject(source);
-    var aLen = arguments.length;
-    var mapfn = aLen > 1 ? arguments[1] : undefined;
-    var mapping = mapfn !== undefined;
-    var iterFn = getIterFn(O);
-    var i, length, values, result, step, iterator;
-    if (iterFn != undefined && !isArrayIter(iterFn)) {
-      for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {
-        values.push(step.value);
-      } O = values;
-    }
-    if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);
-    for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {
-      result[i] = mapping ? mapfn(O[i], i) : O[i];
-    }
-    return result;
-  };
-
-  var $of = function of(/* ...items */) {
-    var index = 0;
-    var length = arguments.length;
-    var result = allocate(this, length);
-    while (length > index) result[index] = arguments[index++];
-    return result;
-  };
-
-  // iOS Safari 6.x fails here
-  var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });
-
-  var $toLocaleString = function toLocaleString() {
-    return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);
-  };
-
-  var proto = {
-    copyWithin: function copyWithin(target, start /* , end */) {
-      return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
-    },
-    every: function every(callbackfn /* , thisArg */) {
-      return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars
-      return arrayFill.apply(validate(this), arguments);
-    },
-    filter: function filter(callbackfn /* , thisArg */) {
-      return speciesFromList(this, arrayFilter(validate(this), callbackfn,
-        arguments.length > 1 ? arguments[1] : undefined));
-    },
-    find: function find(predicate /* , thisArg */) {
-      return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    findIndex: function findIndex(predicate /* , thisArg */) {
-      return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    forEach: function forEach(callbackfn /* , thisArg */) {
-      arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    indexOf: function indexOf(searchElement /* , fromIndex */) {
-      return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    includes: function includes(searchElement /* , fromIndex */) {
-      return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    join: function join(separator) { // eslint-disable-line no-unused-vars
-      return arrayJoin.apply(validate(this), arguments);
-    },
-    lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars
-      return arrayLastIndexOf.apply(validate(this), arguments);
-    },
-    map: function map(mapfn /* , thisArg */) {
-      return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars
-      return arrayReduce.apply(validate(this), arguments);
-    },
-    reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars
-      return arrayReduceRight.apply(validate(this), arguments);
-    },
-    reverse: function reverse() {
-      var that = this;
-      var length = validate(that).length;
-      var middle = Math.floor(length / 2);
-      var index = 0;
-      var value;
-      while (index < middle) {
-        value = that[index];
-        that[index++] = that[--length];
-        that[length] = value;
-      } return that;
-    },
-    some: function some(callbackfn /* , thisArg */) {
-      return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
-    },
-    sort: function sort(comparefn) {
-      return arraySort.call(validate(this), comparefn);
-    },
-    subarray: function subarray(begin, end) {
-      var O = validate(this);
-      var length = O.length;
-      var $begin = toAbsoluteIndex(begin, length);
-      return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(
-        O.buffer,
-        O.byteOffset + $begin * O.BYTES_PER_ELEMENT,
-        toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)
-      );
-    }
-  };
-
-  var $slice = function slice(start, end) {
-    return speciesFromList(this, arraySlice.call(validate(this), start, end));
-  };
-
-  var $set = function set(arrayLike /* , offset */) {
-    validate(this);
-    var offset = toOffset(arguments[1], 1);
-    var length = this.length;
-    var src = toObject(arrayLike);
-    var len = toLength(src.length);
-    var index = 0;
-    if (len + offset > length) throw RangeError(WRONG_LENGTH);
-    while (index < len) this[offset + index] = src[index++];
-  };
-
-  var $iterators = {
-    entries: function entries() {
-      return arrayEntries.call(validate(this));
-    },
-    keys: function keys() {
-      return arrayKeys.call(validate(this));
-    },
-    values: function values() {
-      return arrayValues.call(validate(this));
-    }
-  };
-
-  var isTAIndex = function (target, key) {
-    return isObject(target)
-      && target[TYPED_ARRAY]
-      && typeof key != 'symbol'
-      && key in target
-      && String(+key) == String(key);
-  };
-  var $getDesc = function getOwnPropertyDescriptor(target, key) {
-    return isTAIndex(target, key = toPrimitive(key, true))
-      ? propertyDesc(2, target[key])
-      : gOPD(target, key);
-  };
-  var $setDesc = function defineProperty(target, key, desc) {
-    if (isTAIndex(target, key = toPrimitive(key, true))
-      && isObject(desc)
-      && has(desc, 'value')
-      && !has(desc, 'get')
-      && !has(desc, 'set')
-      // TODO: add validation descriptor w/o calling accessors
-      && !desc.configurable
-      && (!has(desc, 'writable') || desc.writable)
-      && (!has(desc, 'enumerable') || desc.enumerable)
-    ) {
-      target[key] = desc.value;
-      return target;
-    } return dP(target, key, desc);
-  };
-
-  if (!ALL_CONSTRUCTORS) {
-    $GOPD.f = $getDesc;
-    $DP.f = $setDesc;
-  }
-
-  $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {
-    getOwnPropertyDescriptor: $getDesc,
-    defineProperty: $setDesc
-  });
-
-  if (fails(function () { arrayToString.call({}); })) {
-    arrayToString = arrayToLocaleString = function toString() {
-      return arrayJoin.call(this);
-    };
-  }
-
-  var $TypedArrayPrototype$ = redefineAll({}, proto);
-  redefineAll($TypedArrayPrototype$, $iterators);
-  hide($TypedArrayPrototype$, ITERATOR, $iterators.values);
-  redefineAll($TypedArrayPrototype$, {
-    slice: $slice,
-    set: $set,
-    constructor: function () { /* noop */ },
-    toString: arrayToString,
-    toLocaleString: $toLocaleString
-  });
-  addGetter($TypedArrayPrototype$, 'buffer', 'b');
-  addGetter($TypedArrayPrototype$, 'byteOffset', 'o');
-  addGetter($TypedArrayPrototype$, 'byteLength', 'l');
-  addGetter($TypedArrayPrototype$, 'length', 'e');
-  dP($TypedArrayPrototype$, TAG, {
-    get: function () { return this[TYPED_ARRAY]; }
-  });
-
-  // eslint-disable-next-line max-statements
-  module.exports = function (KEY, BYTES, wrapper, CLAMPED) {
-    CLAMPED = !!CLAMPED;
-    var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';
-    var GETTER = 'get' + KEY;
-    var SETTER = 'set' + KEY;
-    var TypedArray = global[NAME];
-    var Base = TypedArray || {};
-    var TAC = TypedArray && getPrototypeOf(TypedArray);
-    var FORCED = !TypedArray || !$typed.ABV;
-    var O = {};
-    var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];
-    var getter = function (that, index) {
-      var data = that._d;
-      return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);
-    };
-    var setter = function (that, index, value) {
-      var data = that._d;
-      if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;
-      data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);
-    };
-    var addElement = function (that, index) {
-      dP(that, index, {
-        get: function () {
-          return getter(this, index);
-        },
-        set: function (value) {
-          return setter(this, index, value);
-        },
-        enumerable: true
-      });
-    };
-    if (FORCED) {
-      TypedArray = wrapper(function (that, data, $offset, $length) {
-        anInstance(that, TypedArray, NAME, '_d');
-        var index = 0;
-        var offset = 0;
-        var buffer, byteLength, length, klass;
-        if (!isObject(data)) {
-          length = toIndex(data);
-          byteLength = length * BYTES;
-          buffer = new $ArrayBuffer(byteLength);
-        } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
-          buffer = data;
-          offset = toOffset($offset, BYTES);
-          var $len = data.byteLength;
-          if ($length === undefined) {
-            if ($len % BYTES) throw RangeError(WRONG_LENGTH);
-            byteLength = $len - offset;
-            if (byteLength < 0) throw RangeError(WRONG_LENGTH);
-          } else {
-            byteLength = toLength($length) * BYTES;
-            if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);
-          }
-          length = byteLength / BYTES;
-        } else if (TYPED_ARRAY in data) {
-          return fromList(TypedArray, data);
-        } else {
-          return $from.call(TypedArray, data);
-        }
-        hide(that, '_d', {
-          b: buffer,
-          o: offset,
-          l: byteLength,
-          e: length,
-          v: new $DataView(buffer)
-        });
-        while (index < length) addElement(that, index++);
-      });
-      TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);
-      hide(TypedArrayPrototype, 'constructor', TypedArray);
-    } else if (!fails(function () {
-      TypedArray(1);
-    }) || !fails(function () {
-      new TypedArray(-1); // eslint-disable-line no-new
-    }) || !$iterDetect(function (iter) {
-      new TypedArray(); // eslint-disable-line no-new
-      new TypedArray(null); // eslint-disable-line no-new
-      new TypedArray(1.5); // eslint-disable-line no-new
-      new TypedArray(iter); // eslint-disable-line no-new
-    }, true)) {
-      TypedArray = wrapper(function (that, data, $offset, $length) {
-        anInstance(that, TypedArray, NAME);
-        var klass;
-        // `ws` module bug, temporarily remove validation length for Uint8Array
-        // https://github.com/websockets/ws/pull/645
-        if (!isObject(data)) return new Base(toIndex(data));
-        if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
-          return $length !== undefined
-            ? new Base(data, toOffset($offset, BYTES), $length)
-            : $offset !== undefined
-              ? new Base(data, toOffset($offset, BYTES))
-              : new Base(data);
-        }
-        if (TYPED_ARRAY in data) return fromList(TypedArray, data);
-        return $from.call(TypedArray, data);
-      });
-      arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {
-        if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);
-      });
-      TypedArray[PROTOTYPE] = TypedArrayPrototype;
-      if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;
-    }
-    var $nativeIterator = TypedArrayPrototype[ITERATOR];
-    var CORRECT_ITER_NAME = !!$nativeIterator
-      && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);
-    var $iterator = $iterators.values;
-    hide(TypedArray, TYPED_CONSTRUCTOR, true);
-    hide(TypedArrayPrototype, TYPED_ARRAY, NAME);
-    hide(TypedArrayPrototype, VIEW, true);
-    hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
-
-    if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {
-      dP(TypedArrayPrototype, TAG, {
-        get: function () { return NAME; }
-      });
-    }
-
-    O[NAME] = TypedArray;
-
-    $export($export.G + $export.W + $export.F * (TypedArray != Base), O);
-
-    $export($export.S, NAME, {
-      BYTES_PER_ELEMENT: BYTES
-    });
-
-    $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {
-      from: $from,
-      of: $of
-    });
-
-    if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);
-
-    $export($export.P, NAME, proto);
-
-    setSpecies(NAME);
-
-    $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });
-
-    $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);
-
-    if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;
-
-    $export($export.P + $export.F * fails(function () {
-      new TypedArray(1).slice();
-    }), NAME, { slice: $slice });
-
-    $export($export.P + $export.F * (fails(function () {
-      return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();
-    }) || !fails(function () {
-      TypedArrayPrototype.toLocaleString.call([1, 2]);
-    })), NAME, { toLocaleString: $toLocaleString });
-
-    Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;
-    if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);
-  };
-} else module.exports = function () { /* empty */ };
diff --git a/templetes/node_modules/core-js/modules/_typed-buffer.js b/templetes/node_modules/core-js/modules/_typed-buffer.js
deleted file mode 100644
index c24cef38..00000000
--- a/templetes/node_modules/core-js/modules/_typed-buffer.js
+++ /dev/null
@@ -1,276 +0,0 @@
-'use strict';
-var global = require('./_global');
-var DESCRIPTORS = require('./_descriptors');
-var LIBRARY = require('./_library');
-var $typed = require('./_typed');
-var hide = require('./_hide');
-var redefineAll = require('./_redefine-all');
-var fails = require('./_fails');
-var anInstance = require('./_an-instance');
-var toInteger = require('./_to-integer');
-var toLength = require('./_to-length');
-var toIndex = require('./_to-index');
-var gOPN = require('./_object-gopn').f;
-var dP = require('./_object-dp').f;
-var arrayFill = require('./_array-fill');
-var setToStringTag = require('./_set-to-string-tag');
-var ARRAY_BUFFER = 'ArrayBuffer';
-var DATA_VIEW = 'DataView';
-var PROTOTYPE = 'prototype';
-var WRONG_LENGTH = 'Wrong length!';
-var WRONG_INDEX = 'Wrong index!';
-var $ArrayBuffer = global[ARRAY_BUFFER];
-var $DataView = global[DATA_VIEW];
-var Math = global.Math;
-var RangeError = global.RangeError;
-// eslint-disable-next-line no-shadow-restricted-names
-var Infinity = global.Infinity;
-var BaseBuffer = $ArrayBuffer;
-var abs = Math.abs;
-var pow = Math.pow;
-var floor = Math.floor;
-var log = Math.log;
-var LN2 = Math.LN2;
-var BUFFER = 'buffer';
-var BYTE_LENGTH = 'byteLength';
-var BYTE_OFFSET = 'byteOffset';
-var $BUFFER = DESCRIPTORS ? '_b' : BUFFER;
-var $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;
-var $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;
-
-// IEEE754 conversions based on https://github.com/feross/ieee754
-function packIEEE754(value, mLen, nBytes) {
-  var buffer = new Array(nBytes);
-  var eLen = nBytes * 8 - mLen - 1;
-  var eMax = (1 << eLen) - 1;
-  var eBias = eMax >> 1;
-  var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;
-  var i = 0;
-  var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
-  var e, m, c;
-  value = abs(value);
-  // eslint-disable-next-line no-self-compare
-  if (value != value || value === Infinity) {
-    // eslint-disable-next-line no-self-compare
-    m = value != value ? 1 : 0;
-    e = eMax;
-  } else {
-    e = floor(log(value) / LN2);
-    if (value * (c = pow(2, -e)) < 1) {
-      e--;
-      c *= 2;
-    }
-    if (e + eBias >= 1) {
-      value += rt / c;
-    } else {
-      value += rt * pow(2, 1 - eBias);
-    }
-    if (value * c >= 2) {
-      e++;
-      c /= 2;
-    }
-    if (e + eBias >= eMax) {
-      m = 0;
-      e = eMax;
-    } else if (e + eBias >= 1) {
-      m = (value * c - 1) * pow(2, mLen);
-      e = e + eBias;
-    } else {
-      m = value * pow(2, eBias - 1) * pow(2, mLen);
-      e = 0;
-    }
-  }
-  for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);
-  e = e << mLen | m;
-  eLen += mLen;
-  for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);
-  buffer[--i] |= s * 128;
-  return buffer;
-}
-function unpackIEEE754(buffer, mLen, nBytes) {
-  var eLen = nBytes * 8 - mLen - 1;
-  var eMax = (1 << eLen) - 1;
-  var eBias = eMax >> 1;
-  var nBits = eLen - 7;
-  var i = nBytes - 1;
-  var s = buffer[i--];
-  var e = s & 127;
-  var m;
-  s >>= 7;
-  for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);
-  m = e & (1 << -nBits) - 1;
-  e >>= -nBits;
-  nBits += mLen;
-  for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);
-  if (e === 0) {
-    e = 1 - eBias;
-  } else if (e === eMax) {
-    return m ? NaN : s ? -Infinity : Infinity;
-  } else {
-    m = m + pow(2, mLen);
-    e = e - eBias;
-  } return (s ? -1 : 1) * m * pow(2, e - mLen);
-}
-
-function unpackI32(bytes) {
-  return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];
-}
-function packI8(it) {
-  return [it & 0xff];
-}
-function packI16(it) {
-  return [it & 0xff, it >> 8 & 0xff];
-}
-function packI32(it) {
-  return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];
-}
-function packF64(it) {
-  return packIEEE754(it, 52, 8);
-}
-function packF32(it) {
-  return packIEEE754(it, 23, 4);
-}
-
-function addGetter(C, key, internal) {
-  dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });
-}
-
-function get(view, bytes, index, isLittleEndian) {
-  var numIndex = +index;
-  var intIndex = toIndex(numIndex);
-  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
-  var store = view[$BUFFER]._b;
-  var start = intIndex + view[$OFFSET];
-  var pack = store.slice(start, start + bytes);
-  return isLittleEndian ? pack : pack.reverse();
-}
-function set(view, bytes, index, conversion, value, isLittleEndian) {
-  var numIndex = +index;
-  var intIndex = toIndex(numIndex);
-  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
-  var store = view[$BUFFER]._b;
-  var start = intIndex + view[$OFFSET];
-  var pack = conversion(+value);
-  for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];
-}
-
-if (!$typed.ABV) {
-  $ArrayBuffer = function ArrayBuffer(length) {
-    anInstance(this, $ArrayBuffer, ARRAY_BUFFER);
-    var byteLength = toIndex(length);
-    this._b = arrayFill.call(new Array(byteLength), 0);
-    this[$LENGTH] = byteLength;
-  };
-
-  $DataView = function DataView(buffer, byteOffset, byteLength) {
-    anInstance(this, $DataView, DATA_VIEW);
-    anInstance(buffer, $ArrayBuffer, DATA_VIEW);
-    var bufferLength = buffer[$LENGTH];
-    var offset = toInteger(byteOffset);
-    if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');
-    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
-    if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);
-    this[$BUFFER] = buffer;
-    this[$OFFSET] = offset;
-    this[$LENGTH] = byteLength;
-  };
-
-  if (DESCRIPTORS) {
-    addGetter($ArrayBuffer, BYTE_LENGTH, '_l');
-    addGetter($DataView, BUFFER, '_b');
-    addGetter($DataView, BYTE_LENGTH, '_l');
-    addGetter($DataView, BYTE_OFFSET, '_o');
-  }
-
-  redefineAll($DataView[PROTOTYPE], {
-    getInt8: function getInt8(byteOffset) {
-      return get(this, 1, byteOffset)[0] << 24 >> 24;
-    },
-    getUint8: function getUint8(byteOffset) {
-      return get(this, 1, byteOffset)[0];
-    },
-    getInt16: function getInt16(byteOffset /* , littleEndian */) {
-      var bytes = get(this, 2, byteOffset, arguments[1]);
-      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;
-    },
-    getUint16: function getUint16(byteOffset /* , littleEndian */) {
-      var bytes = get(this, 2, byteOffset, arguments[1]);
-      return bytes[1] << 8 | bytes[0];
-    },
-    getInt32: function getInt32(byteOffset /* , littleEndian */) {
-      return unpackI32(get(this, 4, byteOffset, arguments[1]));
-    },
-    getUint32: function getUint32(byteOffset /* , littleEndian */) {
-      return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;
-    },
-    getFloat32: function getFloat32(byteOffset /* , littleEndian */) {
-      return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);
-    },
-    getFloat64: function getFloat64(byteOffset /* , littleEndian */) {
-      return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);
-    },
-    setInt8: function setInt8(byteOffset, value) {
-      set(this, 1, byteOffset, packI8, value);
-    },
-    setUint8: function setUint8(byteOffset, value) {
-      set(this, 1, byteOffset, packI8, value);
-    },
-    setInt16: function setInt16(byteOffset, value /* , littleEndian */) {
-      set(this, 2, byteOffset, packI16, value, arguments[2]);
-    },
-    setUint16: function setUint16(byteOffset, value /* , littleEndian */) {
-      set(this, 2, byteOffset, packI16, value, arguments[2]);
-    },
-    setInt32: function setInt32(byteOffset, value /* , littleEndian */) {
-      set(this, 4, byteOffset, packI32, value, arguments[2]);
-    },
-    setUint32: function setUint32(byteOffset, value /* , littleEndian */) {
-      set(this, 4, byteOffset, packI32, value, arguments[2]);
-    },
-    setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {
-      set(this, 4, byteOffset, packF32, value, arguments[2]);
-    },
-    setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {
-      set(this, 8, byteOffset, packF64, value, arguments[2]);
-    }
-  });
-} else {
-  if (!fails(function () {
-    $ArrayBuffer(1);
-  }) || !fails(function () {
-    new $ArrayBuffer(-1); // eslint-disable-line no-new
-  }) || fails(function () {
-    new $ArrayBuffer(); // eslint-disable-line no-new
-    new $ArrayBuffer(1.5); // eslint-disable-line no-new
-    new $ArrayBuffer(NaN); // eslint-disable-line no-new
-    return $ArrayBuffer.name != ARRAY_BUFFER;
-  })) {
-    $ArrayBuffer = function ArrayBuffer(length) {
-      anInstance(this, $ArrayBuffer);
-      return new BaseBuffer(toIndex(length));
-    };
-    var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];
-    for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {
-      if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);
-    }
-    if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;
-  }
-  // iOS Safari 7.x bug
-  var view = new $DataView(new $ArrayBuffer(2));
-  var $setInt8 = $DataView[PROTOTYPE].setInt8;
-  view.setInt8(0, 2147483648);
-  view.setInt8(1, 2147483649);
-  if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {
-    setInt8: function setInt8(byteOffset, value) {
-      $setInt8.call(this, byteOffset, value << 24 >> 24);
-    },
-    setUint8: function setUint8(byteOffset, value) {
-      $setInt8.call(this, byteOffset, value << 24 >> 24);
-    }
-  }, true);
-}
-setToStringTag($ArrayBuffer, ARRAY_BUFFER);
-setToStringTag($DataView, DATA_VIEW);
-hide($DataView[PROTOTYPE], $typed.VIEW, true);
-exports[ARRAY_BUFFER] = $ArrayBuffer;
-exports[DATA_VIEW] = $DataView;
diff --git a/templetes/node_modules/core-js/modules/_typed.js b/templetes/node_modules/core-js/modules/_typed.js
deleted file mode 100644
index 8747ffd7..00000000
--- a/templetes/node_modules/core-js/modules/_typed.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var global = require('./_global');
-var hide = require('./_hide');
-var uid = require('./_uid');
-var TYPED = uid('typed_array');
-var VIEW = uid('view');
-var ABV = !!(global.ArrayBuffer && global.DataView);
-var CONSTR = ABV;
-var i = 0;
-var l = 9;
-var Typed;
-
-var TypedArrayConstructors = (
-  'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'
-).split(',');
-
-while (i < l) {
-  if (Typed = global[TypedArrayConstructors[i++]]) {
-    hide(Typed.prototype, TYPED, true);
-    hide(Typed.prototype, VIEW, true);
-  } else CONSTR = false;
-}
-
-module.exports = {
-  ABV: ABV,
-  CONSTR: CONSTR,
-  TYPED: TYPED,
-  VIEW: VIEW
-};
diff --git a/templetes/node_modules/core-js/modules/_uid.js b/templetes/node_modules/core-js/modules/_uid.js
deleted file mode 100644
index ffbe7185..00000000
--- a/templetes/node_modules/core-js/modules/_uid.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var id = 0;
-var px = Math.random();
-module.exports = function (key) {
-  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
-};
diff --git a/templetes/node_modules/core-js/modules/_user-agent.js b/templetes/node_modules/core-js/modules/_user-agent.js
deleted file mode 100644
index 363fedc2..00000000
--- a/templetes/node_modules/core-js/modules/_user-agent.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var global = require('./_global');
-var navigator = global.navigator;
-
-module.exports = navigator && navigator.userAgent || '';
diff --git a/templetes/node_modules/core-js/modules/_validate-collection.js b/templetes/node_modules/core-js/modules/_validate-collection.js
deleted file mode 100644
index cec1ceff..00000000
--- a/templetes/node_modules/core-js/modules/_validate-collection.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var isObject = require('./_is-object');
-module.exports = function (it, TYPE) {
-  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
-  return it;
-};
diff --git a/templetes/node_modules/core-js/modules/_wks-define.js b/templetes/node_modules/core-js/modules/_wks-define.js
deleted file mode 100644
index 7284d6ad..00000000
--- a/templetes/node_modules/core-js/modules/_wks-define.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var global = require('./_global');
-var core = require('./_core');
-var LIBRARY = require('./_library');
-var wksExt = require('./_wks-ext');
-var defineProperty = require('./_object-dp').f;
-module.exports = function (name) {
-  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
-  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
-};
diff --git a/templetes/node_modules/core-js/modules/_wks-ext.js b/templetes/node_modules/core-js/modules/_wks-ext.js
deleted file mode 100644
index 13bd83b1..00000000
--- a/templetes/node_modules/core-js/modules/_wks-ext.js
+++ /dev/null
@@ -1 +0,0 @@
-exports.f = require('./_wks');
diff --git a/templetes/node_modules/core-js/modules/_wks.js b/templetes/node_modules/core-js/modules/_wks.js
deleted file mode 100644
index e33f857a..00000000
--- a/templetes/node_modules/core-js/modules/_wks.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var store = require('./_shared')('wks');
-var uid = require('./_uid');
-var Symbol = require('./_global').Symbol;
-var USE_SYMBOL = typeof Symbol == 'function';
-
-var $exports = module.exports = function (name) {
-  return store[name] || (store[name] =
-    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
-};
-
-$exports.store = store;
diff --git a/templetes/node_modules/core-js/modules/library/_path.js b/templetes/node_modules/core-js/modules/library/_path.js
deleted file mode 100644
index 2796ebcb..00000000
--- a/templetes/node_modules/core-js/modules/library/_path.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('./_core');
diff --git a/templetes/node_modules/core-js/modules/library/_redefine-all.js b/templetes/node_modules/core-js/modules/library/_redefine-all.js
deleted file mode 100644
index bf8c0ea3..00000000
--- a/templetes/node_modules/core-js/modules/library/_redefine-all.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var hide = require('./_hide');
-module.exports = function (target, src, safe) {
-  for (var key in src) {
-    if (safe && target[key]) target[key] = src[key];
-    else hide(target, key, src[key]);
-  } return target;
-};
diff --git a/templetes/node_modules/core-js/modules/library/_redefine.js b/templetes/node_modules/core-js/modules/library/_redefine.js
deleted file mode 100644
index fde6108e..00000000
--- a/templetes/node_modules/core-js/modules/library/_redefine.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('./_hide');
diff --git a/templetes/node_modules/core-js/modules/library/_regexp-exec-abstract.js b/templetes/node_modules/core-js/modules/library/_regexp-exec-abstract.js
deleted file mode 100644
index 8b1a3937..00000000
--- a/templetes/node_modules/core-js/modules/library/_regexp-exec-abstract.js
+++ /dev/null
@@ -1 +0,0 @@
-// empty
diff --git a/templetes/node_modules/core-js/modules/library/_regexp-exec.js b/templetes/node_modules/core-js/modules/library/_regexp-exec.js
deleted file mode 100644
index 8b1a3937..00000000
--- a/templetes/node_modules/core-js/modules/library/_regexp-exec.js
+++ /dev/null
@@ -1 +0,0 @@
-// empty
diff --git a/templetes/node_modules/core-js/modules/library/_set-species.js b/templetes/node_modules/core-js/modules/library/_set-species.js
deleted file mode 100644
index 1f25fde1..00000000
--- a/templetes/node_modules/core-js/modules/library/_set-species.js
+++ /dev/null
@@ -1,14 +0,0 @@
-'use strict';
-var global = require('./_global');
-var core = require('./_core');
-var dP = require('./_object-dp');
-var DESCRIPTORS = require('./_descriptors');
-var SPECIES = require('./_wks')('species');
-
-module.exports = function (KEY) {
-  var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];
-  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {
-    configurable: true,
-    get: function () { return this; }
-  });
-};
diff --git a/templetes/node_modules/crypto-browserify/test/aes.js b/templetes/node_modules/crypto-browserify/test/aes.js
deleted file mode 100644
index 916a0192..00000000
--- a/templetes/node_modules/crypto-browserify/test/aes.js
+++ /dev/null
@@ -1,49 +0,0 @@
-var test = require('tape')
-var crypto = require('browserify-cipher/browser')
-var randomBytes = require('pseudorandombytes')
-
-function runIt (i) {
-  crypto.listCiphers().forEach(function (cipher) {
-    test('run: ' + i, function (t) {
-      t.test('ciphers: ' + cipher, function (t) {
-        t.plan(1)
-        var data = randomBytes(562)
-        var password = randomBytes(20)
-        var crypter = crypto.createCipher(cipher, password)
-        var decrypter = crypto.createDecipher(cipher, password)
-        var out = []
-        out.push(decrypter.update(crypter.update(data)))
-        out.push(decrypter.update(crypter.final()))
-        if (cipher.indexOf('gcm') > -1) {
-          decrypter.setAuthTag(crypter.getAuthTag())
-        }
-        out.push(decrypter.final())
-        t.equals(data.toString('hex'), Buffer.concat(out).toString('hex'))
-      })
-    })
-  })
-  if (i < 4) {
-    setTimeout(runIt, 0, i + 1)
-  }
-}
-runIt(1)
-test('getCiphers', function (t) {
-  t.plan(1)
-  t.ok(crypto.getCiphers().length, 'get ciphers returns an array')
-})
-
-test('through crypto browserify works', function (t) {
-  t.plan(2)
-  var crypto = require('../')
-  var cipher = 'aes-128-ctr'
-  var data = randomBytes(562)
-  var password = randomBytes(20)
-  var crypter = crypto.createCipher(cipher, password)
-  var decrypter = crypto.createDecipher(cipher, password)
-  var out = []
-  out.push(decrypter.update(crypter.update(data)))
-  out.push(decrypter.update(crypter.final()))
-  out.push(decrypter.final())
-  t.equals(data.toString('hex'), Buffer.concat(out).toString('hex'))
-  t.ok(crypto.getCiphers().length, 'get ciphers returns an array')
-})
diff --git a/templetes/node_modules/deep-equal/test/_tape.js b/templetes/node_modules/deep-equal/test/_tape.js
deleted file mode 100644
index d359d4b1..00000000
--- a/templetes/node_modules/deep-equal/test/_tape.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var Test = require('tape/lib/test');
-var is = require('object-is');
-var equal = require('../');
-
-function equalReversed(t, a, b, isEqual, msg, isStrict, skipReversed) {
-  var actual = isStrict ? equal(a, b, { strict: true }) : equal(a, b);
-  var suffix = isEqual ? ' are equal' : ' are not equal';
-  t.equal(actual, !!isEqual, msg + suffix);
-  if (typeof skipReversed === 'boolean' ? !skipReversed : !is(a, b)) {
-    var actualReverse = isStrict ? equal(b, a, { strict: true }) : equal(b, a);
-    t.equal(actualReverse, !!isEqual, msg + suffix + ' (reversed)');
-  }
-}
-function deepEqualTest(t, a, b, msg, isEqual, isStrictEqual, skipReversed) {
-  equalReversed(t, a, b, isEqual, msg, false, skipReversed);
-  equalReversed(t, a, b, isStrictEqual, 'strict: ' + msg, true, skipReversed);
-}
-
-Test.prototype.deepEqualTest = function (a, b, message, isEqual, isStrictEqual, skipReversed) {
-  return deepEqualTest(this, a, b, message, !!isEqual, !!isStrictEqual, skipReversed);
-};
diff --git a/templetes/node_modules/enhanced-resolve/lib/AliasFieldPlugin.js b/templetes/node_modules/enhanced-resolve/lib/AliasFieldPlugin.js
deleted file mode 100644
index 922ee74e..00000000
--- a/templetes/node_modules/enhanced-resolve/lib/AliasFieldPlugin.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const DescriptionFileUtils = require("./DescriptionFileUtils");
-const getInnerRequest = require("./getInnerRequest");
-
-module.exports = class AliasFieldPlugin {
-	constructor(source, field, target) {
-		this.source = source;
-		this.field = field;
-		this.target = target;
-	}
-
-	apply(resolver) {
-		const target = resolver.ensureHook(this.target);
-		resolver.getHook(this.source).tapAsync("AliasFieldPlugin", (request, resolveContext, callback) => {
-			if(!request.descriptionFileData) return callback();
-			const innerRequest = getInnerRequest(resolver, request);
-			if(!innerRequest) return callback();
-			const fieldData = DescriptionFileUtils.getField(request.descriptionFileData, this.field);
-			if(typeof fieldData !== "object") {
-				if(resolveContext.log) resolveContext.log("Field '" + this.field + "' doesn't contain a valid alias configuration");
-				return callback();
-			}
-			const data1 = fieldData[innerRequest];
-			const data2 = fieldData[innerRequest.replace(/^\.\//, "")];
-			const data = typeof data1 !== "undefined" ? data1 : data2;
-			if(data === innerRequest) return callback();
-			if(data === undefined) return callback();
-			if(data === false) {
-				const ignoreObj = Object.assign({}, request, {
-					path: false
-				});
-				return callback(null, ignoreObj);
-			}
-			const obj = Object.assign({}, request, {
-				path: request.descriptionFileRoot,
-				request: data
-			});
-			resolver.doResolve(target, obj, "aliased from description file " + request.descriptionFilePath + " with mapping '" + innerRequest + "' to '" + data + "'", resolveContext, (err, result) => {
-				if(err) return callback(err);
-
-				// Don't allow other aliasing or raw request
-				if(result === undefined) return callback(null, null);
-				callback(null, result);
-			});
-		});
-	}
-};
diff --git a/templetes/node_modules/enhanced-resolve/lib/AliasPlugin.js b/templetes/node_modules/enhanced-resolve/lib/AliasPlugin.js
deleted file mode 100644
index c9af4f56..00000000
--- a/templetes/node_modules/enhanced-resolve/lib/AliasPlugin.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-function startsWith(string, searchString) {
-	const stringLength = string.length;
-	const searchLength = searchString.length;
-
-	// early out if the search length is greater than the search string
-	if(searchLength > stringLength) {
-		return false;
-	}
-	let index = -1;
-	while(++index < searchLength) {
-		if(string.charCodeAt(index) !== searchString.charCodeAt(index)) {
-			return false;
-		}
-	}
-	return true;
-}
-
-module.exports = class AliasPlugin {
-	constructor(source, options, target) {
-		this.source = source;
-		this.options = Array.isArray(options) ? options : [options];
-		this.target = target;
-	}
-
-	apply(resolver) {
-		const target = resolver.ensureHook(this.target);
-		resolver.getHook(this.source).tapAsync("AliasPlugin", (request, resolveContext, callback) => {
-			const innerRequest = request.request || request.path;
-			if(!innerRequest) return callback();
-			for(const item of this.options) {
-				if(innerRequest === item.name || (!item.onlyModule && startsWith(innerRequest, item.name + "/"))) {
-					if(innerRequest !== item.alias && !startsWith(innerRequest, item.alias + "/")) {
-						const newRequestStr = item.alias + innerRequest.substr(item.name.length);
-						const obj = Object.assign({}, request, {
-							request: newRequestStr
-						});
-						return resolver.doResolve(target, obj, "aliased with mapping '" + item.name + "': '" + item.alias + "' to '" + newRequestStr + "'", resolveContext, (err, result) => {
-							if(err) return callback(err);
-
-							// Don't allow other aliasing or raw request
-							if(result === undefined) return callback(null, null);
-							callback(null, result);
-						});
-					}
-				}
-			}
-			return callback();
-		});
-	}
-};
diff --git a/templetes/node_modules/es-abstract/2015/AbstractEqualityComparison.js b/templetes/node_modules/es-abstract/2015/AbstractEqualityComparison.js
deleted file mode 100644
index 40b39098..00000000
--- a/templetes/node_modules/es-abstract/2015/AbstractEqualityComparison.js
+++ /dev/null
@@ -1,37 +0,0 @@
-'use strict';
-
-var ToNumber = require('./ToNumber');
-var ToPrimitive = require('./ToPrimitive');
-var Type = require('./Type');
-
-// https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
-
-module.exports = function AbstractEqualityComparison(x, y) {
-	var xType = Type(x);
-	var yType = Type(y);
-	if (xType === yType) {
-		return x === y; // ES6+ specified this shortcut anyways.
-	}
-	if (x == null && y == null) {
-		return true;
-	}
-	if (xType === 'Number' && yType === 'String') {
-		return AbstractEqualityComparison(x, ToNumber(y));
-	}
-	if (xType === 'String' && yType === 'Number') {
-		return AbstractEqualityComparison(ToNumber(x), y);
-	}
-	if (xType === 'Boolean') {
-		return AbstractEqualityComparison(ToNumber(x), y);
-	}
-	if (yType === 'Boolean') {
-		return AbstractEqualityComparison(x, ToNumber(y));
-	}
-	if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') {
-		return AbstractEqualityComparison(x, ToPrimitive(y));
-	}
-	if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) {
-		return AbstractEqualityComparison(ToPrimitive(x), y);
-	}
-	return false;
-};
diff --git a/templetes/node_modules/es-abstract/2015/AbstractRelationalComparison.js b/templetes/node_modules/es-abstract/2015/AbstractRelationalComparison.js
deleted file mode 100644
index bc7ca832..00000000
--- a/templetes/node_modules/es-abstract/2015/AbstractRelationalComparison.js
+++ /dev/null
@@ -1,66 +0,0 @@
-'use strict';
-
-var GetIntrinsic = require('../GetIntrinsic');
-
-var $Number = GetIntrinsic('%Number%');
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var $isNaN = require('../helpers/isNaN');
-var $isFinite = require('../helpers/isFinite');
-var isPrefixOf = require('../helpers/isPrefixOf');
-
-var ToNumber = require('./ToNumber');
-var ToPrimitive = require('./ToPrimitive');
-var Type = require('./Type');
-
-// https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5
-
-// eslint-disable-next-line max-statements
-module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
-	if (Type(LeftFirst) !== 'Boolean') {
-		throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
-	}
-	var px;
-	var py;
-	if (LeftFirst) {
-		px = ToPrimitive(x, $Number);
-		py = ToPrimitive(y, $Number);
-	} else {
-		py = ToPrimitive(y, $Number);
-		px = ToPrimitive(x, $Number);
-	}
-	var bothStrings = Type(px) === 'String' && Type(py) === 'String';
-	if (!bothStrings) {
-		var nx = ToNumber(px);
-		var ny = ToNumber(py);
-		if ($isNaN(nx) || $isNaN(ny)) {
-			return undefined;
-		}
-		if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
-			return false;
-		}
-		if (nx === 0 && ny === 0) {
-			return false;
-		}
-		if (nx === Infinity) {
-			return false;
-		}
-		if (ny === Infinity) {
-			return true;
-		}
-		if (ny === -Infinity) {
-			return false;
-		}
-		if (nx === -Infinity) {
-			return true;
-		}
-		return nx < ny; // by now, these are both nonzero, finite, and not equal
-	}
-	if (isPrefixOf(py, px)) {
-		return false;
-	}
-	if (isPrefixOf(px, py)) {
-		return true;
-	}
-	return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
-};
diff --git a/templetes/node_modules/es-abstract/2015/AdvanceStringIndex.js b/templetes/node_modules/es-abstract/2015/AdvanceStringIndex.js
deleted file mode 100644
index 666f578b..00000000
--- a/templetes/node_modules/es-abstract/2015/AdvanceStringIndex.js
+++ /dev/null
@@ -1,45 +0,0 @@
-'use strict';
-
-var GetIntrinsic = require('../GetIntrinsic');
-
-var IsInteger = require('./IsInteger');
-var Type = require('./Type');
-
-var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
-
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var $charCodeAt = require('../helpers/callBound')('String.prototype.charCodeAt');
-
-// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
-
-module.exports = function AdvanceStringIndex(S, index, unicode) {
-	if (Type(S) !== 'String') {
-		throw new $TypeError('Assertion failed: `S` must be a String');
-	}
-	if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) {
-		throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');
-	}
-	if (Type(unicode) !== 'Boolean') {
-		throw new $TypeError('Assertion failed: `unicode` must be a Boolean');
-	}
-	if (!unicode) {
-		return index + 1;
-	}
-	var length = S.length;
-	if ((index + 1) >= length) {
-		return index + 1;
-	}
-
-	var first = $charCodeAt(S, index);
-	if (first < 0xD800 || first > 0xDBFF) {
-		return index + 1;
-	}
-
-	var second = $charCodeAt(S, index + 1);
-	if (second < 0xDC00 || second > 0xDFFF) {
-		return index + 1;
-	}
-
-	return index + 2;
-};
diff --git a/templetes/node_modules/es-abstract/2016/AbstractEqualityComparison.js b/templetes/node_modules/es-abstract/2016/AbstractEqualityComparison.js
deleted file mode 100644
index 40b39098..00000000
--- a/templetes/node_modules/es-abstract/2016/AbstractEqualityComparison.js
+++ /dev/null
@@ -1,37 +0,0 @@
-'use strict';
-
-var ToNumber = require('./ToNumber');
-var ToPrimitive = require('./ToPrimitive');
-var Type = require('./Type');
-
-// https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
-
-module.exports = function AbstractEqualityComparison(x, y) {
-	var xType = Type(x);
-	var yType = Type(y);
-	if (xType === yType) {
-		return x === y; // ES6+ specified this shortcut anyways.
-	}
-	if (x == null && y == null) {
-		return true;
-	}
-	if (xType === 'Number' && yType === 'String') {
-		return AbstractEqualityComparison(x, ToNumber(y));
-	}
-	if (xType === 'String' && yType === 'Number') {
-		return AbstractEqualityComparison(ToNumber(x), y);
-	}
-	if (xType === 'Boolean') {
-		return AbstractEqualityComparison(ToNumber(x), y);
-	}
-	if (yType === 'Boolean') {
-		return AbstractEqualityComparison(x, ToNumber(y));
-	}
-	if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') {
-		return AbstractEqualityComparison(x, ToPrimitive(y));
-	}
-	if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) {
-		return AbstractEqualityComparison(ToPrimitive(x), y);
-	}
-	return false;
-};
diff --git a/templetes/node_modules/es-abstract/2016/AbstractRelationalComparison.js b/templetes/node_modules/es-abstract/2016/AbstractRelationalComparison.js
deleted file mode 100644
index bc7ca832..00000000
--- a/templetes/node_modules/es-abstract/2016/AbstractRelationalComparison.js
+++ /dev/null
@@ -1,66 +0,0 @@
-'use strict';
-
-var GetIntrinsic = require('../GetIntrinsic');
-
-var $Number = GetIntrinsic('%Number%');
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var $isNaN = require('../helpers/isNaN');
-var $isFinite = require('../helpers/isFinite');
-var isPrefixOf = require('../helpers/isPrefixOf');
-
-var ToNumber = require('./ToNumber');
-var ToPrimitive = require('./ToPrimitive');
-var Type = require('./Type');
-
-// https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5
-
-// eslint-disable-next-line max-statements
-module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
-	if (Type(LeftFirst) !== 'Boolean') {
-		throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
-	}
-	var px;
-	var py;
-	if (LeftFirst) {
-		px = ToPrimitive(x, $Number);
-		py = ToPrimitive(y, $Number);
-	} else {
-		py = ToPrimitive(y, $Number);
-		px = ToPrimitive(x, $Number);
-	}
-	var bothStrings = Type(px) === 'String' && Type(py) === 'String';
-	if (!bothStrings) {
-		var nx = ToNumber(px);
-		var ny = ToNumber(py);
-		if ($isNaN(nx) || $isNaN(ny)) {
-			return undefined;
-		}
-		if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
-			return false;
-		}
-		if (nx === 0 && ny === 0) {
-			return false;
-		}
-		if (nx === Infinity) {
-			return false;
-		}
-		if (ny === Infinity) {
-			return true;
-		}
-		if (ny === -Infinity) {
-			return false;
-		}
-		if (nx === -Infinity) {
-			return true;
-		}
-		return nx < ny; // by now, these are both nonzero, finite, and not equal
-	}
-	if (isPrefixOf(py, px)) {
-		return false;
-	}
-	if (isPrefixOf(px, py)) {
-		return true;
-	}
-	return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
-};
diff --git a/templetes/node_modules/es-abstract/2016/AdvanceStringIndex.js b/templetes/node_modules/es-abstract/2016/AdvanceStringIndex.js
deleted file mode 100644
index 666f578b..00000000
--- a/templetes/node_modules/es-abstract/2016/AdvanceStringIndex.js
+++ /dev/null
@@ -1,45 +0,0 @@
-'use strict';
-
-var GetIntrinsic = require('../GetIntrinsic');
-
-var IsInteger = require('./IsInteger');
-var Type = require('./Type');
-
-var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
-
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var $charCodeAt = require('../helpers/callBound')('String.prototype.charCodeAt');
-
-// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
-
-module.exports = function AdvanceStringIndex(S, index, unicode) {
-	if (Type(S) !== 'String') {
-		throw new $TypeError('Assertion failed: `S` must be a String');
-	}
-	if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) {
-		throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');
-	}
-	if (Type(unicode) !== 'Boolean') {
-		throw new $TypeError('Assertion failed: `unicode` must be a Boolean');
-	}
-	if (!unicode) {
-		return index + 1;
-	}
-	var length = S.length;
-	if ((index + 1) >= length) {
-		return index + 1;
-	}
-
-	var first = $charCodeAt(S, index);
-	if (first < 0xD800 || first > 0xDBFF) {
-		return index + 1;
-	}
-
-	var second = $charCodeAt(S, index + 1);
-	if (second < 0xDC00 || second > 0xDFFF) {
-		return index + 1;
-	}
-
-	return index + 2;
-};
diff --git a/templetes/node_modules/es-abstract/2017/AbstractEqualityComparison.js b/templetes/node_modules/es-abstract/2017/AbstractEqualityComparison.js
deleted file mode 100644
index 40b39098..00000000
--- a/templetes/node_modules/es-abstract/2017/AbstractEqualityComparison.js
+++ /dev/null
@@ -1,37 +0,0 @@
-'use strict';
-
-var ToNumber = require('./ToNumber');
-var ToPrimitive = require('./ToPrimitive');
-var Type = require('./Type');
-
-// https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
-
-module.exports = function AbstractEqualityComparison(x, y) {
-	var xType = Type(x);
-	var yType = Type(y);
-	if (xType === yType) {
-		return x === y; // ES6+ specified this shortcut anyways.
-	}
-	if (x == null && y == null) {
-		return true;
-	}
-	if (xType === 'Number' && yType === 'String') {
-		return AbstractEqualityComparison(x, ToNumber(y));
-	}
-	if (xType === 'String' && yType === 'Number') {
-		return AbstractEqualityComparison(ToNumber(x), y);
-	}
-	if (xType === 'Boolean') {
-		return AbstractEqualityComparison(ToNumber(x), y);
-	}
-	if (yType === 'Boolean') {
-		return AbstractEqualityComparison(x, ToNumber(y));
-	}
-	if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') {
-		return AbstractEqualityComparison(x, ToPrimitive(y));
-	}
-	if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) {
-		return AbstractEqualityComparison(ToPrimitive(x), y);
-	}
-	return false;
-};
diff --git a/templetes/node_modules/es-abstract/2017/AbstractRelationalComparison.js b/templetes/node_modules/es-abstract/2017/AbstractRelationalComparison.js
deleted file mode 100644
index bc7ca832..00000000
--- a/templetes/node_modules/es-abstract/2017/AbstractRelationalComparison.js
+++ /dev/null
@@ -1,66 +0,0 @@
-'use strict';
-
-var GetIntrinsic = require('../GetIntrinsic');
-
-var $Number = GetIntrinsic('%Number%');
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var $isNaN = require('../helpers/isNaN');
-var $isFinite = require('../helpers/isFinite');
-var isPrefixOf = require('../helpers/isPrefixOf');
-
-var ToNumber = require('./ToNumber');
-var ToPrimitive = require('./ToPrimitive');
-var Type = require('./Type');
-
-// https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5
-
-// eslint-disable-next-line max-statements
-module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
-	if (Type(LeftFirst) !== 'Boolean') {
-		throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
-	}
-	var px;
-	var py;
-	if (LeftFirst) {
-		px = ToPrimitive(x, $Number);
-		py = ToPrimitive(y, $Number);
-	} else {
-		py = ToPrimitive(y, $Number);
-		px = ToPrimitive(x, $Number);
-	}
-	var bothStrings = Type(px) === 'String' && Type(py) === 'String';
-	if (!bothStrings) {
-		var nx = ToNumber(px);
-		var ny = ToNumber(py);
-		if ($isNaN(nx) || $isNaN(ny)) {
-			return undefined;
-		}
-		if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
-			return false;
-		}
-		if (nx === 0 && ny === 0) {
-			return false;
-		}
-		if (nx === Infinity) {
-			return false;
-		}
-		if (ny === Infinity) {
-			return true;
-		}
-		if (ny === -Infinity) {
-			return false;
-		}
-		if (nx === -Infinity) {
-			return true;
-		}
-		return nx < ny; // by now, these are both nonzero, finite, and not equal
-	}
-	if (isPrefixOf(py, px)) {
-		return false;
-	}
-	if (isPrefixOf(px, py)) {
-		return true;
-	}
-	return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
-};
diff --git a/templetes/node_modules/es-abstract/2017/AdvanceStringIndex.js b/templetes/node_modules/es-abstract/2017/AdvanceStringIndex.js
deleted file mode 100644
index 666f578b..00000000
--- a/templetes/node_modules/es-abstract/2017/AdvanceStringIndex.js
+++ /dev/null
@@ -1,45 +0,0 @@
-'use strict';
-
-var GetIntrinsic = require('../GetIntrinsic');
-
-var IsInteger = require('./IsInteger');
-var Type = require('./Type');
-
-var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
-
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var $charCodeAt = require('../helpers/callBound')('String.prototype.charCodeAt');
-
-// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
-
-module.exports = function AdvanceStringIndex(S, index, unicode) {
-	if (Type(S) !== 'String') {
-		throw new $TypeError('Assertion failed: `S` must be a String');
-	}
-	if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) {
-		throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');
-	}
-	if (Type(unicode) !== 'Boolean') {
-		throw new $TypeError('Assertion failed: `unicode` must be a Boolean');
-	}
-	if (!unicode) {
-		return index + 1;
-	}
-	var length = S.length;
-	if ((index + 1) >= length) {
-		return index + 1;
-	}
-
-	var first = $charCodeAt(S, index);
-	if (first < 0xD800 || first > 0xDBFF) {
-		return index + 1;
-	}
-
-	var second = $charCodeAt(S, index + 1);
-	if (second < 0xDC00 || second > 0xDFFF) {
-		return index + 1;
-	}
-
-	return index + 2;
-};
diff --git a/templetes/node_modules/es-abstract/2018/AbstractEqualityComparison.js b/templetes/node_modules/es-abstract/2018/AbstractEqualityComparison.js
deleted file mode 100644
index 40b39098..00000000
--- a/templetes/node_modules/es-abstract/2018/AbstractEqualityComparison.js
+++ /dev/null
@@ -1,37 +0,0 @@
-'use strict';
-
-var ToNumber = require('./ToNumber');
-var ToPrimitive = require('./ToPrimitive');
-var Type = require('./Type');
-
-// https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
-
-module.exports = function AbstractEqualityComparison(x, y) {
-	var xType = Type(x);
-	var yType = Type(y);
-	if (xType === yType) {
-		return x === y; // ES6+ specified this shortcut anyways.
-	}
-	if (x == null && y == null) {
-		return true;
-	}
-	if (xType === 'Number' && yType === 'String') {
-		return AbstractEqualityComparison(x, ToNumber(y));
-	}
-	if (xType === 'String' && yType === 'Number') {
-		return AbstractEqualityComparison(ToNumber(x), y);
-	}
-	if (xType === 'Boolean') {
-		return AbstractEqualityComparison(ToNumber(x), y);
-	}
-	if (yType === 'Boolean') {
-		return AbstractEqualityComparison(x, ToNumber(y));
-	}
-	if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') {
-		return AbstractEqualityComparison(x, ToPrimitive(y));
-	}
-	if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) {
-		return AbstractEqualityComparison(ToPrimitive(x), y);
-	}
-	return false;
-};
diff --git a/templetes/node_modules/es-abstract/2018/AbstractRelationalComparison.js b/templetes/node_modules/es-abstract/2018/AbstractRelationalComparison.js
deleted file mode 100644
index bc7ca832..00000000
--- a/templetes/node_modules/es-abstract/2018/AbstractRelationalComparison.js
+++ /dev/null
@@ -1,66 +0,0 @@
-'use strict';
-
-var GetIntrinsic = require('../GetIntrinsic');
-
-var $Number = GetIntrinsic('%Number%');
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var $isNaN = require('../helpers/isNaN');
-var $isFinite = require('../helpers/isFinite');
-var isPrefixOf = require('../helpers/isPrefixOf');
-
-var ToNumber = require('./ToNumber');
-var ToPrimitive = require('./ToPrimitive');
-var Type = require('./Type');
-
-// https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5
-
-// eslint-disable-next-line max-statements
-module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
-	if (Type(LeftFirst) !== 'Boolean') {
-		throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
-	}
-	var px;
-	var py;
-	if (LeftFirst) {
-		px = ToPrimitive(x, $Number);
-		py = ToPrimitive(y, $Number);
-	} else {
-		py = ToPrimitive(y, $Number);
-		px = ToPrimitive(x, $Number);
-	}
-	var bothStrings = Type(px) === 'String' && Type(py) === 'String';
-	if (!bothStrings) {
-		var nx = ToNumber(px);
-		var ny = ToNumber(py);
-		if ($isNaN(nx) || $isNaN(ny)) {
-			return undefined;
-		}
-		if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
-			return false;
-		}
-		if (nx === 0 && ny === 0) {
-			return false;
-		}
-		if (nx === Infinity) {
-			return false;
-		}
-		if (ny === Infinity) {
-			return true;
-		}
-		if (ny === -Infinity) {
-			return false;
-		}
-		if (nx === -Infinity) {
-			return true;
-		}
-		return nx < ny; // by now, these are both nonzero, finite, and not equal
-	}
-	if (isPrefixOf(py, px)) {
-		return false;
-	}
-	if (isPrefixOf(px, py)) {
-		return true;
-	}
-	return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
-};
diff --git a/templetes/node_modules/es-abstract/2018/AdvanceStringIndex.js b/templetes/node_modules/es-abstract/2018/AdvanceStringIndex.js
deleted file mode 100644
index 666f578b..00000000
--- a/templetes/node_modules/es-abstract/2018/AdvanceStringIndex.js
+++ /dev/null
@@ -1,45 +0,0 @@
-'use strict';
-
-var GetIntrinsic = require('../GetIntrinsic');
-
-var IsInteger = require('./IsInteger');
-var Type = require('./Type');
-
-var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
-
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var $charCodeAt = require('../helpers/callBound')('String.prototype.charCodeAt');
-
-// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
-
-module.exports = function AdvanceStringIndex(S, index, unicode) {
-	if (Type(S) !== 'String') {
-		throw new $TypeError('Assertion failed: `S` must be a String');
-	}
-	if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) {
-		throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');
-	}
-	if (Type(unicode) !== 'Boolean') {
-		throw new $TypeError('Assertion failed: `unicode` must be a Boolean');
-	}
-	if (!unicode) {
-		return index + 1;
-	}
-	var length = S.length;
-	if ((index + 1) >= length) {
-		return index + 1;
-	}
-
-	var first = $charCodeAt(S, index);
-	if (first < 0xD800 || first > 0xDBFF) {
-		return index + 1;
-	}
-
-	var second = $charCodeAt(S, index + 1);
-	if (second < 0xDC00 || second > 0xDFFF) {
-		return index + 1;
-	}
-
-	return index + 2;
-};
diff --git a/templetes/node_modules/es-abstract/2019/AbstractEqualityComparison.js b/templetes/node_modules/es-abstract/2019/AbstractEqualityComparison.js
deleted file mode 100644
index 40b39098..00000000
--- a/templetes/node_modules/es-abstract/2019/AbstractEqualityComparison.js
+++ /dev/null
@@ -1,37 +0,0 @@
-'use strict';
-
-var ToNumber = require('./ToNumber');
-var ToPrimitive = require('./ToPrimitive');
-var Type = require('./Type');
-
-// https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
-
-module.exports = function AbstractEqualityComparison(x, y) {
-	var xType = Type(x);
-	var yType = Type(y);
-	if (xType === yType) {
-		return x === y; // ES6+ specified this shortcut anyways.
-	}
-	if (x == null && y == null) {
-		return true;
-	}
-	if (xType === 'Number' && yType === 'String') {
-		return AbstractEqualityComparison(x, ToNumber(y));
-	}
-	if (xType === 'String' && yType === 'Number') {
-		return AbstractEqualityComparison(ToNumber(x), y);
-	}
-	if (xType === 'Boolean') {
-		return AbstractEqualityComparison(ToNumber(x), y);
-	}
-	if (yType === 'Boolean') {
-		return AbstractEqualityComparison(x, ToNumber(y));
-	}
-	if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') {
-		return AbstractEqualityComparison(x, ToPrimitive(y));
-	}
-	if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) {
-		return AbstractEqualityComparison(ToPrimitive(x), y);
-	}
-	return false;
-};
diff --git a/templetes/node_modules/es-abstract/2019/AbstractRelationalComparison.js b/templetes/node_modules/es-abstract/2019/AbstractRelationalComparison.js
deleted file mode 100644
index bc7ca832..00000000
--- a/templetes/node_modules/es-abstract/2019/AbstractRelationalComparison.js
+++ /dev/null
@@ -1,66 +0,0 @@
-'use strict';
-
-var GetIntrinsic = require('../GetIntrinsic');
-
-var $Number = GetIntrinsic('%Number%');
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var $isNaN = require('../helpers/isNaN');
-var $isFinite = require('../helpers/isFinite');
-var isPrefixOf = require('../helpers/isPrefixOf');
-
-var ToNumber = require('./ToNumber');
-var ToPrimitive = require('./ToPrimitive');
-var Type = require('./Type');
-
-// https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5
-
-// eslint-disable-next-line max-statements
-module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
-	if (Type(LeftFirst) !== 'Boolean') {
-		throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
-	}
-	var px;
-	var py;
-	if (LeftFirst) {
-		px = ToPrimitive(x, $Number);
-		py = ToPrimitive(y, $Number);
-	} else {
-		py = ToPrimitive(y, $Number);
-		px = ToPrimitive(x, $Number);
-	}
-	var bothStrings = Type(px) === 'String' && Type(py) === 'String';
-	if (!bothStrings) {
-		var nx = ToNumber(px);
-		var ny = ToNumber(py);
-		if ($isNaN(nx) || $isNaN(ny)) {
-			return undefined;
-		}
-		if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
-			return false;
-		}
-		if (nx === 0 && ny === 0) {
-			return false;
-		}
-		if (nx === Infinity) {
-			return false;
-		}
-		if (ny === Infinity) {
-			return true;
-		}
-		if (ny === -Infinity) {
-			return false;
-		}
-		if (nx === -Infinity) {
-			return true;
-		}
-		return nx < ny; // by now, these are both nonzero, finite, and not equal
-	}
-	if (isPrefixOf(py, px)) {
-		return false;
-	}
-	if (isPrefixOf(px, py)) {
-		return true;
-	}
-	return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
-};
diff --git a/templetes/node_modules/es-abstract/2019/AddEntriesFromIterable.js b/templetes/node_modules/es-abstract/2019/AddEntriesFromIterable.js
deleted file mode 100644
index 5aed4475..00000000
--- a/templetes/node_modules/es-abstract/2019/AddEntriesFromIterable.js
+++ /dev/null
@@ -1,52 +0,0 @@
-'use strict';
-
-var inspect = require('object-inspect');
-
-var GetIntrinsic = require('../GetIntrinsic');
-
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var Call = require('./Call');
-var Get = require('./Get');
-var GetIterator = require('./GetIterator');
-var IsCallable = require('./IsCallable');
-var IteratorClose = require('./IteratorClose');
-var IteratorStep = require('./IteratorStep');
-var IteratorValue = require('./IteratorValue');
-var Type = require('./Type');
-
-// https://tc39.es/ecma262/#sec-add-entries-from-iterable
-
-module.exports = function AddEntriesFromIterable(target, iterable, adder) {
-	if (!IsCallable(adder)) {
-		throw new $TypeError('Assertion failed: `adder` is not callable');
-	}
-	if (iterable == null) {
-		throw new $TypeError('Assertion failed: `iterable` is present, and not nullish');
-	}
-	var iteratorRecord = GetIterator(iterable);
-	while (true) { // eslint-disable-line no-constant-condition
-		var next = IteratorStep(iteratorRecord);
-		if (!next) {
-			return target;
-		}
-		var nextItem = IteratorValue(next);
-		if (Type(nextItem) !== 'Object') {
-			var error = new $TypeError('iterator next must return an Object, got ' + inspect(nextItem));
-			return IteratorClose(
-				iteratorRecord,
-				function () { throw error; } // eslint-disable-line no-loop-func
-			);
-		}
-		try {
-			var k = Get(nextItem, '0');
-			var v = Get(nextItem, '1');
-			Call(adder, target, [k, v]);
-		} catch (e) {
-			return IteratorClose(
-				iteratorRecord,
-				function () { throw e; }
-			);
-		}
-	}
-};
diff --git a/templetes/node_modules/es-abstract/2019/AdvanceStringIndex.js b/templetes/node_modules/es-abstract/2019/AdvanceStringIndex.js
deleted file mode 100644
index 666f578b..00000000
--- a/templetes/node_modules/es-abstract/2019/AdvanceStringIndex.js
+++ /dev/null
@@ -1,45 +0,0 @@
-'use strict';
-
-var GetIntrinsic = require('../GetIntrinsic');
-
-var IsInteger = require('./IsInteger');
-var Type = require('./Type');
-
-var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
-
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var $charCodeAt = require('../helpers/callBound')('String.prototype.charCodeAt');
-
-// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
-
-module.exports = function AdvanceStringIndex(S, index, unicode) {
-	if (Type(S) !== 'String') {
-		throw new $TypeError('Assertion failed: `S` must be a String');
-	}
-	if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) {
-		throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');
-	}
-	if (Type(unicode) !== 'Boolean') {
-		throw new $TypeError('Assertion failed: `unicode` must be a Boolean');
-	}
-	if (!unicode) {
-		return index + 1;
-	}
-	var length = S.length;
-	if ((index + 1) >= length) {
-		return index + 1;
-	}
-
-	var first = $charCodeAt(S, index);
-	if (first < 0xD800 || first > 0xDBFF) {
-		return index + 1;
-	}
-
-	var second = $charCodeAt(S, index + 1);
-	if (second < 0xDC00 || second > 0xDFFF) {
-		return index + 1;
-	}
-
-	return index + 2;
-};
diff --git a/templetes/node_modules/es-abstract/5/AbstractEqualityComparison.js b/templetes/node_modules/es-abstract/5/AbstractEqualityComparison.js
deleted file mode 100644
index e55c7647..00000000
--- a/templetes/node_modules/es-abstract/5/AbstractEqualityComparison.js
+++ /dev/null
@@ -1,37 +0,0 @@
-'use strict';
-
-var ToNumber = require('./ToNumber');
-var ToPrimitive = require('./ToPrimitive');
-var Type = require('./Type');
-
-// https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
-
-module.exports = function AbstractEqualityComparison(x, y) {
-	var xType = Type(x);
-	var yType = Type(y);
-	if (xType === yType) {
-		return x === y; // ES6+ specified this shortcut anyways.
-	}
-	if (x == null && y == null) {
-		return true;
-	}
-	if (xType === 'Number' && yType === 'String') {
-		return AbstractEqualityComparison(x, ToNumber(y));
-	}
-	if (xType === 'String' && yType === 'Number') {
-		return AbstractEqualityComparison(ToNumber(x), y);
-	}
-	if (xType === 'Boolean') {
-		return AbstractEqualityComparison(ToNumber(x), y);
-	}
-	if (yType === 'Boolean') {
-		return AbstractEqualityComparison(x, ToNumber(y));
-	}
-	if ((xType === 'String' || xType === 'Number') && yType === 'Object') {
-		return AbstractEqualityComparison(x, ToPrimitive(y));
-	}
-	if (xType === 'Object' && (yType === 'String' || yType === 'Number')) {
-		return AbstractEqualityComparison(ToPrimitive(x), y);
-	}
-	return false;
-};
diff --git a/templetes/node_modules/es-abstract/5/AbstractRelationalComparison.js b/templetes/node_modules/es-abstract/5/AbstractRelationalComparison.js
deleted file mode 100644
index bc7ca832..00000000
--- a/templetes/node_modules/es-abstract/5/AbstractRelationalComparison.js
+++ /dev/null
@@ -1,66 +0,0 @@
-'use strict';
-
-var GetIntrinsic = require('../GetIntrinsic');
-
-var $Number = GetIntrinsic('%Number%');
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var $isNaN = require('../helpers/isNaN');
-var $isFinite = require('../helpers/isFinite');
-var isPrefixOf = require('../helpers/isPrefixOf');
-
-var ToNumber = require('./ToNumber');
-var ToPrimitive = require('./ToPrimitive');
-var Type = require('./Type');
-
-// https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5
-
-// eslint-disable-next-line max-statements
-module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
-	if (Type(LeftFirst) !== 'Boolean') {
-		throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
-	}
-	var px;
-	var py;
-	if (LeftFirst) {
-		px = ToPrimitive(x, $Number);
-		py = ToPrimitive(y, $Number);
-	} else {
-		py = ToPrimitive(y, $Number);
-		px = ToPrimitive(x, $Number);
-	}
-	var bothStrings = Type(px) === 'String' && Type(py) === 'String';
-	if (!bothStrings) {
-		var nx = ToNumber(px);
-		var ny = ToNumber(py);
-		if ($isNaN(nx) || $isNaN(ny)) {
-			return undefined;
-		}
-		if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
-			return false;
-		}
-		if (nx === 0 && ny === 0) {
-			return false;
-		}
-		if (nx === Infinity) {
-			return false;
-		}
-		if (ny === Infinity) {
-			return true;
-		}
-		if (ny === -Infinity) {
-			return false;
-		}
-		if (nx === -Infinity) {
-			return true;
-		}
-		return nx < ny; // by now, these are both nonzero, finite, and not equal
-	}
-	if (isPrefixOf(py, px)) {
-		return false;
-	}
-	if (isPrefixOf(px, py)) {
-		return true;
-	}
-	return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
-};
diff --git a/templetes/node_modules/events/tests/add-listeners.js b/templetes/node_modules/events/tests/add-listeners.js
deleted file mode 100644
index 9b578272..00000000
--- a/templetes/node_modules/events/tests/add-listeners.js
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-
-var common = require('./common');
-var assert = require('assert');
-var EventEmitter = require('../');
-
-{
-  var ee = new EventEmitter();
-  var events_new_listener_emitted = [];
-  var listeners_new_listener_emitted = [];
-
-  // Sanity check
-  assert.strictEqual(ee.addListener, ee.on);
-
-  ee.on('newListener', function(event, listener) {
-    // Don't track newListener listeners.
-    if (event === 'newListener')
-      return;
-
-    events_new_listener_emitted.push(event);
-    listeners_new_listener_emitted.push(listener);
-  });
-
-  var hello = common.mustCall(function(a, b) {
-    assert.strictEqual('a', a);
-    assert.strictEqual('b', b);
-  });
-
-  ee.once('newListener', function(name, listener) {
-    assert.strictEqual(name, 'hello');
-    assert.strictEqual(listener, hello);
-
-    var listeners = this.listeners('hello');
-    assert.ok(Array.isArray(listeners));
-    assert.strictEqual(listeners.length, 0);
-  });
-
-  ee.on('hello', hello);
-  ee.once('foo', assert.fail);
-
-  assert.ok(Array.isArray(events_new_listener_emitted));
-  assert.strictEqual(events_new_listener_emitted.length, 2);
-  assert.strictEqual(events_new_listener_emitted[0], 'hello');
-  assert.strictEqual(events_new_listener_emitted[1], 'foo');
-
-  assert.ok(Array.isArray(listeners_new_listener_emitted));
-  assert.strictEqual(listeners_new_listener_emitted.length, 2);
-  assert.strictEqual(listeners_new_listener_emitted[0], hello);
-  assert.strictEqual(listeners_new_listener_emitted[1], assert.fail);
-
-  ee.emit('hello', 'a', 'b');
-}
-
-// just make sure that this doesn't throw:
-{
-  var f = new EventEmitter();
-
-  f.setMaxListeners(0);
-}
-
-{
-  var listen1 = function() {};
-  var listen2 = function() {};
-  var ee = new EventEmitter();
-
-  ee.once('newListener', function() {
-    var listeners = ee.listeners('hello');
-    assert.ok(Array.isArray(listeners));
-    assert.strictEqual(listeners.length, 0);
-    ee.once('newListener', function() {
-      var listeners = ee.listeners('hello');
-      assert.ok(Array.isArray(listeners));
-      assert.strictEqual(listeners.length, 0);
-    });
-    ee.on('hello', listen2);
-  });
-  ee.on('hello', listen1);
-  // The order of listeners on an event is not always the order in which the
-  // listeners were added.
-  var listeners = ee.listeners('hello');
-  assert.ok(Array.isArray(listeners));
-  assert.strictEqual(listeners.length, 2);
-  assert.strictEqual(listeners[0], listen2);
-  assert.strictEqual(listeners[1], listen1);
-}
-
-// Verify that the listener must be a function
-assert.throws(function() {
-  var ee = new EventEmitter();
-
-  ee.on('foo', null);
-}, /^TypeError: The "listener" argument must be of type Function. Received type object$/);
diff --git a/templetes/node_modules/fsevents/node_modules/abbrev/abbrev.js b/templetes/node_modules/fsevents/node_modules/abbrev/abbrev.js
deleted file mode 100644
index 7b1dc5d6..00000000
--- a/templetes/node_modules/fsevents/node_modules/abbrev/abbrev.js
+++ /dev/null
@@ -1,61 +0,0 @@
-module.exports = exports = abbrev.abbrev = abbrev
-
-abbrev.monkeyPatch = monkeyPatch
-
-function monkeyPatch () {
-  Object.defineProperty(Array.prototype, 'abbrev', {
-    value: function () { return abbrev(this) },
-    enumerable: false, configurable: true, writable: true
-  })
-
-  Object.defineProperty(Object.prototype, 'abbrev', {
-    value: function () { return abbrev(Object.keys(this)) },
-    enumerable: false, configurable: true, writable: true
-  })
-}
-
-function abbrev (list) {
-  if (arguments.length !== 1 || !Array.isArray(list)) {
-    list = Array.prototype.slice.call(arguments, 0)
-  }
-  for (var i = 0, l = list.length, args = [] ; i < l ; i ++) {
-    args[i] = typeof list[i] === "string" ? list[i] : String(list[i])
-  }
-
-  // sort them lexicographically, so that they're next to their nearest kin
-  args = args.sort(lexSort)
-
-  // walk through each, seeing how much it has in common with the next and previous
-  var abbrevs = {}
-    , prev = ""
-  for (var i = 0, l = args.length ; i < l ; i ++) {
-    var current = args[i]
-      , next = args[i + 1] || ""
-      , nextMatches = true
-      , prevMatches = true
-    if (current === next) continue
-    for (var j = 0, cl = current.length ; j < cl ; j ++) {
-      var curChar = current.charAt(j)
-      nextMatches = nextMatches && curChar === next.charAt(j)
-      prevMatches = prevMatches && curChar === prev.charAt(j)
-      if (!nextMatches && !prevMatches) {
-        j ++
-        break
-      }
-    }
-    prev = current
-    if (j === cl) {
-      abbrevs[current] = current
-      continue
-    }
-    for (var a = current.substr(0, j) ; j <= cl ; j ++) {
-      abbrevs[a] = current
-      a += current.charAt(j)
-    }
-  }
-  return abbrevs
-}
-
-function lexSort (a, b) {
-  return a === b ? 0 : a > b ? 1 : -1
-}
diff --git a/templetes/node_modules/fsevents/node_modules/minimist/test/all_bool.js b/templetes/node_modules/fsevents/node_modules/minimist/test/all_bool.js
deleted file mode 100644
index ac835483..00000000
--- a/templetes/node_modules/fsevents/node_modules/minimist/test/all_bool.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var parse = require('../');
-var test = require('tape');
-
-test('flag boolean true (default all --args to boolean)', function (t) {
-    var argv = parse(['moo', '--honk', 'cow'], {
-        boolean: true
-    });
-    
-    t.deepEqual(argv, {
-        honk: true,
-        _: ['moo', 'cow']
-    });
-    
-    t.deepEqual(typeof argv.honk, 'boolean');
-    t.end();
-});
-
-test('flag boolean true only affects double hyphen arguments without equals signs', function (t) {
-    var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], {
-        boolean: true
-    });
-    
-    t.deepEqual(argv, {
-        honk: true,
-        tacos: 'good',
-        p: 55,
-        _: ['moo', 'cow']
-    });
-    
-    t.deepEqual(typeof argv.honk, 'boolean');
-    t.end();
-});
diff --git a/templetes/node_modules/fsevents/node_modules/node-pre-gyp/lib/util/abi_crosswalk.json b/templetes/node_modules/fsevents/node_modules/node-pre-gyp/lib/util/abi_crosswalk.json
deleted file mode 100644
index 8e559d36..00000000
--- a/templetes/node_modules/fsevents/node_modules/node-pre-gyp/lib/util/abi_crosswalk.json
+++ /dev/null
@@ -1,2070 +0,0 @@
-{
-  "0.1.14": {
-    "node_abi": null,
-    "v8": "1.3"
-  },
-  "0.1.15": {
-    "node_abi": null,
-    "v8": "1.3"
-  },
-  "0.1.16": {
-    "node_abi": null,
-    "v8": "1.3"
-  },
-  "0.1.17": {
-    "node_abi": null,
-    "v8": "1.3"
-  },
-  "0.1.18": {
-    "node_abi": null,
-    "v8": "1.3"
-  },
-  "0.1.19": {
-    "node_abi": null,
-    "v8": "2.0"
-  },
-  "0.1.20": {
-    "node_abi": null,
-    "v8": "2.0"
-  },
-  "0.1.21": {
-    "node_abi": null,
-    "v8": "2.0"
-  },
-  "0.1.22": {
-    "node_abi": null,
-    "v8": "2.0"
-  },
-  "0.1.23": {
-    "node_abi": null,
-    "v8": "2.0"
-  },
-  "0.1.24": {
-    "node_abi": null,
-    "v8": "2.0"
-  },
-  "0.1.25": {
-    "node_abi": null,
-    "v8": "2.0"
-  },
-  "0.1.26": {
-    "node_abi": null,
-    "v8": "2.0"
-  },
-  "0.1.27": {
-    "node_abi": null,
-    "v8": "2.1"
-  },
-  "0.1.28": {
-    "node_abi": null,
-    "v8": "2.1"
-  },
-  "0.1.29": {
-    "node_abi": null,
-    "v8": "2.1"
-  },
-  "0.1.30": {
-    "node_abi": null,
-    "v8": "2.1"
-  },
-  "0.1.31": {
-    "node_abi": null,
-    "v8": "2.1"
-  },
-  "0.1.32": {
-    "node_abi": null,
-    "v8": "2.1"
-  },
-  "0.1.33": {
-    "node_abi": null,
-    "v8": "2.1"
-  },
-  "0.1.90": {
-    "node_abi": null,
-    "v8": "2.2"
-  },
-  "0.1.91": {
-    "node_abi": null,
-    "v8": "2.2"
-  },
-  "0.1.92": {
-    "node_abi": null,
-    "v8": "2.2"
-  },
-  "0.1.93": {
-    "node_abi": null,
-    "v8": "2.2"
-  },
-  "0.1.94": {
-    "node_abi": null,
-    "v8": "2.2"
-  },
-  "0.1.95": {
-    "node_abi": null,
-    "v8": "2.2"
-  },
-  "0.1.96": {
-    "node_abi": null,
-    "v8": "2.2"
-  },
-  "0.1.97": {
-    "node_abi": null,
-    "v8": "2.2"
-  },
-  "0.1.98": {
-    "node_abi": null,
-    "v8": "2.2"
-  },
-  "0.1.99": {
-    "node_abi": null,
-    "v8": "2.2"
-  },
-  "0.1.100": {
-    "node_abi": null,
-    "v8": "2.2"
-  },
-  "0.1.101": {
-    "node_abi": null,
-    "v8": "2.3"
-  },
-  "0.1.102": {
-    "node_abi": null,
-    "v8": "2.3"
-  },
-  "0.1.103": {
-    "node_abi": null,
-    "v8": "2.3"
-  },
-  "0.1.104": {
-    "node_abi": null,
-    "v8": "2.3"
-  },
-  "0.2.0": {
-    "node_abi": 1,
-    "v8": "2.3"
-  },
-  "0.2.1": {
-    "node_abi": 1,
-    "v8": "2.3"
-  },
-  "0.2.2": {
-    "node_abi": 1,
-    "v8": "2.3"
-  },
-  "0.2.3": {
-    "node_abi": 1,
-    "v8": "2.3"
-  },
-  "0.2.4": {
-    "node_abi": 1,
-    "v8": "2.3"
-  },
-  "0.2.5": {
-    "node_abi": 1,
-    "v8": "2.3"
-  },
-  "0.2.6": {
-    "node_abi": 1,
-    "v8": "2.3"
-  },
-  "0.3.0": {
-    "node_abi": 1,
-    "v8": "2.5"
-  },
-  "0.3.1": {
-    "node_abi": 1,
-    "v8": "2.5"
-  },
-  "0.3.2": {
-    "node_abi": 1,
-    "v8": "3.0"
-  },
-  "0.3.3": {
-    "node_abi": 1,
-    "v8": "3.0"
-  },
-  "0.3.4": {
-    "node_abi": 1,
-    "v8": "3.0"
-  },
-  "0.3.5": {
-    "node_abi": 1,
-    "v8": "3.0"
-  },
-  "0.3.6": {
-    "node_abi": 1,
-    "v8": "3.0"
-  },
-  "0.3.7": {
-    "node_abi": 1,
-    "v8": "3.0"
-  },
-  "0.3.8": {
-    "node_abi": 1,
-    "v8": "3.1"
-  },
-  "0.4.0": {
-    "node_abi": 1,
-    "v8": "3.1"
-  },
-  "0.4.1": {
-    "node_abi": 1,
-    "v8": "3.1"
-  },
-  "0.4.2": {
-    "node_abi": 1,
-    "v8": "3.1"
-  },
-  "0.4.3": {
-    "node_abi": 1,
-    "v8": "3.1"
-  },
-  "0.4.4": {
-    "node_abi": 1,
-    "v8": "3.1"
-  },
-  "0.4.5": {
-    "node_abi": 1,
-    "v8": "3.1"
-  },
-  "0.4.6": {
-    "node_abi": 1,
-    "v8": "3.1"
-  },
-  "0.4.7": {
-    "node_abi": 1,
-    "v8": "3.1"
-  },
-  "0.4.8": {
-    "node_abi": 1,
-    "v8": "3.1"
-  },
-  "0.4.9": {
-    "node_abi": 1,
-    "v8": "3.1"
-  },
-  "0.4.10": {
-    "node_abi": 1,
-    "v8": "3.1"
-  },
-  "0.4.11": {
-    "node_abi": 1,
-    "v8": "3.1"
-  },
-  "0.4.12": {
-    "node_abi": 1,
-    "v8": "3.1"
-  },
-  "0.5.0": {
-    "node_abi": 1,
-    "v8": "3.1"
-  },
-  "0.5.1": {
-    "node_abi": 1,
-    "v8": "3.4"
-  },
-  "0.5.2": {
-    "node_abi": 1,
-    "v8": "3.4"
-  },
-  "0.5.3": {
-    "node_abi": 1,
-    "v8": "3.4"
-  },
-  "0.5.4": {
-    "node_abi": 1,
-    "v8": "3.5"
-  },
-  "0.5.5": {
-    "node_abi": 1,
-    "v8": "3.5"
-  },
-  "0.5.6": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.5.7": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.5.8": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.5.9": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.5.10": {
-    "node_abi": 1,
-    "v8": "3.7"
-  },
-  "0.6.0": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.1": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.2": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.3": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.4": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.5": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.6": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.7": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.8": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.9": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.10": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.11": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.12": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.13": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.14": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.15": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.16": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.17": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.18": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.19": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.20": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.6.21": {
-    "node_abi": 1,
-    "v8": "3.6"
-  },
-  "0.7.0": {
-    "node_abi": 1,
-    "v8": "3.8"
-  },
-  "0.7.1": {
-    "node_abi": 1,
-    "v8": "3.8"
-  },
-  "0.7.2": {
-    "node_abi": 1,
-    "v8": "3.8"
-  },
-  "0.7.3": {
-    "node_abi": 1,
-    "v8": "3.9"
-  },
-  "0.7.4": {
-    "node_abi": 1,
-    "v8": "3.9"
-  },
-  "0.7.5": {
-    "node_abi": 1,
-    "v8": "3.9"
-  },
-  "0.7.6": {
-    "node_abi": 1,
-    "v8": "3.9"
-  },
-  "0.7.7": {
-    "node_abi": 1,
-    "v8": "3.9"
-  },
-  "0.7.8": {
-    "node_abi": 1,
-    "v8": "3.9"
-  },
-  "0.7.9": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.7.10": {
-    "node_abi": 1,
-    "v8": "3.9"
-  },
-  "0.7.11": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.7.12": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.0": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.1": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.2": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.3": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.4": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.5": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.6": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.7": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.8": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.9": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.10": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.11": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.12": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.13": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.14": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.15": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.16": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.17": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.18": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.19": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.20": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.21": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.22": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.23": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.24": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.25": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.26": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.27": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.8.28": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.9.0": {
-    "node_abi": 1,
-    "v8": "3.11"
-  },
-  "0.9.1": {
-    "node_abi": 10,
-    "v8": "3.11"
-  },
-  "0.9.2": {
-    "node_abi": 10,
-    "v8": "3.11"
-  },
-  "0.9.3": {
-    "node_abi": 10,
-    "v8": "3.13"
-  },
-  "0.9.4": {
-    "node_abi": 10,
-    "v8": "3.13"
-  },
-  "0.9.5": {
-    "node_abi": 10,
-    "v8": "3.13"
-  },
-  "0.9.6": {
-    "node_abi": 10,
-    "v8": "3.15"
-  },
-  "0.9.7": {
-    "node_abi": 10,
-    "v8": "3.15"
-  },
-  "0.9.8": {
-    "node_abi": 10,
-    "v8": "3.15"
-  },
-  "0.9.9": {
-    "node_abi": 11,
-    "v8": "3.15"
-  },
-  "0.9.10": {
-    "node_abi": 11,
-    "v8": "3.15"
-  },
-  "0.9.11": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.9.12": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.0": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.1": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.2": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.3": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.4": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.5": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.6": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.7": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.8": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.9": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.10": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.11": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.12": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.13": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.14": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.15": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.16": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.17": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.18": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.19": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.20": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.21": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.22": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.23": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.24": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.25": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.26": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.27": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.28": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.29": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.30": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.31": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.32": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.33": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.34": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.35": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.36": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.37": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.38": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.39": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.40": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.41": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.42": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.43": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.44": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.45": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.46": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.47": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.10.48": {
-    "node_abi": 11,
-    "v8": "3.14"
-  },
-  "0.11.0": {
-    "node_abi": 12,
-    "v8": "3.17"
-  },
-  "0.11.1": {
-    "node_abi": 12,
-    "v8": "3.18"
-  },
-  "0.11.2": {
-    "node_abi": 12,
-    "v8": "3.19"
-  },
-  "0.11.3": {
-    "node_abi": 12,
-    "v8": "3.19"
-  },
-  "0.11.4": {
-    "node_abi": 12,
-    "v8": "3.20"
-  },
-  "0.11.5": {
-    "node_abi": 12,
-    "v8": "3.20"
-  },
-  "0.11.6": {
-    "node_abi": 12,
-    "v8": "3.20"
-  },
-  "0.11.7": {
-    "node_abi": 12,
-    "v8": "3.20"
-  },
-  "0.11.8": {
-    "node_abi": 13,
-    "v8": "3.21"
-  },
-  "0.11.9": {
-    "node_abi": 13,
-    "v8": "3.22"
-  },
-  "0.11.10": {
-    "node_abi": 13,
-    "v8": "3.22"
-  },
-  "0.11.11": {
-    "node_abi": 14,
-    "v8": "3.22"
-  },
-  "0.11.12": {
-    "node_abi": 14,
-    "v8": "3.22"
-  },
-  "0.11.13": {
-    "node_abi": 14,
-    "v8": "3.25"
-  },
-  "0.11.14": {
-    "node_abi": 14,
-    "v8": "3.26"
-  },
-  "0.11.15": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.11.16": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.0": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.1": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.2": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.3": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.4": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.5": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.6": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.7": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.8": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.9": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.10": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.11": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.12": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.13": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.14": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.15": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.16": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.17": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "0.12.18": {
-    "node_abi": 14,
-    "v8": "3.28"
-  },
-  "1.0.0": {
-    "node_abi": 42,
-    "v8": "3.31"
-  },
-  "1.0.1": {
-    "node_abi": 42,
-    "v8": "3.31"
-  },
-  "1.0.2": {
-    "node_abi": 42,
-    "v8": "3.31"
-  },
-  "1.0.3": {
-    "node_abi": 42,
-    "v8": "4.1"
-  },
-  "1.0.4": {
-    "node_abi": 42,
-    "v8": "4.1"
-  },
-  "1.1.0": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.2.0": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.3.0": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.4.1": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.4.2": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.4.3": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.5.0": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.5.1": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.6.0": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.6.1": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.6.2": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.6.3": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.6.4": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.7.1": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.8.1": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.8.2": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.8.3": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "1.8.4": {
-    "node_abi": 43,
-    "v8": "4.1"
-  },
-  "2.0.0": {
-    "node_abi": 44,
-    "v8": "4.2"
-  },
-  "2.0.1": {
-    "node_abi": 44,
-    "v8": "4.2"
-  },
-  "2.0.2": {
-    "node_abi": 44,
-    "v8": "4.2"
-  },
-  "2.1.0": {
-    "node_abi": 44,
-    "v8": "4.2"
-  },
-  "2.2.0": {
-    "node_abi": 44,
-    "v8": "4.2"
-  },
-  "2.2.1": {
-    "node_abi": 44,
-    "v8": "4.2"
-  },
-  "2.3.0": {
-    "node_abi": 44,
-    "v8": "4.2"
-  },
-  "2.3.1": {
-    "node_abi": 44,
-    "v8": "4.2"
-  },
-  "2.3.2": {
-    "node_abi": 44,
-    "v8": "4.2"
-  },
-  "2.3.3": {
-    "node_abi": 44,
-    "v8": "4.2"
-  },
-  "2.3.4": {
-    "node_abi": 44,
-    "v8": "4.2"
-  },
-  "2.4.0": {
-    "node_abi": 44,
-    "v8": "4.2"
-  },
-  "2.5.0": {
-    "node_abi": 44,
-    "v8": "4.2"
-  },
-  "3.0.0": {
-    "node_abi": 45,
-    "v8": "4.4"
-  },
-  "3.1.0": {
-    "node_abi": 45,
-    "v8": "4.4"
-  },
-  "3.2.0": {
-    "node_abi": 45,
-    "v8": "4.4"
-  },
-  "3.3.0": {
-    "node_abi": 45,
-    "v8": "4.4"
-  },
-  "3.3.1": {
-    "node_abi": 45,
-    "v8": "4.4"
-  },
-  "4.0.0": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.1.0": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.1.1": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.1.2": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.2.0": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.2.1": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.2.2": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.2.3": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.2.4": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.2.5": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.2.6": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.3.0": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.3.1": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.3.2": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.4.0": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.4.1": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.4.2": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.4.3": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.4.4": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.4.5": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.4.6": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.4.7": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.5.0": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.6.0": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.6.1": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.6.2": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.7.0": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.7.1": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.7.2": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.7.3": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.8.0": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.8.1": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.8.2": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.8.3": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.8.4": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.8.5": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.8.6": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.8.7": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.9.0": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "4.9.1": {
-    "node_abi": 46,
-    "v8": "4.5"
-  },
-  "5.0.0": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.1.0": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.1.1": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.2.0": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.3.0": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.4.0": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.4.1": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.5.0": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.6.0": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.7.0": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.7.1": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.8.0": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.9.0": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.9.1": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.10.0": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.10.1": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.11.0": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.11.1": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "5.12.0": {
-    "node_abi": 47,
-    "v8": "4.6"
-  },
-  "6.0.0": {
-    "node_abi": 48,
-    "v8": "5.0"
-  },
-  "6.1.0": {
-    "node_abi": 48,
-    "v8": "5.0"
-  },
-  "6.2.0": {
-    "node_abi": 48,
-    "v8": "5.0"
-  },
-  "6.2.1": {
-    "node_abi": 48,
-    "v8": "5.0"
-  },
-  "6.2.2": {
-    "node_abi": 48,
-    "v8": "5.0"
-  },
-  "6.3.0": {
-    "node_abi": 48,
-    "v8": "5.0"
-  },
-  "6.3.1": {
-    "node_abi": 48,
-    "v8": "5.0"
-  },
-  "6.4.0": {
-    "node_abi": 48,
-    "v8": "5.0"
-  },
-  "6.5.0": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.6.0": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.7.0": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.8.0": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.8.1": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.9.0": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.9.1": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.9.2": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.9.3": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.9.4": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.9.5": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.10.0": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.10.1": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.10.2": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.10.3": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.11.0": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.11.1": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.11.2": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.11.3": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.11.4": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.11.5": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.12.0": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.12.1": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.12.2": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.12.3": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.13.0": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.13.1": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.14.0": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.14.1": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.14.2": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.14.3": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.14.4": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.15.0": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.15.1": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.16.0": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.17.0": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "6.17.1": {
-    "node_abi": 48,
-    "v8": "5.1"
-  },
-  "7.0.0": {
-    "node_abi": 51,
-    "v8": "5.4"
-  },
-  "7.1.0": {
-    "node_abi": 51,
-    "v8": "5.4"
-  },
-  "7.2.0": {
-    "node_abi": 51,
-    "v8": "5.4"
-  },
-  "7.2.1": {
-    "node_abi": 51,
-    "v8": "5.4"
-  },
-  "7.3.0": {
-    "node_abi": 51,
-    "v8": "5.4"
-  },
-  "7.4.0": {
-    "node_abi": 51,
-    "v8": "5.4"
-  },
-  "7.5.0": {
-    "node_abi": 51,
-    "v8": "5.4"
-  },
-  "7.6.0": {
-    "node_abi": 51,
-    "v8": "5.5"
-  },
-  "7.7.0": {
-    "node_abi": 51,
-    "v8": "5.5"
-  },
-  "7.7.1": {
-    "node_abi": 51,
-    "v8": "5.5"
-  },
-  "7.7.2": {
-    "node_abi": 51,
-    "v8": "5.5"
-  },
-  "7.7.3": {
-    "node_abi": 51,
-    "v8": "5.5"
-  },
-  "7.7.4": {
-    "node_abi": 51,
-    "v8": "5.5"
-  },
-  "7.8.0": {
-    "node_abi": 51,
-    "v8": "5.5"
-  },
-  "7.9.0": {
-    "node_abi": 51,
-    "v8": "5.5"
-  },
-  "7.10.0": {
-    "node_abi": 51,
-    "v8": "5.5"
-  },
-  "7.10.1": {
-    "node_abi": 51,
-    "v8": "5.5"
-  },
-  "8.0.0": {
-    "node_abi": 57,
-    "v8": "5.8"
-  },
-  "8.1.0": {
-    "node_abi": 57,
-    "v8": "5.8"
-  },
-  "8.1.1": {
-    "node_abi": 57,
-    "v8": "5.8"
-  },
-  "8.1.2": {
-    "node_abi": 57,
-    "v8": "5.8"
-  },
-  "8.1.3": {
-    "node_abi": 57,
-    "v8": "5.8"
-  },
-  "8.1.4": {
-    "node_abi": 57,
-    "v8": "5.8"
-  },
-  "8.2.0": {
-    "node_abi": 57,
-    "v8": "5.8"
-  },
-  "8.2.1": {
-    "node_abi": 57,
-    "v8": "5.8"
-  },
-  "8.3.0": {
-    "node_abi": 57,
-    "v8": "6.0"
-  },
-  "8.4.0": {
-    "node_abi": 57,
-    "v8": "6.0"
-  },
-  "8.5.0": {
-    "node_abi": 57,
-    "v8": "6.0"
-  },
-  "8.6.0": {
-    "node_abi": 57,
-    "v8": "6.0"
-  },
-  "8.7.0": {
-    "node_abi": 57,
-    "v8": "6.1"
-  },
-  "8.8.0": {
-    "node_abi": 57,
-    "v8": "6.1"
-  },
-  "8.8.1": {
-    "node_abi": 57,
-    "v8": "6.1"
-  },
-  "8.9.0": {
-    "node_abi": 57,
-    "v8": "6.1"
-  },
-  "8.9.1": {
-    "node_abi": 57,
-    "v8": "6.1"
-  },
-  "8.9.2": {
-    "node_abi": 57,
-    "v8": "6.1"
-  },
-  "8.9.3": {
-    "node_abi": 57,
-    "v8": "6.1"
-  },
-  "8.9.4": {
-    "node_abi": 57,
-    "v8": "6.1"
-  },
-  "8.10.0": {
-    "node_abi": 57,
-    "v8": "6.2"
-  },
-  "8.11.0": {
-    "node_abi": 57,
-    "v8": "6.2"
-  },
-  "8.11.1": {
-    "node_abi": 57,
-    "v8": "6.2"
-  },
-  "8.11.2": {
-    "node_abi": 57,
-    "v8": "6.2"
-  },
-  "8.11.3": {
-    "node_abi": 57,
-    "v8": "6.2"
-  },
-  "8.11.4": {
-    "node_abi": 57,
-    "v8": "6.2"
-  },
-  "8.12.0": {
-    "node_abi": 57,
-    "v8": "6.2"
-  },
-  "8.13.0": {
-    "node_abi": 57,
-    "v8": "6.2"
-  },
-  "8.14.0": {
-    "node_abi": 57,
-    "v8": "6.2"
-  },
-  "8.14.1": {
-    "node_abi": 57,
-    "v8": "6.2"
-  },
-  "8.15.0": {
-    "node_abi": 57,
-    "v8": "6.2"
-  },
-  "8.15.1": {
-    "node_abi": 57,
-    "v8": "6.2"
-  },
-  "8.16.0": {
-    "node_abi": 57,
-    "v8": "6.2"
-  },
-  "8.16.1": {
-    "node_abi": 57,
-    "v8": "6.2"
-  },
-  "8.16.2": {
-    "node_abi": 57,
-    "v8": "6.2"
-  },
-  "9.0.0": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.1.0": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.2.0": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.2.1": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.3.0": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.4.0": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.5.0": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.6.0": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.6.1": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.7.0": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.7.1": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.8.0": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.9.0": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.10.0": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.10.1": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.11.0": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.11.1": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "9.11.2": {
-    "node_abi": 59,
-    "v8": "6.2"
-  },
-  "10.0.0": {
-    "node_abi": 64,
-    "v8": "6.6"
-  },
-  "10.1.0": {
-    "node_abi": 64,
-    "v8": "6.6"
-  },
-  "10.2.0": {
-    "node_abi": 64,
-    "v8": "6.6"
-  },
-  "10.2.1": {
-    "node_abi": 64,
-    "v8": "6.6"
-  },
-  "10.3.0": {
-    "node_abi": 64,
-    "v8": "6.6"
-  },
-  "10.4.0": {
-    "node_abi": 64,
-    "v8": "6.7"
-  },
-  "10.4.1": {
-    "node_abi": 64,
-    "v8": "6.7"
-  },
-  "10.5.0": {
-    "node_abi": 64,
-    "v8": "6.7"
-  },
-  "10.6.0": {
-    "node_abi": 64,
-    "v8": "6.7"
-  },
-  "10.7.0": {
-    "node_abi": 64,
-    "v8": "6.7"
-  },
-  "10.8.0": {
-    "node_abi": 64,
-    "v8": "6.7"
-  },
-  "10.9.0": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.10.0": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.11.0": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.12.0": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.13.0": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.14.0": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.14.1": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.14.2": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.15.0": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.15.1": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.15.2": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.15.3": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.16.0": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.16.1": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.16.2": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.16.3": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "10.17.0": {
-    "node_abi": 64,
-    "v8": "6.8"
-  },
-  "11.0.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.1.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.2.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.3.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.4.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.5.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.6.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.7.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.8.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.9.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.10.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.10.1": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.11.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.12.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.13.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.14.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "11.15.0": {
-    "node_abi": 67,
-    "v8": "7.0"
-  },
-  "12.0.0": {
-    "node_abi": 72,
-    "v8": "7.4"
-  },
-  "12.1.0": {
-    "node_abi": 72,
-    "v8": "7.4"
-  },
-  "12.2.0": {
-    "node_abi": 72,
-    "v8": "7.4"
-  },
-  "12.3.0": {
-    "node_abi": 72,
-    "v8": "7.4"
-  },
-  "12.3.1": {
-    "node_abi": 72,
-    "v8": "7.4"
-  },
-  "12.4.0": {
-    "node_abi": 72,
-    "v8": "7.4"
-  },
-  "12.5.0": {
-    "node_abi": 72,
-    "v8": "7.5"
-  },
-  "12.6.0": {
-    "node_abi": 72,
-    "v8": "7.5"
-  },
-  "12.7.0": {
-    "node_abi": 72,
-    "v8": "7.5"
-  },
-  "12.8.0": {
-    "node_abi": 72,
-    "v8": "7.5"
-  },
-  "12.8.1": {
-    "node_abi": 72,
-    "v8": "7.5"
-  },
-  "12.9.0": {
-    "node_abi": 72,
-    "v8": "7.6"
-  },
-  "12.9.1": {
-    "node_abi": 72,
-    "v8": "7.6"
-  },
-  "12.10.0": {
-    "node_abi": 72,
-    "v8": "7.6"
-  },
-  "12.11.0": {
-    "node_abi": 72,
-    "v8": "7.7"
-  },
-  "12.11.1": {
-    "node_abi": 72,
-    "v8": "7.7"
-  },
-  "12.12.0": {
-    "node_abi": 72,
-    "v8": "7.7"
-  },
-  "12.13.0": {
-    "node_abi": 72,
-    "v8": "7.7"
-  },
-  "13.0.0": {
-    "node_abi": 79,
-    "v8": "7.8"
-  },
-  "13.0.1": {
-    "node_abi": 79,
-    "v8": "7.8"
-  }
-}
\ No newline at end of file
diff --git a/templetes/node_modules/fsevents/node_modules/readable-stream/lib/_stream_duplex.js b/templetes/node_modules/fsevents/node_modules/readable-stream/lib/_stream_duplex.js
deleted file mode 100644
index 57003c32..00000000
--- a/templetes/node_modules/fsevents/node_modules/readable-stream/lib/_stream_duplex.js
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-
-// a duplex stream is just a stream that is both readable and writable.
-// Since JS doesn't have multiple prototypal inheritance, this class
-// prototypally inherits from Readable, and then parasitically from
-// Writable.
-
-'use strict';
-
-/*<replacement>*/
-
-var pna = require('process-nextick-args');
-/*</replacement>*/
-
-/*<replacement>*/
-var objectKeys = Object.keys || function (obj) {
-  var keys = [];
-  for (var key in obj) {
-    keys.push(key);
-  }return keys;
-};
-/*</replacement>*/
-
-module.exports = Duplex;
-
-/*<replacement>*/
-var util = Object.create(require('core-util-is'));
-util.inherits = require('inherits');
-/*</replacement>*/
-
-var Readable = require('./_stream_readable');
-var Writable = require('./_stream_writable');
-
-util.inherits(Duplex, Readable);
-
-{
-  // avoid scope creep, the keys array can then be collected
-  var keys = objectKeys(Writable.prototype);
-  for (var v = 0; v < keys.length; v++) {
-    var method = keys[v];
-    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
-  }
-}
-
-function Duplex(options) {
-  if (!(this instanceof Duplex)) return new Duplex(options);
-
-  Readable.call(this, options);
-  Writable.call(this, options);
-
-  if (options && options.readable === false) this.readable = false;
-
-  if (options && options.writable === false) this.writable = false;
-
-  this.allowHalfOpen = true;
-  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
-
-  this.once('end', onend);
-}
-
-Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function () {
-    return this._writableState.highWaterMark;
-  }
-});
-
-// the no-half-open enforcer
-function onend() {
-  // if we allow half-open state, or if the writable side ended,
-  // then we're ok.
-  if (this.allowHalfOpen || this._writableState.ended) return;
-
-  // no more data can be written.
-  // But allow more writes to happen in this tick.
-  pna.nextTick(onEndNT, this);
-}
-
-function onEndNT(self) {
-  self.end();
-}
-
-Object.defineProperty(Duplex.prototype, 'destroyed', {
-  get: function () {
-    if (this._readableState === undefined || this._writableState === undefined) {
-      return false;
-    }
-    return this._readableState.destroyed && this._writableState.destroyed;
-  },
-  set: function (value) {
-    // we ignore the value if the stream
-    // has not been initialized yet
-    if (this._readableState === undefined || this._writableState === undefined) {
-      return;
-    }
-
-    // backward compatibility, the user is explicitly
-    // managing destroyed
-    this._readableState.destroyed = value;
-    this._writableState.destroyed = value;
-  }
-});
-
-Duplex.prototype._destroy = function (err, cb) {
-  this.push(null);
-  this.end();
-
-  pna.nextTick(cb, err);
-};
\ No newline at end of file
diff --git a/templetes/node_modules/fsevents/node_modules/readable-stream/lib/_stream_passthrough.js b/templetes/node_modules/fsevents/node_modules/readable-stream/lib/_stream_passthrough.js
deleted file mode 100644
index 612edb4d..00000000
--- a/templetes/node_modules/fsevents/node_modules/readable-stream/lib/_stream_passthrough.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-
-// a passthrough stream.
-// basically just the most minimal sort of Transform stream.
-// Every written chunk gets output as-is.
-
-'use strict';
-
-module.exports = PassThrough;
-
-var Transform = require('./_stream_transform');
-
-/*<replacement>*/
-var util = Object.create(require('core-util-is'));
-util.inherits = require('inherits');
-/*</replacement>*/
-
-util.inherits(PassThrough, Transform);
-
-function PassThrough(options) {
-  if (!(this instanceof PassThrough)) return new PassThrough(options);
-
-  Transform.call(this, options);
-}
-
-PassThrough.prototype._transform = function (chunk, encoding, cb) {
-  cb(null, chunk);
-};
\ No newline at end of file
diff --git a/templetes/node_modules/fsevents/node_modules/readable-stream/lib/_stream_readable.js b/templetes/node_modules/fsevents/node_modules/readable-stream/lib/_stream_readable.js
deleted file mode 100644
index 0f807646..00000000
--- a/templetes/node_modules/fsevents/node_modules/readable-stream/lib/_stream_readable.js
+++ /dev/null
@@ -1,1019 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-
-'use strict';
-
-/*<replacement>*/
-
-var pna = require('process-nextick-args');
-/*</replacement>*/
-
-module.exports = Readable;
-
-/*<replacement>*/
-var isArray = require('isarray');
-/*</replacement>*/
-
-/*<replacement>*/
-var Duplex;
-/*</replacement>*/
-
-Readable.ReadableState = ReadableState;
-
-/*<replacement>*/
-var EE = require('events').EventEmitter;
-
-var EElistenerCount = function (emitter, type) {
-  return emitter.listeners(type).length;
-};
-/*</replacement>*/
-
-/*<replacement>*/
-var Stream = require('./internal/streams/stream');
-/*</replacement>*/
-
-/*<replacement>*/
-
-var Buffer = require('safe-buffer').Buffer;
-var OurUint8Array = global.Uint8Array || function () {};
-function _uint8ArrayToBuffer(chunk) {
-  return Buffer.from(chunk);
-}
-function _isUint8Array(obj) {
-  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
-}
-
-/*</replacement>*/
-
-/*<replacement>*/
-var util = Object.create(require('core-util-is'));
-util.inherits = require('inherits');
-/*</replacement>*/
-
-/*<replacement>*/
-var debugUtil = require('util');
-var debug = void 0;
-if (debugUtil && debugUtil.debuglog) {
-  debug = debugUtil.debuglog('stream');
-} else {
-  debug = function () {};
-}
-/*</replacement>*/
-
-var BufferList = require('./internal/streams/BufferList');
-var destroyImpl = require('./internal/streams/destroy');
-var StringDecoder;
-
-util.inherits(Readable, Stream);
-
-var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
-
-function prependListener(emitter, event, fn) {
-  // Sadly this is not cacheable as some libraries bundle their own
-  // event emitter implementation with them.
-  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);
-
-  // This is a hack to make sure that our error handler is attached before any
-  // userland ones.  NEVER DO THIS. This is here only because this code needs
-  // to continue to work with older versions of Node.js that do not include
-  // the prependListener() method. The goal is to eventually remove this hack.
-  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
-}
-
-function ReadableState(options, stream) {
-  Duplex = Duplex || require('./_stream_duplex');
-
-  options = options || {};
-
-  // Duplex streams are both readable and writable, but share
-  // the same options object.
-  // However, some cases require setting options to different
-  // values for the readable and the writable sides of the duplex stream.
-  // These options can be provided separately as readableXXX and writableXXX.
-  var isDuplex = stream instanceof Duplex;
-
-  // object stream flag. Used to make read(n) ignore n and to
-  // make all the buffer merging and length checks go away
-  this.objectMode = !!options.objectMode;
-
-  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
-
-  // the point at which it stops calling _read() to fill the buffer
-  // Note: 0 is a valid value, means "don't call _read preemptively ever"
-  var hwm = options.highWaterMark;
-  var readableHwm = options.readableHighWaterMark;
-  var defaultHwm = this.objectMode ? 16 : 16 * 1024;
-
-  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;
-
-  // cast to ints.
-  this.highWaterMark = Math.floor(this.highWaterMark);
-
-  // A linked list is used to store data chunks instead of an array because the
-  // linked list can remove elements from the beginning faster than
-  // array.shift()
-  this.buffer = new BufferList();
-  this.length = 0;
-  this.pipes = null;
-  this.pipesCount = 0;
-  this.flowing = null;
-  this.ended = false;
-  this.endEmitted = false;
-  this.reading = false;
-
-  // a flag to be able to tell if the event 'readable'/'data' is emitted
-  // immediately, or on a later tick.  We set this to true at first, because
-  // any actions that shouldn't happen until "later" should generally also
-  // not happen before the first read call.
-  this.sync = true;
-
-  // whenever we return null, then we set a flag to say
-  // that we're awaiting a 'readable' event emission.
-  this.needReadable = false;
-  this.emittedReadable = false;
-  this.readableListening = false;
-  this.resumeScheduled = false;
-
-  // has it been destroyed
-  this.destroyed = false;
-
-  // Crypto is kind of old and crusty.  Historically, its default string
-  // encoding is 'binary' so we have to make this configurable.
-  // Everything else in the universe uses 'utf8', though.
-  this.defaultEncoding = options.defaultEncoding || 'utf8';
-
-  // the number of writers that are awaiting a drain event in .pipe()s
-  this.awaitDrain = 0;
-
-  // if true, a maybeReadMore has been scheduled
-  this.readingMore = false;
-
-  this.decoder = null;
-  this.encoding = null;
-  if (options.encoding) {
-    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
-    this.decoder = new StringDecoder(options.encoding);
-    this.encoding = options.encoding;
-  }
-}
-
-function Readable(options) {
-  Duplex = Duplex || require('./_stream_duplex');
-
-  if (!(this instanceof Readable)) return new Readable(options);
-
-  this._readableState = new ReadableState(options, this);
-
-  // legacy
-  this.readable = true;
-
-  if (options) {
-    if (typeof options.read === 'function') this._read = options.read;
-
-    if (typeof options.destroy === 'function') this._destroy = options.destroy;
-  }
-
-  Stream.call(this);
-}
-
-Object.defineProperty(Readable.prototype, 'destroyed', {
-  get: function () {
-    if (this._readableState === undefined) {
-      return false;
-    }
-    return this._readableState.destroyed;
-  },
-  set: function (value) {
-    // we ignore the value if the stream
-    // has not been initialized yet
-    if (!this._readableState) {
-      return;
-    }
-
-    // backward compatibility, the user is explicitly
-    // managing destroyed
-    this._readableState.destroyed = value;
-  }
-});
-
-Readable.prototype.destroy = destroyImpl.destroy;
-Readable.prototype._undestroy = destroyImpl.undestroy;
-Readable.prototype._destroy = function (err, cb) {
-  this.push(null);
-  cb(err);
-};
-
-// Manually shove something into the read() buffer.
-// This returns true if the highWaterMark has not been hit yet,
-// similar to how Writable.write() returns true if you should
-// write() some more.
-Readable.prototype.push = function (chunk, encoding) {
-  var state = this._readableState;
-  var skipChunkCheck;
-
-  if (!state.objectMode) {
-    if (typeof chunk === 'string') {
-      encoding = encoding || state.defaultEncoding;
-      if (encoding !== state.encoding) {
-        chunk = Buffer.from(chunk, encoding);
-        encoding = '';
-      }
-      skipChunkCheck = true;
-    }
-  } else {
-    skipChunkCheck = true;
-  }
-
-  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
-};
-
-// Unshift should *always* be something directly out of read()
-Readable.prototype.unshift = function (chunk) {
-  return readableAddChunk(this, chunk, null, true, false);
-};
-
-function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
-  var state = stream._readableState;
-  if (chunk === null) {
-    state.reading = false;
-    onEofChunk(stream, state);
-  } else {
-    var er;
-    if (!skipChunkCheck) er = chunkInvalid(state, chunk);
-    if (er) {
-      stream.emit('error', er);
-    } else if (state.objectMode || chunk && chunk.length > 0) {
-      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
-        chunk = _uint8ArrayToBuffer(chunk);
-      }
-
-      if (addToFront) {
-        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
-      } else if (state.ended) {
-        stream.emit('error', new Error('stream.push() after EOF'));
-      } else {
-        state.reading = false;
-        if (state.decoder && !encoding) {
-          chunk = state.decoder.write(chunk);
-          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
-        } else {
-          addChunk(stream, state, chunk, false);
-        }
-      }
-    } else if (!addToFront) {
-      state.reading = false;
-    }
-  }
-
-  return needMoreData(state);
-}
-
-function addChunk(stream, state, chunk, addToFront) {
-  if (state.flowing && state.length === 0 && !state.sync) {
-    stream.emit('data', chunk);
-    stream.read(0);
-  } else {
-    // update the buffer info.
-    state.length += state.objectMode ? 1 : chunk.length;
-    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
-
-    if (state.needReadable) emitReadable(stream);
-  }
-  maybeReadMore(stream, state);
-}
-
-function chunkInvalid(state, chunk) {
-  var er;
-  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
-    er = new TypeError('Invalid non-string/buffer chunk');
-  }
-  return er;
-}
-
-// if it's past the high water mark, we can push in some more.
-// Also, if we have no data yet, we can stand some
-// more bytes.  This is to work around cases where hwm=0,
-// such as the repl.  Also, if the push() triggered a
-// readable event, and the user called read(largeNumber) such that
-// needReadable was set, then we ought to push more, so that another
-// 'readable' event will be triggered.
-function needMoreData(state) {
-  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
-}
-
-Readable.prototype.isPaused = function () {
-  return this._readableState.flowing === false;
-};
-
-// backwards compatibility.
-Readable.prototype.setEncoding = function (enc) {
-  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
-  this._readableState.decoder = new StringDecoder(enc);
-  this._readableState.encoding = enc;
-  return this;
-};
-
-// Don't raise the hwm > 8MB
-var MAX_HWM = 0x800000;
-function computeNewHighWaterMark(n) {
-  if (n >= MAX_HWM) {
-    n = MAX_HWM;
-  } else {
-    // Get the next highest power of 2 to prevent increasing hwm excessively in
-    // tiny amounts
-    n--;
-    n |= n >>> 1;
-    n |= n >>> 2;
-    n |= n >>> 4;
-    n |= n >>> 8;
-    n |= n >>> 16;
-    n++;
-  }
-  return n;
-}
-
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-function howMuchToRead(n, state) {
-  if (n <= 0 || state.length === 0 && state.ended) return 0;
-  if (state.objectMode) return 1;
-  if (n !== n) {
-    // Only flow one buffer at a time
-    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
-  }
-  // If we're asking for more than the current hwm, then raise the hwm.
-  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
-  if (n <= state.length) return n;
-  // Don't have enough
-  if (!state.ended) {
-    state.needReadable = true;
-    return 0;
-  }
-  return state.length;
-}
-
-// you can override either this method, or the async _read(n) below.
-Readable.prototype.read = function (n) {
-  debug('read', n);
-  n = parseInt(n, 10);
-  var state = this._readableState;
-  var nOrig = n;
-
-  if (n !== 0) state.emittedReadable = false;
-
-  // if we're doing read(0) to trigger a readable event, but we
-  // already have a bunch of data in the buffer, then just trigger
-  // the 'readable' event and move on.
-  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
-    debug('read: emitReadable', state.length, state.ended);
-    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
-    return null;
-  }
-
-  n = howMuchToRead(n, state);
-
-  // if we've ended, and we're now clear, then finish it up.
-  if (n === 0 && state.ended) {
-    if (state.length === 0) endReadable(this);
-    return null;
-  }
-
-  // All the actual chunk generation logic needs to be
-  // *below* the call to _read.  The reason is that in certain
-  // synthetic stream cases, such as passthrough streams, _read
-  // may be a completely synchronous operation which may change
-  // the state of the read buffer, providing enough data when
-  // before there was *not* enough.
-  //
-  // So, the steps are:
-  // 1. Figure out what the state of things will be after we do
-  // a read from the buffer.
-  //
-  // 2. If that resulting state will trigger a _read, then call _read.
-  // Note that this may be asynchronous, or synchronous.  Yes, it is
-  // deeply ugly to write APIs this way, but that still doesn't mean
-  // that the Readable class should behave improperly, as streams are
-  // designed to be sync/async agnostic.
-  // Take note if the _read call is sync or async (ie, if the read call
-  // has returned yet), so that we know whether or not it's safe to emit
-  // 'readable' etc.
-  //
-  // 3. Actually pull the requested chunks out of the buffer and return.
-
-  // if we need a readable event, then we need to do some reading.
-  var doRead = state.needReadable;
-  debug('need readable', doRead);
-
-  // if we currently have less than the highWaterMark, then also read some
-  if (state.length === 0 || state.length - n < state.highWaterMark) {
-    doRead = true;
-    debug('length less than watermark', doRead);
-  }
-
-  // however, if we've ended, then there's no point, and if we're already
-  // reading, then it's unnecessary.
-  if (state.ended || state.reading) {
-    doRead = false;
-    debug('reading or ended', doRead);
-  } else if (doRead) {
-    debug('do read');
-    state.reading = true;
-    state.sync = true;
-    // if the length is currently zero, then we *need* a readable event.
-    if (state.length === 0) state.needReadable = true;
-    // call internal read method
-    this._read(state.highWaterMark);
-    state.sync = false;
-    // If _read pushed data synchronously, then `reading` will be false,
-    // and we need to re-evaluate how much data we can return to the user.
-    if (!state.reading) n = howMuchToRead(nOrig, state);
-  }
-
-  var ret;
-  if (n > 0) ret = fromList(n, state);else ret = null;
-
-  if (ret === null) {
-    state.needReadable = true;
-    n = 0;
-  } else {
-    state.length -= n;
-  }
-
-  if (state.length === 0) {
-    // If we have nothing in the buffer, then we want to know
-    // as soon as we *do* get something into the buffer.
-    if (!state.ended) state.needReadable = true;
-
-    // If we tried to read() past the EOF, then emit end on the next tick.
-    if (nOrig !== n && state.ended) endReadable(this);
-  }
-
-  if (ret !== null) this.emit('data', ret);
-
-  return ret;
-};
-
-function onEofChunk(stream, state) {
-  if (state.ended) return;
-  if (state.decoder) {
-    var chunk = state.decoder.end();
-    if (chunk && chunk.length) {
-      state.buffer.push(chunk);
-      state.length += state.objectMode ? 1 : chunk.length;
-    }
-  }
-  state.ended = true;
-
-  // emit 'readable' now to make sure it gets picked up.
-  emitReadable(stream);
-}
-
-// Don't emit readable right away in sync mode, because this can trigger
-// another read() call => stack overflow.  This way, it might trigger
-// a nextTick recursion warning, but that's not so bad.
-function emitReadable(stream) {
-  var state = stream._readableState;
-  state.needReadable = false;
-  if (!state.emittedReadable) {
-    debug('emitReadable', state.flowing);
-    state.emittedReadable = true;
-    if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);
-  }
-}
-
-function emitReadable_(stream) {
-  debug('emit readable');
-  stream.emit('readable');
-  flow(stream);
-}
-
-// at this point, the user has presumably seen the 'readable' event,
-// and called read() to consume some data.  that may have triggered
-// in turn another _read(n) call, in which case reading = true if
-// it's in progress.
-// However, if we're not ended, or reading, and the length < hwm,
-// then go ahead and try to read some more preemptively.
-function maybeReadMore(stream, state) {
-  if (!state.readingMore) {
-    state.readingMore = true;
-    pna.nextTick(maybeReadMore_, stream, state);
-  }
-}
-
-function maybeReadMore_(stream, state) {
-  var len = state.length;
-  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
-    debug('maybeReadMore read 0');
-    stream.read(0);
-    if (len === state.length)
-      // didn't get any data, stop spinning.
-      break;else len = state.length;
-  }
-  state.readingMore = false;
-}
-
-// abstract method.  to be overridden in specific implementation classes.
-// call cb(er, data) where data is <= n in length.
-// for virtual (non-string, non-buffer) streams, "length" is somewhat
-// arbitrary, and perhaps not very meaningful.
-Readable.prototype._read = function (n) {
-  this.emit('error', new Error('_read() is not implemented'));
-};
-
-Readable.prototype.pipe = function (dest, pipeOpts) {
-  var src = this;
-  var state = this._readableState;
-
-  switch (state.pipesCount) {
-    case 0:
-      state.pipes = dest;
-      break;
-    case 1:
-      state.pipes = [state.pipes, dest];
-      break;
-    default:
-      state.pipes.push(dest);
-      break;
-  }
-  state.pipesCount += 1;
-  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
-
-  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
-
-  var endFn = doEnd ? onend : unpipe;
-  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);
-
-  dest.on('unpipe', onunpipe);
-  function onunpipe(readable, unpipeInfo) {
-    debug('onunpipe');
-    if (readable === src) {
-      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
-        unpipeInfo.hasUnpiped = true;
-        cleanup();
-      }
-    }
-  }
-
-  function onend() {
-    debug('onend');
-    dest.end();
-  }
-
-  // when the dest drains, it reduces the awaitDrain counter
-  // on the source.  This would be more elegant with a .once()
-  // handler in flow(), but adding and removing repeatedly is
-  // too slow.
-  var ondrain = pipeOnDrain(src);
-  dest.on('drain', ondrain);
-
-  var cleanedUp = false;
-  function cleanup() {
-    debug('cleanup');
-    // cleanup event handlers once the pipe is broken
-    dest.removeListener('close', onclose);
-    dest.removeListener('finish', onfinish);
-    dest.removeListener('drain', ondrain);
-    dest.removeListener('error', onerror);
-    dest.removeListener('unpipe', onunpipe);
-    src.removeListener('end', onend);
-    src.removeListener('end', unpipe);
-    src.removeListener('data', ondata);
-
-    cleanedUp = true;
-
-    // if the reader is waiting for a drain event from this
-    // specific writer, then it would cause it to never start
-    // flowing again.
-    // So, if this is awaiting a drain, then we just call it now.
-    // If we don't know, then assume that we are waiting for one.
-    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
-  }
-
-  // If the user pushes more data while we're writing to dest then we'll end up
-  // in ondata again. However, we only want to increase awaitDrain once because
-  // dest will only emit one 'drain' event for the multiple writes.
-  // => Introduce a guard on increasing awaitDrain.
-  var increasedAwaitDrain = false;
-  src.on('data', ondata);
-  function ondata(chunk) {
-    debug('ondata');
-    increasedAwaitDrain = false;
-    var ret = dest.write(chunk);
-    if (false === ret && !increasedAwaitDrain) {
-      // If the user unpiped during `dest.write()`, it is possible
-      // to get stuck in a permanently paused state if that write
-      // also returned false.
-      // => Check whether `dest` is still a piping destination.
-      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
-        debug('false write response, pause', src._readableState.awaitDrain);
-        src._readableState.awaitDrain++;
-        increasedAwaitDrain = true;
-      }
-      src.pause();
-    }
-  }
-
-  // if the dest has an error, then stop piping into it.
-  // however, don't suppress the throwing behavior for this.
-  function onerror(er) {
-    debug('onerror', er);
-    unpipe();
-    dest.removeListener('error', onerror);
-    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
-  }
-
-  // Make sure our error handler is attached before userland ones.
-  prependListener(dest, 'error', onerror);
-
-  // Both close and finish should trigger unpipe, but only once.
-  function onclose() {
-    dest.removeListener('finish', onfinish);
-    unpipe();
-  }
-  dest.once('close', onclose);
-  function onfinish() {
-    debug('onfinish');
-    dest.removeListener('close', onclose);
-    unpipe();
-  }
-  dest.once('finish', onfinish);
-
-  function unpipe() {
-    debug('unpipe');
-    src.unpipe(dest);
-  }
-
-  // tell the dest that it's being piped to
-  dest.emit('pipe', src);
-
-  // start the flow if it hasn't been started already.
-  if (!state.flowing) {
-    debug('pipe resume');
-    src.resume();
-  }
-
-  return dest;
-};
-
-function pipeOnDrain(src) {
-  return function () {
-    var state = src._readableState;
-    debug('pipeOnDrain', state.awaitDrain);
-    if (state.awaitDrain) state.awaitDrain--;
-    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
-      state.flowing = true;
-      flow(src);
-    }
-  };
-}
-
-Readable.prototype.unpipe = function (dest) {
-  var state = this._readableState;
-  var unpipeInfo = { hasUnpiped: false };
-
-  // if we're not piping anywhere, then do nothing.
-  if (state.pipesCount === 0) return this;
-
-  // just one destination.  most common case.
-  if (state.pipesCount === 1) {
-    // passed in one, but it's not the right one.
-    if (dest && dest !== state.pipes) return this;
-
-    if (!dest) dest = state.pipes;
-
-    // got a match.
-    state.pipes = null;
-    state.pipesCount = 0;
-    state.flowing = false;
-    if (dest) dest.emit('unpipe', this, unpipeInfo);
-    return this;
-  }
-
-  // slow case. multiple pipe destinations.
-
-  if (!dest) {
-    // remove all.
-    var dests = state.pipes;
-    var len = state.pipesCount;
-    state.pipes = null;
-    state.pipesCount = 0;
-    state.flowing = false;
-
-    for (var i = 0; i < len; i++) {
-      dests[i].emit('unpipe', this, unpipeInfo);
-    }return this;
-  }
-
-  // try to find the right one.
-  var index = indexOf(state.pipes, dest);
-  if (index === -1) return this;
-
-  state.pipes.splice(index, 1);
-  state.pipesCount -= 1;
-  if (state.pipesCount === 1) state.pipes = state.pipes[0];
-
-  dest.emit('unpipe', this, unpipeInfo);
-
-  return this;
-};
-
-// set up data events if they are asked for
-// Ensure readable listeners eventually get something
-Readable.prototype.on = function (ev, fn) {
-  var res = Stream.prototype.on.call(this, ev, fn);
-
-  if (ev === 'data') {
-    // Start flowing on next tick if stream isn't explicitly paused
-    if (this._readableState.flowing !== false) this.resume();
-  } else if (ev === 'readable') {
-    var state = this._readableState;
-    if (!state.endEmitted && !state.readableListening) {
-      state.readableListening = state.needReadable = true;
-      state.emittedReadable = false;
-      if (!state.reading) {
-        pna.nextTick(nReadingNextTick, this);
-      } else if (state.length) {
-        emitReadable(this);
-      }
-    }
-  }
-
-  return res;
-};
-Readable.prototype.addListener = Readable.prototype.on;
-
-function nReadingNextTick(self) {
-  debug('readable nexttick read 0');
-  self.read(0);
-}
-
-// pause() and resume() are remnants of the legacy readable stream API
-// If the user uses them, then switch into old mode.
-Readable.prototype.resume = function () {
-  var state = this._readableState;
-  if (!state.flowing) {
-    debug('resume');
-    state.flowing = true;
-    resume(this, state);
-  }
-  return this;
-};
-
-function resume(stream, state) {
-  if (!state.resumeScheduled) {
-    state.resumeScheduled = true;
-    pna.nextTick(resume_, stream, state);
-  }
-}
-
-function resume_(stream, state) {
-  if (!state.reading) {
-    debug('resume read 0');
-    stream.read(0);
-  }
-
-  state.resumeScheduled = false;
-  state.awaitDrain = 0;
-  stream.emit('resume');
-  flow(stream);
-  if (state.flowing && !state.reading) stream.read(0);
-}
-
-Readable.prototype.pause = function () {
-  debug('call pause flowing=%j', this._readableState.flowing);
-  if (false !== this._readableState.flowing) {
-    debug('pause');
-    this._readableState.flowing = false;
-    this.emit('pause');
-  }
-  return this;
-};
-
-function flow(stream) {
-  var state = stream._readableState;
-  debug('flow', state.flowing);
-  while (state.flowing && stream.read() !== null) {}
-}
-
-// wrap an old-style stream as the async data source.
-// This is *not* part of the readable stream interface.
-// It is an ugly unfortunate mess of history.
-Readable.prototype.wrap = function (stream) {
-  var _this = this;
-
-  var state = this._readableState;
-  var paused = false;
-
-  stream.on('end', function () {
-    debug('wrapped end');
-    if (state.decoder && !state.ended) {
-      var chunk = state.decoder.end();
-      if (chunk && chunk.length) _this.push(chunk);
-    }
-
-    _this.push(null);
-  });
-
-  stream.on('data', function (chunk) {
-    debug('wrapped data');
-    if (state.decoder) chunk = state.decoder.write(chunk);
-
-    // don't skip over falsy values in objectMode
-    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
-
-    var ret = _this.push(chunk);
-    if (!ret) {
-      paused = true;
-      stream.pause();
-    }
-  });
-
-  // proxy all the other methods.
-  // important when wrapping filters and duplexes.
-  for (var i in stream) {
-    if (this[i] === undefined && typeof stream[i] === 'function') {
-      this[i] = function (method) {
-        return function () {
-          return stream[method].apply(stream, arguments);
-        };
-      }(i);
-    }
-  }
-
-  // proxy certain important events.
-  for (var n = 0; n < kProxyEvents.length; n++) {
-    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
-  }
-
-  // when we try to consume some more bytes, simply unpause the
-  // underlying stream.
-  this._read = function (n) {
-    debug('wrapped _read', n);
-    if (paused) {
-      paused = false;
-      stream.resume();
-    }
-  };
-
-  return this;
-};
-
-Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function () {
-    return this._readableState.highWaterMark;
-  }
-});
-
-// exposed for testing purposes only.
-Readable._fromList = fromList;
-
-// Pluck off n bytes from an array of buffers.
-// Length is the combined lengths of all the buffers in the list.
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-function fromList(n, state) {
-  // nothing buffered
-  if (state.length === 0) return null;
-
-  var ret;
-  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
-    // read it all, truncate the list
-    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
-    state.buffer.clear();
-  } else {
-    // read part of list
-    ret = fromListPartial(n, state.buffer, state.decoder);
-  }
-
-  return ret;
-}
-
-// Extracts only enough buffered data to satisfy the amount requested.
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-function fromListPartial(n, list, hasStrings) {
-  var ret;
-  if (n < list.head.data.length) {
-    // slice is the same for buffers and strings
-    ret = list.head.data.slice(0, n);
-    list.head.data = list.head.data.slice(n);
-  } else if (n === list.head.data.length) {
-    // first chunk is a perfect match
-    ret = list.shift();
-  } else {
-    // result spans more than one buffer
-    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
-  }
-  return ret;
-}
-
-// Copies a specified amount of characters from the list of buffered data
-// chunks.
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-function copyFromBufferString(n, list) {
-  var p = list.head;
-  var c = 1;
-  var ret = p.data;
-  n -= ret.length;
-  while (p = p.next) {
-    var str = p.data;
-    var nb = n > str.length ? str.length : n;
-    if (nb === str.length) ret += str;else ret += str.slice(0, n);
-    n -= nb;
-    if (n === 0) {
-      if (nb === str.length) {
-        ++c;
-        if (p.next) list.head = p.next;else list.head = list.tail = null;
-      } else {
-        list.head = p;
-        p.data = str.slice(nb);
-      }
-      break;
-    }
-    ++c;
-  }
-  list.length -= c;
-  return ret;
-}
-
-// Copies a specified amount of bytes from the list of buffered data chunks.
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-function copyFromBuffer(n, list) {
-  var ret = Buffer.allocUnsafe(n);
-  var p = list.head;
-  var c = 1;
-  p.data.copy(ret);
-  n -= p.data.length;
-  while (p = p.next) {
-    var buf = p.data;
-    var nb = n > buf.length ? buf.length : n;
-    buf.copy(ret, ret.length - n, 0, nb);
-    n -= nb;
-    if (n === 0) {
-      if (nb === buf.length) {
-        ++c;
-        if (p.next) list.head = p.next;else list.head = list.tail = null;
-      } else {
-        list.head = p;
-        p.data = buf.slice(nb);
-      }
-      break;
-    }
-    ++c;
-  }
-  list.length -= c;
-  return ret;
-}
-
-function endReadable(stream) {
-  var state = stream._readableState;
-
-  // If we get here before consuming all the bytes, then that is a
-  // bug in node.  Should never happen.
-  if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
-
-  if (!state.endEmitted) {
-    state.ended = true;
-    pna.nextTick(endReadableNT, state, stream);
-  }
-}
-
-function endReadableNT(state, stream) {
-  // Check that we didn't get one last unshift.
-  if (!state.endEmitted && state.length === 0) {
-    state.endEmitted = true;
-    stream.readable = false;
-    stream.emit('end');
-  }
-}
-
-function indexOf(xs, x) {
-  for (var i = 0, l = xs.length; i < l; i++) {
-    if (xs[i] === x) return i;
-  }
-  return -1;
-}
\ No newline at end of file
diff --git a/templetes/node_modules/fsevents/node_modules/readable-stream/lib/_stream_transform.js b/templetes/node_modules/fsevents/node_modules/readable-stream/lib/_stream_transform.js
deleted file mode 100644
index fcfc105a..00000000
--- a/templetes/node_modules/fsevents/node_modules/readable-stream/lib/_stream_transform.js
+++ /dev/null
@@ -1,214 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-
-// a transform stream is a readable/writable stream where you do
-// something with the data.  Sometimes it's called a "filter",
-// but that's not a great name for it, since that implies a thing where
-// some bits pass through, and others are simply ignored.  (That would
-// be a valid example of a transform, of course.)
-//
-// While the output is causally related to the input, it's not a
-// necessarily symmetric or synchronous transformation.  For example,
-// a zlib stream might take multiple plain-text writes(), and then
-// emit a single compressed chunk some time in the future.
-//
-// Here's how this works:
-//
-// The Transform stream has all the aspects of the readable and writable
-// stream classes.  When you write(chunk), that calls _write(chunk,cb)
-// internally, and returns false if there's a lot of pending writes
-// buffered up.  When you call read(), that calls _read(n) until
-// there's enough pending readable data buffered up.
-//
-// In a transform stream, the written data is placed in a buffer.  When
-// _read(n) is called, it transforms the queued up data, calling the
-// buffered _write cb's as it consumes chunks.  If consuming a single
-// written chunk would result in multiple output chunks, then the first
-// outputted bit calls the readcb, and subsequent chunks just go into
-// the read buffer, and will cause it to emit 'readable' if necessary.
-//
-// This way, back-pressure is actually determined by the reading side,
-// since _read has to be called to start processing a new chunk.  However,
-// a pathological inflate type of transform can cause excessive buffering
-// here.  For example, imagine a stream where every byte of input is
-// interpreted as an integer from 0-255, and then results in that many
-// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in
-// 1kb of data being output.  In this case, you could write a very small
-// amount of input, and end up with a very large amount of output.  In
-// such a pathological inflating mechanism, there'd be no way to tell
-// the system to stop doing the transform.  A single 4MB write could
-// cause the system to run out of memory.
-//
-// However, even in such a pathological case, only a single written chunk
-// would be consumed, and then the rest would wait (un-transformed) until
-// the results of the previous transformed chunk were consumed.
-
-'use strict';
-
-module.exports = Transform;
-
-var Duplex = require('./_stream_duplex');
-
-/*<replacement>*/
-var util = Object.create(require('core-util-is'));
-util.inherits = require('inherits');
-/*</replacement>*/
-
-util.inherits(Transform, Duplex);
-
-function afterTransform(er, data) {
-  var ts = this._transformState;
-  ts.transforming = false;
-
-  var cb = ts.writecb;
-
-  if (!cb) {
-    return this.emit('error', new Error('write callback called multiple times'));
-  }
-
-  ts.writechunk = null;
-  ts.writecb = null;
-
-  if (data != null) // single equals check for both `null` and `undefined`
-    this.push(data);
-
-  cb(er);
-
-  var rs = this._readableState;
-  rs.reading = false;
-  if (rs.needReadable || rs.length < rs.highWaterMark) {
-    this._read(rs.highWaterMark);
-  }
-}
-
-function Transform(options) {
-  if (!(this instanceof Transform)) return new Transform(options);
-
-  Duplex.call(this, options);
-
-  this._transformState = {
-    afterTransform: afterTransform.bind(this),
-    needTransform: false,
-    transforming: false,
-    writecb: null,
-    writechunk: null,
-    writeencoding: null
-  };
-
-  // start out asking for a readable event once data is transformed.
-  this._readableState.needReadable = true;
-
-  // we have implemented the _read method, and done the other things
-  // that Readable wants before the first _read call, so unset the
-  // sync guard flag.
-  this._readableState.sync = false;
-
-  if (options) {
-    if (typeof options.transform === 'function') this._transform = options.transform;
-
-    if (typeof options.flush === 'function') this._flush = options.flush;
-  }
-
-  // When the writable side finishes, then flush out anything remaining.
-  this.on('prefinish', prefinish);
-}
-
-function prefinish() {
-  var _this = this;
-
-  if (typeof this._flush === 'function') {
-    this._flush(function (er, data) {
-      done(_this, er, data);
-    });
-  } else {
-    done(this, null, null);
-  }
-}
-
-Transform.prototype.push = function (chunk, encoding) {
-  this._transformState.needTransform = false;
-  return Duplex.prototype.push.call(this, chunk, encoding);
-};
-
-// This is the part where you do stuff!
-// override this function in implementation classes.
-// 'chunk' is an input chunk.
-//
-// Call `push(newChunk)` to pass along transformed output
-// to the readable side.  You may call 'push' zero or more times.
-//
-// Call `cb(err)` when you are done with this chunk.  If you pass
-// an error, then that'll put the hurt on the whole operation.  If you
-// never call cb(), then you'll never get another chunk.
-Transform.prototype._transform = function (chunk, encoding, cb) {
-  throw new Error('_transform() is not implemented');
-};
-
-Transform.prototype._write = function (chunk, encoding, cb) {
-  var ts = this._transformState;
-  ts.writecb = cb;
-  ts.writechunk = chunk;
-  ts.writeencoding = encoding;
-  if (!ts.transforming) {
-    var rs = this._readableState;
-    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
-  }
-};
-
-// Doesn't matter what the args are here.
-// _transform does all the work.
-// That we got here means that the readable side wants more data.
-Transform.prototype._read = function (n) {
-  var ts = this._transformState;
-
-  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
-    ts.transforming = true;
-    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
-  } else {
-    // mark that we need a transform, so that any data that comes in
-    // will get processed, now that we've asked for it.
-    ts.needTransform = true;
-  }
-};
-
-Transform.prototype._destroy = function (err, cb) {
-  var _this2 = this;
-
-  Duplex.prototype._destroy.call(this, err, function (err2) {
-    cb(err2);
-    _this2.emit('close');
-  });
-};
-
-function done(stream, er, data) {
-  if (er) return stream.emit('error', er);
-
-  if (data != null) // single equals check for both `null` and `undefined`
-    stream.push(data);
-
-  // if there's nothing in the write buffer, then that means
-  // that nothing more will ever be provided
-  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');
-
-  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');
-
-  return stream.push(null);
-}
\ No newline at end of file
diff --git a/templetes/node_modules/fsevents/node_modules/readable-stream/lib/_stream_writable.js b/templetes/node_modules/fsevents/node_modules/readable-stream/lib/_stream_writable.js
deleted file mode 100644
index b0b02200..00000000
--- a/templetes/node_modules/fsevents/node_modules/readable-stream/lib/_stream_writable.js
+++ /dev/null
@@ -1,687 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-
-// A bit simpler than readable streams.
-// Implement an async ._write(chunk, encoding, cb), and it'll handle all
-// the drain event emission and buffering.
-
-'use strict';
-
-/*<replacement>*/
-
-var pna = require('process-nextick-args');
-/*</replacement>*/
-
-module.exports = Writable;
-
-/* <replacement> */
-function WriteReq(chunk, encoding, cb) {
-  this.chunk = chunk;
-  this.encoding = encoding;
-  this.callback = cb;
-  this.next = null;
-}
-
-// It seems a linked list but it is not
-// there will be only 2 of these for each stream
-function CorkedRequest(state) {
-  var _this = this;
-
-  this.next = null;
-  this.entry = null;
-  this.finish = function () {
-    onCorkedFinish(_this, state);
-  };
-}
-/* </replacement> */
-
-/*<replacement>*/
-var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
-/*</replacement>*/
-
-/*<replacement>*/
-var Duplex;
-/*</replacement>*/
-
-Writable.WritableState = WritableState;
-
-/*<replacement>*/
-var util = Object.create(require('core-util-is'));
-util.inherits = require('inherits');
-/*</replacement>*/
-
-/*<replacement>*/
-var internalUtil = {
-  deprecate: require('util-deprecate')
-};
-/*</replacement>*/
-
-/*<replacement>*/
-var Stream = require('./internal/streams/stream');
-/*</replacement>*/
-
-/*<replacement>*/
-
-var Buffer = require('safe-buffer').Buffer;
-var OurUint8Array = global.Uint8Array || function () {};
-function _uint8ArrayToBuffer(chunk) {
-  return Buffer.from(chunk);
-}
-function _isUint8Array(obj) {
-  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
-}
-
-/*</replacement>*/
-
-var destroyImpl = require('./internal/streams/destroy');
-
-util.inherits(Writable, Stream);
-
-function nop() {}
-
-function WritableState(options, stream) {
-  Duplex = Duplex || require('./_stream_duplex');
-
-  options = options || {};
-
-  // Duplex streams are both readable and writable, but share
-  // the same options object.
-  // However, some cases require setting options to different
-  // values for the readable and the writable sides of the duplex stream.
-  // These options can be provided separately as readableXXX and writableXXX.
-  var isDuplex = stream instanceof Duplex;
-
-  // object stream flag to indicate whether or not this stream
-  // contains buffers or objects.
-  this.objectMode = !!options.objectMode;
-
-  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
-
-  // the point at which write() starts returning false
-  // Note: 0 is a valid value, means that we always return false if
-  // the entire buffer is not flushed immediately on write()
-  var hwm = options.highWaterMark;
-  var writableHwm = options.writableHighWaterMark;
-  var defaultHwm = this.objectMode ? 16 : 16 * 1024;
-
-  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;
-
-  // cast to ints.
-  this.highWaterMark = Math.floor(this.highWaterMark);
-
-  // if _final has been called
-  this.finalCalled = false;
-
-  // drain event flag.
-  this.needDrain = false;
-  // at the start of calling end()
-  this.ending = false;
-  // when end() has been called, and returned
-  this.ended = false;
-  // when 'finish' is emitted
-  this.finished = false;
-
-  // has it been destroyed
-  this.destroyed = false;
-
-  // should we decode strings into buffers before passing to _write?
-  // this is here so that some node-core streams can optimize string
-  // handling at a lower level.
-  var noDecode = options.decodeStrings === false;
-  this.decodeStrings = !noDecode;
-
-  // Crypto is kind of old and crusty.  Historically, its default string
-  // encoding is 'binary' so we have to make this configurable.
-  // Everything else in the universe uses 'utf8', though.
-  this.defaultEncoding = options.defaultEncoding || 'utf8';
-
-  // not an actual buffer we keep track of, but a measurement
-  // of how much we're waiting to get pushed to some underlying
-  // socket or file.
-  this.length = 0;
-
-  // a flag to see when we're in the middle of a write.
-  this.writing = false;
-
-  // when true all writes will be buffered until .uncork() call
-  this.corked = 0;
-
-  // a flag to be able to tell if the onwrite cb is called immediately,
-  // or on a later tick.  We set this to true at first, because any
-  // actions that shouldn't happen until "later" should generally also
-  // not happen before the first write call.
-  this.sync = true;
-
-  // a flag to know if we're processing previously buffered items, which
-  // may call the _write() callback in the same tick, so that we don't
-  // end up in an overlapped onwrite situation.
-  this.bufferProcessing = false;
-
-  // the callback that's passed to _write(chunk,cb)
-  this.onwrite = function (er) {
-    onwrite(stream, er);
-  };
-
-  // the callback that the user supplies to write(chunk,encoding,cb)
-  this.writecb = null;
-
-  // the amount that is being written when _write is called.
-  this.writelen = 0;
-
-  this.bufferedRequest = null;
-  this.lastBufferedRequest = null;
-
-  // number of pending user-supplied write callbacks
-  // this must be 0 before 'finish' can be emitted
-  this.pendingcb = 0;
-
-  // emit prefinish if the only thing we're waiting for is _write cbs
-  // This is relevant for synchronous Transform streams
-  this.prefinished = false;
-
-  // True if the error was already emitted and should not be thrown again
-  this.errorEmitted = false;
-
-  // count buffered requests
-  this.bufferedRequestCount = 0;
-
-  // allocate the first CorkedRequest, there is always
-  // one allocated and free to use, and we maintain at most two
-  this.corkedRequestsFree = new CorkedRequest(this);
-}
-
-WritableState.prototype.getBuffer = function getBuffer() {
-  var current = this.bufferedRequest;
-  var out = [];
-  while (current) {
-    out.push(current);
-    current = current.next;
-  }
-  return out;
-};
-
-(function () {
-  try {
-    Object.defineProperty(WritableState.prototype, 'buffer', {
-      get: internalUtil.deprecate(function () {
-        return this.getBuffer();
-      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
-    });
-  } catch (_) {}
-})();
-
-// Test _writableState for inheritance to account for Duplex streams,
-// whose prototype chain only points to Readable.
-var realHasInstance;
-if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
-  realHasInstance = Function.prototype[Symbol.hasInstance];
-  Object.defineProperty(Writable, Symbol.hasInstance, {
-    value: function (object) {
-      if (realHasInstance.call(this, object)) return true;
-      if (this !== Writable) return false;
-
-      return object && object._writableState instanceof WritableState;
-    }
-  });
-} else {
-  realHasInstance = function (object) {
-    return object instanceof this;
-  };
-}
-
-function Writable(options) {
-  Duplex = Duplex || require('./_stream_duplex');
-
-  // Writable ctor is applied to Duplexes, too.
-  // `realHasInstance` is necessary because using plain `instanceof`
-  // would return false, as no `_writableState` property is attached.
-
-  // Trying to use the custom `instanceof` for Writable here will also break the
-  // Node.js LazyTransform implementation, which has a non-trivial getter for
-  // `_writableState` that would lead to infinite recursion.
-  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
-    return new Writable(options);
-  }
-
-  this._writableState = new WritableState(options, this);
-
-  // legacy.
-  this.writable = true;
-
-  if (options) {
-    if (typeof options.write === 'function') this._write = options.write;
-
-    if (typeof options.writev === 'function') this._writev = options.writev;
-
-    if (typeof options.destroy === 'function') this._destroy = options.destroy;
-
-    if (typeof options.final === 'function') this._final = options.final;
-  }
-
-  Stream.call(this);
-}
-
-// Otherwise people can pipe Writable streams, which is just wrong.
-Writable.prototype.pipe = function () {
-  this.emit('error', new Error('Cannot pipe, not readable'));
-};
-
-function writeAfterEnd(stream, cb) {
-  var er = new Error('write after end');
-  // TODO: defer error events consistently everywhere, not just the cb
-  stream.emit('error', er);
-  pna.nextTick(cb, er);
-}
-
-// Checks that a user-supplied chunk is valid, especially for the particular
-// mode the stream is in. Currently this means that `null` is never accepted
-// and undefined/non-string values are only allowed in object mode.
-function validChunk(stream, state, chunk, cb) {
-  var valid = true;
-  var er = false;
-
-  if (chunk === null) {
-    er = new TypeError('May not write null values to stream');
-  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
-    er = new TypeError('Invalid non-string/buffer chunk');
-  }
-  if (er) {
-    stream.emit('error', er);
-    pna.nextTick(cb, er);
-    valid = false;
-  }
-  return valid;
-}
-
-Writable.prototype.write = function (chunk, encoding, cb) {
-  var state = this._writableState;
-  var ret = false;
-  var isBuf = !state.objectMode && _isUint8Array(chunk);
-
-  if (isBuf && !Buffer.isBuffer(chunk)) {
-    chunk = _uint8ArrayToBuffer(chunk);
-  }
-
-  if (typeof encoding === 'function') {
-    cb = encoding;
-    encoding = null;
-  }
-
-  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
-
-  if (typeof cb !== 'function') cb = nop;
-
-  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
-    state.pendingcb++;
-    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
-  }
-
-  return ret;
-};
-
-Writable.prototype.cork = function () {
-  var state = this._writableState;
-
-  state.corked++;
-};
-
-Writable.prototype.uncork = function () {
-  var state = this._writableState;
-
-  if (state.corked) {
-    state.corked--;
-
-    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
-  }
-};
-
-Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
-  // node::ParseEncoding() requires lower case.
-  if (typeof encoding === 'string') encoding = encoding.toLowerCase();
-  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
-  this._writableState.defaultEncoding = encoding;
-  return this;
-};
-
-function decodeChunk(state, chunk, encoding) {
-  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
-    chunk = Buffer.from(chunk, encoding);
-  }
-  return chunk;
-}
-
-Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function () {
-    return this._writableState.highWaterMark;
-  }
-});
-
-// if we're already writing something, then just put this
-// in the queue, and wait our turn.  Otherwise, call _write
-// If we return false, then we need a drain event, so set that flag.
-function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
-  if (!isBuf) {
-    var newChunk = decodeChunk(state, chunk, encoding);
-    if (chunk !== newChunk) {
-      isBuf = true;
-      encoding = 'buffer';
-      chunk = newChunk;
-    }
-  }
-  var len = state.objectMode ? 1 : chunk.length;
-
-  state.length += len;
-
-  var ret = state.length < state.highWaterMark;
-  // we must ensure that previous needDrain will not be reset to false.
-  if (!ret) state.needDrain = true;
-
-  if (state.writing || state.corked) {
-    var last = state.lastBufferedRequest;
-    state.lastBufferedRequest = {
-      chunk: chunk,
-      encoding: encoding,
-      isBuf: isBuf,
-      callback: cb,
-      next: null
-    };
-    if (last) {
-      last.next = state.lastBufferedRequest;
-    } else {
-      state.bufferedRequest = state.lastBufferedRequest;
-    }
-    state.bufferedRequestCount += 1;
-  } else {
-    doWrite(stream, state, false, len, chunk, encoding, cb);
-  }
-
-  return ret;
-}
-
-function doWrite(stream, state, writev, len, chunk, encoding, cb) {
-  state.writelen = len;
-  state.writecb = cb;
-  state.writing = true;
-  state.sync = true;
-  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
-  state.sync = false;
-}
-
-function onwriteError(stream, state, sync, er, cb) {
-  --state.pendingcb;
-
-  if (sync) {
-    // defer the callback if we are being called synchronously
-    // to avoid piling up things on the stack
-    pna.nextTick(cb, er);
-    // this can emit finish, and it will always happen
-    // after error
-    pna.nextTick(finishMaybe, stream, state);
-    stream._writableState.errorEmitted = true;
-    stream.emit('error', er);
-  } else {
-    // the caller expect this to happen before if
-    // it is async
-    cb(er);
-    stream._writableState.errorEmitted = true;
-    stream.emit('error', er);
-    // this can emit finish, but finish must
-    // always follow error
-    finishMaybe(stream, state);
-  }
-}
-
-function onwriteStateUpdate(state) {
-  state.writing = false;
-  state.writecb = null;
-  state.length -= state.writelen;
-  state.writelen = 0;
-}
-
-function onwrite(stream, er) {
-  var state = stream._writableState;
-  var sync = state.sync;
-  var cb = state.writecb;
-
-  onwriteStateUpdate(state);
-
-  if (er) onwriteError(stream, state, sync, er, cb);else {
-    // Check if we're actually ready to finish, but don't emit yet
-    var finished = needFinish(state);
-
-    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
-      clearBuffer(stream, state);
-    }
-
-    if (sync) {
-      /*<replacement>*/
-      asyncWrite(afterWrite, stream, state, finished, cb);
-      /*</replacement>*/
-    } else {
-      afterWrite(stream, state, finished, cb);
-    }
-  }
-}
-
-function afterWrite(stream, state, finished, cb) {
-  if (!finished) onwriteDrain(stream, state);
-  state.pendingcb--;
-  cb();
-  finishMaybe(stream, state);
-}
-
-// Must force callback to be called on nextTick, so that we don't
-// emit 'drain' before the write() consumer gets the 'false' return
-// value, and has a chance to attach a 'drain' listener.
-function onwriteDrain(stream, state) {
-  if (state.length === 0 && state.needDrain) {
-    state.needDrain = false;
-    stream.emit('drain');
-  }
-}
-
-// if there's something in the buffer waiting, then process it
-function clearBuffer(stream, state) {
-  state.bufferProcessing = true;
-  var entry = state.bufferedRequest;
-
-  if (stream._writev && entry && entry.next) {
-    // Fast case, write everything using _writev()
-    var l = state.bufferedRequestCount;
-    var buffer = new Array(l);
-    var holder = state.corkedRequestsFree;
-    holder.entry = entry;
-
-    var count = 0;
-    var allBuffers = true;
-    while (entry) {
-      buffer[count] = entry;
-      if (!entry.isBuf) allBuffers = false;
-      entry = entry.next;
-      count += 1;
-    }
-    buffer.allBuffers = allBuffers;
-
-    doWrite(stream, state, true, state.length, buffer, '', holder.finish);
-
-    // doWrite is almost always async, defer these to save a bit of time
-    // as the hot path ends with doWrite
-    state.pendingcb++;
-    state.lastBufferedRequest = null;
-    if (holder.next) {
-      state.corkedRequestsFree = holder.next;
-      holder.next = null;
-    } else {
-      state.corkedRequestsFree = new CorkedRequest(state);
-    }
-    state.bufferedRequestCount = 0;
-  } else {
-    // Slow case, write chunks one-by-one
-    while (entry) {
-      var chunk = entry.chunk;
-      var encoding = entry.encoding;
-      var cb = entry.callback;
-      var len = state.objectMode ? 1 : chunk.length;
-
-      doWrite(stream, state, false, len, chunk, encoding, cb);
-      entry = entry.next;
-      state.bufferedRequestCount--;
-      // if we didn't call the onwrite immediately, then
-      // it means that we need to wait until it does.
-      // also, that means that the chunk and cb are currently
-      // being processed, so move the buffer counter past them.
-      if (state.writing) {
-        break;
-      }
-    }
-
-    if (entry === null) state.lastBufferedRequest = null;
-  }
-
-  state.bufferedRequest = entry;
-  state.bufferProcessing = false;
-}
-
-Writable.prototype._write = function (chunk, encoding, cb) {
-  cb(new Error('_write() is not implemented'));
-};
-
-Writable.prototype._writev = null;
-
-Writable.prototype.end = function (chunk, encoding, cb) {
-  var state = this._writableState;
-
-  if (typeof chunk === 'function') {
-    cb = chunk;
-    chunk = null;
-    encoding = null;
-  } else if (typeof encoding === 'function') {
-    cb = encoding;
-    encoding = null;
-  }
-
-  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
-
-  // .end() fully uncorks
-  if (state.corked) {
-    state.corked = 1;
-    this.uncork();
-  }
-
-  // ignore unnecessary end() calls.
-  if (!state.ending && !state.finished) endWritable(this, state, cb);
-};
-
-function needFinish(state) {
-  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
-}
-function callFinal(stream, state) {
-  stream._final(function (err) {
-    state.pendingcb--;
-    if (err) {
-      stream.emit('error', err);
-    }
-    state.prefinished = true;
-    stream.emit('prefinish');
-    finishMaybe(stream, state);
-  });
-}
-function prefinish(stream, state) {
-  if (!state.prefinished && !state.finalCalled) {
-    if (typeof stream._final === 'function') {
-      state.pendingcb++;
-      state.finalCalled = true;
-      pna.nextTick(callFinal, stream, state);
-    } else {
-      state.prefinished = true;
-      stream.emit('prefinish');
-    }
-  }
-}
-
-function finishMaybe(stream, state) {
-  var need = needFinish(state);
-  if (need) {
-    prefinish(stream, state);
-    if (state.pendingcb === 0) {
-      state.finished = true;
-      stream.emit('finish');
-    }
-  }
-  return need;
-}
-
-function endWritable(stream, state, cb) {
-  state.ending = true;
-  finishMaybe(stream, state);
-  if (cb) {
-    if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);
-  }
-  state.ended = true;
-  stream.writable = false;
-}
-
-function onCorkedFinish(corkReq, state, err) {
-  var entry = corkReq.entry;
-  corkReq.entry = null;
-  while (entry) {
-    var cb = entry.callback;
-    state.pendingcb--;
-    cb(err);
-    entry = entry.next;
-  }
-  if (state.corkedRequestsFree) {
-    state.corkedRequestsFree.next = corkReq;
-  } else {
-    state.corkedRequestsFree = corkReq;
-  }
-}
-
-Object.defineProperty(Writable.prototype, 'destroyed', {
-  get: function () {
-    if (this._writableState === undefined) {
-      return false;
-    }
-    return this._writableState.destroyed;
-  },
-  set: function (value) {
-    // we ignore the value if the stream
-    // has not been initialized yet
-    if (!this._writableState) {
-      return;
-    }
-
-    // backward compatibility, the user is explicitly
-    // managing destroyed
-    this._writableState.destroyed = value;
-  }
-});
-
-Writable.prototype.destroy = destroyImpl.destroy;
-Writable.prototype._undestroy = destroyImpl.undestroy;
-Writable.prototype._destroy = function (err, cb) {
-  this.end();
-  cb(err);
-};
\ No newline at end of file
diff --git a/templetes/node_modules/fsevents/node_modules/wide-align/align.js b/templetes/node_modules/fsevents/node_modules/wide-align/align.js
deleted file mode 100644
index 4f94ca4c..00000000
--- a/templetes/node_modules/fsevents/node_modules/wide-align/align.js
+++ /dev/null
@@ -1,65 +0,0 @@
-'use strict'
-var stringWidth = require('string-width')
-
-exports.center = alignCenter
-exports.left = alignLeft
-exports.right = alignRight
-
-// lodash's way of generating pad characters.
-
-function createPadding (width) {
-  var result = ''
-  var string = ' '
-  var n = width
-  do {
-    if (n % 2) {
-      result += string;
-    }
-    n = Math.floor(n / 2);
-    string += string;
-  } while (n);
-
-  return result;
-}
-
-function alignLeft (str, width) {
-  var trimmed = str.trimRight()
-  if (trimmed.length === 0 && str.length >= width) return str
-  var padding = ''
-  var strWidth = stringWidth(trimmed)
-
-  if (strWidth < width) {
-    padding = createPadding(width - strWidth)
-  }
-
-  return trimmed + padding
-}
-
-function alignRight (str, width) {
-  var trimmed = str.trimLeft()
-  if (trimmed.length === 0 && str.length >= width) return str
-  var padding = ''
-  var strWidth = stringWidth(trimmed)
-
-  if (strWidth < width) {
-    padding = createPadding(width - strWidth)
-  }
-
-  return padding + trimmed
-}
-
-function alignCenter (str, width) {
-  var trimmed = str.trim()
-  if (trimmed.length === 0 && str.length >= width) return str
-  var padLeft = ''
-  var padRight = ''
-  var strWidth = stringWidth(trimmed)
-
-  if (strWidth < width) {
-    var padLeftBy = parseInt((width - strWidth) / 2, 10) 
-    padLeft = createPadding(padLeftBy)
-    padRight = createPadding(width - (strWidth + padLeftBy))
-  }
-
-  return padLeft + trimmed + padRight
-}
diff --git a/templetes/node_modules/lodash/_Promise.js b/templetes/node_modules/lodash/_Promise.js
deleted file mode 100644
index 247b9e1b..00000000
--- a/templetes/node_modules/lodash/_Promise.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var getNative = require('./_getNative'),
-    root = require('./_root');
-
-/* Built-in method references that are verified to be native. */
-var Promise = getNative(root, 'Promise');
-
-module.exports = Promise;
diff --git a/templetes/node_modules/lodash/_Set.js b/templetes/node_modules/lodash/_Set.js
deleted file mode 100644
index b3c8dcbf..00000000
--- a/templetes/node_modules/lodash/_Set.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var getNative = require('./_getNative'),
-    root = require('./_root');
-
-/* Built-in method references that are verified to be native. */
-var Set = getNative(root, 'Set');
-
-module.exports = Set;
diff --git a/templetes/node_modules/lodash/_SetCache.js b/templetes/node_modules/lodash/_SetCache.js
deleted file mode 100644
index 6468b064..00000000
--- a/templetes/node_modules/lodash/_SetCache.js
+++ /dev/null
@@ -1,27 +0,0 @@
-var MapCache = require('./_MapCache'),
-    setCacheAdd = require('./_setCacheAdd'),
-    setCacheHas = require('./_setCacheHas');
-
-/**
- *
- * Creates an array cache object to store unique values.
- *
- * @private
- * @constructor
- * @param {Array} [values] The values to cache.
- */
-function SetCache(values) {
-  var index = -1,
-      length = values == null ? 0 : values.length;
-
-  this.__data__ = new MapCache;
-  while (++index < length) {
-    this.add(values[index]);
-  }
-}
-
-// Add methods to `SetCache`.
-SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
-SetCache.prototype.has = setCacheHas;
-
-module.exports = SetCache;
diff --git a/templetes/node_modules/lodash/_Stack.js b/templetes/node_modules/lodash/_Stack.js
deleted file mode 100644
index 80b2cf1b..00000000
--- a/templetes/node_modules/lodash/_Stack.js
+++ /dev/null
@@ -1,27 +0,0 @@
-var ListCache = require('./_ListCache'),
-    stackClear = require('./_stackClear'),
-    stackDelete = require('./_stackDelete'),
-    stackGet = require('./_stackGet'),
-    stackHas = require('./_stackHas'),
-    stackSet = require('./_stackSet');
-
-/**
- * Creates a stack cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function Stack(entries) {
-  var data = this.__data__ = new ListCache(entries);
-  this.size = data.size;
-}
-
-// Add methods to `Stack`.
-Stack.prototype.clear = stackClear;
-Stack.prototype['delete'] = stackDelete;
-Stack.prototype.get = stackGet;
-Stack.prototype.has = stackHas;
-Stack.prototype.set = stackSet;
-
-module.exports = Stack;
diff --git a/templetes/node_modules/lodash/_Symbol.js b/templetes/node_modules/lodash/_Symbol.js
deleted file mode 100644
index a013f7c5..00000000
--- a/templetes/node_modules/lodash/_Symbol.js
+++ /dev/null
@@ -1,6 +0,0 @@
-var root = require('./_root');
-
-/** Built-in value references. */
-var Symbol = root.Symbol;
-
-module.exports = Symbol;
diff --git a/templetes/node_modules/lodash/_Uint8Array.js b/templetes/node_modules/lodash/_Uint8Array.js
deleted file mode 100644
index 2fb30e15..00000000
--- a/templetes/node_modules/lodash/_Uint8Array.js
+++ /dev/null
@@ -1,6 +0,0 @@
-var root = require('./_root');
-
-/** Built-in value references. */
-var Uint8Array = root.Uint8Array;
-
-module.exports = Uint8Array;
diff --git a/templetes/node_modules/lodash/_WeakMap.js b/templetes/node_modules/lodash/_WeakMap.js
deleted file mode 100644
index 567f86c6..00000000
--- a/templetes/node_modules/lodash/_WeakMap.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var getNative = require('./_getNative'),
-    root = require('./_root');
-
-/* Built-in method references that are verified to be native. */
-var WeakMap = getNative(root, 'WeakMap');
-
-module.exports = WeakMap;
diff --git a/templetes/node_modules/lodash/_reEscape.js b/templetes/node_modules/lodash/_reEscape.js
deleted file mode 100644
index 7f47eda6..00000000
--- a/templetes/node_modules/lodash/_reEscape.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/** Used to match template delimiters. */
-var reEscape = /<%-([\s\S]+?)%>/g;
-
-module.exports = reEscape;
diff --git a/templetes/node_modules/lodash/_reEvaluate.js b/templetes/node_modules/lodash/_reEvaluate.js
deleted file mode 100644
index 6adfc312..00000000
--- a/templetes/node_modules/lodash/_reEvaluate.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/** Used to match template delimiters. */
-var reEvaluate = /<%([\s\S]+?)%>/g;
-
-module.exports = reEvaluate;
diff --git a/templetes/node_modules/lodash/_reInterpolate.js b/templetes/node_modules/lodash/_reInterpolate.js
deleted file mode 100644
index d02ff0b2..00000000
--- a/templetes/node_modules/lodash/_reInterpolate.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/** Used to match template delimiters. */
-var reInterpolate = /<%=([\s\S]+?)%>/g;
-
-module.exports = reInterpolate;
diff --git a/templetes/node_modules/lodash/_realNames.js b/templetes/node_modules/lodash/_realNames.js
deleted file mode 100644
index aa0d5292..00000000
--- a/templetes/node_modules/lodash/_realNames.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/** Used to lookup unminified function names. */
-var realNames = {};
-
-module.exports = realNames;
diff --git a/templetes/node_modules/lodash/_reorder.js b/templetes/node_modules/lodash/_reorder.js
deleted file mode 100644
index a3502b05..00000000
--- a/templetes/node_modules/lodash/_reorder.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var copyArray = require('./_copyArray'),
-    isIndex = require('./_isIndex');
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeMin = Math.min;
-
-/**
- * Reorder `array` according to the specified indexes where the element at
- * the first index is assigned as the first element, the element at
- * the second index is assigned as the second element, and so on.
- *
- * @private
- * @param {Array} array The array to reorder.
- * @param {Array} indexes The arranged array indexes.
- * @returns {Array} Returns `array`.
- */
-function reorder(array, indexes) {
-  var arrLength = array.length,
-      length = nativeMin(indexes.length, arrLength),
-      oldArray = copyArray(array);
-
-  while (length--) {
-    var index = indexes[length];
-    array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
-  }
-  return array;
-}
-
-module.exports = reorder;
diff --git a/templetes/node_modules/lodash/_replaceHolders.js b/templetes/node_modules/lodash/_replaceHolders.js
deleted file mode 100644
index 74360ec4..00000000
--- a/templetes/node_modules/lodash/_replaceHolders.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/** Used as the internal argument placeholder. */
-var PLACEHOLDER = '__lodash_placeholder__';
-
-/**
- * Replaces all `placeholder` elements in `array` with an internal placeholder
- * and returns an array of their indexes.
- *
- * @private
- * @param {Array} array The array to modify.
- * @param {*} placeholder The placeholder to replace.
- * @returns {Array} Returns the new array of placeholder indexes.
- */
-function replaceHolders(array, placeholder) {
-  var index = -1,
-      length = array.length,
-      resIndex = 0,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-    if (value === placeholder || value === PLACEHOLDER) {
-      array[index] = PLACEHOLDER;
-      result[resIndex++] = index;
-    }
-  }
-  return result;
-}
-
-module.exports = replaceHolders;
diff --git a/templetes/node_modules/lodash/_root.js b/templetes/node_modules/lodash/_root.js
deleted file mode 100644
index d2852bed..00000000
--- a/templetes/node_modules/lodash/_root.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var freeGlobal = require('./_freeGlobal');
-
-/** Detect free variable `self`. */
-var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
-
-/** Used as a reference to the global object. */
-var root = freeGlobal || freeSelf || Function('return this')();
-
-module.exports = root;
diff --git a/templetes/node_modules/lodash/_safeGet.js b/templetes/node_modules/lodash/_safeGet.js
deleted file mode 100644
index b070897d..00000000
--- a/templetes/node_modules/lodash/_safeGet.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * Gets the value at `key`, unless `key` is "__proto__" or "constructor".
- *
- * @private
- * @param {Object} object The object to query.
- * @param {string} key The key of the property to get.
- * @returns {*} Returns the property value.
- */
-function safeGet(object, key) {
-  if (key === 'constructor' && typeof object[key] === 'function') {
-    return;
-  }
-
-  if (key == '__proto__') {
-    return;
-  }
-
-  return object[key];
-}
-
-module.exports = safeGet;
diff --git a/templetes/node_modules/lodash/_setCacheAdd.js b/templetes/node_modules/lodash/_setCacheAdd.js
deleted file mode 100644
index 1081a744..00000000
--- a/templetes/node_modules/lodash/_setCacheAdd.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/** Used to stand-in for `undefined` hash values. */
-var HASH_UNDEFINED = '__lodash_hash_undefined__';
-
-/**
- * Adds `value` to the array cache.
- *
- * @private
- * @name add
- * @memberOf SetCache
- * @alias push
- * @param {*} value The value to cache.
- * @returns {Object} Returns the cache instance.
- */
-function setCacheAdd(value) {
-  this.__data__.set(value, HASH_UNDEFINED);
-  return this;
-}
-
-module.exports = setCacheAdd;
diff --git a/templetes/node_modules/lodash/_setCacheHas.js b/templetes/node_modules/lodash/_setCacheHas.js
deleted file mode 100644
index 9a492556..00000000
--- a/templetes/node_modules/lodash/_setCacheHas.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Checks if `value` is in the array cache.
- *
- * @private
- * @name has
- * @memberOf SetCache
- * @param {*} value The value to search for.
- * @returns {number} Returns `true` if `value` is found, else `false`.
- */
-function setCacheHas(value) {
-  return this.__data__.has(value);
-}
-
-module.exports = setCacheHas;
diff --git a/templetes/node_modules/lodash/_setData.js b/templetes/node_modules/lodash/_setData.js
deleted file mode 100644
index e5cf3eb9..00000000
--- a/templetes/node_modules/lodash/_setData.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var baseSetData = require('./_baseSetData'),
-    shortOut = require('./_shortOut');
-
-/**
- * Sets metadata for `func`.
- *
- * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
- * period of time, it will trip its breaker and transition to an identity
- * function to avoid garbage collection pauses in V8. See
- * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
- * for more details.
- *
- * @private
- * @param {Function} func The function to associate metadata with.
- * @param {*} data The metadata.
- * @returns {Function} Returns `func`.
- */
-var setData = shortOut(baseSetData);
-
-module.exports = setData;
diff --git a/templetes/node_modules/lodash/_setToArray.js b/templetes/node_modules/lodash/_setToArray.js
deleted file mode 100644
index b87f0741..00000000
--- a/templetes/node_modules/lodash/_setToArray.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Converts `set` to an array of its values.
- *
- * @private
- * @param {Object} set The set to convert.
- * @returns {Array} Returns the values.
- */
-function setToArray(set) {
-  var index = -1,
-      result = Array(set.size);
-
-  set.forEach(function(value) {
-    result[++index] = value;
-  });
-  return result;
-}
-
-module.exports = setToArray;
diff --git a/templetes/node_modules/lodash/_setToPairs.js b/templetes/node_modules/lodash/_setToPairs.js
deleted file mode 100644
index 36ad37a0..00000000
--- a/templetes/node_modules/lodash/_setToPairs.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Converts `set` to its value-value pairs.
- *
- * @private
- * @param {Object} set The set to convert.
- * @returns {Array} Returns the value-value pairs.
- */
-function setToPairs(set) {
-  var index = -1,
-      result = Array(set.size);
-
-  set.forEach(function(value) {
-    result[++index] = [value, value];
-  });
-  return result;
-}
-
-module.exports = setToPairs;
diff --git a/templetes/node_modules/lodash/_setToString.js b/templetes/node_modules/lodash/_setToString.js
deleted file mode 100644
index 6ca84196..00000000
--- a/templetes/node_modules/lodash/_setToString.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var baseSetToString = require('./_baseSetToString'),
-    shortOut = require('./_shortOut');
-
-/**
- * Sets the `toString` method of `func` to return `string`.
- *
- * @private
- * @param {Function} func The function to modify.
- * @param {Function} string The `toString` result.
- * @returns {Function} Returns `func`.
- */
-var setToString = shortOut(baseSetToString);
-
-module.exports = setToString;
diff --git a/templetes/node_modules/lodash/_setWrapToString.js b/templetes/node_modules/lodash/_setWrapToString.js
deleted file mode 100644
index decdc449..00000000
--- a/templetes/node_modules/lodash/_setWrapToString.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var getWrapDetails = require('./_getWrapDetails'),
-    insertWrapDetails = require('./_insertWrapDetails'),
-    setToString = require('./_setToString'),
-    updateWrapDetails = require('./_updateWrapDetails');
-
-/**
- * Sets the `toString` method of `wrapper` to mimic the source of `reference`
- * with wrapper details in a comment at the top of the source body.
- *
- * @private
- * @param {Function} wrapper The function to modify.
- * @param {Function} reference The reference function.
- * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
- * @returns {Function} Returns `wrapper`.
- */
-function setWrapToString(wrapper, reference, bitmask) {
-  var source = (reference + '');
-  return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
-}
-
-module.exports = setWrapToString;
diff --git a/templetes/node_modules/lodash/_shortOut.js b/templetes/node_modules/lodash/_shortOut.js
deleted file mode 100644
index 3300a079..00000000
--- a/templetes/node_modules/lodash/_shortOut.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/** Used to detect hot functions by number of calls within a span of milliseconds. */
-var HOT_COUNT = 800,
-    HOT_SPAN = 16;
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeNow = Date.now;
-
-/**
- * Creates a function that'll short out and invoke `identity` instead
- * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
- * milliseconds.
- *
- * @private
- * @param {Function} func The function to restrict.
- * @returns {Function} Returns the new shortable function.
- */
-function shortOut(func) {
-  var count = 0,
-      lastCalled = 0;
-
-  return function() {
-    var stamp = nativeNow(),
-        remaining = HOT_SPAN - (stamp - lastCalled);
-
-    lastCalled = stamp;
-    if (remaining > 0) {
-      if (++count >= HOT_COUNT) {
-        return arguments[0];
-      }
-    } else {
-      count = 0;
-    }
-    return func.apply(undefined, arguments);
-  };
-}
-
-module.exports = shortOut;
diff --git a/templetes/node_modules/lodash/_shuffleSelf.js b/templetes/node_modules/lodash/_shuffleSelf.js
deleted file mode 100644
index 8bcc4f5c..00000000
--- a/templetes/node_modules/lodash/_shuffleSelf.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var baseRandom = require('./_baseRandom');
-
-/**
- * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
- *
- * @private
- * @param {Array} array The array to shuffle.
- * @param {number} [size=array.length] The size of `array`.
- * @returns {Array} Returns `array`.
- */
-function shuffleSelf(array, size) {
-  var index = -1,
-      length = array.length,
-      lastIndex = length - 1;
-
-  size = size === undefined ? length : size;
-  while (++index < size) {
-    var rand = baseRandom(index, lastIndex),
-        value = array[rand];
-
-    array[rand] = array[index];
-    array[index] = value;
-  }
-  array.length = size;
-  return array;
-}
-
-module.exports = shuffleSelf;
diff --git a/templetes/node_modules/lodash/_stackClear.js b/templetes/node_modules/lodash/_stackClear.js
deleted file mode 100644
index ce8e5a92..00000000
--- a/templetes/node_modules/lodash/_stackClear.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var ListCache = require('./_ListCache');
-
-/**
- * Removes all key-value entries from the stack.
- *
- * @private
- * @name clear
- * @memberOf Stack
- */
-function stackClear() {
-  this.__data__ = new ListCache;
-  this.size = 0;
-}
-
-module.exports = stackClear;
diff --git a/templetes/node_modules/lodash/_stackDelete.js b/templetes/node_modules/lodash/_stackDelete.js
deleted file mode 100644
index ff9887ab..00000000
--- a/templetes/node_modules/lodash/_stackDelete.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Removes `key` and its value from the stack.
- *
- * @private
- * @name delete
- * @memberOf Stack
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function stackDelete(key) {
-  var data = this.__data__,
-      result = data['delete'](key);
-
-  this.size = data.size;
-  return result;
-}
-
-module.exports = stackDelete;
diff --git a/templetes/node_modules/lodash/_stackGet.js b/templetes/node_modules/lodash/_stackGet.js
deleted file mode 100644
index 1cdf0040..00000000
--- a/templetes/node_modules/lodash/_stackGet.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Gets the stack value for `key`.
- *
- * @private
- * @name get
- * @memberOf Stack
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function stackGet(key) {
-  return this.__data__.get(key);
-}
-
-module.exports = stackGet;
diff --git a/templetes/node_modules/lodash/_stackHas.js b/templetes/node_modules/lodash/_stackHas.js
deleted file mode 100644
index 16a3ad11..00000000
--- a/templetes/node_modules/lodash/_stackHas.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Checks if a stack value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Stack
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function stackHas(key) {
-  return this.__data__.has(key);
-}
-
-module.exports = stackHas;
diff --git a/templetes/node_modules/lodash/_stackSet.js b/templetes/node_modules/lodash/_stackSet.js
deleted file mode 100644
index b790ac5f..00000000
--- a/templetes/node_modules/lodash/_stackSet.js
+++ /dev/null
@@ -1,34 +0,0 @@
-var ListCache = require('./_ListCache'),
-    Map = require('./_Map'),
-    MapCache = require('./_MapCache');
-
-/** Used as the size to enable large array optimizations. */
-var LARGE_ARRAY_SIZE = 200;
-
-/**
- * Sets the stack `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Stack
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the stack cache instance.
- */
-function stackSet(key, value) {
-  var data = this.__data__;
-  if (data instanceof ListCache) {
-    var pairs = data.__data__;
-    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
-      pairs.push([key, value]);
-      this.size = ++data.size;
-      return this;
-    }
-    data = this.__data__ = new MapCache(pairs);
-  }
-  data.set(key, value);
-  this.size = data.size;
-  return this;
-}
-
-module.exports = stackSet;
diff --git a/templetes/node_modules/lodash/_strictIndexOf.js b/templetes/node_modules/lodash/_strictIndexOf.js
deleted file mode 100644
index 0486a495..00000000
--- a/templetes/node_modules/lodash/_strictIndexOf.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * A specialized version of `_.indexOf` which performs strict equality
- * comparisons of values, i.e. `===`.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} value The value to search for.
- * @param {number} fromIndex The index to search from.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function strictIndexOf(array, value, fromIndex) {
-  var index = fromIndex - 1,
-      length = array.length;
-
-  while (++index < length) {
-    if (array[index] === value) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = strictIndexOf;
diff --git a/templetes/node_modules/lodash/_strictLastIndexOf.js b/templetes/node_modules/lodash/_strictLastIndexOf.js
deleted file mode 100644
index d7310dcc..00000000
--- a/templetes/node_modules/lodash/_strictLastIndexOf.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * A specialized version of `_.lastIndexOf` which performs strict equality
- * comparisons of values, i.e. `===`.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} value The value to search for.
- * @param {number} fromIndex The index to search from.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function strictLastIndexOf(array, value, fromIndex) {
-  var index = fromIndex + 1;
-  while (index--) {
-    if (array[index] === value) {
-      return index;
-    }
-  }
-  return index;
-}
-
-module.exports = strictLastIndexOf;
diff --git a/templetes/node_modules/lodash/_stringSize.js b/templetes/node_modules/lodash/_stringSize.js
deleted file mode 100644
index 17ef462a..00000000
--- a/templetes/node_modules/lodash/_stringSize.js
+++ /dev/null
@@ -1,18 +0,0 @@
-var asciiSize = require('./_asciiSize'),
-    hasUnicode = require('./_hasUnicode'),
-    unicodeSize = require('./_unicodeSize');
-
-/**
- * Gets the number of symbols in `string`.
- *
- * @private
- * @param {string} string The string to inspect.
- * @returns {number} Returns the string size.
- */
-function stringSize(string) {
-  return hasUnicode(string)
-    ? unicodeSize(string)
-    : asciiSize(string);
-}
-
-module.exports = stringSize;
diff --git a/templetes/node_modules/lodash/_stringToArray.js b/templetes/node_modules/lodash/_stringToArray.js
deleted file mode 100644
index d161158c..00000000
--- a/templetes/node_modules/lodash/_stringToArray.js
+++ /dev/null
@@ -1,18 +0,0 @@
-var asciiToArray = require('./_asciiToArray'),
-    hasUnicode = require('./_hasUnicode'),
-    unicodeToArray = require('./_unicodeToArray');
-
-/**
- * Converts `string` to an array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the converted array.
- */
-function stringToArray(string) {
-  return hasUnicode(string)
-    ? unicodeToArray(string)
-    : asciiToArray(string);
-}
-
-module.exports = stringToArray;
diff --git a/templetes/node_modules/lodash/_stringToPath.js b/templetes/node_modules/lodash/_stringToPath.js
deleted file mode 100644
index 8f39f8a2..00000000
--- a/templetes/node_modules/lodash/_stringToPath.js
+++ /dev/null
@@ -1,27 +0,0 @@
-var memoizeCapped = require('./_memoizeCapped');
-
-/** Used to match property names within property paths. */
-var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
-
-/** Used to match backslashes in property paths. */
-var reEscapeChar = /\\(\\)?/g;
-
-/**
- * Converts `string` to a property path array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the property path array.
- */
-var stringToPath = memoizeCapped(function(string) {
-  var result = [];
-  if (string.charCodeAt(0) === 46 /* . */) {
-    result.push('');
-  }
-  string.replace(rePropName, function(match, number, quote, subString) {
-    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
-  });
-  return result;
-});
-
-module.exports = stringToPath;
diff --git a/templetes/node_modules/lodash/_toKey.js b/templetes/node_modules/lodash/_toKey.js
deleted file mode 100644
index c6d645c4..00000000
--- a/templetes/node_modules/lodash/_toKey.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var isSymbol = require('./isSymbol');
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0;
-
-/**
- * Converts `value` to a string key if it's not a string or symbol.
- *
- * @private
- * @param {*} value The value to inspect.
- * @returns {string|symbol} Returns the key.
- */
-function toKey(value) {
-  if (typeof value == 'string' || isSymbol(value)) {
-    return value;
-  }
-  var result = (value + '');
-  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-}
-
-module.exports = toKey;
diff --git a/templetes/node_modules/lodash/_toSource.js b/templetes/node_modules/lodash/_toSource.js
deleted file mode 100644
index a020b386..00000000
--- a/templetes/node_modules/lodash/_toSource.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/** Used for built-in method references. */
-var funcProto = Function.prototype;
-
-/** Used to resolve the decompiled source of functions. */
-var funcToString = funcProto.toString;
-
-/**
- * Converts `func` to its source code.
- *
- * @private
- * @param {Function} func The function to convert.
- * @returns {string} Returns the source code.
- */
-function toSource(func) {
-  if (func != null) {
-    try {
-      return funcToString.call(func);
-    } catch (e) {}
-    try {
-      return (func + '');
-    } catch (e) {}
-  }
-  return '';
-}
-
-module.exports = toSource;
diff --git a/templetes/node_modules/lodash/_unescapeHtmlChar.js b/templetes/node_modules/lodash/_unescapeHtmlChar.js
deleted file mode 100644
index a71fecb3..00000000
--- a/templetes/node_modules/lodash/_unescapeHtmlChar.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var basePropertyOf = require('./_basePropertyOf');
-
-/** Used to map HTML entities to characters. */
-var htmlUnescapes = {
-  '&amp;': '&',
-  '&lt;': '<',
-  '&gt;': '>',
-  '&quot;': '"',
-  '&#39;': "'"
-};
-
-/**
- * Used by `_.unescape` to convert HTML entities to characters.
- *
- * @private
- * @param {string} chr The matched character to unescape.
- * @returns {string} Returns the unescaped character.
- */
-var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
-
-module.exports = unescapeHtmlChar;
diff --git a/templetes/node_modules/lodash/_unicodeSize.js b/templetes/node_modules/lodash/_unicodeSize.js
deleted file mode 100644
index 68137ec2..00000000
--- a/templetes/node_modules/lodash/_unicodeSize.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/** Used to compose unicode character classes. */
-var rsAstralRange = '\\ud800-\\udfff',
-    rsComboMarksRange = '\\u0300-\\u036f',
-    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
-    rsComboSymbolsRange = '\\u20d0-\\u20ff',
-    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
-    rsVarRange = '\\ufe0e\\ufe0f';
-
-/** Used to compose unicode capture groups. */
-var rsAstral = '[' + rsAstralRange + ']',
-    rsCombo = '[' + rsComboRange + ']',
-    rsFitz = '\\ud83c[\\udffb-\\udfff]',
-    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
-    rsNonAstral = '[^' + rsAstralRange + ']',
-    rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
-    rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
-    rsZWJ = '\\u200d';
-
-/** Used to compose unicode regexes. */
-var reOptMod = rsModifier + '?',
-    rsOptVar = '[' + rsVarRange + ']?',
-    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
-    rsSeq = rsOptVar + reOptMod + rsOptJoin,
-    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
-
-/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
-var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
-
-/**
- * Gets the size of a Unicode `string`.
- *
- * @private
- * @param {string} string The string inspect.
- * @returns {number} Returns the string size.
- */
-function unicodeSize(string) {
-  var result = reUnicode.lastIndex = 0;
-  while (reUnicode.test(string)) {
-    ++result;
-  }
-  return result;
-}
-
-module.exports = unicodeSize;
diff --git a/templetes/node_modules/lodash/_unicodeToArray.js b/templetes/node_modules/lodash/_unicodeToArray.js
deleted file mode 100644
index 2a725c06..00000000
--- a/templetes/node_modules/lodash/_unicodeToArray.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/** Used to compose unicode character classes. */
-var rsAstralRange = '\\ud800-\\udfff',
-    rsComboMarksRange = '\\u0300-\\u036f',
-    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
-    rsComboSymbolsRange = '\\u20d0-\\u20ff',
-    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
-    rsVarRange = '\\ufe0e\\ufe0f';
-
-/** Used to compose unicode capture groups. */
-var rsAstral = '[' + rsAstralRange + ']',
-    rsCombo = '[' + rsComboRange + ']',
-    rsFitz = '\\ud83c[\\udffb-\\udfff]',
-    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
-    rsNonAstral = '[^' + rsAstralRange + ']',
-    rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
-    rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
-    rsZWJ = '\\u200d';
-
-/** Used to compose unicode regexes. */
-var reOptMod = rsModifier + '?',
-    rsOptVar = '[' + rsVarRange + ']?',
-    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
-    rsSeq = rsOptVar + reOptMod + rsOptJoin,
-    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
-
-/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
-var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
-
-/**
- * Converts a Unicode `string` to an array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the converted array.
- */
-function unicodeToArray(string) {
-  return string.match(reUnicode) || [];
-}
-
-module.exports = unicodeToArray;
diff --git a/templetes/node_modules/lodash/_unicodeWords.js b/templetes/node_modules/lodash/_unicodeWords.js
deleted file mode 100644
index e72e6e0f..00000000
--- a/templetes/node_modules/lodash/_unicodeWords.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/** Used to compose unicode character classes. */
-var rsAstralRange = '\\ud800-\\udfff',
-    rsComboMarksRange = '\\u0300-\\u036f',
-    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
-    rsComboSymbolsRange = '\\u20d0-\\u20ff',
-    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
-    rsDingbatRange = '\\u2700-\\u27bf',
-    rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
-    rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
-    rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
-    rsPunctuationRange = '\\u2000-\\u206f',
-    rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
-    rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
-    rsVarRange = '\\ufe0e\\ufe0f',
-    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
-
-/** Used to compose unicode capture groups. */
-var rsApos = "['\u2019]",
-    rsBreak = '[' + rsBreakRange + ']',
-    rsCombo = '[' + rsComboRange + ']',
-    rsDigits = '\\d+',
-    rsDingbat = '[' + rsDingbatRange + ']',
-    rsLower = '[' + rsLowerRange + ']',
-    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
-    rsFitz = '\\ud83c[\\udffb-\\udfff]',
-    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
-    rsNonAstral = '[^' + rsAstralRange + ']',
-    rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
-    rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
-    rsUpper = '[' + rsUpperRange + ']',
-    rsZWJ = '\\u200d';
-
-/** Used to compose unicode regexes. */
-var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
-    rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
-    rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
-    rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
-    reOptMod = rsModifier + '?',
-    rsOptVar = '[' + rsVarRange + ']?',
-    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
-    rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
-    rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
-    rsSeq = rsOptVar + reOptMod + rsOptJoin,
-    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;
-
-/** Used to match complex or compound words. */
-var reUnicodeWord = RegExp([
-  rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
-  rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
-  rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
-  rsUpper + '+' + rsOptContrUpper,
-  rsOrdUpper,
-  rsOrdLower,
-  rsDigits,
-  rsEmoji
-].join('|'), 'g');
-
-/**
- * Splits a Unicode `string` into an array of its words.
- *
- * @private
- * @param {string} The string to inspect.
- * @returns {Array} Returns the words of `string`.
- */
-function unicodeWords(string) {
-  return string.match(reUnicodeWord) || [];
-}
-
-module.exports = unicodeWords;
diff --git a/templetes/node_modules/lodash/_updateWrapDetails.js b/templetes/node_modules/lodash/_updateWrapDetails.js
deleted file mode 100644
index 8759fbdf..00000000
--- a/templetes/node_modules/lodash/_updateWrapDetails.js
+++ /dev/null
@@ -1,46 +0,0 @@
-var arrayEach = require('./_arrayEach'),
-    arrayIncludes = require('./_arrayIncludes');
-
-/** Used to compose bitmasks for function metadata. */
-var WRAP_BIND_FLAG = 1,
-    WRAP_BIND_KEY_FLAG = 2,
-    WRAP_CURRY_FLAG = 8,
-    WRAP_CURRY_RIGHT_FLAG = 16,
-    WRAP_PARTIAL_FLAG = 32,
-    WRAP_PARTIAL_RIGHT_FLAG = 64,
-    WRAP_ARY_FLAG = 128,
-    WRAP_REARG_FLAG = 256,
-    WRAP_FLIP_FLAG = 512;
-
-/** Used to associate wrap methods with their bit flags. */
-var wrapFlags = [
-  ['ary', WRAP_ARY_FLAG],
-  ['bind', WRAP_BIND_FLAG],
-  ['bindKey', WRAP_BIND_KEY_FLAG],
-  ['curry', WRAP_CURRY_FLAG],
-  ['curryRight', WRAP_CURRY_RIGHT_FLAG],
-  ['flip', WRAP_FLIP_FLAG],
-  ['partial', WRAP_PARTIAL_FLAG],
-  ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
-  ['rearg', WRAP_REARG_FLAG]
-];
-
-/**
- * Updates wrapper `details` based on `bitmask` flags.
- *
- * @private
- * @returns {Array} details The details to modify.
- * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
- * @returns {Array} Returns `details`.
- */
-function updateWrapDetails(details, bitmask) {
-  arrayEach(wrapFlags, function(pair) {
-    var value = '_.' + pair[0];
-    if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
-      details.push(value);
-    }
-  });
-  return details.sort();
-}
-
-module.exports = updateWrapDetails;
diff --git a/templetes/node_modules/lodash/_wrapperClone.js b/templetes/node_modules/lodash/_wrapperClone.js
deleted file mode 100644
index 7bb58a2e..00000000
--- a/templetes/node_modules/lodash/_wrapperClone.js
+++ /dev/null
@@ -1,23 +0,0 @@
-var LazyWrapper = require('./_LazyWrapper'),
-    LodashWrapper = require('./_LodashWrapper'),
-    copyArray = require('./_copyArray');
-
-/**
- * Creates a clone of `wrapper`.
- *
- * @private
- * @param {Object} wrapper The wrapper to clone.
- * @returns {Object} Returns the cloned wrapper.
- */
-function wrapperClone(wrapper) {
-  if (wrapper instanceof LazyWrapper) {
-    return wrapper.clone();
-  }
-  var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
-  result.__actions__ = copyArray(wrapper.__actions__);
-  result.__index__  = wrapper.__index__;
-  result.__values__ = wrapper.__values__;
-  return result;
-}
-
-module.exports = wrapperClone;
diff --git a/templetes/node_modules/lodash/add.js b/templetes/node_modules/lodash/add.js
deleted file mode 100644
index f0695156..00000000
--- a/templetes/node_modules/lodash/add.js
+++ /dev/null
@@ -1,22 +0,0 @@
-var createMathOperation = require('./_createMathOperation');
-
-/**
- * Adds two numbers.
- *
- * @static
- * @memberOf _
- * @since 3.4.0
- * @category Math
- * @param {number} augend The first number in an addition.
- * @param {number} addend The second number in an addition.
- * @returns {number} Returns the total.
- * @example
- *
- * _.add(6, 4);
- * // => 10
- */
-var add = createMathOperation(function(augend, addend) {
-  return augend + addend;
-}, 0);
-
-module.exports = add;
diff --git a/templetes/node_modules/lodash/after.js b/templetes/node_modules/lodash/after.js
deleted file mode 100644
index 3900c979..00000000
--- a/templetes/node_modules/lodash/after.js
+++ /dev/null
@@ -1,42 +0,0 @@
-var toInteger = require('./toInteger');
-
-/** Error message constants. */
-var FUNC_ERROR_TEXT = 'Expected a function';
-
-/**
- * The opposite of `_.before`; this method creates a function that invokes
- * `func` once it's called `n` or more times.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Function
- * @param {number} n The number of calls before `func` is invoked.
- * @param {Function} func The function to restrict.
- * @returns {Function} Returns the new restricted function.
- * @example
- *
- * var saves = ['profile', 'settings'];
- *
- * var done = _.after(saves.length, function() {
- *   console.log('done saving!');
- * });
- *
- * _.forEach(saves, function(type) {
- *   asyncSave({ 'type': type, 'complete': done });
- * });
- * // => Logs 'done saving!' after the two async saves have completed.
- */
-function after(n, func) {
-  if (typeof func != 'function') {
-    throw new TypeError(FUNC_ERROR_TEXT);
-  }
-  n = toInteger(n);
-  return function() {
-    if (--n < 1) {
-      return func.apply(this, arguments);
-    }
-  };
-}
-
-module.exports = after;
diff --git a/templetes/node_modules/lodash/fp/_util.js b/templetes/node_modules/lodash/fp/_util.js
deleted file mode 100644
index 1dbf36f5..00000000
--- a/templetes/node_modules/lodash/fp/_util.js
+++ /dev/null
@@ -1,16 +0,0 @@
-module.exports = {
-  'ary': require('../ary'),
-  'assign': require('../_baseAssign'),
-  'clone': require('../clone'),
-  'curry': require('../curry'),
-  'forEach': require('../_arrayEach'),
-  'isArray': require('../isArray'),
-  'isError': require('../isError'),
-  'isFunction': require('../isFunction'),
-  'isWeakMap': require('../isWeakMap'),
-  'iteratee': require('../iteratee'),
-  'keys': require('../_baseKeys'),
-  'rearg': require('../rearg'),
-  'toInteger': require('../toInteger'),
-  'toPath': require('../toPath')
-};
diff --git a/templetes/node_modules/lodash/fp/add.js b/templetes/node_modules/lodash/fp/add.js
deleted file mode 100644
index 816eeece..00000000
--- a/templetes/node_modules/lodash/fp/add.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var convert = require('./convert'),
-    func = convert('add', require('../add'));
-
-func.placeholder = require('./placeholder');
-module.exports = func;
diff --git a/templetes/node_modules/lodash/fp/after.js b/templetes/node_modules/lodash/fp/after.js
deleted file mode 100644
index 21a0167a..00000000
--- a/templetes/node_modules/lodash/fp/after.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var convert = require('./convert'),
-    func = convert('after', require('../after'));
-
-func.placeholder = require('./placeholder');
-module.exports = func;
diff --git a/templetes/node_modules/lodash/fp/all.js b/templetes/node_modules/lodash/fp/all.js
deleted file mode 100644
index d0839f77..00000000
--- a/templetes/node_modules/lodash/fp/all.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('./every');
diff --git a/templetes/node_modules/lodash/fp/allPass.js b/templetes/node_modules/lodash/fp/allPass.js
deleted file mode 100644
index 79b73ef8..00000000
--- a/templetes/node_modules/lodash/fp/allPass.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('./overEvery');
diff --git a/templetes/node_modules/minimist/test/all_bool.js b/templetes/node_modules/minimist/test/all_bool.js
deleted file mode 100644
index ac835483..00000000
--- a/templetes/node_modules/minimist/test/all_bool.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var parse = require('../');
-var test = require('tape');
-
-test('flag boolean true (default all --args to boolean)', function (t) {
-    var argv = parse(['moo', '--honk', 'cow'], {
-        boolean: true
-    });
-    
-    t.deepEqual(argv, {
-        honk: true,
-        _: ['moo', 'cow']
-    });
-    
-    t.deepEqual(typeof argv.honk, 'boolean');
-    t.end();
-});
-
-test('flag boolean true only affects double hyphen arguments without equals signs', function (t) {
-    var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], {
-        boolean: true
-    });
-    
-    t.deepEqual(argv, {
-        honk: true,
-        tacos: 'good',
-        p: 55,
-        _: ['moo', 'cow']
-    });
-    
-    t.deepEqual(typeof argv.honk, 'boolean');
-    t.end();
-});
diff --git a/templetes/node_modules/neo-async/all.js b/templetes/node_modules/neo-async/all.js
deleted file mode 100644
index dad54e7f..00000000
--- a/templetes/node_modules/neo-async/all.js
+++ /dev/null
@@ -1,3 +0,0 @@
-'use strict';
-
-module.exports = require('./async').all;
diff --git a/templetes/node_modules/neo-async/allLimit.js b/templetes/node_modules/neo-async/allLimit.js
deleted file mode 100644
index d9d7aaa1..00000000
--- a/templetes/node_modules/neo-async/allLimit.js
+++ /dev/null
@@ -1,3 +0,0 @@
-'use strict';
-
-module.exports = require('./async').allLimit;
diff --git a/templetes/node_modules/neo-async/allSeries.js b/templetes/node_modules/neo-async/allSeries.js
deleted file mode 100644
index 2a7a8ba8..00000000
--- a/templetes/node_modules/neo-async/allSeries.js
+++ /dev/null
@@ -1,3 +0,0 @@
-'use strict';
-
-module.exports = require('./async').allSeries;
diff --git a/templetes/node_modules/node-forge/lib/aes.js b/templetes/node_modules/node-forge/lib/aes.js
deleted file mode 100644
index 3c1ddb29..00000000
--- a/templetes/node_modules/node-forge/lib/aes.js
+++ /dev/null
@@ -1,1091 +0,0 @@
-/**
- * Advanced Encryption Standard (AES) implementation.
- *
- * This implementation is based on the public domain library 'jscrypto' which
- * was written by:
- *
- * Emily Stark (estark@stanford.edu)
- * Mike Hamburg (mhamburg@stanford.edu)
- * Dan Boneh (dabo@cs.stanford.edu)
- *
- * Parts of this code are based on the OpenSSL implementation of AES:
- * http://www.openssl.org
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2014 Digital Bazaar, Inc.
- */
-var forge = require('./forge');
-require('./cipher');
-require('./cipherModes');
-require('./util');
-
-/* AES API */
-module.exports = forge.aes = forge.aes || {};
-
-/**
- * Deprecated. Instead, use:
- *
- * var cipher = forge.cipher.createCipher('AES-<mode>', key);
- * cipher.start({iv: iv});
- *
- * Creates an AES cipher object to encrypt data using the given symmetric key.
- * The output will be stored in the 'output' member of the returned cipher.
- *
- * The key and iv may be given as a string of bytes, an array of bytes,
- * a byte buffer, or an array of 32-bit words.
- *
- * @param key the symmetric key to use.
- * @param iv the initialization vector to use.
- * @param output the buffer to write to, null to create one.
- * @param mode the cipher mode to use (default: 'CBC').
- *
- * @return the cipher.
- */
-forge.aes.startEncrypting = function(key, iv, output, mode) {
-  var cipher = _createCipher({
-    key: key,
-    output: output,
-    decrypt: false,
-    mode: mode
-  });
-  cipher.start(iv);
-  return cipher;
-};
-
-/**
- * Deprecated. Instead, use:
- *
- * var cipher = forge.cipher.createCipher('AES-<mode>', key);
- *
- * Creates an AES cipher object to encrypt data using the given symmetric key.
- *
- * The key may be given as a string of bytes, an array of bytes, a
- * byte buffer, or an array of 32-bit words.
- *
- * @param key the symmetric key to use.
- * @param mode the cipher mode to use (default: 'CBC').
- *
- * @return the cipher.
- */
-forge.aes.createEncryptionCipher = function(key, mode) {
-  return _createCipher({
-    key: key,
-    output: null,
-    decrypt: false,
-    mode: mode
-  });
-};
-
-/**
- * Deprecated. Instead, use:
- *
- * var decipher = forge.cipher.createDecipher('AES-<mode>', key);
- * decipher.start({iv: iv});
- *
- * Creates an AES cipher object to decrypt data using the given symmetric key.
- * The output will be stored in the 'output' member of the returned cipher.
- *
- * The key and iv may be given as a string of bytes, an array of bytes,
- * a byte buffer, or an array of 32-bit words.
- *
- * @param key the symmetric key to use.
- * @param iv the initialization vector to use.
- * @param output the buffer to write to, null to create one.
- * @param mode the cipher mode to use (default: 'CBC').
- *
- * @return the cipher.
- */
-forge.aes.startDecrypting = function(key, iv, output, mode) {
-  var cipher = _createCipher({
-    key: key,
-    output: output,
-    decrypt: true,
-    mode: mode
-  });
-  cipher.start(iv);
-  return cipher;
-};
-
-/**
- * Deprecated. Instead, use:
- *
- * var decipher = forge.cipher.createDecipher('AES-<mode>', key);
- *
- * Creates an AES cipher object to decrypt data using the given symmetric key.
- *
- * The key may be given as a string of bytes, an array of bytes, a
- * byte buffer, or an array of 32-bit words.
- *
- * @param key the symmetric key to use.
- * @param mode the cipher mode to use (default: 'CBC').
- *
- * @return the cipher.
- */
-forge.aes.createDecryptionCipher = function(key, mode) {
-  return _createCipher({
-    key: key,
-    output: null,
-    decrypt: true,
-    mode: mode
-  });
-};
-
-/**
- * Creates a new AES cipher algorithm object.
- *
- * @param name the name of the algorithm.
- * @param mode the mode factory function.
- *
- * @return the AES algorithm object.
- */
-forge.aes.Algorithm = function(name, mode) {
-  if(!init) {
-    initialize();
-  }
-  var self = this;
-  self.name = name;
-  self.mode = new mode({
-    blockSize: 16,
-    cipher: {
-      encrypt: function(inBlock, outBlock) {
-        return _updateBlock(self._w, inBlock, outBlock, false);
-      },
-      decrypt: function(inBlock, outBlock) {
-        return _updateBlock(self._w, inBlock, outBlock, true);
-      }
-    }
-  });
-  self._init = false;
-};
-
-/**
- * Initializes this AES algorithm by expanding its key.
- *
- * @param options the options to use.
- *          key the key to use with this algorithm.
- *          decrypt true if the algorithm should be initialized for decryption,
- *            false for encryption.
- */
-forge.aes.Algorithm.prototype.initialize = function(options) {
-  if(this._init) {
-    return;
-  }
-
-  var key = options.key;
-  var tmp;
-
-  /* Note: The key may be a string of bytes, an array of bytes, a byte
-    buffer, or an array of 32-bit integers. If the key is in bytes, then
-    it must be 16, 24, or 32 bytes in length. If it is in 32-bit
-    integers, it must be 4, 6, or 8 integers long. */
-
-  if(typeof key === 'string' &&
-    (key.length === 16 || key.length === 24 || key.length === 32)) {
-    // convert key string into byte buffer
-    key = forge.util.createBuffer(key);
-  } else if(forge.util.isArray(key) &&
-    (key.length === 16 || key.length === 24 || key.length === 32)) {
-    // convert key integer array into byte buffer
-    tmp = key;
-    key = forge.util.createBuffer();
-    for(var i = 0; i < tmp.length; ++i) {
-      key.putByte(tmp[i]);
-    }
-  }
-
-  // convert key byte buffer into 32-bit integer array
-  if(!forge.util.isArray(key)) {
-    tmp = key;
-    key = [];
-
-    // key lengths of 16, 24, 32 bytes allowed
-    var len = tmp.length();
-    if(len === 16 || len === 24 || len === 32) {
-      len = len >>> 2;
-      for(var i = 0; i < len; ++i) {
-        key.push(tmp.getInt32());
-      }
-    }
-  }
-
-  // key must be an array of 32-bit integers by now
-  if(!forge.util.isArray(key) ||
-    !(key.length === 4 || key.length === 6 || key.length === 8)) {
-    throw new Error('Invalid key parameter.');
-  }
-
-  // encryption operation is always used for these modes
-  var mode = this.mode.name;
-  var encryptOp = (['CFB', 'OFB', 'CTR', 'GCM'].indexOf(mode) !== -1);
-
-  // do key expansion
-  this._w = _expandKey(key, options.decrypt && !encryptOp);
-  this._init = true;
-};
-
-/**
- * Expands a key. Typically only used for testing.
- *
- * @param key the symmetric key to expand, as an array of 32-bit words.
- * @param decrypt true to expand for decryption, false for encryption.
- *
- * @return the expanded key.
- */
-forge.aes._expandKey = function(key, decrypt) {
-  if(!init) {
-    initialize();
-  }
-  return _expandKey(key, decrypt);
-};
-
-/**
- * Updates a single block. Typically only used for testing.
- *
- * @param w the expanded key to use.
- * @param input an array of block-size 32-bit words.
- * @param output an array of block-size 32-bit words.
- * @param decrypt true to decrypt, false to encrypt.
- */
-forge.aes._updateBlock = _updateBlock;
-
-/** Register AES algorithms **/
-
-registerAlgorithm('AES-ECB', forge.cipher.modes.ecb);
-registerAlgorithm('AES-CBC', forge.cipher.modes.cbc);
-registerAlgorithm('AES-CFB', forge.cipher.modes.cfb);
-registerAlgorithm('AES-OFB', forge.cipher.modes.ofb);
-registerAlgorithm('AES-CTR', forge.cipher.modes.ctr);
-registerAlgorithm('AES-GCM', forge.cipher.modes.gcm);
-
-function registerAlgorithm(name, mode) {
-  var factory = function() {
-    return new forge.aes.Algorithm(name, mode);
-  };
-  forge.cipher.registerAlgorithm(name, factory);
-}
-
-/** AES implementation **/
-
-var init = false; // not yet initialized
-var Nb = 4;       // number of words comprising the state (AES = 4)
-var sbox;         // non-linear substitution table used in key expansion
-var isbox;        // inversion of sbox
-var rcon;         // round constant word array
-var mix;          // mix-columns table
-var imix;         // inverse mix-columns table
-
-/**
- * Performs initialization, ie: precomputes tables to optimize for speed.
- *
- * One way to understand how AES works is to imagine that 'addition' and
- * 'multiplication' are interfaces that require certain mathematical
- * properties to hold true (ie: they are associative) but they might have
- * different implementations and produce different kinds of results ...
- * provided that their mathematical properties remain true. AES defines
- * its own methods of addition and multiplication but keeps some important
- * properties the same, ie: associativity and distributivity. The
- * explanation below tries to shed some light on how AES defines addition
- * and multiplication of bytes and 32-bit words in order to perform its
- * encryption and decryption algorithms.
- *
- * The basics:
- *
- * The AES algorithm views bytes as binary representations of polynomials
- * that have either 1 or 0 as the coefficients. It defines the addition
- * or subtraction of two bytes as the XOR operation. It also defines the
- * multiplication of two bytes as a finite field referred to as GF(2^8)
- * (Note: 'GF' means "Galois Field" which is a field that contains a finite
- * number of elements so GF(2^8) has 256 elements).
- *
- * This means that any two bytes can be represented as binary polynomials;
- * when they multiplied together and modularly reduced by an irreducible
- * polynomial of the 8th degree, the results are the field GF(2^8). The
- * specific irreducible polynomial that AES uses in hexadecimal is 0x11b.
- * This multiplication is associative with 0x01 as the identity:
- *
- * (b * 0x01 = GF(b, 0x01) = b).
- *
- * The operation GF(b, 0x02) can be performed at the byte level by left
- * shifting b once and then XOR'ing it (to perform the modular reduction)
- * with 0x11b if b is >= 128. Repeated application of the multiplication
- * of 0x02 can be used to implement the multiplication of any two bytes.
- *
- * For instance, multiplying 0x57 and 0x13, denoted as GF(0x57, 0x13), can
- * be performed by factoring 0x13 into 0x01, 0x02, and 0x10. Then these
- * factors can each be multiplied by 0x57 and then added together. To do
- * the multiplication, values for 0x57 multiplied by each of these 3 factors
- * can be precomputed and stored in a table. To add them, the values from
- * the table are XOR'd together.
- *
- * AES also defines addition and multiplication of words, that is 4-byte
- * numbers represented as polynomials of 3 degrees where the coefficients
- * are the values of the bytes.
- *
- * The word [a0, a1, a2, a3] is a polynomial a3x^3 + a2x^2 + a1x + a0.
- *
- * Addition is performed by XOR'ing like powers of x. Multiplication
- * is performed in two steps, the first is an algebriac expansion as
- * you would do normally (where addition is XOR). But the result is
- * a polynomial larger than 3 degrees and thus it cannot fit in a word. So
- * next the result is modularly reduced by an AES-specific polynomial of
- * degree 4 which will always produce a polynomial of less than 4 degrees
- * such that it will fit in a word. In AES, this polynomial is x^4 + 1.
- *
- * The modular product of two polynomials 'a' and 'b' is thus:
- *
- * d(x) = d3x^3 + d2x^2 + d1x + d0
- * with
- * d0 = GF(a0, b0) ^ GF(a3, b1) ^ GF(a2, b2) ^ GF(a1, b3)
- * d1 = GF(a1, b0) ^ GF(a0, b1) ^ GF(a3, b2) ^ GF(a2, b3)
- * d2 = GF(a2, b0) ^ GF(a1, b1) ^ GF(a0, b2) ^ GF(a3, b3)
- * d3 = GF(a3, b0) ^ GF(a2, b1) ^ GF(a1, b2) ^ GF(a0, b3)
- *
- * As a matrix:
- *
- * [d0] = [a0 a3 a2 a1][b0]
- * [d1]   [a1 a0 a3 a2][b1]
- * [d2]   [a2 a1 a0 a3][b2]
- * [d3]   [a3 a2 a1 a0][b3]
- *
- * Special polynomials defined by AES (0x02 == {02}):
- * a(x)    = {03}x^3 + {01}x^2 + {01}x + {02}
- * a^-1(x) = {0b}x^3 + {0d}x^2 + {09}x + {0e}.
- *
- * These polynomials are used in the MixColumns() and InverseMixColumns()
- * operations, respectively, to cause each element in the state to affect
- * the output (referred to as diffusing).
- *
- * RotWord() uses: a0 = a1 = a2 = {00} and a3 = {01}, which is the
- * polynomial x3.
- *
- * The ShiftRows() method modifies the last 3 rows in the state (where
- * the state is 4 words with 4 bytes per word) by shifting bytes cyclically.
- * The 1st byte in the second row is moved to the end of the row. The 1st
- * and 2nd bytes in the third row are moved to the end of the row. The 1st,
- * 2nd, and 3rd bytes are moved in the fourth row.
- *
- * More details on how AES arithmetic works:
- *
- * In the polynomial representation of binary numbers, XOR performs addition
- * and subtraction and multiplication in GF(2^8) denoted as GF(a, b)
- * corresponds with the multiplication of polynomials modulo an irreducible
- * polynomial of degree 8. In other words, for AES, GF(a, b) will multiply
- * polynomial 'a' with polynomial 'b' and then do a modular reduction by
- * an AES-specific irreducible polynomial of degree 8.
- *
- * A polynomial is irreducible if its only divisors are one and itself. For
- * the AES algorithm, this irreducible polynomial is:
- *
- * m(x) = x^8 + x^4 + x^3 + x + 1,
- *
- * or {01}{1b} in hexadecimal notation, where each coefficient is a bit:
- * 100011011 = 283 = 0x11b.
- *
- * For example, GF(0x57, 0x83) = 0xc1 because
- *
- * 0x57 = 87  = 01010111 = x^6 + x^4 + x^2 + x + 1
- * 0x85 = 131 = 10000101 = x^7 + x + 1
- *
- * (x^6 + x^4 + x^2 + x + 1) * (x^7 + x + 1)
- * =  x^13 + x^11 + x^9 + x^8 + x^7 +
- *    x^7 + x^5 + x^3 + x^2 + x +
- *    x^6 + x^4 + x^2 + x + 1
- * =  x^13 + x^11 + x^9 + x^8 + x^6 + x^5 + x^4 + x^3 + 1 = y
- *    y modulo (x^8 + x^4 + x^3 + x + 1)
- * =  x^7 + x^6 + 1.
- *
- * The modular reduction by m(x) guarantees the result will be a binary
- * polynomial of less than degree 8, so that it can fit in a byte.
- *
- * The operation to multiply a binary polynomial b with x (the polynomial
- * x in binary representation is 00000010) is:
- *
- * b_7x^8 + b_6x^7 + b_5x^6 + b_4x^5 + b_3x^4 + b_2x^3 + b_1x^2 + b_0x^1
- *
- * To get GF(b, x) we must reduce that by m(x). If b_7 is 0 (that is the
- * most significant bit is 0 in b) then the result is already reduced. If
- * it is 1, then we can reduce it by subtracting m(x) via an XOR.
- *
- * It follows that multiplication by x (00000010 or 0x02) can be implemented
- * by performing a left shift followed by a conditional bitwise XOR with
- * 0x1b. This operation on bytes is denoted by xtime(). Multiplication by
- * higher powers of x can be implemented by repeated application of xtime().
- *
- * By adding intermediate results, multiplication by any constant can be
- * implemented. For instance:
- *
- * GF(0x57, 0x13) = 0xfe because:
- *
- * xtime(b) = (b & 128) ? (b << 1 ^ 0x11b) : (b << 1)
- *
- * Note: We XOR with 0x11b instead of 0x1b because in javascript our
- * datatype for b can be larger than 1 byte, so a left shift will not
- * automatically eliminate bits that overflow a byte ... by XOR'ing the
- * overflow bit with 1 (the extra one from 0x11b) we zero it out.
- *
- * GF(0x57, 0x02) = xtime(0x57) = 0xae
- * GF(0x57, 0x04) = xtime(0xae) = 0x47
- * GF(0x57, 0x08) = xtime(0x47) = 0x8e
- * GF(0x57, 0x10) = xtime(0x8e) = 0x07
- *
- * GF(0x57, 0x13) = GF(0x57, (0x01 ^ 0x02 ^ 0x10))
- *
- * And by the distributive property (since XOR is addition and GF() is
- * multiplication):
- *
- * = GF(0x57, 0x01) ^ GF(0x57, 0x02) ^ GF(0x57, 0x10)
- * = 0x57 ^ 0xae ^ 0x07
- * = 0xfe.
- */
-function initialize() {
-  init = true;
-
-  /* Populate the Rcon table. These are the values given by
-    [x^(i-1),{00},{00},{00}] where x^(i-1) are powers of x (and x = 0x02)
-    in the field of GF(2^8), where i starts at 1.
-
-    rcon[0] = [0x00, 0x00, 0x00, 0x00]
-    rcon[1] = [0x01, 0x00, 0x00, 0x00] 2^(1-1) = 2^0 = 1
-    rcon[2] = [0x02, 0x00, 0x00, 0x00] 2^(2-1) = 2^1 = 2
-    ...
-    rcon[9]  = [0x1B, 0x00, 0x00, 0x00] 2^(9-1)  = 2^8 = 0x1B
-    rcon[10] = [0x36, 0x00, 0x00, 0x00] 2^(10-1) = 2^9 = 0x36
-
-    We only store the first byte because it is the only one used.
-  */
-  rcon = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36];
-
-  // compute xtime table which maps i onto GF(i, 0x02)
-  var xtime = new Array(256);
-  for(var i = 0; i < 128; ++i) {
-    xtime[i] = i << 1;
-    xtime[i + 128] = (i + 128) << 1 ^ 0x11B;
-  }
-
-  // compute all other tables
-  sbox = new Array(256);
-  isbox = new Array(256);
-  mix = new Array(4);
-  imix = new Array(4);
-  for(var i = 0; i < 4; ++i) {
-    mix[i] = new Array(256);
-    imix[i] = new Array(256);
-  }
-  var e = 0, ei = 0, e2, e4, e8, sx, sx2, me, ime;
-  for(var i = 0; i < 256; ++i) {
-    /* We need to generate the SubBytes() sbox and isbox tables so that
-      we can perform byte substitutions. This requires us to traverse
-      all of the elements in GF, find their multiplicative inverses,
-      and apply to each the following affine transformation:
-
-      bi' = bi ^ b(i + 4) mod 8 ^ b(i + 5) mod 8 ^ b(i + 6) mod 8 ^
-            b(i + 7) mod 8 ^ ci
-      for 0 <= i < 8, where bi is the ith bit of the byte, and ci is the
-      ith bit of a byte c with the value {63} or {01100011}.
-
-      It is possible to traverse every possible value in a Galois field
-      using what is referred to as a 'generator'. There are many
-      generators (128 out of 256): 3,5,6,9,11,82 to name a few. To fully
-      traverse GF we iterate 255 times, multiplying by our generator
-      each time.
-
-      On each iteration we can determine the multiplicative inverse for
-      the current element.
-
-      Suppose there is an element in GF 'e'. For a given generator 'g',
-      e = g^x. The multiplicative inverse of e is g^(255 - x). It turns
-      out that if use the inverse of a generator as another generator
-      it will produce all of the corresponding multiplicative inverses
-      at the same time. For this reason, we choose 5 as our inverse
-      generator because it only requires 2 multiplies and 1 add and its
-      inverse, 82, requires relatively few operations as well.
-
-      In order to apply the affine transformation, the multiplicative
-      inverse 'ei' of 'e' can be repeatedly XOR'd (4 times) with a
-      bit-cycling of 'ei'. To do this 'ei' is first stored in 's' and
-      'x'. Then 's' is left shifted and the high bit of 's' is made the
-      low bit. The resulting value is stored in 's'. Then 'x' is XOR'd
-      with 's' and stored in 'x'. On each subsequent iteration the same
-      operation is performed. When 4 iterations are complete, 'x' is
-      XOR'd with 'c' (0x63) and the transformed value is stored in 'x'.
-      For example:
-
-      s = 01000001
-      x = 01000001
-
-      iteration 1: s = 10000010, x ^= s
-      iteration 2: s = 00000101, x ^= s
-      iteration 3: s = 00001010, x ^= s
-      iteration 4: s = 00010100, x ^= s
-      x ^= 0x63
-
-      This can be done with a loop where s = (s << 1) | (s >> 7). However,
-      it can also be done by using a single 16-bit (in this case 32-bit)
-      number 'sx'. Since XOR is an associative operation, we can set 'sx'
-      to 'ei' and then XOR it with 'sx' left-shifted 1,2,3, and 4 times.
-      The most significant bits will flow into the high 8 bit positions
-      and be correctly XOR'd with one another. All that remains will be
-      to cycle the high 8 bits by XOR'ing them all with the lower 8 bits
-      afterwards.
-
-      At the same time we're populating sbox and isbox we can precompute
-      the multiplication we'll need to do to do MixColumns() later.
-    */
-
-    // apply affine transformation
-    sx = ei ^ (ei << 1) ^ (ei << 2) ^ (ei << 3) ^ (ei << 4);
-    sx = (sx >> 8) ^ (sx & 255) ^ 0x63;
-
-    // update tables
-    sbox[e] = sx;
-    isbox[sx] = e;
-
-    /* Mixing columns is done using matrix multiplication. The columns
-      that are to be mixed are each a single word in the current state.
-      The state has Nb columns (4 columns). Therefore each column is a
-      4 byte word. So to mix the columns in a single column 'c' where
-      its rows are r0, r1, r2, and r3, we use the following matrix
-      multiplication:
-
-      [2 3 1 1]*[r0,c]=[r'0,c]
-      [1 2 3 1] [r1,c] [r'1,c]
-      [1 1 2 3] [r2,c] [r'2,c]
-      [3 1 1 2] [r3,c] [r'3,c]
-
-      r0, r1, r2, and r3 are each 1 byte of one of the words in the
-      state (a column). To do matrix multiplication for each mixed
-      column c' we multiply the corresponding row from the left matrix
-      with the corresponding column from the right matrix. In total, we
-      get 4 equations:
-
-      r0,c' = 2*r0,c + 3*r1,c + 1*r2,c + 1*r3,c
-      r1,c' = 1*r0,c + 2*r1,c + 3*r2,c + 1*r3,c
-      r2,c' = 1*r0,c + 1*r1,c + 2*r2,c + 3*r3,c
-      r3,c' = 3*r0,c + 1*r1,c + 1*r2,c + 2*r3,c
-
-      As usual, the multiplication is as previously defined and the
-      addition is XOR. In order to optimize mixing columns we can store
-      the multiplication results in tables. If you think of the whole
-      column as a word (it might help to visualize by mentally rotating
-      the equations above by counterclockwise 90 degrees) then you can
-      see that it would be useful to map the multiplications performed on
-      each byte (r0, r1, r2, r3) onto a word as well. For instance, we
-      could map 2*r0,1*r0,1*r0,3*r0 onto a word by storing 2*r0 in the
-      highest 8 bits and 3*r0 in the lowest 8 bits (with the other two
-      respectively in the middle). This means that a table can be
-      constructed that uses r0 as an index to the word. We can do the
-      same with r1, r2, and r3, creating a total of 4 tables.
-
-      To construct a full c', we can just look up each byte of c in
-      their respective tables and XOR the results together.
-
-      Also, to build each table we only have to calculate the word
-      for 2,1,1,3 for every byte ... which we can do on each iteration
-      of this loop since we will iterate over every byte. After we have
-      calculated 2,1,1,3 we can get the results for the other tables
-      by cycling the byte at the end to the beginning. For instance
-      we can take the result of table 2,1,1,3 and produce table 3,2,1,1
-      by moving the right most byte to the left most position just like
-      how you can imagine the 3 moved out of 2,1,1,3 and to the front
-      to produce 3,2,1,1.
-
-      There is another optimization in that the same multiples of
-      the current element we need in order to advance our generator
-      to the next iteration can be reused in performing the 2,1,1,3
-      calculation. We also calculate the inverse mix column tables,
-      with e,9,d,b being the inverse of 2,1,1,3.
-
-      When we're done, and we need to actually mix columns, the first
-      byte of each state word should be put through mix[0] (2,1,1,3),
-      the second through mix[1] (3,2,1,1) and so forth. Then they should
-      be XOR'd together to produce the fully mixed column.
-    */
-
-    // calculate mix and imix table values
-    sx2 = xtime[sx];
-    e2 = xtime[e];
-    e4 = xtime[e2];
-    e8 = xtime[e4];
-    me =
-      (sx2 << 24) ^  // 2
-      (sx << 16) ^   // 1
-      (sx << 8) ^    // 1
-      (sx ^ sx2);    // 3
-    ime =
-      (e2 ^ e4 ^ e8) << 24 ^  // E (14)
-      (e ^ e8) << 16 ^        // 9
-      (e ^ e4 ^ e8) << 8 ^    // D (13)
-      (e ^ e2 ^ e8);          // B (11)
-    // produce each of the mix tables by rotating the 2,1,1,3 value
-    for(var n = 0; n < 4; ++n) {
-      mix[n][e] = me;
-      imix[n][sx] = ime;
-      // cycle the right most byte to the left most position
-      // ie: 2,1,1,3 becomes 3,2,1,1
-      me = me << 24 | me >>> 8;
-      ime = ime << 24 | ime >>> 8;
-    }
-
-    // get next element and inverse
-    if(e === 0) {
-      // 1 is the inverse of 1
-      e = ei = 1;
-    } else {
-      // e = 2e + 2*2*2*(10e)) = multiply e by 82 (chosen generator)
-      // ei = ei + 2*2*ei = multiply ei by 5 (inverse generator)
-      e = e2 ^ xtime[xtime[xtime[e2 ^ e8]]];
-      ei ^= xtime[xtime[ei]];
-    }
-  }
-}
-
-/**
- * Generates a key schedule using the AES key expansion algorithm.
- *
- * The AES algorithm takes the Cipher Key, K, and performs a Key Expansion
- * routine to generate a key schedule. The Key Expansion generates a total
- * of Nb*(Nr + 1) words: the algorithm requires an initial set of Nb words,
- * and each of the Nr rounds requires Nb words of key data. The resulting
- * key schedule consists of a linear array of 4-byte words, denoted [wi ],
- * with i in the range 0 <= i < Nb(Nr + 1).
- *
- * KeyExpansion(byte key[4*Nk], word w[Nb*(Nr+1)], Nk)
- * AES-128 (Nb=4, Nk=4, Nr=10)
- * AES-192 (Nb=4, Nk=6, Nr=12)
- * AES-256 (Nb=4, Nk=8, Nr=14)
- * Note: Nr=Nk+6.
- *
- * Nb is the number of columns (32-bit words) comprising the State (or
- * number of bytes in a block). For AES, Nb=4.
- *
- * @param key the key to schedule (as an array of 32-bit words).
- * @param decrypt true to modify the key schedule to decrypt, false not to.
- *
- * @return the generated key schedule.
- */
-function _expandKey(key, decrypt) {
-  // copy the key's words to initialize the key schedule
-  var w = key.slice(0);
-
-  /* RotWord() will rotate a word, moving the first byte to the last
-    byte's position (shifting the other bytes left).
-
-    We will be getting the value of Rcon at i / Nk. 'i' will iterate
-    from Nk to (Nb * Nr+1). Nk = 4 (4 byte key), Nb = 4 (4 words in
-    a block), Nr = Nk + 6 (10). Therefore 'i' will iterate from
-    4 to 44 (exclusive). Each time we iterate 4 times, i / Nk will
-    increase by 1. We use a counter iNk to keep track of this.
-   */
-
-  // go through the rounds expanding the key
-  var temp, iNk = 1;
-  var Nk = w.length;
-  var Nr1 = Nk + 6 + 1;
-  var end = Nb * Nr1;
-  for(var i = Nk; i < end; ++i) {
-    temp = w[i - 1];
-    if(i % Nk === 0) {
-      // temp = SubWord(RotWord(temp)) ^ Rcon[i / Nk]
-      temp =
-        sbox[temp >>> 16 & 255] << 24 ^
-        sbox[temp >>> 8 & 255] << 16 ^
-        sbox[temp & 255] << 8 ^
-        sbox[temp >>> 24] ^ (rcon[iNk] << 24);
-      iNk++;
-    } else if(Nk > 6 && (i % Nk === 4)) {
-      // temp = SubWord(temp)
-      temp =
-        sbox[temp >>> 24] << 24 ^
-        sbox[temp >>> 16 & 255] << 16 ^
-        sbox[temp >>> 8 & 255] << 8 ^
-        sbox[temp & 255];
-    }
-    w[i] = w[i - Nk] ^ temp;
-  }
-
-  /* When we are updating a cipher block we always use the code path for
-     encryption whether we are decrypting or not (to shorten code and
-     simplify the generation of look up tables). However, because there
-     are differences in the decryption algorithm, other than just swapping
-     in different look up tables, we must transform our key schedule to
-     account for these changes:
-
-     1. The decryption algorithm gets its key rounds in reverse order.
-     2. The decryption algorithm adds the round key before mixing columns
-       instead of afterwards.
-
-     We don't need to modify our key schedule to handle the first case,
-     we can just traverse the key schedule in reverse order when decrypting.
-
-     The second case requires a little work.
-
-     The tables we built for performing rounds will take an input and then
-     perform SubBytes() and MixColumns() or, for the decrypt version,
-     InvSubBytes() and InvMixColumns(). But the decrypt algorithm requires
-     us to AddRoundKey() before InvMixColumns(). This means we'll need to
-     apply some transformations to the round key to inverse-mix its columns
-     so they'll be correct for moving AddRoundKey() to after the state has
-     had its columns inverse-mixed.
-
-     To inverse-mix the columns of the state when we're decrypting we use a
-     lookup table that will apply InvSubBytes() and InvMixColumns() at the
-     same time. However, the round key's bytes are not inverse-substituted
-     in the decryption algorithm. To get around this problem, we can first
-     substitute the bytes in the round key so that when we apply the
-     transformation via the InvSubBytes()+InvMixColumns() table, it will
-     undo our substitution leaving us with the original value that we
-     want -- and then inverse-mix that value.
-
-     This change will correctly alter our key schedule so that we can XOR
-     each round key with our already transformed decryption state. This
-     allows us to use the same code path as the encryption algorithm.
-
-     We make one more change to the decryption key. Since the decryption
-     algorithm runs in reverse from the encryption algorithm, we reverse
-     the order of the round keys to avoid having to iterate over the key
-     schedule backwards when running the encryption algorithm later in
-     decryption mode. In addition to reversing the order of the round keys,
-     we also swap each round key's 2nd and 4th rows. See the comments
-     section where rounds are performed for more details about why this is
-     done. These changes are done inline with the other substitution
-     described above.
-  */
-  if(decrypt) {
-    var tmp;
-    var m0 = imix[0];
-    var m1 = imix[1];
-    var m2 = imix[2];
-    var m3 = imix[3];
-    var wnew = w.slice(0);
-    end = w.length;
-    for(var i = 0, wi = end - Nb; i < end; i += Nb, wi -= Nb) {
-      // do not sub the first or last round key (round keys are Nb
-      // words) as no column mixing is performed before they are added,
-      // but do change the key order
-      if(i === 0 || i === (end - Nb)) {
-        wnew[i] = w[wi];
-        wnew[i + 1] = w[wi + 3];
-        wnew[i + 2] = w[wi + 2];
-        wnew[i + 3] = w[wi + 1];
-      } else {
-        // substitute each round key byte because the inverse-mix
-        // table will inverse-substitute it (effectively cancel the
-        // substitution because round key bytes aren't sub'd in
-        // decryption mode) and swap indexes 3 and 1
-        for(var n = 0; n < Nb; ++n) {
-          tmp = w[wi + n];
-          wnew[i + (3&-n)] =
-            m0[sbox[tmp >>> 24]] ^
-            m1[sbox[tmp >>> 16 & 255]] ^
-            m2[sbox[tmp >>> 8 & 255]] ^
-            m3[sbox[tmp & 255]];
-        }
-      }
-    }
-    w = wnew;
-  }
-
-  return w;
-}
-
-/**
- * Updates a single block (16 bytes) using AES. The update will either
- * encrypt or decrypt the block.
- *
- * @param w the key schedule.
- * @param input the input block (an array of 32-bit words).
- * @param output the updated output block.
- * @param decrypt true to decrypt the block, false to encrypt it.
- */
-function _updateBlock(w, input, output, decrypt) {
-  /*
-  Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
-  begin
-    byte state[4,Nb]
-    state = in
-    AddRoundKey(state, w[0, Nb-1])
-    for round = 1 step 1 to Nr-1
-      SubBytes(state)
-      ShiftRows(state)
-      MixColumns(state)
-      AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
-    end for
-    SubBytes(state)
-    ShiftRows(state)
-    AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
-    out = state
-  end
-
-  InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
-  begin
-    byte state[4,Nb]
-    state = in
-    AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
-    for round = Nr-1 step -1 downto 1
-      InvShiftRows(state)
-      InvSubBytes(state)
-      AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
-      InvMixColumns(state)
-    end for
-    InvShiftRows(state)
-    InvSubBytes(state)
-    AddRoundKey(state, w[0, Nb-1])
-    out = state
-  end
-  */
-
-  // Encrypt: AddRoundKey(state, w[0, Nb-1])
-  // Decrypt: AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
-  var Nr = w.length / 4 - 1;
-  var m0, m1, m2, m3, sub;
-  if(decrypt) {
-    m0 = imix[0];
-    m1 = imix[1];
-    m2 = imix[2];
-    m3 = imix[3];
-    sub = isbox;
-  } else {
-    m0 = mix[0];
-    m1 = mix[1];
-    m2 = mix[2];
-    m3 = mix[3];
-    sub = sbox;
-  }
-  var a, b, c, d, a2, b2, c2;
-  a = input[0] ^ w[0];
-  b = input[decrypt ? 3 : 1] ^ w[1];
-  c = input[2] ^ w[2];
-  d = input[decrypt ? 1 : 3] ^ w[3];
-  var i = 3;
-
-  /* In order to share code we follow the encryption algorithm when both
-    encrypting and decrypting. To account for the changes required in the
-    decryption algorithm, we use different lookup tables when decrypting
-    and use a modified key schedule to account for the difference in the
-    order of transformations applied when performing rounds. We also get
-    key rounds in reverse order (relative to encryption). */
-  for(var round = 1; round < Nr; ++round) {
-    /* As described above, we'll be using table lookups to perform the
-      column mixing. Each column is stored as a word in the state (the
-      array 'input' has one column as a word at each index). In order to
-      mix a column, we perform these transformations on each row in c,
-      which is 1 byte in each word. The new column for c0 is c'0:
-
-               m0      m1      m2      m3
-      r0,c'0 = 2*r0,c0 + 3*r1,c0 + 1*r2,c0 + 1*r3,c0
-      r1,c'0 = 1*r0,c0 + 2*r1,c0 + 3*r2,c0 + 1*r3,c0
-      r2,c'0 = 1*r0,c0 + 1*r1,c0 + 2*r2,c0 + 3*r3,c0
-      r3,c'0 = 3*r0,c0 + 1*r1,c0 + 1*r2,c0 + 2*r3,c0
-
-      So using mix tables where c0 is a word with r0 being its upper
-      8 bits and r3 being its lower 8 bits:
-
-      m0[c0 >> 24] will yield this word: [2*r0,1*r0,1*r0,3*r0]
-      ...
-      m3[c0 & 255] will yield this word: [1*r3,1*r3,3*r3,2*r3]
-
-      Therefore to mix the columns in each word in the state we
-      do the following (& 255 omitted for brevity):
-      c'0,r0 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]
-      c'0,r1 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]
-      c'0,r2 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]
-      c'0,r3 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]
-
-      However, before mixing, the algorithm requires us to perform
-      ShiftRows(). The ShiftRows() transformation cyclically shifts the
-      last 3 rows of the state over different offsets. The first row
-      (r = 0) is not shifted.
-
-      s'_r,c = s_r,(c + shift(r, Nb) mod Nb
-      for 0 < r < 4 and 0 <= c < Nb and
-      shift(1, 4) = 1
-      shift(2, 4) = 2
-      shift(3, 4) = 3.
-
-      This causes the first byte in r = 1 to be moved to the end of
-      the row, the first 2 bytes in r = 2 to be moved to the end of
-      the row, the first 3 bytes in r = 3 to be moved to the end of
-      the row:
-
-      r1: [c0 c1 c2 c3] => [c1 c2 c3 c0]
-      r2: [c0 c1 c2 c3]    [c2 c3 c0 c1]
-      r3: [c0 c1 c2 c3]    [c3 c0 c1 c2]
-
-      We can make these substitutions inline with our column mixing to
-      generate an updated set of equations to produce each word in the
-      state (note the columns have changed positions):
-
-      c0 c1 c2 c3 => c0 c1 c2 c3
-      c0 c1 c2 c3    c1 c2 c3 c0  (cycled 1 byte)
-      c0 c1 c2 c3    c2 c3 c0 c1  (cycled 2 bytes)
-      c0 c1 c2 c3    c3 c0 c1 c2  (cycled 3 bytes)
-
-      Therefore:
-
-      c'0 = 2*r0,c0 + 3*r1,c1 + 1*r2,c2 + 1*r3,c3
-      c'0 = 1*r0,c0 + 2*r1,c1 + 3*r2,c2 + 1*r3,c3
-      c'0 = 1*r0,c0 + 1*r1,c1 + 2*r2,c2 + 3*r3,c3
-      c'0 = 3*r0,c0 + 1*r1,c1 + 1*r2,c2 + 2*r3,c3
-
-      c'1 = 2*r0,c1 + 3*r1,c2 + 1*r2,c3 + 1*r3,c0
-      c'1 = 1*r0,c1 + 2*r1,c2 + 3*r2,c3 + 1*r3,c0
-      c'1 = 1*r0,c1 + 1*r1,c2 + 2*r2,c3 + 3*r3,c0
-      c'1 = 3*r0,c1 + 1*r1,c2 + 1*r2,c3 + 2*r3,c0
-
-      ... and so forth for c'2 and c'3. The important distinction is
-      that the columns are cycling, with c0 being used with the m0
-      map when calculating c0, but c1 being used with the m0 map when
-      calculating c1 ... and so forth.
-
-      When performing the inverse we transform the mirror image and
-      skip the bottom row, instead of the top one, and move upwards:
-
-      c3 c2 c1 c0 => c0 c3 c2 c1  (cycled 3 bytes) *same as encryption
-      c3 c2 c1 c0    c1 c0 c3 c2  (cycled 2 bytes)
-      c3 c2 c1 c0    c2 c1 c0 c3  (cycled 1 byte)  *same as encryption
-      c3 c2 c1 c0    c3 c2 c1 c0
-
-      If you compare the resulting matrices for ShiftRows()+MixColumns()
-      and for InvShiftRows()+InvMixColumns() the 2nd and 4th columns are
-      different (in encrypt mode vs. decrypt mode). So in order to use
-      the same code to handle both encryption and decryption, we will
-      need to do some mapping.
-
-      If in encryption mode we let a=c0, b=c1, c=c2, d=c3, and r<N> be
-      a row number in the state, then the resulting matrix in encryption
-      mode for applying the above transformations would be:
-
-      r1: a b c d
-      r2: b c d a
-      r3: c d a b
-      r4: d a b c
-
-      If we did the same in decryption mode we would get:
-
-      r1: a d c b
-      r2: b a d c
-      r3: c b a d
-      r4: d c b a
-
-      If instead we swap d and b (set b=c3 and d=c1), then we get:
-
-      r1: a b c d
-      r2: d a b c
-      r3: c d a b
-      r4: b c d a
-
-      Now the 1st and 3rd rows are the same as the encryption matrix. All
-      we need to do then to make the mapping exactly the same is to swap
-      the 2nd and 4th rows when in decryption mode. To do this without
-      having to do it on each iteration, we swapped the 2nd and 4th rows
-      in the decryption key schedule. We also have to do the swap above
-      when we first pull in the input and when we set the final output. */
-    a2 =
-      m0[a >>> 24] ^
-      m1[b >>> 16 & 255] ^
-      m2[c >>> 8 & 255] ^
-      m3[d & 255] ^ w[++i];
-    b2 =
-      m0[b >>> 24] ^
-      m1[c >>> 16 & 255] ^
-      m2[d >>> 8 & 255] ^
-      m3[a & 255] ^ w[++i];
-    c2 =
-      m0[c >>> 24] ^
-      m1[d >>> 16 & 255] ^
-      m2[a >>> 8 & 255] ^
-      m3[b & 255] ^ w[++i];
-    d =
-      m0[d >>> 24] ^
-      m1[a >>> 16 & 255] ^
-      m2[b >>> 8 & 255] ^
-      m3[c & 255] ^ w[++i];
-    a = a2;
-    b = b2;
-    c = c2;
-  }
-
-  /*
-    Encrypt:
-    SubBytes(state)
-    ShiftRows(state)
-    AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
-
-    Decrypt:
-    InvShiftRows(state)
-    InvSubBytes(state)
-    AddRoundKey(state, w[0, Nb-1])
-   */
-  // Note: rows are shifted inline
-  output[0] =
-    (sub[a >>> 24] << 24) ^
-    (sub[b >>> 16 & 255] << 16) ^
-    (sub[c >>> 8 & 255] << 8) ^
-    (sub[d & 255]) ^ w[++i];
-  output[decrypt ? 3 : 1] =
-    (sub[b >>> 24] << 24) ^
-    (sub[c >>> 16 & 255] << 16) ^
-    (sub[d >>> 8 & 255] << 8) ^
-    (sub[a & 255]) ^ w[++i];
-  output[2] =
-    (sub[c >>> 24] << 24) ^
-    (sub[d >>> 16 & 255] << 16) ^
-    (sub[a >>> 8 & 255] << 8) ^
-    (sub[b & 255]) ^ w[++i];
-  output[decrypt ? 1 : 3] =
-    (sub[d >>> 24] << 24) ^
-    (sub[a >>> 16 & 255] << 16) ^
-    (sub[b >>> 8 & 255] << 8) ^
-    (sub[c & 255]) ^ w[++i];
-}
-
-/**
- * Deprecated. Instead, use:
- *
- * forge.cipher.createCipher('AES-<mode>', key);
- * forge.cipher.createDecipher('AES-<mode>', key);
- *
- * Creates a deprecated AES cipher object. This object's mode will default to
- * CBC (cipher-block-chaining).
- *
- * The key and iv may be given as a string of bytes, an array of bytes, a
- * byte buffer, or an array of 32-bit words.
- *
- * @param options the options to use.
- *          key the symmetric key to use.
- *          output the buffer to write to.
- *          decrypt true for decryption, false for encryption.
- *          mode the cipher mode to use (default: 'CBC').
- *
- * @return the cipher.
- */
-function _createCipher(options) {
-  options = options || {};
-  var mode = (options.mode || 'CBC').toUpperCase();
-  var algorithm = 'AES-' + mode;
-
-  var cipher;
-  if(options.decrypt) {
-    cipher = forge.cipher.createDecipher(algorithm, options.key);
-  } else {
-    cipher = forge.cipher.createCipher(algorithm, options.key);
-  }
-
-  // backwards compatible start API
-  var start = cipher.start;
-  cipher.start = function(iv, options) {
-    // backwards compatibility: support second arg as output buffer
-    var output = null;
-    if(options instanceof forge.util.ByteBuffer) {
-      output = options;
-      options = {};
-    }
-    options = options || {};
-    options.output = output;
-    options.iv = iv;
-    start.call(cipher, options);
-  };
-
-  return cipher;
-}
diff --git a/templetes/node_modules/node-forge/lib/aesCipherSuites.js b/templetes/node_modules/node-forge/lib/aesCipherSuites.js
deleted file mode 100644
index fed60f36..00000000
--- a/templetes/node_modules/node-forge/lib/aesCipherSuites.js
+++ /dev/null
@@ -1,282 +0,0 @@
-/**
- * A Javascript implementation of AES Cipher Suites for TLS.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2009-2015 Digital Bazaar, Inc.
- *
- */
-var forge = require('./forge');
-require('./aes');
-require('./tls');
-
-var tls = module.exports = forge.tls;
-
-/**
- * Supported cipher suites.
- */
-tls.CipherSuites['TLS_RSA_WITH_AES_128_CBC_SHA'] = {
-  id: [0x00, 0x2f],
-  name: 'TLS_RSA_WITH_AES_128_CBC_SHA',
-  initSecurityParameters: function(sp) {
-    sp.bulk_cipher_algorithm = tls.BulkCipherAlgorithm.aes;
-    sp.cipher_type = tls.CipherType.block;
-    sp.enc_key_length = 16;
-    sp.block_length = 16;
-    sp.fixed_iv_length = 16;
-    sp.record_iv_length = 16;
-    sp.mac_algorithm = tls.MACAlgorithm.hmac_sha1;
-    sp.mac_length = 20;
-    sp.mac_key_length = 20;
-  },
-  initConnectionState: initConnectionState
-};
-tls.CipherSuites['TLS_RSA_WITH_AES_256_CBC_SHA'] = {
-  id: [0x00, 0x35],
-  name: 'TLS_RSA_WITH_AES_256_CBC_SHA',
-  initSecurityParameters: function(sp) {
-    sp.bulk_cipher_algorithm = tls.BulkCipherAlgorithm.aes;
-    sp.cipher_type = tls.CipherType.block;
-    sp.enc_key_length = 32;
-    sp.block_length = 16;
-    sp.fixed_iv_length = 16;
-    sp.record_iv_length = 16;
-    sp.mac_algorithm = tls.MACAlgorithm.hmac_sha1;
-    sp.mac_length = 20;
-    sp.mac_key_length = 20;
-  },
-  initConnectionState: initConnectionState
-};
-
-function initConnectionState(state, c, sp) {
-  var client = (c.entity === forge.tls.ConnectionEnd.client);
-
-  // cipher setup
-  state.read.cipherState = {
-    init: false,
-    cipher: forge.cipher.createDecipher('AES-CBC', client ?
-      sp.keys.server_write_key : sp.keys.client_write_key),
-    iv: client ? sp.keys.server_write_IV : sp.keys.client_write_IV
-  };
-  state.write.cipherState = {
-    init: false,
-    cipher: forge.cipher.createCipher('AES-CBC', client ?
-      sp.keys.client_write_key : sp.keys.server_write_key),
-    iv: client ? sp.keys.client_write_IV : sp.keys.server_write_IV
-  };
-  state.read.cipherFunction = decrypt_aes_cbc_sha1;
-  state.write.cipherFunction = encrypt_aes_cbc_sha1;
-
-  // MAC setup
-  state.read.macLength = state.write.macLength = sp.mac_length;
-  state.read.macFunction = state.write.macFunction = tls.hmac_sha1;
-}
-
-/**
- * Encrypts the TLSCompressed record into a TLSCipherText record using AES
- * in CBC mode.
- *
- * @param record the TLSCompressed record to encrypt.
- * @param s the ConnectionState to use.
- *
- * @return true on success, false on failure.
- */
-function encrypt_aes_cbc_sha1(record, s) {
-  var rval = false;
-
-  // append MAC to fragment, update sequence number
-  var mac = s.macFunction(s.macKey, s.sequenceNumber, record);
-  record.fragment.putBytes(mac);
-  s.updateSequenceNumber();
-
-  // TLS 1.1+ use an explicit IV every time to protect against CBC attacks
-  var iv;
-  if(record.version.minor === tls.Versions.TLS_1_0.minor) {
-    // use the pre-generated IV when initializing for TLS 1.0, otherwise use
-    // the residue from the previous encryption
-    iv = s.cipherState.init ? null : s.cipherState.iv;
-  } else {
-    iv = forge.random.getBytesSync(16);
-  }
-
-  s.cipherState.init = true;
-
-  // start cipher
-  var cipher = s.cipherState.cipher;
-  cipher.start({iv: iv});
-
-  // TLS 1.1+ write IV into output
-  if(record.version.minor >= tls.Versions.TLS_1_1.minor) {
-    cipher.output.putBytes(iv);
-  }
-
-  // do encryption (default padding is appropriate)
-  cipher.update(record.fragment);
-  if(cipher.finish(encrypt_aes_cbc_sha1_padding)) {
-    // set record fragment to encrypted output
-    record.fragment = cipher.output;
-    record.length = record.fragment.length();
-    rval = true;
-  }
-
-  return rval;
-}
-
-/**
- * Handles padding for aes_cbc_sha1 in encrypt mode.
- *
- * @param blockSize the block size.
- * @param input the input buffer.
- * @param decrypt true in decrypt mode, false in encrypt mode.
- *
- * @return true on success, false on failure.
- */
-function encrypt_aes_cbc_sha1_padding(blockSize, input, decrypt) {
-  /* The encrypted data length (TLSCiphertext.length) is one more than the sum
-   of SecurityParameters.block_length, TLSCompressed.length,
-   SecurityParameters.mac_length, and padding_length.
-
-   The padding may be any length up to 255 bytes long, as long as it results in
-   the TLSCiphertext.length being an integral multiple of the block length.
-   Lengths longer than necessary might be desirable to frustrate attacks on a
-   protocol based on analysis of the lengths of exchanged messages. Each uint8
-   in the padding data vector must be filled with the padding length value.
-
-   The padding length should be such that the total size of the
-   GenericBlockCipher structure is a multiple of the cipher's block length.
-   Legal values range from zero to 255, inclusive. This length specifies the
-   length of the padding field exclusive of the padding_length field itself.
-
-   This is slightly different from PKCS#7 because the padding value is 1
-   less than the actual number of padding bytes if you include the
-   padding_length uint8 itself as a padding byte. */
-  if(!decrypt) {
-    // get the number of padding bytes required to reach the blockSize and
-    // subtract 1 for the padding value (to make room for the padding_length
-    // uint8)
-    var padding = blockSize - (input.length() % blockSize);
-    input.fillWithByte(padding - 1, padding);
-  }
-  return true;
-}
-
-/**
- * Handles padding for aes_cbc_sha1 in decrypt mode.
- *
- * @param blockSize the block size.
- * @param output the output buffer.
- * @param decrypt true in decrypt mode, false in encrypt mode.
- *
- * @return true on success, false on failure.
- */
-function decrypt_aes_cbc_sha1_padding(blockSize, output, decrypt) {
-  var rval = true;
-  if(decrypt) {
-    /* The last byte in the output specifies the number of padding bytes not
-      including itself. Each of the padding bytes has the same value as that
-      last byte (known as the padding_length). Here we check all padding
-      bytes to ensure they have the value of padding_length even if one of
-      them is bad in order to ward-off timing attacks. */
-    var len = output.length();
-    var paddingLength = output.last();
-    for(var i = len - 1 - paddingLength; i < len - 1; ++i) {
-      rval = rval && (output.at(i) == paddingLength);
-    }
-    if(rval) {
-      // trim off padding bytes and last padding length byte
-      output.truncate(paddingLength + 1);
-    }
-  }
-  return rval;
-}
-
-/**
- * Decrypts a TLSCipherText record into a TLSCompressed record using
- * AES in CBC mode.
- *
- * @param record the TLSCipherText record to decrypt.
- * @param s the ConnectionState to use.
- *
- * @return true on success, false on failure.
- */
-function decrypt_aes_cbc_sha1(record, s) {
-  var rval = false;
-
-  var iv;
-  if(record.version.minor === tls.Versions.TLS_1_0.minor) {
-    // use pre-generated IV when initializing for TLS 1.0, otherwise use the
-    // residue from the previous decryption
-    iv = s.cipherState.init ? null : s.cipherState.iv;
-  } else {
-    // TLS 1.1+ use an explicit IV every time to protect against CBC attacks
-    // that is appended to the record fragment
-    iv = record.fragment.getBytes(16);
-  }
-
-  s.cipherState.init = true;
-
-  // start cipher
-  var cipher = s.cipherState.cipher;
-  cipher.start({iv: iv});
-
-  // do decryption
-  cipher.update(record.fragment);
-  rval = cipher.finish(decrypt_aes_cbc_sha1_padding);
-
-  // even if decryption fails, keep going to minimize timing attacks
-
-  // decrypted data:
-  // first (len - 20) bytes = application data
-  // last 20 bytes          = MAC
-  var macLen = s.macLength;
-
-  // create a random MAC to check against should the mac length check fail
-  // Note: do this regardless of the failure to keep timing consistent
-  var mac = forge.random.getBytesSync(macLen);
-
-  // get fragment and mac
-  var len = cipher.output.length();
-  if(len >= macLen) {
-    record.fragment = cipher.output.getBytes(len - macLen);
-    mac = cipher.output.getBytes(macLen);
-  } else {
-    // bad data, but get bytes anyway to try to keep timing consistent
-    record.fragment = cipher.output.getBytes();
-  }
-  record.fragment = forge.util.createBuffer(record.fragment);
-  record.length = record.fragment.length();
-
-  // see if data integrity checks out, update sequence number
-  var mac2 = s.macFunction(s.macKey, s.sequenceNumber, record);
-  s.updateSequenceNumber();
-  rval = compareMacs(s.macKey, mac, mac2) && rval;
-  return rval;
-}
-
-/**
- * Safely compare two MACs. This function will compare two MACs in a way
- * that protects against timing attacks.
- *
- * TODO: Expose elsewhere as a utility API.
- *
- * See: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/february/double-hmac-verification/
- *
- * @param key the MAC key to use.
- * @param mac1 as a binary-encoded string of bytes.
- * @param mac2 as a binary-encoded string of bytes.
- *
- * @return true if the MACs are the same, false if not.
- */
-function compareMacs(key, mac1, mac2) {
-  var hmac = forge.hmac.create();
-
-  hmac.start('SHA1', key);
-  hmac.update(mac1);
-  mac1 = hmac.digest().getBytes();
-
-  hmac.start(null, null);
-  hmac.update(mac2);
-  mac2 = hmac.digest().getBytes();
-
-  return mac1 === mac2;
-}
diff --git a/templetes/node_modules/object-inspect/example/all.js b/templetes/node_modules/object-inspect/example/all.js
deleted file mode 100644
index 2f3355c5..00000000
--- a/templetes/node_modules/object-inspect/example/all.js
+++ /dev/null
@@ -1,23 +0,0 @@
-'use strict';
-
-var inspect = require('../');
-var Buffer = require('safer-buffer').Buffer;
-
-var holes = ['a', 'b'];
-holes[4] = 'e';
-holes[6] = 'g';
-
-var obj = {
-    a: 1,
-    b: [3, 4, undefined, null],
-    c: undefined,
-    d: null,
-    e: {
-        regex: /^x/i,
-        buf: Buffer.from('abc'),
-        holes: holes
-    },
-    now: new Date()
-};
-obj.self = obj;
-console.log(inspect(obj));
diff --git a/templetes/node_modules/pako/lib/zlib/adler32.js b/templetes/node_modules/pako/lib/zlib/adler32.js
deleted file mode 100644
index d440a981..00000000
--- a/templetes/node_modules/pako/lib/zlib/adler32.js
+++ /dev/null
@@ -1,51 +0,0 @@
-'use strict';
-
-// Note: adler32 takes 12% for level 0 and 2% for level 6.
-// It isn't worth it to make additional optimizations as in original.
-// Small size is preferable.
-
-// (C) 1995-2013 Jean-loup Gailly and Mark Adler
-// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
-//
-// This software is provided 'as-is', without any express or implied
-// warranty. In no event will the authors be held liable for any damages
-// arising from the use of this software.
-//
-// Permission is granted to anyone to use this software for any purpose,
-// including commercial applications, and to alter it and redistribute it
-// freely, subject to the following restrictions:
-//
-// 1. The origin of this software must not be misrepresented; you must not
-//   claim that you wrote the original software. If you use this software
-//   in a product, an acknowledgment in the product documentation would be
-//   appreciated but is not required.
-// 2. Altered source versions must be plainly marked as such, and must not be
-//   misrepresented as being the original software.
-// 3. This notice may not be removed or altered from any source distribution.
-
-function adler32(adler, buf, len, pos) {
-  var s1 = (adler & 0xffff) |0,
-      s2 = ((adler >>> 16) & 0xffff) |0,
-      n = 0;
-
-  while (len !== 0) {
-    // Set limit ~ twice less than 5552, to keep
-    // s2 in 31-bits, because we force signed ints.
-    // in other case %= will fail.
-    n = len > 2000 ? 2000 : len;
-    len -= n;
-
-    do {
-      s1 = (s1 + buf[pos++]) |0;
-      s2 = (s2 + s1) |0;
-    } while (--n);
-
-    s1 %= 65521;
-    s2 %= 65521;
-  }
-
-  return (s1 | (s2 << 16)) |0;
-}
-
-
-module.exports = adler32;
diff --git a/templetes/node_modules/parse-asn1/aesid.json b/templetes/node_modules/parse-asn1/aesid.json
deleted file mode 100644
index 24f653b4..00000000
--- a/templetes/node_modules/parse-asn1/aesid.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{"2.16.840.1.101.3.4.1.1": "aes-128-ecb",
-"2.16.840.1.101.3.4.1.2": "aes-128-cbc",
-"2.16.840.1.101.3.4.1.3": "aes-128-ofb",
-"2.16.840.1.101.3.4.1.4": "aes-128-cfb",
-"2.16.840.1.101.3.4.1.21": "aes-192-ecb",
-"2.16.840.1.101.3.4.1.22": "aes-192-cbc",
-"2.16.840.1.101.3.4.1.23": "aes-192-ofb",
-"2.16.840.1.101.3.4.1.24": "aes-192-cfb",
-"2.16.840.1.101.3.4.1.41": "aes-256-ecb",
-"2.16.840.1.101.3.4.1.42": "aes-256-cbc",
-"2.16.840.1.101.3.4.1.43": "aes-256-ofb",
-"2.16.840.1.101.3.4.1.44": "aes-256-cfb"
-}
\ No newline at end of file
diff --git a/templetes/node_modules/react-redux/es/alternate-renderers.js b/templetes/node_modules/react-redux/es/alternate-renderers.js
deleted file mode 100644
index 98ec79b5..00000000
--- a/templetes/node_modules/react-redux/es/alternate-renderers.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import Provider from './components/Provider';
-import connectAdvanced from './components/connectAdvanced';
-import { ReactReduxContext } from './components/Context';
-import connect from './connect/connect';
-import { useDispatch } from './hooks/useDispatch';
-import { useSelector } from './hooks/useSelector';
-import { useStore } from './hooks/useStore';
-import { getBatch } from './utils/batch';
-import shallowEqual from './utils/shallowEqual'; // For other renderers besides ReactDOM and React Native, use the default noop batch function
-
-var batch = getBatch();
-export { Provider, connectAdvanced, ReactReduxContext, connect, batch, useDispatch, useSelector, useStore, shallowEqual };
\ No newline at end of file
diff --git a/templetes/node_modules/readable-stream/lib/_stream_duplex.js b/templetes/node_modules/readable-stream/lib/_stream_duplex.js
deleted file mode 100644
index 57003c32..00000000
--- a/templetes/node_modules/readable-stream/lib/_stream_duplex.js
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-
-// a duplex stream is just a stream that is both readable and writable.
-// Since JS doesn't have multiple prototypal inheritance, this class
-// prototypally inherits from Readable, and then parasitically from
-// Writable.
-
-'use strict';
-
-/*<replacement>*/
-
-var pna = require('process-nextick-args');
-/*</replacement>*/
-
-/*<replacement>*/
-var objectKeys = Object.keys || function (obj) {
-  var keys = [];
-  for (var key in obj) {
-    keys.push(key);
-  }return keys;
-};
-/*</replacement>*/
-
-module.exports = Duplex;
-
-/*<replacement>*/
-var util = Object.create(require('core-util-is'));
-util.inherits = require('inherits');
-/*</replacement>*/
-
-var Readable = require('./_stream_readable');
-var Writable = require('./_stream_writable');
-
-util.inherits(Duplex, Readable);
-
-{
-  // avoid scope creep, the keys array can then be collected
-  var keys = objectKeys(Writable.prototype);
-  for (var v = 0; v < keys.length; v++) {
-    var method = keys[v];
-    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
-  }
-}
-
-function Duplex(options) {
-  if (!(this instanceof Duplex)) return new Duplex(options);
-
-  Readable.call(this, options);
-  Writable.call(this, options);
-
-  if (options && options.readable === false) this.readable = false;
-
-  if (options && options.writable === false) this.writable = false;
-
-  this.allowHalfOpen = true;
-  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
-
-  this.once('end', onend);
-}
-
-Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function () {
-    return this._writableState.highWaterMark;
-  }
-});
-
-// the no-half-open enforcer
-function onend() {
-  // if we allow half-open state, or if the writable side ended,
-  // then we're ok.
-  if (this.allowHalfOpen || this._writableState.ended) return;
-
-  // no more data can be written.
-  // But allow more writes to happen in this tick.
-  pna.nextTick(onEndNT, this);
-}
-
-function onEndNT(self) {
-  self.end();
-}
-
-Object.defineProperty(Duplex.prototype, 'destroyed', {
-  get: function () {
-    if (this._readableState === undefined || this._writableState === undefined) {
-      return false;
-    }
-    return this._readableState.destroyed && this._writableState.destroyed;
-  },
-  set: function (value) {
-    // we ignore the value if the stream
-    // has not been initialized yet
-    if (this._readableState === undefined || this._writableState === undefined) {
-      return;
-    }
-
-    // backward compatibility, the user is explicitly
-    // managing destroyed
-    this._readableState.destroyed = value;
-    this._writableState.destroyed = value;
-  }
-});
-
-Duplex.prototype._destroy = function (err, cb) {
-  this.push(null);
-  this.end();
-
-  pna.nextTick(cb, err);
-};
\ No newline at end of file
diff --git a/templetes/node_modules/readable-stream/lib/_stream_passthrough.js b/templetes/node_modules/readable-stream/lib/_stream_passthrough.js
deleted file mode 100644
index 612edb4d..00000000
--- a/templetes/node_modules/readable-stream/lib/_stream_passthrough.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-
-// a passthrough stream.
-// basically just the most minimal sort of Transform stream.
-// Every written chunk gets output as-is.
-
-'use strict';
-
-module.exports = PassThrough;
-
-var Transform = require('./_stream_transform');
-
-/*<replacement>*/
-var util = Object.create(require('core-util-is'));
-util.inherits = require('inherits');
-/*</replacement>*/
-
-util.inherits(PassThrough, Transform);
-
-function PassThrough(options) {
-  if (!(this instanceof PassThrough)) return new PassThrough(options);
-
-  Transform.call(this, options);
-}
-
-PassThrough.prototype._transform = function (chunk, encoding, cb) {
-  cb(null, chunk);
-};
\ No newline at end of file
diff --git a/templetes/node_modules/readable-stream/lib/_stream_readable.js b/templetes/node_modules/readable-stream/lib/_stream_readable.js
deleted file mode 100644
index 0f807646..00000000
--- a/templetes/node_modules/readable-stream/lib/_stream_readable.js
+++ /dev/null
@@ -1,1019 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-
-'use strict';
-
-/*<replacement>*/
-
-var pna = require('process-nextick-args');
-/*</replacement>*/
-
-module.exports = Readable;
-
-/*<replacement>*/
-var isArray = require('isarray');
-/*</replacement>*/
-
-/*<replacement>*/
-var Duplex;
-/*</replacement>*/
-
-Readable.ReadableState = ReadableState;
-
-/*<replacement>*/
-var EE = require('events').EventEmitter;
-
-var EElistenerCount = function (emitter, type) {
-  return emitter.listeners(type).length;
-};
-/*</replacement>*/
-
-/*<replacement>*/
-var Stream = require('./internal/streams/stream');
-/*</replacement>*/
-
-/*<replacement>*/
-
-var Buffer = require('safe-buffer').Buffer;
-var OurUint8Array = global.Uint8Array || function () {};
-function _uint8ArrayToBuffer(chunk) {
-  return Buffer.from(chunk);
-}
-function _isUint8Array(obj) {
-  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
-}
-
-/*</replacement>*/
-
-/*<replacement>*/
-var util = Object.create(require('core-util-is'));
-util.inherits = require('inherits');
-/*</replacement>*/
-
-/*<replacement>*/
-var debugUtil = require('util');
-var debug = void 0;
-if (debugUtil && debugUtil.debuglog) {
-  debug = debugUtil.debuglog('stream');
-} else {
-  debug = function () {};
-}
-/*</replacement>*/
-
-var BufferList = require('./internal/streams/BufferList');
-var destroyImpl = require('./internal/streams/destroy');
-var StringDecoder;
-
-util.inherits(Readable, Stream);
-
-var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
-
-function prependListener(emitter, event, fn) {
-  // Sadly this is not cacheable as some libraries bundle their own
-  // event emitter implementation with them.
-  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);
-
-  // This is a hack to make sure that our error handler is attached before any
-  // userland ones.  NEVER DO THIS. This is here only because this code needs
-  // to continue to work with older versions of Node.js that do not include
-  // the prependListener() method. The goal is to eventually remove this hack.
-  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
-}
-
-function ReadableState(options, stream) {
-  Duplex = Duplex || require('./_stream_duplex');
-
-  options = options || {};
-
-  // Duplex streams are both readable and writable, but share
-  // the same options object.
-  // However, some cases require setting options to different
-  // values for the readable and the writable sides of the duplex stream.
-  // These options can be provided separately as readableXXX and writableXXX.
-  var isDuplex = stream instanceof Duplex;
-
-  // object stream flag. Used to make read(n) ignore n and to
-  // make all the buffer merging and length checks go away
-  this.objectMode = !!options.objectMode;
-
-  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
-
-  // the point at which it stops calling _read() to fill the buffer
-  // Note: 0 is a valid value, means "don't call _read preemptively ever"
-  var hwm = options.highWaterMark;
-  var readableHwm = options.readableHighWaterMark;
-  var defaultHwm = this.objectMode ? 16 : 16 * 1024;
-
-  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;
-
-  // cast to ints.
-  this.highWaterMark = Math.floor(this.highWaterMark);
-
-  // A linked list is used to store data chunks instead of an array because the
-  // linked list can remove elements from the beginning faster than
-  // array.shift()
-  this.buffer = new BufferList();
-  this.length = 0;
-  this.pipes = null;
-  this.pipesCount = 0;
-  this.flowing = null;
-  this.ended = false;
-  this.endEmitted = false;
-  this.reading = false;
-
-  // a flag to be able to tell if the event 'readable'/'data' is emitted
-  // immediately, or on a later tick.  We set this to true at first, because
-  // any actions that shouldn't happen until "later" should generally also
-  // not happen before the first read call.
-  this.sync = true;
-
-  // whenever we return null, then we set a flag to say
-  // that we're awaiting a 'readable' event emission.
-  this.needReadable = false;
-  this.emittedReadable = false;
-  this.readableListening = false;
-  this.resumeScheduled = false;
-
-  // has it been destroyed
-  this.destroyed = false;
-
-  // Crypto is kind of old and crusty.  Historically, its default string
-  // encoding is 'binary' so we have to make this configurable.
-  // Everything else in the universe uses 'utf8', though.
-  this.defaultEncoding = options.defaultEncoding || 'utf8';
-
-  // the number of writers that are awaiting a drain event in .pipe()s
-  this.awaitDrain = 0;
-
-  // if true, a maybeReadMore has been scheduled
-  this.readingMore = false;
-
-  this.decoder = null;
-  this.encoding = null;
-  if (options.encoding) {
-    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
-    this.decoder = new StringDecoder(options.encoding);
-    this.encoding = options.encoding;
-  }
-}
-
-function Readable(options) {
-  Duplex = Duplex || require('./_stream_duplex');
-
-  if (!(this instanceof Readable)) return new Readable(options);
-
-  this._readableState = new ReadableState(options, this);
-
-  // legacy
-  this.readable = true;
-
-  if (options) {
-    if (typeof options.read === 'function') this._read = options.read;
-
-    if (typeof options.destroy === 'function') this._destroy = options.destroy;
-  }
-
-  Stream.call(this);
-}
-
-Object.defineProperty(Readable.prototype, 'destroyed', {
-  get: function () {
-    if (this._readableState === undefined) {
-      return false;
-    }
-    return this._readableState.destroyed;
-  },
-  set: function (value) {
-    // we ignore the value if the stream
-    // has not been initialized yet
-    if (!this._readableState) {
-      return;
-    }
-
-    // backward compatibility, the user is explicitly
-    // managing destroyed
-    this._readableState.destroyed = value;
-  }
-});
-
-Readable.prototype.destroy = destroyImpl.destroy;
-Readable.prototype._undestroy = destroyImpl.undestroy;
-Readable.prototype._destroy = function (err, cb) {
-  this.push(null);
-  cb(err);
-};
-
-// Manually shove something into the read() buffer.
-// This returns true if the highWaterMark has not been hit yet,
-// similar to how Writable.write() returns true if you should
-// write() some more.
-Readable.prototype.push = function (chunk, encoding) {
-  var state = this._readableState;
-  var skipChunkCheck;
-
-  if (!state.objectMode) {
-    if (typeof chunk === 'string') {
-      encoding = encoding || state.defaultEncoding;
-      if (encoding !== state.encoding) {
-        chunk = Buffer.from(chunk, encoding);
-        encoding = '';
-      }
-      skipChunkCheck = true;
-    }
-  } else {
-    skipChunkCheck = true;
-  }
-
-  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
-};
-
-// Unshift should *always* be something directly out of read()
-Readable.prototype.unshift = function (chunk) {
-  return readableAddChunk(this, chunk, null, true, false);
-};
-
-function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
-  var state = stream._readableState;
-  if (chunk === null) {
-    state.reading = false;
-    onEofChunk(stream, state);
-  } else {
-    var er;
-    if (!skipChunkCheck) er = chunkInvalid(state, chunk);
-    if (er) {
-      stream.emit('error', er);
-    } else if (state.objectMode || chunk && chunk.length > 0) {
-      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
-        chunk = _uint8ArrayToBuffer(chunk);
-      }
-
-      if (addToFront) {
-        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
-      } else if (state.ended) {
-        stream.emit('error', new Error('stream.push() after EOF'));
-      } else {
-        state.reading = false;
-        if (state.decoder && !encoding) {
-          chunk = state.decoder.write(chunk);
-          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
-        } else {
-          addChunk(stream, state, chunk, false);
-        }
-      }
-    } else if (!addToFront) {
-      state.reading = false;
-    }
-  }
-
-  return needMoreData(state);
-}
-
-function addChunk(stream, state, chunk, addToFront) {
-  if (state.flowing && state.length === 0 && !state.sync) {
-    stream.emit('data', chunk);
-    stream.read(0);
-  } else {
-    // update the buffer info.
-    state.length += state.objectMode ? 1 : chunk.length;
-    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
-
-    if (state.needReadable) emitReadable(stream);
-  }
-  maybeReadMore(stream, state);
-}
-
-function chunkInvalid(state, chunk) {
-  var er;
-  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
-    er = new TypeError('Invalid non-string/buffer chunk');
-  }
-  return er;
-}
-
-// if it's past the high water mark, we can push in some more.
-// Also, if we have no data yet, we can stand some
-// more bytes.  This is to work around cases where hwm=0,
-// such as the repl.  Also, if the push() triggered a
-// readable event, and the user called read(largeNumber) such that
-// needReadable was set, then we ought to push more, so that another
-// 'readable' event will be triggered.
-function needMoreData(state) {
-  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
-}
-
-Readable.prototype.isPaused = function () {
-  return this._readableState.flowing === false;
-};
-
-// backwards compatibility.
-Readable.prototype.setEncoding = function (enc) {
-  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
-  this._readableState.decoder = new StringDecoder(enc);
-  this._readableState.encoding = enc;
-  return this;
-};
-
-// Don't raise the hwm > 8MB
-var MAX_HWM = 0x800000;
-function computeNewHighWaterMark(n) {
-  if (n >= MAX_HWM) {
-    n = MAX_HWM;
-  } else {
-    // Get the next highest power of 2 to prevent increasing hwm excessively in
-    // tiny amounts
-    n--;
-    n |= n >>> 1;
-    n |= n >>> 2;
-    n |= n >>> 4;
-    n |= n >>> 8;
-    n |= n >>> 16;
-    n++;
-  }
-  return n;
-}
-
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-function howMuchToRead(n, state) {
-  if (n <= 0 || state.length === 0 && state.ended) return 0;
-  if (state.objectMode) return 1;
-  if (n !== n) {
-    // Only flow one buffer at a time
-    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
-  }
-  // If we're asking for more than the current hwm, then raise the hwm.
-  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
-  if (n <= state.length) return n;
-  // Don't have enough
-  if (!state.ended) {
-    state.needReadable = true;
-    return 0;
-  }
-  return state.length;
-}
-
-// you can override either this method, or the async _read(n) below.
-Readable.prototype.read = function (n) {
-  debug('read', n);
-  n = parseInt(n, 10);
-  var state = this._readableState;
-  var nOrig = n;
-
-  if (n !== 0) state.emittedReadable = false;
-
-  // if we're doing read(0) to trigger a readable event, but we
-  // already have a bunch of data in the buffer, then just trigger
-  // the 'readable' event and move on.
-  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
-    debug('read: emitReadable', state.length, state.ended);
-    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
-    return null;
-  }
-
-  n = howMuchToRead(n, state);
-
-  // if we've ended, and we're now clear, then finish it up.
-  if (n === 0 && state.ended) {
-    if (state.length === 0) endReadable(this);
-    return null;
-  }
-
-  // All the actual chunk generation logic needs to be
-  // *below* the call to _read.  The reason is that in certain
-  // synthetic stream cases, such as passthrough streams, _read
-  // may be a completely synchronous operation which may change
-  // the state of the read buffer, providing enough data when
-  // before there was *not* enough.
-  //
-  // So, the steps are:
-  // 1. Figure out what the state of things will be after we do
-  // a read from the buffer.
-  //
-  // 2. If that resulting state will trigger a _read, then call _read.
-  // Note that this may be asynchronous, or synchronous.  Yes, it is
-  // deeply ugly to write APIs this way, but that still doesn't mean
-  // that the Readable class should behave improperly, as streams are
-  // designed to be sync/async agnostic.
-  // Take note if the _read call is sync or async (ie, if the read call
-  // has returned yet), so that we know whether or not it's safe to emit
-  // 'readable' etc.
-  //
-  // 3. Actually pull the requested chunks out of the buffer and return.
-
-  // if we need a readable event, then we need to do some reading.
-  var doRead = state.needReadable;
-  debug('need readable', doRead);
-
-  // if we currently have less than the highWaterMark, then also read some
-  if (state.length === 0 || state.length - n < state.highWaterMark) {
-    doRead = true;
-    debug('length less than watermark', doRead);
-  }
-
-  // however, if we've ended, then there's no point, and if we're already
-  // reading, then it's unnecessary.
-  if (state.ended || state.reading) {
-    doRead = false;
-    debug('reading or ended', doRead);
-  } else if (doRead) {
-    debug('do read');
-    state.reading = true;
-    state.sync = true;
-    // if the length is currently zero, then we *need* a readable event.
-    if (state.length === 0) state.needReadable = true;
-    // call internal read method
-    this._read(state.highWaterMark);
-    state.sync = false;
-    // If _read pushed data synchronously, then `reading` will be false,
-    // and we need to re-evaluate how much data we can return to the user.
-    if (!state.reading) n = howMuchToRead(nOrig, state);
-  }
-
-  var ret;
-  if (n > 0) ret = fromList(n, state);else ret = null;
-
-  if (ret === null) {
-    state.needReadable = true;
-    n = 0;
-  } else {
-    state.length -= n;
-  }
-
-  if (state.length === 0) {
-    // If we have nothing in the buffer, then we want to know
-    // as soon as we *do* get something into the buffer.
-    if (!state.ended) state.needReadable = true;
-
-    // If we tried to read() past the EOF, then emit end on the next tick.
-    if (nOrig !== n && state.ended) endReadable(this);
-  }
-
-  if (ret !== null) this.emit('data', ret);
-
-  return ret;
-};
-
-function onEofChunk(stream, state) {
-  if (state.ended) return;
-  if (state.decoder) {
-    var chunk = state.decoder.end();
-    if (chunk && chunk.length) {
-      state.buffer.push(chunk);
-      state.length += state.objectMode ? 1 : chunk.length;
-    }
-  }
-  state.ended = true;
-
-  // emit 'readable' now to make sure it gets picked up.
-  emitReadable(stream);
-}
-
-// Don't emit readable right away in sync mode, because this can trigger
-// another read() call => stack overflow.  This way, it might trigger
-// a nextTick recursion warning, but that's not so bad.
-function emitReadable(stream) {
-  var state = stream._readableState;
-  state.needReadable = false;
-  if (!state.emittedReadable) {
-    debug('emitReadable', state.flowing);
-    state.emittedReadable = true;
-    if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);
-  }
-}
-
-function emitReadable_(stream) {
-  debug('emit readable');
-  stream.emit('readable');
-  flow(stream);
-}
-
-// at this point, the user has presumably seen the 'readable' event,
-// and called read() to consume some data.  that may have triggered
-// in turn another _read(n) call, in which case reading = true if
-// it's in progress.
-// However, if we're not ended, or reading, and the length < hwm,
-// then go ahead and try to read some more preemptively.
-function maybeReadMore(stream, state) {
-  if (!state.readingMore) {
-    state.readingMore = true;
-    pna.nextTick(maybeReadMore_, stream, state);
-  }
-}
-
-function maybeReadMore_(stream, state) {
-  var len = state.length;
-  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
-    debug('maybeReadMore read 0');
-    stream.read(0);
-    if (len === state.length)
-      // didn't get any data, stop spinning.
-      break;else len = state.length;
-  }
-  state.readingMore = false;
-}
-
-// abstract method.  to be overridden in specific implementation classes.
-// call cb(er, data) where data is <= n in length.
-// for virtual (non-string, non-buffer) streams, "length" is somewhat
-// arbitrary, and perhaps not very meaningful.
-Readable.prototype._read = function (n) {
-  this.emit('error', new Error('_read() is not implemented'));
-};
-
-Readable.prototype.pipe = function (dest, pipeOpts) {
-  var src = this;
-  var state = this._readableState;
-
-  switch (state.pipesCount) {
-    case 0:
-      state.pipes = dest;
-      break;
-    case 1:
-      state.pipes = [state.pipes, dest];
-      break;
-    default:
-      state.pipes.push(dest);
-      break;
-  }
-  state.pipesCount += 1;
-  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
-
-  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
-
-  var endFn = doEnd ? onend : unpipe;
-  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);
-
-  dest.on('unpipe', onunpipe);
-  function onunpipe(readable, unpipeInfo) {
-    debug('onunpipe');
-    if (readable === src) {
-      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
-        unpipeInfo.hasUnpiped = true;
-        cleanup();
-      }
-    }
-  }
-
-  function onend() {
-    debug('onend');
-    dest.end();
-  }
-
-  // when the dest drains, it reduces the awaitDrain counter
-  // on the source.  This would be more elegant with a .once()
-  // handler in flow(), but adding and removing repeatedly is
-  // too slow.
-  var ondrain = pipeOnDrain(src);
-  dest.on('drain', ondrain);
-
-  var cleanedUp = false;
-  function cleanup() {
-    debug('cleanup');
-    // cleanup event handlers once the pipe is broken
-    dest.removeListener('close', onclose);
-    dest.removeListener('finish', onfinish);
-    dest.removeListener('drain', ondrain);
-    dest.removeListener('error', onerror);
-    dest.removeListener('unpipe', onunpipe);
-    src.removeListener('end', onend);
-    src.removeListener('end', unpipe);
-    src.removeListener('data', ondata);
-
-    cleanedUp = true;
-
-    // if the reader is waiting for a drain event from this
-    // specific writer, then it would cause it to never start
-    // flowing again.
-    // So, if this is awaiting a drain, then we just call it now.
-    // If we don't know, then assume that we are waiting for one.
-    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
-  }
-
-  // If the user pushes more data while we're writing to dest then we'll end up
-  // in ondata again. However, we only want to increase awaitDrain once because
-  // dest will only emit one 'drain' event for the multiple writes.
-  // => Introduce a guard on increasing awaitDrain.
-  var increasedAwaitDrain = false;
-  src.on('data', ondata);
-  function ondata(chunk) {
-    debug('ondata');
-    increasedAwaitDrain = false;
-    var ret = dest.write(chunk);
-    if (false === ret && !increasedAwaitDrain) {
-      // If the user unpiped during `dest.write()`, it is possible
-      // to get stuck in a permanently paused state if that write
-      // also returned false.
-      // => Check whether `dest` is still a piping destination.
-      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
-        debug('false write response, pause', src._readableState.awaitDrain);
-        src._readableState.awaitDrain++;
-        increasedAwaitDrain = true;
-      }
-      src.pause();
-    }
-  }
-
-  // if the dest has an error, then stop piping into it.
-  // however, don't suppress the throwing behavior for this.
-  function onerror(er) {
-    debug('onerror', er);
-    unpipe();
-    dest.removeListener('error', onerror);
-    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
-  }
-
-  // Make sure our error handler is attached before userland ones.
-  prependListener(dest, 'error', onerror);
-
-  // Both close and finish should trigger unpipe, but only once.
-  function onclose() {
-    dest.removeListener('finish', onfinish);
-    unpipe();
-  }
-  dest.once('close', onclose);
-  function onfinish() {
-    debug('onfinish');
-    dest.removeListener('close', onclose);
-    unpipe();
-  }
-  dest.once('finish', onfinish);
-
-  function unpipe() {
-    debug('unpipe');
-    src.unpipe(dest);
-  }
-
-  // tell the dest that it's being piped to
-  dest.emit('pipe', src);
-
-  // start the flow if it hasn't been started already.
-  if (!state.flowing) {
-    debug('pipe resume');
-    src.resume();
-  }
-
-  return dest;
-};
-
-function pipeOnDrain(src) {
-  return function () {
-    var state = src._readableState;
-    debug('pipeOnDrain', state.awaitDrain);
-    if (state.awaitDrain) state.awaitDrain--;
-    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
-      state.flowing = true;
-      flow(src);
-    }
-  };
-}
-
-Readable.prototype.unpipe = function (dest) {
-  var state = this._readableState;
-  var unpipeInfo = { hasUnpiped: false };
-
-  // if we're not piping anywhere, then do nothing.
-  if (state.pipesCount === 0) return this;
-
-  // just one destination.  most common case.
-  if (state.pipesCount === 1) {
-    // passed in one, but it's not the right one.
-    if (dest && dest !== state.pipes) return this;
-
-    if (!dest) dest = state.pipes;
-
-    // got a match.
-    state.pipes = null;
-    state.pipesCount = 0;
-    state.flowing = false;
-    if (dest) dest.emit('unpipe', this, unpipeInfo);
-    return this;
-  }
-
-  // slow case. multiple pipe destinations.
-
-  if (!dest) {
-    // remove all.
-    var dests = state.pipes;
-    var len = state.pipesCount;
-    state.pipes = null;
-    state.pipesCount = 0;
-    state.flowing = false;
-
-    for (var i = 0; i < len; i++) {
-      dests[i].emit('unpipe', this, unpipeInfo);
-    }return this;
-  }
-
-  // try to find the right one.
-  var index = indexOf(state.pipes, dest);
-  if (index === -1) return this;
-
-  state.pipes.splice(index, 1);
-  state.pipesCount -= 1;
-  if (state.pipesCount === 1) state.pipes = state.pipes[0];
-
-  dest.emit('unpipe', this, unpipeInfo);
-
-  return this;
-};
-
-// set up data events if they are asked for
-// Ensure readable listeners eventually get something
-Readable.prototype.on = function (ev, fn) {
-  var res = Stream.prototype.on.call(this, ev, fn);
-
-  if (ev === 'data') {
-    // Start flowing on next tick if stream isn't explicitly paused
-    if (this._readableState.flowing !== false) this.resume();
-  } else if (ev === 'readable') {
-    var state = this._readableState;
-    if (!state.endEmitted && !state.readableListening) {
-      state.readableListening = state.needReadable = true;
-      state.emittedReadable = false;
-      if (!state.reading) {
-        pna.nextTick(nReadingNextTick, this);
-      } else if (state.length) {
-        emitReadable(this);
-      }
-    }
-  }
-
-  return res;
-};
-Readable.prototype.addListener = Readable.prototype.on;
-
-function nReadingNextTick(self) {
-  debug('readable nexttick read 0');
-  self.read(0);
-}
-
-// pause() and resume() are remnants of the legacy readable stream API
-// If the user uses them, then switch into old mode.
-Readable.prototype.resume = function () {
-  var state = this._readableState;
-  if (!state.flowing) {
-    debug('resume');
-    state.flowing = true;
-    resume(this, state);
-  }
-  return this;
-};
-
-function resume(stream, state) {
-  if (!state.resumeScheduled) {
-    state.resumeScheduled = true;
-    pna.nextTick(resume_, stream, state);
-  }
-}
-
-function resume_(stream, state) {
-  if (!state.reading) {
-    debug('resume read 0');
-    stream.read(0);
-  }
-
-  state.resumeScheduled = false;
-  state.awaitDrain = 0;
-  stream.emit('resume');
-  flow(stream);
-  if (state.flowing && !state.reading) stream.read(0);
-}
-
-Readable.prototype.pause = function () {
-  debug('call pause flowing=%j', this._readableState.flowing);
-  if (false !== this._readableState.flowing) {
-    debug('pause');
-    this._readableState.flowing = false;
-    this.emit('pause');
-  }
-  return this;
-};
-
-function flow(stream) {
-  var state = stream._readableState;
-  debug('flow', state.flowing);
-  while (state.flowing && stream.read() !== null) {}
-}
-
-// wrap an old-style stream as the async data source.
-// This is *not* part of the readable stream interface.
-// It is an ugly unfortunate mess of history.
-Readable.prototype.wrap = function (stream) {
-  var _this = this;
-
-  var state = this._readableState;
-  var paused = false;
-
-  stream.on('end', function () {
-    debug('wrapped end');
-    if (state.decoder && !state.ended) {
-      var chunk = state.decoder.end();
-      if (chunk && chunk.length) _this.push(chunk);
-    }
-
-    _this.push(null);
-  });
-
-  stream.on('data', function (chunk) {
-    debug('wrapped data');
-    if (state.decoder) chunk = state.decoder.write(chunk);
-
-    // don't skip over falsy values in objectMode
-    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
-
-    var ret = _this.push(chunk);
-    if (!ret) {
-      paused = true;
-      stream.pause();
-    }
-  });
-
-  // proxy all the other methods.
-  // important when wrapping filters and duplexes.
-  for (var i in stream) {
-    if (this[i] === undefined && typeof stream[i] === 'function') {
-      this[i] = function (method) {
-        return function () {
-          return stream[method].apply(stream, arguments);
-        };
-      }(i);
-    }
-  }
-
-  // proxy certain important events.
-  for (var n = 0; n < kProxyEvents.length; n++) {
-    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
-  }
-
-  // when we try to consume some more bytes, simply unpause the
-  // underlying stream.
-  this._read = function (n) {
-    debug('wrapped _read', n);
-    if (paused) {
-      paused = false;
-      stream.resume();
-    }
-  };
-
-  return this;
-};
-
-Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function () {
-    return this._readableState.highWaterMark;
-  }
-});
-
-// exposed for testing purposes only.
-Readable._fromList = fromList;
-
-// Pluck off n bytes from an array of buffers.
-// Length is the combined lengths of all the buffers in the list.
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-function fromList(n, state) {
-  // nothing buffered
-  if (state.length === 0) return null;
-
-  var ret;
-  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
-    // read it all, truncate the list
-    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
-    state.buffer.clear();
-  } else {
-    // read part of list
-    ret = fromListPartial(n, state.buffer, state.decoder);
-  }
-
-  return ret;
-}
-
-// Extracts only enough buffered data to satisfy the amount requested.
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-function fromListPartial(n, list, hasStrings) {
-  var ret;
-  if (n < list.head.data.length) {
-    // slice is the same for buffers and strings
-    ret = list.head.data.slice(0, n);
-    list.head.data = list.head.data.slice(n);
-  } else if (n === list.head.data.length) {
-    // first chunk is a perfect match
-    ret = list.shift();
-  } else {
-    // result spans more than one buffer
-    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
-  }
-  return ret;
-}
-
-// Copies a specified amount of characters from the list of buffered data
-// chunks.
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-function copyFromBufferString(n, list) {
-  var p = list.head;
-  var c = 1;
-  var ret = p.data;
-  n -= ret.length;
-  while (p = p.next) {
-    var str = p.data;
-    var nb = n > str.length ? str.length : n;
-    if (nb === str.length) ret += str;else ret += str.slice(0, n);
-    n -= nb;
-    if (n === 0) {
-      if (nb === str.length) {
-        ++c;
-        if (p.next) list.head = p.next;else list.head = list.tail = null;
-      } else {
-        list.head = p;
-        p.data = str.slice(nb);
-      }
-      break;
-    }
-    ++c;
-  }
-  list.length -= c;
-  return ret;
-}
-
-// Copies a specified amount of bytes from the list of buffered data chunks.
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-function copyFromBuffer(n, list) {
-  var ret = Buffer.allocUnsafe(n);
-  var p = list.head;
-  var c = 1;
-  p.data.copy(ret);
-  n -= p.data.length;
-  while (p = p.next) {
-    var buf = p.data;
-    var nb = n > buf.length ? buf.length : n;
-    buf.copy(ret, ret.length - n, 0, nb);
-    n -= nb;
-    if (n === 0) {
-      if (nb === buf.length) {
-        ++c;
-        if (p.next) list.head = p.next;else list.head = list.tail = null;
-      } else {
-        list.head = p;
-        p.data = buf.slice(nb);
-      }
-      break;
-    }
-    ++c;
-  }
-  list.length -= c;
-  return ret;
-}
-
-function endReadable(stream) {
-  var state = stream._readableState;
-
-  // If we get here before consuming all the bytes, then that is a
-  // bug in node.  Should never happen.
-  if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
-
-  if (!state.endEmitted) {
-    state.ended = true;
-    pna.nextTick(endReadableNT, state, stream);
-  }
-}
-
-function endReadableNT(state, stream) {
-  // Check that we didn't get one last unshift.
-  if (!state.endEmitted && state.length === 0) {
-    state.endEmitted = true;
-    stream.readable = false;
-    stream.emit('end');
-  }
-}
-
-function indexOf(xs, x) {
-  for (var i = 0, l = xs.length; i < l; i++) {
-    if (xs[i] === x) return i;
-  }
-  return -1;
-}
\ No newline at end of file
diff --git a/templetes/node_modules/readable-stream/lib/_stream_transform.js b/templetes/node_modules/readable-stream/lib/_stream_transform.js
deleted file mode 100644
index fcfc105a..00000000
--- a/templetes/node_modules/readable-stream/lib/_stream_transform.js
+++ /dev/null
@@ -1,214 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-
-// a transform stream is a readable/writable stream where you do
-// something with the data.  Sometimes it's called a "filter",
-// but that's not a great name for it, since that implies a thing where
-// some bits pass through, and others are simply ignored.  (That would
-// be a valid example of a transform, of course.)
-//
-// While the output is causally related to the input, it's not a
-// necessarily symmetric or synchronous transformation.  For example,
-// a zlib stream might take multiple plain-text writes(), and then
-// emit a single compressed chunk some time in the future.
-//
-// Here's how this works:
-//
-// The Transform stream has all the aspects of the readable and writable
-// stream classes.  When you write(chunk), that calls _write(chunk,cb)
-// internally, and returns false if there's a lot of pending writes
-// buffered up.  When you call read(), that calls _read(n) until
-// there's enough pending readable data buffered up.
-//
-// In a transform stream, the written data is placed in a buffer.  When
-// _read(n) is called, it transforms the queued up data, calling the
-// buffered _write cb's as it consumes chunks.  If consuming a single
-// written chunk would result in multiple output chunks, then the first
-// outputted bit calls the readcb, and subsequent chunks just go into
-// the read buffer, and will cause it to emit 'readable' if necessary.
-//
-// This way, back-pressure is actually determined by the reading side,
-// since _read has to be called to start processing a new chunk.  However,
-// a pathological inflate type of transform can cause excessive buffering
-// here.  For example, imagine a stream where every byte of input is
-// interpreted as an integer from 0-255, and then results in that many
-// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in
-// 1kb of data being output.  In this case, you could write a very small
-// amount of input, and end up with a very large amount of output.  In
-// such a pathological inflating mechanism, there'd be no way to tell
-// the system to stop doing the transform.  A single 4MB write could
-// cause the system to run out of memory.
-//
-// However, even in such a pathological case, only a single written chunk
-// would be consumed, and then the rest would wait (un-transformed) until
-// the results of the previous transformed chunk were consumed.
-
-'use strict';
-
-module.exports = Transform;
-
-var Duplex = require('./_stream_duplex');
-
-/*<replacement>*/
-var util = Object.create(require('core-util-is'));
-util.inherits = require('inherits');
-/*</replacement>*/
-
-util.inherits(Transform, Duplex);
-
-function afterTransform(er, data) {
-  var ts = this._transformState;
-  ts.transforming = false;
-
-  var cb = ts.writecb;
-
-  if (!cb) {
-    return this.emit('error', new Error('write callback called multiple times'));
-  }
-
-  ts.writechunk = null;
-  ts.writecb = null;
-
-  if (data != null) // single equals check for both `null` and `undefined`
-    this.push(data);
-
-  cb(er);
-
-  var rs = this._readableState;
-  rs.reading = false;
-  if (rs.needReadable || rs.length < rs.highWaterMark) {
-    this._read(rs.highWaterMark);
-  }
-}
-
-function Transform(options) {
-  if (!(this instanceof Transform)) return new Transform(options);
-
-  Duplex.call(this, options);
-
-  this._transformState = {
-    afterTransform: afterTransform.bind(this),
-    needTransform: false,
-    transforming: false,
-    writecb: null,
-    writechunk: null,
-    writeencoding: null
-  };
-
-  // start out asking for a readable event once data is transformed.
-  this._readableState.needReadable = true;
-
-  // we have implemented the _read method, and done the other things
-  // that Readable wants before the first _read call, so unset the
-  // sync guard flag.
-  this._readableState.sync = false;
-
-  if (options) {
-    if (typeof options.transform === 'function') this._transform = options.transform;
-
-    if (typeof options.flush === 'function') this._flush = options.flush;
-  }
-
-  // When the writable side finishes, then flush out anything remaining.
-  this.on('prefinish', prefinish);
-}
-
-function prefinish() {
-  var _this = this;
-
-  if (typeof this._flush === 'function') {
-    this._flush(function (er, data) {
-      done(_this, er, data);
-    });
-  } else {
-    done(this, null, null);
-  }
-}
-
-Transform.prototype.push = function (chunk, encoding) {
-  this._transformState.needTransform = false;
-  return Duplex.prototype.push.call(this, chunk, encoding);
-};
-
-// This is the part where you do stuff!
-// override this function in implementation classes.
-// 'chunk' is an input chunk.
-//
-// Call `push(newChunk)` to pass along transformed output
-// to the readable side.  You may call 'push' zero or more times.
-//
-// Call `cb(err)` when you are done with this chunk.  If you pass
-// an error, then that'll put the hurt on the whole operation.  If you
-// never call cb(), then you'll never get another chunk.
-Transform.prototype._transform = function (chunk, encoding, cb) {
-  throw new Error('_transform() is not implemented');
-};
-
-Transform.prototype._write = function (chunk, encoding, cb) {
-  var ts = this._transformState;
-  ts.writecb = cb;
-  ts.writechunk = chunk;
-  ts.writeencoding = encoding;
-  if (!ts.transforming) {
-    var rs = this._readableState;
-    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
-  }
-};
-
-// Doesn't matter what the args are here.
-// _transform does all the work.
-// That we got here means that the readable side wants more data.
-Transform.prototype._read = function (n) {
-  var ts = this._transformState;
-
-  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
-    ts.transforming = true;
-    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
-  } else {
-    // mark that we need a transform, so that any data that comes in
-    // will get processed, now that we've asked for it.
-    ts.needTransform = true;
-  }
-};
-
-Transform.prototype._destroy = function (err, cb) {
-  var _this2 = this;
-
-  Duplex.prototype._destroy.call(this, err, function (err2) {
-    cb(err2);
-    _this2.emit('close');
-  });
-};
-
-function done(stream, er, data) {
-  if (er) return stream.emit('error', er);
-
-  if (data != null) // single equals check for both `null` and `undefined`
-    stream.push(data);
-
-  // if there's nothing in the write buffer, then that means
-  // that nothing more will ever be provided
-  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');
-
-  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');
-
-  return stream.push(null);
-}
\ No newline at end of file
diff --git a/templetes/node_modules/readable-stream/lib/_stream_writable.js b/templetes/node_modules/readable-stream/lib/_stream_writable.js
deleted file mode 100644
index b0b02200..00000000
--- a/templetes/node_modules/readable-stream/lib/_stream_writable.js
+++ /dev/null
@@ -1,687 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-
-// A bit simpler than readable streams.
-// Implement an async ._write(chunk, encoding, cb), and it'll handle all
-// the drain event emission and buffering.
-
-'use strict';
-
-/*<replacement>*/
-
-var pna = require('process-nextick-args');
-/*</replacement>*/
-
-module.exports = Writable;
-
-/* <replacement> */
-function WriteReq(chunk, encoding, cb) {
-  this.chunk = chunk;
-  this.encoding = encoding;
-  this.callback = cb;
-  this.next = null;
-}
-
-// It seems a linked list but it is not
-// there will be only 2 of these for each stream
-function CorkedRequest(state) {
-  var _this = this;
-
-  this.next = null;
-  this.entry = null;
-  this.finish = function () {
-    onCorkedFinish(_this, state);
-  };
-}
-/* </replacement> */
-
-/*<replacement>*/
-var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
-/*</replacement>*/
-
-/*<replacement>*/
-var Duplex;
-/*</replacement>*/
-
-Writable.WritableState = WritableState;
-
-/*<replacement>*/
-var util = Object.create(require('core-util-is'));
-util.inherits = require('inherits');
-/*</replacement>*/
-
-/*<replacement>*/
-var internalUtil = {
-  deprecate: require('util-deprecate')
-};
-/*</replacement>*/
-
-/*<replacement>*/
-var Stream = require('./internal/streams/stream');
-/*</replacement>*/
-
-/*<replacement>*/
-
-var Buffer = require('safe-buffer').Buffer;
-var OurUint8Array = global.Uint8Array || function () {};
-function _uint8ArrayToBuffer(chunk) {
-  return Buffer.from(chunk);
-}
-function _isUint8Array(obj) {
-  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
-}
-
-/*</replacement>*/
-
-var destroyImpl = require('./internal/streams/destroy');
-
-util.inherits(Writable, Stream);
-
-function nop() {}
-
-function WritableState(options, stream) {
-  Duplex = Duplex || require('./_stream_duplex');
-
-  options = options || {};
-
-  // Duplex streams are both readable and writable, but share
-  // the same options object.
-  // However, some cases require setting options to different
-  // values for the readable and the writable sides of the duplex stream.
-  // These options can be provided separately as readableXXX and writableXXX.
-  var isDuplex = stream instanceof Duplex;
-
-  // object stream flag to indicate whether or not this stream
-  // contains buffers or objects.
-  this.objectMode = !!options.objectMode;
-
-  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
-
-  // the point at which write() starts returning false
-  // Note: 0 is a valid value, means that we always return false if
-  // the entire buffer is not flushed immediately on write()
-  var hwm = options.highWaterMark;
-  var writableHwm = options.writableHighWaterMark;
-  var defaultHwm = this.objectMode ? 16 : 16 * 1024;
-
-  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;
-
-  // cast to ints.
-  this.highWaterMark = Math.floor(this.highWaterMark);
-
-  // if _final has been called
-  this.finalCalled = false;
-
-  // drain event flag.
-  this.needDrain = false;
-  // at the start of calling end()
-  this.ending = false;
-  // when end() has been called, and returned
-  this.ended = false;
-  // when 'finish' is emitted
-  this.finished = false;
-
-  // has it been destroyed
-  this.destroyed = false;
-
-  // should we decode strings into buffers before passing to _write?
-  // this is here so that some node-core streams can optimize string
-  // handling at a lower level.
-  var noDecode = options.decodeStrings === false;
-  this.decodeStrings = !noDecode;
-
-  // Crypto is kind of old and crusty.  Historically, its default string
-  // encoding is 'binary' so we have to make this configurable.
-  // Everything else in the universe uses 'utf8', though.
-  this.defaultEncoding = options.defaultEncoding || 'utf8';
-
-  // not an actual buffer we keep track of, but a measurement
-  // of how much we're waiting to get pushed to some underlying
-  // socket or file.
-  this.length = 0;
-
-  // a flag to see when we're in the middle of a write.
-  this.writing = false;
-
-  // when true all writes will be buffered until .uncork() call
-  this.corked = 0;
-
-  // a flag to be able to tell if the onwrite cb is called immediately,
-  // or on a later tick.  We set this to true at first, because any
-  // actions that shouldn't happen until "later" should generally also
-  // not happen before the first write call.
-  this.sync = true;
-
-  // a flag to know if we're processing previously buffered items, which
-  // may call the _write() callback in the same tick, so that we don't
-  // end up in an overlapped onwrite situation.
-  this.bufferProcessing = false;
-
-  // the callback that's passed to _write(chunk,cb)
-  this.onwrite = function (er) {
-    onwrite(stream, er);
-  };
-
-  // the callback that the user supplies to write(chunk,encoding,cb)
-  this.writecb = null;
-
-  // the amount that is being written when _write is called.
-  this.writelen = 0;
-
-  this.bufferedRequest = null;
-  this.lastBufferedRequest = null;
-
-  // number of pending user-supplied write callbacks
-  // this must be 0 before 'finish' can be emitted
-  this.pendingcb = 0;
-
-  // emit prefinish if the only thing we're waiting for is _write cbs
-  // This is relevant for synchronous Transform streams
-  this.prefinished = false;
-
-  // True if the error was already emitted and should not be thrown again
-  this.errorEmitted = false;
-
-  // count buffered requests
-  this.bufferedRequestCount = 0;
-
-  // allocate the first CorkedRequest, there is always
-  // one allocated and free to use, and we maintain at most two
-  this.corkedRequestsFree = new CorkedRequest(this);
-}
-
-WritableState.prototype.getBuffer = function getBuffer() {
-  var current = this.bufferedRequest;
-  var out = [];
-  while (current) {
-    out.push(current);
-    current = current.next;
-  }
-  return out;
-};
-
-(function () {
-  try {
-    Object.defineProperty(WritableState.prototype, 'buffer', {
-      get: internalUtil.deprecate(function () {
-        return this.getBuffer();
-      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
-    });
-  } catch (_) {}
-})();
-
-// Test _writableState for inheritance to account for Duplex streams,
-// whose prototype chain only points to Readable.
-var realHasInstance;
-if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
-  realHasInstance = Function.prototype[Symbol.hasInstance];
-  Object.defineProperty(Writable, Symbol.hasInstance, {
-    value: function (object) {
-      if (realHasInstance.call(this, object)) return true;
-      if (this !== Writable) return false;
-
-      return object && object._writableState instanceof WritableState;
-    }
-  });
-} else {
-  realHasInstance = function (object) {
-    return object instanceof this;
-  };
-}
-
-function Writable(options) {
-  Duplex = Duplex || require('./_stream_duplex');
-
-  // Writable ctor is applied to Duplexes, too.
-  // `realHasInstance` is necessary because using plain `instanceof`
-  // would return false, as no `_writableState` property is attached.
-
-  // Trying to use the custom `instanceof` for Writable here will also break the
-  // Node.js LazyTransform implementation, which has a non-trivial getter for
-  // `_writableState` that would lead to infinite recursion.
-  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
-    return new Writable(options);
-  }
-
-  this._writableState = new WritableState(options, this);
-
-  // legacy.
-  this.writable = true;
-
-  if (options) {
-    if (typeof options.write === 'function') this._write = options.write;
-
-    if (typeof options.writev === 'function') this._writev = options.writev;
-
-    if (typeof options.destroy === 'function') this._destroy = options.destroy;
-
-    if (typeof options.final === 'function') this._final = options.final;
-  }
-
-  Stream.call(this);
-}
-
-// Otherwise people can pipe Writable streams, which is just wrong.
-Writable.prototype.pipe = function () {
-  this.emit('error', new Error('Cannot pipe, not readable'));
-};
-
-function writeAfterEnd(stream, cb) {
-  var er = new Error('write after end');
-  // TODO: defer error events consistently everywhere, not just the cb
-  stream.emit('error', er);
-  pna.nextTick(cb, er);
-}
-
-// Checks that a user-supplied chunk is valid, especially for the particular
-// mode the stream is in. Currently this means that `null` is never accepted
-// and undefined/non-string values are only allowed in object mode.
-function validChunk(stream, state, chunk, cb) {
-  var valid = true;
-  var er = false;
-
-  if (chunk === null) {
-    er = new TypeError('May not write null values to stream');
-  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
-    er = new TypeError('Invalid non-string/buffer chunk');
-  }
-  if (er) {
-    stream.emit('error', er);
-    pna.nextTick(cb, er);
-    valid = false;
-  }
-  return valid;
-}
-
-Writable.prototype.write = function (chunk, encoding, cb) {
-  var state = this._writableState;
-  var ret = false;
-  var isBuf = !state.objectMode && _isUint8Array(chunk);
-
-  if (isBuf && !Buffer.isBuffer(chunk)) {
-    chunk = _uint8ArrayToBuffer(chunk);
-  }
-
-  if (typeof encoding === 'function') {
-    cb = encoding;
-    encoding = null;
-  }
-
-  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
-
-  if (typeof cb !== 'function') cb = nop;
-
-  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
-    state.pendingcb++;
-    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
-  }
-
-  return ret;
-};
-
-Writable.prototype.cork = function () {
-  var state = this._writableState;
-
-  state.corked++;
-};
-
-Writable.prototype.uncork = function () {
-  var state = this._writableState;
-
-  if (state.corked) {
-    state.corked--;
-
-    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
-  }
-};
-
-Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
-  // node::ParseEncoding() requires lower case.
-  if (typeof encoding === 'string') encoding = encoding.toLowerCase();
-  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
-  this._writableState.defaultEncoding = encoding;
-  return this;
-};
-
-function decodeChunk(state, chunk, encoding) {
-  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
-    chunk = Buffer.from(chunk, encoding);
-  }
-  return chunk;
-}
-
-Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function () {
-    return this._writableState.highWaterMark;
-  }
-});
-
-// if we're already writing something, then just put this
-// in the queue, and wait our turn.  Otherwise, call _write
-// If we return false, then we need a drain event, so set that flag.
-function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
-  if (!isBuf) {
-    var newChunk = decodeChunk(state, chunk, encoding);
-    if (chunk !== newChunk) {
-      isBuf = true;
-      encoding = 'buffer';
-      chunk = newChunk;
-    }
-  }
-  var len = state.objectMode ? 1 : chunk.length;
-
-  state.length += len;
-
-  var ret = state.length < state.highWaterMark;
-  // we must ensure that previous needDrain will not be reset to false.
-  if (!ret) state.needDrain = true;
-
-  if (state.writing || state.corked) {
-    var last = state.lastBufferedRequest;
-    state.lastBufferedRequest = {
-      chunk: chunk,
-      encoding: encoding,
-      isBuf: isBuf,
-      callback: cb,
-      next: null
-    };
-    if (last) {
-      last.next = state.lastBufferedRequest;
-    } else {
-      state.bufferedRequest = state.lastBufferedRequest;
-    }
-    state.bufferedRequestCount += 1;
-  } else {
-    doWrite(stream, state, false, len, chunk, encoding, cb);
-  }
-
-  return ret;
-}
-
-function doWrite(stream, state, writev, len, chunk, encoding, cb) {
-  state.writelen = len;
-  state.writecb = cb;
-  state.writing = true;
-  state.sync = true;
-  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
-  state.sync = false;
-}
-
-function onwriteError(stream, state, sync, er, cb) {
-  --state.pendingcb;
-
-  if (sync) {
-    // defer the callback if we are being called synchronously
-    // to avoid piling up things on the stack
-    pna.nextTick(cb, er);
-    // this can emit finish, and it will always happen
-    // after error
-    pna.nextTick(finishMaybe, stream, state);
-    stream._writableState.errorEmitted = true;
-    stream.emit('error', er);
-  } else {
-    // the caller expect this to happen before if
-    // it is async
-    cb(er);
-    stream._writableState.errorEmitted = true;
-    stream.emit('error', er);
-    // this can emit finish, but finish must
-    // always follow error
-    finishMaybe(stream, state);
-  }
-}
-
-function onwriteStateUpdate(state) {
-  state.writing = false;
-  state.writecb = null;
-  state.length -= state.writelen;
-  state.writelen = 0;
-}
-
-function onwrite(stream, er) {
-  var state = stream._writableState;
-  var sync = state.sync;
-  var cb = state.writecb;
-
-  onwriteStateUpdate(state);
-
-  if (er) onwriteError(stream, state, sync, er, cb);else {
-    // Check if we're actually ready to finish, but don't emit yet
-    var finished = needFinish(state);
-
-    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
-      clearBuffer(stream, state);
-    }
-
-    if (sync) {
-      /*<replacement>*/
-      asyncWrite(afterWrite, stream, state, finished, cb);
-      /*</replacement>*/
-    } else {
-      afterWrite(stream, state, finished, cb);
-    }
-  }
-}
-
-function afterWrite(stream, state, finished, cb) {
-  if (!finished) onwriteDrain(stream, state);
-  state.pendingcb--;
-  cb();
-  finishMaybe(stream, state);
-}
-
-// Must force callback to be called on nextTick, so that we don't
-// emit 'drain' before the write() consumer gets the 'false' return
-// value, and has a chance to attach a 'drain' listener.
-function onwriteDrain(stream, state) {
-  if (state.length === 0 && state.needDrain) {
-    state.needDrain = false;
-    stream.emit('drain');
-  }
-}
-
-// if there's something in the buffer waiting, then process it
-function clearBuffer(stream, state) {
-  state.bufferProcessing = true;
-  var entry = state.bufferedRequest;
-
-  if (stream._writev && entry && entry.next) {
-    // Fast case, write everything using _writev()
-    var l = state.bufferedRequestCount;
-    var buffer = new Array(l);
-    var holder = state.corkedRequestsFree;
-    holder.entry = entry;
-
-    var count = 0;
-    var allBuffers = true;
-    while (entry) {
-      buffer[count] = entry;
-      if (!entry.isBuf) allBuffers = false;
-      entry = entry.next;
-      count += 1;
-    }
-    buffer.allBuffers = allBuffers;
-
-    doWrite(stream, state, true, state.length, buffer, '', holder.finish);
-
-    // doWrite is almost always async, defer these to save a bit of time
-    // as the hot path ends with doWrite
-    state.pendingcb++;
-    state.lastBufferedRequest = null;
-    if (holder.next) {
-      state.corkedRequestsFree = holder.next;
-      holder.next = null;
-    } else {
-      state.corkedRequestsFree = new CorkedRequest(state);
-    }
-    state.bufferedRequestCount = 0;
-  } else {
-    // Slow case, write chunks one-by-one
-    while (entry) {
-      var chunk = entry.chunk;
-      var encoding = entry.encoding;
-      var cb = entry.callback;
-      var len = state.objectMode ? 1 : chunk.length;
-
-      doWrite(stream, state, false, len, chunk, encoding, cb);
-      entry = entry.next;
-      state.bufferedRequestCount--;
-      // if we didn't call the onwrite immediately, then
-      // it means that we need to wait until it does.
-      // also, that means that the chunk and cb are currently
-      // being processed, so move the buffer counter past them.
-      if (state.writing) {
-        break;
-      }
-    }
-
-    if (entry === null) state.lastBufferedRequest = null;
-  }
-
-  state.bufferedRequest = entry;
-  state.bufferProcessing = false;
-}
-
-Writable.prototype._write = function (chunk, encoding, cb) {
-  cb(new Error('_write() is not implemented'));
-};
-
-Writable.prototype._writev = null;
-
-Writable.prototype.end = function (chunk, encoding, cb) {
-  var state = this._writableState;
-
-  if (typeof chunk === 'function') {
-    cb = chunk;
-    chunk = null;
-    encoding = null;
-  } else if (typeof encoding === 'function') {
-    cb = encoding;
-    encoding = null;
-  }
-
-  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
-
-  // .end() fully uncorks
-  if (state.corked) {
-    state.corked = 1;
-    this.uncork();
-  }
-
-  // ignore unnecessary end() calls.
-  if (!state.ending && !state.finished) endWritable(this, state, cb);
-};
-
-function needFinish(state) {
-  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
-}
-function callFinal(stream, state) {
-  stream._final(function (err) {
-    state.pendingcb--;
-    if (err) {
-      stream.emit('error', err);
-    }
-    state.prefinished = true;
-    stream.emit('prefinish');
-    finishMaybe(stream, state);
-  });
-}
-function prefinish(stream, state) {
-  if (!state.prefinished && !state.finalCalled) {
-    if (typeof stream._final === 'function') {
-      state.pendingcb++;
-      state.finalCalled = true;
-      pna.nextTick(callFinal, stream, state);
-    } else {
-      state.prefinished = true;
-      stream.emit('prefinish');
-    }
-  }
-}
-
-function finishMaybe(stream, state) {
-  var need = needFinish(state);
-  if (need) {
-    prefinish(stream, state);
-    if (state.pendingcb === 0) {
-      state.finished = true;
-      stream.emit('finish');
-    }
-  }
-  return need;
-}
-
-function endWritable(stream, state, cb) {
-  state.ending = true;
-  finishMaybe(stream, state);
-  if (cb) {
-    if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);
-  }
-  state.ended = true;
-  stream.writable = false;
-}
-
-function onCorkedFinish(corkReq, state, err) {
-  var entry = corkReq.entry;
-  corkReq.entry = null;
-  while (entry) {
-    var cb = entry.callback;
-    state.pendingcb--;
-    cb(err);
-    entry = entry.next;
-  }
-  if (state.corkedRequestsFree) {
-    state.corkedRequestsFree.next = corkReq;
-  } else {
-    state.corkedRequestsFree = corkReq;
-  }
-}
-
-Object.defineProperty(Writable.prototype, 'destroyed', {
-  get: function () {
-    if (this._writableState === undefined) {
-      return false;
-    }
-    return this._writableState.destroyed;
-  },
-  set: function (value) {
-    // we ignore the value if the stream
-    // has not been initialized yet
-    if (!this._writableState) {
-      return;
-    }
-
-    // backward compatibility, the user is explicitly
-    // managing destroyed
-    this._writableState.destroyed = value;
-  }
-});
-
-Writable.prototype.destroy = destroyImpl.destroy;
-Writable.prototype._undestroy = destroyImpl.undestroy;
-Writable.prototype._destroy = function (err, cb) {
-  this.end();
-  cb(err);
-};
\ No newline at end of file
diff --git a/templetes/node_modules/redux/src/utils/actionTypes.js b/templetes/node_modules/redux/src/utils/actionTypes.js
deleted file mode 100644
index 0d7d023d..00000000
--- a/templetes/node_modules/redux/src/utils/actionTypes.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * These are private action types reserved by Redux.
- * For any unknown actions, you must return the current state.
- * If the current state is undefined, you must return the initial state.
- * Do not reference these action types directly in your code.
- */
-
-const randomString = () =>
-  Math.random()
-    .toString(36)
-    .substring(7)
-    .split('')
-    .join('.')
-
-const ActionTypes = {
-  INIT: `@@redux/INIT${randomString()}`,
-  REPLACE: `@@redux/REPLACE${randomString()}`,
-  PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`
-}
-
-export default ActionTypes
diff --git a/templetes/node_modules/sockjs-client/lib/transport/browser/abstract-xhr.js b/templetes/node_modules/sockjs-client/lib/transport/browser/abstract-xhr.js
deleted file mode 100644
index ae04862e..00000000
--- a/templetes/node_modules/sockjs-client/lib/transport/browser/abstract-xhr.js
+++ /dev/null
@@ -1,193 +0,0 @@
-'use strict';
-
-var EventEmitter = require('events').EventEmitter
-  , inherits = require('inherits')
-  , utils = require('../../utils/event')
-  , urlUtils = require('../../utils/url')
-  , XHR = global.XMLHttpRequest
-  ;
-
-var debug = function() {};
-if (process.env.NODE_ENV !== 'production') {
-  debug = require('debug')('sockjs-client:browser:xhr');
-}
-
-function AbstractXHRObject(method, url, payload, opts) {
-  debug(method, url);
-  var self = this;
-  EventEmitter.call(this);
-
-  setTimeout(function () {
-    self._start(method, url, payload, opts);
-  }, 0);
-}
-
-inherits(AbstractXHRObject, EventEmitter);
-
-AbstractXHRObject.prototype._start = function(method, url, payload, opts) {
-  var self = this;
-
-  try {
-    this.xhr = new XHR();
-  } catch (x) {
-    // intentionally empty
-  }
-
-  if (!this.xhr) {
-    debug('no xhr');
-    this.emit('finish', 0, 'no xhr support');
-    this._cleanup();
-    return;
-  }
-
-  // several browsers cache POSTs
-  url = urlUtils.addQuery(url, 't=' + (+new Date()));
-
-  // Explorer tends to keep connection open, even after the
-  // tab gets closed: http://bugs.jquery.com/ticket/5280
-  this.unloadRef = utils.unloadAdd(function() {
-    debug('unload cleanup');
-    self._cleanup(true);
-  });
-  try {
-    this.xhr.open(method, url, true);
-    if (this.timeout && 'timeout' in this.xhr) {
-      this.xhr.timeout = this.timeout;
-      this.xhr.ontimeout = function() {
-        debug('xhr timeout');
-        self.emit('finish', 0, '');
-        self._cleanup(false);
-      };
-    }
-  } catch (e) {
-    debug('exception', e);
-    // IE raises an exception on wrong port.
-    this.emit('finish', 0, '');
-    this._cleanup(false);
-    return;
-  }
-
-  if ((!opts || !opts.noCredentials) && AbstractXHRObject.supportsCORS) {
-    debug('withCredentials');
-    // Mozilla docs says https://developer.mozilla.org/en/XMLHttpRequest :
-    // "This never affects same-site requests."
-
-    this.xhr.withCredentials = true;
-  }
-  if (opts && opts.headers) {
-    for (var key in opts.headers) {
-      this.xhr.setRequestHeader(key, opts.headers[key]);
-    }
-  }
-
-  this.xhr.onreadystatechange = function() {
-    if (self.xhr) {
-      var x = self.xhr;
-      var text, status;
-      debug('readyState', x.readyState);
-      switch (x.readyState) {
-      case 3:
-        // IE doesn't like peeking into responseText or status
-        // on Microsoft.XMLHTTP and readystate=3
-        try {
-          status = x.status;
-          text = x.responseText;
-        } catch (e) {
-          // intentionally empty
-        }
-        debug('status', status);
-        // IE returns 1223 for 204: http://bugs.jquery.com/ticket/1450
-        if (status === 1223) {
-          status = 204;
-        }
-
-        // IE does return readystate == 3 for 404 answers.
-        if (status === 200 && text && text.length > 0) {
-          debug('chunk');
-          self.emit('chunk', status, text);
-        }
-        break;
-      case 4:
-        status = x.status;
-        debug('status', status);
-        // IE returns 1223 for 204: http://bugs.jquery.com/ticket/1450
-        if (status === 1223) {
-          status = 204;
-        }
-        // IE returns this for a bad port
-        // http://msdn.microsoft.com/en-us/library/windows/desktop/aa383770(v=vs.85).aspx
-        if (status === 12005 || status === 12029) {
-          status = 0;
-        }
-
-        debug('finish', status, x.responseText);
-        self.emit('finish', status, x.responseText);
-        self._cleanup(false);
-        break;
-      }
-    }
-  };
-
-  try {
-    self.xhr.send(payload);
-  } catch (e) {
-    self.emit('finish', 0, '');
-    self._cleanup(false);
-  }
-};
-
-AbstractXHRObject.prototype._cleanup = function(abort) {
-  debug('cleanup');
-  if (!this.xhr) {
-    return;
-  }
-  this.removeAllListeners();
-  utils.unloadDel(this.unloadRef);
-
-  // IE needs this field to be a function
-  this.xhr.onreadystatechange = function() {};
-  if (this.xhr.ontimeout) {
-    this.xhr.ontimeout = null;
-  }
-
-  if (abort) {
-    try {
-      this.xhr.abort();
-    } catch (x) {
-      // intentionally empty
-    }
-  }
-  this.unloadRef = this.xhr = null;
-};
-
-AbstractXHRObject.prototype.close = function() {
-  debug('close');
-  this._cleanup(true);
-};
-
-AbstractXHRObject.enabled = !!XHR;
-// override XMLHttpRequest for IE6/7
-// obfuscate to avoid firewalls
-var axo = ['Active'].concat('Object').join('X');
-if (!AbstractXHRObject.enabled && (axo in global)) {
-  debug('overriding xmlhttprequest');
-  XHR = function() {
-    try {
-      return new global[axo]('Microsoft.XMLHTTP');
-    } catch (e) {
-      return null;
-    }
-  };
-  AbstractXHRObject.enabled = !!new XHR();
-}
-
-var cors = false;
-try {
-  cors = 'withCredentials' in new XHR();
-} catch (ignored) {
-  // intentionally empty
-}
-
-AbstractXHRObject.supportsCORS = cors;
-
-module.exports = AbstractXHRObject;
diff --git a/templetes/node_modules/sockjs-client/lib/transport/lib/ajax-based.js b/templetes/node_modules/sockjs-client/lib/transport/lib/ajax-based.js
deleted file mode 100644
index 29e104e7..00000000
--- a/templetes/node_modules/sockjs-client/lib/transport/lib/ajax-based.js
+++ /dev/null
@@ -1,49 +0,0 @@
-'use strict';
-
-var inherits = require('inherits')
-  , urlUtils = require('../../utils/url')
-  , SenderReceiver = require('./sender-receiver')
-  ;
-
-var debug = function() {};
-if (process.env.NODE_ENV !== 'production') {
-  debug = require('debug')('sockjs-client:ajax-based');
-}
-
-function createAjaxSender(AjaxObject) {
-  return function(url, payload, callback) {
-    debug('create ajax sender', url, payload);
-    var opt = {};
-    if (typeof payload === 'string') {
-      opt.headers = {'Content-type': 'text/plain'};
-    }
-    var ajaxUrl = urlUtils.addPath(url, '/xhr_send');
-    var xo = new AjaxObject('POST', ajaxUrl, payload, opt);
-    xo.once('finish', function(status) {
-      debug('finish', status);
-      xo = null;
-
-      if (status !== 200 && status !== 204) {
-        return callback(new Error('http status ' + status));
-      }
-      callback();
-    });
-    return function() {
-      debug('abort');
-      xo.close();
-      xo = null;
-
-      var err = new Error('Aborted');
-      err.code = 1000;
-      callback(err);
-    };
-  };
-}
-
-function AjaxBasedTransport(transUrl, urlSuffix, Receiver, AjaxObject) {
-  SenderReceiver.call(this, transUrl, urlSuffix, createAjaxSender(AjaxObject), Receiver, AjaxObject);
-}
-
-inherits(AjaxBasedTransport, SenderReceiver);
-
-module.exports = AjaxBasedTransport;
diff --git a/templetes/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_duplex.js b/templetes/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_duplex.js
deleted file mode 100644
index 67525192..00000000
--- a/templetes/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_duplex.js
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-// a duplex stream is just a stream that is both readable and writable.
-// Since JS doesn't have multiple prototypal inheritance, this class
-// prototypally inherits from Readable, and then parasitically from
-// Writable.
-'use strict';
-/*<replacement>*/
-
-var objectKeys = Object.keys || function (obj) {
-  var keys = [];
-
-  for (var key in obj) {
-    keys.push(key);
-  }
-
-  return keys;
-};
-/*</replacement>*/
-
-
-module.exports = Duplex;
-
-var Readable = require('./_stream_readable');
-
-var Writable = require('./_stream_writable');
-
-require('inherits')(Duplex, Readable);
-
-{
-  // Allow the keys array to be GC'ed.
-  var keys = objectKeys(Writable.prototype);
-
-  for (var v = 0; v < keys.length; v++) {
-    var method = keys[v];
-    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
-  }
-}
-
-function Duplex(options) {
-  if (!(this instanceof Duplex)) return new Duplex(options);
-  Readable.call(this, options);
-  Writable.call(this, options);
-  this.allowHalfOpen = true;
-
-  if (options) {
-    if (options.readable === false) this.readable = false;
-    if (options.writable === false) this.writable = false;
-
-    if (options.allowHalfOpen === false) {
-      this.allowHalfOpen = false;
-      this.once('end', onend);
-    }
-  }
-}
-
-Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function get() {
-    return this._writableState.highWaterMark;
-  }
-});
-Object.defineProperty(Duplex.prototype, 'writableBuffer', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function get() {
-    return this._writableState && this._writableState.getBuffer();
-  }
-});
-Object.defineProperty(Duplex.prototype, 'writableLength', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function get() {
-    return this._writableState.length;
-  }
-}); // the no-half-open enforcer
-
-function onend() {
-  // If the writable side ended, then we're ok.
-  if (this._writableState.ended) return; // no more data can be written.
-  // But allow more writes to happen in this tick.
-
-  process.nextTick(onEndNT, this);
-}
-
-function onEndNT(self) {
-  self.end();
-}
-
-Object.defineProperty(Duplex.prototype, 'destroyed', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function get() {
-    if (this._readableState === undefined || this._writableState === undefined) {
-      return false;
-    }
-
-    return this._readableState.destroyed && this._writableState.destroyed;
-  },
-  set: function set(value) {
-    // we ignore the value if the stream
-    // has not been initialized yet
-    if (this._readableState === undefined || this._writableState === undefined) {
-      return;
-    } // backward compatibility, the user is explicitly
-    // managing destroyed
-
-
-    this._readableState.destroyed = value;
-    this._writableState.destroyed = value;
-  }
-});
\ No newline at end of file
diff --git a/templetes/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_passthrough.js b/templetes/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_passthrough.js
deleted file mode 100644
index 32e7414c..00000000
--- a/templetes/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_passthrough.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-// a passthrough stream.
-// basically just the most minimal sort of Transform stream.
-// Every written chunk gets output as-is.
-'use strict';
-
-module.exports = PassThrough;
-
-var Transform = require('./_stream_transform');
-
-require('inherits')(PassThrough, Transform);
-
-function PassThrough(options) {
-  if (!(this instanceof PassThrough)) return new PassThrough(options);
-  Transform.call(this, options);
-}
-
-PassThrough.prototype._transform = function (chunk, encoding, cb) {
-  cb(null, chunk);
-};
\ No newline at end of file
diff --git a/templetes/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_readable.js b/templetes/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_readable.js
deleted file mode 100644
index 192d4514..00000000
--- a/templetes/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_readable.js
+++ /dev/null
@@ -1,1124 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-'use strict';
-
-module.exports = Readable;
-/*<replacement>*/
-
-var Duplex;
-/*</replacement>*/
-
-Readable.ReadableState = ReadableState;
-/*<replacement>*/
-
-var EE = require('events').EventEmitter;
-
-var EElistenerCount = function EElistenerCount(emitter, type) {
-  return emitter.listeners(type).length;
-};
-/*</replacement>*/
-
-/*<replacement>*/
-
-
-var Stream = require('./internal/streams/stream');
-/*</replacement>*/
-
-
-var Buffer = require('buffer').Buffer;
-
-var OurUint8Array = global.Uint8Array || function () {};
-
-function _uint8ArrayToBuffer(chunk) {
-  return Buffer.from(chunk);
-}
-
-function _isUint8Array(obj) {
-  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
-}
-/*<replacement>*/
-
-
-var debugUtil = require('util');
-
-var debug;
-
-if (debugUtil && debugUtil.debuglog) {
-  debug = debugUtil.debuglog('stream');
-} else {
-  debug = function debug() {};
-}
-/*</replacement>*/
-
-
-var BufferList = require('./internal/streams/buffer_list');
-
-var destroyImpl = require('./internal/streams/destroy');
-
-var _require = require('./internal/streams/state'),
-    getHighWaterMark = _require.getHighWaterMark;
-
-var _require$codes = require('../errors').codes,
-    ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
-    ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,
-    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
-    ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.
-
-
-var StringDecoder;
-var createReadableStreamAsyncIterator;
-var from;
-
-require('inherits')(Readable, Stream);
-
-var errorOrDestroy = destroyImpl.errorOrDestroy;
-var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
-
-function prependListener(emitter, event, fn) {
-  // Sadly this is not cacheable as some libraries bundle their own
-  // event emitter implementation with them.
-  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any
-  // userland ones.  NEVER DO THIS. This is here only because this code needs
-  // to continue to work with older versions of Node.js that do not include
-  // the prependListener() method. The goal is to eventually remove this hack.
-
-  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
-}
-
-function ReadableState(options, stream, isDuplex) {
-  Duplex = Duplex || require('./_stream_duplex');
-  options = options || {}; // Duplex streams are both readable and writable, but share
-  // the same options object.
-  // However, some cases require setting options to different
-  // values for the readable and the writable sides of the duplex stream.
-  // These options can be provided separately as readableXXX and writableXXX.
-
-  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to
-  // make all the buffer merging and length checks go away
-
-  this.objectMode = !!options.objectMode;
-  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer
-  // Note: 0 is a valid value, means "don't call _read preemptively ever"
-
-  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the
-  // linked list can remove elements from the beginning faster than
-  // array.shift()
-
-  this.buffer = new BufferList();
-  this.length = 0;
-  this.pipes = null;
-  this.pipesCount = 0;
-  this.flowing = null;
-  this.ended = false;
-  this.endEmitted = false;
-  this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted
-  // immediately, or on a later tick.  We set this to true at first, because
-  // any actions that shouldn't happen until "later" should generally also
-  // not happen before the first read call.
-
-  this.sync = true; // whenever we return null, then we set a flag to say
-  // that we're awaiting a 'readable' event emission.
-
-  this.needReadable = false;
-  this.emittedReadable = false;
-  this.readableListening = false;
-  this.resumeScheduled = false;
-  this.paused = true; // Should close be emitted on destroy. Defaults to true.
-
-  this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')
-
-  this.autoDestroy = !!options.autoDestroy; // has it been destroyed
-
-  this.destroyed = false; // Crypto is kind of old and crusty.  Historically, its default string
-  // encoding is 'binary' so we have to make this configurable.
-  // Everything else in the universe uses 'utf8', though.
-
-  this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s
-
-  this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled
-
-  this.readingMore = false;
-  this.decoder = null;
-  this.encoding = null;
-
-  if (options.encoding) {
-    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
-    this.decoder = new StringDecoder(options.encoding);
-    this.encoding = options.encoding;
-  }
-}
-
-function Readable(options) {
-  Duplex = Duplex || require('./_stream_duplex');
-  if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside
-  // the ReadableState constructor, at least with V8 6.5
-
-  var isDuplex = this instanceof Duplex;
-  this._readableState = new ReadableState(options, this, isDuplex); // legacy
-
-  this.readable = true;
-
-  if (options) {
-    if (typeof options.read === 'function') this._read = options.read;
-    if (typeof options.destroy === 'function') this._destroy = options.destroy;
-  }
-
-  Stream.call(this);
-}
-
-Object.defineProperty(Readable.prototype, 'destroyed', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function get() {
-    if (this._readableState === undefined) {
-      return false;
-    }
-
-    return this._readableState.destroyed;
-  },
-  set: function set(value) {
-    // we ignore the value if the stream
-    // has not been initialized yet
-    if (!this._readableState) {
-      return;
-    } // backward compatibility, the user is explicitly
-    // managing destroyed
-
-
-    this._readableState.destroyed = value;
-  }
-});
-Readable.prototype.destroy = destroyImpl.destroy;
-Readable.prototype._undestroy = destroyImpl.undestroy;
-
-Readable.prototype._destroy = function (err, cb) {
-  cb(err);
-}; // Manually shove something into the read() buffer.
-// This returns true if the highWaterMark has not been hit yet,
-// similar to how Writable.write() returns true if you should
-// write() some more.
-
-
-Readable.prototype.push = function (chunk, encoding) {
-  var state = this._readableState;
-  var skipChunkCheck;
-
-  if (!state.objectMode) {
-    if (typeof chunk === 'string') {
-      encoding = encoding || state.defaultEncoding;
-
-      if (encoding !== state.encoding) {
-        chunk = Buffer.from(chunk, encoding);
-        encoding = '';
-      }
-
-      skipChunkCheck = true;
-    }
-  } else {
-    skipChunkCheck = true;
-  }
-
-  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
-}; // Unshift should *always* be something directly out of read()
-
-
-Readable.prototype.unshift = function (chunk) {
-  return readableAddChunk(this, chunk, null, true, false);
-};
-
-function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
-  debug('readableAddChunk', chunk);
-  var state = stream._readableState;
-
-  if (chunk === null) {
-    state.reading = false;
-    onEofChunk(stream, state);
-  } else {
-    var er;
-    if (!skipChunkCheck) er = chunkInvalid(state, chunk);
-
-    if (er) {
-      errorOrDestroy(stream, er);
-    } else if (state.objectMode || chunk && chunk.length > 0) {
-      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
-        chunk = _uint8ArrayToBuffer(chunk);
-      }
-
-      if (addToFront) {
-        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);
-      } else if (state.ended) {
-        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());
-      } else if (state.destroyed) {
-        return false;
-      } else {
-        state.reading = false;
-
-        if (state.decoder && !encoding) {
-          chunk = state.decoder.write(chunk);
-          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
-        } else {
-          addChunk(stream, state, chunk, false);
-        }
-      }
-    } else if (!addToFront) {
-      state.reading = false;
-      maybeReadMore(stream, state);
-    }
-  } // We can push more data if we are below the highWaterMark.
-  // Also, if we have no data yet, we can stand some more bytes.
-  // This is to work around cases where hwm=0, such as the repl.
-
-
-  return !state.ended && (state.length < state.highWaterMark || state.length === 0);
-}
-
-function addChunk(stream, state, chunk, addToFront) {
-  if (state.flowing && state.length === 0 && !state.sync) {
-    state.awaitDrain = 0;
-    stream.emit('data', chunk);
-  } else {
-    // update the buffer info.
-    state.length += state.objectMode ? 1 : chunk.length;
-    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
-    if (state.needReadable) emitReadable(stream);
-  }
-
-  maybeReadMore(stream, state);
-}
-
-function chunkInvalid(state, chunk) {
-  var er;
-
-  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
-    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);
-  }
-
-  return er;
-}
-
-Readable.prototype.isPaused = function () {
-  return this._readableState.flowing === false;
-}; // backwards compatibility.
-
-
-Readable.prototype.setEncoding = function (enc) {
-  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
-  var decoder = new StringDecoder(enc);
-  this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8
-
-  this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:
-
-  var p = this._readableState.buffer.head;
-  var content = '';
-
-  while (p !== null) {
-    content += decoder.write(p.data);
-    p = p.next;
-  }
-
-  this._readableState.buffer.clear();
-
-  if (content !== '') this._readableState.buffer.push(content);
-  this._readableState.length = content.length;
-  return this;
-}; // Don't raise the hwm > 1GB
-
-
-var MAX_HWM = 0x40000000;
-
-function computeNewHighWaterMark(n) {
-  if (n >= MAX_HWM) {
-    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.
-    n = MAX_HWM;
-  } else {
-    // Get the next highest power of 2 to prevent increasing hwm excessively in
-    // tiny amounts
-    n--;
-    n |= n >>> 1;
-    n |= n >>> 2;
-    n |= n >>> 4;
-    n |= n >>> 8;
-    n |= n >>> 16;
-    n++;
-  }
-
-  return n;
-} // This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-
-
-function howMuchToRead(n, state) {
-  if (n <= 0 || state.length === 0 && state.ended) return 0;
-  if (state.objectMode) return 1;
-
-  if (n !== n) {
-    // Only flow one buffer at a time
-    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
-  } // If we're asking for more than the current hwm, then raise the hwm.
-
-
-  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
-  if (n <= state.length) return n; // Don't have enough
-
-  if (!state.ended) {
-    state.needReadable = true;
-    return 0;
-  }
-
-  return state.length;
-} // you can override either this method, or the async _read(n) below.
-
-
-Readable.prototype.read = function (n) {
-  debug('read', n);
-  n = parseInt(n, 10);
-  var state = this._readableState;
-  var nOrig = n;
-  if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we
-  // already have a bunch of data in the buffer, then just trigger
-  // the 'readable' event and move on.
-
-  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {
-    debug('read: emitReadable', state.length, state.ended);
-    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
-    return null;
-  }
-
-  n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.
-
-  if (n === 0 && state.ended) {
-    if (state.length === 0) endReadable(this);
-    return null;
-  } // All the actual chunk generation logic needs to be
-  // *below* the call to _read.  The reason is that in certain
-  // synthetic stream cases, such as passthrough streams, _read
-  // may be a completely synchronous operation which may change
-  // the state of the read buffer, providing enough data when
-  // before there was *not* enough.
-  //
-  // So, the steps are:
-  // 1. Figure out what the state of things will be after we do
-  // a read from the buffer.
-  //
-  // 2. If that resulting state will trigger a _read, then call _read.
-  // Note that this may be asynchronous, or synchronous.  Yes, it is
-  // deeply ugly to write APIs this way, but that still doesn't mean
-  // that the Readable class should behave improperly, as streams are
-  // designed to be sync/async agnostic.
-  // Take note if the _read call is sync or async (ie, if the read call
-  // has returned yet), so that we know whether or not it's safe to emit
-  // 'readable' etc.
-  //
-  // 3. Actually pull the requested chunks out of the buffer and return.
-  // if we need a readable event, then we need to do some reading.
-
-
-  var doRead = state.needReadable;
-  debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some
-
-  if (state.length === 0 || state.length - n < state.highWaterMark) {
-    doRead = true;
-    debug('length less than watermark', doRead);
-  } // however, if we've ended, then there's no point, and if we're already
-  // reading, then it's unnecessary.
-
-
-  if (state.ended || state.reading) {
-    doRead = false;
-    debug('reading or ended', doRead);
-  } else if (doRead) {
-    debug('do read');
-    state.reading = true;
-    state.sync = true; // if the length is currently zero, then we *need* a readable event.
-
-    if (state.length === 0) state.needReadable = true; // call internal read method
-
-    this._read(state.highWaterMark);
-
-    state.sync = false; // If _read pushed data synchronously, then `reading` will be false,
-    // and we need to re-evaluate how much data we can return to the user.
-
-    if (!state.reading) n = howMuchToRead(nOrig, state);
-  }
-
-  var ret;
-  if (n > 0) ret = fromList(n, state);else ret = null;
-
-  if (ret === null) {
-    state.needReadable = state.length <= state.highWaterMark;
-    n = 0;
-  } else {
-    state.length -= n;
-    state.awaitDrain = 0;
-  }
-
-  if (state.length === 0) {
-    // If we have nothing in the buffer, then we want to know
-    // as soon as we *do* get something into the buffer.
-    if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.
-
-    if (nOrig !== n && state.ended) endReadable(this);
-  }
-
-  if (ret !== null) this.emit('data', ret);
-  return ret;
-};
-
-function onEofChunk(stream, state) {
-  debug('onEofChunk');
-  if (state.ended) return;
-
-  if (state.decoder) {
-    var chunk = state.decoder.end();
-
-    if (chunk && chunk.length) {
-      state.buffer.push(chunk);
-      state.length += state.objectMode ? 1 : chunk.length;
-    }
-  }
-
-  state.ended = true;
-
-  if (state.sync) {
-    // if we are sync, wait until next tick to emit the data.
-    // Otherwise we risk emitting data in the flow()
-    // the readable code triggers during a read() call
-    emitReadable(stream);
-  } else {
-    // emit 'readable' now to make sure it gets picked up.
-    state.needReadable = false;
-
-    if (!state.emittedReadable) {
-      state.emittedReadable = true;
-      emitReadable_(stream);
-    }
-  }
-} // Don't emit readable right away in sync mode, because this can trigger
-// another read() call => stack overflow.  This way, it might trigger
-// a nextTick recursion warning, but that's not so bad.
-
-
-function emitReadable(stream) {
-  var state = stream._readableState;
-  debug('emitReadable', state.needReadable, state.emittedReadable);
-  state.needReadable = false;
-
-  if (!state.emittedReadable) {
-    debug('emitReadable', state.flowing);
-    state.emittedReadable = true;
-    process.nextTick(emitReadable_, stream);
-  }
-}
-
-function emitReadable_(stream) {
-  var state = stream._readableState;
-  debug('emitReadable_', state.destroyed, state.length, state.ended);
-
-  if (!state.destroyed && (state.length || state.ended)) {
-    stream.emit('readable');
-    state.emittedReadable = false;
-  } // The stream needs another readable event if
-  // 1. It is not flowing, as the flow mechanism will take
-  //    care of it.
-  // 2. It is not ended.
-  // 3. It is below the highWaterMark, so we can schedule
-  //    another readable later.
-
-
-  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;
-  flow(stream);
-} // at this point, the user has presumably seen the 'readable' event,
-// and called read() to consume some data.  that may have triggered
-// in turn another _read(n) call, in which case reading = true if
-// it's in progress.
-// However, if we're not ended, or reading, and the length < hwm,
-// then go ahead and try to read some more preemptively.
-
-
-function maybeReadMore(stream, state) {
-  if (!state.readingMore) {
-    state.readingMore = true;
-    process.nextTick(maybeReadMore_, stream, state);
-  }
-}
-
-function maybeReadMore_(stream, state) {
-  // Attempt to read more data if we should.
-  //
-  // The conditions for reading more data are (one of):
-  // - Not enough data buffered (state.length < state.highWaterMark). The loop
-  //   is responsible for filling the buffer with enough data if such data
-  //   is available. If highWaterMark is 0 and we are not in the flowing mode
-  //   we should _not_ attempt to buffer any extra data. We'll get more data
-  //   when the stream consumer calls read() instead.
-  // - No data in the buffer, and the stream is in flowing mode. In this mode
-  //   the loop below is responsible for ensuring read() is called. Failing to
-  //   call read here would abort the flow and there's no other mechanism for
-  //   continuing the flow if the stream consumer has just subscribed to the
-  //   'data' event.
-  //
-  // In addition to the above conditions to keep reading data, the following
-  // conditions prevent the data from being read:
-  // - The stream has ended (state.ended).
-  // - There is already a pending 'read' operation (state.reading). This is a
-  //   case where the the stream has called the implementation defined _read()
-  //   method, but they are processing the call asynchronously and have _not_
-  //   called push() with new data. In this case we skip performing more
-  //   read()s. The execution ends in this method again after the _read() ends
-  //   up calling push() with more data.
-  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {
-    var len = state.length;
-    debug('maybeReadMore read 0');
-    stream.read(0);
-    if (len === state.length) // didn't get any data, stop spinning.
-      break;
-  }
-
-  state.readingMore = false;
-} // abstract method.  to be overridden in specific implementation classes.
-// call cb(er, data) where data is <= n in length.
-// for virtual (non-string, non-buffer) streams, "length" is somewhat
-// arbitrary, and perhaps not very meaningful.
-
-
-Readable.prototype._read = function (n) {
-  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));
-};
-
-Readable.prototype.pipe = function (dest, pipeOpts) {
-  var src = this;
-  var state = this._readableState;
-
-  switch (state.pipesCount) {
-    case 0:
-      state.pipes = dest;
-      break;
-
-    case 1:
-      state.pipes = [state.pipes, dest];
-      break;
-
-    default:
-      state.pipes.push(dest);
-      break;
-  }
-
-  state.pipesCount += 1;
-  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
-  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
-  var endFn = doEnd ? onend : unpipe;
-  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);
-  dest.on('unpipe', onunpipe);
-
-  function onunpipe(readable, unpipeInfo) {
-    debug('onunpipe');
-
-    if (readable === src) {
-      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
-        unpipeInfo.hasUnpiped = true;
-        cleanup();
-      }
-    }
-  }
-
-  function onend() {
-    debug('onend');
-    dest.end();
-  } // when the dest drains, it reduces the awaitDrain counter
-  // on the source.  This would be more elegant with a .once()
-  // handler in flow(), but adding and removing repeatedly is
-  // too slow.
-
-
-  var ondrain = pipeOnDrain(src);
-  dest.on('drain', ondrain);
-  var cleanedUp = false;
-
-  function cleanup() {
-    debug('cleanup'); // cleanup event handlers once the pipe is broken
-
-    dest.removeListener('close', onclose);
-    dest.removeListener('finish', onfinish);
-    dest.removeListener('drain', ondrain);
-    dest.removeListener('error', onerror);
-    dest.removeListener('unpipe', onunpipe);
-    src.removeListener('end', onend);
-    src.removeListener('end', unpipe);
-    src.removeListener('data', ondata);
-    cleanedUp = true; // if the reader is waiting for a drain event from this
-    // specific writer, then it would cause it to never start
-    // flowing again.
-    // So, if this is awaiting a drain, then we just call it now.
-    // If we don't know, then assume that we are waiting for one.
-
-    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
-  }
-
-  src.on('data', ondata);
-
-  function ondata(chunk) {
-    debug('ondata');
-    var ret = dest.write(chunk);
-    debug('dest.write', ret);
-
-    if (ret === false) {
-      // If the user unpiped during `dest.write()`, it is possible
-      // to get stuck in a permanently paused state if that write
-      // also returned false.
-      // => Check whether `dest` is still a piping destination.
-      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
-        debug('false write response, pause', state.awaitDrain);
-        state.awaitDrain++;
-      }
-
-      src.pause();
-    }
-  } // if the dest has an error, then stop piping into it.
-  // however, don't suppress the throwing behavior for this.
-
-
-  function onerror(er) {
-    debug('onerror', er);
-    unpipe();
-    dest.removeListener('error', onerror);
-    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);
-  } // Make sure our error handler is attached before userland ones.
-
-
-  prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.
-
-  function onclose() {
-    dest.removeListener('finish', onfinish);
-    unpipe();
-  }
-
-  dest.once('close', onclose);
-
-  function onfinish() {
-    debug('onfinish');
-    dest.removeListener('close', onclose);
-    unpipe();
-  }
-
-  dest.once('finish', onfinish);
-
-  function unpipe() {
-    debug('unpipe');
-    src.unpipe(dest);
-  } // tell the dest that it's being piped to
-
-
-  dest.emit('pipe', src); // start the flow if it hasn't been started already.
-
-  if (!state.flowing) {
-    debug('pipe resume');
-    src.resume();
-  }
-
-  return dest;
-};
-
-function pipeOnDrain(src) {
-  return function pipeOnDrainFunctionResult() {
-    var state = src._readableState;
-    debug('pipeOnDrain', state.awaitDrain);
-    if (state.awaitDrain) state.awaitDrain--;
-
-    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
-      state.flowing = true;
-      flow(src);
-    }
-  };
-}
-
-Readable.prototype.unpipe = function (dest) {
-  var state = this._readableState;
-  var unpipeInfo = {
-    hasUnpiped: false
-  }; // if we're not piping anywhere, then do nothing.
-
-  if (state.pipesCount === 0) return this; // just one destination.  most common case.
-
-  if (state.pipesCount === 1) {
-    // passed in one, but it's not the right one.
-    if (dest && dest !== state.pipes) return this;
-    if (!dest) dest = state.pipes; // got a match.
-
-    state.pipes = null;
-    state.pipesCount = 0;
-    state.flowing = false;
-    if (dest) dest.emit('unpipe', this, unpipeInfo);
-    return this;
-  } // slow case. multiple pipe destinations.
-
-
-  if (!dest) {
-    // remove all.
-    var dests = state.pipes;
-    var len = state.pipesCount;
-    state.pipes = null;
-    state.pipesCount = 0;
-    state.flowing = false;
-
-    for (var i = 0; i < len; i++) {
-      dests[i].emit('unpipe', this, {
-        hasUnpiped: false
-      });
-    }
-
-    return this;
-  } // try to find the right one.
-
-
-  var index = indexOf(state.pipes, dest);
-  if (index === -1) return this;
-  state.pipes.splice(index, 1);
-  state.pipesCount -= 1;
-  if (state.pipesCount === 1) state.pipes = state.pipes[0];
-  dest.emit('unpipe', this, unpipeInfo);
-  return this;
-}; // set up data events if they are asked for
-// Ensure readable listeners eventually get something
-
-
-Readable.prototype.on = function (ev, fn) {
-  var res = Stream.prototype.on.call(this, ev, fn);
-  var state = this._readableState;
-
-  if (ev === 'data') {
-    // update readableListening so that resume() may be a no-op
-    // a few lines down. This is needed to support once('readable').
-    state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused
-
-    if (state.flowing !== false) this.resume();
-  } else if (ev === 'readable') {
-    if (!state.endEmitted && !state.readableListening) {
-      state.readableListening = state.needReadable = true;
-      state.flowing = false;
-      state.emittedReadable = false;
-      debug('on readable', state.length, state.reading);
-
-      if (state.length) {
-        emitReadable(this);
-      } else if (!state.reading) {
-        process.nextTick(nReadingNextTick, this);
-      }
-    }
-  }
-
-  return res;
-};
-
-Readable.prototype.addListener = Readable.prototype.on;
-
-Readable.prototype.removeListener = function (ev, fn) {
-  var res = Stream.prototype.removeListener.call(this, ev, fn);
-
-  if (ev === 'readable') {
-    // We need to check if there is someone still listening to
-    // readable and reset the state. However this needs to happen
-    // after readable has been emitted but before I/O (nextTick) to
-    // support once('readable', fn) cycles. This means that calling
-    // resume within the same tick will have no
-    // effect.
-    process.nextTick(updateReadableListening, this);
-  }
-
-  return res;
-};
-
-Readable.prototype.removeAllListeners = function (ev) {
-  var res = Stream.prototype.removeAllListeners.apply(this, arguments);
-
-  if (ev === 'readable' || ev === undefined) {
-    // We need to check if there is someone still listening to
-    // readable and reset the state. However this needs to happen
-    // after readable has been emitted but before I/O (nextTick) to
-    // support once('readable', fn) cycles. This means that calling
-    // resume within the same tick will have no
-    // effect.
-    process.nextTick(updateReadableListening, this);
-  }
-
-  return res;
-};
-
-function updateReadableListening(self) {
-  var state = self._readableState;
-  state.readableListening = self.listenerCount('readable') > 0;
-
-  if (state.resumeScheduled && !state.paused) {
-    // flowing needs to be set to true now, otherwise
-    // the upcoming resume will not flow.
-    state.flowing = true; // crude way to check if we should resume
-  } else if (self.listenerCount('data') > 0) {
-    self.resume();
-  }
-}
-
-function nReadingNextTick(self) {
-  debug('readable nexttick read 0');
-  self.read(0);
-} // pause() and resume() are remnants of the legacy readable stream API
-// If the user uses them, then switch into old mode.
-
-
-Readable.prototype.resume = function () {
-  var state = this._readableState;
-
-  if (!state.flowing) {
-    debug('resume'); // we flow only if there is no one listening
-    // for readable, but we still have to call
-    // resume()
-
-    state.flowing = !state.readableListening;
-    resume(this, state);
-  }
-
-  state.paused = false;
-  return this;
-};
-
-function resume(stream, state) {
-  if (!state.resumeScheduled) {
-    state.resumeScheduled = true;
-    process.nextTick(resume_, stream, state);
-  }
-}
-
-function resume_(stream, state) {
-  debug('resume', state.reading);
-
-  if (!state.reading) {
-    stream.read(0);
-  }
-
-  state.resumeScheduled = false;
-  stream.emit('resume');
-  flow(stream);
-  if (state.flowing && !state.reading) stream.read(0);
-}
-
-Readable.prototype.pause = function () {
-  debug('call pause flowing=%j', this._readableState.flowing);
-
-  if (this._readableState.flowing !== false) {
-    debug('pause');
-    this._readableState.flowing = false;
-    this.emit('pause');
-  }
-
-  this._readableState.paused = true;
-  return this;
-};
-
-function flow(stream) {
-  var state = stream._readableState;
-  debug('flow', state.flowing);
-
-  while (state.flowing && stream.read() !== null) {
-    ;
-  }
-} // wrap an old-style stream as the async data source.
-// This is *not* part of the readable stream interface.
-// It is an ugly unfortunate mess of history.
-
-
-Readable.prototype.wrap = function (stream) {
-  var _this = this;
-
-  var state = this._readableState;
-  var paused = false;
-  stream.on('end', function () {
-    debug('wrapped end');
-
-    if (state.decoder && !state.ended) {
-      var chunk = state.decoder.end();
-      if (chunk && chunk.length) _this.push(chunk);
-    }
-
-    _this.push(null);
-  });
-  stream.on('data', function (chunk) {
-    debug('wrapped data');
-    if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode
-
-    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
-
-    var ret = _this.push(chunk);
-
-    if (!ret) {
-      paused = true;
-      stream.pause();
-    }
-  }); // proxy all the other methods.
-  // important when wrapping filters and duplexes.
-
-  for (var i in stream) {
-    if (this[i] === undefined && typeof stream[i] === 'function') {
-      this[i] = function methodWrap(method) {
-        return function methodWrapReturnFunction() {
-          return stream[method].apply(stream, arguments);
-        };
-      }(i);
-    }
-  } // proxy certain important events.
-
-
-  for (var n = 0; n < kProxyEvents.length; n++) {
-    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
-  } // when we try to consume some more bytes, simply unpause the
-  // underlying stream.
-
-
-  this._read = function (n) {
-    debug('wrapped _read', n);
-
-    if (paused) {
-      paused = false;
-      stream.resume();
-    }
-  };
-
-  return this;
-};
-
-if (typeof Symbol === 'function') {
-  Readable.prototype[Symbol.asyncIterator] = function () {
-    if (createReadableStreamAsyncIterator === undefined) {
-      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');
-    }
-
-    return createReadableStreamAsyncIterator(this);
-  };
-}
-
-Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function get() {
-    return this._readableState.highWaterMark;
-  }
-});
-Object.defineProperty(Readable.prototype, 'readableBuffer', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function get() {
-    return this._readableState && this._readableState.buffer;
-  }
-});
-Object.defineProperty(Readable.prototype, 'readableFlowing', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function get() {
-    return this._readableState.flowing;
-  },
-  set: function set(state) {
-    if (this._readableState) {
-      this._readableState.flowing = state;
-    }
-  }
-}); // exposed for testing purposes only.
-
-Readable._fromList = fromList;
-Object.defineProperty(Readable.prototype, 'readableLength', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function get() {
-    return this._readableState.length;
-  }
-}); // Pluck off n bytes from an array of buffers.
-// Length is the combined lengths of all the buffers in the list.
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-
-function fromList(n, state) {
-  // nothing buffered
-  if (state.length === 0) return null;
-  var ret;
-  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
-    // read it all, truncate the list
-    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);
-    state.buffer.clear();
-  } else {
-    // read part of list
-    ret = state.buffer.consume(n, state.decoder);
-  }
-  return ret;
-}
-
-function endReadable(stream) {
-  var state = stream._readableState;
-  debug('endReadable', state.endEmitted);
-
-  if (!state.endEmitted) {
-    state.ended = true;
-    process.nextTick(endReadableNT, state, stream);
-  }
-}
-
-function endReadableNT(state, stream) {
-  debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.
-
-  if (!state.endEmitted && state.length === 0) {
-    state.endEmitted = true;
-    stream.readable = false;
-    stream.emit('end');
-
-    if (state.autoDestroy) {
-      // In case of duplex streams we need a way to detect
-      // if the writable side is ready for autoDestroy as well
-      var wState = stream._writableState;
-
-      if (!wState || wState.autoDestroy && wState.finished) {
-        stream.destroy();
-      }
-    }
-  }
-}
-
-if (typeof Symbol === 'function') {
-  Readable.from = function (iterable, opts) {
-    if (from === undefined) {
-      from = require('./internal/streams/from');
-    }
-
-    return from(Readable, iterable, opts);
-  };
-}
-
-function indexOf(xs, x) {
-  for (var i = 0, l = xs.length; i < l; i++) {
-    if (xs[i] === x) return i;
-  }
-
-  return -1;
-}
\ No newline at end of file
diff --git a/templetes/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_transform.js b/templetes/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_transform.js
deleted file mode 100644
index 41a738c4..00000000
--- a/templetes/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_transform.js
+++ /dev/null
@@ -1,201 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-// a transform stream is a readable/writable stream where you do
-// something with the data.  Sometimes it's called a "filter",
-// but that's not a great name for it, since that implies a thing where
-// some bits pass through, and others are simply ignored.  (That would
-// be a valid example of a transform, of course.)
-//
-// While the output is causally related to the input, it's not a
-// necessarily symmetric or synchronous transformation.  For example,
-// a zlib stream might take multiple plain-text writes(), and then
-// emit a single compressed chunk some time in the future.
-//
-// Here's how this works:
-//
-// The Transform stream has all the aspects of the readable and writable
-// stream classes.  When you write(chunk), that calls _write(chunk,cb)
-// internally, and returns false if there's a lot of pending writes
-// buffered up.  When you call read(), that calls _read(n) until
-// there's enough pending readable data buffered up.
-//
-// In a transform stream, the written data is placed in a buffer.  When
-// _read(n) is called, it transforms the queued up data, calling the
-// buffered _write cb's as it consumes chunks.  If consuming a single
-// written chunk would result in multiple output chunks, then the first
-// outputted bit calls the readcb, and subsequent chunks just go into
-// the read buffer, and will cause it to emit 'readable' if necessary.
-//
-// This way, back-pressure is actually determined by the reading side,
-// since _read has to be called to start processing a new chunk.  However,
-// a pathological inflate type of transform can cause excessive buffering
-// here.  For example, imagine a stream where every byte of input is
-// interpreted as an integer from 0-255, and then results in that many
-// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in
-// 1kb of data being output.  In this case, you could write a very small
-// amount of input, and end up with a very large amount of output.  In
-// such a pathological inflating mechanism, there'd be no way to tell
-// the system to stop doing the transform.  A single 4MB write could
-// cause the system to run out of memory.
-//
-// However, even in such a pathological case, only a single written chunk
-// would be consumed, and then the rest would wait (un-transformed) until
-// the results of the previous transformed chunk were consumed.
-'use strict';
-
-module.exports = Transform;
-
-var _require$codes = require('../errors').codes,
-    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
-    ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
-    ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,
-    ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;
-
-var Duplex = require('./_stream_duplex');
-
-require('inherits')(Transform, Duplex);
-
-function afterTransform(er, data) {
-  var ts = this._transformState;
-  ts.transforming = false;
-  var cb = ts.writecb;
-
-  if (cb === null) {
-    return this.emit('error', new ERR_MULTIPLE_CALLBACK());
-  }
-
-  ts.writechunk = null;
-  ts.writecb = null;
-  if (data != null) // single equals check for both `null` and `undefined`
-    this.push(data);
-  cb(er);
-  var rs = this._readableState;
-  rs.reading = false;
-
-  if (rs.needReadable || rs.length < rs.highWaterMark) {
-    this._read(rs.highWaterMark);
-  }
-}
-
-function Transform(options) {
-  if (!(this instanceof Transform)) return new Transform(options);
-  Duplex.call(this, options);
-  this._transformState = {
-    afterTransform: afterTransform.bind(this),
-    needTransform: false,
-    transforming: false,
-    writecb: null,
-    writechunk: null,
-    writeencoding: null
-  }; // start out asking for a readable event once data is transformed.
-
-  this._readableState.needReadable = true; // we have implemented the _read method, and done the other things
-  // that Readable wants before the first _read call, so unset the
-  // sync guard flag.
-
-  this._readableState.sync = false;
-
-  if (options) {
-    if (typeof options.transform === 'function') this._transform = options.transform;
-    if (typeof options.flush === 'function') this._flush = options.flush;
-  } // When the writable side finishes, then flush out anything remaining.
-
-
-  this.on('prefinish', prefinish);
-}
-
-function prefinish() {
-  var _this = this;
-
-  if (typeof this._flush === 'function' && !this._readableState.destroyed) {
-    this._flush(function (er, data) {
-      done(_this, er, data);
-    });
-  } else {
-    done(this, null, null);
-  }
-}
-
-Transform.prototype.push = function (chunk, encoding) {
-  this._transformState.needTransform = false;
-  return Duplex.prototype.push.call(this, chunk, encoding);
-}; // This is the part where you do stuff!
-// override this function in implementation classes.
-// 'chunk' is an input chunk.
-//
-// Call `push(newChunk)` to pass along transformed output
-// to the readable side.  You may call 'push' zero or more times.
-//
-// Call `cb(err)` when you are done with this chunk.  If you pass
-// an error, then that'll put the hurt on the whole operation.  If you
-// never call cb(), then you'll never get another chunk.
-
-
-Transform.prototype._transform = function (chunk, encoding, cb) {
-  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));
-};
-
-Transform.prototype._write = function (chunk, encoding, cb) {
-  var ts = this._transformState;
-  ts.writecb = cb;
-  ts.writechunk = chunk;
-  ts.writeencoding = encoding;
-
-  if (!ts.transforming) {
-    var rs = this._readableState;
-    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
-  }
-}; // Doesn't matter what the args are here.
-// _transform does all the work.
-// That we got here means that the readable side wants more data.
-
-
-Transform.prototype._read = function (n) {
-  var ts = this._transformState;
-
-  if (ts.writechunk !== null && !ts.transforming) {
-    ts.transforming = true;
-
-    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
-  } else {
-    // mark that we need a transform, so that any data that comes in
-    // will get processed, now that we've asked for it.
-    ts.needTransform = true;
-  }
-};
-
-Transform.prototype._destroy = function (err, cb) {
-  Duplex.prototype._destroy.call(this, err, function (err2) {
-    cb(err2);
-  });
-};
-
-function done(stream, er, data) {
-  if (er) return stream.emit('error', er);
-  if (data != null) // single equals check for both `null` and `undefined`
-    stream.push(data); // TODO(BridgeAR): Write a test for these two error cases
-  // if there's nothing in the write buffer, then that means
-  // that nothing more will ever be provided
-
-  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();
-  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();
-  return stream.push(null);
-}
\ No newline at end of file
diff --git a/templetes/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_writable.js b/templetes/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_writable.js
deleted file mode 100644
index a2634d7c..00000000
--- a/templetes/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_writable.js
+++ /dev/null
@@ -1,697 +0,0 @@
-// Copyright Joyent, Inc. and other Node 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.
-// A bit simpler than readable streams.
-// Implement an async ._write(chunk, encoding, cb), and it'll handle all
-// the drain event emission and buffering.
-'use strict';
-
-module.exports = Writable;
-/* <replacement> */
-
-function WriteReq(chunk, encoding, cb) {
-  this.chunk = chunk;
-  this.encoding = encoding;
-  this.callback = cb;
-  this.next = null;
-} // It seems a linked list but it is not
-// there will be only 2 of these for each stream
-
-
-function CorkedRequest(state) {
-  var _this = this;
-
-  this.next = null;
-  this.entry = null;
-
-  this.finish = function () {
-    onCorkedFinish(_this, state);
-  };
-}
-/* </replacement> */
-
-/*<replacement>*/
-
-
-var Duplex;
-/*</replacement>*/
-
-Writable.WritableState = WritableState;
-/*<replacement>*/
-
-var internalUtil = {
-  deprecate: require('util-deprecate')
-};
-/*</replacement>*/
-
-/*<replacement>*/
-
-var Stream = require('./internal/streams/stream');
-/*</replacement>*/
-
-
-var Buffer = require('buffer').Buffer;
-
-var OurUint8Array = global.Uint8Array || function () {};
-
-function _uint8ArrayToBuffer(chunk) {
-  return Buffer.from(chunk);
-}
-
-function _isUint8Array(obj) {
-  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
-}
-
-var destroyImpl = require('./internal/streams/destroy');
-
-var _require = require('./internal/streams/state'),
-    getHighWaterMark = _require.getHighWaterMark;
-
-var _require$codes = require('../errors').codes,
-    ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
-    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
-    ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
-    ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,
-    ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,
-    ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,
-    ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,
-    ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;
-
-var errorOrDestroy = destroyImpl.errorOrDestroy;
-
-require('inherits')(Writable, Stream);
-
-function nop() {}
-
-function WritableState(options, stream, isDuplex) {
-  Duplex = Duplex || require('./_stream_duplex');
-  options = options || {}; // Duplex streams are both readable and writable, but share
-  // the same options object.
-  // However, some cases require setting options to different
-  // values for the readable and the writable sides of the duplex stream,
-  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.
-
-  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream
-  // contains buffers or objects.
-
-  this.objectMode = !!options.objectMode;
-  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false
-  // Note: 0 is a valid value, means that we always return false if
-  // the entire buffer is not flushed immediately on write()
-
-  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called
-
-  this.finalCalled = false; // drain event flag.
-
-  this.needDrain = false; // at the start of calling end()
-
-  this.ending = false; // when end() has been called, and returned
-
-  this.ended = false; // when 'finish' is emitted
-
-  this.finished = false; // has it been destroyed
-
-  this.destroyed = false; // should we decode strings into buffers before passing to _write?
-  // this is here so that some node-core streams can optimize string
-  // handling at a lower level.
-
-  var noDecode = options.decodeStrings === false;
-  this.decodeStrings = !noDecode; // Crypto is kind of old and crusty.  Historically, its default string
-  // encoding is 'binary' so we have to make this configurable.
-  // Everything else in the universe uses 'utf8', though.
-
-  this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement
-  // of how much we're waiting to get pushed to some underlying
-  // socket or file.
-
-  this.length = 0; // a flag to see when we're in the middle of a write.
-
-  this.writing = false; // when true all writes will be buffered until .uncork() call
-
-  this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,
-  // or on a later tick.  We set this to true at first, because any
-  // actions that shouldn't happen until "later" should generally also
-  // not happen before the first write call.
-
-  this.sync = true; // a flag to know if we're processing previously buffered items, which
-  // may call the _write() callback in the same tick, so that we don't
-  // end up in an overlapped onwrite situation.
-
-  this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)
-
-  this.onwrite = function (er) {
-    onwrite(stream, er);
-  }; // the callback that the user supplies to write(chunk,encoding,cb)
-
-
-  this.writecb = null; // the amount that is being written when _write is called.
-
-  this.writelen = 0;
-  this.bufferedRequest = null;
-  this.lastBufferedRequest = null; // number of pending user-supplied write callbacks
-  // this must be 0 before 'finish' can be emitted
-
-  this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs
-  // This is relevant for synchronous Transform streams
-
-  this.prefinished = false; // True if the error was already emitted and should not be thrown again
-
-  this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.
-
-  this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')
-
-  this.autoDestroy = !!options.autoDestroy; // count buffered requests
-
-  this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always
-  // one allocated and free to use, and we maintain at most two
-
-  this.corkedRequestsFree = new CorkedRequest(this);
-}
-
-WritableState.prototype.getBuffer = function getBuffer() {
-  var current = this.bufferedRequest;
-  var out = [];
-
-  while (current) {
-    out.push(current);
-    current = current.next;
-  }
-
-  return out;
-};
-
-(function () {
-  try {
-    Object.defineProperty(WritableState.prototype, 'buffer', {
-      get: internalUtil.deprecate(function writableStateBufferGetter() {
-        return this.getBuffer();
-      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
-    });
-  } catch (_) {}
-})(); // Test _writableState for inheritance to account for Duplex streams,
-// whose prototype chain only points to Readable.
-
-
-var realHasInstance;
-
-if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
-  realHasInstance = Function.prototype[Symbol.hasInstance];
-  Object.defineProperty(Writable, Symbol.hasInstance, {
-    value: function value(object) {
-      if (realHasInstance.call(this, object)) return true;
-      if (this !== Writable) return false;
-      return object && object._writableState instanceof WritableState;
-    }
-  });
-} else {
-  realHasInstance = function realHasInstance(object) {
-    return object instanceof this;
-  };
-}
-
-function Writable(options) {
-  Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.
-  // `realHasInstance` is necessary because using plain `instanceof`
-  // would return false, as no `_writableState` property is attached.
-  // Trying to use the custom `instanceof` for Writable here will also break the
-  // Node.js LazyTransform implementation, which has a non-trivial getter for
-  // `_writableState` that would lead to infinite recursion.
-  // Checking for a Stream.Duplex instance is faster here instead of inside
-  // the WritableState constructor, at least with V8 6.5
-
-  var isDuplex = this instanceof Duplex;
-  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);
-  this._writableState = new WritableState(options, this, isDuplex); // legacy.
-
-  this.writable = true;
-
-  if (options) {
-    if (typeof options.write === 'function') this._write = options.write;
-    if (typeof options.writev === 'function') this._writev = options.writev;
-    if (typeof options.destroy === 'function') this._destroy = options.destroy;
-    if (typeof options.final === 'function') this._final = options.final;
-  }
-
-  Stream.call(this);
-} // Otherwise people can pipe Writable streams, which is just wrong.
-
-
-Writable.prototype.pipe = function () {
-  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());
-};
-
-function writeAfterEnd(stream, cb) {
-  var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb
-
-  errorOrDestroy(stream, er);
-  process.nextTick(cb, er);
-} // Checks that a user-supplied chunk is valid, especially for the particular
-// mode the stream is in. Currently this means that `null` is never accepted
-// and undefined/non-string values are only allowed in object mode.
-
-
-function validChunk(stream, state, chunk, cb) {
-  var er;
-
-  if (chunk === null) {
-    er = new ERR_STREAM_NULL_VALUES();
-  } else if (typeof chunk !== 'string' && !state.objectMode) {
-    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);
-  }
-
-  if (er) {
-    errorOrDestroy(stream, er);
-    process.nextTick(cb, er);
-    return false;
-  }
-
-  return true;
-}
-
-Writable.prototype.write = function (chunk, encoding, cb) {
-  var state = this._writableState;
-  var ret = false;
-
-  var isBuf = !state.objectMode && _isUint8Array(chunk);
-
-  if (isBuf && !Buffer.isBuffer(chunk)) {
-    chunk = _uint8ArrayToBuffer(chunk);
-  }
-
-  if (typeof encoding === 'function') {
-    cb = encoding;
-    encoding = null;
-  }
-
-  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
-  if (typeof cb !== 'function') cb = nop;
-  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
-    state.pendingcb++;
-    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
-  }
-  return ret;
-};
-
-Writable.prototype.cork = function () {
-  this._writableState.corked++;
-};
-
-Writable.prototype.uncork = function () {
-  var state = this._writableState;
-
-  if (state.corked) {
-    state.corked--;
-    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
-  }
-};
-
-Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
-  // node::ParseEncoding() requires lower case.
-  if (typeof encoding === 'string') encoding = encoding.toLowerCase();
-  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);
-  this._writableState.defaultEncoding = encoding;
-  return this;
-};
-
-Object.defineProperty(Writable.prototype, 'writableBuffer', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function get() {
-    return this._writableState && this._writableState.getBuffer();
-  }
-});
-
-function decodeChunk(state, chunk, encoding) {
-  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
-    chunk = Buffer.from(chunk, encoding);
-  }
-
-  return chunk;
-}
-
-Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function get() {
-    return this._writableState.highWaterMark;
-  }
-}); // if we're already writing something, then just put this
-// in the queue, and wait our turn.  Otherwise, call _write
-// If we return false, then we need a drain event, so set that flag.
-
-function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
-  if (!isBuf) {
-    var newChunk = decodeChunk(state, chunk, encoding);
-
-    if (chunk !== newChunk) {
-      isBuf = true;
-      encoding = 'buffer';
-      chunk = newChunk;
-    }
-  }
-
-  var len = state.objectMode ? 1 : chunk.length;
-  state.length += len;
-  var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.
-
-  if (!ret) state.needDrain = true;
-
-  if (state.writing || state.corked) {
-    var last = state.lastBufferedRequest;
-    state.lastBufferedRequest = {
-      chunk: chunk,
-      encoding: encoding,
-      isBuf: isBuf,
-      callback: cb,
-      next: null
-    };
-
-    if (last) {
-      last.next = state.lastBufferedRequest;
-    } else {
-      state.bufferedRequest = state.lastBufferedRequest;
-    }
-
-    state.bufferedRequestCount += 1;
-  } else {
-    doWrite(stream, state, false, len, chunk, encoding, cb);
-  }
-
-  return ret;
-}
-
-function doWrite(stream, state, writev, len, chunk, encoding, cb) {
-  state.writelen = len;
-  state.writecb = cb;
-  state.writing = true;
-  state.sync = true;
-  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
-  state.sync = false;
-}
-
-function onwriteError(stream, state, sync, er, cb) {
-  --state.pendingcb;
-
-  if (sync) {
-    // defer the callback if we are being called synchronously
-    // to avoid piling up things on the stack
-    process.nextTick(cb, er); // this can emit finish, and it will always happen
-    // after error
-
-    process.nextTick(finishMaybe, stream, state);
-    stream._writableState.errorEmitted = true;
-    errorOrDestroy(stream, er);
-  } else {
-    // the caller expect this to happen before if
-    // it is async
-    cb(er);
-    stream._writableState.errorEmitted = true;
-    errorOrDestroy(stream, er); // this can emit finish, but finish must
-    // always follow error
-
-    finishMaybe(stream, state);
-  }
-}
-
-function onwriteStateUpdate(state) {
-  state.writing = false;
-  state.writecb = null;
-  state.length -= state.writelen;
-  state.writelen = 0;
-}
-
-function onwrite(stream, er) {
-  var state = stream._writableState;
-  var sync = state.sync;
-  var cb = state.writecb;
-  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();
-  onwriteStateUpdate(state);
-  if (er) onwriteError(stream, state, sync, er, cb);else {
-    // Check if we're actually ready to finish, but don't emit yet
-    var finished = needFinish(state) || stream.destroyed;
-
-    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
-      clearBuffer(stream, state);
-    }
-
-    if (sync) {
-      process.nextTick(afterWrite, stream, state, finished, cb);
-    } else {
-      afterWrite(stream, state, finished, cb);
-    }
-  }
-}
-
-function afterWrite(stream, state, finished, cb) {
-  if (!finished) onwriteDrain(stream, state);
-  state.pendingcb--;
-  cb();
-  finishMaybe(stream, state);
-} // Must force callback to be called on nextTick, so that we don't
-// emit 'drain' before the write() consumer gets the 'false' return
-// value, and has a chance to attach a 'drain' listener.
-
-
-function onwriteDrain(stream, state) {
-  if (state.length === 0 && state.needDrain) {
-    state.needDrain = false;
-    stream.emit('drain');
-  }
-} // if there's something in the buffer waiting, then process it
-
-
-function clearBuffer(stream, state) {
-  state.bufferProcessing = true;
-  var entry = state.bufferedRequest;
-
-  if (stream._writev && entry && entry.next) {
-    // Fast case, write everything using _writev()
-    var l = state.bufferedRequestCount;
-    var buffer = new Array(l);
-    var holder = state.corkedRequestsFree;
-    holder.entry = entry;
-    var count = 0;
-    var allBuffers = true;
-
-    while (entry) {
-      buffer[count] = entry;
-      if (!entry.isBuf) allBuffers = false;
-      entry = entry.next;
-      count += 1;
-    }
-
-    buffer.allBuffers = allBuffers;
-    doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time
-    // as the hot path ends with doWrite
-
-    state.pendingcb++;
-    state.lastBufferedRequest = null;
-
-    if (holder.next) {
-      state.corkedRequestsFree = holder.next;
-      holder.next = null;
-    } else {
-      state.corkedRequestsFree = new CorkedRequest(state);
-    }
-
-    state.bufferedRequestCount = 0;
-  } else {
-    // Slow case, write chunks one-by-one
-    while (entry) {
-      var chunk = entry.chunk;
-      var encoding = entry.encoding;
-      var cb = entry.callback;
-      var len = state.objectMode ? 1 : chunk.length;
-      doWrite(stream, state, false, len, chunk, encoding, cb);
-      entry = entry.next;
-      state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then
-      // it means that we need to wait until it does.
-      // also, that means that the chunk and cb are currently
-      // being processed, so move the buffer counter past them.
-
-      if (state.writing) {
-        break;
-      }
-    }
-
-    if (entry === null) state.lastBufferedRequest = null;
-  }
-
-  state.bufferedRequest = entry;
-  state.bufferProcessing = false;
-}
-
-Writable.prototype._write = function (chunk, encoding, cb) {
-  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));
-};
-
-Writable.prototype._writev = null;
-
-Writable.prototype.end = function (chunk, encoding, cb) {
-  var state = this._writableState;
-
-  if (typeof chunk === 'function') {
-    cb = chunk;
-    chunk = null;
-    encoding = null;
-  } else if (typeof encoding === 'function') {
-    cb = encoding;
-    encoding = null;
-  }
-
-  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks
-
-  if (state.corked) {
-    state.corked = 1;
-    this.uncork();
-  } // ignore unnecessary end() calls.
-
-
-  if (!state.ending) endWritable(this, state, cb);
-  return this;
-};
-
-Object.defineProperty(Writable.prototype, 'writableLength', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function get() {
-    return this._writableState.length;
-  }
-});
-
-function needFinish(state) {
-  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
-}
-
-function callFinal(stream, state) {
-  stream._final(function (err) {
-    state.pendingcb--;
-
-    if (err) {
-      errorOrDestroy(stream, err);
-    }
-
-    state.prefinished = true;
-    stream.emit('prefinish');
-    finishMaybe(stream, state);
-  });
-}
-
-function prefinish(stream, state) {
-  if (!state.prefinished && !state.finalCalled) {
-    if (typeof stream._final === 'function' && !state.destroyed) {
-      state.pendingcb++;
-      state.finalCalled = true;
-      process.nextTick(callFinal, stream, state);
-    } else {
-      state.prefinished = true;
-      stream.emit('prefinish');
-    }
-  }
-}
-
-function finishMaybe(stream, state) {
-  var need = needFinish(state);
-
-  if (need) {
-    prefinish(stream, state);
-
-    if (state.pendingcb === 0) {
-      state.finished = true;
-      stream.emit('finish');
-
-      if (state.autoDestroy) {
-        // In case of duplex streams we need a way to detect
-        // if the readable side is ready for autoDestroy as well
-        var rState = stream._readableState;
-
-        if (!rState || rState.autoDestroy && rState.endEmitted) {
-          stream.destroy();
-        }
-      }
-    }
-  }
-
-  return need;
-}
-
-function endWritable(stream, state, cb) {
-  state.ending = true;
-  finishMaybe(stream, state);
-
-  if (cb) {
-    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);
-  }
-
-  state.ended = true;
-  stream.writable = false;
-}
-
-function onCorkedFinish(corkReq, state, err) {
-  var entry = corkReq.entry;
-  corkReq.entry = null;
-
-  while (entry) {
-    var cb = entry.callback;
-    state.pendingcb--;
-    cb(err);
-    entry = entry.next;
-  } // reuse the free corkReq.
-
-
-  state.corkedRequestsFree.next = corkReq;
-}
-
-Object.defineProperty(Writable.prototype, 'destroyed', {
-  // making it explicit this property is not enumerable
-  // because otherwise some prototype manipulation in
-  // userland will fail
-  enumerable: false,
-  get: function get() {
-    if (this._writableState === undefined) {
-      return false;
-    }
-
-    return this._writableState.destroyed;
-  },
-  set: function set(value) {
-    // we ignore the value if the stream
-    // has not been initialized yet
-    if (!this._writableState) {
-      return;
-    } // backward compatibility, the user is explicitly
-    // managing destroyed
-
-
-    this._writableState.destroyed = value;
-  }
-});
-Writable.prototype.destroy = destroyImpl.destroy;
-Writable.prototype._undestroy = destroyImpl.undestroy;
-
-Writable.prototype._destroy = function (err, cb) {
-  cb(err);
-};
\ No newline at end of file
diff --git a/templetes/node_modules/spdy/lib/spdy/agent.js b/templetes/node_modules/spdy/lib/spdy/agent.js
deleted file mode 100644
index 4adc524e..00000000
--- a/templetes/node_modules/spdy/lib/spdy/agent.js
+++ /dev/null
@@ -1,295 +0,0 @@
-'use strict'
-
-var assert = require('assert')
-var http = require('http')
-var https = require('https')
-var net = require('net')
-var util = require('util')
-var transport = require('spdy-transport')
-var debug = require('debug')('spdy:client')
-
-// Node.js 0.10 and 0.12 support
-Object.assign = process.versions.modules >= 46
-  ? Object.assign // eslint-disable-next-line
-  : util._extend
-
-var EventEmitter = require('events').EventEmitter
-
-var spdy = require('../spdy')
-
-var mode = /^v0\.8\./.test(process.version)
-  ? 'rusty'
-  : /^v0\.(9|10)\./.test(process.version)
-    ? 'old'
-    : /^v0\.12\./.test(process.version)
-      ? 'normal'
-      : 'modern'
-
-var proto = {}
-
-function instantiate (base) {
-  function Agent (options) {
-    this._init(base, options)
-  }
-  util.inherits(Agent, base)
-
-  Agent.create = function create (options) {
-    return new Agent(options)
-  }
-
-  Object.keys(proto).forEach(function (key) {
-    Agent.prototype[key] = proto[key]
-  })
-
-  return Agent
-}
-
-proto._init = function _init (base, options) {
-  base.call(this, options)
-
-  var state = {}
-  this._spdyState = state
-
-  state.host = options.host
-  state.options = options.spdy || {}
-  state.secure = this instanceof https.Agent
-  state.fallback = false
-  state.createSocket = this._getCreateSocket()
-  state.socket = null
-  state.connection = null
-
-  // No chunked encoding
-  this.keepAlive = false
-
-  var self = this
-  this._connect(options, function (err, connection) {
-    if (err) {
-      return self.emit('error', err)
-    }
-
-    state.connection = connection
-    self.emit('_connect')
-  })
-}
-
-proto._getCreateSocket = function _getCreateSocket () {
-  // Find super's `createSocket` method
-  var createSocket
-  var cons = this.constructor.super_
-  do {
-    createSocket = cons.prototype.createSocket
-
-    if (cons.super_ === EventEmitter || !cons.super_) {
-      break
-    }
-    cons = cons.super_
-  } while (!createSocket)
-  if (!createSocket) {
-    createSocket = http.Agent.prototype.createSocket
-  }
-
-  assert(createSocket, '.createSocket() method not found')
-
-  return createSocket
-}
-
-proto._connect = function _connect (options, callback) {
-  var self = this
-  var state = this._spdyState
-
-  var protocols = state.options.protocols || [
-    'h2',
-    'spdy/3.1', 'spdy/3', 'spdy/2',
-    'http/1.1', 'http/1.0'
-  ]
-
-  // TODO(indutny): reconnect automatically?
-  var socket = this.createConnection(Object.assign({
-    NPNProtocols: protocols,
-    ALPNProtocols: protocols,
-    servername: options.servername || options.host
-  }, options))
-  state.socket = socket
-
-  socket.setNoDelay(true)
-
-  function onError (err) {
-    return callback(err)
-  }
-  socket.on('error', onError)
-
-  socket.on(state.secure ? 'secureConnect' : 'connect', function () {
-    socket.removeListener('error', onError)
-
-    var protocol
-    if (state.secure) {
-      protocol = socket.npnProtocol ||
-                 socket.alpnProtocol ||
-                 state.options.protocol
-    } else {
-      protocol = state.options.protocol
-    }
-
-    // HTTP server - kill socket and switch to the fallback mode
-    if (!protocol || protocol === 'http/1.1' || protocol === 'http/1.0') {
-      debug('activating fallback')
-      socket.destroy()
-      state.fallback = true
-      return
-    }
-
-    debug('connected protocol=%j', protocol)
-    var connection = transport.connection.create(socket, Object.assign({
-      protocol: /spdy/.test(protocol) ? 'spdy' : 'http2',
-      isServer: false
-    }, state.options.connection || {}))
-
-    // Pass connection level errors are passed to the agent.
-    connection.on('error', function (err) {
-      self.emit('error', err)
-    })
-
-    // Set version when we are certain
-    if (protocol === 'h2') {
-      connection.start(4)
-    } else if (protocol === 'spdy/3.1') {
-      connection.start(3.1)
-    } else if (protocol === 'spdy/3') {
-      connection.start(3)
-    } else if (protocol === 'spdy/2') {
-      connection.start(2)
-    } else {
-      socket.destroy()
-      callback(new Error('Unexpected protocol: ' + protocol))
-      return
-    }
-
-    if (state.options['x-forwarded-for'] !== undefined) {
-      connection.sendXForwardedFor(state.options['x-forwarded-for'])
-    }
-
-    callback(null, connection)
-  })
-}
-
-proto._createSocket = function _createSocket (req, options, callback) {
-  var state = this._spdyState
-  if (state.fallback) { return state.createSocket(req, options) }
-
-  var handle = spdy.handle.create(null, null, state.socket)
-
-  var socketOptions = {
-    handle: handle,
-    allowHalfOpen: true
-  }
-
-  var socket
-  if (state.secure) {
-    socket = new spdy.Socket(state.socket, socketOptions)
-  } else {
-    socket = new net.Socket(socketOptions)
-  }
-
-  handle.assignSocket(socket)
-  handle.assignClientRequest(req)
-
-  // Create stream only once `req.end()` is called
-  var self = this
-  handle.once('needStream', function () {
-    if (state.connection === null) {
-      self.once('_connect', function () {
-        handle.setStream(self._createStream(req, handle))
-      })
-    } else {
-      handle.setStream(self._createStream(req, handle))
-    }
-  })
-
-  // Yes, it is in reverse
-  req.on('response', function (res) {
-    handle.assignRequest(res)
-  })
-  handle.assignResponse(req)
-
-  // Handle PUSH
-  req.addListener('newListener', spdy.request.onNewListener)
-
-  // For v0.8
-  socket.readable = true
-  socket.writable = true
-
-  if (callback) {
-    return callback(null, socket)
-  }
-
-  return socket
-}
-
-if (mode === 'modern' || mode === 'normal') {
-  proto.createSocket = proto._createSocket
-} else {
-  proto.createSocket = function createSocket (name, host, port, addr, req) {
-    var state = this._spdyState
-    if (state.fallback) {
-      return state.createSocket(name, host, port, addr, req)
-    }
-
-    return this._createSocket(req, {
-      host: host,
-      port: port
-    })
-  }
-}
-
-proto._createStream = function _createStream (req, handle) {
-  var state = this._spdyState
-
-  var self = this
-  return state.connection.reserveStream({
-    method: req.method,
-    path: req.path,
-    headers: req._headers,
-    host: state.host
-  }, function (err, stream) {
-    if (err) {
-      return self.emit('error', err)
-    }
-
-    stream.on('response', function (status, headers) {
-      handle.emitResponse(status, headers)
-    })
-  })
-}
-
-// Public APIs
-
-proto.close = function close (callback) {
-  var state = this._spdyState
-
-  if (state.connection === null) {
-    this.once('_connect', function () {
-      this.close(callback)
-    })
-    return
-  }
-
-  state.connection.end(callback)
-}
-
-exports.Agent = instantiate(https.Agent)
-exports.PlainAgent = instantiate(http.Agent)
-
-exports.create = function create (base, options) {
-  if (typeof base === 'object') {
-    options = base
-    base = null
-  }
-
-  if (base) {
-    return instantiate(base).create(options)
-  }
-
-  if (options.spdy && options.spdy.plain) {
-    return exports.PlainAgent.create(options)
-  } else { return exports.Agent.create(options) }
-}
diff --git a/templetes/node_modules/stream-http/test/browser/abort.js b/templetes/node_modules/stream-http/test/browser/abort.js
deleted file mode 100644
index 2cf43e97..00000000
--- a/templetes/node_modules/stream-http/test/browser/abort.js
+++ /dev/null
@@ -1,55 +0,0 @@
-var Buffer = require('buffer').Buffer
-var fs = require('fs')
-var test = require('tape')
-
-var http = require('../..')
-
-test('abort before response', function (t) {
-	var req = http.get('/basic.txt', function (res) {
-		t.fail('unexpected response')
-	})
-	req.abort()
-	t.end()
-})
-
-test('abort on response', function (t) {
-	var req = http.get('/basic.txt', function (res) {
-		req.abort()
-		t.end()
-
-		res.on('end', function () {
-			t.fail('unexpected end')
-		})
-
-		res.on('data', function (data) {
-			t.fail('unexpected data')
-		})
-	})
-})
-
-test('abort on data', function (t) {
-	var req = http.get('/browserify.png?copies=5', function (res) {
-		var firstData = true
-		var failOnData = false
-
-		res.on('end', function () {
-			t.fail('unexpected end')
-		})
-
-		res.on('data', function (data) {
-			if (failOnData)
-				t.fail('unexpected data')
-			else if (firstData) {
-				firstData = false
-				req.abort()
-				t.end()
-				process.nextTick(function () {
-					// Wait for any data that may have been queued
-					// in the stream before considering data events
-					// as errors
-					failOnData = true
-				})
-			}
-		})
-	})
-})
\ No newline at end of file
diff --git a/templetes/node_modules/webpack-dev-server/lib/utils/addEntries.js b/templetes/node_modules/webpack-dev-server/lib/utils/addEntries.js
deleted file mode 100644
index 501b12e0..00000000
--- a/templetes/node_modules/webpack-dev-server/lib/utils/addEntries.js
+++ /dev/null
@@ -1,153 +0,0 @@
-'use strict';
-
-const webpack = require('webpack');
-const createDomain = require('./createDomain');
-
-/**
- * A Entry, it can be of type string or string[] or Object<string | string[],string>
- * @typedef {(string[] | string | Object<string | string[],string>)} Entry
- */
-
-/**
- * Add entries Method
- * @param {?Object} config - Webpack config
- * @param {?Object} options - Dev-Server options
- * @param {?Object} server
- * @returns {void}
- */
-function addEntries(config, options, server) {
-  if (options.inline !== false) {
-    // we're stubbing the app in this method as it's static and doesn't require
-    // a server to be supplied. createDomain requires an app with the
-    // address() signature.
-
-    const app = server || {
-      address() {
-        return { port: options.port };
-      },
-    };
-
-    /** @type {string} */
-    const domain = createDomain(options, app);
-    /** @type {string} */
-    const sockHost = options.sockHost ? `&sockHost=${options.sockHost}` : '';
-    /** @type {string} */
-    const sockPath = options.sockPath ? `&sockPath=${options.sockPath}` : '';
-    /** @type {string} */
-    const sockPort = options.sockPort ? `&sockPort=${options.sockPort}` : '';
-    /** @type {string} */
-    const clientEntry = `${require.resolve(
-      '../../client/'
-    )}?${domain}${sockHost}${sockPath}${sockPort}`;
-
-    /** @type {(string[] | string)} */
-    let hotEntry;
-
-    if (options.hotOnly) {
-      hotEntry = require.resolve('webpack/hot/only-dev-server');
-    } else if (options.hot) {
-      hotEntry = require.resolve('webpack/hot/dev-server');
-    }
-    /**
-     * prependEntry Method
-     * @param {Entry} originalEntry
-     * @param {Entry} additionalEntries
-     * @returns {Entry}
-     */
-    const prependEntry = (originalEntry, additionalEntries) => {
-      if (typeof originalEntry === 'function') {
-        return () =>
-          Promise.resolve(originalEntry()).then((entry) =>
-            prependEntry(entry, additionalEntries)
-          );
-      }
-
-      if (typeof originalEntry === 'object' && !Array.isArray(originalEntry)) {
-        /** @type {Object<string,string>} */
-        const clone = {};
-
-        Object.keys(originalEntry).forEach((key) => {
-          // entry[key] should be a string here
-          clone[key] = prependEntry(originalEntry[key], additionalEntries);
-        });
-
-        return clone;
-      }
-
-      // in this case, entry is a string or an array.
-      // make sure that we do not add duplicates.
-      /** @type {Entry} */
-      const entriesClone = additionalEntries.slice(0);
-      [].concat(originalEntry).forEach((newEntry) => {
-        if (!entriesClone.includes(newEntry)) {
-          entriesClone.push(newEntry);
-        }
-      });
-      return entriesClone;
-    };
-
-    /**
-     *
-     * Description of the option for checkInject method
-     * @typedef {Function} checkInjectOptionsParam
-     * @param {Object} _config - compilerConfig
-     * @return {Boolean}
-     */
-
-    /**
-     *
-     * @param {Boolean | checkInjectOptionsParam} option - inject(Hot|Client) it is Boolean | fn => Boolean
-     * @param {Object} _config
-     * @param {Boolean} defaultValue
-     * @return {Boolean}
-     */
-    // eslint-disable-next-line no-shadow
-    const checkInject = (option, _config, defaultValue) => {
-      if (typeof option === 'boolean') return option;
-      if (typeof option === 'function') return option(_config);
-      return defaultValue;
-    };
-
-    // eslint-disable-next-line no-shadow
-    [].concat(config).forEach((config) => {
-      /** @type {Boolean} */
-      const webTarget = [
-        'web',
-        'webworker',
-        'electron-renderer',
-        'node-webkit',
-        undefined, // eslint-disable-line
-        null,
-      ].includes(config.target);
-      /** @type {Entry} */
-      const additionalEntries = checkInject(
-        options.injectClient,
-        config,
-        webTarget
-      )
-        ? [clientEntry]
-        : [];
-
-      if (hotEntry && checkInject(options.injectHot, config, true)) {
-        additionalEntries.push(hotEntry);
-      }
-
-      config.entry = prependEntry(config.entry || './src', additionalEntries);
-
-      if (options.hot || options.hotOnly) {
-        config.plugins = config.plugins || [];
-        if (
-          !config.plugins.find(
-            // Check for the name rather than the constructor reference in case
-            // there are multiple copies of webpack installed
-            (plugin) => plugin.constructor.name === 'HotModuleReplacementPlugin'
-          )
-        ) {
-          config.plugins.push(new webpack.HotModuleReplacementPlugin());
-        }
-      }
-    });
-  }
-}
-
-module.exports = addEntries;
diff --git a/templetes/node_modules/webpack/declarations/plugins/optimize/AggressiveSplittingPlugin.d.ts b/templetes/node_modules/webpack/declarations/plugins/optimize/AggressiveSplittingPlugin.d.ts
deleted file mode 100644
index 9f5360c4..00000000
--- a/templetes/node_modules/webpack/declarations/plugins/optimize/AggressiveSplittingPlugin.d.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * This file was automatically generated.
- * DO NOT MODIFY BY HAND.
- * Run `yarn special-lint-fix` to update
- */
-
-export interface AggressiveSplittingPluginOptions {
-	/**
-	 * Default: 0
-	 */
-	chunkOverhead?: number;
-	/**
-	 * Default: 1
-	 */
-	entryChunkMultiplicator?: number;
-	/**
-	 * Byte, maxsize of per file. Default: 51200
-	 */
-	maxSize?: number;
-	/**
-	 * Byte, split point. Default: 30720
-	 */
-	minSize?: number;
-}
diff --git a/templetes/node_modules/webpack/lib/AbstractMethodError.js b/templetes/node_modules/webpack/lib/AbstractMethodError.js
deleted file mode 100644
index c9eb9cff..00000000
--- a/templetes/node_modules/webpack/lib/AbstractMethodError.js
+++ /dev/null
@@ -1,43 +0,0 @@
-"use strict";
-
-const WebpackError = require("./WebpackError");
-const CURRENT_METHOD_REGEXP = /at ([a-zA-Z0-9_.]*)/;
-
-/**
- * @param {string=} method method name
- * @returns {string} message
- */
-function createMessage(method) {
-	return `Abstract method${method ? " " + method : ""}. Must be overridden.`;
-}
-
-/**
- * @constructor
- */
-function Message() {
-	this.stack = undefined;
-	Error.captureStackTrace(this);
-	/** @type {RegExpMatchArray} */
-	const match = this.stack.split("\n")[3].match(CURRENT_METHOD_REGEXP);
-
-	this.message = match && match[1] ? createMessage(match[1]) : createMessage();
-}
-
-/**
- * Error for abstract method
- * @example
- * class FooClass {
- *     abstractMethod() {
- *         throw new AbstractMethodError(); // error message: Abstract method FooClass.abstractMethod. Must be overriden.
- *     }
- * }
- *
- */
-class AbstractMethodError extends WebpackError {
-	constructor() {
-		super(new Message().message);
-		this.name = "AbstractMethodError";
-	}
-}
-
-module.exports = AbstractMethodError;
diff --git a/templetes/node_modules/webpack/lib/optimize/AggressiveMergingPlugin.js b/templetes/node_modules/webpack/lib/optimize/AggressiveMergingPlugin.js
deleted file mode 100644
index e3a4c37e..00000000
--- a/templetes/node_modules/webpack/lib/optimize/AggressiveMergingPlugin.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-class AggressiveMergingPlugin {
-	constructor(options) {
-		if (
-			(options !== undefined && typeof options !== "object") ||
-			Array.isArray(options)
-		) {
-			throw new Error(
-				"Argument should be an options object. To use defaults, pass in nothing.\nFor more info on options, see https://webpack.js.org/plugins/"
-			);
-		}
-		this.options = options || {};
-	}
-
-	apply(compiler) {
-		const options = this.options;
-		const minSizeReduce = options.minSizeReduce || 1.5;
-
-		compiler.hooks.thisCompilation.tap(
-			"AggressiveMergingPlugin",
-			compilation => {
-				compilation.hooks.optimizeChunksAdvanced.tap(
-					"AggressiveMergingPlugin",
-					chunks => {
-						let combinations = [];
-						chunks.forEach((a, idx) => {
-							if (a.canBeInitial()) return;
-							for (let i = 0; i < idx; i++) {
-								const b = chunks[i];
-								if (b.canBeInitial()) continue;
-								combinations.push({
-									a,
-									b,
-									improvement: undefined
-								});
-							}
-						});
-
-						for (const pair of combinations) {
-							const a = pair.b.size({
-								chunkOverhead: 0
-							});
-							const b = pair.a.size({
-								chunkOverhead: 0
-							});
-							const ab = pair.b.integratedSize(pair.a, {
-								chunkOverhead: 0
-							});
-							let newSize;
-							if (ab === false) {
-								pair.improvement = false;
-								return;
-							} else {
-								newSize = ab;
-							}
-
-							pair.improvement = (a + b) / newSize;
-						}
-						combinations = combinations.filter(pair => {
-							return pair.improvement !== false;
-						});
-						combinations.sort((a, b) => {
-							return b.improvement - a.improvement;
-						});
-
-						const pair = combinations[0];
-
-						if (!pair) return;
-						if (pair.improvement < minSizeReduce) return;
-
-						if (pair.b.integrate(pair.a, "aggressive-merge")) {
-							chunks.splice(chunks.indexOf(pair.a), 1);
-							return true;
-						}
-					}
-				);
-			}
-		);
-	}
-}
-
-module.exports = AggressiveMergingPlugin;
diff --git a/templetes/node_modules/webpack/lib/optimize/AggressiveSplittingPlugin.js b/templetes/node_modules/webpack/lib/optimize/AggressiveSplittingPlugin.js
deleted file mode 100644
index 38438785..00000000
--- a/templetes/node_modules/webpack/lib/optimize/AggressiveSplittingPlugin.js
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const identifierUtils = require("../util/identifier");
-const { intersect } = require("../util/SetHelpers");
-const validateOptions = require("schema-utils");
-const schema = require("../../schemas/plugins/optimize/AggressiveSplittingPlugin.json");
-
-/** @typedef {import("../../declarations/plugins/optimize/AggressiveSplittingPlugin").AggressiveSplittingPluginOptions} AggressiveSplittingPluginOptions */
-
-const moveModuleBetween = (oldChunk, newChunk) => {
-	return module => {
-		oldChunk.moveModule(module, newChunk);
-	};
-};
-
-const isNotAEntryModule = entryModule => {
-	return module => {
-		return entryModule !== module;
-	};
-};
-
-class AggressiveSplittingPlugin {
-	/**
-	 * @param {AggressiveSplittingPluginOptions=} options options object
-	 */
-	constructor(options) {
-		if (!options) options = {};
-
-		validateOptions(schema, options, "Aggressive Splitting Plugin");
-
-		this.options = options;
-		if (typeof this.options.minSize !== "number") {
-			this.options.minSize = 30 * 1024;
-		}
-		if (typeof this.options.maxSize !== "number") {
-			this.options.maxSize = 50 * 1024;
-		}
-		if (typeof this.options.chunkOverhead !== "number") {
-			this.options.chunkOverhead = 0;
-		}
-		if (typeof this.options.entryChunkMultiplicator !== "number") {
-			this.options.entryChunkMultiplicator = 1;
-		}
-	}
-	apply(compiler) {
-		compiler.hooks.thisCompilation.tap(
-			"AggressiveSplittingPlugin",
-			compilation => {
-				let needAdditionalSeal = false;
-				let newSplits;
-				let fromAggressiveSplittingSet;
-				let chunkSplitDataMap;
-				compilation.hooks.optimize.tap("AggressiveSplittingPlugin", () => {
-					newSplits = [];
-					fromAggressiveSplittingSet = new Set();
-					chunkSplitDataMap = new Map();
-				});
-				compilation.hooks.optimizeChunksAdvanced.tap(
-					"AggressiveSplittingPlugin",
-					chunks => {
-						// Precompute stuff
-						const nameToModuleMap = new Map();
-						const moduleToNameMap = new Map();
-						for (const m of compilation.modules) {
-							const name = identifierUtils.makePathsRelative(
-								compiler.context,
-								m.identifier(),
-								compilation.cache
-							);
-							nameToModuleMap.set(name, m);
-							moduleToNameMap.set(m, name);
-						}
-
-						// Check used chunk ids
-						const usedIds = new Set();
-						for (const chunk of chunks) {
-							usedIds.add(chunk.id);
-						}
-
-						const recordedSplits =
-							(compilation.records && compilation.records.aggressiveSplits) ||
-							[];
-						const usedSplits = newSplits
-							? recordedSplits.concat(newSplits)
-							: recordedSplits;
-
-						const minSize = this.options.minSize;
-						const maxSize = this.options.maxSize;
-
-						const applySplit = splitData => {
-							// Cannot split if id is already taken
-							if (splitData.id !== undefined && usedIds.has(splitData.id)) {
-								return false;
-							}
-
-							// Get module objects from names
-							const selectedModules = splitData.modules.map(name =>
-								nameToModuleMap.get(name)
-							);
-
-							// Does the modules exist at all?
-							if (!selectedModules.every(Boolean)) return false;
-
-							// Check if size matches (faster than waiting for hash)
-							const size = selectedModules.reduce(
-								(sum, m) => sum + m.size(),
-								0
-							);
-							if (size !== splitData.size) return false;
-
-							// get chunks with all modules
-							const selectedChunks = intersect(
-								selectedModules.map(m => new Set(m.chunksIterable))
-							);
-
-							// No relevant chunks found
-							if (selectedChunks.size === 0) return false;
-
-							// The found chunk is already the split or similar
-							if (
-								selectedChunks.size === 1 &&
-								Array.from(selectedChunks)[0].getNumberOfModules() ===
-									selectedModules.length
-							) {
-								const chunk = Array.from(selectedChunks)[0];
-								if (fromAggressiveSplittingSet.has(chunk)) return false;
-								fromAggressiveSplittingSet.add(chunk);
-								chunkSplitDataMap.set(chunk, splitData);
-								return true;
-							}
-
-							// split the chunk into two parts
-							const newChunk = compilation.addChunk();
-							newChunk.chunkReason = "aggressive splitted";
-							for (const chunk of selectedChunks) {
-								selectedModules.forEach(moveModuleBetween(chunk, newChunk));
-								chunk.split(newChunk);
-								chunk.name = null;
-							}
-							fromAggressiveSplittingSet.add(newChunk);
-							chunkSplitDataMap.set(newChunk, splitData);
-
-							if (splitData.id !== null && splitData.id !== undefined) {
-								newChunk.id = splitData.id;
-							}
-							return true;
-						};
-
-						// try to restore to recorded splitting
-						let changed = false;
-						for (let j = 0; j < usedSplits.length; j++) {
-							const splitData = usedSplits[j];
-							if (applySplit(splitData)) changed = true;
-						}
-
-						// for any chunk which isn't splitted yet, split it and create a new entry
-						// start with the biggest chunk
-						const sortedChunks = chunks.slice().sort((a, b) => {
-							const diff1 = b.modulesSize() - a.modulesSize();
-							if (diff1) return diff1;
-							const diff2 = a.getNumberOfModules() - b.getNumberOfModules();
-							if (diff2) return diff2;
-							const modulesA = Array.from(a.modulesIterable);
-							const modulesB = Array.from(b.modulesIterable);
-							modulesA.sort();
-							modulesB.sort();
-							const aI = modulesA[Symbol.iterator]();
-							const bI = modulesB[Symbol.iterator]();
-							// eslint-disable-next-line no-constant-condition
-							while (true) {
-								const aItem = aI.next();
-								const bItem = bI.next();
-								if (aItem.done) return 0;
-								const aModuleIdentifier = aItem.value.identifier();
-								const bModuleIdentifier = bItem.value.identifier();
-								if (aModuleIdentifier > bModuleIdentifier) return -1;
-								if (aModuleIdentifier < bModuleIdentifier) return 1;
-							}
-						});
-						for (const chunk of sortedChunks) {
-							if (fromAggressiveSplittingSet.has(chunk)) continue;
-							const size = chunk.modulesSize();
-							if (size > maxSize && chunk.getNumberOfModules() > 1) {
-								const modules = chunk
-									.getModules()
-									.filter(isNotAEntryModule(chunk.entryModule))
-									.sort((a, b) => {
-										a = a.identifier();
-										b = b.identifier();
-										if (a > b) return 1;
-										if (a < b) return -1;
-										return 0;
-									});
-								const selectedModules = [];
-								let selectedModulesSize = 0;
-								for (let k = 0; k < modules.length; k++) {
-									const module = modules[k];
-									const newSize = selectedModulesSize + module.size();
-									if (newSize > maxSize && selectedModulesSize >= minSize) {
-										break;
-									}
-									selectedModulesSize = newSize;
-									selectedModules.push(module);
-								}
-								if (selectedModules.length === 0) continue;
-								const splitData = {
-									modules: selectedModules
-										.map(m => moduleToNameMap.get(m))
-										.sort(),
-									size: selectedModulesSize
-								};
-
-								if (applySplit(splitData)) {
-									newSplits = (newSplits || []).concat(splitData);
-									changed = true;
-								}
-							}
-						}
-						if (changed) return true;
-					}
-				);
-				compilation.hooks.recordHash.tap(
-					"AggressiveSplittingPlugin",
-					records => {
-						// 4. save made splittings to records
-						const allSplits = new Set();
-						const invalidSplits = new Set();
-
-						// Check if some splittings are invalid
-						// We remove invalid splittings and try again
-						for (const chunk of compilation.chunks) {
-							const splitData = chunkSplitDataMap.get(chunk);
-							if (splitData !== undefined) {
-								if (splitData.hash && chunk.hash !== splitData.hash) {
-									// Split was successful, but hash doesn't equal
-									// We can throw away the split since it's useless now
-									invalidSplits.add(splitData);
-								}
-							}
-						}
-
-						if (invalidSplits.size > 0) {
-							records.aggressiveSplits = records.aggressiveSplits.filter(
-								splitData => !invalidSplits.has(splitData)
-							);
-							needAdditionalSeal = true;
-						} else {
-							// set hash and id values on all (new) splittings
-							for (const chunk of compilation.chunks) {
-								const splitData = chunkSplitDataMap.get(chunk);
-								if (splitData !== undefined) {
-									splitData.hash = chunk.hash;
-									splitData.id = chunk.id;
-									allSplits.add(splitData);
-									// set flag for stats
-									chunk.recorded = true;
-								}
-							}
-
-							// Also add all unused historial splits (after the used ones)
-							// They can still be used in some future compilation
-							const recordedSplits =
-								compilation.records && compilation.records.aggressiveSplits;
-							if (recordedSplits) {
-								for (const splitData of recordedSplits) {
-									if (!invalidSplits.has(splitData)) allSplits.add(splitData);
-								}
-							}
-
-							// record all splits
-							records.aggressiveSplits = Array.from(allSplits);
-
-							needAdditionalSeal = false;
-						}
-					}
-				);
-				compilation.hooks.needAdditionalSeal.tap(
-					"AggressiveSplittingPlugin",
-					() => {
-						if (needAdditionalSeal) {
-							needAdditionalSeal = false;
-							return true;
-						}
-					}
-				);
-			}
-		);
-	}
-}
-module.exports = AggressiveSplittingPlugin;
diff --git a/templetes/node_modules/webpack/node_modules/.bin/acorn b/templetes/node_modules/webpack/node_modules/.bin/acorn
deleted file mode 120000
index fa65fee8..00000000
--- a/templetes/node_modules/webpack/node_modules/.bin/acorn
+++ /dev/null
@@ -1 +0,0 @@
-../../../acorn/bin/acorn
\ No newline at end of file
diff --git a/templetes/node_modules/webpack/node_modules/enhanced-resolve/lib/AliasFieldPlugin.js b/templetes/node_modules/webpack/node_modules/enhanced-resolve/lib/AliasFieldPlugin.js
deleted file mode 100644
index 28a75152..00000000
--- a/templetes/node_modules/webpack/node_modules/enhanced-resolve/lib/AliasFieldPlugin.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const DescriptionFileUtils = require("./DescriptionFileUtils");
-const getInnerRequest = require("./getInnerRequest");
-
-module.exports = class AliasFieldPlugin {
-	constructor(source, field, target) {
-		this.source = source;
-		this.field = field;
-		this.target = target;
-	}
-
-	apply(resolver) {
-		const target = resolver.ensureHook(this.target);
-		resolver
-			.getHook(this.source)
-			.tapAsync("AliasFieldPlugin", (request, resolveContext, callback) => {
-				if (!request.descriptionFileData) return callback();
-				const innerRequest = getInnerRequest(resolver, request);
-				if (!innerRequest) return callback();
-				const fieldData = DescriptionFileUtils.getField(
-					request.descriptionFileData,
-					this.field
-				);
-				if (typeof fieldData !== "object") {
-					if (resolveContext.log)
-						resolveContext.log(
-							"Field '" +
-								this.field +
-								"' doesn't contain a valid alias configuration"
-						);
-					return callback();
-				}
-				const data1 = fieldData[innerRequest];
-				const data2 = fieldData[innerRequest.replace(/^\.\//, "")];
-				const data = typeof data1 !== "undefined" ? data1 : data2;
-				if (data === innerRequest) return callback();
-				if (data === undefined) return callback();
-				if (data === false) {
-					const ignoreObj = Object.assign({}, request, {
-						path: false
-					});
-					return callback(null, ignoreObj);
-				}
-				const obj = Object.assign({}, request, {
-					path: request.descriptionFileRoot,
-					request: data
-				});
-				resolver.doResolve(
-					target,
-					obj,
-					"aliased from description file " +
-						request.descriptionFilePath +
-						" with mapping '" +
-						innerRequest +
-						"' to '" +
-						data +
-						"'",
-					resolveContext,
-					(err, result) => {
-						if (err) return callback(err);
-
-						// Don't allow other aliasing or raw request
-						if (result === undefined) return callback(null, null);
-						callback(null, result);
-					}
-				);
-			});
-	}
-};
diff --git a/templetes/node_modules/webpack/node_modules/enhanced-resolve/lib/AliasPlugin.js b/templetes/node_modules/webpack/node_modules/enhanced-resolve/lib/AliasPlugin.js
deleted file mode 100644
index 60a20093..00000000
--- a/templetes/node_modules/webpack/node_modules/enhanced-resolve/lib/AliasPlugin.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-function startsWith(string, searchString) {
-	const stringLength = string.length;
-	const searchLength = searchString.length;
-
-	// early out if the search length is greater than the search string
-	if (searchLength > stringLength) {
-		return false;
-	}
-	let index = -1;
-	while (++index < searchLength) {
-		if (string.charCodeAt(index) !== searchString.charCodeAt(index)) {
-			return false;
-		}
-	}
-	return true;
-}
-
-module.exports = class AliasPlugin {
-	constructor(source, options, target) {
-		this.source = source;
-		this.options = Array.isArray(options) ? options : [options];
-		this.target = target;
-	}
-
-	apply(resolver) {
-		const target = resolver.ensureHook(this.target);
-		resolver
-			.getHook(this.source)
-			.tapAsync("AliasPlugin", (request, resolveContext, callback) => {
-				const innerRequest = request.request || request.path;
-				if (!innerRequest) return callback();
-				for (const item of this.options) {
-					if (
-						innerRequest === item.name ||
-						(!item.onlyModule && startsWith(innerRequest, item.name + "/"))
-					) {
-						if (
-							innerRequest !== item.alias &&
-							!startsWith(innerRequest, item.alias + "/")
-						) {
-							const newRequestStr =
-								item.alias + innerRequest.substr(item.name.length);
-							const obj = Object.assign({}, request, {
-								request: newRequestStr
-							});
-							return resolver.doResolve(
-								target,
-								obj,
-								"aliased with mapping '" +
-									item.name +
-									"': '" +
-									item.alias +
-									"' to '" +
-									newRequestStr +
-									"'",
-								resolveContext,
-								(err, result) => {
-									if (err) return callback(err);
-
-									// Don't allow other aliasing or raw request
-									if (result === undefined) return callback(null, null);
-									callback(null, result);
-								}
-							);
-						}
-					}
-				}
-				return callback();
-			});
-	}
-};
diff --git a/templetes/node_modules/webpack/schemas/ajv.absolutePath.js b/templetes/node_modules/webpack/schemas/ajv.absolutePath.js
deleted file mode 100644
index 9d6b7f6a..00000000
--- a/templetes/node_modules/webpack/schemas/ajv.absolutePath.js
+++ /dev/null
@@ -1,57 +0,0 @@
-"use strict";
-
-const errorMessage = (schema, data, message) => ({
-	keyword: "absolutePath",
-	params: { absolutePath: data },
-	message: message,
-	parentSchema: schema
-});
-
-const getErrorFor = (shouldBeAbsolute, data, schema) => {
-	const message = shouldBeAbsolute
-		? `The provided value ${JSON.stringify(data)} is not an absolute path!`
-		: `A relative path is expected. However, the provided value ${JSON.stringify(
-				data
-		  )} is an absolute path!`;
-
-	return errorMessage(schema, data, message);
-};
-
-module.exports = ajv =>
-	ajv.addKeyword("absolutePath", {
-		errors: true,
-		type: "string",
-		compile(expected, schema) {
-			function callback(data) {
-				let passes = true;
-				const isExclamationMarkPresent = data.includes("!");
-
-				if (isExclamationMarkPresent) {
-					callback.errors = [
-						errorMessage(
-							schema,
-							data,
-							`The provided value ${JSON.stringify(
-								data
-							)} contains exclamation mark (!) which is not allowed because it's reserved for loader syntax.`
-						)
-					];
-					passes = false;
-				}
-				// ?:[A-Za-z]:\\ - Windows absolute path
-				// \\\\ - Windows network absolute path
-				// \/ - Unix-like OS absolute path
-				const isCorrectAbsolutePath =
-					expected === /^(?:[A-Za-z]:\\|\\\\|\/)/.test(data);
-				if (!isCorrectAbsolutePath) {
-					callback.errors = [getErrorFor(expected, data, schema)];
-					passes = false;
-				}
-
-				return passes;
-			}
-			callback.errors = [];
-
-			return callback;
-		}
-	});
diff --git a/templetes/node_modules/webpack/schemas/plugins/optimize/AggressiveSplittingPlugin.json b/templetes/node_modules/webpack/schemas/plugins/optimize/AggressiveSplittingPlugin.json
deleted file mode 100644
index 19bcdfd5..00000000
--- a/templetes/node_modules/webpack/schemas/plugins/optimize/AggressiveSplittingPlugin.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-  "title": "AggressiveSplittingPluginOptions",
-  "type": "object",
-  "additionalProperties": false,
-  "properties": {
-    "chunkOverhead": {
-      "description": "Default: 0",
-      "type": "number"
-    },
-    "entryChunkMultiplicator": {
-      "description": "Default: 1",
-      "type": "number"
-    },
-    "maxSize": {
-      "description": "Byte, maxsize of per file. Default: 51200",
-      "type": "number"
-    },
-    "minSize": {
-      "description": "Byte, split point. Default: 30720",
-      "type": "number"
-    }
-  }
-}
