]> git.proxmox.com Git - pve-eslint.git/blobdiff - src/eslint.js
upgrade to v7.0.0
[pve-eslint.git] / src / eslint.js
index cb7b803ef7bb42cac90048c03352c57da6b66d8a..554756bd16878606b562970e06de80396bdc3423 100755 (executable)
@@ -1496,7 +1496,7 @@ var store = __webpack_require__(26);
 (module.exports = function (key, value) {
   return store[key] || (store[key] = value !== undefined ? value : {});
 })('versions', []).push({
-  version: '3.6.4',
+  version: '3.6.5',
   mode: IS_PURE ? 'pure' : 'global',
   copyright: '© 2020 Denis Pushkarev (zloirock.ru)'
 });
@@ -9509,7 +9509,7 @@ if (!set || !clear) {
     channel.port1.onmessage = listener;
     defer = bind(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 && !fails(post)) {
+  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts && !fails(post) && location.protocol !== 'file:') {
     defer = post;
     global.addEventListener('message', listener, false); // IE8-
   } else if (ONREADYSTATECHANGE in createElement('script')) {
@@ -13041,7 +13041,7 @@ var INVALID_SCHEME = 'Invalid scheme';
 var INVALID_HOST = 'Invalid host';
 var INVALID_PORT = 'Invalid port';
 var ALPHA = /[A-Za-z]/;
-var ALPHANUMERIC = /[\d+\-.A-Za-z]/;
+var ALPHANUMERIC = /[\d+-.A-Za-z]/;
 var DIGIT = /\d/;
 var HEX_START = /^(0x|0X)/;
 var OCT = /^[0-7]+$/;
@@ -16778,7 +16778,7 @@ class Linter {
         supportsAutofix
       } = processor;
       const disableFixes = options.disableFixes || !supportsAutofix;
-      return this._verifyWithProcessor(textOrSourceCode, config, _objectSpread({}, options, {
+      return this._verifyWithProcessor(textOrSourceCode, config, _objectSpread(_objectSpread({}, options), {}, {
         disableFixes,
         postprocess,
         preprocess
@@ -16827,13 +16827,13 @@ class Linter {
 
       if (configForRecursive && path.extname(blockName) !== originalExtname) {
         debug("Resolving configuration again because the file extension was changed.");
-        return this._verifyWithConfigArray(blockText, configForRecursive, _objectSpread({}, options, {
+        return this._verifyWithConfigArray(blockText, configForRecursive, _objectSpread(_objectSpread({}, options), {}, {
           filename: blockName
         }));
       } // Does lint.
 
 
-      return this._verifyWithoutProcessors(blockText, config, _objectSpread({}, options, {
+      return this._verifyWithoutProcessors(blockText, config, _objectSpread(_objectSpread({}, options), {}, {
         filename: blockName
       }));
     });
@@ -18967,7 +18967,7 @@ module.exports = {
 /* 383 */
 /***/ (function(module) {
 
-module.exports = JSON.parse("{\"_from\":\"estraverse@^4.1.1\",\"_id\":\"estraverse@4.3.0\",\"_inBundle\":false,\"_integrity\":\"sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==\",\"_location\":\"/estraverse\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"range\",\"registry\":true,\"raw\":\"estraverse@^4.1.1\",\"name\":\"estraverse\",\"escapedName\":\"estraverse\",\"rawSpec\":\"^4.1.1\",\"saveSpec\":null,\"fetchSpec\":\"^4.1.1\"},\"_requiredBy\":[\"/babel-eslint/eslint-scope\",\"/eslint-scope\",\"/esrecurse\",\"/webpack/eslint-scope\"],\"_resolved\":\"https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz\",\"_shasum\":\"398ad3f3c5a24948be7725e83d11a7de28cdbd1d\",\"_spec\":\"estraverse@^4.1.1\",\"_where\":\"/home/dcsapak/git/pve-eslint/eslint-v7.0.0-alpha.3/node_modules/eslint-scope\",\"bugs\":{\"url\":\"https://github.com/estools/estraverse/issues\"},\"bundleDependencies\":false,\"deprecated\":false,\"description\":\"ECMAScript JS AST traversal functions\",\"devDependencies\":{\"babel-preset-env\":\"^1.6.1\",\"babel-register\":\"^6.3.13\",\"chai\":\"^2.1.1\",\"espree\":\"^1.11.0\",\"gulp\":\"^3.8.10\",\"gulp-bump\":\"^0.2.2\",\"gulp-filter\":\"^2.0.0\",\"gulp-git\":\"^1.0.1\",\"gulp-tag-version\":\"^1.3.0\",\"jshint\":\"^2.5.6\",\"mocha\":\"^2.1.0\"},\"engines\":{\"node\":\">=4.0\"},\"homepage\":\"https://github.com/estools/estraverse\",\"license\":\"BSD-2-Clause\",\"main\":\"estraverse.js\",\"maintainers\":[{\"name\":\"Yusuke Suzuki\",\"email\":\"utatane.tea@gmail.com\",\"url\":\"http://github.com/Constellation\"}],\"name\":\"estraverse\",\"repository\":{\"type\":\"git\",\"url\":\"git+ssh://git@github.com/estools/estraverse.git\"},\"scripts\":{\"lint\":\"jshint estraverse.js\",\"test\":\"npm run-script lint && npm run-script unit-test\",\"unit-test\":\"mocha --compilers js:babel-register\"},\"version\":\"4.3.0\"}");
+module.exports = JSON.parse("{\"_from\":\"estraverse@^4.1.1\",\"_id\":\"estraverse@4.3.0\",\"_inBundle\":false,\"_integrity\":\"sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==\",\"_location\":\"/estraverse\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"range\",\"registry\":true,\"raw\":\"estraverse@^4.1.1\",\"name\":\"estraverse\",\"escapedName\":\"estraverse\",\"rawSpec\":\"^4.1.1\",\"saveSpec\":null,\"fetchSpec\":\"^4.1.1\"},\"_requiredBy\":[\"/babel-eslint/eslint-scope\",\"/eslint-scope\",\"/esrecurse\",\"/webpack/eslint-scope\"],\"_resolved\":\"https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz\",\"_shasum\":\"398ad3f3c5a24948be7725e83d11a7de28cdbd1d\",\"_spec\":\"estraverse@^4.1.1\",\"_where\":\"/home/dcsapak/git/pve-eslint/eslint-v7.0.0/node_modules/eslint-scope\",\"bugs\":{\"url\":\"https://github.com/estools/estraverse/issues\"},\"bundleDependencies\":false,\"deprecated\":false,\"description\":\"ECMAScript JS AST traversal functions\",\"devDependencies\":{\"babel-preset-env\":\"^1.6.1\",\"babel-register\":\"^6.3.13\",\"chai\":\"^2.1.1\",\"espree\":\"^1.11.0\",\"gulp\":\"^3.8.10\",\"gulp-bump\":\"^0.2.2\",\"gulp-filter\":\"^2.0.0\",\"gulp-git\":\"^1.0.1\",\"gulp-tag-version\":\"^1.3.0\",\"jshint\":\"^2.5.6\",\"mocha\":\"^2.1.0\"},\"engines\":{\"node\":\">=4.0\"},\"homepage\":\"https://github.com/estools/estraverse\",\"license\":\"BSD-2-Clause\",\"main\":\"estraverse.js\",\"maintainers\":[{\"name\":\"Yusuke Suzuki\",\"email\":\"utatane.tea@gmail.com\",\"url\":\"http://github.com/Constellation\"}],\"name\":\"estraverse\",\"repository\":{\"type\":\"git\",\"url\":\"git+ssh://git@github.com/estools/estraverse.git\"},\"scripts\":{\"lint\":\"jshint estraverse.js\",\"test\":\"npm run-script lint && npm run-script unit-test\",\"unit-test\":\"mocha --compilers js:babel-register\"},\"version\":\"4.3.0\"}");
 
 /***/ }),
 /* 384 */
@@ -20026,7 +20026,7 @@ module.exports = Referencer;
 /* 389 */
 /***/ (function(module) {
 
-module.exports = JSON.parse("{\"_from\":\"esrecurse@^4.1.0\",\"_id\":\"esrecurse@4.2.1\",\"_inBundle\":false,\"_integrity\":\"sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==\",\"_location\":\"/esrecurse\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"range\",\"registry\":true,\"raw\":\"esrecurse@^4.1.0\",\"name\":\"esrecurse\",\"escapedName\":\"esrecurse\",\"rawSpec\":\"^4.1.0\",\"saveSpec\":null,\"fetchSpec\":\"^4.1.0\"},\"_requiredBy\":[\"/babel-eslint/eslint-scope\",\"/eslint-scope\",\"/webpack/eslint-scope\"],\"_resolved\":\"https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz\",\"_shasum\":\"007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf\",\"_spec\":\"esrecurse@^4.1.0\",\"_where\":\"/home/dcsapak/git/pve-eslint/eslint-v7.0.0-alpha.3/node_modules/eslint-scope\",\"babel\":{\"presets\":[\"es2015\"]},\"bugs\":{\"url\":\"https://github.com/estools/esrecurse/issues\"},\"bundleDependencies\":false,\"dependencies\":{\"estraverse\":\"^4.1.0\"},\"deprecated\":false,\"description\":\"ECMAScript AST recursive visitor\",\"devDependencies\":{\"babel-cli\":\"^6.24.1\",\"babel-eslint\":\"^7.2.3\",\"babel-preset-es2015\":\"^6.24.1\",\"babel-register\":\"^6.24.1\",\"chai\":\"^4.0.2\",\"esprima\":\"^4.0.0\",\"gulp\":\"^3.9.0\",\"gulp-bump\":\"^2.7.0\",\"gulp-eslint\":\"^4.0.0\",\"gulp-filter\":\"^5.0.0\",\"gulp-git\":\"^2.4.1\",\"gulp-mocha\":\"^4.3.1\",\"gulp-tag-version\":\"^1.2.1\",\"jsdoc\":\"^3.3.0-alpha10\",\"minimist\":\"^1.1.0\"},\"engines\":{\"node\":\">=4.0\"},\"homepage\":\"https://github.com/estools/esrecurse\",\"license\":\"BSD-2-Clause\",\"main\":\"esrecurse.js\",\"maintainers\":[{\"name\":\"Yusuke Suzuki\",\"email\":\"utatane.tea@gmail.com\",\"url\":\"https://github.com/Constellation\"}],\"name\":\"esrecurse\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/estools/esrecurse.git\"},\"scripts\":{\"lint\":\"gulp lint\",\"test\":\"gulp travis\",\"unit-test\":\"gulp test\"},\"version\":\"4.2.1\"}");
+module.exports = JSON.parse("{\"_from\":\"esrecurse@^4.1.0\",\"_id\":\"esrecurse@4.2.1\",\"_inBundle\":false,\"_integrity\":\"sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==\",\"_location\":\"/esrecurse\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"range\",\"registry\":true,\"raw\":\"esrecurse@^4.1.0\",\"name\":\"esrecurse\",\"escapedName\":\"esrecurse\",\"rawSpec\":\"^4.1.0\",\"saveSpec\":null,\"fetchSpec\":\"^4.1.0\"},\"_requiredBy\":[\"/babel-eslint/eslint-scope\",\"/eslint-scope\",\"/webpack/eslint-scope\"],\"_resolved\":\"https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz\",\"_shasum\":\"007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf\",\"_spec\":\"esrecurse@^4.1.0\",\"_where\":\"/home/dcsapak/git/pve-eslint/eslint-v7.0.0/node_modules/eslint-scope\",\"babel\":{\"presets\":[\"es2015\"]},\"bugs\":{\"url\":\"https://github.com/estools/esrecurse/issues\"},\"bundleDependencies\":false,\"dependencies\":{\"estraverse\":\"^4.1.0\"},\"deprecated\":false,\"description\":\"ECMAScript AST recursive visitor\",\"devDependencies\":{\"babel-cli\":\"^6.24.1\",\"babel-eslint\":\"^7.2.3\",\"babel-preset-es2015\":\"^6.24.1\",\"babel-register\":\"^6.24.1\",\"chai\":\"^4.0.2\",\"esprima\":\"^4.0.0\",\"gulp\":\"^3.9.0\",\"gulp-bump\":\"^2.7.0\",\"gulp-eslint\":\"^4.0.0\",\"gulp-filter\":\"^5.0.0\",\"gulp-git\":\"^2.4.1\",\"gulp-mocha\":\"^4.3.1\",\"gulp-tag-version\":\"^1.2.1\",\"jsdoc\":\"^3.3.0-alpha10\",\"minimist\":\"^1.1.0\"},\"engines\":{\"node\":\">=4.0\"},\"homepage\":\"https://github.com/estools/esrecurse\",\"license\":\"BSD-2-Clause\",\"main\":\"esrecurse.js\",\"maintainers\":[{\"name\":\"Yusuke Suzuki\",\"email\":\"utatane.tea@gmail.com\",\"url\":\"https://github.com/Constellation\"}],\"name\":\"esrecurse\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/estools/esrecurse.git\"},\"scripts\":{\"lint\":\"gulp lint\",\"test\":\"gulp travis\",\"unit-test\":\"gulp test\"},\"version\":\"4.2.1\"}");
 
 /***/ }),
 /* 390 */
@@ -20177,7 +20177,7 @@ module.exports = PatternVisitor;
 /* 391 */
 /***/ (function(module) {
 
-module.exports = JSON.parse("{\"_from\":\"eslint-scope@^5.0.0\",\"_id\":\"eslint-scope@5.0.0\",\"_inBundle\":false,\"_integrity\":\"sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==\",\"_location\":\"/eslint-scope\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"range\",\"registry\":true,\"raw\":\"eslint-scope@^5.0.0\",\"name\":\"eslint-scope\",\"escapedName\":\"eslint-scope\",\"rawSpec\":\"^5.0.0\",\"saveSpec\":null,\"fetchSpec\":\"^5.0.0\"},\"_requiredBy\":[\"/\",\"/eslint\"],\"_resolved\":\"https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz\",\"_shasum\":\"e87c8887c73e8d1ec84f1ca591645c358bfc8fb9\",\"_spec\":\"eslint-scope@^5.0.0\",\"_where\":\"/home/dcsapak/git/pve-eslint/eslint-v7.0.0-alpha.3\",\"bugs\":{\"url\":\"https://github.com/eslint/eslint-scope/issues\"},\"bundleDependencies\":false,\"dependencies\":{\"esrecurse\":\"^4.1.0\",\"estraverse\":\"^4.1.1\"},\"deprecated\":false,\"description\":\"ECMAScript scope analyzer for ESLint\",\"devDependencies\":{\"@typescript-eslint/parser\":\"^1.11.0\",\"chai\":\"^4.2.0\",\"eslint\":\"^6.0.1\",\"eslint-config-eslint\":\"^5.0.1\",\"eslint-plugin-node\":\"^9.1.0\",\"eslint-release\":\"^1.0.0\",\"espree\":\"^6.0.0\",\"istanbul\":\"^0.4.5\",\"mocha\":\"^6.1.4\",\"npm-license\":\"^0.3.3\",\"shelljs\":\"^0.8.3\",\"typescript\":\"^3.5.2\"},\"engines\":{\"node\":\">=8.0.0\"},\"files\":[\"LICENSE\",\"README.md\",\"lib\"],\"homepage\":\"http://github.com/eslint/eslint-scope\",\"license\":\"BSD-2-Clause\",\"main\":\"lib/index.js\",\"name\":\"eslint-scope\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/eslint/eslint-scope.git\"},\"scripts\":{\"generate-alpharelease\":\"eslint-generate-prerelease alpha\",\"generate-betarelease\":\"eslint-generate-prerelease beta\",\"generate-rcrelease\":\"eslint-generate-prerelease rc\",\"generate-release\":\"eslint-generate-release\",\"lint\":\"node Makefile.js lint\",\"publish-release\":\"eslint-publish-release\",\"test\":\"node Makefile.js test\"},\"version\":\"5.0.0\"}");
+module.exports = JSON.parse("{\"_from\":\"eslint-scope@^5.0.0\",\"_id\":\"eslint-scope@5.0.0\",\"_inBundle\":false,\"_integrity\":\"sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==\",\"_location\":\"/eslint-scope\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"range\",\"registry\":true,\"raw\":\"eslint-scope@^5.0.0\",\"name\":\"eslint-scope\",\"escapedName\":\"eslint-scope\",\"rawSpec\":\"^5.0.0\",\"saveSpec\":null,\"fetchSpec\":\"^5.0.0\"},\"_requiredBy\":[\"/\",\"/eslint\"],\"_resolved\":\"https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz\",\"_shasum\":\"e87c8887c73e8d1ec84f1ca591645c358bfc8fb9\",\"_spec\":\"eslint-scope@^5.0.0\",\"_where\":\"/home/dcsapak/git/pve-eslint/eslint-v7.0.0\",\"bugs\":{\"url\":\"https://github.com/eslint/eslint-scope/issues\"},\"bundleDependencies\":false,\"dependencies\":{\"esrecurse\":\"^4.1.0\",\"estraverse\":\"^4.1.1\"},\"deprecated\":false,\"description\":\"ECMAScript scope analyzer for ESLint\",\"devDependencies\":{\"@typescript-eslint/parser\":\"^1.11.0\",\"chai\":\"^4.2.0\",\"eslint\":\"^6.0.1\",\"eslint-config-eslint\":\"^5.0.1\",\"eslint-plugin-node\":\"^9.1.0\",\"eslint-release\":\"^1.0.0\",\"espree\":\"^6.0.0\",\"istanbul\":\"^0.4.5\",\"mocha\":\"^6.1.4\",\"npm-license\":\"^0.3.3\",\"shelljs\":\"^0.8.3\",\"typescript\":\"^3.5.2\"},\"engines\":{\"node\":\">=8.0.0\"},\"files\":[\"LICENSE\",\"README.md\",\"lib\"],\"homepage\":\"http://github.com/eslint/eslint-scope\",\"license\":\"BSD-2-Clause\",\"main\":\"lib/index.js\",\"name\":\"eslint-scope\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/eslint/eslint-scope.git\"},\"scripts\":{\"generate-alpharelease\":\"eslint-generate-prerelease alpha\",\"generate-betarelease\":\"eslint-generate-prerelease beta\",\"generate-rcrelease\":\"eslint-generate-prerelease rc\",\"generate-release\":\"eslint-generate-release\",\"lint\":\"node Makefile.js lint\",\"publish-release\":\"eslint-publish-release\",\"test\":\"node Makefile.js test\"},\"version\":\"5.0.0\"}");
 
 /***/ }),
 /* 392 */
@@ -20481,8 +20481,8 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
   // 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 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-\u08c7\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\u0d04-\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-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\u9ffc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7ca\ua7f5-\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-\uab69\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\u0b55-\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\u0d81-\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\u1abf\u1ac0\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\ua82c\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
@@ -20492,9 +20492,9 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
   // 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 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, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 107, 20, 28, 22, 13, 52, 76, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 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, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 230, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 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, 190, 0, 80, 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, 1237, 43, 8, 8952, 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, 42717, 35, 4148, 12, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938]; // 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
+  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, 370, 1, 154, 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, 2, 11, 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, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 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, 82, 0, 12, 1, 19628, 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, 4759, 9, 787719, 239]; // This has a complexity linear to the value of the code. The
   // assumption is that looking up astral identifier characters is
   // rare.
 
@@ -20724,6 +20724,7 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
     starstar: new TokenType("**", {
       beforeExpr: true
     }),
+    coalesce: binop("??", 1),
     // Keyword token types.
     _break: kw("break"),
     _case: kw("case", beforeExpr),
@@ -21202,7 +21203,11 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
       }
 
       if ((match[1] || match[2]) === "use strict") {
-        return true;
+        skipWhiteSpace.lastIndex = start + match[0].length;
+        var spaceAfter = skipWhiteSpace.exec(this.input),
+            end = spaceAfter.index + spaceAfter[0].length;
+        var next = this.input.charAt(end);
+        return next === ";" || next === "}" || lineBreak.test(spaceAfter[0]) && !(/[(`.[+\-/*%<>=,?^&]/.test(next) || next === "!" && this.input.charAt(end + 1) === "=");
       }
 
       start += match[0].length; // Skip semicolon, if any.
@@ -21547,7 +21552,7 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
           var next = this.pos + skip[0].length,
               nextCh = this.input.charCodeAt(next);
 
-          if (nextCh === 40) // '('
+          if (nextCh === 40 || nextCh === 46) // '(' or '.'
             {
               return this.parseExpressionStatement(node, this.parseExpression());
             }
@@ -21951,7 +21956,7 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
   // function bodies).
 
 
-  pp$1.parseBlock = function (createNewLexicalScope, node) {
+  pp$1.parseBlock = function (createNewLexicalScope, node, exitStrict) {
     if (createNewLexicalScope === void 0) createNewLexicalScope = true;
     if (node === void 0) node = this.startNode();
     node.body = [];
@@ -21961,11 +21966,17 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
       this.enterScope(0);
     }
 
-    while (!this.eat(types.braceR)) {
+    while (this.type !== types.braceR) {
       var stmt = this.parseStatement(null);
       node.body.push(stmt);
     }
 
+    if (exitStrict) {
+      this.strict = false;
+    }
+
+    this.next();
+
     if (createNewLexicalScope) {
       this.exitScope();
     }
@@ -22118,7 +22129,7 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
     classBody.body = [];
     this.expect(types.braceL);
 
-    while (!this.eat(types.braceR)) {
+    while (this.type !== types.braceR) {
       var element = this.parseClassElement(node.superClass !== null);
 
       if (element) {
@@ -22134,8 +22145,9 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
       }
     }
 
-    node.body = this.finishNode(classBody, "ClassBody");
     this.strict = oldStrict;
+    this.next();
+    node.body = this.finishNode(classBody, "ClassBody");
     return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression");
   };
 
@@ -22261,6 +22273,15 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
     this.next(); // export * from '...'
 
     if (this.eat(types.star)) {
+      if (this.options.ecmaVersion >= 11) {
+        if (this.eatContextual("as")) {
+          node.exported = this.parseIdent(true);
+          this.checkExport(exports, node.exported.name, this.lastTokStart);
+        } else {
+          node.exported = null;
+        }
+      }
+
       this.expectContextual("from");
 
       if (this.type !== types.string) {
@@ -23034,12 +23055,25 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
     if (prec != null && (!noIn || this.type !== types._in)) {
       if (prec > minPrec) {
         var logical = this.type === types.logicalOR || this.type === types.logicalAND;
+        var coalesce = this.type === types.coalesce;
+
+        if (coalesce) {
+          // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.
+          // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.
+          prec = types.logicalAND.binop;
+        }
+
         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);
+        var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);
+
+        if (logical && this.type === types.coalesce || coalesce && (this.type === types.logicalOR || this.type === types.logicalAND)) {
+          this.raiseRecoverable(this.start, "Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses");
+        }
+
         return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, noIn);
       }
     }
@@ -23133,7 +23167,7 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
   };
 
   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";
+    var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === "Identifier" && base.name === "async" && this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && this.potentialArrowAt === base.start;
 
     while (true) {
       var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow);
@@ -23350,13 +23384,23 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
   };
 
   pp$3.parseExprImport = function () {
-    var node = this.startNode();
-    this.next(); // skip `import`
+    var node = this.startNode(); // Consume `import` as an identifier for `import.meta`.
+    // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.
+
+    if (this.containsEsc) {
+      this.raiseRecoverable(this.start, "Escape sequence in keyword import");
+    }
+
+    var meta = this.parseIdent(true);
 
     switch (this.type) {
       case types.parenL:
         return this.parseDynamicImport(node);
 
+      case types.dot:
+        node.meta = meta;
+        return this.parseImportMeta(node);
+
       default:
         this.unexpected();
     }
@@ -23381,6 +23425,27 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
     return this.finishNode(node, "ImportExpression");
   };
 
+  pp$3.parseImportMeta = function (node) {
+    this.next(); // skip `.`
+
+    var containsEsc = this.containsEsc;
+    node.property = this.parseIdent(true);
+
+    if (node.property.name !== "meta") {
+      this.raiseRecoverable(node.property.start, "The only valid meta property for import is 'import.meta'");
+    }
+
+    if (containsEsc) {
+      this.raiseRecoverable(node.start, "'import.meta' must not contain escaped characters");
+    }
+
+    if (this.options.sourceType !== "module") {
+      this.raiseRecoverable(node.start, "Cannot use 'import.meta' outside a module");
+    }
+
+    return this.finishNode(node, "MetaProperty");
+  };
+
   pp$3.parseLiteral = function (value) {
     var node = this.startNode();
     node.value = value;
@@ -23513,12 +23578,16 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
       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 (node.property.name !== "target") {
+        this.raiseRecoverable(node.property.start, "The only valid meta property for new is 'new.target'");
+      }
+
+      if (containsEsc) {
+        this.raiseRecoverable(node.start, "'new.target' must not contain escaped characters");
       }
 
       if (!this.inNonArrowFunction()) {
-        this.raiseRecoverable(node.start, "new.target can only be used in functions");
+        this.raiseRecoverable(node.start, "'new.target' can only be used in functions");
       }
 
       return this.finishNode(node, "MetaProperty");
@@ -23886,20 +23955,19 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
       // 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);
+      this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params)); // 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);
+      }
+
+      node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);
       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;
+    this.exitScope();
   };
 
   pp$3.isSimpleParamList = function (params) {
@@ -24497,7 +24565,8 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
   // Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).
 
 
-  RegExpValidationState.prototype.at = function at(i) {
+  RegExpValidationState.prototype.at = function at(i, forceU) {
+    if (forceU === void 0) forceU = false;
     var s = this.source;
     var l = s.length;
 
@@ -24507,7 +24576,7 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
 
     var c = s.charCodeAt(i);
 
-    if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {
+    if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {
       return c;
     }
 
@@ -24515,7 +24584,8 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
     return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c;
   };
 
-  RegExpValidationState.prototype.nextIndex = function nextIndex(i) {
+  RegExpValidationState.prototype.nextIndex = function nextIndex(i, forceU) {
+    if (forceU === void 0) forceU = false;
     var s = this.source;
     var l = s.length;
 
@@ -24526,28 +24596,33 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
     var c = s.charCodeAt(i),
         next;
 
-    if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l || (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {
+    if (!(forceU || 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.current = function current(forceU) {
+    if (forceU === void 0) forceU = false;
+    return this.at(this.pos, forceU);
   };
 
-  RegExpValidationState.prototype.lookahead = function lookahead() {
-    return this.at(this.nextIndex(this.pos));
+  RegExpValidationState.prototype.lookahead = function lookahead(forceU) {
+    if (forceU === void 0) forceU = false;
+    return this.at(this.nextIndex(this.pos, forceU), forceU);
   };
 
-  RegExpValidationState.prototype.advance = function advance() {
-    this.pos = this.nextIndex(this.pos);
+  RegExpValidationState.prototype.advance = function advance(forceU) {
+    if (forceU === void 0) forceU = false;
+    this.pos = this.nextIndex(this.pos, forceU);
   };
 
-  RegExpValidationState.prototype.eat = function eat(ch) {
-    if (this.current() === ch) {
-      this.advance();
+  RegExpValidationState.prototype.eat = function eat(ch, forceU) {
+    if (forceU === void 0) forceU = false;
+
+    if (this.current(forceU) === ch) {
+      this.advance(forceU);
       return true;
     }
 
@@ -24997,9 +25072,9 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
       }
 
     return false;
-  }; // GroupSpecifier[U] ::
+  }; // GroupSpecifier ::
   //   [empty]
-  //   `?` GroupName[?U]
+  //   `?` GroupName
 
 
   pp$8.regexp_groupSpecifier = function (state) {
@@ -25017,8 +25092,8 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
 
       state.raise("Invalid group");
     }
-  }; // GroupName[U] ::
-  //   `<` RegExpIdentifierName[?U] `>`
+  }; // GroupName ::
+  //   `<` RegExpIdentifierName `>`
   // Note: this updates `state.lastStringValue` property with the eaten name.
 
 
@@ -25038,9 +25113,9 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
     }
 
     return false;
-  }; // RegExpIdentifierName[U] ::
-  //   RegExpIdentifierStart[?U]
-  //   RegExpIdentifierName[?U] RegExpIdentifierPart[?U]
+  }; // RegExpIdentifierName ::
+  //   RegExpIdentifierStart
+  //   RegExpIdentifierName RegExpIdentifierPart
   // Note: this updates `state.lastStringValue` property with the eaten name.
 
 
@@ -25058,21 +25133,22 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
     }
 
     return false;
-  }; // RegExpIdentifierStart[U] ::
+  }; // RegExpIdentifierStart ::
   //   UnicodeIDStart
   //   `$`
   //   `_`
-  //   `\` RegExpUnicodeEscapeSequence[?U]
+  //   `\` RegExpUnicodeEscapeSequence[+U]
 
 
   pp$8.regexp_eatRegExpIdentifierStart = function (state) {
     var start = state.pos;
-    var ch = state.current();
-    state.advance();
+    var forceU = this.options.ecmaVersion >= 11;
+    var ch = state.current(forceU);
+    state.advance(forceU);
 
     if (ch === 0x5C
     /* \ */
-    && this.regexp_eatRegExpUnicodeEscapeSequence(state)) {
+    && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {
       ch = state.lastIntValue;
     }
 
@@ -25090,23 +25166,24 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
     /* $ */
     || ch === 0x5F;
     /* _ */
-  } // RegExpIdentifierPart[U] ::
+  } // RegExpIdentifierPart ::
   //   UnicodeIDContinue
   //   `$`
   //   `_`
-  //   `\` RegExpUnicodeEscapeSequence[?U]
+  //   `\` RegExpUnicodeEscapeSequence[+U]
   //   <ZWNJ>
   //   <ZWJ>
 
 
   pp$8.regexp_eatRegExpIdentifierPart = function (state) {
     var start = state.pos;
-    var ch = state.current();
-    state.advance();
+    var forceU = this.options.ecmaVersion >= 11;
+    var ch = state.current(forceU);
+    state.advance(forceU);
 
     if (ch === 0x5C
     /* \ */
-    && this.regexp_eatRegExpUnicodeEscapeSequence(state)) {
+    && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {
       ch = state.lastIntValue;
     }
 
@@ -25192,7 +25269,7 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
 
 
   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);
+    return this.regexp_eatControlEscape(state) || this.regexp_eatCControlLetter(state) || this.regexp_eatZero(state) || this.regexp_eatHexEscapeSequence(state) || this.regexp_eatRegExpUnicodeEscapeSequence(state, false) || !state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state) || this.regexp_eatIdentityEscape(state);
   };
 
   pp$8.regexp_eatCControlLetter = function (state) {
@@ -25306,8 +25383,10 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
   } // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence
 
 
-  pp$8.regexp_eatRegExpUnicodeEscapeSequence = function (state) {
+  pp$8.regexp_eatRegExpUnicodeEscapeSequence = function (state, forceU) {
+    if (forceU === void 0) forceU = false;
     var start = state.pos;
+    var switchU = forceU || state.switchU;
 
     if (state.eat(0x75
     /* u */
@@ -25315,7 +25394,7 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
       if (this.regexp_eatFixedHexDigits(state, 4)) {
         var lead = state.lastIntValue;
 
-        if (state.switchU && lead >= 0xD800 && lead <= 0xDBFF) {
+        if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {
           var leadSurrogateEnd = state.pos;
 
           if (state.eat(0x5C
@@ -25338,7 +25417,7 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
         return true;
       }
 
-      if (state.switchU && state.eat(0x7B
+      if (switchU && state.eat(0x7B
       /* { */
       ) && this.regexp_eatHexDigits(state) && state.eat(0x7D
       /* } */
@@ -25346,7 +25425,7 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
         return true;
       }
 
-      if (state.switchU) {
+      if (switchU) {
         state.raise("Invalid unicode escape");
       }
 
@@ -26247,6 +26326,19 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
     return this.finishOp(code === 61 ? types.eq : types.prefix, 1);
   };
 
+  pp$9.readToken_question = function () {
+    // '?'
+    if (this.options.ecmaVersion >= 11) {
+      var next = this.input.charCodeAt(this.pos + 1);
+
+      if (next === 63) {
+        return this.finishOp(types.coalesce, 2);
+      }
+    }
+
+    return this.finishOp(types.question, 1);
+  };
+
   pp$9.getTokenFromCode = function (code) {
     switch (code) {
       // The interpretation of a dot depends on whether it is followed
@@ -26292,10 +26384,6 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
         ++this.pos;
         return this.finishToken(types.colon);
 
-      case 63:
-        ++this.pos;
-        return this.finishToken(types.question);
-
       case 96:
         // '`'
         if (this.options.ecmaVersion < 6) {
@@ -26384,6 +26472,10 @@ exports.supportedEcmaVersions = getSupportedEcmaVersions();
         // '=!'
         return this.readToken_eq_excl(code);
 
+      case 63:
+        // '?'
+        return this.readToken_question();
+
       case 126:
         // '~'
         return this.finishOp(types.prefix, 1);
@@ -28500,7 +28592,7 @@ module.exports = {
 /* 402 */
 /***/ (function(module) {
 
-module.exports = JSON.parse("{\"_from\":\"espree@^6.2.1\",\"_id\":\"espree@6.2.1\",\"_inBundle\":false,\"_integrity\":\"sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==\",\"_location\":\"/espree\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"range\",\"registry\":true,\"raw\":\"espree@^6.2.1\",\"name\":\"espree\",\"escapedName\":\"espree\",\"rawSpec\":\"^6.2.1\",\"saveSpec\":null,\"fetchSpec\":\"^6.2.1\"},\"_requiredBy\":[\"/\",\"/eslint\"],\"_resolved\":\"https://registry.npmjs.org/espree/-/espree-6.2.1.tgz\",\"_shasum\":\"77fc72e1fd744a2052c20f38a5b575832e82734a\",\"_spec\":\"espree@^6.2.1\",\"_where\":\"/home/dcsapak/git/pve-eslint/eslint-v7.0.0-alpha.3\",\"author\":{\"name\":\"Nicholas C. Zakas\",\"email\":\"nicholas+npm@nczconsulting.com\"},\"bugs\":{\"url\":\"http://github.com/eslint/espree.git\"},\"bundleDependencies\":false,\"dependencies\":{\"acorn\":\"^7.1.1\",\"acorn-jsx\":\"^5.2.0\",\"eslint-visitor-keys\":\"^1.1.0\"},\"deprecated\":false,\"description\":\"An Esprima-compatible JavaScript parser built on Acorn\",\"devDependencies\":{\"browserify\":\"^16.5.0\",\"chai\":\"^4.2.0\",\"eslint\":\"^6.0.1\",\"eslint-config-eslint\":\"^5.0.1\",\"eslint-plugin-node\":\"^9.1.0\",\"eslint-release\":\"^1.0.0\",\"esprima\":\"latest\",\"esprima-fb\":\"^8001.2001.0-dev-harmony-fb\",\"json-diff\":\"^0.5.4\",\"leche\":\"^2.3.0\",\"mocha\":\"^6.2.0\",\"nyc\":\"^14.1.1\",\"regenerate\":\"^1.4.0\",\"shelljs\":\"^0.3.0\",\"shelljs-nodecli\":\"^0.1.1\",\"unicode-6.3.0\":\"^0.7.5\"},\"engines\":{\"node\":\">=6.0.0\"},\"files\":[\"lib\",\"espree.js\"],\"homepage\":\"https://github.com/eslint/espree\",\"keywords\":[\"ast\",\"ecmascript\",\"javascript\",\"parser\",\"syntax\",\"acorn\"],\"license\":\"BSD-2-Clause\",\"main\":\"espree.js\",\"name\":\"espree\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/eslint/espree.git\"},\"scripts\":{\"browserify\":\"node Makefile.js browserify\",\"generate-alpharelease\":\"eslint-generate-prerelease alpha\",\"generate-betarelease\":\"eslint-generate-prerelease beta\",\"generate-rcrelease\":\"eslint-generate-prerelease rc\",\"generate-regex\":\"node tools/generate-identifier-regex.js\",\"generate-release\":\"eslint-generate-release\",\"lint\":\"node Makefile.js lint\",\"publish-release\":\"eslint-publish-release\",\"test\":\"npm run-script lint && node Makefile.js test\"},\"version\":\"6.2.1\"}");
+module.exports = JSON.parse("{\"_from\":\"espree@^7.0.0\",\"_id\":\"espree@7.0.0\",\"_inBundle\":false,\"_integrity\":\"sha512-/r2XEx5Mw4pgKdyb7GNLQNsu++asx/dltf/CI8RFi9oGHxmQFgvLbc5Op4U6i8Oaj+kdslhJtVlEZeAqH5qOTw==\",\"_location\":\"/espree\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"range\",\"registry\":true,\"raw\":\"espree@^7.0.0\",\"name\":\"espree\",\"escapedName\":\"espree\",\"rawSpec\":\"^7.0.0\",\"saveSpec\":null,\"fetchSpec\":\"^7.0.0\"},\"_requiredBy\":[\"/\",\"/eslint\"],\"_resolved\":\"https://registry.npmjs.org/espree/-/espree-7.0.0.tgz\",\"_shasum\":\"8a7a60f218e69f120a842dc24c5a88aa7748a74e\",\"_spec\":\"espree@^7.0.0\",\"_where\":\"/home/dcsapak/git/pve-eslint/eslint-v7.0.0\",\"author\":{\"name\":\"Nicholas C. Zakas\",\"email\":\"nicholas+npm@nczconsulting.com\"},\"bugs\":{\"url\":\"http://github.com/eslint/espree.git\"},\"bundleDependencies\":false,\"dependencies\":{\"acorn\":\"^7.1.1\",\"acorn-jsx\":\"^5.2.0\",\"eslint-visitor-keys\":\"^1.1.0\"},\"deprecated\":false,\"description\":\"An Esprima-compatible JavaScript parser built on Acorn\",\"devDependencies\":{\"browserify\":\"^16.5.0\",\"chai\":\"^4.2.0\",\"eslint\":\"^6.0.1\",\"eslint-config-eslint\":\"^5.0.1\",\"eslint-plugin-node\":\"^9.1.0\",\"eslint-release\":\"^1.0.0\",\"esprima\":\"latest\",\"esprima-fb\":\"^8001.2001.0-dev-harmony-fb\",\"json-diff\":\"^0.5.4\",\"leche\":\"^2.3.0\",\"mocha\":\"^6.2.0\",\"nyc\":\"^14.1.1\",\"regenerate\":\"^1.4.0\",\"shelljs\":\"^0.3.0\",\"shelljs-nodecli\":\"^0.1.1\",\"unicode-6.3.0\":\"^0.7.5\"},\"engines\":{\"node\":\"^10.12.0 || >=12.0.0\"},\"files\":[\"lib\",\"espree.js\"],\"homepage\":\"https://github.com/eslint/espree\",\"keywords\":[\"ast\",\"ecmascript\",\"javascript\",\"parser\",\"syntax\",\"acorn\"],\"license\":\"BSD-2-Clause\",\"main\":\"espree.js\",\"name\":\"espree\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/eslint/espree.git\"},\"scripts\":{\"browserify\":\"node Makefile.js browserify\",\"generate-alpharelease\":\"eslint-generate-prerelease alpha\",\"generate-betarelease\":\"eslint-generate-prerelease beta\",\"generate-rcrelease\":\"eslint-generate-prerelease rc\",\"generate-regex\":\"node tools/generate-identifier-regex.js\",\"generate-release\":\"eslint-generate-release\",\"lint\":\"node Makefile.js lint\",\"publish-release\":\"eslint-publish-release\",\"sync-docs\":\"node Makefile.js docs\",\"test\":\"npm run-script lint && node Makefile.js test\"},\"version\":\"7.0.0\"}");
 
 /***/ }),
 /* 403 */
@@ -45720,13 +45812,13 @@ module.exports = new Map(Object.entries({
     }
   },
   es2017: {
-    globals: _objectSpread({}, newGlobals2015, {}, newGlobals2017),
+    globals: _objectSpread(_objectSpread({}, newGlobals2015), newGlobals2017),
     parserOptions: {
       ecmaVersion: 8
     }
   },
   es2020: {
-    globals: _objectSpread({}, newGlobals2015, {}, newGlobals2017, {}, newGlobals2020),
+    globals: _objectSpread(_objectSpread(_objectSpread({}, newGlobals2015), newGlobals2017), newGlobals2020),
     parserOptions: {
       ecmaVersion: 11
     }
@@ -45836,7 +45928,7 @@ module.exports = JSON.parse("{\"builtin\":{\"Array\":false,\"ArrayBuffer\":false
 /* 408 */
 /***/ (function(module) {
 
-module.exports = JSON.parse("{\"name\":\"eslint\",\"version\":\"7.0.0-alpha.3\",\"author\":\"Nicholas C. Zakas <nicholas+npm@nczconsulting.com>\",\"description\":\"An AST-based pattern checker for JavaScript.\",\"bin\":{\"eslint\":\"./bin/eslint.js\"},\"main\":\"./lib/api.js\",\"scripts\":{\"test\":\"node Makefile.js test\",\"test:cli\":\"mocha\",\"lint\":\"node Makefile.js lint\",\"fix\":\"node Makefile.js lint -- fix\",\"fuzz\":\"node Makefile.js fuzz\",\"generate-release\":\"node Makefile.js generateRelease\",\"generate-alpharelease\":\"node Makefile.js generatePrerelease -- alpha\",\"generate-betarelease\":\"node Makefile.js generatePrerelease -- beta\",\"generate-rcrelease\":\"node Makefile.js generatePrerelease -- rc\",\"publish-release\":\"node Makefile.js publishRelease\",\"docs\":\"node Makefile.js docs\",\"gensite\":\"node Makefile.js gensite\",\"webpack\":\"node Makefile.js webpack\",\"perf\":\"node Makefile.js perf\"},\"gitHooks\":{\"pre-commit\":\"lint-staged\"},\"lint-staged\":{\"*.js\":[\"eslint --fix\",\"git add\"],\"*.md\":\"markdownlint\"},\"files\":[\"LICENSE\",\"README.md\",\"bin\",\"conf\",\"lib\",\"messages\"],\"repository\":\"eslint/eslint\",\"funding\":\"https://opencollective.com/eslint\",\"homepage\":\"https://eslint.org\",\"bugs\":\"https://github.com/eslint/eslint/issues/\",\"dependencies\":{\"@babel/code-frame\":\"^7.0.0\",\"ajv\":\"^6.10.0\",\"chalk\":\"^3.0.0\",\"cross-spawn\":\"^7.0.1\",\"debug\":\"^4.0.1\",\"doctrine\":\"^3.0.0\",\"eslint-scope\":\"^5.0.0\",\"eslint-utils\":\"^2.0.0\",\"eslint-visitor-keys\":\"^1.1.0\",\"espree\":\"^6.2.1\",\"esquery\":\"^1.2.0\",\"esutils\":\"^2.0.2\",\"file-entry-cache\":\"^5.0.1\",\"functional-red-black-tree\":\"^1.0.1\",\"glob-parent\":\"^5.0.0\",\"globals\":\"^12.1.0\",\"ignore\":\"^4.0.6\",\"import-fresh\":\"^3.0.0\",\"imurmurhash\":\"^0.1.4\",\"inquirer\":\"^7.0.0\",\"is-glob\":\"^4.0.0\",\"js-yaml\":\"^3.13.1\",\"json-stable-stringify-without-jsonify\":\"^1.0.1\",\"levn\":\"^0.3.0\",\"lodash\":\"^4.17.14\",\"minimatch\":\"^3.0.4\",\"natural-compare\":\"^1.4.0\",\"optionator\":\"^0.8.3\",\"progress\":\"^2.0.0\",\"regexpp\":\"^3.0.0\",\"semver\":\"^7.1.1\",\"strip-ansi\":\"^6.0.0\",\"strip-json-comments\":\"^3.0.1\",\"table\":\"^5.2.3\",\"text-table\":\"^0.2.0\",\"v8-compile-cache\":\"^2.0.3\"},\"devDependencies\":{\"@babel/core\":\"^7.4.3\",\"@babel/preset-env\":\"^7.4.3\",\"acorn\":\"^7.1.1\",\"babel-loader\":\"^8.0.5\",\"chai\":\"^4.0.1\",\"cheerio\":\"^0.22.0\",\"common-tags\":\"^1.8.0\",\"core-js\":\"^3.1.3\",\"dateformat\":\"^3.0.3\",\"ejs\":\"^2.6.1\",\"eslint\":\"file:.\",\"eslint-config-eslint\":\"file:packages/eslint-config-eslint\",\"eslint-plugin-eslint-plugin\":\"^2.2.1\",\"eslint-plugin-internal-rules\":\"file:tools/internal-rules\",\"eslint-plugin-jsdoc\":\"^15.9.5\",\"eslint-plugin-node\":\"^9.0.0\",\"eslint-release\":\"^1.2.0\",\"eslump\":\"^2.0.0\",\"esprima\":\"^4.0.1\",\"glob\":\"^7.1.3\",\"jsdoc\":\"^3.5.5\",\"karma\":\"^4.0.1\",\"karma-chrome-launcher\":\"^2.2.0\",\"karma-mocha\":\"^1.3.0\",\"karma-mocha-reporter\":\"^2.2.3\",\"karma-webpack\":\"^4.0.0-rc.6\",\"leche\":\"^2.2.3\",\"lint-staged\":\"^8.1.5\",\"load-perf\":\"^0.2.0\",\"markdownlint\":\"^0.15.0\",\"markdownlint-cli\":\"^0.17.0\",\"memfs\":\"^3.0.1\",\"mocha\":\"^6.1.2\",\"mocha-junit-reporter\":\"^1.23.0\",\"npm-license\":\"^0.3.3\",\"nyc\":\"^14.1.1\",\"proxyquire\":\"^2.0.1\",\"puppeteer\":\"^1.18.0\",\"recast\":\"^0.18.1\",\"regenerator-runtime\":\"^0.13.2\",\"shelljs\":\"^0.8.2\",\"sinon\":\"^7.3.2\",\"temp\":\"^0.9.0\",\"webpack\":\"^4.35.0\",\"webpack-cli\":\"^3.3.5\",\"yorkie\":\"^2.0.0\"},\"keywords\":[\"ast\",\"lint\",\"javascript\",\"ecmascript\",\"espree\"],\"license\":\"MIT\",\"engines\":{\"node\":\"^10.12.0 || >=12.0.0\"}}");
+module.exports = JSON.parse("{\"name\":\"eslint\",\"version\":\"7.0.0\",\"author\":\"Nicholas C. Zakas <nicholas+npm@nczconsulting.com>\",\"description\":\"An AST-based pattern checker for JavaScript.\",\"bin\":{\"eslint\":\"./bin/eslint.js\"},\"main\":\"./lib/api.js\",\"scripts\":{\"test\":\"node Makefile.js test\",\"test:cli\":\"mocha\",\"lint\":\"node Makefile.js lint\",\"fix\":\"node Makefile.js lint -- fix\",\"fuzz\":\"node Makefile.js fuzz\",\"generate-release\":\"node Makefile.js generateRelease\",\"generate-alpharelease\":\"node Makefile.js generatePrerelease -- alpha\",\"generate-betarelease\":\"node Makefile.js generatePrerelease -- beta\",\"generate-rcrelease\":\"node Makefile.js generatePrerelease -- rc\",\"publish-release\":\"node Makefile.js publishRelease\",\"docs\":\"node Makefile.js docs\",\"gensite\":\"node Makefile.js gensite\",\"webpack\":\"node Makefile.js webpack\",\"perf\":\"node Makefile.js perf\"},\"gitHooks\":{\"pre-commit\":\"lint-staged\"},\"lint-staged\":{\"*.js\":[\"eslint --fix\",\"git add\"],\"*.md\":\"markdownlint\"},\"files\":[\"LICENSE\",\"README.md\",\"bin\",\"conf\",\"lib\",\"messages\"],\"repository\":\"eslint/eslint\",\"funding\":\"https://opencollective.com/eslint\",\"homepage\":\"https://eslint.org\",\"bugs\":\"https://github.com/eslint/eslint/issues/\",\"dependencies\":{\"@babel/code-frame\":\"^7.0.0\",\"ajv\":\"^6.10.0\",\"chalk\":\"^4.0.0\",\"cross-spawn\":\"^7.0.2\",\"debug\":\"^4.0.1\",\"doctrine\":\"^3.0.0\",\"eslint-scope\":\"^5.0.0\",\"eslint-utils\":\"^2.0.0\",\"eslint-visitor-keys\":\"^1.1.0\",\"espree\":\"^7.0.0\",\"esquery\":\"^1.2.0\",\"esutils\":\"^2.0.2\",\"file-entry-cache\":\"^5.0.1\",\"functional-red-black-tree\":\"^1.0.1\",\"glob-parent\":\"^5.0.0\",\"globals\":\"^12.1.0\",\"ignore\":\"^4.0.6\",\"import-fresh\":\"^3.0.0\",\"imurmurhash\":\"^0.1.4\",\"inquirer\":\"^7.0.0\",\"is-glob\":\"^4.0.0\",\"js-yaml\":\"^3.13.1\",\"json-stable-stringify-without-jsonify\":\"^1.0.1\",\"levn\":\"^0.4.1\",\"lodash\":\"^4.17.14\",\"minimatch\":\"^3.0.4\",\"natural-compare\":\"^1.4.0\",\"optionator\":\"^0.9.1\",\"progress\":\"^2.0.0\",\"regexpp\":\"^3.1.0\",\"semver\":\"^7.2.1\",\"strip-ansi\":\"^6.0.0\",\"strip-json-comments\":\"^3.1.0\",\"table\":\"^5.2.3\",\"text-table\":\"^0.2.0\",\"v8-compile-cache\":\"^2.0.3\"},\"devDependencies\":{\"@babel/core\":\"^7.4.3\",\"@babel/preset-env\":\"^7.4.3\",\"acorn\":\"^7.1.1\",\"babel-loader\":\"^8.0.5\",\"chai\":\"^4.0.1\",\"cheerio\":\"^0.22.0\",\"common-tags\":\"^1.8.0\",\"core-js\":\"^3.1.3\",\"dateformat\":\"^3.0.3\",\"ejs\":\"^3.0.2\",\"escape-string-regexp\":\"^3.0.0\",\"eslint\":\"file:.\",\"eslint-config-eslint\":\"file:packages/eslint-config-eslint\",\"eslint-plugin-eslint-plugin\":\"^2.2.1\",\"eslint-plugin-internal-rules\":\"file:tools/internal-rules\",\"eslint-plugin-jsdoc\":\"^22.1.0\",\"eslint-plugin-node\":\"^11.1.0\",\"eslint-release\":\"^2.0.0\",\"eslump\":\"^2.0.0\",\"esprima\":\"^4.0.1\",\"glob\":\"^7.1.6\",\"jsdoc\":\"^3.5.5\",\"karma\":\"^4.0.1\",\"karma-chrome-launcher\":\"^3.1.0\",\"karma-mocha\":\"^1.3.0\",\"karma-mocha-reporter\":\"^2.2.3\",\"karma-webpack\":\"^4.0.0-rc.6\",\"leche\":\"^2.2.3\",\"lint-staged\":\"^10.1.2\",\"load-perf\":\"^0.2.0\",\"markdownlint\":\"^0.19.0\",\"markdownlint-cli\":\"^0.22.0\",\"memfs\":\"^3.0.1\",\"mocha\":\"^7.1.1\",\"mocha-junit-reporter\":\"^1.23.0\",\"npm-license\":\"^0.3.3\",\"nyc\":\"^15.0.1\",\"proxyquire\":\"^2.0.1\",\"puppeteer\":\"^2.1.1\",\"recast\":\"^0.19.0\",\"regenerator-runtime\":\"^0.13.2\",\"shelljs\":\"^0.8.2\",\"sinon\":\"^9.0.1\",\"temp\":\"^0.9.0\",\"webpack\":\"^4.35.0\",\"webpack-cli\":\"^3.3.5\",\"yorkie\":\"^2.0.0\"},\"keywords\":[\"ast\",\"lint\",\"javascript\",\"ecmascript\",\"espree\"],\"license\":\"MIT\",\"engines\":{\"node\":\"^10.12.0 || >=12.0.0\"}}");
 
 /***/ }),
 /* 409 */
@@ -50735,24 +50827,6 @@ const TARGET_METHODS = /^(?:every|filter|find(?:Index)?|flatMap|forEach|map|redu
 function isReachable(segment) {
   return segment.reachable;
 }
-/**
- * Gets a readable location.
- *
- * - FunctionExpression -> the function name or `function` keyword.
- * - ArrowFunctionExpression -> `=>` token.
- * @param {ASTNode} node A function node to get.
- * @param {SourceCode} sourceCode A source code to get tokens.
- * @returns {ASTNode|Token} The node or the token of a location.
- */
-
-
-function getLocation(node, sourceCode) {
-  if (node.type === "ArrowFunctionExpression") {
-    return sourceCode.getTokenBefore(node.body);
-  }
-
-  return node.id || node;
-}
 /**
  * Checks a given node is a MemberExpression node which has the specified name's
  * property.
@@ -50883,6 +50957,7 @@ module.exports = {
       allowImplicit: false,
       checkForEach: false
     };
+    const sourceCode = context.getSourceCode();
     let funcInfo = {
       arrayMethodName: null,
       upper: null,
@@ -50919,11 +50994,11 @@ module.exports = {
       }
 
       if (messageId) {
-        let name = astUtils.getFunctionNameWithKind(funcInfo.node);
+        let name = astUtils.getFunctionNameWithKind(node);
         name = messageId === "expectedNoReturnValue" ? lodash.upperFirst(name) : name;
         context.report({
           node,
-          loc: getLocation(node, context.getSourceCode()).loc.start,
+          loc: astUtils.getFunctionHeadLoc(node, sourceCode),
           messageId,
           data: {
             name
@@ -52332,6 +52407,8 @@ module.exports = {
 
 module.exports = {
   meta: {
+    deprecated: true,
+    replacedBy: ["node/callback-return"],
     type: "suggestion",
     docs: {
       description: "require `return` statements after callbacks",
@@ -53861,26 +53938,21 @@ module.exports = {
 
         context.report({
           node: reportItem,
-          loc: {
-            line: commaToken.loc.end.line,
-            column: commaToken.loc.start.column
-          },
+          loc: commaToken.loc,
           messageId: "unexpectedLineBeforeAndAfterComma",
           fix: getFixerFunction(styleType, previousItemToken, commaToken, currentItemToken)
         });
       } else if (style === "first" && !astUtils.isTokenOnSameLine(commaToken, currentItemToken)) {
         context.report({
           node: reportItem,
+          loc: commaToken.loc,
           messageId: "expectedCommaFirst",
           fix: getFixerFunction(style, previousItemToken, commaToken, currentItemToken)
         });
       } else if (style === "last" && astUtils.isTokenOnSameLine(commaToken, currentItemToken)) {
         context.report({
           node: reportItem,
-          loc: {
-            line: commaToken.loc.end.line,
-            column: commaToken.loc.end.column
-          },
+          loc: commaToken.loc,
           messageId: "expectedCommaLast",
           fix: getFixerFunction(style, previousItemToken, commaToken, currentItemToken)
         });
@@ -56521,7 +56593,8 @@ module.exports = {
       }]
     },
     messages: {
-      unexpected: "Unexpected newline between function name and paren.",
+      unexpectedWhitespace: "Unexpected whitespace between function name and paren.",
+      unexpectedNewline: "Unexpected newline between function name and paren.",
       missing: "Missing space between function name and paren."
     }
   },
@@ -56572,7 +56645,7 @@ module.exports = {
         context.report({
           node,
           loc: leftToken.loc.start,
-          messageId: "unexpected",
+          messageId: "unexpectedWhitespace",
 
           fix(fixer) {
             /*
@@ -56602,7 +56675,7 @@ module.exports = {
         context.report({
           node,
           loc: leftToken.loc.start,
-          messageId: "unexpected",
+          messageId: "unexpectedNewline",
 
           fix(fixer) {
             return fixer.replaceTextRange([leftToken.range[1], rightToken.range[0]], " ");
@@ -57803,18 +57876,6 @@ const TARGET_NODE_TYPE = /^(?:Arrow)?FunctionExpression$/u;
 
 function isReachable(segment) {
   return segment.reachable;
-}
-/**
- * Gets a readable location.
- *
- * - FunctionExpression -> the function name or `function` keyword.
- * @param {ASTNode} node A function node to get.
- * @returns {ASTNode|Token} The node or the token of a location.
- */
-
-
-function getId(node) {
-  return node.id || node;
 } //------------------------------------------------------------------------------
 // Rule Definition
 //------------------------------------------------------------------------------
@@ -57850,6 +57911,7 @@ module.exports = {
     const options = context.options[0] || {
       allowImplicit: false
     };
+    const sourceCode = context.getSourceCode();
     let funcInfo = {
       upper: null,
       codePath: null,
@@ -57871,7 +57933,7 @@ module.exports = {
       if (funcInfo.shouldCheck && funcInfo.codePath.currentSegments.some(isReachable)) {
         context.report({
           node,
-          loc: getId(node).loc.start,
+          loc: astUtils.getFunctionHeadLoc(node, sourceCode),
           messageId: funcInfo.hasReturn ? "expectedAlways" : "expected",
           data: {
             name: astUtils.getFunctionNameWithKind(funcInfo.node)
@@ -57996,6 +58058,8 @@ function isShadowed(scope, node) {
 
 module.exports = {
   meta: {
+    deprecated: true,
+    replacedBy: ["node/global-require"],
     type: "suggestion",
     docs: {
       description: "require `require()` calls to be placed at top-level module scope",
@@ -58344,6 +58408,8 @@ module.exports = {
 
 module.exports = {
   meta: {
+    deprecated: true,
+    replacedBy: ["node/handle-callback-err"],
     type: "suggestion",
     docs: {
       description: "require error handling in callbacks",
@@ -63010,7 +63076,7 @@ function isSingleLine(node) {
 /**
  * Checks whether the properties on a single line.
  * @param {ASTNode[]} properties List of Property AST nodes.
- * @returns {boolean} True if all properies is on a single line.
+ * @returns {boolean} True if all properties is on a single line.
  */
 
 
@@ -67469,7 +67535,7 @@ module.exports = {
 
       context.report({
         node,
-        loc: callee.loc.start,
+        loc: callee.loc,
         messageId
       });
     } //--------------------------------------------------------------------------
@@ -68163,16 +68229,19 @@ module.exports = {
         }
 
         if (depth > ignoreChainWithDepth && astUtils.isTokenOnSameLine(callee.object, callee.property)) {
+          const firstTokenAfterObject = sourceCode.getTokenAfter(callee.object, astUtils.isNotClosingParenToken);
           context.report({
             node: callee.property,
-            loc: callee.property.loc.start,
+            loc: {
+              start: firstTokenAfterObject.loc.start,
+              end: callee.loc.end
+            },
             messageId: "expected",
             data: {
               callee: getPropertyText(callee)
             },
 
             fix(fixer) {
-              const firstTokenAfterObject = sourceCode.getTokenAfter(callee.object, astUtils.isNotClosingParenToken);
               return fixer.insertTextBefore(firstTokenAfterObject, "\n");
             }
 
@@ -68654,6 +68723,8 @@ module.exports = {
 
 module.exports = {
   meta: {
+    deprecated: true,
+    replacedBy: ["node/no-deprecated-api"],
     type: "problem",
     docs: {
       description: "disallow use of the `Buffer()` constructor",
@@ -69896,8 +69967,8 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "visitRegExpAST", function() { return visitRegExpAST; });
 /*! @author Toru Nagashima <https://github.com/mysticatea> */
 var ast = /*#__PURE__*/Object.freeze({});
-let largeIdStartPattern = null;
-let largeIdContinuePattern = null;
+let largeIdStartRanges = undefined;
+let largeIdContinueRanges = undefined;
 
 function isIdStart(cp) {
   if (cp < 0x41) return false;
@@ -69919,111 +69990,93 @@ function isIdContinue(cp) {
 }
 
 function isLargeIdStart(cp) {
-  if (!largeIdStartPattern) {
-    largeIdStartPattern = new RegExp("^[\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" + "\u{10000}-\u{1000b}\u{1000d}-\u{10026}\u{10028}-\u{1003a}" + "\u{1003c}\u{1003d}\u{1003f}-\u{1004d}\u{10050}-\u{1005d}" + "\u{10080}-\u{100fa}\u{10140}-\u{10174}\u{10280}-\u{1029c}" + "\u{102a0}-\u{102d0}\u{10300}-\u{1031f}\u{1032d}-\u{1034a}" + "\u{10350}-\u{10375}\u{10380}-\u{1039d}\u{103a0}-\u{103c3}" + "\u{103c8}-\u{103cf}\u{103d1}-\u{103d5}\u{10400}-\u{1049d}" + "\u{104b0}-\u{104d3}\u{104d8}-\u{104fb}\u{10500}-\u{10527}" + "\u{10530}-\u{10563}\u{10600}-\u{10736}\u{10740}-\u{10755}" + "\u{10760}-\u{10767}\u{10800}-\u{10805}\u{10808}" + "\u{1080a}-\u{10835}\u{10837}\u{10838}\u{1083c}" + "\u{1083f}-\u{10855}\u{10860}-\u{10876}\u{10880}-\u{1089e}" + "\u{108e0}-\u{108f2}\u{108f4}\u{108f5}\u{10900}-\u{10915}" + "\u{10920}-\u{10939}\u{10980}-\u{109b7}\u{109be}\u{109bf}" + "\u{10a00}\u{10a10}-\u{10a13}\u{10a15}-\u{10a17}" + "\u{10a19}-\u{10a35}\u{10a60}-\u{10a7c}\u{10a80}-\u{10a9c}" + "\u{10ac0}-\u{10ac7}\u{10ac9}-\u{10ae4}\u{10b00}-\u{10b35}" + "\u{10b40}-\u{10b55}\u{10b60}-\u{10b72}\u{10b80}-\u{10b91}" + "\u{10c00}-\u{10c48}\u{10c80}-\u{10cb2}\u{10cc0}-\u{10cf2}" + "\u{10d00}-\u{10d23}\u{10f00}-\u{10f1c}\u{10f27}" + "\u{10f30}-\u{10f45}\u{10fe0}-\u{10ff6}\u{11003}-\u{11037}" + "\u{11083}-\u{110af}\u{110d0}-\u{110e8}\u{11103}-\u{11126}" + "\u{11144}\u{11150}-\u{11172}\u{11176}\u{11183}-\u{111b2}" + "\u{111c1}-\u{111c4}\u{111da}\u{111dc}\u{11200}-\u{11211}" + "\u{11213}-\u{1122b}\u{11280}-\u{11286}\u{11288}" + "\u{1128a}-\u{1128d}\u{1128f}-\u{1129d}\u{1129f}-\u{112a8}" + "\u{112b0}-\u{112de}\u{11305}-\u{1130c}\u{1130f}\u{11310}" + "\u{11313}-\u{11328}\u{1132a}-\u{11330}\u{11332}\u{11333}" + "\u{11335}-\u{11339}\u{1133d}\u{11350}\u{1135d}-\u{11361}" + "\u{11400}-\u{11434}\u{11447}-\u{1144a}\u{1145f}" + "\u{11480}-\u{114af}\u{114c4}\u{114c5}\u{114c7}" + "\u{11580}-\u{115ae}\u{115d8}-\u{115db}\u{11600}-\u{1162f}" + "\u{11644}\u{11680}-\u{116aa}\u{116b8}\u{11700}-\u{1171a}" + "\u{11800}-\u{1182b}\u{118a0}-\u{118df}\u{118ff}" + "\u{119a0}-\u{119a7}\u{119aa}-\u{119d0}\u{119e1}\u{119e3}" + "\u{11a00}\u{11a0b}-\u{11a32}\u{11a3a}\u{11a50}" + "\u{11a5c}-\u{11a89}\u{11a9d}\u{11ac0}-\u{11af8}" + "\u{11c00}-\u{11c08}\u{11c0a}-\u{11c2e}\u{11c40}" + "\u{11c72}-\u{11c8f}\u{11d00}-\u{11d06}\u{11d08}\u{11d09}" + "\u{11d0b}-\u{11d30}\u{11d46}\u{11d60}-\u{11d65}" + "\u{11d67}\u{11d68}\u{11d6a}-\u{11d89}\u{11d98}" + "\u{11ee0}-\u{11ef2}\u{12000}-\u{12399}\u{12400}-\u{1246e}" + "\u{12480}-\u{12543}\u{13000}-\u{1342e}\u{14400}-\u{14646}" + "\u{16800}-\u{16a38}\u{16a40}-\u{16a5e}\u{16ad0}-\u{16aed}" + "\u{16b00}-\u{16b2f}\u{16b40}-\u{16b43}\u{16b63}-\u{16b77}" + "\u{16b7d}-\u{16b8f}\u{16e40}-\u{16e7f}\u{16f00}-\u{16f4a}" + "\u{16f50}\u{16f93}-\u{16f9f}\u{16fe0}\u{16fe1}\u{16fe3}" + "\u{17000}-\u{187f7}\u{18800}-\u{18af2}\u{1b000}-\u{1b11e}" + "\u{1b150}-\u{1b152}\u{1b164}-\u{1b167}\u{1b170}-\u{1b2fb}" + "\u{1bc00}-\u{1bc6a}\u{1bc70}-\u{1bc7c}\u{1bc80}-\u{1bc88}" + "\u{1bc90}-\u{1bc99}\u{1d400}-\u{1d454}\u{1d456}-\u{1d49c}" + "\u{1d49e}\u{1d49f}\u{1d4a2}\u{1d4a5}\u{1d4a6}" + "\u{1d4a9}-\u{1d4ac}\u{1d4ae}-\u{1d4b9}\u{1d4bb}" + "\u{1d4bd}-\u{1d4c3}\u{1d4c5}-\u{1d505}\u{1d507}-\u{1d50a}" + "\u{1d50d}-\u{1d514}\u{1d516}-\u{1d51c}\u{1d51e}-\u{1d539}" + "\u{1d53b}-\u{1d53e}\u{1d540}-\u{1d544}\u{1d546}" + "\u{1d54a}-\u{1d550}\u{1d552}-\u{1d6a5}\u{1d6a8}-\u{1d6c0}" + "\u{1d6c2}-\u{1d6da}\u{1d6dc}-\u{1d6fa}\u{1d6fc}-\u{1d714}" + "\u{1d716}-\u{1d734}\u{1d736}-\u{1d74e}\u{1d750}-\u{1d76e}" + "\u{1d770}-\u{1d788}\u{1d78a}-\u{1d7a8}\u{1d7aa}-\u{1d7c2}" + "\u{1d7c4}-\u{1d7cb}\u{1e100}-\u{1e12c}\u{1e137}-\u{1e13d}" + "\u{1e14e}\u{1e2c0}-\u{1e2eb}\u{1e800}-\u{1e8c4}" + "\u{1e900}-\u{1e943}\u{1e94b}\u{1ee00}-\u{1ee03}" + "\u{1ee05}-\u{1ee1f}\u{1ee21}\u{1ee22}\u{1ee24}\u{1ee27}" + "\u{1ee29}-\u{1ee32}\u{1ee34}-\u{1ee37}\u{1ee39}\u{1ee3b}" + "\u{1ee42}\u{1ee47}\u{1ee49}\u{1ee4b}\u{1ee4d}-\u{1ee4f}" + "\u{1ee51}\u{1ee52}\u{1ee54}\u{1ee57}\u{1ee59}\u{1ee5b}" + "\u{1ee5d}\u{1ee5f}\u{1ee61}\u{1ee62}\u{1ee64}" + "\u{1ee67}-\u{1ee6a}\u{1ee6c}-\u{1ee72}\u{1ee74}-\u{1ee77}" + "\u{1ee79}-\u{1ee7c}\u{1ee7e}\u{1ee80}-\u{1ee89}" + "\u{1ee8b}-\u{1ee9b}\u{1eea1}-\u{1eea3}\u{1eea5}-\u{1eea9}" + "\u{1eeab}-\u{1eebb}\u{20000}-\u{2a6d6}\u{2a700}-\u{2b734}" + "\u{2b740}-\u{2b81d}\u{2b820}-\u{2cea1}\u{2ceb0}-\u{2ebe0}" + "\u{2f800}-\u{2fa1d}]$", "u");
-  }
-
-  return largeIdStartPattern.test(String.fromCodePoint(cp));
+  return isInRange(cp, largeIdStartRanges || (largeIdStartRanges = initLargeIdStartRanges()));
 }
 
 function isLargeIdContinue(cp) {
-  if (!largeIdContinuePattern) {
-    largeIdContinuePattern = new RegExp("^[\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\u{101fd}\u{102e0}" + "\u{10376}-\u{1037a}\u{104a0}-\u{104a9}\u{10a01}-\u{10a03}" + "\u{10a05}\u{10a06}\u{10a0c}-\u{10a0f}\u{10a38}-\u{10a3a}" + "\u{10a3f}\u{10ae5}\u{10ae6}\u{10d24}-\u{10d27}" + "\u{10d30}-\u{10d39}\u{10f46}-\u{10f50}\u{11000}-\u{11002}" + "\u{11038}-\u{11046}\u{11066}-\u{1106f}\u{1107f}-\u{11082}" + "\u{110b0}-\u{110ba}\u{110f0}-\u{110f9}\u{11100}-\u{11102}" + "\u{11127}-\u{11134}\u{11136}-\u{1113f}\u{11145}\u{11146}" + "\u{11173}\u{11180}-\u{11182}\u{111b3}-\u{111c0}" + "\u{111c9}-\u{111cc}\u{111d0}-\u{111d9}\u{1122c}-\u{11237}" + "\u{1123e}\u{112df}-\u{112ea}\u{112f0}-\u{112f9}" + "\u{11300}-\u{11303}\u{1133b}\u{1133c}\u{1133e}-\u{11344}" + "\u{11347}\u{11348}\u{1134b}-\u{1134d}\u{11357}" + "\u{11362}\u{11363}\u{11366}-\u{1136c}\u{11370}-\u{11374}" + "\u{11435}-\u{11446}\u{11450}-\u{11459}\u{1145e}" + "\u{114b0}-\u{114c3}\u{114d0}-\u{114d9}\u{115af}-\u{115b5}" + "\u{115b8}-\u{115c0}\u{115dc}\u{115dd}\u{11630}-\u{11640}" + "\u{11650}-\u{11659}\u{116ab}-\u{116b7}\u{116c0}-\u{116c9}" + "\u{1171d}-\u{1172b}\u{11730}-\u{11739}\u{1182c}-\u{1183a}" + "\u{118e0}-\u{118e9}\u{119d1}-\u{119d7}\u{119da}-\u{119e0}" + "\u{119e4}\u{11a01}-\u{11a0a}\u{11a33}-\u{11a39}" + "\u{11a3b}-\u{11a3e}\u{11a47}\u{11a51}-\u{11a5b}" + "\u{11a8a}-\u{11a99}\u{11c2f}-\u{11c36}\u{11c38}-\u{11c3f}" + "\u{11c50}-\u{11c59}\u{11c92}-\u{11ca7}\u{11ca9}-\u{11cb6}" + "\u{11d31}-\u{11d36}\u{11d3a}\u{11d3c}\u{11d3d}" + "\u{11d3f}-\u{11d45}\u{11d47}\u{11d50}-\u{11d59}" + "\u{11d8a}-\u{11d8e}\u{11d90}\u{11d91}\u{11d93}-\u{11d97}" + "\u{11da0}-\u{11da9}\u{11ef3}-\u{11ef6}\u{16a60}-\u{16a69}" + "\u{16af0}-\u{16af4}\u{16b30}-\u{16b36}\u{16b50}-\u{16b59}" + "\u{16f4f}\u{16f51}-\u{16f87}\u{16f8f}-\u{16f92}" + "\u{1bc9d}\u{1bc9e}\u{1d165}-\u{1d169}\u{1d16d}-\u{1d172}" + "\u{1d17b}-\u{1d182}\u{1d185}-\u{1d18b}\u{1d1aa}-\u{1d1ad}" + "\u{1d242}-\u{1d244}\u{1d7ce}-\u{1d7ff}\u{1da00}-\u{1da36}" + "\u{1da3b}-\u{1da6c}\u{1da75}\u{1da84}\u{1da9b}-\u{1da9f}" + "\u{1daa1}-\u{1daaf}\u{1e000}-\u{1e006}\u{1e008}-\u{1e018}" + "\u{1e01b}-\u{1e021}\u{1e023}\u{1e024}\u{1e026}-\u{1e02a}" + "\u{1e130}-\u{1e136}\u{1e140}-\u{1e149}\u{1e2ec}-\u{1e2f9}" + "\u{1e8d0}-\u{1e8d6}\u{1e944}-\u{1e94a}\u{1e950}-\u{1e959}" + "\u{e0100}-\u{e01ef}]$", "u");
-  }
+  return isInRange(cp, largeIdContinueRanges || (largeIdContinueRanges = initLargeIdContinueRanges()));
+}
 
-  return largeIdContinuePattern.test(String.fromCodePoint(cp));
+function initLargeIdStartRanges() {
+  return restoreRanges("170 0 11 0 5 0 6 22 2 30 2 457 5 11 15 4 8 0 2 0 130 4 2 1 3 3 2 0 7 0 2 2 2 0 2 19 2 82 2 138 9 165 2 37 3 0 7 40 72 26 5 3 46 42 36 1 2 98 2 0 16 1 8 1 11 2 3 0 17 0 2 29 30 88 12 0 25 32 10 1 5 0 6 21 5 0 10 0 4 0 24 24 8 10 54 20 2 17 61 53 4 0 19 0 8 9 16 15 5 7 3 1 3 21 2 6 2 0 4 3 4 0 17 0 14 1 2 2 15 1 11 0 9 5 5 1 3 21 2 6 2 1 2 1 2 1 32 3 2 0 20 2 17 8 2 2 2 21 2 6 2 1 2 4 4 0 19 0 16 1 24 0 12 7 3 1 3 21 2 6 2 1 2 4 4 0 31 1 2 2 16 0 18 0 2 5 4 2 2 3 4 1 2 0 2 1 4 1 4 2 4 11 23 0 53 7 2 2 2 22 2 15 4 0 27 2 6 1 31 0 5 7 2 2 2 22 2 9 2 4 4 0 33 0 2 1 16 1 18 8 2 2 2 40 3 0 17 0 6 2 9 2 25 5 6 17 4 23 2 8 2 0 3 6 59 47 2 1 13 6 59 1 2 0 2 4 2 23 2 0 2 9 2 1 10 0 3 4 2 0 22 3 33 0 64 7 2 35 28 4 116 42 21 0 17 5 5 3 4 0 4 1 8 2 5 12 13 0 18 37 2 0 6 0 3 42 2 332 2 3 3 6 2 0 2 3 3 40 2 3 3 32 2 3 3 6 2 0 2 3 3 14 2 56 2 3 3 66 38 15 17 85 3 5 4 619 3 16 2 25 6 74 4 10 8 12 2 3 15 17 15 17 15 12 2 2 16 51 36 0 5 0 68 88 8 40 2 0 6 69 11 30 50 29 3 4 12 43 5 25 55 22 10 52 83 0 94 46 18 6 56 29 14 1 11 43 27 35 42 2 11 35 3 8 8 42 3 2 42 3 2 5 2 1 4 0 6 191 65 277 3 5 3 37 3 5 3 7 2 0 2 0 2 0 2 30 3 52 2 6 2 0 4 2 2 6 4 3 3 5 5 12 6 2 2 6 117 0 14 0 17 12 102 0 5 0 3 9 2 0 3 5 7 0 2 0 2 0 2 15 3 3 6 4 5 0 18 40 2680 46 2 46 2 132 7 3 4 1 13 37 2 0 6 0 3 55 8 0 17 22 10 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 551 2 26 8 8 4 3 4 5 85 5 4 2 89 2 3 6 42 2 93 18 31 49 15 513 6591 65 20988 4 1164 68 45 3 268 4 15 11 1 21 46 17 30 3 79 40 8 3 102 3 52 3 8 43 12 2 2 2 3 2 22 30 51 15 49 63 5 4 0 2 1 12 27 11 22 26 28 8 46 29 0 17 4 2 9 11 4 2 40 24 2 2 7 21 22 4 0 4 49 2 0 4 1 3 4 3 0 2 0 25 2 3 10 8 2 13 5 3 5 3 5 10 6 2 6 2 42 2 13 7 114 30 11171 13 22 5 48 8453 365 3 105 39 6 13 4 6 0 2 9 2 12 2 4 2 0 2 1 2 1 2 107 34 362 19 63 3 53 41 11 117 4 2 134 37 25 7 25 12 88 4 5 3 5 3 5 3 2 36 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 349 41 7 1 79 28 11 0 9 21 107 20 28 22 13 52 76 44 33 24 27 35 30 0 3 0 9 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 2 31 47 21 1 2 0 185 46 42 3 37 47 21 0 60 42 14 0 72 26 230 43 117 63 32 7 3 0 3 7 2 1 2 23 16 0 2 0 95 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 190 0 80 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 1237 43 8 8952 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 42717 35 4148 12 221 3 5761 15 7472 3104 541 1507 4938");
 }
 
-const gcNamePattern = /^(?:General_Category|gc)$/u;
-const scNamePattern = /^(?:Script(?:_Extensions)?|scx?)$/u;
-const gcValuePatterns = {
-  es2018: null,
-  es2019: null,
-  es2020: null
-};
-const scValuePatterns = {
-  es2018: null,
-  es2019: null,
-  es2020: null
-};
-const binPropertyPatterns = {
-  es2018: null,
-  es2019: null,
-  es2020: null
-};
+function initLargeIdContinueRanges() {
+  return restoreRanges("183 0 585 111 24 0 252 4 266 44 2 0 2 1 2 1 2 0 73 10 49 30 7 0 102 6 3 5 3 1 2 3 3 9 24 0 31 26 92 10 16 9 34 8 10 0 25 3 2 8 2 2 2 4 44 2 120 14 2 32 55 2 2 17 2 6 11 1 3 9 18 2 57 0 2 6 3 1 3 2 10 0 11 1 3 9 15 0 3 2 57 0 2 4 5 1 3 2 4 0 21 11 4 0 12 2 57 0 2 7 2 2 2 2 21 1 3 9 11 5 2 2 57 0 2 6 3 1 3 2 8 2 11 1 3 9 19 0 60 4 4 2 2 3 10 0 15 9 17 4 58 6 2 2 2 3 8 1 12 1 3 9 18 2 57 0 2 6 2 2 2 3 8 1 12 1 3 9 17 3 56 1 2 6 2 2 2 3 10 0 11 1 3 9 18 2 71 0 5 5 2 0 2 7 7 9 3 1 62 0 3 6 13 7 2 9 88 0 3 8 12 5 3 9 63 1 7 9 12 0 2 0 2 0 5 1 50 19 2 1 6 10 2 35 10 0 101 19 2 9 13 3 5 2 2 2 3 6 4 3 14 11 2 14 704 2 10 8 929 2 30 2 30 1 31 1 65 31 10 0 3 9 34 2 3 9 144 0 119 11 5 11 11 9 129 10 61 4 58 9 2 28 3 10 7 9 23 13 2 1 64 4 48 16 12 9 18 8 13 2 31 12 3 9 45 13 49 19 9 9 7 9 119 2 2 20 5 0 7 0 3 2 199 57 2 4 576 1 20 0 124 12 5 0 4 11 3071 2 142 0 97 31 555 5 106 1 30086 9 70 0 5 9 33 1 81 1 273 0 4 0 5 0 24 4 5 0 84 1 51 17 11 9 7 17 14 10 29 7 26 12 45 3 48 13 16 9 12 0 11 9 48 13 13 0 9 1 3 9 34 2 51 0 2 2 3 1 6 1 2 0 42 4 6 1 237 7 2 1 3 9 20261 0 738 15 17 15 4 1 25 2 193 9 38 0 702 0 227 0 150 4 294 9 1368 2 2 1 6 3 41 2 5 0 166 1 574 3 9 9 370 1 154 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 2 11 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 71 5 2 1 3 3 2 0 2 1 13 9 120 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 82 0 12 1 19628 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 4759 9 787719 239");
+}
 
-function isValidUnicodeProperty(version, name, value) {
-  if (gcNamePattern.test(name)) {
-    if (version >= 2018) {
-      if (!gcValuePatterns.es2018) {
-        gcValuePatterns.es2018 = new RegExp("^(?:C|Cased_Letter|Cc|Cf|Close_Punctuation|Cn|Co|" + "Combining_Mark|Connector_Punctuation|Control|Cs|" + "Currency_Symbol|Dash_Punctuation|Decimal_Number|" + "Enclosing_Mark|Final_Punctuation|Format|" + "Initial_Punctuation|L|LC|Letter|Letter_Number|" + "Line_Separator|Ll|Lm|Lo|Lowercase_Letter|Lt|Lu|M|" + "Mark|Math_Symbol|Mc|Me|Mn|Modifier_Letter|" + "Modifier_Symbol|N|Nd|Nl|No|Nonspacing_Mark|Number|" + "Open_Punctuation|Other|Other_Letter|Other_Number|" + "Other_Punctuation|Other_Symbol|P|" + "Paragraph_Separator|Pc|Pd|Pe|Pf|Pi|Po|Private_Use|" + "Ps|Punctuation|S|Sc|Separator|Sk|Sm|So|" + "Space_Separator|Spacing_Mark|Surrogate|Symbol|" + "Titlecase_Letter|Unassigned|Uppercase_Letter|Z|Zl|" + "Zp|Zs|cntrl|digit|punct)$", "u");
-      }
+function isInRange(cp, ranges) {
+  let l = 0,
+      r = ranges.length / 2 | 0,
+      i = 0,
+      min = 0,
+      max = 0;
 
-      if (gcValuePatterns.es2018.test(value)) {
-        return true;
-      }
+  while (l < r) {
+    i = (l + r) / 2 | 0;
+    min = ranges[2 * i];
+    max = ranges[2 * i + 1];
+
+    if (cp < min) {
+      r = i;
+    } else if (cp > max) {
+      l = i + 1;
+    } else {
+      return true;
     }
   }
 
-  if (scNamePattern.test(name)) {
-    if (version >= 2018) {
-      if (!scValuePatterns.es2018) {
-        scValuePatterns.es2018 = new RegExp("^(?:Adlam|Adlm|Aghb|Ahom|Anatolian_Hieroglyphs|Arab|" + "Arabic|Armenian|Armi|Armn|Avestan|Avst|Bali|" + "Balinese|Bamu|Bamum|Bass|Bassa_Vah|Batak|Batk|Beng|" + "Bengali|Bhaiksuki|Bhks|Bopo|Bopomofo|Brah|Brahmi|" + "Brai|Braille|Bugi|Buginese|Buhd|Buhid|Cakm|" + "Canadian_Aboriginal|Cans|Cari|Carian|" + "Caucasian_Albanian|Chakma|Cham|Cher|Cherokee|Common|" + "Copt|Coptic|Cprt|Cuneiform|Cypriot|Cyrillic|Cyrl|" + "Deseret|Deva|Devanagari|Dsrt|Dupl|Duployan|Egyp|" + "Egyptian_Hieroglyphs|Elba|Elbasan|Ethi|Ethiopic|" + "Geor|Georgian|Glag|Glagolitic|Gonm|Goth|Gothic|Gran|" + "Grantha|Greek|Grek|Gujarati|Gujr|Gurmukhi|Guru|Han|" + "Hang|Hangul|Hani|Hano|Hanunoo|Hatr|Hatran|Hebr|" + "Hebrew|Hira|Hiragana|Hluw|Hmng|Hung|" + "Imperial_Aramaic|Inherited|Inscriptional_Pahlavi|" + "Inscriptional_Parthian|Ital|Java|Javanese|Kaithi|" + "Kali|Kana|Kannada|Katakana|Kayah_Li|Khar|Kharoshthi|" + "Khmer|Khmr|Khoj|Khojki|Khudawadi|Knda|Kthi|Lana|Lao|" + "Laoo|Latin|Latn|Lepc|Lepcha|Limb|Limbu|Lina|Linb|" + "Linear_A|Linear_B|Lisu|Lyci|Lycian|Lydi|Lydian|" + "Mahajani|Mahj|Malayalam|Mand|Mandaic|Mani|" + "Manichaean|Marc|Marchen|Masaram_Gondi|Meetei_Mayek|" + "Mend|Mende_Kikakui|Merc|Mero|Meroitic_Cursive|" + "Meroitic_Hieroglyphs|Miao|Mlym|Modi|Mong|Mongolian|" + "Mro|Mroo|Mtei|Mult|Multani|Myanmar|Mymr|Nabataean|" + "Narb|Nbat|New_Tai_Lue|Newa|Nko|Nkoo|Nshu|Nushu|Ogam|" + "Ogham|Ol_Chiki|Olck|Old_Hungarian|Old_Italic|" + "Old_North_Arabian|Old_Permic|Old_Persian|" + "Old_South_Arabian|Old_Turkic|Oriya|Orkh|Orya|Osage|" + "Osge|Osma|Osmanya|Pahawh_Hmong|Palm|Palmyrene|" + "Pau_Cin_Hau|Pauc|Perm|Phag|Phags_Pa|Phli|Phlp|Phnx|" + "Phoenician|Plrd|Prti|Psalter_Pahlavi|Qaac|Qaai|" + "Rejang|Rjng|Runic|Runr|Samaritan|Samr|Sarb|Saur|" + "Saurashtra|Sgnw|Sharada|Shavian|Shaw|Shrd|Sidd|" + "Siddham|SignWriting|Sind|Sinh|Sinhala|Sora|" + "Sora_Sompeng|Soyo|Soyombo|Sund|Sundanese|Sylo|" + "Syloti_Nagri|Syrc|Syriac|Tagalog|Tagb|Tagbanwa|" + "Tai_Le|Tai_Tham|Tai_Viet|Takr|Takri|Tale|Talu|Tamil|" + "Taml|Tang|Tangut|Tavt|Telu|Telugu|Tfng|Tglg|Thaa|" + "Thaana|Thai|Tibetan|Tibt|Tifinagh|Tirh|Tirhuta|Ugar|" + "Ugaritic|Vai|Vaii|Wara|Warang_Citi|Xpeo|Xsux|Yi|" + "Yiii|Zanabazar_Square|Zanb|Zinh|Zyyy)$", "u");
-      }
+  return false;
+}
 
-      if (scValuePatterns.es2018.test(value)) {
-        return true;
-      }
-    }
+function restoreRanges(data) {
+  let last = 0;
+  return data.split(" ").map(s => last += parseInt(s, 10) | 0);
+}
 
-    if (version >= 2019) {
-      if (!scValuePatterns.es2019) {
-        scValuePatterns.es2019 = new RegExp("^(?:Dogr|Dogra|Gong|Gunjala_Gondi|Hanifi_Rohingya|" + "Maka|Makasar|Medefaidrin|Medf|Old_Sogdian|Rohg|Sogd|" + "Sogdian|Sogo)$", "u");
-      }
+class DataSet {
+  constructor(raw2018, raw2019, raw2020) {
+    this._raw2018 = raw2018;
+    this._raw2019 = raw2019;
+    this._raw2020 = raw2020;
+  }
 
-      if (scValuePatterns.es2019.test(value)) {
-        return true;
-      }
-    }
+  get es2018() {
+    return this._set2018 || (this._set2018 = new Set(this._raw2018.split(" ")));
+  }
 
-    if (version >= 2020) {
-      if (!scValuePatterns.es2020) {
-        scValuePatterns.es2020 = new RegExp("^(?:Hmnp|Nand|Nandinagari|Nyiakeng_Puachue_Hmong|" + "Wancho|Wcho)$", "u");
-      }
+  get es2019() {
+    return this._set2019 || (this._set2019 = new Set(this._raw2019.split(" ")));
+  }
 
-      if (scValuePatterns.es2020.test(value)) {
-        return true;
-      }
-    }
+  get es2020() {
+    return this._set2020 || (this._set2020 = new Set(this._raw2020.split(" ")));
   }
 
-  return false;
 }
 
-function isValidLoneUnicodeProperty(version, value) {
-  if (version >= 2018) {
-    if (!binPropertyPatterns.es2018) {
-      binPropertyPatterns.es2018 = new RegExp("^(?:AHex|ASCII|ASCII_Hex_Digit|Alpha|Alphabetic|Any|" + "Assigned|Bidi_C|Bidi_Control|Bidi_M|Bidi_Mirrored|CI|" + "CWCF|CWCM|CWKCF|CWL|CWT|CWU|Case_Ignorable|Cased|" + "Changes_When_Casefolded|Changes_When_Casemapped|" + "Changes_When_Lowercased|Changes_When_NFKC_Casefolded|" + "Changes_When_Titlecased|Changes_When_Uppercased|DI|Dash|" + "Default_Ignorable_Code_Point|Dep|Deprecated|Dia|" + "Diacritic|Emoji|Emoji_Component|Emoji_Modifier|" + "Emoji_Modifier_Base|Emoji_Presentation|Ext|Extender|" + "Gr_Base|Gr_Ext|Grapheme_Base|Grapheme_Extend|Hex|" + "Hex_Digit|IDC|IDS|IDSB|IDST|IDS_Binary_Operator|" + "IDS_Trinary_Operator|ID_Continue|ID_Start|Ideo|" + "Ideographic|Join_C|Join_Control|LOE|" + "Logical_Order_Exception|Lower|Lowercase|Math|NChar|" + "Noncharacter_Code_Point|Pat_Syn|Pat_WS|Pattern_Syntax|" + "Pattern_White_Space|QMark|Quotation_Mark|RI|Radical|" + "Regional_Indicator|SD|STerm|Sentence_Terminal|" + "Soft_Dotted|Term|Terminal_Punctuation|UIdeo|" + "Unified_Ideograph|Upper|Uppercase|VS|Variation_Selector|" + "White_Space|XIDC|XIDS|XID_Continue|XID_Start|space)$", "u");
-    }
+const gcNameSet = new Set(["General_Category", "gc"]);
+const scNameSet = new Set(["Script", "Script_Extensions", "sc", "scx"]);
+const gcValueSets = new DataSet("C Cased_Letter Cc Cf Close_Punctuation Cn Co Combining_Mark Connector_Punctuation Control Cs Currency_Symbol Dash_Punctuation Decimal_Number Enclosing_Mark Final_Punctuation Format Initial_Punctuation L LC Letter Letter_Number Line_Separator Ll Lm Lo Lowercase_Letter Lt Lu M Mark Math_Symbol Mc Me Mn Modifier_Letter Modifier_Symbol N Nd Nl No Nonspacing_Mark Number Open_Punctuation Other Other_Letter Other_Number Other_Punctuation Other_Symbol P Paragraph_Separator Pc Pd Pe Pf Pi Po Private_Use Ps Punctuation S Sc Separator Sk Sm So Space_Separator Spacing_Mark Surrogate Symbol Titlecase_Letter Unassigned Uppercase_Letter Z Zl Zp Zs cntrl digit punct", "", "");
+const scValueSets = new DataSet("Adlam Adlm Aghb Ahom Anatolian_Hieroglyphs Arab Arabic Armenian Armi Armn Avestan Avst Bali Balinese Bamu Bamum Bass Bassa_Vah Batak Batk Beng Bengali Bhaiksuki Bhks Bopo Bopomofo Brah Brahmi Brai Braille Bugi Buginese Buhd Buhid Cakm Canadian_Aboriginal Cans Cari Carian Caucasian_Albanian Chakma Cham Cher Cherokee Common Copt Coptic Cprt Cuneiform Cypriot Cyrillic Cyrl Deseret Deva Devanagari Dsrt Dupl Duployan Egyp Egyptian_Hieroglyphs Elba Elbasan Ethi Ethiopic Geor Georgian Glag Glagolitic Gonm Goth Gothic Gran Grantha Greek Grek Gujarati Gujr Gurmukhi Guru Han Hang Hangul Hani Hano Hanunoo Hatr Hatran Hebr Hebrew Hira Hiragana Hluw Hmng Hung Imperial_Aramaic Inherited Inscriptional_Pahlavi Inscriptional_Parthian Ital Java Javanese Kaithi Kali Kana Kannada Katakana Kayah_Li Khar Kharoshthi Khmer Khmr Khoj Khojki Khudawadi Knda Kthi Lana Lao Laoo Latin Latn Lepc Lepcha Limb Limbu Lina Linb Linear_A Linear_B Lisu Lyci Lycian Lydi Lydian Mahajani Mahj Malayalam Mand Mandaic Mani Manichaean Marc Marchen Masaram_Gondi Meetei_Mayek Mend Mende_Kikakui Merc Mero Meroitic_Cursive Meroitic_Hieroglyphs Miao Mlym Modi Mong Mongolian Mro Mroo Mtei Mult Multani Myanmar Mymr Nabataean Narb Nbat New_Tai_Lue Newa Nko Nkoo Nshu Nushu Ogam Ogham Ol_Chiki Olck Old_Hungarian Old_Italic Old_North_Arabian Old_Permic Old_Persian Old_South_Arabian Old_Turkic Oriya Orkh Orya Osage Osge Osma Osmanya Pahawh_Hmong Palm Palmyrene Pau_Cin_Hau Pauc Perm Phag Phags_Pa Phli Phlp Phnx Phoenician Plrd Prti Psalter_Pahlavi Qaac Qaai Rejang Rjng Runic Runr Samaritan Samr Sarb Saur Saurashtra Sgnw Sharada Shavian Shaw Shrd Sidd Siddham SignWriting Sind Sinh Sinhala Sora Sora_Sompeng Soyo Soyombo Sund Sundanese Sylo Syloti_Nagri Syrc Syriac Tagalog Tagb Tagbanwa Tai_Le Tai_Tham Tai_Viet Takr Takri Tale Talu Tamil Taml Tang Tangut Tavt Telu Telugu Tfng Tglg Thaa Thaana Thai Tibetan Tibt Tifinagh Tirh Tirhuta Ugar Ugaritic Vai Vaii Wara Warang_Citi Xpeo Xsux Yi Yiii Zanabazar_Square Zanb Zinh Zyyy", "Dogr Dogra Gong Gunjala_Gondi Hanifi_Rohingya Maka Makasar Medefaidrin Medf Old_Sogdian Rohg Sogd Sogdian Sogo", "Elym Elymaic Hmnp Nand Nandinagari Nyiakeng_Puachue_Hmong Wancho Wcho");
+const binPropertySets = new DataSet("AHex ASCII ASCII_Hex_Digit Alpha Alphabetic Any Assigned Bidi_C Bidi_Control Bidi_M Bidi_Mirrored CI CWCF CWCM CWKCF CWL CWT CWU Case_Ignorable Cased Changes_When_Casefolded Changes_When_Casemapped Changes_When_Lowercased Changes_When_NFKC_Casefolded Changes_When_Titlecased Changes_When_Uppercased DI Dash Default_Ignorable_Code_Point Dep Deprecated Dia Diacritic Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Ext Extender Gr_Base Gr_Ext Grapheme_Base Grapheme_Extend Hex Hex_Digit IDC IDS IDSB IDST IDS_Binary_Operator IDS_Trinary_Operator ID_Continue ID_Start Ideo Ideographic Join_C Join_Control LOE Logical_Order_Exception Lower Lowercase Math NChar Noncharacter_Code_Point Pat_Syn Pat_WS Pattern_Syntax Pattern_White_Space QMark Quotation_Mark RI Radical Regional_Indicator SD STerm Sentence_Terminal Soft_Dotted Term Terminal_Punctuation UIdeo Unified_Ideograph Upper Uppercase VS Variation_Selector White_Space XIDC XIDS XID_Continue XID_Start space", "Extended_Pictographic", "");
 
-    if (binPropertyPatterns.es2018.test(value)) {
-      return true;
-    }
+function isValidUnicodeProperty(version, name, value) {
+  if (gcNameSet.has(name)) {
+    return version >= 2018 && gcValueSets.es2018.has(value);
   }
 
-  if (version >= 2019) {
-    if (!binPropertyPatterns.es2019) {
-      binPropertyPatterns.es2019 = new RegExp("^(?:Extended_Pictographic)$", "u");
-    }
-
-    if (binPropertyPatterns.es2019.test(value)) {
-      return true;
-    }
+  if (scNameSet.has(name)) {
+    return version >= 2018 && scValueSets.es2018.has(value) || version >= 2019 && scValueSets.es2019.has(value) || version >= 2020 && scValueSets.es2020.has(value);
   }
 
   return false;
 }
 
+function isValidLoneUnicodeProperty(version, value) {
+  return version >= 2018 && binPropertySets.es2018.has(value) || version >= 2019 && binPropertySets.es2019.has(value);
+}
+
 const Backspace = 0x08;
 const CharacterTabulation = 0x09;
 const LineFeed = 0x0a;
@@ -70128,6 +70181,18 @@ function digitToInt(code) {
   return code - DigitZero;
 }
 
+function isLeadSurrogate(code) {
+  return code >= 0xd800 && code <= 0xdbff;
+}
+
+function isTrailSurrogate(code) {
+  return code >= 0xdc00 && code <= 0xdfff;
+}
+
+function combineSurrogatePair(lead, trail) {
+  return (lead - 0xd800) * 0x400 + (trail - 0xdc00) + 0x10000;
+}
+
 const legacyImpl = {
   at(s, end, i) {
     return i < end ? s.charCodeAt(i) : -1;
@@ -70369,12 +70434,12 @@ class RegExpValidator {
     this._uFlag = uFlag && this.ecmaVersion >= 2015;
     this._nFlag = uFlag && this.ecmaVersion >= 2018;
     this.reset(source, start, end);
-    this.pattern();
+    this.consumePattern();
 
     if (!this._nFlag && this.ecmaVersion >= 2018 && this._groupNames.size > 0) {
       this._nFlag = true;
       this.rewind(start);
-      this.pattern();
+      this.consumePattern();
     }
   }
 
@@ -70625,7 +70690,7 @@ class RegExpValidator {
     return this.index !== start;
   }
 
-  pattern() {
+  consumePattern() {
     const start = this.index;
     this._numCapturingParens = this.countCapturingParens();
 
@@ -70634,7 +70699,7 @@ class RegExpValidator {
     this._backreferenceNames.clear();
 
     this.onPatternEnter(start);
-    this.disjunction();
+    this.consumeDisjunction();
     const cp = this.currentCodePoint;
 
     if (this.currentCodePoint !== -1) {
@@ -70690,17 +70755,16 @@ class RegExpValidator {
     return count;
   }
 
-  disjunction() {
+  consumeDisjunction() {
     const start = this.index;
     let i = 0;
     this.onDisjunctionEnter(start);
-    this.alternative(i++);
 
-    while (this.eat(VerticalLine)) {
-      this.alternative(i++);
-    }
+    do {
+      this.consumeAlternative(i++);
+    } while (this.eat(VerticalLine));
 
-    if (this.eatQuantifier(true)) {
+    if (this.consumeQuantifier(true)) {
       this.raise("Nothing to repeat");
     }
 
@@ -70711,33 +70775,29 @@ class RegExpValidator {
     this.onDisjunctionLeave(start, this.index);
   }
 
-  alternative(i) {
+  consumeAlternative(i) {
     const start = this.index;
     this.onAlternativeEnter(start, i);
 
-    while (this.currentCodePoint !== -1 && this.eatTerm()) {}
+    while (this.currentCodePoint !== -1 && this.consumeTerm()) {}
 
     this.onAlternativeLeave(start, this.index, i);
   }
 
-  eatTerm() {
-    if (this.eatAssertion()) {
-      if (this._lastAssertionIsQuantifiable) {
-        this.eatQuantifier();
-      }
-
-      return true;
+  consumeTerm() {
+    if (this._uFlag || this.strict) {
+      return this.consumeAssertion() || this.consumeAtom() && this.consumeOptionalQuantifier();
     }
 
-    if (this.strict ? this.eatAtom() : this.eatExtendedAtom()) {
-      this.eatQuantifier();
-      return true;
-    }
+    return this.consumeAssertion() && (!this._lastAssertionIsQuantifiable || this.consumeOptionalQuantifier()) || this.consumeExtendedAtom() && this.consumeOptionalQuantifier();
+  }
 
-    return false;
+  consumeOptionalQuantifier() {
+    this.consumeQuantifier();
+    return true;
   }
 
-  eatAssertion() {
+  consumeAssertion() {
     const start = this.index;
     this._lastAssertionIsQuantifiable = false;
 
@@ -70768,7 +70828,7 @@ class RegExpValidator {
       if (this.eat(EqualsSign) || (negate = this.eat(ExclamationMark))) {
         const kind = lookbehind ? "lookbehind" : "lookahead";
         this.onLookaroundAssertionEnter(start, kind, negate);
-        this.disjunction();
+        this.consumeDisjunction();
 
         if (!this.eat(RightParenthesis)) {
           this.raise("Unterminated group");
@@ -70785,7 +70845,7 @@ class RegExpValidator {
     return false;
   }
 
-  eatQuantifier(noError = false) {
+  consumeQuantifier(noConsume = false) {
     const start = this.index;
     let min = 0;
     let max = 0;
@@ -70800,7 +70860,7 @@ class RegExpValidator {
     } else if (this.eat(QuestionMark)) {
       min = 0;
       max = 1;
-    } else if (this.eatBracedQuantifier(noError)) {
+    } else if (this.eatBracedQuantifier(noConsume)) {
       min = this._lastMinValue;
       max = this._lastMaxValue;
     } else {
@@ -70809,7 +70869,7 @@ class RegExpValidator {
 
     greedy = !this.eat(QuestionMark);
 
-    if (!noError) {
+    if (!noConsume) {
       this.onQuantifier(start, this.index, min, max, greedy);
     }
 
@@ -70839,7 +70899,7 @@ class RegExpValidator {
         }
       }
 
-      if (!noError && this.strict) {
+      if (!noError && (this._uFlag || this.strict)) {
         this.raise("Incomplete quantifier");
       }
 
@@ -70849,11 +70909,11 @@ class RegExpValidator {
     return false;
   }
 
-  eatAtom() {
-    return this.eatPatternCharacter() || this.eatDot() || this.eatReverseSolidusAtomEscape() || this.eatCharacterClass() || this.eatUncapturingGroup() || this.eatCapturingGroup();
+  consumeAtom() {
+    return this.consumePatternCharacter() || this.consumeDot() || this.consumeReverseSolidusAtomEscape() || this.consumeCharacterClass() || this.consumeUncapturingGroup() || this.consumeCapturingGroup();
   }
 
-  eatDot() {
+  consumeDot() {
     if (this.eat(FullStop)) {
       this.onAnyCharacterSet(this.index - 1, this.index, "any");
       return true;
@@ -70862,11 +70922,11 @@ class RegExpValidator {
     return false;
   }
 
-  eatReverseSolidusAtomEscape() {
+  consumeReverseSolidusAtomEscape() {
     const start = this.index;
 
     if (this.eat(ReverseSolidus)) {
-      if (this.eatAtomEscape()) {
+      if (this.consumeAtomEscape()) {
         return true;
       }
 
@@ -70876,12 +70936,12 @@ class RegExpValidator {
     return false;
   }
 
-  eatUncapturingGroup() {
+  consumeUncapturingGroup() {
     const start = this.index;
 
     if (this.eat3(LeftParenthesis, QuestionMark, Colon)) {
       this.onGroupEnter(start);
-      this.disjunction();
+      this.consumeDisjunction();
 
       if (!this.eat(RightParenthesis)) {
         this.raise("Unterminated group");
@@ -70894,21 +70954,22 @@ class RegExpValidator {
     return false;
   }
 
-  eatCapturingGroup() {
+  consumeCapturingGroup() {
     const start = this.index;
 
     if (this.eat(LeftParenthesis)) {
-      this._lastStrValue = "";
+      let name = null;
 
       if (this.ecmaVersion >= 2018) {
-        this.groupSpecifier();
+        if (this.consumeGroupSpecifier()) {
+          name = this._lastStrValue;
+        }
       } else if (this.currentCodePoint === QuestionMark) {
         this.raise("Invalid group");
       }
 
-      const name = this._lastStrValue || null;
       this.onCapturingGroupEnter(start, name);
-      this.disjunction();
+      this.consumeDisjunction();
 
       if (!this.eat(RightParenthesis)) {
         this.raise("Unterminated group");
@@ -70921,22 +70982,24 @@ class RegExpValidator {
     return false;
   }
 
-  eatExtendedAtom() {
-    return this.eatDot() || this.eatReverseSolidusAtomEscape() || this.eatReverseSolidusFollowedByC() || this.eatCharacterClass() || this.eatUncapturingGroup() || this.eatCapturingGroup() || this.eatInvalidBracedQuantifier() || this.eatExtendedPatternCharacter();
+  consumeExtendedAtom() {
+    return this.consumeDot() || this.consumeReverseSolidusAtomEscape() || this.consumeReverseSolidusFollowedByC() || this.consumeCharacterClass() || this.consumeUncapturingGroup() || this.consumeCapturingGroup() || this.consumeInvalidBracedQuantifier() || this.consumeExtendedPatternCharacter();
   }
 
-  eatReverseSolidusFollowedByC() {
+  consumeReverseSolidusFollowedByC() {
+    const start = this.index;
+
     if (this.currentCodePoint === ReverseSolidus && this.nextCodePoint === LatinSmallLetterC) {
       this._lastIntValue = this.currentCodePoint;
       this.advance();
-      this.onCharacter(this.index - 1, this.index, ReverseSolidus);
+      this.onCharacter(start, this.index, ReverseSolidus);
       return true;
     }
 
     return false;
   }
 
-  eatInvalidBracedQuantifier() {
+  consumeInvalidBracedQuantifier() {
     if (this.eatBracedQuantifier(true)) {
       this.raise("Nothing to repeat");
     }
@@ -70944,17 +71007,7 @@ class RegExpValidator {
     return false;
   }
 
-  eatSyntaxCharacter() {
-    if (isSyntaxCharacter(this.currentCodePoint)) {
-      this._lastIntValue = this.currentCodePoint;
-      this.advance();
-      return true;
-    }
-
-    return false;
-  }
-
-  eatPatternCharacter() {
+  consumePatternCharacter() {
     const start = this.index;
     const cp = this.currentCodePoint;
 
@@ -70967,7 +71020,7 @@ class RegExpValidator {
     return false;
   }
 
-  eatExtendedPatternCharacter() {
+  consumeExtendedPatternCharacter() {
     const start = this.index;
     const cp = this.currentCodePoint;
 
@@ -70980,15 +71033,13 @@ class RegExpValidator {
     return false;
   }
 
-  groupSpecifier() {
-    this._lastStrValue = "";
-
+  consumeGroupSpecifier() {
     if (this.eat(QuestionMark)) {
       if (this.eatGroupName()) {
         if (!this._groupNames.has(this._lastStrValue)) {
           this._groupNames.add(this._lastStrValue);
 
-          return;
+          return true;
         }
 
         this.raise("Duplicate capture group name");
@@ -70996,114 +71047,110 @@ class RegExpValidator {
 
       this.raise("Invalid group");
     }
-  }
 
-  eatGroupName() {
-    this._lastStrValue = "";
+    return false;
+  }
 
-    if (this.eat(LessThanSign)) {
-      if (this.eatRegExpIdentifierName() && this.eat(GreaterThanSign)) {
-        return true;
-      }
+  consumeAtomEscape() {
+    if (this.consumeBackreference() || this.consumeCharacterClassEscape() || this.consumeCharacterEscape() || this._nFlag && this.consumeKGroupName()) {
+      return true;
+    }
 
-      this.raise("Invalid capture group name");
+    if (this.strict || this._uFlag) {
+      this.raise("Invalid escape");
     }
 
     return false;
   }
 
-  eatRegExpIdentifierName() {
-    this._lastStrValue = "";
+  consumeBackreference() {
+    const start = this.index;
 
-    if (this.eatRegExpIdentifierStart()) {
-      this._lastStrValue += String.fromCodePoint(this._lastIntValue);
+    if (this.eatDecimalEscape()) {
+      const n = this._lastIntValue;
 
-      while (this.eatRegExpIdentifierPart()) {
-        this._lastStrValue += String.fromCodePoint(this._lastIntValue);
+      if (n <= this._numCapturingParens) {
+        this.onBackreference(start - 1, this.index, n);
+        return true;
       }
 
-      return true;
+      if (this.strict || this._uFlag) {
+        this.raise("Invalid escape");
+      }
+
+      this.rewind(start);
     }
 
     return false;
   }
 
-  eatRegExpIdentifierStart() {
+  consumeCharacterClassEscape() {
     const start = this.index;
-    let cp = this.currentCodePoint;
-    this.advance();
 
-    if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {
-      cp = this._lastIntValue;
+    if (this.eat(LatinSmallLetterD)) {
+      this._lastIntValue = -1;
+      this.onEscapeCharacterSet(start - 1, this.index, "digit", false);
+      return true;
     }
 
-    if (isRegExpIdentifierStart(cp)) {
-      this._lastIntValue = cp;
+    if (this.eat(LatinCapitalLetterD)) {
+      this._lastIntValue = -1;
+      this.onEscapeCharacterSet(start - 1, this.index, "digit", true);
       return true;
     }
 
-    if (this.index !== start) {
-      this.rewind(start);
+    if (this.eat(LatinSmallLetterS)) {
+      this._lastIntValue = -1;
+      this.onEscapeCharacterSet(start - 1, this.index, "space", false);
+      return true;
     }
 
-    return false;
-  }
-
-  eatRegExpIdentifierPart() {
-    const start = this.index;
-    let cp = this.currentCodePoint;
-    this.advance();
-
-    if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {
-      cp = this._lastIntValue;
+    if (this.eat(LatinCapitalLetterS)) {
+      this._lastIntValue = -1;
+      this.onEscapeCharacterSet(start - 1, this.index, "space", true);
+      return true;
     }
 
-    if (isRegExpIdentifierPart(cp)) {
-      this._lastIntValue = cp;
+    if (this.eat(LatinSmallLetterW)) {
+      this._lastIntValue = -1;
+      this.onEscapeCharacterSet(start - 1, this.index, "word", false);
       return true;
     }
 
-    if (this.index !== start) {
-      this.rewind(start);
+    if (this.eat(LatinCapitalLetterW)) {
+      this._lastIntValue = -1;
+      this.onEscapeCharacterSet(start - 1, this.index, "word", true);
+      return true;
     }
 
-    return false;
-  }
+    let negate = false;
 
-  eatAtomEscape() {
-    if (this.eatBackreference() || this.eatCharacterClassEscape() || this.eatCharacterEscape() || this._nFlag && this.eatKGroupName()) {
-      return true;
-    }
+    if (this._uFlag && this.ecmaVersion >= 2018 && (this.eat(LatinSmallLetterP) || (negate = this.eat(LatinCapitalLetterP)))) {
+      this._lastIntValue = -1;
 
-    if (this.strict || this._uFlag) {
-      this.raise("Invalid escape");
+      if (this.eat(LeftCurlyBracket) && this.eatUnicodePropertyValueExpression() && this.eat(RightCurlyBracket)) {
+        this.onUnicodePropertyCharacterSet(start - 1, this.index, "property", this._lastKeyValue, this._lastValValue || null, negate);
+        return true;
+      }
+
+      this.raise("Invalid property name");
     }
 
     return false;
   }
 
-  eatBackreference() {
+  consumeCharacterEscape() {
     const start = this.index;
 
-    if (this.eatDecimalEscape()) {
-      const n = this._lastIntValue;
-
-      if (n <= this._numCapturingParens) {
-        this.onBackreference(start - 1, this.index, n);
-        return true;
-      }
-
-      if (this.strict) {
-        this.raise("Invalid escape");
-      }
-
-      this.rewind(start);
+    if (this.eatControlEscape() || this.eatCControlLetter() || this.eatZero() || this.eatHexEscapeSequence() || this.eatRegExpUnicodeEscapeSequence() || !this.strict && !this._uFlag && this.eatLegacyOctalEscapeSequence() || this.eatIdentityEscape()) {
+      this.onCharacter(start - 1, this.index, this._lastIntValue);
+      return true;
     }
 
     return false;
   }
 
-  eatKGroupName() {
+  consumeKGroupName() {
     const start = this.index;
 
     if (this.eat(LatinSmallLetterK)) {
@@ -71122,14 +71169,198 @@ class RegExpValidator {
     return false;
   }
 
-  eatCharacterEscape() {
+  consumeCharacterClass() {
     const start = this.index;
 
-    if (this.eatControlEscape() || this.eatCControlLetter() || this.eatZero() || this.eatHexEscapeSequence() || this.eatRegExpUnicodeEscapeSequence() || !this.strict && this.eatLegacyOctalEscapeSequence() || this.eatIdentityEscape()) {
+    if (this.eat(LeftSquareBracket)) {
+      const negate = this.eat(CircumflexAccent);
+      this.onCharacterClassEnter(start, negate);
+      this.consumeClassRanges();
+
+      if (!this.eat(RightSquareBracket)) {
+        this.raise("Unterminated character class");
+      }
+
+      this.onCharacterClassLeave(start, this.index, negate);
+      return true;
+    }
+
+    return false;
+  }
+
+  consumeClassRanges() {
+    const strict = this.strict || this._uFlag;
+
+    for (;;) {
+      const rangeStart = this.index;
+
+      if (!this.consumeClassAtom()) {
+        break;
+      }
+
+      const min = this._lastIntValue;
+
+      if (!this.eat(HyphenMinus)) {
+        continue;
+      }
+
+      this.onCharacter(this.index - 1, this.index, HyphenMinus);
+
+      if (!this.consumeClassAtom()) {
+        break;
+      }
+
+      const max = this._lastIntValue;
+
+      if (min === -1 || max === -1) {
+        if (strict) {
+          this.raise("Invalid character class");
+        }
+
+        continue;
+      }
+
+      if (min > max) {
+        this.raise("Range out of order in character class");
+      }
+
+      this.onCharacterClassRange(rangeStart, this.index, min, max);
+    }
+  }
+
+  consumeClassAtom() {
+    const start = this.index;
+    const cp = this.currentCodePoint;
+
+    if (cp !== -1 && cp !== ReverseSolidus && cp !== RightSquareBracket) {
+      this.advance();
+      this._lastIntValue = cp;
+      this.onCharacter(start, this.index, this._lastIntValue);
+      return true;
+    }
+
+    if (this.eat(ReverseSolidus)) {
+      if (this.consumeClassEscape()) {
+        return true;
+      }
+
+      if (!this.strict && this.currentCodePoint === LatinSmallLetterC) {
+        this._lastIntValue = ReverseSolidus;
+        this.onCharacter(start, this.index, this._lastIntValue);
+        return true;
+      }
+
+      if (this.strict || this._uFlag) {
+        this.raise("Invalid escape");
+      }
+
+      this.rewind(start);
+    }
+
+    return false;
+  }
+
+  consumeClassEscape() {
+    const start = this.index;
+
+    if (this.eat(LatinSmallLetterB)) {
+      this._lastIntValue = Backspace;
+      this.onCharacter(start - 1, this.index, this._lastIntValue);
+      return true;
+    }
+
+    if (this._uFlag && this.eat(HyphenMinus)) {
+      this._lastIntValue = HyphenMinus;
       this.onCharacter(start - 1, this.index, this._lastIntValue);
       return true;
     }
 
+    let cp = 0;
+
+    if (!this.strict && !this._uFlag && this.currentCodePoint === LatinSmallLetterC && (isDecimalDigit(cp = this.nextCodePoint) || cp === LowLine)) {
+      this.advance();
+      this.advance();
+      this._lastIntValue = cp % 0x20;
+      this.onCharacter(start - 1, this.index, this._lastIntValue);
+      return true;
+    }
+
+    return this.consumeCharacterClassEscape() || this.consumeCharacterEscape();
+  }
+
+  eatGroupName() {
+    if (this.eat(LessThanSign)) {
+      if (this.eatRegExpIdentifierName() && this.eat(GreaterThanSign)) {
+        return true;
+      }
+
+      this.raise("Invalid capture group name");
+    }
+
+    return false;
+  }
+
+  eatRegExpIdentifierName() {
+    if (this.eatRegExpIdentifierStart()) {
+      this._lastStrValue = String.fromCodePoint(this._lastIntValue);
+
+      while (this.eatRegExpIdentifierPart()) {
+        this._lastStrValue += String.fromCodePoint(this._lastIntValue);
+      }
+
+      return true;
+    }
+
+    return false;
+  }
+
+  eatRegExpIdentifierStart() {
+    const start = this.index;
+    const forceUFlag = !this._uFlag && this.ecmaVersion >= 2020;
+    let cp = this.currentCodePoint;
+    this.advance();
+
+    if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence(forceUFlag)) {
+      cp = this._lastIntValue;
+    } else if (forceUFlag && isLeadSurrogate(cp) && isTrailSurrogate(this.currentCodePoint)) {
+      cp = combineSurrogatePair(cp, this.currentCodePoint);
+      this.advance();
+    }
+
+    if (isRegExpIdentifierStart(cp)) {
+      this._lastIntValue = cp;
+      return true;
+    }
+
+    if (this.index !== start) {
+      this.rewind(start);
+    }
+
+    return false;
+  }
+
+  eatRegExpIdentifierPart() {
+    const start = this.index;
+    const forceUFlag = !this._uFlag && this.ecmaVersion >= 2020;
+    let cp = this.currentCodePoint;
+    this.advance();
+
+    if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence(forceUFlag)) {
+      cp = this._lastIntValue;
+    } else if (forceUFlag && isLeadSurrogate(cp) && isTrailSurrogate(this.currentCodePoint)) {
+      cp = combineSurrogatePair(cp, this.currentCodePoint);
+      this.advance();
+    }
+
+    if (isRegExpIdentifierPart(cp)) {
+      this._lastIntValue = cp;
+      return true;
+    }
+
+    if (this.index !== start) {
+      this.rewind(start);
+    }
+
     return false;
   }
 
@@ -71158,8 +71389,8 @@ class RegExpValidator {
   }
 
   eatControlEscape() {
-    if (this.eat(LatinSmallLetterT)) {
-      this._lastIntValue = CharacterTabulation;
+    if (this.eat(LatinSmallLetterF)) {
+      this._lastIntValue = FormFeed;
       return true;
     }
 
@@ -71168,18 +71399,18 @@ class RegExpValidator {
       return true;
     }
 
-    if (this.eat(LatinSmallLetterV)) {
-      this._lastIntValue = LineTabulation;
+    if (this.eat(LatinSmallLetterR)) {
+      this._lastIntValue = CarriageReturn;
       return true;
     }
 
-    if (this.eat(LatinSmallLetterF)) {
-      this._lastIntValue = FormFeed;
+    if (this.eat(LatinSmallLetterT)) {
+      this._lastIntValue = CharacterTabulation;
       return true;
     }
 
-    if (this.eat(LatinSmallLetterR)) {
-      this._lastIntValue = CarriageReturn;
+    if (this.eat(LatinSmallLetterV)) {
+      this._lastIntValue = LineTabulation;
       return true;
     }
 
@@ -71198,38 +71429,38 @@ class RegExpValidator {
     return false;
   }
 
-  eatRegExpUnicodeEscapeSequence() {
+  eatRegExpUnicodeEscapeSequence(forceUFlag = false) {
     const start = this.index;
+    const uFlag = forceUFlag || this._uFlag;
 
     if (this.eat(LatinSmallLetterU)) {
-      if (this.eatFixedHexDigits(4)) {
-        const lead = this._lastIntValue;
+      if (uFlag && this.eatRegExpUnicodeSurrogatePairEscape() || this.eatFixedHexDigits(4) || uFlag && this.eatRegExpUnicodeCodePointEscape()) {
+        return true;
+      }
 
-        if (this._uFlag && lead >= 0xd800 && lead <= 0xdbff) {
-          const leadSurrogateEnd = this.index;
+      if (this.strict || uFlag) {
+        this.raise("Invalid unicode escape");
+      }
 
-          if (this.eat(ReverseSolidus) && this.eat(LatinSmallLetterU) && this.eatFixedHexDigits(4)) {
-            const trail = this._lastIntValue;
+      this.rewind(start);
+    }
 
-            if (trail >= 0xdc00 && trail <= 0xdfff) {
-              this._lastIntValue = (lead - 0xd800) * 0x400 + (trail - 0xdc00) + 0x10000;
-              return true;
-            }
-          }
+    return false;
+  }
 
-          this.rewind(leadSurrogateEnd);
-          this._lastIntValue = lead;
-        }
+  eatRegExpUnicodeSurrogatePairEscape() {
+    const start = this.index;
 
-        return true;
-      }
+    if (this.eatFixedHexDigits(4)) {
+      const lead = this._lastIntValue;
 
-      if (this._uFlag && this.eat(LeftCurlyBracket) && this.eatHexDigits() && this.eat(RightCurlyBracket) && isValidUnicode(this._lastIntValue)) {
-        return true;
-      }
+      if (isLeadSurrogate(lead) && this.eat(ReverseSolidus) && this.eat(LatinSmallLetterU) && this.eatFixedHexDigits(4)) {
+        const trail = this._lastIntValue;
 
-      if (this.strict || this._uFlag) {
-        this.raise("Invalid unicode escape");
+        if (isTrailSurrogate(trail)) {
+          this._lastIntValue = combineSurrogatePair(lead, trail);
+          return true;
+        }
       }
 
       this.rewind(start);
@@ -71238,22 +71469,22 @@ class RegExpValidator {
     return false;
   }
 
-  eatIdentityEscape() {
-    if (this._uFlag) {
-      if (this.eatSyntaxCharacter()) {
-        return true;
-      }
-
-      if (this.eat(Solidus)) {
-        this._lastIntValue = Solidus;
-        return true;
-      }
+  eatRegExpUnicodeCodePointEscape() {
+    const start = this.index;
 
-      return false;
+    if (this.eat(LeftCurlyBracket) && this.eatHexDigits() && this.eat(RightCurlyBracket) && isValidUnicode(this._lastIntValue)) {
+      return true;
     }
 
-    if (this.isValidIdentityEscape(this.currentCodePoint)) {
-      this._lastIntValue = this.currentCodePoint;
+    this.rewind(start);
+    return false;
+  }
+
+  eatIdentityEscape() {
+    const cp = this.currentCodePoint;
+
+    if (this.isValidIdentityEscape(cp)) {
+      this._lastIntValue = cp;
       this.advance();
       return true;
     }
@@ -71266,11 +71497,19 @@ class RegExpValidator {
       return false;
     }
 
+    if (this._uFlag) {
+      return isSyntaxCharacter(cp) || cp === Solidus;
+    }
+
     if (this.strict) {
       return !isIdContinue(cp);
     }
 
-    return cp !== LatinSmallLetterC && (!this._nFlag || cp !== LatinSmallLetterK);
+    if (this._nFlag) {
+      return !(cp === LatinSmallLetterC || cp === LatinSmallLetterK);
+    }
+
+    return cp !== LatinSmallLetterC;
   }
 
   eatDecimalEscape() {
@@ -71289,61 +71528,6 @@ class RegExpValidator {
     return false;
   }
 
-  eatCharacterClassEscape() {
-    const start = this.index;
-
-    if (this.eat(LatinSmallLetterD)) {
-      this._lastIntValue = -1;
-      this.onEscapeCharacterSet(start - 1, this.index, "digit", false);
-      return true;
-    }
-
-    if (this.eat(LatinCapitalLetterD)) {
-      this._lastIntValue = -1;
-      this.onEscapeCharacterSet(start - 1, this.index, "digit", true);
-      return true;
-    }
-
-    if (this.eat(LatinSmallLetterS)) {
-      this._lastIntValue = -1;
-      this.onEscapeCharacterSet(start - 1, this.index, "space", false);
-      return true;
-    }
-
-    if (this.eat(LatinCapitalLetterS)) {
-      this._lastIntValue = -1;
-      this.onEscapeCharacterSet(start - 1, this.index, "space", true);
-      return true;
-    }
-
-    if (this.eat(LatinSmallLetterW)) {
-      this._lastIntValue = -1;
-      this.onEscapeCharacterSet(start - 1, this.index, "word", false);
-      return true;
-    }
-
-    if (this.eat(LatinCapitalLetterW)) {
-      this._lastIntValue = -1;
-      this.onEscapeCharacterSet(start - 1, this.index, "word", true);
-      return true;
-    }
-
-    let negate = false;
-
-    if (this._uFlag && this.ecmaVersion >= 2018 && (this.eat(LatinSmallLetterP) || (negate = this.eat(LatinCapitalLetterP)))) {
-      this._lastIntValue = -1;
-
-      if (this.eat(LeftCurlyBracket) && this.eatUnicodePropertyValueExpression() && this.eat(RightCurlyBracket)) {
-        this.onUnicodePropertyCharacterSet(start - 1, this.index, "property", this._lastKeyValue, this._lastValValue || null, negate);
-        return true;
-      }
-
-      this.raise("Invalid property name");
-    }
-
-    return false;
-  }
-
   eatUnicodePropertyValueExpression() {
     const start = this.index;
 
@@ -71410,120 +71594,6 @@ class RegExpValidator {
     return this.eatUnicodePropertyValue();
   }
 
-  eatCharacterClass() {
-    const start = this.index;
-
-    if (this.eat(LeftSquareBracket)) {
-      const negate = this.eat(CircumflexAccent);
-      this.onCharacterClassEnter(start, negate);
-      this.classRanges();
-
-      if (!this.eat(RightSquareBracket)) {
-        this.raise("Unterminated character class");
-      }
-
-      this.onCharacterClassLeave(start, this.index, negate);
-      return true;
-    }
-
-    return false;
-  }
-
-  classRanges() {
-    let start = this.index;
-
-    while (this.eatClassAtom()) {
-      const left = this._lastIntValue;
-      const hyphenStart = this.index;
-
-      if (this.eat(HyphenMinus)) {
-        this.onCharacter(hyphenStart, this.index, HyphenMinus);
-
-        if (this.eatClassAtom()) {
-          const right = this._lastIntValue;
-
-          if (left === -1 || right === -1) {
-            if (this.strict) {
-              this.raise("Invalid character class");
-            }
-          } else if (left > right) {
-            this.raise("Range out of order in character class");
-          } else {
-            this.onCharacterClassRange(start, this.index, left, right);
-          }
-        }
-      }
-
-      start = this.index;
-    }
-  }
-
-  eatClassAtom() {
-    const start = this.index;
-
-    if (this.eat(ReverseSolidus)) {
-      if (this.eatClassEscape()) {
-        return true;
-      }
-
-      if (this._uFlag) {
-        this.raise("Invalid escape");
-      }
-
-      this.rewind(start);
-    }
-
-    const cp = this.currentCodePoint;
-
-    if (cp !== -1 && cp !== RightSquareBracket) {
-      this.advance();
-      this._lastIntValue = cp;
-      this.onCharacter(start, this.index, cp);
-      return true;
-    }
-
-    return false;
-  }
-
-  eatClassEscape() {
-    const start = this.index;
-
-    if (this.eat(LatinSmallLetterB)) {
-      this._lastIntValue = Backspace;
-      this.onCharacter(start - 1, this.index, Backspace);
-      return true;
-    }
-
-    if (this._uFlag && this.eat(HyphenMinus)) {
-      this._lastIntValue = HyphenMinus;
-      this.onCharacter(start - 1, this.index, HyphenMinus);
-      return true;
-    }
-
-    if (!this._uFlag && this.eat(LatinSmallLetterC)) {
-      if (this.eatClassControlLetter()) {
-        this.onCharacter(start - 1, this.index, this._lastIntValue);
-        return true;
-      }
-
-      this.rewind(start);
-    }
-
-    return this.eatCharacterClassEscape() || this.eatCharacterEscape();
-  }
-
-  eatClassControlLetter() {
-    const cp = this.currentCodePoint;
-
-    if (isDecimalDigit(cp) || cp === LowLine) {
-      this.advance();
-      this._lastIntValue = cp % 0x20;
-      return true;
-    }
-
-    return false;
-  }
-
   eatHexEscapeSequence() {
     const start = this.index;
 
@@ -71532,7 +71602,7 @@ class RegExpValidator {
         return true;
       }
 
-      if (this._uFlag) {
+      if (this._uFlag || this.strict) {
         this.raise("Invalid escape");
       }
 
@@ -73949,7 +74019,7 @@ module.exports = {
       if (allowed.indexOf(kind) === -1 && node.body.type === "BlockStatement" && node.body.body.length === 0 && innerComments.length === 0) {
         context.report({
           node,
-          loc: node.body.loc.start,
+          loc: node.body.loc,
           messageId: "unexpected",
           data: {
             name
@@ -77570,7 +77640,9 @@ module.exports = {
         tokensToIgnore.add(secondToken);
       }
 
-      if (hasExcessParens(node)) {
+      const hasExtraParens = node.parent.type === "ExportDefaultDeclaration" ? hasExcessParensWithPrecedence(node, PRECEDENCE_OF_ASSIGNMENT_EXPR) : hasExcessParens(node);
+
+      if (hasExtraParens) {
         report(node);
       }
     }
@@ -79424,9 +79496,16 @@ module.exports = {
  * @author Brandon Mills
  */
  //------------------------------------------------------------------------------
+// Requirements
+//------------------------------------------------------------------------------
+
+const astUtils = __webpack_require__(426); //------------------------------------------------------------------------------
 // Rule Definition
 //------------------------------------------------------------------------------
 
+
+const validParent = new Set(["Program", "ExportNamedDeclaration", "ExportDefaultDeclaration"]);
+const validBlockStatementParent = new Set(["FunctionDeclaration", "FunctionExpression", "ArrowFunctionExpression"]);
 module.exports = {
   meta: {
     type: "problem",
@@ -79445,48 +79524,31 @@ module.exports = {
   },
 
   create(context) {
-    /**
-     * Find the nearest Program or Function ancestor node.
-     * @returns {Object} Ancestor's type and distance from node.
-     */
-    function nearestBody() {
-      const ancestors = context.getAncestors();
-      let ancestor = ancestors.pop(),
-          generation = 1;
-
-      while (ancestor && ["Program", "FunctionDeclaration", "FunctionExpression", "ArrowFunctionExpression"].indexOf(ancestor.type) < 0) {
-        generation += 1;
-        ancestor = ancestors.pop();
-      }
-
-      return {
-        // Type of containing ancestor
-        type: ancestor.type,
-        // Separation between ancestor and node
-        distance: generation
-      };
-    }
     /**
      * Ensure that a given node is at a program or function body's root.
      * @param {ASTNode} node Declaration node to check.
      * @returns {void}
      */
-
-
     function check(node) {
-      const body = nearestBody(),
-            valid = body.type === "Program" && body.distance === 1 || body.distance === 2;
+      const parent = node.parent;
 
-      if (!valid) {
-        context.report({
-          node,
-          messageId: "moveDeclToRoot",
-          data: {
-            type: node.type === "FunctionDeclaration" ? "function" : "variable",
-            body: body.type === "Program" ? "program" : "function body"
-          }
-        });
+      if (parent.type === "BlockStatement" && validBlockStatementParent.has(parent.parent.type)) {
+        return;
+      }
+
+      if (validParent.has(parent.type)) {
+        return;
       }
+
+      const upperFunction = astUtils.getUpperFunction(parent);
+      context.report({
+        node,
+        messageId: "moveDeclToRoot",
+        data: {
+          type: node.type === "FunctionDeclaration" ? "function" : "variable",
+          body: upperFunction === null ? "program" : "function body"
+        }
+      });
     }
 
     return {
@@ -80353,7 +80415,7 @@ module.exports = {
       });
     }
     /**
-     * Checks for any ocurrence of a BlockStatement in a place where lists of statements can appear
+     * Checks for any occurrence of a BlockStatement in a place where lists of statements can appear
      * @param {ASTNode} node The node to check
      * @returns {boolean} True if the node is a lone block.
      */
@@ -81433,6 +81495,8 @@ module.exports = {
 
 module.exports = {
   meta: {
+    deprecated: true,
+    replacedBy: ["node/no-mixed-requires"],
     type: "suggestion",
     docs: {
       description: "disallow `require` calls to be mixed with regular variable declarations",
@@ -82510,9 +82574,14 @@ module.exports = {
  * @author Matt DuVall <http://www.mattduvall.com/>
  */
  //------------------------------------------------------------------------------
+// Requirements
+//------------------------------------------------------------------------------
+
+const astUtils = __webpack_require__(426); //------------------------------------------------------------------------------
 // Rule Definition
 //------------------------------------------------------------------------------
 
+
 module.exports = {
   meta: {
     type: "suggestion",
@@ -82531,6 +82600,12 @@ module.exports = {
   create(context) {
     return {
       NewExpression(node) {
+        const variable = astUtils.getVariableByName(context.getScope(), node.callee.name);
+
+        if (variable && variable.identifiers.length > 0) {
+          return;
+        }
+
         if (node.callee.name === "Object") {
           context.report({
             node,
@@ -82559,6 +82634,8 @@ module.exports = {
 
 module.exports = {
   meta: {
+    deprecated: true,
+    replacedBy: ["node/no-new-require"],
     type: "suggestion",
     docs: {
       description: "disallow `new` operators with calls to `require`",
@@ -83125,6 +83202,8 @@ module.exports = {
 
 module.exports = {
   meta: {
+    deprecated: true,
+    replacedBy: ["node/no-path-concat"],
     type: "suggestion",
     docs: {
       description: "disallow string concatenation with `__dirname` and `__filename`",
@@ -83277,6 +83356,8 @@ module.exports = {
 
 module.exports = {
   meta: {
+    deprecated: true,
+    replacedBy: ["node/no-process-env"],
     type: "suggestion",
     docs: {
       description: "disallow the use of `process.env`",
@@ -83324,6 +83405,8 @@ module.exports = {
 
 module.exports = {
   meta: {
+    deprecated: true,
+    replacedBy: ["node/no-process-exit"],
     type: "suggestion",
     docs: {
       description: "disallow the use of `process.exit()`",
@@ -84636,6 +84719,8 @@ const arrayOfStringsOrObjects = {
 };
 module.exports = {
   meta: {
+    deprecated: true,
+    replacedBy: ["node/no-restricted-require"],
     type: "suggestion",
     docs: {
       description: "disallow specified modules when loaded by `require`",
@@ -86251,6 +86336,8 @@ module.exports = {
 
 module.exports = {
   meta: {
+    deprecated: true,
+    replacedBy: ["node/no-sync"],
     type: "suggestion",
     docs: {
       description: "disallow synchronous methods",
@@ -87490,11 +87577,8 @@ module.exports = {
       if (openParen.loc.start.line !== nodeExpressionEnd.loc.end.line) {
         context.report({
           node,
-          loc: openParen.loc.start,
-          messageId,
-          data: {
-            char: openParen.value
-          }
+          loc: openParen.loc,
+          messageId
         });
       }
     } //--------------------------------------------------------------------------
@@ -87512,22 +87596,25 @@ module.exports = {
       },
 
       TaggedTemplateExpression(node) {
-        if (node.tag.loc.end.line === node.quasi.loc.start.line) {
-          return;
-        } // handle generics type parameters on template tags
-
+        const {
+          quasi
+        } = node; // handles common tags, parenthesized tags, and typescript's generic type arguments
 
-        const tokenBefore = sourceCode.getTokenBefore(node.quasi);
+        const tokenBefore = sourceCode.getTokenBefore(quasi);
 
-        if (tokenBefore.loc.end.line === node.quasi.loc.start.line) {
-          return;
+        if (tokenBefore.loc.end.line !== quasi.loc.start.line) {
+          context.report({
+            node,
+            loc: {
+              start: quasi.loc.start,
+              end: {
+                line: quasi.loc.start.line,
+                column: quasi.loc.start.column + 1
+              }
+            },
+            messageId: "taggedTemplate"
+          });
         }
-
-        context.report({
-          node,
-          loc: node.loc.start,
-          messageId: "taggedTemplate"
-        });
       },
 
       CallExpression(node) {
@@ -90380,7 +90467,7 @@ module.exports = {
           const operatorToken = sourceCode.getFirstTokenBetween(left, right, isConcatOperatorToken);
           context.report({
             node,
-            loc: operatorToken.loc.start,
+            loc: operatorToken.loc,
             messageId: "unexpectedConcat"
           });
         }
@@ -101092,7 +101179,10 @@ module.exports = {
       if (hasSpacing && functionConfig === "never") {
         context.report({
           node,
-          loc: leftToken.loc.end,
+          loc: {
+            start: leftToken.loc.end,
+            end: rightToken.loc.start
+          },
           messageId: "unexpectedSpace",
 
           fix(fixer) {
@@ -101109,7 +101199,7 @@ module.exports = {
       } else if (!hasSpacing && functionConfig === "always") {
         context.report({
           node,
-          loc: leftToken.loc.end,
+          loc: rightToken.loc,
           messageId: "missingSpace",
           fix: fixer => fixer.insertTextAfter(leftToken, " ")
         });
@@ -106319,7 +106409,7 @@ module.exports = {
 /* 719 */
 /***/ (function(module) {
 
-module.exports = JSON.parse("{\"_from\":\"doctrine@^3.0.0\",\"_id\":\"doctrine@3.0.0\",\"_inBundle\":false,\"_integrity\":\"sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==\",\"_location\":\"/doctrine\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"range\",\"registry\":true,\"raw\":\"doctrine@^3.0.0\",\"name\":\"doctrine\",\"escapedName\":\"doctrine\",\"rawSpec\":\"^3.0.0\",\"saveSpec\":null,\"fetchSpec\":\"^3.0.0\"},\"_requiredBy\":[\"/\",\"/eslint\"],\"_resolved\":\"https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz\",\"_shasum\":\"addebead72a6574db783639dc87a121773973961\",\"_spec\":\"doctrine@^3.0.0\",\"_where\":\"/home/dcsapak/git/pve-eslint/eslint-v7.0.0-alpha.3\",\"bugs\":{\"url\":\"https://github.com/eslint/doctrine/issues\"},\"bundleDependencies\":false,\"dependencies\":{\"esutils\":\"^2.0.2\"},\"deprecated\":false,\"description\":\"JSDoc parser\",\"devDependencies\":{\"coveralls\":\"^3.0.1\",\"dateformat\":\"^1.0.11\",\"eslint\":\"^1.10.3\",\"eslint-release\":\"^1.0.0\",\"linefix\":\"^0.1.1\",\"mocha\":\"^3.4.2\",\"npm-license\":\"^0.3.1\",\"nyc\":\"^10.3.2\",\"semver\":\"^5.0.3\",\"shelljs\":\"^0.5.3\",\"shelljs-nodecli\":\"^0.1.1\",\"should\":\"^5.0.1\"},\"directories\":{\"lib\":\"./lib\"},\"engines\":{\"node\":\">=6.0.0\"},\"files\":[\"lib\"],\"homepage\":\"https://github.com/eslint/doctrine\",\"license\":\"Apache-2.0\",\"main\":\"lib/doctrine.js\",\"maintainers\":[{\"name\":\"Nicholas C. Zakas\",\"email\":\"nicholas+npm@nczconsulting.com\",\"url\":\"https://www.nczonline.net\"},{\"name\":\"Yusuke Suzuki\",\"email\":\"utatane.tea@gmail.com\",\"url\":\"https://github.com/Constellation\"}],\"name\":\"doctrine\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/eslint/doctrine.git\"},\"scripts\":{\"coveralls\":\"nyc report --reporter=text-lcov | coveralls\",\"generate-alpharelease\":\"eslint-generate-prerelease alpha\",\"generate-betarelease\":\"eslint-generate-prerelease beta\",\"generate-rcrelease\":\"eslint-generate-prerelease rc\",\"generate-release\":\"eslint-generate-release\",\"lint\":\"eslint lib/\",\"pretest\":\"npm run lint\",\"publish-release\":\"eslint-publish-release\",\"test\":\"nyc mocha\"},\"version\":\"3.0.0\"}");
+module.exports = JSON.parse("{\"_from\":\"doctrine@^3.0.0\",\"_id\":\"doctrine@3.0.0\",\"_inBundle\":false,\"_integrity\":\"sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==\",\"_location\":\"/doctrine\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"range\",\"registry\":true,\"raw\":\"doctrine@^3.0.0\",\"name\":\"doctrine\",\"escapedName\":\"doctrine\",\"rawSpec\":\"^3.0.0\",\"saveSpec\":null,\"fetchSpec\":\"^3.0.0\"},\"_requiredBy\":[\"/\",\"/eslint\"],\"_resolved\":\"https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz\",\"_shasum\":\"addebead72a6574db783639dc87a121773973961\",\"_spec\":\"doctrine@^3.0.0\",\"_where\":\"/home/dcsapak/git/pve-eslint/eslint-v7.0.0\",\"bugs\":{\"url\":\"https://github.com/eslint/doctrine/issues\"},\"bundleDependencies\":false,\"dependencies\":{\"esutils\":\"^2.0.2\"},\"deprecated\":false,\"description\":\"JSDoc parser\",\"devDependencies\":{\"coveralls\":\"^3.0.1\",\"dateformat\":\"^1.0.11\",\"eslint\":\"^1.10.3\",\"eslint-release\":\"^1.0.0\",\"linefix\":\"^0.1.1\",\"mocha\":\"^3.4.2\",\"npm-license\":\"^0.3.1\",\"nyc\":\"^10.3.2\",\"semver\":\"^5.0.3\",\"shelljs\":\"^0.5.3\",\"shelljs-nodecli\":\"^0.1.1\",\"should\":\"^5.0.1\"},\"directories\":{\"lib\":\"./lib\"},\"engines\":{\"node\":\">=6.0.0\"},\"files\":[\"lib\"],\"homepage\":\"https://github.com/eslint/doctrine\",\"license\":\"Apache-2.0\",\"main\":\"lib/doctrine.js\",\"maintainers\":[{\"name\":\"Nicholas C. Zakas\",\"email\":\"nicholas+npm@nczconsulting.com\",\"url\":\"https://www.nczonline.net\"},{\"name\":\"Yusuke Suzuki\",\"email\":\"utatane.tea@gmail.com\",\"url\":\"https://github.com/Constellation\"}],\"name\":\"doctrine\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/eslint/doctrine.git\"},\"scripts\":{\"coveralls\":\"nyc report --reporter=text-lcov | coveralls\",\"generate-alpharelease\":\"eslint-generate-prerelease alpha\",\"generate-betarelease\":\"eslint-generate-prerelease beta\",\"generate-rcrelease\":\"eslint-generate-prerelease rc\",\"generate-release\":\"eslint-generate-release\",\"lint\":\"eslint lib/\",\"pretest\":\"npm run lint\",\"publish-release\":\"eslint-publish-release\",\"test\":\"nyc mocha\"},\"version\":\"3.0.0\"}");
 
 /***/ }),
 /* 720 */
@@ -107019,20 +107109,17 @@ function looksLikeLiteral(node) {
 /**
  * Attempts to derive a Literal node from nodes that are treated like literals.
  * @param {ASTNode} node Node to normalize.
- * @param {number} [defaultValue] The default value to be returned if the node
- *                                is not a Literal.
  * @returns {ASTNode} One of the following options.
  *  1. The original node if the node is already a Literal
  *  2. A normalized Literal node with the negative number as the value if the
  *     node represents a negative number literal.
  *  3. A normalized Literal node with the string as the value if the node is
  *     a Template Literal without expression.
- *  4. The Literal node which has the `defaultValue` argument if it exists.
- *  5. Otherwise `null`.
+ *  4. Otherwise `null`.
  */
 
 
-function getNormalizedLiteral(node, defaultValue) {
+function getNormalizedLiteral(node) {
   if (node.type === "Literal") {
     return node;
   }
@@ -107053,14 +107140,6 @@ function getNormalizedLiteral(node, defaultValue) {
     };
   }
 
-  if (defaultValue) {
-    return {
-      type: "Literal",
-      value: defaultValue,
-      raw: String(defaultValue)
-    };
-  }
-
   return null;
 }
 /**
@@ -107119,7 +107198,7 @@ module.exports = {
   meta: {
     type: "suggestion",
     docs: {
-      description: "require or disallow \"Yoda\" conditions",
+      description: 'require or disallow "Yoda" conditions',
       category: "Best Practices",
       recommended: false,
       url: "https://eslint.org/docs/rules/yoda"
@@ -107172,8 +107251,24 @@ module.exports = {
        */
 
       function isBetweenTest() {
-        let leftLiteral, rightLiteral;
-        return node.operator === "&&" && (leftLiteral = getNormalizedLiteral(left.left)) && (rightLiteral = getNormalizedLiteral(right.right, Number.POSITIVE_INFINITY)) && leftLiteral.value <= rightLiteral.value && same(left.right, right.left);
+        if (node.operator === "&&" && same(left.right, right.left)) {
+          const leftLiteral = getNormalizedLiteral(left.left);
+          const rightLiteral = getNormalizedLiteral(right.right);
+
+          if (leftLiteral === null && rightLiteral === null) {
+            return false;
+          }
+
+          if (rightLiteral === null || leftLiteral === null) {
+            return true;
+          }
+
+          if (leftLiteral.value <= rightLiteral.value) {
+            return true;
+          }
+        }
+
+        return false;
       }
       /**
        * Determines whether node is of the form `x < 0 || 1 <= x`.
@@ -107182,8 +107277,24 @@ module.exports = {
 
 
       function isOutsideTest() {
-        let leftLiteral, rightLiteral;
-        return node.operator === "||" && (leftLiteral = getNormalizedLiteral(left.right, Number.NEGATIVE_INFINITY)) && (rightLiteral = getNormalizedLiteral(right.left)) && leftLiteral.value <= rightLiteral.value && same(left.left, right.right);
+        if (node.operator === "||" && same(left.left, right.right)) {
+          const leftLiteral = getNormalizedLiteral(left.right);
+          const rightLiteral = getNormalizedLiteral(right.left);
+
+          if (leftLiteral === null && rightLiteral === null) {
+            return false;
+          }
+
+          if (rightLiteral === null || leftLiteral === null) {
+            return true;
+          }
+
+          if (leftLiteral.value <= rightLiteral.value) {
+            return true;
+          }
+        }
+
+        return false;
       }
       /**
        * Determines whether node is wrapped in parentheses.
@@ -120712,13 +120823,13 @@ module.exports = class ConfigCommentParser {
 /* 799 */
 /***/ (function(module, exports, __webpack_require__) {
 
-// Generated by LiveScript 1.4.0
+// Generated by LiveScript 1.6.0
 (function () {
   var parseString, cast, parseType, VERSION, parsedTypeParse, parse;
   parseString = __webpack_require__(800);
   cast = __webpack_require__(807);
   parseType = __webpack_require__(808).parseType;
-  VERSION = '0.3.0';
+  VERSION = '0.4.1';
 
   parsedTypeParse = function parsedTypeParse(parsedType, string, options) {
     options == null && (options = {});
@@ -120742,7 +120853,7 @@ module.exports = class ConfigCommentParser {
 /* 800 */
 /***/ (function(module, exports, __webpack_require__) {
 
-// Generated by LiveScript 1.4.0
+// Generated by LiveScript 1.6.0
 (function () {
   var reject, special, tokenRegex;
   reject = __webpack_require__(801).reject;
@@ -120867,7 +120978,7 @@ module.exports = class ConfigCommentParser {
     options == null && (options = {});
 
     if (!options.explicit && types.length === 1 && types[0].type === 'String') {
-      return "'" + string.replace(/\\'/g, "\\\\'") + "'";
+      return string;
     }
 
     tokens = reject(not$, string.split(tokenRegex));
@@ -120889,7 +121000,7 @@ module.exports = class ConfigCommentParser {
 /* 801 */
 /***/ (function(module, exports, __webpack_require__) {
 
-// Generated by LiveScript 1.4.0
+// Generated by LiveScript 1.6.0
 var Func,
     List,
     Obj,
@@ -121066,7 +121177,7 @@ prelude.even = Num.even;
 prelude.odd = Num.odd;
 prelude.gcd = Num.gcd;
 prelude.lcm = Num.lcm;
-prelude.VERSION = '1.1.2';
+prelude.VERSION = '1.2.1';
 module.exports = prelude;
 
 function curry$(f, bound) {
@@ -121086,14 +121197,13 @@ function curry$(f, bound) {
 /* 802 */
 /***/ (function(module, exports) {
 
-// Generated by LiveScript 1.4.0
+// Generated by LiveScript 1.6.0
 var apply,
     curry,
     flip,
     fix,
     over,
     memoize,
-    slice$ = [].slice,
     toString$ = {}.toString;
 apply = curry$(function (f, list) {
   return f.apply(null, list);
@@ -121127,8 +121237,14 @@ memoize = function memoize(f) {
   var memo;
   memo = {};
   return function () {
-    var args, key, arg;
-    args = slice$.call(arguments);
+    var args, res$, i$, to$, key, arg;
+    res$ = [];
+
+    for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
+      res$.push(arguments[i$]);
+    }
+
+    args = res$;
 
     key = function () {
       var i$,
@@ -121174,12 +121290,13 @@ function curry$(f, bound) {
 /* 803 */
 /***/ (function(module, exports) {
 
-// Generated by LiveScript 1.4.0
+// Generated by LiveScript 1.6.0
 var each,
     map,
     compact,
     filter,
     reject,
+    remove,
     partition,
     find,
     head,
@@ -121244,8 +121361,7 @@ var each,
     elemIndices,
     findIndex,
     findIndices,
-    toString$ = {}.toString,
-    slice$ = [].slice;
+    toString$ = {}.toString;
 
 each = curry$(function (f, xs) {
   var i$, len$, x;
@@ -121320,6 +121436,17 @@ reject = curry$(function (f, xs) {
 
   return results$;
 });
+remove = curry$(function (el, xs) {
+  var i, x$;
+  i = elemIndex(el, xs);
+  x$ = xs.slice();
+
+  if (i != null) {
+    x$.splice(i, 1);
+  }
+
+  return x$;
+});
 partition = curry$(function (f, xs) {
   var passed, failed, i$, len$, x;
   passed = [];
@@ -121497,8 +121624,14 @@ _flatten = function flatten(xs) {
 };
 
 difference = function difference(xs) {
-  var yss, results, i$, len$, x, j$, len1$, ys;
-  yss = slice$.call(arguments, 1);
+  var yss, res$, i$, to$, results, len$, x, j$, len1$, ys;
+  res$ = [];
+
+  for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) {
+    res$.push(arguments[i$]);
+  }
+
+  yss = res$;
   results = [];
 
   outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
@@ -121519,8 +121652,14 @@ difference = function difference(xs) {
 };
 
 intersection = function intersection(xs) {
-  var yss, results, i$, len$, x, j$, len1$, ys;
-  yss = slice$.call(arguments, 1);
+  var yss, res$, i$, to$, results, len$, x, j$, len1$, ys;
+  res$ = [];
+
+  for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) {
+    res$.push(arguments[i$]);
+  }
+
+  yss = res$;
   results = [];
 
   outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
@@ -121541,8 +121680,14 @@ intersection = function intersection(xs) {
 };
 
 union = function union() {
-  var xss, results, i$, len$, xs, j$, len1$, x;
-  xss = slice$.call(arguments);
+  var xss, res$, i$, to$, results, len$, xs, j$, len1$, x;
+  res$ = [];
+
+  for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
+    res$.push(arguments[i$]);
+  }
+
+  xss = res$;
   results = [];
 
   for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {
@@ -121904,8 +122049,10 @@ zipWith = curry$(function (f, xs, ys) {
 
 zipAll = function zipAll() {
   var xss,
-      minLength,
+      res$,
       i$,
+      to$,
+      minLength,
       len$,
       xs,
       ref$,
@@ -121913,7 +122060,13 @@ zipAll = function zipAll() {
       lresult$,
       j$,
       results$ = [];
-  xss = slice$.call(arguments);
+  res$ = [];
+
+  for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
+    res$.push(arguments[i$]);
+  }
+
+  xss = res$;
   minLength = undefined;
 
   for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {
@@ -121938,14 +122091,22 @@ zipAll = function zipAll() {
 
 zipAllWith = function zipAllWith(f) {
   var xss,
-      minLength,
+      res$,
       i$,
+      to$,
+      minLength,
       len$,
       xs,
       ref$,
       i,
       results$ = [];
-  xss = slice$.call(arguments, 1);
+  res$ = [];
+
+  for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) {
+    res$.push(arguments[i$]);
+  }
+
+  xss = res$;
   minLength = undefined;
 
   for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {
@@ -122048,6 +122209,7 @@ module.exports = {
   filter: filter,
   compact: compact,
   reject: reject,
+  remove: remove,
   partition: partition,
   find: find,
   head: head,
@@ -122158,7 +122320,7 @@ function not$(x) {
 /* 804 */
 /***/ (function(module, exports) {
 
-// Generated by LiveScript 1.4.0
+// Generated by LiveScript 1.6.0
 var values, keys, pairsToObj, objToPairs, listsToObj, objToLists, empty, each, map, compact, filter, reject, partition, find;
 
 values = function values(object) {
@@ -122378,7 +122540,7 @@ function curry$(f, bound) {
 /* 805 */
 /***/ (function(module, exports) {
 
-// Generated by LiveScript 1.4.0
+// Generated by LiveScript 1.6.0
 var split, join, lines, unlines, words, unwords, chars, unchars, reverse, repeat, capitalize, camelize, dasherize;
 split = curry$(function (sep, str) {
   return str.split(sep);
@@ -122489,7 +122651,7 @@ function curry$(f, bound) {
 /* 806 */
 /***/ (function(module, exports) {
 
-// Generated by LiveScript 1.4.0
+// Generated by LiveScript 1.6.0
 var max, min, negate, abs, signum, quot, rem, div, mod, recip, pi, tau, exp, sqrt, ln, pow, sin, tan, cos, asin, acos, atan, atan2, truncate, round, ceiling, floor, isItNaN, even, odd, gcd, lcm;
 max = curry$(function (x$, y$) {
   return x$ > y$ ? x$ : y$;
@@ -122638,7 +122800,7 @@ function curry$(f, bound) {
 /* 807 */
 /***/ (function(module, exports, __webpack_require__) {
 
-// Generated by LiveScript 1.4.0
+// Generated by LiveScript 1.6.0
 (function () {
   var parsedTypeCheck,
       types,
@@ -122836,7 +122998,7 @@ function curry$(f, bound) {
       }, options);
     },
     String: function String(it) {
-      var that;
+      var replace, that;
 
       if (toString$.call(it).slice(8, -1) !== 'String') {
         return {
@@ -122844,15 +123006,48 @@ function curry$(f, bound) {
         };
       }
 
+      replace = function replace(value, quote) {
+        return value.replace(/\\([^u]|u[0-9a-fA-F]{4})/g, function (all, escaped) {
+          switch (escaped[0]) {
+            case quote:
+              return quote;
+
+            case '\\':
+              return '\\';
+
+            case 'b':
+              return '\b';
+
+            case 'f':
+              return '\f';
+
+            case 'n':
+              return '\n';
+
+            case 'r':
+              return '\r';
+
+            case 't':
+              return '\t';
+
+            case 'u':
+              return JSON.parse("\"" + all + "\"");
+
+            default:
+              return escaped;
+          }
+        });
+      };
+
       if (that = it.match(/^'([\s\S]*)'$/)) {
         return {
           type: 'Just',
-          value: that[1].replace(/\\'/g, "'")
+          value: replace(that[1], "'")
         };
       } else if (that = it.match(/^"([\s\S]*)"$/)) {
         return {
           type: 'Just',
-          value: that[1].replace(/\\"/g, '"')
+          value: replace(that[1], '"')
         };
       } else {
         return {
@@ -123003,17 +123198,23 @@ function curry$(f, bound) {
     throw new Error("Value " + JSON.stringify(node) + " does not type check against " + JSON.stringify(types) + ".");
   }
 
-  module.exports = typesCast;
+  module.exports = function (node, types, options) {
+    if (!options.explicit && types.length === 1 && types[0].type === 'String') {
+      return node;
+    }
+
+    return typesCast(node, types, options);
+  };
 }).call(this);
 
 /***/ }),
 /* 808 */
 /***/ (function(module, exports, __webpack_require__) {
 
-// Generated by LiveScript 1.4.0
+// Generated by LiveScript 1.6.0
 (function () {
   var VERSION, parseType, parsedTypeCheck, typeCheck;
-  VERSION = '0.3.2';
+  VERSION = '0.4.0';
   parseType = __webpack_require__(809);
   parsedTypeCheck = __webpack_require__(810);
 
@@ -123033,7 +123234,7 @@ function curry$(f, bound) {
 /* 809 */
 /***/ (function(module, exports) {
 
-// Generated by LiveScript 1.4.0
+// Generated by LiveScript 1.6.0
 (function () {
   var identifierRegex, tokenRegex;
   identifierRegex = /[\$\w]+/;
@@ -123201,7 +123402,7 @@ function curry$(f, bound) {
   }
 
   function consumeTypes(tokens) {
-    var lookahead, types, typesSoFar, typeObj, type;
+    var lookahead, types, typesSoFar, typeObj, type, structure;
 
     if ('::' === peek(tokens)) {
       throw new Error("No comment before comment separator '::' found.");
@@ -123231,13 +123432,15 @@ function curry$(f, bound) {
     }
 
     for (;;) {
-      typeObj = consumeType(tokens), type = typeObj.type;
+      typeObj = consumeType(tokens), type = typeObj.type, structure = typeObj.structure;
 
       if (!typesSoFar[type]) {
         types.push(typeObj);
       }
 
-      typesSoFar[type] = true;
+      if (structure == null) {
+        typesSoFar[type] = true;
+      }
 
       if (!maybeConsumeOp(tokens, '|')) {
         break;
@@ -123284,7 +123487,7 @@ function curry$(f, bound) {
 /* 810 */
 /***/ (function(module, exports, __webpack_require__) {
 
-// Generated by LiveScript 1.4.0
+// Generated by LiveScript 1.6.0
 (function () {
   var ref$,
       any,
@@ -123292,7 +123495,6 @@ function curry$(f, bound) {
       isItNaN,
       types,
       defaultType,
-      customTypes,
       toString$ = {}.toString;
   ref$ = __webpack_require__(801), any = ref$.any, all = ref$.all, isItNaN = ref$.isItNaN;
   types = {
@@ -123330,20 +123532,20 @@ function curry$(f, bound) {
     tuple: 'Array'
   };
 
-  function checkArray(input, type) {
+  function checkArray(input, type, options) {
     return all(function (it) {
-      return checkMultiple(it, type.of);
+      return checkMultiple(it, type.of, options);
     }, input);
   }
 
-  function checkTuple(input, type) {
+  function checkTuple(input, type, options) {
     var i, i$, ref$, len$, types;
     i = 0;
 
     for (i$ = 0, len$ = (ref$ = type.of).length; i$ < len$; ++i$) {
       types = ref$[i$];
 
-      if (!checkMultiple(input[i], types)) {
+      if (!checkMultiple(input[i], types, options)) {
         return false;
       }
 
@@ -123353,7 +123555,7 @@ function curry$(f, bound) {
     return input.length <= i;
   }
 
-  function checkFields(input, type) {
+  function checkFields(input, type, options) {
     var inputKeys, numInputKeys, k, numOfKeys, key, ref$, types;
     inputKeys = {};
     numInputKeys = 0;
@@ -123368,7 +123570,7 @@ function curry$(f, bound) {
     for (key in ref$ = type.of) {
       types = ref$[key];
 
-      if (!checkMultiple(input[key], types)) {
+      if (!checkMultiple(input[key], types, options)) {
         return false;
       }
 
@@ -123380,24 +123582,24 @@ function curry$(f, bound) {
     return type.subset || numInputKeys === numOfKeys;
   }
 
-  function checkStructure(input, type) {
+  function checkStructure(input, type, options) {
     if (!(input instanceof Object)) {
       return false;
     }
 
     switch (type.structure) {
       case 'fields':
-        return checkFields(input, type);
+        return checkFields(input, type, options);
 
       case 'array':
-        return checkArray(input, type);
+        return checkArray(input, type, options);
 
       case 'tuple':
-        return checkTuple(input, type);
+        return checkTuple(input, type, options);
     }
   }
 
-  function check(input, typeObj) {
+  function check(input, typeObj, options) {
     var type, structure, setting, that;
     type = typeObj.type, structure = typeObj.structure;
 
@@ -123406,12 +123608,12 @@ function curry$(f, bound) {
         return true;
       }
 
-      setting = customTypes[type] || types[type];
+      setting = options.customTypes[type] || types[type];
 
       if (setting) {
-        return setting.typeOf === toString$.call(input).slice(8, -1) && setting.validate(input);
+        return (setting.typeOf === void 8 || setting.typeOf === toString$.call(input).slice(8, -1)) && setting.validate(input);
       } else {
-        return type === toString$.call(input).slice(8, -1) && (!structure || checkStructure(input, typeObj));
+        return type === toString$.call(input).slice(8, -1) && (!structure || checkStructure(input, typeObj, options));
       }
     } else if (structure) {
       if (that = defaultType[structure]) {
@@ -123420,26 +123622,30 @@ function curry$(f, bound) {
         }
       }
 
-      return checkStructure(input, typeObj);
+      return checkStructure(input, typeObj, options);
     } else {
       throw new Error("No type defined. Input: " + input + ".");
     }
   }
 
-  function checkMultiple(input, types) {
+  function checkMultiple(input, types, options) {
     if (toString$.call(types).slice(8, -1) !== 'Array') {
       throw new Error("Types must be in an array. Input: " + input + ".");
     }
 
     return any(function (it) {
-      return check(input, it);
+      return check(input, it, options);
     }, types);
   }
 
   module.exports = function (parsedType, input, options) {
     options == null && (options = {});
-    customTypes = options.customTypes || {};
-    return checkMultiple(input, parsedType);
+
+    if (options.customTypes == null) {
+      options.customTypes = {};
+    }
+
+    return checkMultiple(input, parsedType, options);
   };
 }).call(this);
 
@@ -123770,17 +123976,79 @@ module.exports = NodeEventGenerator;
 }(this, function () {
   "use strict";
 
+  function e(t) {
+    return (e = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
+      return typeof e;
+    } : function (e) {
+      return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
+    })(t);
+  }
+
+  function t(e, t) {
+    return function (e) {
+      if (Array.isArray(e)) return e;
+    }(e) || function (e, t) {
+      if ("undefined" == typeof Symbol || !(Symbol.iterator in Object(e))) return;
+      var r = [],
+          n = !0,
+          o = !1,
+          a = void 0;
+
+      try {
+        for (var s, i = e[Symbol.iterator](); !(n = (s = i.next()).done) && (r.push(s.value), !t || r.length !== t); n = !0);
+      } catch (e) {
+        o = !0, a = e;
+      } finally {
+        try {
+          n || null == i.return || i.return();
+        } finally {
+          if (o) throw a;
+        }
+      }
+
+      return r;
+    }(e, t) || n(e, t) || function () {
+      throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+    }();
+  }
+
+  function r(e) {
+    return function (e) {
+      if (Array.isArray(e)) return o(e);
+    }(e) || function (e) {
+      if ("undefined" != typeof Symbol && Symbol.iterator in Object(e)) return Array.from(e);
+    }(e) || n(e) || function () {
+      throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+    }();
+  }
+
+  function n(e, t) {
+    if (e) {
+      if ("string" == typeof e) return o(e, t);
+      var r = Object.prototype.toString.call(e).slice(8, -1);
+      return "Object" === r && e.constructor && (r = e.constructor.name), "Map" === r || "Set" === r ? Array.from(r) : "Arguments" === r || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r) ? o(e, t) : void 0;
+    }
+  }
+
+  function o(e, t) {
+    (null == t || t > e.length) && (t = e.length);
+
+    for (var r = 0, n = new Array(t); r < t; r++) n[r] = e[r];
+
+    return n;
+  }
+
   "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self && self;
 
-  function e(e, t) {
+  function a(e, t) {
     return e(t = {
       exports: {}
     }, t.exports), t.exports;
   }
 
-  var t = e(function (e, t) {
+  var s = a(function (e, t) {
     !function e(t) {
-      var r, n, s, o, a, i;
+      var r, n, o, a, s, i;
 
       function l(e) {
         var t,
@@ -123800,9 +124068,9 @@ module.exports = NodeEventGenerator;
         this.node = e, this.path = t, this.wrap = r, this.ref = n;
       }
 
-      function p() {}
+      function f() {}
 
-      function f(e) {
+      function p(e) {
         return null != e && "object" == typeof e && "string" == typeof e.type;
       }
 
@@ -123811,17 +124079,23 @@ module.exports = NodeEventGenerator;
       }
 
       function d(e, t) {
-        return new p().traverse(e, t);
+        for (var r = e.length - 1; r >= 0; --r) if (e[r].node === t) return !0;
+
+        return !1;
       }
 
-      function x(e, t) {
+      function y(e, t) {
+        return new f().traverse(e, t);
+      }
+
+      function m(e, t) {
         var r;
         return r = function (e, t) {
-          var r, n, s, o;
+          var r, n, o, a;
 
-          for (n = e.length, s = 0; n;) t(e[o = s + (r = n >>> 1)]) ? n = r : (s = o + 1, n -= r + 1);
+          for (n = e.length, o = 0; n;) t(e[a = o + (r = n >>> 1)]) ? n = r : (o = a + 1, n -= r + 1);
 
-          return s;
+          return o;
         }(t, function (t) {
           return t.range[0] > e.range[0];
         }), e.extendedRange = [e.range[0], e.range[1]], r !== t.length && (e.extendedRange[1] = t[r].range[0]), (r -= 1) >= 0 && (e.extendedRange[0] = t[r].range[1]), e;
@@ -123900,7 +124174,7 @@ module.exports = NodeEventGenerator;
         WhileStatement: "WhileStatement",
         WithStatement: "WithStatement",
         YieldExpression: "YieldExpression"
-      }, s = {
+      }, o = {
         AssignmentExpression: ["left", "right"],
         AssignmentPattern: ["left", "right"],
         ArrayExpression: ["elements"],
@@ -123974,120 +124248,123 @@ module.exports = NodeEventGenerator;
         WithStatement: ["object", "body"],
         YieldExpression: ["argument"]
       }, n = {
-        Break: o = {},
-        Skip: a = {},
+        Break: a = {},
+        Skip: s = {},
         Remove: i = {}
       }, u.prototype.replace = function (e) {
         this.parent[this.key] = e;
       }, u.prototype.remove = function () {
         return Array.isArray(this.parent) ? (this.parent.splice(this.key, 1), !0) : (this.replace(null), !1);
-      }, p.prototype.path = function () {
-        var e, t, r, n, s;
+      }, f.prototype.path = function () {
+        var e, t, r, n, o;
 
-        function o(e, t) {
+        function a(e, t) {
           if (Array.isArray(t)) for (r = 0, n = t.length; r < n; ++r) e.push(t[r]);else e.push(t);
         }
 
         if (!this.__current.path) return null;
 
-        for (s = [], e = 2, t = this.__leavelist.length; e < t; ++e) o(s, this.__leavelist[e].path);
+        for (o = [], e = 2, t = this.__leavelist.length; e < t; ++e) a(o, this.__leavelist[e].path);
 
-        return o(s, this.__current.path), s;
-      }, p.prototype.type = function () {
+        return a(o, this.__current.path), o;
+      }, f.prototype.type = function () {
         return this.current().type || this.__current.wrap;
-      }, p.prototype.parents = function () {
+      }, f.prototype.parents = function () {
         var e, t, r;
 
         for (r = [], e = 1, t = this.__leavelist.length; e < t; ++e) r.push(this.__leavelist[e].node);
 
         return r;
-      }, p.prototype.current = function () {
+      }, f.prototype.current = function () {
         return this.__current.node;
-      }, p.prototype.__execute = function (e, t) {
+      }, f.prototype.__execute = function (e, t) {
         var r, n;
         return n = void 0, r = this.__current, this.__current = t, this.__state = null, e && (n = e.call(this, t.node, this.__leavelist[this.__leavelist.length - 1].node)), this.__current = r, n;
-      }, p.prototype.notify = function (e) {
+      }, f.prototype.notify = function (e) {
         this.__state = e;
-      }, p.prototype.skip = function () {
+      }, f.prototype.skip = function () {
+        this.notify(s);
+      }, f.prototype.break = function () {
         this.notify(a);
-      }, p.prototype.break = function () {
-        this.notify(o);
-      }, p.prototype.remove = function () {
+      }, f.prototype.remove = function () {
         this.notify(i);
-      }, p.prototype.__initialize = function (e, t) {
-        this.visitor = t, this.root = e, this.__worklist = [], this.__leavelist = [], this.__current = null, this.__state = null, this.__fallback = null, "iteration" === t.fallback ? this.__fallback = Object.keys : "function" == typeof t.fallback && (this.__fallback = t.fallback), this.__keys = s, t.keys && (this.__keys = Object.assign(Object.create(this.__keys), t.keys));
-      }, p.prototype.traverse = function (e, t) {
-        var r, n, s, i, l, u, p, d, x, m, y, g;
+      }, f.prototype.__initialize = function (e, t) {
+        this.visitor = t, this.root = e, this.__worklist = [], this.__leavelist = [], this.__current = null, this.__state = null, this.__fallback = null, "iteration" === t.fallback ? this.__fallback = Object.keys : "function" == typeof t.fallback && (this.__fallback = t.fallback), this.__keys = o, t.keys && (this.__keys = Object.assign(Object.create(this.__keys), t.keys));
+      }, f.prototype.traverse = function (e, t) {
+        var r, n, o, i, l, u, f, y, m, x, g, v;
 
-        for (this.__initialize(e, t), g = {}, r = this.__worklist, n = this.__leavelist, r.push(new c(e, null, null, null)), n.push(new c(null, null, null, null)); r.length;) if ((s = r.pop()) !== g) {
-          if (s.node) {
-            if (u = this.__execute(t.enter, s), this.__state === o || u === o) return;
-            if (r.push(g), n.push(s), this.__state === a || u === a) continue;
+        for (this.__initialize(e, t), v = {}, r = this.__worklist, n = this.__leavelist, r.push(new c(e, null, null, null)), n.push(new c(null, null, null, null)); r.length;) if ((o = r.pop()) !== v) {
+          if (o.node) {
+            if (u = this.__execute(t.enter, o), this.__state === a || u === a) return;
+            if (r.push(v), n.push(o), this.__state === s || u === s) continue;
 
-            if (l = (i = s.node).type || s.wrap, !(m = this.__keys[l])) {
+            if (l = (i = o.node).type || o.wrap, !(x = this.__keys[l])) {
               if (!this.__fallback) throw new Error("Unknown node type " + l + ".");
-              m = this.__fallback(i);
+              x = this.__fallback(i);
             }
 
-            for (d = m.length; (d -= 1) >= 0;) if (y = i[p = m[d]]) if (Array.isArray(y)) {
-              for (x = y.length; (x -= 1) >= 0;) if (y[x]) {
-                if (h(l, m[d])) s = new c(y[x], [p, x], "Property", null);else {
-                  if (!f(y[x])) continue;
-                  s = new c(y[x], [p, x], null, null);
+            for (y = x.length; (y -= 1) >= 0;) if (g = i[f = x[y]]) if (Array.isArray(g)) {
+              for (m = g.length; (m -= 1) >= 0;) if (g[m] && !d(n, g[m])) {
+                if (h(l, x[y])) o = new c(g[m], [f, m], "Property", null);else {
+                  if (!p(g[m])) continue;
+                  o = new c(g[m], [f, m], null, null);
                 }
-                r.push(s);
+                r.push(o);
               }
-            } else f(y) && r.push(new c(y, p, null, null));
+            } else if (p(g)) {
+              if (d(n, g)) continue;
+              r.push(new c(g, f, null, null));
+            }
           }
-        } else if (s = n.pop(), u = this.__execute(t.leave, s), this.__state === o || u === o) return;
-      }, p.prototype.replace = function (e, t) {
-        var r, n, s, l, p, d, x, m, y, g, v, A, E;
+        } else if (o = n.pop(), u = this.__execute(t.leave, o), this.__state === a || u === a) return;
+      }, f.prototype.replace = function (e, t) {
+        var r, n, o, l, f, d, y, m, x, g, v, A, b;
 
-        function _(e) {
-          var t, n, s, o;
-          if (e.ref.remove()) for (n = e.ref.key, o = e.ref.parent, t = r.length; t--;) if ((s = r[t]).ref && s.ref.parent === o) {
-            if (s.ref.key < n) break;
-            --s.ref.key;
+        function E(e) {
+          var t, n, o, a;
+          if (e.ref.remove()) for (n = e.ref.key, a = e.ref.parent, t = r.length; t--;) if ((o = r[t]).ref && o.ref.parent === a) {
+            if (o.ref.key < n) break;
+            --o.ref.key;
           }
         }
 
         for (this.__initialize(e, t), v = {}, r = this.__worklist, n = this.__leavelist, d = new c(e, null, null, new u(A = {
           root: e
         }, "root")), r.push(d), n.push(d); r.length;) if ((d = r.pop()) !== v) {
-          if (void 0 !== (p = this.__execute(t.enter, d)) && p !== o && p !== a && p !== i && (d.ref.replace(p), d.node = p), this.__state !== i && p !== i || (_(d), d.node = null), this.__state === o || p === o) return A.root;
+          if (void 0 !== (f = this.__execute(t.enter, d)) && f !== a && f !== s && f !== i && (d.ref.replace(f), d.node = f), this.__state !== i && f !== i || (E(d), d.node = null), this.__state === a || f === a) return A.root;
 
-          if ((s = d.node) && (r.push(v), n.push(d), this.__state !== a && p !== a)) {
-            if (l = s.type || d.wrap, !(y = this.__keys[l])) {
+          if ((o = d.node) && (r.push(v), n.push(d), this.__state !== s && f !== s)) {
+            if (l = o.type || d.wrap, !(x = this.__keys[l])) {
               if (!this.__fallback) throw new Error("Unknown node type " + l + ".");
-              y = this.__fallback(s);
+              x = this.__fallback(o);
             }
 
-            for (x = y.length; (x -= 1) >= 0;) if (g = s[E = y[x]]) if (Array.isArray(g)) {
+            for (y = x.length; (y -= 1) >= 0;) if (g = o[b = x[y]]) if (Array.isArray(g)) {
               for (m = g.length; (m -= 1) >= 0;) if (g[m]) {
-                if (h(l, y[x])) d = new c(g[m], [E, m], "Property", new u(g, m));else {
-                  if (!f(g[m])) continue;
-                  d = new c(g[m], [E, m], null, new u(g, m));
+                if (h(l, x[y])) d = new c(g[m], [b, m], "Property", new u(g, m));else {
+                  if (!p(g[m])) continue;
+                  d = new c(g[m], [b, m], null, new u(g, m));
                 }
                 r.push(d);
               }
-            } else f(g) && r.push(new c(g, E, null, new u(s, E)));
+            } else p(g) && r.push(new c(g, b, null, new u(o, b)));
           }
-        } else if (d = n.pop(), void 0 !== (p = this.__execute(t.leave, d)) && p !== o && p !== a && p !== i && d.ref.replace(p), this.__state !== i && p !== i || _(d), this.__state === o || p === o) return A.root;
+        } else if (d = n.pop(), void 0 !== (f = this.__execute(t.leave, d)) && f !== a && f !== s && f !== i && d.ref.replace(f), this.__state !== i && f !== i || E(d), this.__state === a || f === a) return A.root;
 
         return A.root;
-      }, t.Syntax = r, t.traverse = d, t.replace = function (e, t) {
-        return new p().replace(e, t);
+      }, t.Syntax = r, t.traverse = y, t.replace = function (e, t) {
+        return new f().replace(e, t);
       }, t.attachComments = function (e, t, r) {
-        var s,
-            o,
+        var o,
             a,
+            s,
             i,
             u = [];
         if (!e.range) throw new Error("attachComments needs range information");
 
         if (!r.length) {
           if (t.length) {
-            for (a = 0, o = t.length; a < o; a += 1) (s = l(t[a])).extendedRange = [0, e.range[0]], u.push(s);
+            for (s = 0, a = t.length; s < a; s += 1) (o = l(t[s])).extendedRange = [0, e.range[0]], u.push(o);
 
             e.leadingComments = u;
           }
@@ -124095,30 +124372,30 @@ module.exports = NodeEventGenerator;
           return e;
         }
 
-        for (a = 0, o = t.length; a < o; a += 1) u.push(x(l(t[a]), r));
+        for (s = 0, a = t.length; s < a; s += 1) u.push(m(l(t[s]), r));
 
-        return i = 0, d(e, {
+        return i = 0, y(e, {
           enter: function enter(e) {
             for (var t; i < u.length && !((t = u[i]).extendedRange[1] > e.range[0]);) t.extendedRange[1] === e.range[0] ? (e.leadingComments || (e.leadingComments = []), e.leadingComments.push(t), u.splice(i, 1)) : i += 1;
 
             return i === u.length ? n.Break : u[i].extendedRange[0] > e.range[1] ? n.Skip : void 0;
           }
-        }), i = 0, d(e, {
+        }), i = 0, y(e, {
           leave: function leave(e) {
             for (var t; i < u.length && (t = u[i], !(e.range[1] < t.extendedRange[0]));) e.range[1] === t.extendedRange[0] ? (e.trailingComments || (e.trailingComments = []), e.trailingComments.push(t), u.splice(i, 1)) : i += 1;
 
             return i === u.length ? n.Break : u[i].extendedRange[0] > e.range[1] ? n.Skip : void 0;
           }
         }), e;
-      }, t.VisitorKeys = s, t.VisitorOption = n, t.Controller = p, t.cloneEnvironment = function () {
+      }, t.VisitorKeys = o, t.VisitorOption = n, t.Controller = f, t.cloneEnvironment = function () {
         return e({});
       }, t;
     }(t);
   }),
-      r = e(function (e) {
+      i = a(function (e) {
     e.exports && (e.exports = function () {
-      function e(t, r, n, s) {
-        this.message = t, this.expected = r, this.found = n, this.location = s, this.name = "SyntaxError", "function" == typeof Error.captureStackTrace && Error.captureStackTrace(this, e);
+      function e(t, r, n, o) {
+        this.message = t, this.expected = r, this.found = n, this.location = o, this.name = "SyntaxError", "function" == typeof Error.captureStackTrace && Error.captureStackTrace(this, e);
       }
 
       return function (e, t) {
@@ -124130,13 +124407,13 @@ module.exports = NodeEventGenerator;
       }(e, Error), e.buildMessage = function (e, t) {
         var r = {
           literal: function literal(e) {
-            return '"' + s(e.text) + '"';
+            return '"' + o(e.text) + '"';
           },
           class: function _class(e) {
             var t,
                 r = "";
 
-            for (t = 0; t < e.parts.length; t++) r += e.parts[t] instanceof Array ? o(e.parts[t][0]) + "-" + o(e.parts[t][1]) : o(e.parts[t]);
+            for (t = 0; t < e.parts.length; t++) r += e.parts[t] instanceof Array ? a(e.parts[t][0]) + "-" + a(e.parts[t][1]) : a(e.parts[t]);
 
             return "[" + (e.inverted ? "^" : "") + r + "]";
           },
@@ -124155,7 +124432,7 @@ module.exports = NodeEventGenerator;
           return e.charCodeAt(0).toString(16).toUpperCase();
         }
 
-        function s(e) {
+        function o(e) {
           return e.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function (e) {
             return "\\x0" + n(e);
           }).replace(/[\x10-\x1F\x7F-\x9F]/g, function (e) {
@@ -124163,7 +124440,7 @@ module.exports = NodeEventGenerator;
           });
         }
 
-        function o(e) {
+        function a(e) {
           return e.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function (e) {
             return "\\x0" + n(e);
           }).replace(/[\x10-\x1F\x7F-\x9F]/g, function (e) {
@@ -124174,29 +124451,29 @@ module.exports = NodeEventGenerator;
         return "Expected " + function (e) {
           var t,
               n,
-              s,
-              o = new Array(e.length);
+              o,
+              a = new Array(e.length);
 
-          for (t = 0; t < e.length; t++) o[t] = (s = e[t], r[s.type](s));
+          for (t = 0; t < e.length; t++) a[t] = (o = e[t], r[o.type](o));
 
-          if (o.sort(), o.length > 0) {
-            for (t = 1, n = 1; t < o.length; t++) o[t - 1] !== o[t] && (o[n] = o[t], n++);
+          if (a.sort(), a.length > 0) {
+            for (t = 1, n = 1; t < a.length; t++) a[t - 1] !== a[t] && (a[n] = a[t], n++);
 
-            o.length = n;
+            a.length = n;
           }
 
-          switch (o.length) {
+          switch (a.length) {
             case 1:
-              return o[0];
+              return a[0];
 
             case 2:
-              return o[0] + " or " + o[1];
+              return a[0] + " or " + a[1];
 
             default:
-              return o.slice(0, -1).join(", ") + ", or " + o[o.length - 1];
+              return a.slice(0, -1).join(", ") + ", or " + a[a.length - 1];
           }
         }(e) + " but " + function (e) {
-          return e ? '"' + s(e) + '"' : "end of input";
+          return e ? '"' + o(e) + '"' : "end of input";
         }(t) + " found.";
       }, {
         SyntaxError: e,
@@ -124204,37 +124481,37 @@ module.exports = NodeEventGenerator;
           r = void 0 !== r ? r : {};
 
           var n,
-              s,
               o,
               a,
+              s,
               i = {},
               l = {
-            start: Ee
+            start: be
           },
-              u = Ee,
+              u = be,
               c = me(" ", !1),
-              p = /^[^ [\],():#!=><~+.]/,
-              f = ye([" ", "[", "]", ",", "(", ")", ":", "#", "!", "=", ">", "<", "~", "+", "."], !0, !1),
+              f = /^[^ [\],():#!=><~+.]/,
+              p = xe([" ", "[", "]", ",", "(", ")", ":", "#", "!", "=", ">", "<", "~", "+", "."], !0, !1),
               h = function h(e) {
             return e.join("");
           },
               d = me(">", !1),
-              x = me("~", !1),
+              y = me("~", !1),
               m = me("+", !1),
-              y = me(",", !1),
+              x = me(",", !1),
               g = me("!", !1),
               v = me("*", !1),
               A = me("#", !1),
-              E = me("[", !1),
-              _ = me("]", !1),
-              b = /^[><!]/,
-              S = ye([">", "<", "!"], !1, !1),
-              C = me("=", !1),
-              w = function w(e) {
+              b = me("[", !1),
+              E = me("]", !1),
+              S = /^[><!]/,
+              _ = xe([">", "<", "!"], !1, !1),
+              w = me("=", !1),
+              C = function C(e) {
             return (e || "") + "=";
           },
               P = /^[><]/,
-              k = ye([">", "<"], !1, !1),
+              k = xe([">", "<"], !1, !1),
               D = me(".", !1),
               I = function I(e, t, r) {
             return {
@@ -124246,7 +124523,7 @@ module.exports = NodeEventGenerator;
           },
               j = me('"', !1),
               F = /^[^\\"]/,
-              T = ye(["\\", '"'], !0, !1),
+              T = xe(["\\", '"'], !0, !1),
               L = me("\\", !1),
               R = {
             type: "any"
@@ -124286,39 +124563,39 @@ module.exports = NodeEventGenerator;
           },
               M = me("'", !1),
               U = /^[^\\']/,
-              V = ye(["\\", "'"], !0, !1),
+              V = xe(["\\", "'"], !0, !1),
               q = /^[0-9]/,
-              N = ye([["0", "9"]], !1, !1),
+              N = xe([["0", "9"]], !1, !1),
               W = me("type(", !1),
-              $ = /^[^ )]/,
-              G = ye([" ", ")"], !0, !1),
-              z = me(")", !1),
-              K = /^[imsu]/,
-              H = ye(["i", "m", "s", "u"], !1, !1),
-              Y = me("/", !1),
+              G = /^[^ )]/,
+              z = xe([" ", ")"], !0, !1),
+              K = me(")", !1),
+              H = /^[imsu]/,
+              Y = xe(["i", "m", "s", "u"], !1, !1),
+              $ = me("/", !1),
               J = /^[^\/]/,
-              Q = ye(["/"], !0, !1),
+              Q = xe(["/"], !0, !1),
               X = me(":not(", !1),
               Z = me(":matches(", !1),
               ee = me(":has(", !1),
               te = me(":first-child", !1),
               re = me(":last-child", !1),
               ne = me(":nth-child(", !1),
-              se = me(":nth-last-child(", !1),
-              oe = me(":", !1),
-              ae = me("statement", !0),
+              oe = me(":nth-last-child(", !1),
+              ae = me(":", !1),
+              se = me("statement", !0),
               ie = me("expression", !0),
               le = me("declaration", !0),
               ue = me("function", !0),
               ce = me("pattern", !0),
-              pe = 0,
-              fe = [{
+              fe = 0,
+              pe = [{
             line: 1,
             column: 1
           }],
               he = 0,
               de = [],
-              xe = {};
+              ye = {};
 
           if ("startRule" in r) {
             if (!(r.startRule in l)) throw new Error("Can't start parsing from rule \"" + r.startRule + '".');
@@ -124333,7 +124610,7 @@ module.exports = NodeEventGenerator;
             };
           }
 
-          function ye(e, t, r) {
+          function xe(e, t, r) {
             return {
               type: "class",
               parts: e,
@@ -124344,17 +124621,17 @@ module.exports = NodeEventGenerator;
 
           function ge(e) {
             var r,
-                n = fe[e];
+                n = pe[e];
             if (n) return n;
 
-            for (r = e - 1; !fe[r];) r--;
+            for (r = e - 1; !pe[r];) r--;
 
             for (n = {
-              line: (n = fe[r]).line,
+              line: (n = pe[r]).line,
               column: n.column
             }; r < e;) 10 === t.charCodeAt(r) ? (n.line++, n.column = 1) : n.column++, r++;
 
-            return fe[e] = n, n;
+            return pe[e] = n, n;
           }
 
           function ve(e, t) {
@@ -124375,119 +124652,119 @@ module.exports = NodeEventGenerator;
           }
 
           function Ae(e) {
-            pe < he || (pe > he && (he = pe, de = []), de.push(e));
+            fe < he || (fe > he && (he = fe, de = []), de.push(e));
           }
 
-          function Ee() {
+          function be() {
             var e,
                 t,
                 r,
                 n,
-                s = 30 * pe + 0,
-                o = xe[s];
-            return o ? (pe = o.nextPos, o.result) : (e = pe, (t = _e()) !== i && (r = Ce()) !== i && _e() !== i ? e = t = 1 === (n = r).length ? n[0] : {
+                o = 30 * fe + 0,
+                a = ye[o];
+            return a ? (fe = a.nextPos, a.result) : (e = fe, (t = Ee()) !== i && (r = we()) !== i && Ee() !== i ? e = t = 1 === (n = r).length ? n[0] : {
               type: "matches",
               selectors: n
-            } : (pe = e, e = i), e === i && (e = pe, (t = _e()) !== i && (t = void 0), e = t), xe[s] = {
-              nextPos: pe,
+            } : (fe = e, e = i), e === i && (e = fe, (t = Ee()) !== i && (t = void 0), e = t), ye[o] = {
+              nextPos: fe,
               result: e
             }, e);
           }
 
-          function _e() {
+          function Ee() {
             var e,
                 r,
-                n = 30 * pe + 1,
-                s = xe[n];
-            if (s) return pe = s.nextPos, s.result;
+                n = 30 * fe + 1,
+                o = ye[n];
+            if (o) return fe = o.nextPos, o.result;
 
-            for (e = [], 32 === t.charCodeAt(pe) ? (r = " ", pe++) : (r = i, Ae(c)); r !== i;) e.push(r), 32 === t.charCodeAt(pe) ? (r = " ", pe++) : (r = i, Ae(c));
+            for (e = [], 32 === t.charCodeAt(fe) ? (r = " ", fe++) : (r = i, Ae(c)); r !== i;) e.push(r), 32 === t.charCodeAt(fe) ? (r = " ", fe++) : (r = i, Ae(c));
 
-            return xe[n] = {
-              nextPos: pe,
+            return ye[n] = {
+              nextPos: fe,
               result: e
             }, e;
           }
 
-          function be() {
+          function Se() {
             var e,
                 r,
                 n,
-                s = 30 * pe + 2,
-                o = xe[s];
-            if (o) return pe = o.nextPos, o.result;
-            if (r = [], p.test(t.charAt(pe)) ? (n = t.charAt(pe), pe++) : (n = i, Ae(f)), n !== i) for (; n !== i;) r.push(n), p.test(t.charAt(pe)) ? (n = t.charAt(pe), pe++) : (n = i, Ae(f));else r = i;
-            return r !== i && (r = h(r)), e = r, xe[s] = {
-              nextPos: pe,
+                o = 30 * fe + 2,
+                a = ye[o];
+            if (a) return fe = a.nextPos, a.result;
+            if (r = [], f.test(t.charAt(fe)) ? (n = t.charAt(fe), fe++) : (n = i, Ae(p)), n !== i) for (; n !== i;) r.push(n), f.test(t.charAt(fe)) ? (n = t.charAt(fe), fe++) : (n = i, Ae(p));else r = i;
+            return r !== i && (r = h(r)), e = r, ye[o] = {
+              nextPos: fe,
               result: e
             }, e;
           }
 
-          function Se() {
+          function _e() {
             var e,
                 r,
                 n,
-                s = 30 * pe + 3,
-                o = xe[s];
-            return o ? (pe = o.nextPos, o.result) : (e = pe, (r = _e()) !== i ? (62 === t.charCodeAt(pe) ? (n = ">", pe++) : (n = i, Ae(d)), n !== i && _e() !== i ? e = r = "child" : (pe = e, e = i)) : (pe = e, e = i), e === i && (e = pe, (r = _e()) !== i ? (126 === t.charCodeAt(pe) ? (n = "~", pe++) : (n = i, Ae(x)), n !== i && _e() !== i ? e = r = "sibling" : (pe = e, e = i)) : (pe = e, e = i), e === i && (e = pe, (r = _e()) !== i ? (43 === t.charCodeAt(pe) ? (n = "+", pe++) : (n = i, Ae(m)), n !== i && _e() !== i ? e = r = "adjacent" : (pe = e, e = i)) : (pe = e, e = i), e === i && (e = pe, 32 === t.charCodeAt(pe) ? (r = " ", pe++) : (r = i, Ae(c)), r !== i && (n = _e()) !== i ? e = r = "descendant" : (pe = e, e = i)))), xe[s] = {
-              nextPos: pe,
+                o = 30 * fe + 3,
+                a = ye[o];
+            return a ? (fe = a.nextPos, a.result) : (e = fe, (r = Ee()) !== i ? (62 === t.charCodeAt(fe) ? (n = ">", fe++) : (n = i, Ae(d)), n !== i && Ee() !== i ? e = r = "child" : (fe = e, e = i)) : (fe = e, e = i), e === i && (e = fe, (r = Ee()) !== i ? (126 === t.charCodeAt(fe) ? (n = "~", fe++) : (n = i, Ae(y)), n !== i && Ee() !== i ? e = r = "sibling" : (fe = e, e = i)) : (fe = e, e = i), e === i && (e = fe, (r = Ee()) !== i ? (43 === t.charCodeAt(fe) ? (n = "+", fe++) : (n = i, Ae(m)), n !== i && Ee() !== i ? e = r = "adjacent" : (fe = e, e = i)) : (fe = e, e = i), e === i && (e = fe, 32 === t.charCodeAt(fe) ? (r = " ", fe++) : (r = i, Ae(c)), r !== i && (n = Ee()) !== i ? e = r = "descendant" : (fe = e, e = i)))), ye[o] = {
+              nextPos: fe,
               result: e
             }, e);
           }
 
-          function Ce() {
+          function we() {
             var e,
                 r,
                 n,
-                s,
                 o,
                 a,
+                s,
                 l,
                 u,
-                c = 30 * pe + 4,
-                p = xe[c];
-            if (p) return pe = p.nextPos, p.result;
+                c = 30 * fe + 4,
+                f = ye[c];
+            if (f) return fe = f.nextPos, f.result;
 
-            if (e = pe, (r = we()) !== i) {
-              for (n = [], s = pe, (o = _e()) !== i ? (44 === t.charCodeAt(pe) ? (a = ",", pe++) : (a = i, Ae(y)), a !== i && (l = _e()) !== i && (u = we()) !== i ? s = o = [o, a, l, u] : (pe = s, s = i)) : (pe = s, s = i); s !== i;) n.push(s), s = pe, (o = _e()) !== i ? (44 === t.charCodeAt(pe) ? (a = ",", pe++) : (a = i, Ae(y)), a !== i && (l = _e()) !== i && (u = we()) !== i ? s = o = [o, a, l, u] : (pe = s, s = i)) : (pe = s, s = i);
+            if (e = fe, (r = Ce()) !== i) {
+              for (n = [], o = fe, (a = Ee()) !== i ? (44 === t.charCodeAt(fe) ? (s = ",", fe++) : (s = i, Ae(x)), s !== i && (l = Ee()) !== i && (u = Ce()) !== i ? o = a = [a, s, l, u] : (fe = o, o = i)) : (fe = o, o = i); o !== i;) n.push(o), o = fe, (a = Ee()) !== i ? (44 === t.charCodeAt(fe) ? (s = ",", fe++) : (s = i, Ae(x)), s !== i && (l = Ee()) !== i && (u = Ce()) !== i ? o = a = [a, s, l, u] : (fe = o, o = i)) : (fe = o, o = i);
 
               n !== i ? e = r = [r].concat(n.map(function (e) {
                 return e[3];
-              })) : (pe = e, e = i);
-            } else pe = e, e = i;
+              })) : (fe = e, e = i);
+            } else fe = e, e = i;
 
-            return xe[c] = {
-              nextPos: pe,
+            return ye[c] = {
+              nextPos: fe,
               result: e
             }, e;
           }
 
-          function we() {
+          function Ce() {
             var e,
                 t,
                 r,
                 n,
-                s,
                 o,
                 a,
-                l = 30 * pe + 5,
-                u = xe[l];
-            if (u) return pe = u.nextPos, u.result;
+                s,
+                l = 30 * fe + 5,
+                u = ye[l];
+            if (u) return fe = u.nextPos, u.result;
 
-            if (e = pe, (t = Pe()) !== i) {
-              for (r = [], n = pe, (s = Se()) !== i && (o = Pe()) !== i ? n = s = [s, o] : (pe = n, n = i); n !== i;) r.push(n), n = pe, (s = Se()) !== i && (o = Pe()) !== i ? n = s = [s, o] : (pe = n, n = i);
+            if (e = fe, (t = Pe()) !== i) {
+              for (r = [], n = fe, (o = _e()) !== i && (a = Pe()) !== i ? n = o = [o, a] : (fe = n, n = i); n !== i;) r.push(n), n = fe, (o = _e()) !== i && (a = Pe()) !== i ? n = o = [o, a] : (fe = n, n = i);
 
-              r !== i ? (a = t, e = t = r.reduce(function (e, t) {
+              r !== i ? (s = t, e = t = r.reduce(function (e, t) {
                 return {
                   type: t[0],
                   left: e,
                   right: t[1]
                 };
-              }, a)) : (pe = e, e = i);
-            } else pe = e, e = i;
+              }, s)) : (fe = e, e = i);
+            } else fe = e, e = i;
 
-            return xe[l] = {
-              nextPos: pe,
+            return ye[l] = {
+              nextPos: fe,
               result: e
             }, e;
           }
@@ -124496,363 +124773,363 @@ module.exports = NodeEventGenerator;
             var e,
                 r,
                 n,
+                o,
+                a,
                 s,
-                o = 30 * pe + 6,
-                a = xe[o];
-            if (a) return pe = a.nextPos, a.result;
-
-            if (e = pe, 33 === t.charCodeAt(pe) ? (r = "!", pe++) : (r = i, Ae(g)), r === i && (r = null), r !== i) {
-              if (n = [], (s = ke()) !== i) for (; s !== i;) n.push(s), s = ke();else n = i;
-              n !== i ? e = r = function (e, t) {
-                const r = 1 === t.length ? t[0] : {
-                  type: "compound",
-                  selectors: t
-                };
-                return e && (r.subject = !0), r;
-              }(r, n) : (pe = e, e = i);
-            } else pe = e, e = i;
-
-            return xe[o] = {
-              nextPos: pe,
+                l,
+                u = 30 * fe + 6,
+                c = ye[u];
+            if (c) return fe = c.nextPos, c.result;
+
+            if (e = fe, 33 === t.charCodeAt(fe) ? (r = "!", fe++) : (r = i, Ae(g)), r === i && (r = null), r !== i) {
+              if (n = [], (o = ke()) !== i) for (; o !== i;) n.push(o), o = ke();else n = i;
+              n !== i ? (a = r, l = 1 === (s = n).length ? s[0] : {
+                type: "compound",
+                selectors: s
+              }, a && (l.subject = !0), e = r = l) : (fe = e, e = i);
+            } else fe = e, e = i;
+
+            return ye[u] = {
+              nextPos: fe,
               result: e
             }, e;
           }
 
           function ke() {
             var e,
-                r = 30 * pe + 7,
-                n = xe[r];
-            return n ? (pe = n.nextPos, n.result) : ((e = function () {
+                r = 30 * fe + 7,
+                n = ye[r];
+            return n ? (fe = n.nextPos, n.result) : ((e = function () {
               var e,
                   r,
-                  n = 30 * pe + 8,
-                  s = xe[n];
-              return s ? (pe = s.nextPos, s.result) : (42 === t.charCodeAt(pe) ? (r = "*", pe++) : (r = i, Ae(v)), r !== i && (r = {
+                  n = 30 * fe + 8,
+                  o = ye[n];
+              return o ? (fe = o.nextPos, o.result) : (42 === t.charCodeAt(fe) ? (r = "*", fe++) : (r = i, Ae(v)), r !== i && (r = {
                 type: "wildcard",
                 value: r
-              }), e = r, xe[n] = {
-                nextPos: pe,
+              }), e = r, ye[n] = {
+                nextPos: fe,
                 result: e
               }, e);
             }()) === i && (e = function () {
               var e,
                   r,
                   n,
-                  s = 30 * pe + 9,
-                  o = xe[s];
-              return o ? (pe = o.nextPos, o.result) : (e = pe, 35 === t.charCodeAt(pe) ? (r = "#", pe++) : (r = i, Ae(A)), r === i && (r = null), r !== i && (n = be()) !== i ? e = r = {
+                  o = 30 * fe + 9,
+                  a = ye[o];
+              return a ? (fe = a.nextPos, a.result) : (e = fe, 35 === t.charCodeAt(fe) ? (r = "#", fe++) : (r = i, Ae(A)), r === i && (r = null), r !== i && (n = Se()) !== i ? e = r = {
                 type: "identifier",
                 value: n
-              } : (pe = e, e = i), xe[s] = {
-                nextPos: pe,
+              } : (fe = e, e = i), ye[o] = {
+                nextPos: fe,
                 result: e
               }, e);
             }()) === i && (e = function () {
               var e,
                   r,
                   n,
-                  s,
-                  o = 30 * pe + 10,
-                  a = xe[o];
-              return a ? (pe = a.nextPos, a.result) : (e = pe, 91 === t.charCodeAt(pe) ? (r = "[", pe++) : (r = i, Ae(E)), r !== i && _e() !== i && (n = function () {
+                  o,
+                  a = 30 * fe + 10,
+                  s = ye[a];
+              return s ? (fe = s.nextPos, s.result) : (e = fe, 91 === t.charCodeAt(fe) ? (r = "[", fe++) : (r = i, Ae(b)), r !== i && Ee() !== i && (n = function () {
                 var e,
                     r,
                     n,
-                    s,
-                    o = 30 * pe + 14,
-                    a = xe[o];
-                return a ? (pe = a.nextPos, a.result) : (e = pe, (r = De()) !== i && _e() !== i && (n = function () {
+                    o,
+                    a = 30 * fe + 14,
+                    s = ye[a];
+                return s ? (fe = s.nextPos, s.result) : (e = fe, (r = De()) !== i && Ee() !== i && (n = function () {
                   var e,
                       r,
                       n,
-                      s = 30 * pe + 12,
-                      o = xe[s];
-                  return o ? (pe = o.nextPos, o.result) : (e = pe, 33 === t.charCodeAt(pe) ? (r = "!", pe++) : (r = i, Ae(g)), r === i && (r = null), r !== i ? (61 === t.charCodeAt(pe) ? (n = "=", pe++) : (n = i, Ae(C)), n !== i ? (r = w(r), e = r) : (pe = e, e = i)) : (pe = e, e = i), xe[s] = {
-                    nextPos: pe,
+                      o = 30 * fe + 12,
+                      a = ye[o];
+                  return a ? (fe = a.nextPos, a.result) : (e = fe, 33 === t.charCodeAt(fe) ? (r = "!", fe++) : (r = i, Ae(g)), r === i && (r = null), r !== i ? (61 === t.charCodeAt(fe) ? (n = "=", fe++) : (n = i, Ae(w)), n !== i ? (r = C(r), e = r) : (fe = e, e = i)) : (fe = e, e = i), ye[o] = {
+                    nextPos: fe,
                     result: e
                   }, e);
-                }()) !== i && _e() !== i ? ((s = function () {
+                }()) !== i && Ee() !== i ? ((o = function () {
                   var e,
                       r,
                       n,
-                      s,
                       o,
-                      a = 30 * pe + 18,
-                      l = xe[a];
-                  if (l) return pe = l.nextPos, l.result;
-                  if (e = pe, "type(" === t.substr(pe, 5) ? (r = "type(", pe += 5) : (r = i, Ae(W)), r !== i) {
-                    if (_e() !== i) {
-                      if (n = [], $.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(G)), s !== i) for (; s !== i;) n.push(s), $.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(G));else n = i;
-                      n !== i && (s = _e()) !== i ? (41 === t.charCodeAt(pe) ? (o = ")", pe++) : (o = i, Ae(z)), o !== i ? (r = {
+                      a,
+                      s = 30 * fe + 18,
+                      l = ye[s];
+                  if (l) return fe = l.nextPos, l.result;
+                  if (e = fe, "type(" === t.substr(fe, 5) ? (r = "type(", fe += 5) : (r = i, Ae(W)), r !== i) {
+                    if (Ee() !== i) {
+                      if (n = [], G.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(z)), o !== i) for (; o !== i;) n.push(o), G.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(z));else n = i;
+                      n !== i && (o = Ee()) !== i ? (41 === t.charCodeAt(fe) ? (a = ")", fe++) : (a = i, Ae(K)), a !== i ? (r = {
                         type: "type",
                         value: n.join("")
-                      }, e = r) : (pe = e, e = i)) : (pe = e, e = i);
-                    } else pe = e, e = i;
-                  } else pe = e, e = i;
-                  return xe[a] = {
-                    nextPos: pe,
+                      }, e = r) : (fe = e, e = i)) : (fe = e, e = i);
+                    } else fe = e, e = i;
+                  } else fe = e, e = i;
+                  return ye[s] = {
+                    nextPos: fe,
                     result: e
                   }, e;
-                }()) === i && (s = function () {
+                }()) === i && (o = function () {
                   var e,
                       r,
                       n,
-                      s,
                       o,
                       a,
-                      l = 30 * pe + 20,
-                      u = xe[l];
-                  if (u) return pe = u.nextPos, u.result;
+                      s,
+                      l = 30 * fe + 20,
+                      u = ye[l];
+                  if (u) return fe = u.nextPos, u.result;
 
-                  if (e = pe, 47 === t.charCodeAt(pe) ? (r = "/", pe++) : (r = i, Ae(Y)), r !== i) {
-                    if (n = [], J.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(Q)), s !== i) for (; s !== i;) n.push(s), J.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(Q));else n = i;
-                    n !== i ? (47 === t.charCodeAt(pe) ? (s = "/", pe++) : (s = i, Ae(Y)), s !== i ? ((o = function () {
+                  if (e = fe, 47 === t.charCodeAt(fe) ? (r = "/", fe++) : (r = i, Ae($)), r !== i) {
+                    if (n = [], J.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(Q)), o !== i) for (; o !== i;) n.push(o), J.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(Q));else n = i;
+                    n !== i ? (47 === t.charCodeAt(fe) ? (o = "/", fe++) : (o = i, Ae($)), o !== i ? ((a = function () {
                       var e,
                           r,
-                          n = 30 * pe + 19,
-                          s = xe[n];
-                      if (s) return pe = s.nextPos, s.result;
-                      if (e = [], K.test(t.charAt(pe)) ? (r = t.charAt(pe), pe++) : (r = i, Ae(H)), r !== i) for (; r !== i;) e.push(r), K.test(t.charAt(pe)) ? (r = t.charAt(pe), pe++) : (r = i, Ae(H));else e = i;
-                      return xe[n] = {
-                        nextPos: pe,
+                          n = 30 * fe + 19,
+                          o = ye[n];
+                      if (o) return fe = o.nextPos, o.result;
+                      if (e = [], H.test(t.charAt(fe)) ? (r = t.charAt(fe), fe++) : (r = i, Ae(Y)), r !== i) for (; r !== i;) e.push(r), H.test(t.charAt(fe)) ? (r = t.charAt(fe), fe++) : (r = i, Ae(Y));else e = i;
+                      return ye[n] = {
+                        nextPos: fe,
                         result: e
                       }, e;
-                    }()) === i && (o = null), o !== i ? (a = o, r = {
+                    }()) === i && (a = null), a !== i ? (s = a, r = {
                       type: "regexp",
-                      value: new RegExp(n.join(""), a ? a.join("") : "")
-                    }, e = r) : (pe = e, e = i)) : (pe = e, e = i)) : (pe = e, e = i);
-                  } else pe = e, e = i;
+                      value: new RegExp(n.join(""), s ? s.join("") : "")
+                    }, e = r) : (fe = e, e = i)) : (fe = e, e = i)) : (fe = e, e = i);
+                  } else fe = e, e = i;
 
-                  return xe[l] = {
-                    nextPos: pe,
+                  return ye[l] = {
+                    nextPos: fe,
                     result: e
                   }, e;
-                }()), s !== i ? (r = I(r, n, s), e = r) : (pe = e, e = i)) : (pe = e, e = i), e === i && (e = pe, (r = De()) !== i && _e() !== i && (n = function () {
+                }()), o !== i ? (r = I(r, n, o), e = r) : (fe = e, e = i)) : (fe = e, e = i), e === i && (e = fe, (r = De()) !== i && Ee() !== i && (n = function () {
                   var e,
                       r,
                       n,
-                      s = 30 * pe + 11,
-                      o = xe[s];
-                  return o ? (pe = o.nextPos, o.result) : (e = pe, b.test(t.charAt(pe)) ? (r = t.charAt(pe), pe++) : (r = i, Ae(S)), r === i && (r = null), r !== i ? (61 === t.charCodeAt(pe) ? (n = "=", pe++) : (n = i, Ae(C)), n !== i ? (r = w(r), e = r) : (pe = e, e = i)) : (pe = e, e = i), e === i && (P.test(t.charAt(pe)) ? (e = t.charAt(pe), pe++) : (e = i, Ae(k))), xe[s] = {
-                    nextPos: pe,
+                      o = 30 * fe + 11,
+                      a = ye[o];
+                  return a ? (fe = a.nextPos, a.result) : (e = fe, S.test(t.charAt(fe)) ? (r = t.charAt(fe), fe++) : (r = i, Ae(_)), r === i && (r = null), r !== i ? (61 === t.charCodeAt(fe) ? (n = "=", fe++) : (n = i, Ae(w)), n !== i ? (r = C(r), e = r) : (fe = e, e = i)) : (fe = e, e = i), e === i && (P.test(t.charAt(fe)) ? (e = t.charAt(fe), fe++) : (e = i, Ae(k))), ye[o] = {
+                    nextPos: fe,
                     result: e
                   }, e);
-                }()) !== i && _e() !== i ? ((s = function () {
+                }()) !== i && Ee() !== i ? ((o = function () {
                   var e,
                       r,
                       n,
-                      s,
                       o,
                       a,
-                      l = 30 * pe + 15,
-                      u = xe[l];
-                  if (u) return pe = u.nextPos, u.result;
+                      s,
+                      l = 30 * fe + 15,
+                      u = ye[l];
+                  if (u) return fe = u.nextPos, u.result;
 
-                  if (e = pe, 34 === t.charCodeAt(pe) ? (r = '"', pe++) : (r = i, Ae(j)), r !== i) {
-                    for (n = [], F.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(T)), s === i && (s = pe, 92 === t.charCodeAt(pe) ? (o = "\\", pe++) : (o = i, Ae(L)), o !== i ? (t.length > pe ? (a = t.charAt(pe), pe++) : (a = i, Ae(R)), a !== i ? (o = O(o, a), s = o) : (pe = s, s = i)) : (pe = s, s = i)); s !== i;) n.push(s), F.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(T)), s === i && (s = pe, 92 === t.charCodeAt(pe) ? (o = "\\", pe++) : (o = i, Ae(L)), o !== i ? (t.length > pe ? (a = t.charAt(pe), pe++) : (a = i, Ae(R)), a !== i ? (o = O(o, a), s = o) : (pe = s, s = i)) : (pe = s, s = i));
+                  if (e = fe, 34 === t.charCodeAt(fe) ? (r = '"', fe++) : (r = i, Ae(j)), r !== i) {
+                    for (n = [], F.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(T)), o === i && (o = fe, 92 === t.charCodeAt(fe) ? (a = "\\", fe++) : (a = i, Ae(L)), a !== i ? (t.length > fe ? (s = t.charAt(fe), fe++) : (s = i, Ae(R)), s !== i ? (a = O(a, s), o = a) : (fe = o, o = i)) : (fe = o, o = i)); o !== i;) n.push(o), F.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(T)), o === i && (o = fe, 92 === t.charCodeAt(fe) ? (a = "\\", fe++) : (a = i, Ae(L)), a !== i ? (t.length > fe ? (s = t.charAt(fe), fe++) : (s = i, Ae(R)), s !== i ? (a = O(a, s), o = a) : (fe = o, o = i)) : (fe = o, o = i));
 
-                    n !== i ? (34 === t.charCodeAt(pe) ? (s = '"', pe++) : (s = i, Ae(j)), s !== i ? (r = B(n), e = r) : (pe = e, e = i)) : (pe = e, e = i);
-                  } else pe = e, e = i;
+                    n !== i ? (34 === t.charCodeAt(fe) ? (o = '"', fe++) : (o = i, Ae(j)), o !== i ? (r = B(n), e = r) : (fe = e, e = i)) : (fe = e, e = i);
+                  } else fe = e, e = i;
 
-                  if (e === i) if (e = pe, 39 === t.charCodeAt(pe) ? (r = "'", pe++) : (r = i, Ae(M)), r !== i) {
-                    for (n = [], U.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(V)), s === i && (s = pe, 92 === t.charCodeAt(pe) ? (o = "\\", pe++) : (o = i, Ae(L)), o !== i ? (t.length > pe ? (a = t.charAt(pe), pe++) : (a = i, Ae(R)), a !== i ? (o = O(o, a), s = o) : (pe = s, s = i)) : (pe = s, s = i)); s !== i;) n.push(s), U.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(V)), s === i && (s = pe, 92 === t.charCodeAt(pe) ? (o = "\\", pe++) : (o = i, Ae(L)), o !== i ? (t.length > pe ? (a = t.charAt(pe), pe++) : (a = i, Ae(R)), a !== i ? (o = O(o, a), s = o) : (pe = s, s = i)) : (pe = s, s = i));
+                  if (e === i) if (e = fe, 39 === t.charCodeAt(fe) ? (r = "'", fe++) : (r = i, Ae(M)), r !== i) {
+                    for (n = [], U.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(V)), o === i && (o = fe, 92 === t.charCodeAt(fe) ? (a = "\\", fe++) : (a = i, Ae(L)), a !== i ? (t.length > fe ? (s = t.charAt(fe), fe++) : (s = i, Ae(R)), s !== i ? (a = O(a, s), o = a) : (fe = o, o = i)) : (fe = o, o = i)); o !== i;) n.push(o), U.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(V)), o === i && (o = fe, 92 === t.charCodeAt(fe) ? (a = "\\", fe++) : (a = i, Ae(L)), a !== i ? (t.length > fe ? (s = t.charAt(fe), fe++) : (s = i, Ae(R)), s !== i ? (a = O(a, s), o = a) : (fe = o, o = i)) : (fe = o, o = i));
 
-                    n !== i ? (39 === t.charCodeAt(pe) ? (s = "'", pe++) : (s = i, Ae(M)), s !== i ? (r = B(n), e = r) : (pe = e, e = i)) : (pe = e, e = i);
-                  } else pe = e, e = i;
-                  return xe[l] = {
-                    nextPos: pe,
+                    n !== i ? (39 === t.charCodeAt(fe) ? (o = "'", fe++) : (o = i, Ae(M)), o !== i ? (r = B(n), e = r) : (fe = e, e = i)) : (fe = e, e = i);
+                  } else fe = e, e = i;
+                  return ye[l] = {
+                    nextPos: fe,
                     result: e
                   }, e;
-                }()) === i && (s = function () {
+                }()) === i && (o = function () {
                   var e,
                       r,
                       n,
+                      o,
+                      a,
                       s,
-                      o = 30 * pe + 16,
-                      a = xe[o];
-                  if (a) return pe = a.nextPos, a.result;
-
-                  for (e = pe, r = pe, n = [], q.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(N)); s !== i;) n.push(s), q.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(N));
-
-                  if (n !== i ? (46 === t.charCodeAt(pe) ? (s = ".", pe++) : (s = i, Ae(D)), s !== i ? r = n = [n, s] : (pe = r, r = i)) : (pe = r, r = i), r === i && (r = null), r !== i) {
-                    if (n = [], q.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(N)), s !== i) for (; s !== i;) n.push(s), q.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(N));else n = i;
-                    n !== i ? (r = function (e, t) {
-                      const r = e ? [].concat.apply([], e).join("") : "";
-                      return {
-                        type: "literal",
-                        value: parseFloat(r + t.join(""))
-                      };
-                    }(r, n), e = r) : (pe = e, e = i);
-                  } else pe = e, e = i;
-
-                  return xe[o] = {
-                    nextPos: pe,
+                      l,
+                      u = 30 * fe + 16,
+                      c = ye[u];
+                  if (c) return fe = c.nextPos, c.result;
+
+                  for (e = fe, r = fe, n = [], q.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(N)); o !== i;) n.push(o), q.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(N));
+
+                  if (n !== i ? (46 === t.charCodeAt(fe) ? (o = ".", fe++) : (o = i, Ae(D)), o !== i ? r = n = [n, o] : (fe = r, r = i)) : (fe = r, r = i), r === i && (r = null), r !== i) {
+                    if (n = [], q.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(N)), o !== i) for (; o !== i;) n.push(o), q.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(N));else n = i;
+                    n !== i ? (s = n, l = (a = r) ? [].concat.apply([], a).join("") : "", r = {
+                      type: "literal",
+                      value: parseFloat(l + s.join(""))
+                    }, e = r) : (fe = e, e = i);
+                  } else fe = e, e = i;
+
+                  return ye[u] = {
+                    nextPos: fe,
                     result: e
                   }, e;
-                }()) === i && (s = function () {
+                }()) === i && (o = function () {
                   var e,
                       t,
-                      r = 30 * pe + 17,
-                      n = xe[r];
-                  return n ? (pe = n.nextPos, n.result) : ((t = be()) !== i && (t = {
+                      r = 30 * fe + 17,
+                      n = ye[r];
+                  return n ? (fe = n.nextPos, n.result) : ((t = Se()) !== i && (t = {
                     type: "literal",
                     value: t
-                  }), e = t, xe[r] = {
-                    nextPos: pe,
+                  }), e = t, ye[r] = {
+                    nextPos: fe,
                     result: e
                   }, e);
-                }()), s !== i ? (r = I(r, n, s), e = r) : (pe = e, e = i)) : (pe = e, e = i), e === i && (e = pe, (r = De()) !== i && (r = {
+                }()), o !== i ? (r = I(r, n, o), e = r) : (fe = e, e = i)) : (fe = e, e = i), e === i && (e = fe, (r = De()) !== i && (r = {
                   type: "attribute",
                   name: r
-                }), e = r)), xe[o] = {
-                  nextPos: pe,
+                }), e = r)), ye[a] = {
+                  nextPos: fe,
                   result: e
                 }, e);
-              }()) !== i && _e() !== i ? (93 === t.charCodeAt(pe) ? (s = "]", pe++) : (s = i, Ae(_)), s !== i ? e = r = n : (pe = e, e = i)) : (pe = e, e = i), xe[o] = {
-                nextPos: pe,
+              }()) !== i && Ee() !== i ? (93 === t.charCodeAt(fe) ? (o = "]", fe++) : (o = i, Ae(E)), o !== i ? e = r = n : (fe = e, e = i)) : (fe = e, e = i), ye[a] = {
+                nextPos: fe,
                 result: e
               }, e);
             }()) === i && (e = function () {
               var e,
                   r,
                   n,
-                  s,
                   o,
                   a,
+                  s,
                   l,
                   u,
-                  c = 30 * pe + 21,
-                  p = xe[c];
-              if (p) return pe = p.nextPos, p.result;
-              if (e = pe, 46 === t.charCodeAt(pe) ? (r = ".", pe++) : (r = i, Ae(D)), r !== i) {
-                if ((n = be()) !== i) {
-                  for (s = [], o = pe, 46 === t.charCodeAt(pe) ? (a = ".", pe++) : (a = i, Ae(D)), a !== i && (l = be()) !== i ? o = a = [a, l] : (pe = o, o = i); o !== i;) s.push(o), o = pe, 46 === t.charCodeAt(pe) ? (a = ".", pe++) : (a = i, Ae(D)), a !== i && (l = be()) !== i ? o = a = [a, l] : (pe = o, o = i);
-
-                  s !== i ? (u = n, r = {
+                  c = 30 * fe + 21,
+                  f = ye[c];
+              if (f) return fe = f.nextPos, f.result;
+              if (e = fe, 46 === t.charCodeAt(fe) ? (r = ".", fe++) : (r = i, Ae(D)), r !== i) {
+                if ((n = Se()) !== i) {
+                  for (o = [], a = fe, 46 === t.charCodeAt(fe) ? (s = ".", fe++) : (s = i, Ae(D)), s !== i && (l = Se()) !== i ? a = s = [s, l] : (fe = a, a = i); a !== i;) o.push(a), a = fe, 46 === t.charCodeAt(fe) ? (s = ".", fe++) : (s = i, Ae(D)), s !== i && (l = Se()) !== i ? a = s = [s, l] : (fe = a, a = i);
+
+                  o !== i ? (u = n, r = {
                     type: "field",
-                    name: s.reduce(function (e, t) {
+                    name: o.reduce(function (e, t) {
                       return e + t[0] + t[1];
                     }, u)
-                  }, e = r) : (pe = e, e = i);
-                } else pe = e, e = i;
-              } else pe = e, e = i;
-              return xe[c] = {
-                nextPos: pe,
+                  }, e = r) : (fe = e, e = i);
+                } else fe = e, e = i;
+              } else fe = e, e = i;
+              return ye[c] = {
+                nextPos: fe,
                 result: e
               }, e;
             }()) === i && (e = function () {
               var e,
                   r,
                   n,
-                  s,
-                  o = 30 * pe + 22,
-                  a = xe[o];
-              return a ? (pe = a.nextPos, a.result) : (e = pe, ":not(" === t.substr(pe, 5) ? (r = ":not(", pe += 5) : (r = i, Ae(X)), r !== i && _e() !== i && (n = Ce()) !== i && _e() !== i ? (41 === t.charCodeAt(pe) ? (s = ")", pe++) : (s = i, Ae(z)), s !== i ? e = r = {
+                  o,
+                  a = 30 * fe + 22,
+                  s = ye[a];
+              return s ? (fe = s.nextPos, s.result) : (e = fe, ":not(" === t.substr(fe, 5) ? (r = ":not(", fe += 5) : (r = i, Ae(X)), r !== i && Ee() !== i && (n = we()) !== i && Ee() !== i ? (41 === t.charCodeAt(fe) ? (o = ")", fe++) : (o = i, Ae(K)), o !== i ? e = r = {
                 type: "not",
                 selectors: n
-              } : (pe = e, e = i)) : (pe = e, e = i), xe[o] = {
-                nextPos: pe,
+              } : (fe = e, e = i)) : (fe = e, e = i), ye[a] = {
+                nextPos: fe,
                 result: e
               }, e);
             }()) === i && (e = function () {
               var e,
                   r,
                   n,
-                  s,
-                  o = 30 * pe + 23,
-                  a = xe[o];
-              return a ? (pe = a.nextPos, a.result) : (e = pe, ":matches(" === t.substr(pe, 9) ? (r = ":matches(", pe += 9) : (r = i, Ae(Z)), r !== i && _e() !== i && (n = Ce()) !== i && _e() !== i ? (41 === t.charCodeAt(pe) ? (s = ")", pe++) : (s = i, Ae(z)), s !== i ? e = r = {
+                  o,
+                  a = 30 * fe + 23,
+                  s = ye[a];
+              return s ? (fe = s.nextPos, s.result) : (e = fe, ":matches(" === t.substr(fe, 9) ? (r = ":matches(", fe += 9) : (r = i, Ae(Z)), r !== i && Ee() !== i && (n = we()) !== i && Ee() !== i ? (41 === t.charCodeAt(fe) ? (o = ")", fe++) : (o = i, Ae(K)), o !== i ? e = r = {
                 type: "matches",
                 selectors: n
-              } : (pe = e, e = i)) : (pe = e, e = i), xe[o] = {
-                nextPos: pe,
+              } : (fe = e, e = i)) : (fe = e, e = i), ye[a] = {
+                nextPos: fe,
                 result: e
               }, e);
             }()) === i && (e = function () {
               var e,
                   r,
                   n,
-                  s,
-                  o = 30 * pe + 24,
-                  a = xe[o];
-              return a ? (pe = a.nextPos, a.result) : (e = pe, ":has(" === t.substr(pe, 5) ? (r = ":has(", pe += 5) : (r = i, Ae(ee)), r !== i && _e() !== i && (n = Ce()) !== i && _e() !== i ? (41 === t.charCodeAt(pe) ? (s = ")", pe++) : (s = i, Ae(z)), s !== i ? e = r = {
+                  o,
+                  a = 30 * fe + 24,
+                  s = ye[a];
+              return s ? (fe = s.nextPos, s.result) : (e = fe, ":has(" === t.substr(fe, 5) ? (r = ":has(", fe += 5) : (r = i, Ae(ee)), r !== i && Ee() !== i && (n = we()) !== i && Ee() !== i ? (41 === t.charCodeAt(fe) ? (o = ")", fe++) : (o = i, Ae(K)), o !== i ? e = r = {
                 type: "has",
                 selectors: n
-              } : (pe = e, e = i)) : (pe = e, e = i), xe[o] = {
-                nextPos: pe,
+              } : (fe = e, e = i)) : (fe = e, e = i), ye[a] = {
+                nextPos: fe,
                 result: e
               }, e);
             }()) === i && (e = function () {
               var e,
                   r,
-                  n = 30 * pe + 25,
-                  s = xe[n];
-              return s ? (pe = s.nextPos, s.result) : (":first-child" === t.substr(pe, 12) ? (r = ":first-child", pe += 12) : (r = i, Ae(te)), r !== i && (r = Ie(1)), e = r, xe[n] = {
-                nextPos: pe,
+                  n = 30 * fe + 25,
+                  o = ye[n];
+              return o ? (fe = o.nextPos, o.result) : (":first-child" === t.substr(fe, 12) ? (r = ":first-child", fe += 12) : (r = i, Ae(te)), r !== i && (r = Ie(1)), e = r, ye[n] = {
+                nextPos: fe,
                 result: e
               }, e);
             }()) === i && (e = function () {
               var e,
                   r,
-                  n = 30 * pe + 26,
-                  s = xe[n];
-              return s ? (pe = s.nextPos, s.result) : (":last-child" === t.substr(pe, 11) ? (r = ":last-child", pe += 11) : (r = i, Ae(re)), r !== i && (r = je(1)), e = r, xe[n] = {
-                nextPos: pe,
+                  n = 30 * fe + 26,
+                  o = ye[n];
+              return o ? (fe = o.nextPos, o.result) : (":last-child" === t.substr(fe, 11) ? (r = ":last-child", fe += 11) : (r = i, Ae(re)), r !== i && (r = je(1)), e = r, ye[n] = {
+                nextPos: fe,
                 result: e
               }, e);
             }()) === i && (e = function () {
               var e,
                   r,
                   n,
-                  s,
                   o,
-                  a = 30 * pe + 27,
-                  l = xe[a];
-              if (l) return pe = l.nextPos, l.result;
-              if (e = pe, ":nth-child(" === t.substr(pe, 11) ? (r = ":nth-child(", pe += 11) : (r = i, Ae(ne)), r !== i) {
-                if (_e() !== i) {
-                  if (n = [], q.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(N)), s !== i) for (; s !== i;) n.push(s), q.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(N));else n = i;
-                  n !== i && (s = _e()) !== i ? (41 === t.charCodeAt(pe) ? (o = ")", pe++) : (o = i, Ae(z)), o !== i ? (r = Ie(parseInt(n.join(""), 10)), e = r) : (pe = e, e = i)) : (pe = e, e = i);
-                } else pe = e, e = i;
-              } else pe = e, e = i;
-              return xe[a] = {
-                nextPos: pe,
+                  a,
+                  s = 30 * fe + 27,
+                  l = ye[s];
+              if (l) return fe = l.nextPos, l.result;
+              if (e = fe, ":nth-child(" === t.substr(fe, 11) ? (r = ":nth-child(", fe += 11) : (r = i, Ae(ne)), r !== i) {
+                if (Ee() !== i) {
+                  if (n = [], q.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(N)), o !== i) for (; o !== i;) n.push(o), q.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(N));else n = i;
+                  n !== i && (o = Ee()) !== i ? (41 === t.charCodeAt(fe) ? (a = ")", fe++) : (a = i, Ae(K)), a !== i ? (r = Ie(parseInt(n.join(""), 10)), e = r) : (fe = e, e = i)) : (fe = e, e = i);
+                } else fe = e, e = i;
+              } else fe = e, e = i;
+              return ye[s] = {
+                nextPos: fe,
                 result: e
               }, e;
             }()) === i && (e = function () {
               var e,
                   r,
                   n,
-                  s,
                   o,
-                  a = 30 * pe + 28,
-                  l = xe[a];
-              if (l) return pe = l.nextPos, l.result;
-              if (e = pe, ":nth-last-child(" === t.substr(pe, 16) ? (r = ":nth-last-child(", pe += 16) : (r = i, Ae(se)), r !== i) {
-                if (_e() !== i) {
-                  if (n = [], q.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(N)), s !== i) for (; s !== i;) n.push(s), q.test(t.charAt(pe)) ? (s = t.charAt(pe), pe++) : (s = i, Ae(N));else n = i;
-                  n !== i && (s = _e()) !== i ? (41 === t.charCodeAt(pe) ? (o = ")", pe++) : (o = i, Ae(z)), o !== i ? (r = je(parseInt(n.join(""), 10)), e = r) : (pe = e, e = i)) : (pe = e, e = i);
-                } else pe = e, e = i;
-              } else pe = e, e = i;
-              return xe[a] = {
-                nextPos: pe,
+                  a,
+                  s = 30 * fe + 28,
+                  l = ye[s];
+              if (l) return fe = l.nextPos, l.result;
+              if (e = fe, ":nth-last-child(" === t.substr(fe, 16) ? (r = ":nth-last-child(", fe += 16) : (r = i, Ae(oe)), r !== i) {
+                if (Ee() !== i) {
+                  if (n = [], q.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(N)), o !== i) for (; o !== i;) n.push(o), q.test(t.charAt(fe)) ? (o = t.charAt(fe), fe++) : (o = i, Ae(N));else n = i;
+                  n !== i && (o = Ee()) !== i ? (41 === t.charCodeAt(fe) ? (a = ")", fe++) : (a = i, Ae(K)), a !== i ? (r = je(parseInt(n.join(""), 10)), e = r) : (fe = e, e = i)) : (fe = e, e = i);
+                } else fe = e, e = i;
+              } else fe = e, e = i;
+              return ye[s] = {
+                nextPos: fe,
                 result: e
               }, e;
             }()) === i && (e = function () {
               var e,
                   r,
                   n,
-                  s = 30 * pe + 29,
-                  o = xe[s];
-              return o ? (pe = o.nextPos, o.result) : (e = pe, 58 === t.charCodeAt(pe) ? (r = ":", pe++) : (r = i, Ae(oe)), r !== i ? ("statement" === t.substr(pe, 9).toLowerCase() ? (n = t.substr(pe, 9), pe += 9) : (n = i, Ae(ae)), n === i && ("expression" === t.substr(pe, 10).toLowerCase() ? (n = t.substr(pe, 10), pe += 10) : (n = i, Ae(ie)), n === i && ("declaration" === t.substr(pe, 11).toLowerCase() ? (n = t.substr(pe, 11), pe += 11) : (n = i, Ae(le)), n === i && ("function" === t.substr(pe, 8).toLowerCase() ? (n = t.substr(pe, 8), pe += 8) : (n = i, Ae(ue)), n === i && ("pattern" === t.substr(pe, 7).toLowerCase() ? (n = t.substr(pe, 7), pe += 7) : (n = i, Ae(ce)))))), n !== i ? e = r = {
+                  o = 30 * fe + 29,
+                  a = ye[o];
+              return a ? (fe = a.nextPos, a.result) : (e = fe, 58 === t.charCodeAt(fe) ? (r = ":", fe++) : (r = i, Ae(ae)), r !== i ? ("statement" === t.substr(fe, 9).toLowerCase() ? (n = t.substr(fe, 9), fe += 9) : (n = i, Ae(se)), n === i && ("expression" === t.substr(fe, 10).toLowerCase() ? (n = t.substr(fe, 10), fe += 10) : (n = i, Ae(ie)), n === i && ("declaration" === t.substr(fe, 11).toLowerCase() ? (n = t.substr(fe, 11), fe += 11) : (n = i, Ae(le)), n === i && ("function" === t.substr(fe, 8).toLowerCase() ? (n = t.substr(fe, 8), fe += 8) : (n = i, Ae(ue)), n === i && ("pattern" === t.substr(fe, 7).toLowerCase() ? (n = t.substr(fe, 7), fe += 7) : (n = i, Ae(ce)))))), n !== i ? e = r = {
                 type: "class",
                 name: n
-              } : (pe = e, e = i)) : (pe = e, e = i), xe[s] = {
-                nextPos: pe,
+              } : (fe = e, e = i)) : (fe = e, e = i), ye[o] = {
+                nextPos: fe,
                 result: e
               }, e);
-            }()), xe[r] = {
-              nextPos: pe,
+            }()), ye[r] = {
+              nextPos: fe,
               result: e
             }, e);
           }
@@ -124861,12 +125138,12 @@ module.exports = NodeEventGenerator;
             var e,
                 r,
                 n,
-                s = 30 * pe + 13,
-                o = xe[s];
-            if (o) return pe = o.nextPos, o.result;
-            if (r = [], (n = be()) === i && (46 === t.charCodeAt(pe) ? (n = ".", pe++) : (n = i, Ae(D))), n !== i) for (; n !== i;) r.push(n), (n = be()) === i && (46 === t.charCodeAt(pe) ? (n = ".", pe++) : (n = i, Ae(D)));else r = i;
-            return r !== i && (r = h(r)), e = r, xe[s] = {
-              nextPos: pe,
+                o = 30 * fe + 13,
+                a = ye[o];
+            if (a) return fe = a.nextPos, a.result;
+            if (r = [], (n = Se()) === i && (46 === t.charCodeAt(fe) ? (n = ".", fe++) : (n = i, Ae(D))), n !== i) for (; n !== i;) r.push(n), (n = Se()) === i && (46 === t.charCodeAt(fe) ? (n = ".", fe++) : (n = i, Ae(D)));else r = i;
+            return r !== i && (r = h(r)), e = r, ye[o] = {
+              nextPos: fe,
               result: e
             }, e;
           }
@@ -124891,182 +125168,177 @@ module.exports = NodeEventGenerator;
             };
           }
 
-          if ((n = u()) !== i && pe === t.length) return n;
-          throw n !== i && pe < t.length && Ae({
+          if ((n = u()) !== i && fe === t.length) return n;
+          throw n !== i && fe < t.length && Ae({
             type: "end"
-          }), s = de, o = he < t.length ? t.charAt(he) : null, a = he < t.length ? ve(he, he + 1) : ve(he, he), new e(e.buildMessage(s, o), s, o, a);
+          }), o = de, a = he < t.length ? t.charAt(he) : null, s = he < t.length ? ve(he, he + 1) : ve(he, he), new e(e.buildMessage(o, a), o, a, s);
         }
       };
     }());
   });
 
-  function n(e, r, i) {
+  function l(t, r, n) {
     if (!r) return !0;
-    if (!e) return !1;
+    if (!t) return !1;
 
-    switch (i || (i = []), r.type) {
+    switch (n || (n = []), r.type) {
       case "wildcard":
         return !0;
 
       case "identifier":
-        return r.value.toLowerCase() === e.type.toLowerCase();
+        return r.value.toLowerCase() === t.type.toLowerCase();
 
       case "field":
-        {
-          const t = r.name.split(".");
-          return function e(t, r, n) {
-            if (0 === n.length) return t === r;
-            if (null == r) return !1;
-            const s = r[n[0]],
-                  o = n.slice(1);
+        var o = r.name.split("."),
+            a = n[o.length - 1];
+        return function e(t, r, n) {
+          if (0 === n.length) return t === r;
+          if (null == r) return !1;
+          var o = r[n[0]],
+              a = n.slice(1);
 
-            if (Array.isArray(s)) {
-              for (let r = 0, n = s.length; r < n; ++r) if (e(t, s[r], o)) return !0;
+          if (Array.isArray(o)) {
+            for (var s = 0, i = o.length; s < i; ++s) if (e(t, o[s], a)) return !0;
 
-              return !1;
-            }
+            return !1;
+          }
 
-            return e(t, s, o);
-          }(e, i[t.length - 1], t);
-        }
+          return e(t, o, a);
+        }(t, a, o);
 
       case "matches":
-        for (let t = 0, s = r.selectors.length; t < s; ++t) if (n(e, r.selectors[t], i)) return !0;
+        for (var i = 0, p = r.selectors.length; i < p; ++i) if (l(t, r.selectors[i], n)) return !0;
 
         return !1;
 
       case "compound":
-        for (let t = 0, s = r.selectors.length; t < s; ++t) if (!n(e, r.selectors[t], i)) return !1;
+        for (var h = 0, d = r.selectors.length; h < d; ++h) if (!l(t, r.selectors[h], n)) return !1;
 
         return !0;
 
       case "not":
-        for (let t = 0, s = r.selectors.length; t < s; ++t) if (n(e, r.selectors[t], i)) return !1;
+        for (var y = 0, m = r.selectors.length; y < m; ++y) if (l(t, r.selectors[y], n)) return !1;
 
         return !0;
 
       case "has":
-        {
-          const s = [];
-
-          for (let o = 0, a = r.selectors.length; o < a; ++o) {
-            const a = [];
-            t.traverse(e, {
-              enter(e, t) {
-                null != t && a.unshift(t), n(e, r.selectors[o], a) && s.push(e);
+        var x = function () {
+          for (var e = [], n = function n(_n, o) {
+            var a = [];
+            s.traverse(t, {
+              enter: function enter(t, o) {
+                null != o && a.unshift(o), l(t, r.selectors[_n], a) && e.push(t);
               },
-
-              leave() {
+              leave: function leave() {
                 a.shift();
               },
-
               fallback: "iteration"
             });
-          }
+          }, o = 0, a = r.selectors.length; o < a; ++o) n(o);
 
-          return 0 !== s.length;
-        }
+          return {
+            v: 0 !== e.length
+          };
+        }();
+
+        if ("object" === e(x)) return x.v;
 
       case "child":
-        return !!n(e, r.right, i) && n(i[0], r.left, i.slice(1));
+        return !!l(t, r.right, n) && l(n[0], r.left, n.slice(1));
 
       case "descendant":
-        if (n(e, r.right, i)) for (let e = 0, t = i.length; e < t; ++e) if (n(i[e], r.left, i.slice(e + 1))) return !0;
+        if (l(t, r.right, n)) for (var g = 0, v = n.length; g < v; ++g) if (l(n[g], r.left, n.slice(g + 1))) return !0;
         return !1;
 
       case "attribute":
-        {
-          const t = function (e, t) {
-            const r = t.split(".");
-
-            for (let t = 0; t < r.length; t++) {
-              if (null == e) return e;
-              e = e[r[t]];
-            }
-
-            return e;
-          }(e, r.name);
+        var A = function (e, t) {
+          for (var r = t.split("."), n = 0; n < r.length; n++) {
+            if (null == e) return e;
+            e = e[r[n]];
+          }
 
-          switch (r.operator) {
-            case void 0:
-              return null != t;
+          return e;
+        }(t, r.name);
 
-            case "=":
-              switch (r.value.type) {
-                case "regexp":
-                  return "string" == typeof t && r.value.value.test(t);
+        switch (r.operator) {
+          case void 0:
+            return null != A;
 
-                case "literal":
-                  return "".concat(r.value.value) === "".concat(t);
+          case "=":
+            switch (r.value.type) {
+              case "regexp":
+                return "string" == typeof A && r.value.value.test(A);
 
-                case "type":
-                  return r.value.value === typeof t;
-              }
+              case "literal":
+                return "".concat(r.value.value) === "".concat(A);
 
-              throw new Error("Unknown selector value type: ".concat(r.value.type));
+              case "type":
+                return r.value.value === e(A);
+            }
 
-            case "!=":
-              switch (r.value.type) {
-                case "regexp":
-                  return !r.value.value.test(t);
+            throw new Error("Unknown selector value type: ".concat(r.value.type));
 
-                case "literal":
-                  return "".concat(r.value.value) !== "".concat(t);
+          case "!=":
+            switch (r.value.type) {
+              case "regexp":
+                return !r.value.value.test(A);
 
-                case "type":
-                  return r.value.value !== typeof t;
-              }
+              case "literal":
+                return "".concat(r.value.value) !== "".concat(A);
 
-              throw new Error("Unknown selector value type: ".concat(r.value.type));
+              case "type":
+                return r.value.value !== e(A);
+            }
 
-            case "<=":
-              return t <= r.value.value;
+            throw new Error("Unknown selector value type: ".concat(r.value.type));
 
-            case "<":
-              return t < r.value.value;
+          case "<=":
+            return A <= r.value.value;
 
-            case ">":
-              return t > r.value.value;
+          case "<":
+            return A < r.value.value;
 
-            case ">=":
-              return t >= r.value.value;
-          }
+          case ">":
+            return A > r.value.value;
 
-          throw new Error("Unknown operator: ".concat(r.operator));
+          case ">=":
+            return A >= r.value.value;
         }
 
+        throw new Error("Unknown operator: ".concat(r.operator));
+
       case "sibling":
-        return n(e, r.right, i) && s(e, r.left, i, "LEFT_SIDE") || r.left.subject && n(e, r.left, i) && s(e, r.right, i, "RIGHT_SIDE");
+        return l(t, r.right, n) && u(t, r.left, n, "LEFT_SIDE") || r.left.subject && l(t, r.left, n) && u(t, r.right, n, "RIGHT_SIDE");
 
       case "adjacent":
-        return n(e, r.right, i) && o(e, r.left, i, "LEFT_SIDE") || r.right.subject && n(e, r.left, i) && o(e, r.right, i, "RIGHT_SIDE");
+        return l(t, r.right, n) && c(t, r.left, n, "LEFT_SIDE") || r.right.subject && l(t, r.left, n) && c(t, r.right, n, "RIGHT_SIDE");
 
       case "nth-child":
-        return n(e, r.right, i) && a(e, i, function () {
+        return l(t, r.right, n) && f(t, n, function () {
           return r.index.value - 1;
         });
 
       case "nth-last-child":
-        return n(e, r.right, i) && a(e, i, function (e) {
+        return l(t, r.right, n) && f(t, n, function (e) {
           return e - r.index.value;
         });
 
       case "class":
         switch (r.name.toLowerCase()) {
           case "statement":
-            if ("Statement" === e.type.slice(-9)) return !0;
+            if ("Statement" === t.type.slice(-9)) return !0;
 
           case "declaration":
-            return "Declaration" === e.type.slice(-11);
+            return "Declaration" === t.type.slice(-11);
 
           case "pattern":
-            if ("Pattern" === e.type.slice(-7)) return !0;
+            if ("Pattern" === t.type.slice(-7)) return !0;
 
           case "expression":
-            return "Expression" === e.type.slice(-10) || "Literal" === e.type.slice(-7) || "Identifier" === e.type && (0 === i.length || "MetaProperty" !== i[0].type) || "MetaProperty" === e.type;
+            return "Expression" === t.type.slice(-10) || "Literal" === t.type.slice(-7) || "Identifier" === t.type && (0 === n.length || "MetaProperty" !== n[0].type) || "MetaProperty" === t.type;
 
           case "function":
-            return "FunctionDeclaration" === e.type || "FunctionExpression" === e.type || "ArrowFunctionExpression" === e.type;
+            return "FunctionDeclaration" === t.type || "FunctionExpression" === t.type || "ArrowFunctionExpression" === t.type;
         }
 
         throw new Error("Unknown class name: ".concat(r.name));
@@ -125075,104 +125347,118 @@ module.exports = NodeEventGenerator;
     throw new Error("Unknown selector type: ".concat(r.type));
   }
 
-  function s(e, r, s, o) {
-    const [a] = s;
+  function u(e, r, n, o) {
+    var a = t(n, 1)[0];
     if (!a) return !1;
-    const i = t.VisitorKeys[a.type];
 
-    for (let t = 0, l = i.length; t < l; ++t) {
-      const l = a[i[t]];
+    for (var i = s.VisitorKeys[a.type], u = 0, c = i.length; u < c; ++u) {
+      var f = a[i[u]];
 
-      if (Array.isArray(l)) {
-        const t = l.indexOf(e);
-        if (t < 0) continue;
-        let a, i;
-        "LEFT_SIDE" === o ? (a = 0, i = t) : (a = t + 1, i = l.length);
+      if (Array.isArray(f)) {
+        var p = f.indexOf(e);
+        if (p < 0) continue;
+        var h = void 0,
+            d = void 0;
+        "LEFT_SIDE" === o ? (h = 0, d = p) : (h = p + 1, d = f.length);
 
-        for (let e = a; e < i; ++e) if (n(l[e], r, s)) return !0;
+        for (var y = h; y < d; ++y) if (l(f[y], r, n)) return !0;
       }
     }
 
     return !1;
   }
 
-  function o(e, r, s, o) {
-    const [a] = s;
+  function c(e, r, n, o) {
+    var a = t(n, 1)[0];
     if (!a) return !1;
-    const i = t.VisitorKeys[a.type];
 
-    for (let t = 0, l = i.length; t < l; ++t) {
-      const l = a[i[t]];
+    for (var i = s.VisitorKeys[a.type], u = 0, c = i.length; u < c; ++u) {
+      var f = a[i[u]];
 
-      if (Array.isArray(l)) {
-        const t = l.indexOf(e);
-        if (t < 0) continue;
-        if ("LEFT_SIDE" === o && t > 0 && n(l[t - 1], r, s)) return !0;
-        if ("RIGHT_SIDE" === o && t < l.length - 1 && n(l[t + 1], r, s)) return !0;
+      if (Array.isArray(f)) {
+        var p = f.indexOf(e);
+        if (p < 0) continue;
+        if ("LEFT_SIDE" === o && p > 0 && l(f[p - 1], r, n)) return !0;
+        if ("RIGHT_SIDE" === o && p < f.length - 1 && l(f[p + 1], r, n)) return !0;
       }
     }
 
     return !1;
   }
 
-  function a(e, r, n) {
-    const [s] = r;
-    if (!s) return !1;
-    const o = t.VisitorKeys[s.type];
+  function f(e, r, n) {
+    var o = t(r, 1)[0];
+    if (!o) return !1;
 
-    for (let t = 0, r = o.length; t < r; ++t) {
-      const r = s[o[t]];
+    for (var a = s.VisitorKeys[o.type], i = 0, l = a.length; i < l; ++i) {
+      var u = o[a[i]];
 
-      if (Array.isArray(r)) {
-        const t = r.indexOf(e);
-        if (t >= 0 && t === n(r.length)) return !0;
+      if (Array.isArray(u)) {
+        var c = u.indexOf(e);
+        if (c >= 0 && c === n(u.length)) return !0;
       }
     }
 
     return !1;
   }
 
-  function i(e, r) {
-    const s = [],
-          o = [];
-    if (!r) return o;
+  function p(n, o) {
+    if (null == n || "object" != e(n)) return [];
+    null == o && (o = n);
 
-    const a = function e(t, r) {
-      if (null == t || "object" != typeof t) return [];
-      null == r && (r = t);
-      const n = t.subject ? [r] : [];
+    for (var a = n.subject ? [o] : [], s = 0, i = function (e) {
+      for (var t = [], r = Object.keys(e), n = 0; n < r.length; n++) t.push([r[n], e[r[n]]]);
 
-      for (const [s, o] of Object.entries(t)) n.push(...e(o, "left" === s ? o : r));
-
-      return n;
-    }(r);
+      return t;
+    }(n); s < i.length; s++) {
+      var l = t(i[s], 2),
+          u = l[0],
+          c = l[1];
+      a.push.apply(a, r(p(c, "left" === u ? c : o)));
+    }
 
-    return t.traverse(e, {
-      enter(e, t) {
-        if (null != t && s.unshift(t), n(e, r, s)) if (a.length) for (let t = 0, r = a.length; t < r; ++t) {
-          n(e, a[t], s) && o.push(e);
+    return a;
+  }
 
-          for (let e = 0, r = s.length; e < r; ++e) n(s[e], a[t], s.slice(e + 1)) && o.push(s[e]);
-        } else o.push(e);
-      },
+  function h(e, t, r) {
+    if (t) {
+      var n = [],
+          o = p(t);
+      s.traverse(e, {
+        enter: function enter(e, a) {
+          if (null != a && n.unshift(a), l(e, t, n)) if (o.length) for (var s = 0, i = o.length; s < i; ++s) {
+            l(e, o[s], n) && r(e, a, n);
 
-      leave() {
-        s.shift();
-      },
+            for (var u = 0, c = n.length; u < c; ++u) {
+              var f = n.slice(u + 1);
+              l(n[u], o[s], f) && r(n[u], a, f);
+            }
+          } else r(e, a, n);
+        },
+        leave: function leave() {
+          n.shift();
+        },
+        fallback: "iteration"
+      });
+    }
+  }
 
-      fallback: "iteration"
-    }), o;
+  function d(e, t) {
+    var r = [];
+    return h(e, t, function (e) {
+      r.push(e);
+    }), r;
   }
 
-  function l(e) {
-    return r.parse(e);
+  function y(e) {
+    return i.parse(e);
   }
 
-  function u(e, t) {
-    return i(e, l(t));
+  function m(e, t) {
+    return d(e, y(t));
   }
 
-  return u.parse = l, u.match = i, u.matches = n, u.query = u, u;
+  return m.parse = y, m.match = d, m.traverse = h, m.matches = l, m.query = m, m;
 });
 
 /***/ }),
@@ -125396,7 +125682,7 @@ function mapSuggestions(descriptor, sourceCode, messages) {
 
   return descriptor.suggest.map(suggestInfo => {
     const computedDesc = suggestInfo.desc || messages[suggestInfo.messageId];
-    return _objectSpread({}, suggestInfo, {
+    return _objectSpread(_objectSpread({}, suggestInfo), {}, {
       desc: interpolate(computedDesc, suggestInfo.data),
       fix: normalizeFixes(suggestInfo, sourceCode)
     });
@@ -126247,6 +126533,8 @@ const validFixTypes = new Set(["problem", "suggestion", "layout"]); //----------
 
 /** @typedef {import("../shared/types").ConfigData} ConfigData */
 
+/** @typedef {import("../shared/types").DeprecatedRuleInfo} DeprecatedRuleInfo */
+
 /** @typedef {import("../shared/types").LintMessage} LintMessage */
 
 /** @typedef {import("../shared/types").ParserOptions} ParserOptions */
@@ -126264,29 +126552,29 @@ const validFixTypes = new Set(["problem", "suggestion", "layout"]); //----------
 /**
  * The options to configure a CLI engine with.
  * @typedef {Object} CLIEngineOptions
- * @property {boolean} allowInlineConfig Enable or disable inline configuration comments.
- * @property {ConfigData} baseConfig Base config object, extended by all configs used with this CLIEngine instance
- * @property {boolean} cache Enable result caching.
- * @property {string} cacheLocation The cache file to use instead of .eslintcache.
- * @property {string} configFile The configuration file to use.
- * @property {string} cwd The value to use for the current working directory.
- * @property {string[]} envs An array of environments to load.
- * @property {string[]|null} extensions An array of file extensions to check.
- * @property {boolean|Function} fix Execute in autofix mode. If a function, should return a boolean.
- * @property {string[]} fixTypes Array of rule types to apply fixes for.
- * @property {string[]} globals An array of global variables to declare.
- * @property {boolean} ignore False disables use of .eslintignore.
- * @property {string} ignorePath The ignore file to use instead of .eslintignore.
- * @property {string|string[]} ignorePattern One or more glob patterns to ignore.
- * @property {boolean} useEslintrc False disables looking for .eslintrc
- * @property {string} parser The name of the parser to use.
- * @property {ParserOptions} parserOptions An object of parserOption settings to use.
- * @property {string[]} plugins An array of plugins to load.
- * @property {Record<string,RuleConf>} rules An object of rules to use.
- * @property {string[]} rulePaths An array of directories to load custom rules from.
- * @property {boolean} reportUnusedDisableDirectives `true` adds reports for unused eslint-disable directives
- * @property {boolean} globInputPaths Set to false to skip glob resolution of input file paths to lint (default: true). If false, each input file paths is assumed to be a non-glob path to an existing file.
- * @property {string} resolvePluginsRelativeTo The folder where plugins should be resolved from, defaulting to the CWD
+ * @property {boolean} [allowInlineConfig] Enable or disable inline configuration comments.
+ * @property {ConfigData} [baseConfig] Base config object, extended by all configs used with this CLIEngine instance
+ * @property {boolean} [cache] Enable result caching.
+ * @property {string} [cacheLocation] The cache file to use instead of .eslintcache.
+ * @property {string} [configFile] The configuration file to use.
+ * @property {string} [cwd] The value to use for the current working directory.
+ * @property {string[]} [envs] An array of environments to load.
+ * @property {string[]|null} [extensions] An array of file extensions to check.
+ * @property {boolean|Function} [fix] Execute in autofix mode. If a function, should return a boolean.
+ * @property {string[]} [fixTypes] Array of rule types to apply fixes for.
+ * @property {string[]} [globals] An array of global variables to declare.
+ * @property {boolean} [ignore] False disables use of .eslintignore.
+ * @property {string} [ignorePath] The ignore file to use instead of .eslintignore.
+ * @property {string|string[]} [ignorePattern] One or more glob patterns to ignore.
+ * @property {boolean} [useEslintrc] False disables looking for .eslintrc
+ * @property {string} [parser] The name of the parser to use.
+ * @property {ParserOptions} [parserOptions] An object of parserOption settings to use.
+ * @property {string[]} [plugins] An array of plugins to load.
+ * @property {Record<string,RuleConf>} [rules] An object of rules to use.
+ * @property {string[]} [rulePaths] An array of directories to load custom rules from.
+ * @property {boolean} [reportUnusedDisableDirectives] `true` adds reports for unused eslint-disable directives
+ * @property {boolean} [globInputPaths] Set to false to skip glob resolution of input file paths to lint (default: true). If false, each input file paths is assumed to be a non-glob path to an existing file.
+ * @property {string} [resolvePluginsRelativeTo] The folder where plugins should be resolved from, defaulting to the CWD
  */
 
 /**
@@ -126302,13 +126590,6 @@ const validFixTypes = new Set(["problem", "suggestion", "layout"]); //----------
  * @property {string} [output] The source code of the file that was linted, with as many fixes applied as possible.
  */
 
-/**
- * Information of deprecated rules.
- * @typedef {Object} DeprecatedRuleInfo
- * @property {string} ruleId The rule ID.
- * @property {string[]} replacedBy The rule IDs that replace this deprecated rule.
- */
-
 /**
  * Linting results.
  * @typedef {Object} LintReport
@@ -126837,7 +127118,7 @@ class CLIEngine {
       const filteredMessages = result.messages.filter(isErrorMessage);
 
       if (filteredMessages.length > 0) {
-        filtered.push(_objectSpread({}, result, {
+        filtered.push(_objectSpread(_objectSpread({}, result), {}, {
           messages: filteredMessages,
           errorCount: filteredMessages.length,
           warningCount: 0,
@@ -127010,15 +127291,22 @@ class CLIEngine {
 
     if (lintResultCache) {
       lintResultCache.reconcile();
-    } // Collect used deprecated rules.
-
+    }
 
-    const usedDeprecatedRules = Array.from(iterateRuleDeprecationWarnings(lastConfigArrays));
     debug("Linting complete in: ".concat(Date.now() - startTime, "ms"));
-    return _objectSpread({
+    let usedDeprecatedRules;
+    return _objectSpread(_objectSpread({
       results
-    }, calculateStatsPerRun(results), {
-      usedDeprecatedRules
+    }, calculateStatsPerRun(results)), {}, {
+      // Initialize it lazily because CLI and `ESLint` API don't use it.
+      get usedDeprecatedRules() {
+        if (!usedDeprecatedRules) {
+          usedDeprecatedRules = Array.from(iterateRuleDeprecationWarnings(lastConfigArrays));
+        }
+
+        return usedDeprecatedRules;
+      }
+
     });
   }
   /**
@@ -127075,15 +127363,22 @@ class CLIEngine {
         fileEnumerator,
         linter
       }));
-    } // Collect used deprecated rules.
-
+    }
 
-    const usedDeprecatedRules = Array.from(iterateRuleDeprecationWarnings(lastConfigArrays));
     debug("Linting complete in: ".concat(Date.now() - startTime, "ms"));
-    return _objectSpread({
+    let usedDeprecatedRules;
+    return _objectSpread(_objectSpread({
       results
-    }, calculateStatsPerRun(results), {
-      usedDeprecatedRules
+    }, calculateStatsPerRun(results)), {}, {
+      // Initialize it lazily because CLI and `ESLint` API don't use it.
+      get usedDeprecatedRules() {
+        if (!usedDeprecatedRules) {
+          usedDeprecatedRules = Array.from(iterateRuleDeprecationWarnings(lastConfigArrays));
+        }
+
+        return usedDeprecatedRules;
+      }
+
     });
   }
   /**
@@ -127137,11 +127432,10 @@ class CLIEngine {
     return defaultIgnores(absolutePath);
   }
   /**
-   * Returns the formatter representing the given format or null if no formatter
-   * with the given name can be found.
+   * Returns the formatter representing the given format or null if the `format` is not a string.
    * @param {string} [format] The name of the format to load or the path to a
    *      custom formatter.
-   * @returns {Function} The formatter function or null if not found.
+   * @returns {(Function|null)} The formatter function or null if the `format` is not a string.
    */
 
 
@@ -127358,6 +127652,7 @@ const Module = __webpack_require__(828);
  * `Module.createRequire` is added in v12.2.0. It supports URL as well.
  * We only support the case where the argument is a filepath, not a URL.
  */
+// eslint-disable-next-line node/no-unsupported-features/node-builtins, node/no-deprecated-api
 
 
 const createRequire = Module.createRequire || Module.createRequireFromPath;
@@ -127704,6 +127999,18 @@ class CascadingConfigArrayFactory {
     debug("Load config files for ".concat(directoryPath, "."));
     return this._finalizeConfigArray(this._loadConfigInAncestors(directoryPath), directoryPath, ignoreNotFoundError);
   }
+  /**
+   * Set the config data to override all configs.
+   * Require to call `clearCache()` method after this method is called.
+   * @param {ConfigData} configData The config data to override all configs.
+   * @returns {void}
+   */
+
+
+  setOverrideConfig(configData) {
+    const slots = internalSlotsMap.get(this);
+    slots.cliConfigData = configData;
+  }
   /**
    * Clear config cache.
    * @returns {void}
@@ -128626,7 +128933,7 @@ class ConfigArrayFactory {
     }; // Flatten `overries`.
 
     for (let i = 0; i < overrideList.length; ++i) {
-      yield* this._normalizeObjectConfigData(overrideList[i], _objectSpread({}, ctx, {
+      yield* this._normalizeObjectConfigData(overrideList[i], _objectSpread(_objectSpread({}, ctx), {}, {
         name: "".concat(ctx.name, "#overrides[").concat(i, "]")
       }));
     }
@@ -128669,14 +128976,14 @@ class ConfigArrayFactory {
 
   _loadExtendedBuiltInConfig(extendName, ctx) {
     if (extendName === "eslint:recommended") {
-      return this._loadConfigData(_objectSpread({}, ctx, {
+      return this._loadConfigData(_objectSpread(_objectSpread({}, ctx), {}, {
         filePath: eslintRecommendedPath,
         name: "".concat(ctx.name, " \xBB ").concat(extendName)
       }));
     }
 
     if (extendName === "eslint:all") {
-      return this._loadConfigData(_objectSpread({}, ctx, {
+      return this._loadConfigData(_objectSpread(_objectSpread({}, ctx), {}, {
         filePath: eslintAllPath,
         name: "".concat(ctx.name, " \xBB ").concat(extendName)
       }));
@@ -128707,8 +129014,8 @@ class ConfigArrayFactory {
     const configData = plugin.definition && plugin.definition.configs[configName];
 
     if (configData) {
-      return this._normalizeConfigData(configData, _objectSpread({}, ctx, {
-        filePath: plugin.filePath,
+      return this._normalizeConfigData(configData, _objectSpread(_objectSpread({}, ctx), {}, {
+        filePath: plugin.filePath || ctx.filePath,
         name: "".concat(ctx.name, " \xBB plugin:").concat(plugin.id, "/").concat(configName)
       }));
     }
@@ -128753,7 +129060,7 @@ class ConfigArrayFactory {
     }
 
     writeDebugLogForLoading(request, relativeTo, filePath);
-    return this._loadConfigData(_objectSpread({}, ctx, {
+    return this._loadConfigData(_objectSpread(_objectSpread({}, ctx), {}, {
       filePath,
       name: "".concat(ctx.name, " \xBB ").concat(request)
     }));
@@ -128866,7 +129173,8 @@ class ConfigArrayFactory {
     if (plugin) {
       return new ConfigDependency({
         definition: normalizePlugin(plugin),
-        filePath: ctx.filePath,
+        filePath: "",
+        // It's unknown where the plugin came from.
         id,
         importerName: ctx.name,
         importerPath: ctx.filePath
@@ -128943,7 +129251,7 @@ class ConfigArrayFactory {
           yield* this._normalizeObjectConfigData({
             files: ["*".concat(processorId)],
             processor: "".concat(pluginId, "/").concat(processorId)
-          }, _objectSpread({}, ctx, {
+          }, _objectSpread(_objectSpread({}, ctx), {}, {
             type: "implicit-processor",
             name: "".concat(ctx.name, "#processors[\"").concat(pluginId, "/").concat(processorId, "\"]")
           }));
@@ -129162,6 +129470,10 @@ const isEscaped = (jsonString, quotePosition) => {
 };
 
 module.exports = (jsonString, options = {}) => {
+  if (typeof jsonString !== 'string') {
+    throw new TypeError("Expected argument `jsonString` to be a `string`, got `".concat(typeof jsonString, "`"));
+  }
+
   const strip = options.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace;
   let insideString = false;
   let insideComment = false;
@@ -129384,7 +129696,7 @@ function getMatchedIndices(elements, filePath) {
   for (let i = elements.length - 1; i >= 0; --i) {
     const element = elements[i];
 
-    if (!element.criteria || element.criteria.test(filePath)) {
+    if (!element.criteria || filePath && element.criteria.test(filePath)) {
       indices.push(i);
     }
   }
@@ -130067,7 +130379,13 @@ function getCommonAncestorPath(sourcePaths) {
     }
   }
 
-  return result || path.sep;
+  let resolvedResult = result || path.sep; // if Windows common ancestor is root of drive must have trailing slash to be absolute.
+
+  if (resolvedResult && resolvedResult.endsWith(":") && process.platform === "win32") {
+    resolvedResult += path.sep;
+  }
+
+  return resolvedResult;
 }
 /**
  * Make relative path.
@@ -130342,7 +130660,7 @@ class ConfigDependency {
     const obj = this[util.inspect.custom](); // Display `error.message` (`Error#message` is unenumerable).
 
     if (obj.error instanceof Error) {
-      obj.error = _objectSpread({}, obj.error, {
+      obj.error = _objectSpread(_objectSpread({}, obj.error), {}, {
         message: obj.error.message
       });
     }
@@ -130459,7 +130777,7 @@ function toMatcher(patterns) {
   return patterns.map(pattern => {
     if (/^\.[/\\]/u.test(pattern)) {
       return new Minimatch(pattern.slice(2), // `./*.js` should not match with `subdir/foo.js`
-      _objectSpread({}, minimatchOpts, {
+      _objectSpread(_objectSpread({}, minimatchOpts), {}, {
         matchBase: false
       }));
     }
@@ -130596,7 +130914,7 @@ class OverrideTester {
 
   toJSON() {
     if (this.patterns.length === 1) {
-      return _objectSpread({}, patternToJson(this.patterns[0]), {
+      return _objectSpread(_objectSpread({}, patternToJson(this.patterns[0])), {}, {
         basePath: this.basePath
       });
     }
@@ -144700,7 +145018,7 @@ class FileEnumerator {
         : this.isTargetPath(filePath, config);
 
         if (matched) {
-          const ignored = this._isIgnoredFile(filePath, _objectSpread({}, options, {
+          const ignored = this._isIgnoredFile(filePath, _objectSpread(_objectSpread({}, options), {}, {
             config
           }));
 
@@ -144722,7 +145040,7 @@ class FileEnumerator {
           });
         }
 
-        const ignored = this._isIgnoredFile(filePath + path.sep, _objectSpread({}, options, {
+        const ignored = this._isIgnoredFile(filePath + path.sep, _objectSpread(_objectSpread({}, options), {}, {
           config
         }));
 
@@ -145980,7 +146298,7 @@ function mkdirP(p, opts, f, made) {
   var xfs = opts.fs || fs;
 
   if (mode === undefined) {
-    mode = _0777 & ~process.umask();
+    mode = _0777;
   }
 
   if (!made) made = null;
@@ -146027,7 +146345,7 @@ mkdirP.sync = function sync(p, opts, made) {
   var xfs = opts.fs || fs;
 
   if (mode === undefined) {
-    mode = _0777 & ~process.umask();
+    mode = _0777;
   }
 
   if (!made) made = null;