axe 11.2.0 → 11.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -451,12 +451,16 @@ const IGNORED_CONTENT_TYPES = [
451
451
  for (const level of logger.config.levels) {
452
452
  logger.pre(level, function (err, message, meta) {
453
453
  if (
454
- meta?.is_http &&
455
- meta?.response?.status_code < 400 &&
456
- meta?.response?.headers?.['content-type'] &&
457
- IGNORED_CONTENT_TYPES.some((c) =>
458
- meta.response.headers['content-type'].startsWith(c)
459
- )
454
+ meta.is_http &&
455
+ meta.response &&
456
+ meta.response.status_code &&
457
+ meta.response.status_code < 400 &&
458
+ (meta.response.status_code === 304 ||
459
+ (meta.response.headers &&
460
+ meta.response.headers['content-type'] &&
461
+ IGNORED_CONTENT_TYPES.some((c) =>
462
+ meta.response.headers['content-type'].startsWith(c)
463
+ )))
460
464
  )
461
465
  meta[silentSymbol] = true;
462
466
  return [err, message, meta];
package/dist/axe.js CHANGED
@@ -687,57 +687,6 @@ function isBuffer(val) {
687
687
  },{}],21:[function(require,module,exports){
688
688
  'use strict';
689
689
 
690
- const kErrors = Symbol('kErrors');
691
- module.exports = function (errors) {
692
- errors = errors.filter(defined);
693
- if (errors.length === 0) return;
694
- if (errors.length === 1) return errors[0];
695
- return new CombinedError(errors);
696
- };
697
- class CombinedError extends Error {
698
- constructor(errors) {
699
- const unique = new Set(errors.map(getMessage).filter(Boolean));
700
- const message = Array.from(unique).join('; ');
701
- super(message);
702
- value(this, 'name', 'CombinedError');
703
- value(this, kErrors, errors);
704
- getter(this, 'stack', () => errors.map(getStack).join('\n\n'));
705
- getter(this, 'transient', () => errors.length > 0 && errors.every(transient));
706
- getter(this, 'expected', () => errors.length > 0 && errors.every(expected));
707
- }
708
- [Symbol.iterator]() {
709
- return this[kErrors][Symbol.iterator]();
710
- }
711
- }
712
- function value(obj, prop, value) {
713
- Object.defineProperty(obj, prop, {
714
- value
715
- });
716
- }
717
- function getter(obj, prop, get) {
718
- Object.defineProperty(obj, prop, {
719
- get
720
- });
721
- }
722
- function defined(err) {
723
- return err != null;
724
- }
725
- function getMessage(err) {
726
- return err.message;
727
- }
728
- function getStack(err) {
729
- return err.stack;
730
- }
731
- function transient(err) {
732
- return err.transient === true;
733
- }
734
- function expected(err) {
735
- return err.expected === true;
736
- }
737
-
738
- },{}],22:[function(require,module,exports){
739
- 'use strict';
740
-
741
690
  const isOptionObject = require('is-plain-obj');
742
691
  const {
743
692
  hasOwnProperty
@@ -893,7 +842,7 @@ module.exports = function () {
893
842
  return merged._;
894
843
  };
895
844
 
896
- },{"is-plain-obj":16}],23:[function(require,module,exports){
845
+ },{"is-plain-obj":16}],22:[function(require,module,exports){
897
846
  exports.endianness = function () {
898
847
  return 'LE';
899
848
  };
@@ -943,7 +892,7 @@ exports.homedir = function () {
943
892
  return '/';
944
893
  };
945
894
 
946
- },{}],24:[function(require,module,exports){
895
+ },{}],23:[function(require,module,exports){
947
896
  'use strict';
948
897
 
949
898
  const pMapSeries = async (iterable, mapper) => {
@@ -959,29 +908,125 @@ module.exports = pMapSeries;
959
908
  // TODO: Remove this for the next major release
960
909
  module.exports.default = pMapSeries;
961
910
 
962
- },{}],25:[function(require,module,exports){
911
+ },{}],24:[function(require,module,exports){
963
912
  "use strict";
964
913
 
965
- var isError = require('iserror'); // we want to support parsing other fields than the standard:
914
+ function _createForOfIteratorHelper(o, allowArrayLike) {
915
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
916
+ if (!it) {
917
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
918
+ if (it) o = it;
919
+ var i = 0;
920
+ var F = function F() {};
921
+ return {
922
+ s: F,
923
+ n: function n() {
924
+ if (i >= o.length) return {
925
+ done: true
926
+ };
927
+ return {
928
+ done: false,
929
+ value: o[i++]
930
+ };
931
+ },
932
+ e: function e(_e) {
933
+ throw _e;
934
+ },
935
+ f: F
936
+ };
937
+ }
938
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
939
+ }
940
+ var normalCompletion = true,
941
+ didErr = false,
942
+ err;
943
+ return {
944
+ s: function s() {
945
+ it = it.call(o);
946
+ },
947
+ n: function n() {
948
+ var step = it.next();
949
+ normalCompletion = step.done;
950
+ return step;
951
+ },
952
+ e: function e(_e2) {
953
+ didErr = true;
954
+ err = _e2;
955
+ },
956
+ f: function f() {
957
+ try {
958
+ if (!normalCompletion && it.return != null) it.return();
959
+ } finally {
960
+ if (didErr) throw err;
961
+ }
962
+ }
963
+ };
964
+ }
965
+ function _unsupportedIterableToArray(o, minLen) {
966
+ if (!o) return;
967
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
968
+ var n = Object.prototype.toString.call(o).slice(8, -1);
969
+ if (n === "Object" && o.constructor) n = o.constructor.name;
970
+ if (n === "Map" || n === "Set") return Array.from(o);
971
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
972
+ }
973
+ function _arrayLikeToArray(arr, len) {
974
+ if (len == null || len > arr.length) len = arr.length;
975
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
976
+ return arr2;
977
+ }
978
+ const isError = require('iserror');
979
+
980
+ // We want to support parsing other fields than the standard:
966
981
  // <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors>
967
982
  // <https://github.com/stripe/stripe-node/blob/3c07d851cf897490d8b93dd4457dda0c4c8e667f/lib/Error.js#L33>
968
-
969
- var parseErr = function parseErr(err) {
970
- var fields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
971
- if (!isError(err)) throw new Error('`err` must be an Error');
972
- if (!Array.isArray(fields)) throw new Error('`fields` must be an Array');
973
- var keys = {};
974
- Object.getOwnPropertyNames(Object.getPrototypeOf(err)).concat(Object.getOwnPropertyNames(err)).forEach(function (key) {
975
- if (typeof err[key] !== 'function') keys[key] = err[key];
976
- });
977
- if (!keys.name && err.constructor.name) keys.name = err.constructor.name;
978
- return Array.isArray(fields) && fields.length !== 0 ? keys.filter(function (key) {
979
- return fields.includes(key);
980
- }) : keys;
983
+ const parseErr = function parseErr(err) {
984
+ let fields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
985
+ if (!isError(err)) {
986
+ throw new Error('`err` must be an Error');
987
+ }
988
+ if (!Array.isArray(fields)) {
989
+ throw new TypeError('`fields` must be an Array');
990
+ }
991
+ const keys = {};
992
+ const arr = new Set([...Object.getOwnPropertyNames(Object.getPrototypeOf(err)), ...Object.getOwnPropertyNames(err)]);
993
+ var _iterator = _createForOfIteratorHelper(arr),
994
+ _step;
995
+ try {
996
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
997
+ const key = _step.value;
998
+ if (typeof err[key] !== 'function') {
999
+ keys[key] = err[key];
1000
+ }
1001
+ }
1002
+ } catch (err) {
1003
+ _iterator.e(err);
1004
+ } finally {
1005
+ _iterator.f();
1006
+ }
1007
+ if (!keys.name && err.constructor.name) {
1008
+ keys.name = err.constructor.name;
1009
+ }
1010
+
1011
+ //
1012
+ // recursively call parseErr on err.errors if they are errors
1013
+ // this is a common approach to combine multiple errors into one error
1014
+ // and then add a property called `errors` to the err object with the array of errors
1015
+ // (e.g. packages such as `combine-errors` and `maybe-combine-errors` use this approach)
1016
+ //
1017
+ if (Array.isArray(err.errors)) {
1018
+ keys.errors = err.errors.map(e => {
1019
+ if (isError(e)) {
1020
+ return parseErr(e, fields);
1021
+ }
1022
+ return e;
1023
+ });
1024
+ }
1025
+ return Array.isArray(fields) && fields.length > 0 ? keys.filter(key => fields.includes(key)) : keys;
981
1026
  };
982
1027
  module.exports = parseErr;
983
1028
 
984
- },{"iserror":18}],26:[function(require,module,exports){
1029
+ },{"iserror":18}],25:[function(require,module,exports){
985
1030
  'use strict';
986
1031
 
987
1032
  const get = require('@strikeentco/get');
@@ -1016,7 +1061,7 @@ module.exports = function (obj, paths) {
1016
1061
  return pick(obj, paths, length, sep);
1017
1062
  };
1018
1063
 
1019
- },{"@strikeentco/get":2,"@strikeentco/set":3}],27:[function(require,module,exports){
1064
+ },{"@strikeentco/get":2,"@strikeentco/set":3}],26:[function(require,module,exports){
1020
1065
  // shim for using process in browser
1021
1066
  var process = module.exports = {};
1022
1067
 
@@ -1193,7 +1238,7 @@ process.umask = function () {
1193
1238
  return 0;
1194
1239
  };
1195
1240
 
1196
- },{}],28:[function(require,module,exports){
1241
+ },{}],27:[function(require,module,exports){
1197
1242
  /*!
1198
1243
  * unset-value <https://github.com/jonschlinkert/unset-value>
1199
1244
  *
@@ -1238,11 +1283,11 @@ module.exports = function unset(obj, prop) {
1238
1283
  return true;
1239
1284
  };
1240
1285
 
1241
- },{"has-value":14,"isobject":19}],29:[function(require,module,exports){
1286
+ },{"has-value":14,"isobject":19}],28:[function(require,module,exports){
1242
1287
  module.exports={
1243
1288
  "name": "axe",
1244
1289
  "description": "Axe is a logger-agnostic wrapper that normalizes logs regardless of argument style. Great for large development teams, old and new projects, and works with Pino, Bunyan, Winston, console, and more. It is lightweight, performant, highly-configurable, and automatically adds OS, CPU, and Git information to your logs. It supports hooks (useful for masking sensitive data) and dot-notation remapping, omitting, and picking of log metadata properties. Made for Forward Email, Lad, and Cabin.",
1245
- "version": "11.2.0",
1290
+ "version": "11.2.2",
1246
1291
  "author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)",
1247
1292
  "browser": {
1248
1293
  "parse-app-info": false
@@ -1265,43 +1310,42 @@ module.exports={
1265
1310
  "format-specifiers": "^1.0.0",
1266
1311
  "is-symbol": "^1.0.4",
1267
1312
  "iserror": "0.0.2",
1268
- "maybe-combine-errors": "1.0.0",
1269
1313
  "merge-options": "3.0.4",
1270
1314
  "p-map-series": "2",
1271
1315
  "parse-app-info": "^4.0.3",
1272
- "parse-err": "^0.0.12",
1316
+ "parse-err": "^1.0.0",
1273
1317
  "pick-deep": "1.0.0",
1274
1318
  "unset-value": "2.0.1"
1275
1319
  },
1276
1320
  "devDependencies": {
1277
- "@babel/cli": "^7.19.3",
1278
- "@babel/core": "^7.20.2",
1321
+ "@babel/cli": "^7.20.7",
1322
+ "@babel/core": "^7.20.12",
1279
1323
  "@babel/preset-env": "^7.20.2",
1280
- "@commitlint/cli": "^17.3.0",
1281
- "@commitlint/config-conventional": "^17.3.0",
1282
- "ava": "^5.1.0",
1324
+ "@commitlint/cli": "^17.4.2",
1325
+ "@commitlint/config-conventional": "^17.4.2",
1326
+ "ava": "^5.1.1",
1283
1327
  "babelify": "^10.0.0",
1284
1328
  "browserify": "^17.0.0",
1285
1329
  "consola": "^2.15.3",
1286
1330
  "cross-env": "^7.0.3",
1287
- "eslint": "^8.28.0",
1331
+ "eslint": "^8.33.0",
1288
1332
  "eslint-config-xo-lass": "^2.0.1",
1289
1333
  "eslint-plugin-compat": "^4.0.2",
1290
1334
  "eslint-plugin-node": "^11.1.0",
1291
1335
  "express": "^4.18.2",
1292
1336
  "fixpack": "^4.0.0",
1293
- "husky": "^8.0.2",
1337
+ "husky": "^8.0.3",
1294
1338
  "jsdom": "15.x",
1295
- "koa": "^2.13.4",
1296
- "lint-staged": "^13.0.4",
1339
+ "koa": "^2.14.1",
1340
+ "lint-staged": "^13.1.0",
1297
1341
  "lodash": "^4.17.21",
1298
1342
  "nyc": "^15.1.0",
1299
- "pino": "^8.7.0",
1343
+ "pino": "^8.8.0",
1300
1344
  "remark-cli": "^11.0.0",
1301
1345
  "remark-preset-github": "^4.0.4",
1302
- "rimraf": "^3.0.2",
1346
+ "rimraf": "^4.1.2",
1303
1347
  "signale": "^1.4.0",
1304
- "sinon": "^14.0.2",
1348
+ "sinon": "^15.0.1",
1305
1349
  "tinyify": "3.0.0",
1306
1350
  "xo": "^0.53.1"
1307
1351
  },
@@ -1376,14 +1420,13 @@ module.exports={
1376
1420
  "unpkg": "dist/axe.min.js"
1377
1421
  }
1378
1422
 
1379
- },{}],30:[function(require,module,exports){
1423
+ },{}],29:[function(require,module,exports){
1380
1424
  (function (process){(function (){
1381
1425
  // eslint-disable-next-line import/no-unassigned-import
1382
1426
  require('console-polyfill');
1383
1427
 
1384
1428
  // eslint-disable-next-line unicorn/prefer-node-protocol
1385
1429
  const os = require('os');
1386
- const combine = require('maybe-combine-errors');
1387
1430
  const format = require('@ladjs/format-util');
1388
1431
  const formatSpecifiers = require('format-specifiers');
1389
1432
  const get = require('@strikeentco/get');
@@ -1690,7 +1733,13 @@ class Axe {
1690
1733
  }
1691
1734
  let err;
1692
1735
  if (errors.length > 0) {
1693
- err = combine(errors);
1736
+ if (errors.length === 1) {
1737
+ err = errors[0];
1738
+ } else {
1739
+ err = new Error([...new Set(errors.map(e => e.message).filter(Boolean))].join('; '));
1740
+ err.stack = [...new Set(errors.map(e => e.stack).filter(Boolean))].join('\n\n');
1741
+ err.errors = errors;
1742
+ }
1694
1743
  meta.err = parseErr(err);
1695
1744
  if (!isString(message)) message = err.message;
1696
1745
  }
@@ -1863,5 +1912,5 @@ class Axe {
1863
1912
  module.exports = Axe;
1864
1913
 
1865
1914
  }).call(this)}).call(this,require('_process'))
1866
- },{"../package.json":29,"@ladjs/format-util":1,"@strikeentco/get":2,"@strikeentco/set":3,"_process":27,"boolean":5,"console-polyfill":8,"format-specifiers":9,"is-symbol":17,"iserror":18,"maybe-combine-errors":21,"merge-options":22,"os":23,"p-map-series":24,"parse-app-info":7,"parse-err":25,"pick-deep":26,"unset-value":28}]},{},[30])(30)
1915
+ },{"../package.json":28,"@ladjs/format-util":1,"@strikeentco/get":2,"@strikeentco/set":3,"_process":26,"boolean":5,"console-polyfill":8,"format-specifiers":9,"is-symbol":17,"iserror":18,"merge-options":21,"os":22,"p-map-series":23,"parse-app-info":7,"parse-err":24,"pick-deep":25,"unset-value":27}]},{},[29])(29)
1867
1916
  });
package/dist/axe.min.js CHANGED
@@ -1 +1 @@
1
- !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Axe=e()}}((function(){!function(e){"use strict";e.console||(e.console={});for(var t,r,n=e.console,o=function(){},i=["memory"],c="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");t=i.pop();)n[t]||(n[t]={});for(;r=c.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window);var e={hostname:function(){return"undefined"!=typeof location?location.hostname:""}};const t=Symbol("kErrors");class r extends Error{constructor(e){const r=new Set(e.map(c).filter(Boolean));super(Array.from(r).join("; ")),n(this,"name","CombinedError"),n(this,t,e),o(this,"stack",()=>e.map(s).join("\n\n")),o(this,"transient",()=>e.length>0&&e.every(f)),o(this,"expected",()=>e.length>0&&e.every(a))}[Symbol.iterator](){return this[t][Symbol.iterator]()}}function n(e,t,r){Object.defineProperty(e,t,{value:r})}function o(e,t,r){Object.defineProperty(e,t,{get:r})}function i(e){return null!=e}function c(e){return e.message}function s(e){return e.stack}function f(e){return!0===e.transient}function a(e){return!0===e.expected}var l=function(e){var t=Array.prototype.slice.call(arguments,1);return t.length&&(e=e.toString().replace(/(%?)(%([jds]))/g,(function(e,r,n,o){var i=t.shift();switch(o){case"s":i=""+i;break;case"d":i=Number(i);break;case"j":i=JSON.stringify(i)}return r?(t.unshift(i),e):i}))),t.length&&(e=e.toString()+" "+t.join(" ")),""+e.toString().replace(/%{2,2}/g,"%")},u=["%s","%d","%i","%f","%j","%o","%O","%%"],p=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(n=e,"[object Object]"!==Object.prototype.toString.call(n)||!t)return e;var n;const o=Array.isArray(t)?t:String(t).split(r),{length:i}=o;return i<2?e[o[0]]:((e,t,r)=>{for(let n=0;n<r;n++){if(null===e)return;const r=e[t[n]];if(void 0===r)return;e=r}return e})(e,o,i)},g=function(e){switch(Object.prototype.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},y="undefined"!=typeof Symbol&&Symbol,h={},b=Object.prototype.toString;if("function"==typeof y&&"function"==typeof Symbol&&"symbol"==typeof y("foo")&&"symbol"==typeof Symbol("bar")&&function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}()){var d=Symbol.prototype.toString,m=/^Symbol\(.*\)$/;h=function(e){if("symbol"==typeof e)return!0;if("[object Symbol]"!==b.call(e))return!1;try{return function(e){return"symbol"==typeof e.valueOf()&&m.test(d.call(e))}(e)}catch(t){return!1}}}else h=function(e){return!1};var v=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype};const{hasOwnProperty:O}=Object.prototype,{propertyIsEnumerable:j}=Object,A=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0}),w=this,S={concatArrays:!1,ignoreUndefined:!1},E=e=>{const t=[];for(const r in e)O.call(e,r)&&t.push(r);if(Object.getOwnPropertySymbols){const r=Object.getOwnPropertySymbols(e);for(const n of r)j.call(e,n)&&t.push(n)}return t};function _(e){return Array.isArray(e)?function(e){const t=e.slice(0,0);return E(e).forEach(r=>{A(t,r,_(e[r]))}),t}(e):v(e)?function(e){const t=null===Object.getPrototypeOf(e)?Object.create(null):{};return E(e).forEach(r=>{A(t,r,_(e[r]))}),t}(e):e}const P=(e,t,r,n)=>(r.forEach(r=>{void 0===t[r]&&n.ignoreUndefined||(r in e&&e[r]!==Object.getPrototypeOf(e)?A(e,r,T(e[r],t[r],n)):A(e,r,_(t[r])))}),e);function T(e,t,r){return r.concatArrays&&Array.isArray(e)&&Array.isArray(t)?((e,t,r)=>{let n=e.slice(0,0),o=0;return[e,t].forEach(t=>{const i=[];for(let r=0;r<t.length;r++)O.call(t,r)&&(i.push(String(r)),A(n,o++,t===e?t[r]:_(t[r])));n=P(n,t,E(t).filter(e=>!i.includes(e)),r)}),n})(e,t,r):v(t)&&v(e)?P(e,t,E(t),r):_(t)}var k={};const x=async(e,t)=>{const r=[];let n=0;for(const o of e)r.push(await t(await o,n++));return r};(k=x).default=x;var I={},L=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!g(e))throw new Error("`err` must be an Error");if(!Array.isArray(t))throw new Error("`fields` must be an Array");var r={};return Object.getOwnPropertyNames(Object.getPrototypeOf(e)).concat(Object.getOwnPropertyNames(e)).forEach((function(t){"function"!=typeof e[t]&&(r[t]=e[t])})),!r.name&&e.constructor.name&&(r.name=e.constructor.name),Array.isArray(t)&&0!==t.length?r.filter((function(e){return t.includes(e)})):r};const M=e=>"object"==typeof e||"function"==typeof e,F=(e,t)=>"__proto__"==e||"constructor"==e&&"function"==typeof t.constructor;var N=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".";if(!M(e)||!t||!t.length)return e;const o=Array.isArray(t)?t:String(t).split(n);if(F(o[0],e))return e;const{length:i}=o;return 1===i?(e[o[0]]=r,e):((e,t,r,n)=>{let o=e,i=0;for(;i<r-1;i++){const e=t[i];F(e,o)||(o=M(o[e])?o[e]:o[e]={})}return o[t[i]]=n,e})(e,o,i,r)},D=function(e){return null!=e&&"object"==typeof e&&!1===Array.isArray(e)};function C(e,t,r){return"function"==typeof r.join?r.join(e):e[0]+t+e[1]}function X(e,t,r){return"function"!=typeof r.isValid||r.isValid(e,t)}function B(e){return D(e)||Array.isArray(e)||"function"==typeof e}var H=Object.prototype.toString;function R(e){return"function"==typeof e.constructor?e.constructor.name:null}var K=function e(t){switch(function(e){if(void 0===e)return"undefined";if(null===e)return"null";var t=typeof e;if("boolean"===t)return"boolean";if("string"===t)return"string";if("number"===t)return"number";if("symbol"===t)return"symbol";if("function"===t)return"GeneratorFunction"===R(e)?"generatorfunction":"function";if(function(e){return Array.isArray?Array.isArray(e):e instanceof Array}(e))return"array";if(function(e){return!(!e.constructor||"function"!=typeof e.constructor.isBuffer)&&e.constructor.isBuffer(e)}(e))return"buffer";if(function(e){try{if("number"==typeof e.length&&"function"==typeof e.callee)return!0}catch(t){if(-1!==t.message.indexOf("callee"))return!0}return!1}(e))return"arguments";if(function(e){return e instanceof Date||"function"==typeof e.toDateString&&"function"==typeof e.getDate&&"function"==typeof e.setDate}(e))return"date";if(function(e){return e instanceof Error||"string"==typeof e.message&&e.constructor&&"number"==typeof e.constructor.stackTraceLimit}(e))return"error";if(function(e){return e instanceof RegExp||"string"==typeof e.flags&&"boolean"==typeof e.ignoreCase&&"boolean"==typeof e.multiline&&"boolean"==typeof e.global}(e))return"regexp";switch(R(e)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(e){return"function"==typeof e.throw&&"function"==typeof e.return&&"function"==typeof e.next}(e))return"generator";switch(t=H.call(e)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return t.slice(8,-1).toLowerCase().replace(/\s/g,"")}(t)){case"boolean":case"date":case"function":case"null":case"number":return!0;case"undefined":return!1;case"regexp":return"(?:)"!==t.source&&""!==t.source;case"buffer":return""!==t.toString();case"error":return""!==t.message;case"string":case"arguments":return 0!==t.length;case"file":case"map":case"set":return 0!==t.size;case"array":case"object":for(const r of Object.keys(t))if(e(t[r]))return!0;return!1;default:return!0}},U=function(e,t,r){return!(null==(n=e)||"object"!=typeof n&&"function"!=typeof n&&!Array.isArray(n)||"string"!=typeof t&&!Array.isArray(t))&&K(function(e,t,r){if(D(r)||(r={default:r}),!B(e))return void 0!==r.default?r.default:e;"number"==typeof t&&(t=String(t));const n=Array.isArray(t),o="string"==typeof t,i=r.separator||".",c=r.joinChar||("string"==typeof i?i:".");if(!o&&!n)return e;if(o&&t in e)return X(t,e,r)?e[t]:r.default;let s=n?t:function(e,t,r){return"function"==typeof r.split?r.split(e):e.split(t)}(t,i,r),f=s.length,a=0;do{let t=s[a];for("number"==typeof t&&(t=String(t));t&&"\\"===t.slice(-1);)t=C([t.slice(0,-1),s[++a]||""],c,r);if(t in e){if(!X(t,e,r))return r.default;e=e[t]}else{let n=!1,o=a+1;for(;o<f;)if(n=(t=C([t,s[o++]],c,r))in e){if(!X(t,e,r))return r.default;e=e[t],a=o-1;break}if(!n)return r.default}}while(++a<f&&B(e));return a===f?e:r.default}(e,t,r));var n};const W=e=>{if((e=>"__proto__"===e||"constructor"===e||"prototype"===e)(e))throw new Error(`Cannot set unsafe key: "${e}"`)};var z=function(e,t){if(null==(r=e)||"object"!=typeof r||!1!==Array.isArray(r))throw new TypeError("expected an object.");var r,n=Array.isArray(t);if(!n&&e.hasOwnProperty(t))return delete e[t],!0;if(U(e,t)){for(var o=n?t.slice():t.split("."),i=o.pop();o.length&&"\\"===o[o.length-1].slice(-1);)i=o.pop().slice(0,-1)+"."+i;for(;o.length;)t=o.shift(),W(t),e=e[t];return delete e[i]}return!0},V={};Object.defineProperty(V,"__esModule",{value:!0}),V.boolean=void 0,V.boolean=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());case"[object Number]":return 1===e.valueOf();case"[object Boolean]":return e.valueOf();default:return!1}};var $={};Object.defineProperty($,"__esModule",{value:!0}),$.isBooleanable=void 0,$.isBooleanable=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1","false","f","no","n","off","0"].includes(e.trim().toLowerCase());case"[object Number]":return[0,1].includes(e.valueOf());case"[object Boolean]":return!0;default:return!1}};var G={};Object.defineProperty(G,"__esModule",{value:!0}),G.boolean=void 0,Object.defineProperty(G,"boolean",{enumerable:!0,get:function(){return V.boolean}}),Object.defineProperty(G,"isBooleanable",{enumerable:!0,get:function(){return $.isBooleanable}});var J,q,Q,Y="11.2.0",Z=J={};function ee(){throw new Error("setTimeout has not been defined")}function te(){throw new Error("clearTimeout has not been defined")}function re(e){if(q===setTimeout)return setTimeout(e,0);if((q===ee||!q)&&setTimeout)return q=setTimeout,setTimeout(e,0);try{return q(e,0)}catch(t){try{return q.call(null,e,0)}catch(t){return q.call(this,e,0)}}}!function(){try{q="function"==typeof setTimeout?setTimeout:ee}catch(e){q=ee}try{Q="function"==typeof clearTimeout?clearTimeout:te}catch(e){Q=te}}();var ne,oe=[],ie=!1,ce=-1;function se(){ie&&ne&&(ie=!1,ne.length?oe=ne.concat(oe):ce=-1,oe.length&&fe())}function fe(){if(!ie){var e=re(se);ie=!0;for(var t=oe.length;t;){for(ne=oe,oe=[];++ce<t;)ne&&ne[ce].run();ce=-1,t=oe.length}ne=null,ie=!1,function(e){if(Q===clearTimeout)return clearTimeout(e);if((Q===te||!Q)&&clearTimeout)return Q=clearTimeout,clearTimeout(e);try{Q(e)}catch(t){try{return Q.call(null,e)}catch(t){return Q.call(this,e)}}}(e)}}function ae(e,t){this.fun=e,this.array=t}function le(){}Z.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];oe.push(new ae(e,t)),1!==oe.length||ie||re(fe)},ae.prototype.run=function(){this.fun.apply(null,this.array)},Z.title="browser",Z.browser=!0,Z.env={},Z.argv=[],Z.version="",Z.versions={},Z.on=le,Z.addListener=le,Z.once=le,Z.off=le,Z.removeListener=le,Z.removeAllListeners=le,Z.emit=le,Z.prependListener=le,Z.prependOnceListener=le,Z.listeners=function(e){return[]},Z.binding=function(e){throw new Error("process.binding is not supported")},Z.cwd=function(){return"/"},Z.chdir=function(e){throw new Error("process.chdir is not supported")},Z.umask=function(){return 0};var ue={};return function(t){(function(){const{boolean:n}=G,o=Symbol.for("axe.silent"),c=new Set(["config","log"]),s=["trace","debug","info","warn","error","fatal"],f={warning:"warn",err:"error"},a="`level` invalid, must be: "+s.join(", "),y=t.env.HOSTNAME||e.hostname();function b(e){if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e||h(e))}function d(e){return null==e||"object"==typeof e&&0===Reflect.ownKeys(e).length||"string"==typeof e&&0===e.trim().length}function m(e){return void 0===e}function O(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function j(e){return"string"==typeof e}ue=class{constructor(){var e=this;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const o={};if(t.env.AXE_REMAPPED_META_FIELDS){const e=t.env.AXE_REMAPPED_META_FIELDS.split(",").map(e=>e.split(":"));for(const[t,r]of e)o[t]=r}let i=t.env.AXE_OMIT_META_FIELDS;"string"==typeof i&&(i=i.split(",").map(e=>e.trim())),Array.isArray(i)||(i=[]);let f=t.env.AXE_PICK_META_FIELDS;"string"==typeof f&&(f=f.split(",").map(e=>e.trim())),Array.isArray(f)||(f=[]),this.config=function(){const e=T(_(S),this!==w&&this||{},S);let t={_:{}};for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];for(const i of n)if(void 0!==i){if(!v(i))throw new TypeError("`"+i+"` is not an Option Object");t=T(t,{_:i},e)}return t._}({showStack:!t.env.AXE_SHOW_STACK||n(t.env.AXE_SHOW_STACK),meta:Object.assign({show:!t.env.AXE_SHOW_META||n(t.env.AXE_SHOW_META),remappedFields:o,omittedFields:i,pickedFields:f,cleanupRemapping:!0,hideHTTP:"is_http",hideMeta:"hide_meta"},"object"==typeof r.meta?r.meta:{}),version:Y,silent:!1,logger:console,name:y,level:"info",levels:["info","warn","error","fatal"],appInfo:!t.env.AXE_APP_INFO||n(t.env.AXE_APP_INFO),hooks:Object.assign({pre:[],post:[]},"object"==typeof r.hooks?r.hooks:{})},r),this.appInfo=!!this.config.appInfo&&"function"==typeof I&&I(),this.log=this.log.bind(this);const a=Object.keys(this.config.logger).filter(e=>!c.has(e));for(const t of a)this[t]=this.config.logger[t];for(const t of s)"function"!=typeof this.config.logger[t]&&("fatal"===t?this.config.logger.fatal=this.config.logger.error||this.config.logger.info||this.config.logger.log:this.config.logger[t]=this.config.logger.info||this.config.logger.log),this[t]=function(){for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return e.log(t,...Array.prototype.slice.call(n))};this.setLevel=this.setLevel.bind(this),this.getNormalizedLevel=this.getNormalizedLevel.bind(this),this.setName=this.setName.bind(this),this.config.name&&this.setName(this.config.name),this.setLevel(this.config.level),this.err=this.error,this.warning=this.warn,this.pre=function(e,t){this.config.hooks.pre.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))},this.post=function(e,t){this.config.hooks.post.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))}}setLevel(e){if(!j(e)||-1===s.indexOf(e))throw new Error(a);j(this.config.logger.logLevel)?this.config.logger.logLevel=e:this.config.logger.level=e,this.config.levels=s.slice(s.indexOf(e))}getNormalizedLevel(e){return j(e)?j(f[e])?f[e]:-1===s.indexOf(e)?"info":e:"info"}setName(e){if(!j(e))throw new Error("`name` must be a String");j(this.config.logger.scope)?this.config.logger.scope=e:this.config.logger.name=e}log(e,t,c){const a=[],y=[];m(e)||a.push(e),m(t)||a.push(t),m(c)||a.push(c);for(var v=arguments.length,A=new Array(v>3?v-3:0),w=3;w<v;w++)A[w-3]=arguments[w];for(const r of Array.prototype.slice.call(A))a.push(r);let S=0;if(j(e)&&j(f[e])?e=f[e]:g(e)?(c=t,t=e,e="error"):j(e)&&-1!==s.indexOf(e)||(c=t,t=e,e=this.getNormalizedLevel(e),S=-1),-1===this.config.levels.indexOf(e))return;let E,_=!1;if((O(t)||Array.isArray(t))&&j(c)){_=!0;const e=c;c=t,t=j(e)&&a.length>=3+S?l(...a.slice(2+S)):e}if(m(t)&&(t=e),1!==a.slice(1+S).length||j(t)||g(t))if(!_&&a.length>=4+S){t=void 0,c={};const r=[];for(const e of a)g(e)?y.push(e):j(e)&&r.push(e);0===y.length&&r.length>0?t=l(...r):y.length>0&&"log"===e&&(e="error")}else if(!_&&a.length===3+S&&j(t)&&u.some(e=>-1!==t.indexOf(e)))t=l(t,c),c={};else if(g(t)){if(g(c)){y.push(c);for(const e of a.slice(2+S))c!==e&&g(e)&&y.push(e);c={}}}else g(c)?(y.push(c),c={}):O(c)||m(c)||null===c?j(t)||(t=l(t)):(t=l(t,c),c={});else c={message:t},t=e;m(c)||O(c)?O(c)||(c={}):c={original_meta:c},g(t)&&(y.unshift(t),t=void 0),O(c.err)&&(g(c.err)&&y.push(c.err),c.original_err=g(c.err)?L(c.err):c.err),y.length>0&&(E=function(e){if(0!==(e=e.filter(i)).length)return 1===e.length?e[0]:new r(e)}(y),c.err=L(E),j(t)||(t=E.message)),c.level=e,this.appInfo&&(c.app=this.appInfo);const P=-1===S?"log":e;for(const r of this.config.hooks.pre)[E,t,c]=r(P,E,t,c);const T=n(c[o]);if(!d(this.config.meta.remappedFields))for(const r of Reflect.ownKeys(this.config.meta.remappedFields))if(N(c,this.config.meta.remappedFields[r],p(c,r)),z(c,r),this.config.meta.cleanupRemapping){const e=r.lastIndexOf(".");if(-1===e)continue;const t=r.slice(0,e);d(p(c,t))&&z(c,t)}if(!d(this.config.meta.omittedFields)||!d(this.config.meta.pickedFields)){const e=function(e){const t=[];return function e(r,n){for(const o of Reflect.ownKeys(r)){const i=r[o],c=n?n+"."+o:o;b(i)?e(i,c):t.push(c)}}(e),t}(c);if(!d(this.config.meta.omittedFields))for(const r of this.config.meta.omittedFields){let t=e.length;for(;t--;)(e[t]===r||!h(e[t])&&0===e[t].indexOf(r+"."))&&e.splice(t,1)}const t=[];if(!d(this.config.meta.pickedFields))for(const r of this.config.meta.pickedFields){if(h(r))c[r]&&t.push([r,c[r]]);else{const t=r.indexOf("."),n=r.slice(0,t+1);if(-1!==t){let t=e.length;for(;t--;)h(e[t])||0!==e[t].indexOf(n)||e.splice(t,1)}}-1===e.indexOf(r)&&e.push(r)}for(const r of e)h(r)&&c[r]&&t.push([r,c[r]]);if(c=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(n=e,"[object Object]"!==Object.prototype.toString.call(n)||!t||!Array.isArray(t)&&"string"!=typeof t)return{};var n;const{length:o}=t;if("string"==typeof t||o<2){const n="string"==typeof t?t:t[0],o=p(e,n,r);return void 0!==o?N({},n,o,r):{}}return((e,t,r,n)=>{const o={};for(let i=0;i<r;i++){const r=t[i],c=p(e,r,n);void 0!==c&&N(o,r,c,n)}return o})(e,t,o,r)}(c,e),t.length>0)for(const[r,n]of t)c[r]=n}this.config.silent||T||(g(E)&&this.config.showStack?!this.config.meta.show||d(c)||this.config.meta.hideMeta&&c[this.config.meta.hideMeta]?this.config.logger[P](E):this.config.logger[P](E,c):!this.config.meta.show||d(c)||this.config.meta.hideMeta&&c[this.config.meta.hideMeta]||this.config.meta.hideHTTP&&c[this.config.meta.hideHTTP]?this.config.logger[P](t):this.config.logger[P](t,c)),k(this.config.hooks.post,e=>e(P,E,t,c)).then().catch(e=>{this.config.logger.error(e)})}}}).call(this)}.call(this,J),ue}));
1
+ !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Axe=e()}}((function(){!function(e){"use strict";e.console||(e.console={});for(var t,r,n=e.console,o=function(){},i=["memory"],c="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");t=i.pop();)n[t]||(n[t]={});for(;r=c.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window);var e={hostname:function(){return"undefined"!=typeof location?location.hostname:""}},t=function(e){var t=Array.prototype.slice.call(arguments,1);return t.length&&(e=e.toString().replace(/(%?)(%([jds]))/g,(function(e,r,n,o){var i=t.shift();switch(o){case"s":i=""+i;break;case"d":i=Number(i);break;case"j":i=JSON.stringify(i)}return r?(t.unshift(i),e):i}))),t.length&&(e=e.toString()+" "+t.join(" ")),""+e.toString().replace(/%{2,2}/g,"%")},r=["%s","%d","%i","%f","%j","%o","%O","%%"],n=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(n=e,"[object Object]"!==Object.prototype.toString.call(n)||!t)return e;var n;const o=Array.isArray(t)?t:String(t).split(r),{length:i}=o;return i<2?e[o[0]]:((e,t,r)=>{for(let n=0;n<r;n++){if(null===e)return;const r=e[t[n]];if(void 0===r)return;e=r}return e})(e,o,i)},o=function(e){switch(Object.prototype.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},i="undefined"!=typeof Symbol&&Symbol,c={},s=Object.prototype.toString;if("function"==typeof i&&"function"==typeof Symbol&&"symbol"==typeof i("foo")&&"symbol"==typeof Symbol("bar")&&function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}()){var a=Symbol.prototype.toString,f=/^Symbol\(.*\)$/;c=function(e){if("symbol"==typeof e)return!0;if("[object Symbol]"!==s.call(e))return!1;try{return function(e){return"symbol"==typeof e.valueOf()&&f.test(a.call(e))}(e)}catch(t){return!1}}}else c=function(e){return!1};var l=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype};const{hasOwnProperty:u}=Object.prototype,{propertyIsEnumerable:p}=Object,g=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0}),y=this,h={concatArrays:!1,ignoreUndefined:!1},d=e=>{const t=[];for(const r in e)u.call(e,r)&&t.push(r);if(Object.getOwnPropertySymbols){const r=Object.getOwnPropertySymbols(e);for(const n of r)p.call(e,n)&&t.push(n)}return t};function b(e){return Array.isArray(e)?function(e){const t=e.slice(0,0);return d(e).forEach(r=>{g(t,r,b(e[r]))}),t}(e):l(e)?function(e){const t=null===Object.getPrototypeOf(e)?Object.create(null):{};return d(e).forEach(r=>{g(t,r,b(e[r]))}),t}(e):e}const m=(e,t,r,n)=>(r.forEach(r=>{void 0===t[r]&&n.ignoreUndefined||(r in e&&e[r]!==Object.getPrototypeOf(e)?g(e,r,v(e[r],t[r],n)):g(e,r,b(t[r])))}),e);function v(e,t,r){return r.concatArrays&&Array.isArray(e)&&Array.isArray(t)?((e,t,r)=>{let n=e.slice(0,0),o=0;return[e,t].forEach(t=>{const i=[];for(let r=0;r<t.length;r++)u.call(t,r)&&(i.push(String(r)),g(n,o++,t===e?t[r]:b(t[r])));n=m(n,t,d(t).filter(e=>!i.includes(e)),r)}),n})(e,t,r):l(t)&&l(e)?m(e,t,d(t),r):b(t)}var O={};const A=async(e,t)=>{const r=[];let n=0;for(const o of e)r.push(await t(await o,n++));return r};(O=A).default=A;var j={};function w(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return S(e,void 0);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(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?S(e,void 0):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,c=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return c=e.done,e},e:function(e){s=!0,i=e},f:function(){try{c||null==r.return||r.return()}finally{if(s)throw i}}}}function S(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}var E=function e(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!o(t))throw new Error("`err` must be an Error");if(!Array.isArray(r))throw new TypeError("`fields` must be an Array");const n={};var i,c=w(new Set([...Object.getOwnPropertyNames(Object.getPrototypeOf(t)),...Object.getOwnPropertyNames(t)]));try{for(c.s();!(i=c.n()).done;){const e=i.value;"function"!=typeof t[e]&&(n[e]=t[e])}}catch(t){c.e(t)}finally{c.f()}return!n.name&&t.constructor.name&&(n.name=t.constructor.name),Array.isArray(t.errors)&&(n.errors=t.errors.map(t=>o(t)?e(t,r):t)),Array.isArray(r)&&r.length>0?n.filter(e=>r.includes(e)):n};const _=e=>"object"==typeof e||"function"==typeof e,T=(e,t)=>"__proto__"==e||"constructor"==e&&"function"==typeof t.constructor;var P=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".";if(!_(e)||!t||!t.length)return e;const o=Array.isArray(t)?t:String(t).split(n);if(T(o[0],e))return e;const{length:i}=o;return 1===i?(e[o[0]]=r,e):((e,t,r,n)=>{let o=e,i=0;for(;i<r-1;i++){const e=t[i];T(e,o)||(o=_(o[e])?o[e]:o[e]={})}return o[t[i]]=n,e})(e,o,i,r)},k=function(e){return null!=e&&"object"==typeof e&&!1===Array.isArray(e)};function x(e,t,r){return"function"==typeof r.join?r.join(e):e[0]+t+e[1]}function I(e,t,r){return"function"!=typeof r.isValid||r.isValid(e,t)}function L(e){return k(e)||Array.isArray(e)||"function"==typeof e}var M=Object.prototype.toString;function F(e){return"function"==typeof e.constructor?e.constructor.name:null}var N=function e(t){switch(function(e){if(void 0===e)return"undefined";if(null===e)return"null";var t=typeof e;if("boolean"===t)return"boolean";if("string"===t)return"string";if("number"===t)return"number";if("symbol"===t)return"symbol";if("function"===t)return"GeneratorFunction"===F(e)?"generatorfunction":"function";if(function(e){return Array.isArray?Array.isArray(e):e instanceof Array}(e))return"array";if(function(e){return!(!e.constructor||"function"!=typeof e.constructor.isBuffer)&&e.constructor.isBuffer(e)}(e))return"buffer";if(function(e){try{if("number"==typeof e.length&&"function"==typeof e.callee)return!0}catch(t){if(-1!==t.message.indexOf("callee"))return!0}return!1}(e))return"arguments";if(function(e){return e instanceof Date||"function"==typeof e.toDateString&&"function"==typeof e.getDate&&"function"==typeof e.setDate}(e))return"date";if(function(e){return e instanceof Error||"string"==typeof e.message&&e.constructor&&"number"==typeof e.constructor.stackTraceLimit}(e))return"error";if(function(e){return e instanceof RegExp||"string"==typeof e.flags&&"boolean"==typeof e.ignoreCase&&"boolean"==typeof e.multiline&&"boolean"==typeof e.global}(e))return"regexp";switch(F(e)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(e){return"function"==typeof e.throw&&"function"==typeof e.return&&"function"==typeof e.next}(e))return"generator";switch(t=M.call(e)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return t.slice(8,-1).toLowerCase().replace(/\s/g,"")}(t)){case"boolean":case"date":case"function":case"null":case"number":return!0;case"undefined":return!1;case"regexp":return"(?:)"!==t.source&&""!==t.source;case"buffer":return""!==t.toString();case"error":return""!==t.message;case"string":case"arguments":return 0!==t.length;case"file":case"map":case"set":return 0!==t.size;case"array":case"object":for(const r of Object.keys(t))if(e(t[r]))return!0;return!1;default:return!0}},D=function(e,t,r){return!(null==(n=e)||"object"!=typeof n&&"function"!=typeof n&&!Array.isArray(n)||"string"!=typeof t&&!Array.isArray(t))&&N(function(e,t,r){if(k(r)||(r={default:r}),!L(e))return void 0!==r.default?r.default:e;"number"==typeof t&&(t=String(t));const n=Array.isArray(t),o="string"==typeof t,i=r.separator||".",c=r.joinChar||("string"==typeof i?i:".");if(!o&&!n)return e;if(o&&t in e)return I(t,e,r)?e[t]:r.default;let s=n?t:function(e,t,r){return"function"==typeof r.split?r.split(e):e.split(t)}(t,i,r),a=s.length,f=0;do{let t=s[f];for("number"==typeof t&&(t=String(t));t&&"\\"===t.slice(-1);)t=x([t.slice(0,-1),s[++f]||""],c,r);if(t in e){if(!I(t,e,r))return r.default;e=e[t]}else{let n=!1,o=f+1;for(;o<a;)if(n=(t=x([t,s[o++]],c,r))in e){if(!I(t,e,r))return r.default;e=e[t],f=o-1;break}if(!n)return r.default}}while(++f<a&&L(e));return f===a?e:r.default}(e,t,r));var n};const C=e=>{if((e=>"__proto__"===e||"constructor"===e||"prototype"===e)(e))throw new Error(`Cannot set unsafe key: "${e}"`)};var B=function(e,t){if(null==(r=e)||"object"!=typeof r||!1!==Array.isArray(r))throw new TypeError("expected an object.");var r,n=Array.isArray(t);if(!n&&e.hasOwnProperty(t))return delete e[t],!0;if(D(e,t)){for(var o=n?t.slice():t.split("."),i=o.pop();o.length&&"\\"===o[o.length-1].slice(-1);)i=o.pop().slice(0,-1)+"."+i;for(;o.length;)t=o.shift(),C(t),e=e[t];return delete e[i]}return!0},X={};Object.defineProperty(X,"__esModule",{value:!0}),X.boolean=void 0,X.boolean=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());case"[object Number]":return 1===e.valueOf();case"[object Boolean]":return e.valueOf();default:return!1}};var H={};Object.defineProperty(H,"__esModule",{value:!0}),H.isBooleanable=void 0,H.isBooleanable=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1","false","f","no","n","off","0"].includes(e.trim().toLowerCase());case"[object Number]":return[0,1].includes(e.valueOf());case"[object Boolean]":return!0;default:return!1}};var R={};Object.defineProperty(R,"__esModule",{value:!0}),R.boolean=void 0,Object.defineProperty(R,"boolean",{enumerable:!0,get:function(){return X.boolean}}),Object.defineProperty(R,"isBooleanable",{enumerable:!0,get:function(){return H.isBooleanable}});var U,K,W,z="11.2.2",$=U={};function V(){throw new Error("setTimeout has not been defined")}function G(){throw new Error("clearTimeout has not been defined")}function J(e){if(K===setTimeout)return setTimeout(e,0);if((K===V||!K)&&setTimeout)return K=setTimeout,setTimeout(e,0);try{return K(e,0)}catch(t){try{return K.call(null,e,0)}catch(t){return K.call(this,e,0)}}}!function(){try{K="function"==typeof setTimeout?setTimeout:V}catch(e){K=V}try{W="function"==typeof clearTimeout?clearTimeout:G}catch(e){W=G}}();var q,Q=[],Y=!1,Z=-1;function ee(){Y&&q&&(Y=!1,q.length?Q=q.concat(Q):Z=-1,Q.length&&te())}function te(){if(!Y){var e=J(ee);Y=!0;for(var t=Q.length;t;){for(q=Q,Q=[];++Z<t;)q&&q[Z].run();Z=-1,t=Q.length}q=null,Y=!1,function(e){if(W===clearTimeout)return clearTimeout(e);if((W===G||!W)&&clearTimeout)return W=clearTimeout,clearTimeout(e);try{W(e)}catch(t){try{return W.call(null,e)}catch(t){return W.call(this,e)}}}(e)}}function re(e,t){this.fun=e,this.array=t}function ne(){}$.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];Q.push(new re(e,t)),1!==Q.length||Y||J(te)},re.prototype.run=function(){this.fun.apply(null,this.array)},$.title="browser",$.browser=!0,$.env={},$.argv=[],$.version="",$.versions={},$.on=ne,$.addListener=ne,$.once=ne,$.off=ne,$.removeListener=ne,$.removeAllListeners=ne,$.emit=ne,$.prependListener=ne,$.prependOnceListener=ne,$.listeners=function(e){return[]},$.binding=function(e){throw new Error("process.binding is not supported")},$.cwd=function(){return"/"},$.chdir=function(e){throw new Error("process.chdir is not supported")},$.umask=function(){return 0};var oe={};return function(i){(function(){const{boolean:s}=R,a=Symbol.for("axe.silent"),f=new Set(["config","log"]),u=["trace","debug","info","warn","error","fatal"],p={warning:"warn",err:"error"},g="`level` invalid, must be: "+u.join(", "),d=i.env.HOSTNAME||e.hostname();function m(e){if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e||c(e))}function A(e){return null==e||"object"==typeof e&&0===Reflect.ownKeys(e).length||"string"==typeof e&&0===e.trim().length}function w(e){return void 0===e}function S(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function _(e){return"string"==typeof e}oe=class{constructor(){var e=this;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r={};if(i.env.AXE_REMAPPED_META_FIELDS){const e=i.env.AXE_REMAPPED_META_FIELDS.split(",").map(e=>e.split(":"));for(const[t,n]of e)r[t]=n}let n=i.env.AXE_OMIT_META_FIELDS;"string"==typeof n&&(n=n.split(",").map(e=>e.trim())),Array.isArray(n)||(n=[]);let o=i.env.AXE_PICK_META_FIELDS;"string"==typeof o&&(o=o.split(",").map(e=>e.trim())),Array.isArray(o)||(o=[]),this.config=function(){const e=v(b(h),this!==y&&this||{},h);let t={_:{}};for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];for(const i of n)if(void 0!==i){if(!l(i))throw new TypeError("`"+i+"` is not an Option Object");t=v(t,{_:i},e)}return t._}({showStack:!i.env.AXE_SHOW_STACK||s(i.env.AXE_SHOW_STACK),meta:Object.assign({show:!i.env.AXE_SHOW_META||s(i.env.AXE_SHOW_META),remappedFields:r,omittedFields:n,pickedFields:o,cleanupRemapping:!0,hideHTTP:"is_http",hideMeta:"hide_meta"},"object"==typeof t.meta?t.meta:{}),version:z,silent:!1,logger:console,name:d,level:"info",levels:["info","warn","error","fatal"],appInfo:!i.env.AXE_APP_INFO||s(i.env.AXE_APP_INFO),hooks:Object.assign({pre:[],post:[]},"object"==typeof t.hooks?t.hooks:{})},t),this.appInfo=!!this.config.appInfo&&"function"==typeof j&&j(),this.log=this.log.bind(this);const c=Object.keys(this.config.logger).filter(e=>!f.has(e));for(const i of c)this[i]=this.config.logger[i];for(const i of u)"function"!=typeof this.config.logger[i]&&("fatal"===i?this.config.logger.fatal=this.config.logger.error||this.config.logger.info||this.config.logger.log:this.config.logger[i]=this.config.logger.info||this.config.logger.log),this[i]=function(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return e.log(i,...Array.prototype.slice.call(r))};this.setLevel=this.setLevel.bind(this),this.getNormalizedLevel=this.getNormalizedLevel.bind(this),this.setName=this.setName.bind(this),this.config.name&&this.setName(this.config.name),this.setLevel(this.config.level),this.err=this.error,this.warning=this.warn,this.pre=function(e,t){this.config.hooks.pre.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))},this.post=function(e,t){this.config.hooks.post.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))}}setLevel(e){if(!_(e)||-1===u.indexOf(e))throw new Error(g);_(this.config.logger.logLevel)?this.config.logger.logLevel=e:this.config.logger.level=e,this.config.levels=u.slice(u.indexOf(e))}getNormalizedLevel(e){return _(e)?_(p[e])?p[e]:-1===u.indexOf(e)?"info":e:"info"}setName(e){if(!_(e))throw new Error("`name` must be a String");_(this.config.logger.scope)?this.config.logger.scope=e:this.config.logger.name=e}log(e,i,f){const l=[],g=[];w(e)||l.push(e),w(i)||l.push(i),w(f)||l.push(f);for(var y=arguments.length,h=new Array(y>3?y-3:0),d=3;d<y;d++)h[d-3]=arguments[d];for(const t of Array.prototype.slice.call(h))l.push(t);let b=0;if(_(e)&&_(p[e])?e=p[e]:o(e)?(f=i,i=e,e="error"):_(e)&&-1!==u.indexOf(e)||(f=i,i=e,e=this.getNormalizedLevel(e),b=-1),-1===this.config.levels.indexOf(e))return;let v,j=!1;if((S(i)||Array.isArray(i))&&_(f)){j=!0;const e=f;f=i,i=_(e)&&l.length>=3+b?t(...l.slice(2+b)):e}if(w(i)&&(i=e),1!==l.slice(1+b).length||_(i)||o(i))if(!j&&l.length>=4+b){i=void 0,f={};const r=[];for(const e of l)o(e)?g.push(e):_(e)&&r.push(e);0===g.length&&r.length>0?i=t(...r):g.length>0&&"log"===e&&(e="error")}else if(!j&&l.length===3+b&&_(i)&&r.some(e=>-1!==i.indexOf(e)))i=t(i,f),f={};else if(o(i)){if(o(f)){g.push(f);for(const e of l.slice(2+b))f!==e&&o(e)&&g.push(e);f={}}}else o(f)?(g.push(f),f={}):S(f)||w(f)||null===f?_(i)||(i=t(i)):(i=t(i,f),f={});else f={message:i},i=e;w(f)||S(f)?S(f)||(f={}):f={original_meta:f},o(i)&&(g.unshift(i),i=void 0),S(f.err)&&(o(f.err)&&g.push(f.err),f.original_err=o(f.err)?E(f.err):f.err),g.length>0&&(1===g.length?v=g[0]:((v=new Error([...new Set(g.map(e=>e.message).filter(Boolean))].join("; "))).stack=[...new Set(g.map(e=>e.stack).filter(Boolean))].join("\n\n"),v.errors=g),f.err=E(v),_(i)||(i=v.message)),f.level=e,this.appInfo&&(f.app=this.appInfo);const T=-1===b?"log":e;for(const t of this.config.hooks.pre)[v,i,f]=t(T,v,i,f);const k=s(f[a]);if(!A(this.config.meta.remappedFields))for(const t of Reflect.ownKeys(this.config.meta.remappedFields))if(P(f,this.config.meta.remappedFields[t],n(f,t)),B(f,t),this.config.meta.cleanupRemapping){const e=t.lastIndexOf(".");if(-1===e)continue;const r=t.slice(0,e);A(n(f,r))&&B(f,r)}if(!A(this.config.meta.omittedFields)||!A(this.config.meta.pickedFields)){const e=function(e){const t=[];return function e(r,n){for(const o of Reflect.ownKeys(r)){const i=r[o],c=n?n+"."+o:o;m(i)?e(i,c):t.push(c)}}(e),t}(f);if(!A(this.config.meta.omittedFields))for(const r of this.config.meta.omittedFields){let t=e.length;for(;t--;)(e[t]===r||!c(e[t])&&0===e[t].indexOf(r+"."))&&e.splice(t,1)}const t=[];if(!A(this.config.meta.pickedFields))for(const r of this.config.meta.pickedFields){if(c(r))f[r]&&t.push([r,f[r]]);else{const t=r.indexOf("."),n=r.slice(0,t+1);if(-1!==t){let t=e.length;for(;t--;)c(e[t])||0!==e[t].indexOf(n)||e.splice(t,1)}}-1===e.indexOf(r)&&e.push(r)}for(const r of e)c(r)&&f[r]&&t.push([r,f[r]]);if(f=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(o=e,"[object Object]"!==Object.prototype.toString.call(o)||!t||!Array.isArray(t)&&"string"!=typeof t)return{};var o;const{length:i}=t;if("string"==typeof t||i<2){const o="string"==typeof t?t:t[0],i=n(e,o,r);return void 0!==i?P({},o,i,r):{}}return((e,t,r,o)=>{const i={};for(let c=0;c<r;c++){const r=t[c],s=n(e,r,o);void 0!==s&&P(i,r,s,o)}return i})(e,t,i,r)}(f,e),t.length>0)for(const[r,n]of t)f[r]=n}this.config.silent||k||(o(v)&&this.config.showStack?!this.config.meta.show||A(f)||this.config.meta.hideMeta&&f[this.config.meta.hideMeta]?this.config.logger[T](v):this.config.logger[T](v,f):!this.config.meta.show||A(f)||this.config.meta.hideMeta&&f[this.config.meta.hideMeta]||this.config.meta.hideHTTP&&f[this.config.meta.hideHTTP]?this.config.logger[T](i):this.config.logger[T](i,f)),O(this.config.hooks.post,e=>e(T,v,i,f)).then().catch(e=>{this.config.logger.error(e)})}}}).call(this)}.call(this,U),oe}));
package/lib/index.js CHANGED
@@ -5,7 +5,6 @@ require('console-polyfill');
5
5
 
6
6
  // eslint-disable-next-line unicorn/prefer-node-protocol
7
7
  const os = require('os');
8
- const combine = require('maybe-combine-errors');
9
8
  const format = require('@ladjs/format-util');
10
9
  const formatSpecifiers = require('format-specifiers');
11
10
  const get = require('@strikeentco/get');
@@ -312,7 +311,13 @@ class Axe {
312
311
  }
313
312
  let err;
314
313
  if (errors.length > 0) {
315
- err = combine(errors);
314
+ if (errors.length === 1) {
315
+ err = errors[0];
316
+ } else {
317
+ err = new Error([...new Set(errors.map(e => e.message).filter(Boolean))].join('; '));
318
+ err.stack = [...new Set(errors.map(e => e.stack).filter(Boolean))].join('\n\n');
319
+ err.errors = errors;
320
+ }
316
321
  meta.err = parseErr(err);
317
322
  if (!isString(message)) message = err.message;
318
323
  }
@@ -483,4 +488,4 @@ class Axe {
483
488
  }
484
489
  }
485
490
  module.exports = Axe;
486
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwib3MiLCJjb21iaW5lIiwiZm9ybWF0IiwiZm9ybWF0U3BlY2lmaWVycyIsImdldCIsImlzRXJyb3IiLCJpc1N5bWJvbCIsIm1lcmdlT3B0aW9ucyIsInBNYXBTZXJpZXMiLCJwYXJzZUFwcEluZm8iLCJwYXJzZUVyciIsInBpY2tEZWVwIiwic2V0IiwidW5zZXQiLCJib29sZWFuIiwicGtnIiwic2lsZW50U3ltYm9sIiwiU3ltYm9sIiwiZm9yIiwib21pdHRlZExvZ2dlcktleXMiLCJTZXQiLCJsZXZlbHMiLCJhbGlhc2VzIiwid2FybmluZyIsImVyciIsImxldmVsRXJyb3IiLCJqb2luIiwibmFtZSIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIkhPU1ROQU1FIiwiaG9zdG5hbWUiLCJpc1BsYWluT2JqZWN0IiwidmFsdWUiLCJwcm90b3R5cGUiLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsInRvU3RyaW5nVGFnIiwiaXRlcmF0b3IiLCJkb3RpZnlUb0FycmF5Iiwib2JqIiwicmVzIiwicmVjdXJzZSIsImN1cnJlbnQiLCJrZXkiLCJSZWZsZWN0Iiwib3duS2V5cyIsIm5ld0tleSIsInB1c2giLCJpc0VtcHR5IiwidW5kZWZpbmVkIiwibGVuZ3RoIiwidHJpbSIsImlzTnVsbCIsImlzVW5kZWZpbmVkIiwiaXNPYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJpc1N0cmluZyIsImlzRnVuY3Rpb24iLCJBeGUiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsInJlbWFwcGVkRmllbGRzIiwiQVhFX1JFTUFQUEVEX01FVEFfRklFTERTIiwiZmllbGRzIiwiYXJyIiwic3BsaXQiLCJtYXAiLCJ2IiwicHJvcCIsIm9taXR0ZWRGaWVsZHMiLCJBWEVfT01JVF9NRVRBX0ZJRUxEUyIsInMiLCJwaWNrZWRGaWVsZHMiLCJBWEVfUElDS19NRVRBX0ZJRUxEUyIsInNob3dTdGFjayIsIkFYRV9TSE9XX1NUQUNLIiwibWV0YSIsImFzc2lnbiIsInNob3ciLCJBWEVfU0hPV19NRVRBIiwiY2xlYW51cFJlbWFwcGluZyIsImhpZGVIVFRQIiwiaGlkZU1ldGEiLCJ2ZXJzaW9uIiwic2lsZW50IiwibG9nZ2VyIiwiY29uc29sZSIsImxldmVsIiwiYXBwSW5mbyIsIkFYRV9BUFBfSU5GTyIsImhvb2tzIiwicHJlIiwicG9zdCIsImxvZyIsImJpbmQiLCJtZXRob2RzIiwia2V5cyIsImZpbHRlciIsImhhcyIsImVsZW1lbnQiLCJmYXRhbCIsImVycm9yIiwiaW5mbyIsImFyZ3MiLCJzbGljZSIsImNhbGwiLCJzZXRMZXZlbCIsImdldE5vcm1hbGl6ZWRMZXZlbCIsInNldE5hbWUiLCJ3YXJuIiwiZm4iLCJfbGV2ZWwiLCJpbmRleE9mIiwiRXJyb3IiLCJsb2dMZXZlbCIsInNjb3BlIiwibWVzc2FnZSIsIm9yaWdpbmFsQXJncyIsImVycm9ycyIsImFyZyIsIm1vZGlmaWVyIiwiaXNCdW55YW4iLCJfbWV0YSIsIm1lc3NhZ2VzIiwic29tZSIsInQiLCJvcmlnaW5hbF9tZXRhIiwidW5zaGlmdCIsIm9yaWdpbmFsX2VyciIsImFwcCIsIm1ldGhvZCIsImhvb2siLCJoYWRUcnVlU2lsZW50U3ltYm9sIiwiaW5kZXgiLCJsYXN0SW5kZXhPZiIsInBhcmVudEtleSIsImRvdGlmaWVkIiwiaSIsInNwbGljZSIsInBpY2tlZFN5bWJvbHMiLCJ0aGVuIiwiY2F0Y2giLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5hc3NpZ25lZC1pbXBvcnRcbnJlcXVpcmUoJ2NvbnNvbGUtcG9seWZpbGwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLW5vZGUtcHJvdG9jb2xcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcblxuY29uc3QgY29tYmluZSA9IHJlcXVpcmUoJ21heWJlLWNvbWJpbmUtZXJyb3JzJyk7XG5jb25zdCBmb3JtYXQgPSByZXF1aXJlKCdAbGFkanMvZm9ybWF0LXV0aWwnKTtcbmNvbnN0IGZvcm1hdFNwZWNpZmllcnMgPSByZXF1aXJlKCdmb3JtYXQtc3BlY2lmaWVycycpO1xuY29uc3QgZ2V0ID0gcmVxdWlyZSgnQHN0cmlrZWVudGNvL2dldCcpO1xuY29uc3QgaXNFcnJvciA9IHJlcXVpcmUoJ2lzZXJyb3InKTtcbmNvbnN0IGlzU3ltYm9sID0gcmVxdWlyZSgnaXMtc3ltYm9sJyk7XG5jb25zdCBtZXJnZU9wdGlvbnMgPSByZXF1aXJlKCdtZXJnZS1vcHRpb25zJyk7XG5jb25zdCBwTWFwU2VyaWVzID0gcmVxdWlyZSgncC1tYXAtc2VyaWVzJyk7XG5jb25zdCBwYXJzZUFwcEluZm8gPSByZXF1aXJlKCdwYXJzZS1hcHAtaW5mbycpO1xuY29uc3QgcGFyc2VFcnIgPSByZXF1aXJlKCdwYXJzZS1lcnInKTtcbmNvbnN0IHBpY2tEZWVwID0gcmVxdWlyZSgncGljay1kZWVwJyk7XG5jb25zdCBzZXQgPSByZXF1aXJlKCdAc3RyaWtlZW50Y28vc2V0Jyk7XG5jb25zdCB1bnNldCA9IHJlcXVpcmUoJ3Vuc2V0LXZhbHVlJyk7XG5jb25zdCB7IGJvb2xlYW4gfSA9IHJlcXVpcmUoJ2Jvb2xlYW4nKTtcblxuY29uc3QgcGtnID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJyk7XG5cbmNvbnN0IHNpbGVudFN5bWJvbCA9IFN5bWJvbC5mb3IoJ2F4ZS5zaWxlbnQnKTtcbmNvbnN0IG9taXR0ZWRMb2dnZXJLZXlzID0gbmV3IFNldChbJ2NvbmZpZycsICdsb2cnXSk7XG5jb25zdCBsZXZlbHMgPSBbJ3RyYWNlJywgJ2RlYnVnJywgJ2luZm8nLCAnd2FybicsICdlcnJvcicsICdmYXRhbCddO1xuY29uc3QgYWxpYXNlcyA9IHsgd2FybmluZzogJ3dhcm4nLCBlcnI6ICdlcnJvcicgfTtcbmNvbnN0IGxldmVsRXJyb3IgPSBgXFxgbGV2ZWxcXGAgaW52YWxpZCwgbXVzdCBiZTogJHtsZXZlbHMuam9pbignLCAnKX1gO1xuY29uc3QgbmFtZSA9XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXG4gICAgPyBmYWxzZVxuICAgIDogcHJvY2Vzcy5lbnYuSE9TVE5BTUUgfHwgb3MuaG9zdG5hbWUoKTtcblxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaXMtcGxhaW4tb2JqL2Jsb2IvbWFpbi9pbmRleC5qcz5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICByZXR1cm4gKFxuICAgIChwcm90b3R5cGUgPT09IG51bGwgfHxcbiAgICAgIHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fFxuICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmXG4gICAgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsdWUpICYmXG4gICAgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsdWUpICYmXG4gICAgIWlzU3ltYm9sKHZhbHVlKVxuICApO1xufVxuXG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL0dlZW5lblRpamQvZG90aWZ5L2Jsb2IvbWFzdGVyL2RvdGlmeS5qcz5cbmZ1bmN0aW9uIGRvdGlmeVRvQXJyYXkob2JqKSB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBmdW5jdGlvbiByZWN1cnNlKG9iaiwgY3VycmVudCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhvYmopKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgY29uc3QgbmV3S2V5ID0gY3VycmVudCA/IGN1cnJlbnQgKyAnLicgKyBrZXkgOiBrZXk7IC8vIGpvaW5lZCBrZXkgd2l0aCBkb3RcbiAgICAgIC8vIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSAmJiAhT2JqZWN0SUQuaXNWYWxpZCh2YWx1ZSkpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZWN1cnNlKHZhbHVlLCBuZXdLZXkpOyAvLyBpdCdzIGEgbmVzdGVkIG9iamVjdCwgc28gZG8gaXQgYWdhaW5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcy5wdXNoKG5ld0tleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVjdXJzZShvYmopO1xuICByZXR1cm4gcmVzO1xufVxuXG4vLyA8aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQzMjMzMTYzPlxuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIFJlZmxlY3Qub3duS2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKSB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDApXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmNsYXNzIEF4ZSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgY29uc3QgcmVtYXBwZWRGaWVsZHMgPSB7fTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuQVhFX1JFTUFQUEVEX01FVEFfRklFTERTKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBwcm9jZXNzLmVudi5BWEVfUkVNQVBQRURfTUVUQV9GSUVMRFM7XG4gICAgICBjb25zdCBhcnIgPSBmaWVsZHMuc3BsaXQoJywnKS5tYXAoKHYpID0+IHYuc3BsaXQoJzonKSk7XG4gICAgICBmb3IgKGNvbnN0IFtwcm9wLCB2YWx1ZV0gb2YgYXJyKSB7XG4gICAgICAgIHJlbWFwcGVkRmllbGRzW3Byb3BdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZW52aWZ5IGRvZXMgbm90IHN1cHBvcnQgY29uZGl0aW9uYWxzIHdlbGwgZW5vdWdoIHNvIHdlIGRlY2xhcmUgdmFycyBvdXRzaWRlXG4gICAgbGV0IG9taXR0ZWRGaWVsZHMgPSBwcm9jZXNzLmVudi5BWEVfT01JVF9NRVRBX0ZJRUxEUztcbiAgICBpZiAodHlwZW9mIG9taXR0ZWRGaWVsZHMgPT09ICdzdHJpbmcnKVxuICAgICAgb21pdHRlZEZpZWxkcyA9IG9taXR0ZWRGaWVsZHMuc3BsaXQoJywnKS5tYXAoKHMpID0+IHMudHJpbSgpKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob21pdHRlZEZpZWxkcykpIG9taXR0ZWRGaWVsZHMgPSBbXTtcblxuICAgIGxldCBwaWNrZWRGaWVsZHMgPSBwcm9jZXNzLmVudi5BWEVfUElDS19NRVRBX0ZJRUxEUztcbiAgICBpZiAodHlwZW9mIHBpY2tlZEZpZWxkcyA9PT0gJ3N0cmluZycpXG4gICAgICBwaWNrZWRGaWVsZHMgPSBwaWNrZWRGaWVsZHMuc3BsaXQoJywnKS5tYXAoKHMpID0+IHMudHJpbSgpKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGlja2VkRmllbGRzKSkgcGlja2VkRmllbGRzID0gW107XG5cbiAgICB0aGlzLmNvbmZpZyA9IG1lcmdlT3B0aW9ucyhcbiAgICAgIHtcbiAgICAgICAgc2hvd1N0YWNrOiBwcm9jZXNzLmVudi5BWEVfU0hPV19TVEFDS1xuICAgICAgICAgID8gYm9vbGVhbihwcm9jZXNzLmVudi5BWEVfU0hPV19TVEFDSylcbiAgICAgICAgICA6IHRydWUsXG4gICAgICAgIG1ldGE6IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2hvdzogcHJvY2Vzcy5lbnYuQVhFX1NIT1dfTUVUQVxuICAgICAgICAgICAgICA/IGJvb2xlYW4ocHJvY2Vzcy5lbnYuQVhFX1NIT1dfTUVUQSlcbiAgICAgICAgICAgICAgOiB0cnVlLFxuICAgICAgICAgICAgcmVtYXBwZWRGaWVsZHMsXG4gICAgICAgICAgICBvbWl0dGVkRmllbGRzLFxuICAgICAgICAgICAgcGlja2VkRmllbGRzLFxuICAgICAgICAgICAgY2xlYW51cFJlbWFwcGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhpZGVIVFRQOiAnaXNfaHR0cCcsXG4gICAgICAgICAgICAvLyBpbXBsZW1lbnRlZCBtYWlubHkgZm9yIEBsYWRqcy9ncmFjZWZ1bCB0b1xuICAgICAgICAgICAgLy8gc3VwcHJlc3MgdW5uZWNlc3NhcnkgbWV0YSBvdXRwdXQgdG8gY29uc29sZVxuICAgICAgICAgICAgaGlkZU1ldGE6ICdoaWRlX21ldGEnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eXBlb2YgY29uZmlnLm1ldGEgPT09ICdvYmplY3QnID8gY29uZmlnLm1ldGEgOiB7fVxuICAgICAgICApLFxuICAgICAgICB2ZXJzaW9uOiBwa2cudmVyc2lvbixcbiAgICAgICAgc2lsZW50OiBmYWxzZSxcbiAgICAgICAgbG9nZ2VyOiBjb25zb2xlLFxuICAgICAgICBuYW1lLFxuICAgICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgICBsZXZlbHM6IFsnaW5mbycsICd3YXJuJywgJ2Vycm9yJywgJ2ZhdGFsJ10sXG4gICAgICAgIGFwcEluZm86IHByb2Nlc3MuZW52LkFYRV9BUFBfSU5GT1xuICAgICAgICAgID8gYm9vbGVhbihwcm9jZXNzLmVudi5BWEVfQVBQX0lORk8pXG4gICAgICAgICAgOiB0cnVlLFxuICAgICAgICBob29rczogT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcmU6IFtdLFxuICAgICAgICAgICAgcG9zdDogW11cbiAgICAgICAgICB9LFxuICAgICAgICAgIHR5cGVvZiBjb25maWcuaG9va3MgPT09ICdvYmplY3QnID8gY29uZmlnLmhvb2tzIDoge31cbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIGNvbmZpZ1xuICAgICk7XG5cbiAgICB0aGlzLmFwcEluZm8gPSB0aGlzLmNvbmZpZy5hcHBJbmZvXG4gICAgICA/IGlzRnVuY3Rpb24ocGFyc2VBcHBJbmZvKVxuICAgICAgICA/IHBhcnNlQXBwSW5mbygpXG4gICAgICAgIDogZmFsc2VcbiAgICAgIDogZmFsc2U7XG5cbiAgICB0aGlzLmxvZyA9IHRoaXMubG9nLmJpbmQodGhpcyk7XG5cbiAgICAvLyBJbmhlcml0IG1ldGhvZHMgZnJvbSBwYXJlbnQgbG9nZ2VyXG4gICAgY29uc3QgbWV0aG9kcyA9IE9iamVjdC5rZXlzKHRoaXMuY29uZmlnLmxvZ2dlcikuZmlsdGVyKFxuICAgICAgKGtleSkgPT4gIW9taXR0ZWRMb2dnZXJLZXlzLmhhcyhrZXkpXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbWV0aG9kcykge1xuICAgICAgdGhpc1tlbGVtZW50XSA9IHRoaXMuY29uZmlnLmxvZ2dlcltlbGVtZW50XTtcbiAgICB9XG5cbiAgICAvLyBCaW5kIGhlbHBlciBmdW5jdGlvbnMgZm9yIGVhY2ggbG9nIGxldmVsXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGxldmVscykge1xuICAgICAgLy8gRW5zdXJlIGZ1bmN0aW9uIGV4aXN0cyBpbiBsb2dnZXIgcGFzc2VkXG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlnLmxvZ2dlcltlbGVtZW50XSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoZWxlbWVudCA9PT0gJ2ZhdGFsJykge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5mYXRhbCA9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuZXJyb3IgfHxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5pbmZvIHx8XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIubG9nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlcltlbGVtZW50XSA9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuaW5mbyB8fCB0aGlzLmNvbmZpZy5sb2dnZXIubG9nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEJpbmQgbG9nIGhhbmRsZXIgd2hpY2ggbm9ybWFsaXplcyBhcmdzIGFuZCBwb3B1bGF0ZXMgbWV0YVxuICAgICAgdGhpc1tlbGVtZW50XSA9ICguLi5hcmdzKSA9PlxuICAgICAgICB0aGlzLmxvZyhlbGVtZW50LCAuLi5BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRMZXZlbCA9IHRoaXMuc2V0TGV2ZWwuYmluZCh0aGlzKTtcbiAgICB0aGlzLmdldE5vcm1hbGl6ZWRMZXZlbCA9IHRoaXMuZ2V0Tm9ybWFsaXplZExldmVsLmJpbmQodGhpcyk7XG4gICAgdGhpcy5zZXROYW1lID0gdGhpcy5zZXROYW1lLmJpbmQodGhpcyk7XG5cbiAgICAvLyBTZXQgdGhlIGxvZ2dlciBuYW1lXG4gICAgaWYgKHRoaXMuY29uZmlnLm5hbWUpIHRoaXMuc2V0TmFtZSh0aGlzLmNvbmZpZy5uYW1lKTtcblxuICAgIC8vIFNldCB0aGUgbG9nZ2VyIGxldmVsXG4gICAgdGhpcy5zZXRMZXZlbCh0aGlzLmNvbmZpZy5sZXZlbCk7XG5cbiAgICAvLyBBbGlhc2VzXG4gICAgdGhpcy5lcnIgPSB0aGlzLmVycm9yO1xuICAgIHRoaXMud2FybmluZyA9IHRoaXMud2FybjtcblxuICAgIC8vIFByZSBhbmQgUG9zdCBIb29rc1xuICAgIHRoaXMucHJlID0gZnVuY3Rpb24gKGxldmVsLCBmbikge1xuICAgICAgdGhpcy5jb25maWcuaG9va3MucHJlLnB1c2goZnVuY3Rpb24gKF9sZXZlbCwgLi4uYXJncykge1xuICAgICAgICBpZiAobGV2ZWwgIT09IF9sZXZlbCkgcmV0dXJuIFsuLi5hcmdzXTtcbiAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMucG9zdCA9IGZ1bmN0aW9uIChsZXZlbCwgZm4pIHtcbiAgICAgIHRoaXMuY29uZmlnLmhvb2tzLnBvc3QucHVzaChmdW5jdGlvbiAoX2xldmVsLCAuLi5hcmdzKSB7XG4gICAgICAgIGlmIChsZXZlbCAhPT0gX2xldmVsKSByZXR1cm4gWy4uLmFyZ3NdO1xuICAgICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgc2V0TGV2ZWwobGV2ZWwpIHtcbiAgICBpZiAoIWlzU3RyaW5nKGxldmVsKSB8fCBsZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGxldmVsRXJyb3IpO1xuICAgIC8vIFN1cHBvcnQgc2lnbmFsZSBsb2dnZXIgYW5kIG90aGVyIGxvZ2dlcnMgdGhhdCB1c2UgYGxvZ0xldmVsYFxuICAgIGlmIChpc1N0cmluZyh0aGlzLmNvbmZpZy5sb2dnZXIubG9nTGV2ZWwpKVxuICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmxvZ0xldmVsID0gbGV2ZWw7XG4gICAgZWxzZSB0aGlzLmNvbmZpZy5sb2dnZXIubGV2ZWwgPSBsZXZlbDtcbiAgICAvLyBBZGp1c3RzIGB0aGlzLmNvbmZpZy5sZXZlbHNgIGFycmF5XG4gICAgLy8gc28gdGhhdCBpdCBoYXMgYWxsIHByb2NlZWRpbmcgKGluY2x1c2l2ZSlcbiAgICB0aGlzLmNvbmZpZy5sZXZlbHMgPSBsZXZlbHMuc2xpY2UobGV2ZWxzLmluZGV4T2YobGV2ZWwpKTtcbiAgfVxuXG4gIGdldE5vcm1hbGl6ZWRMZXZlbChsZXZlbCkge1xuICAgIGlmICghaXNTdHJpbmcobGV2ZWwpKSByZXR1cm4gJ2luZm8nO1xuICAgIGlmIChpc1N0cmluZyhhbGlhc2VzW2xldmVsXSkpIHJldHVybiBhbGlhc2VzW2xldmVsXTtcbiAgICBpZiAobGV2ZWxzLmluZGV4T2YobGV2ZWwpID09PSAtMSkgcmV0dXJuICdpbmZvJztcbiAgICByZXR1cm4gbGV2ZWw7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICBpZiAoIWlzU3RyaW5nKG5hbWUpKSB0aHJvdyBuZXcgRXJyb3IoJ2BuYW1lYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG4gICAgLy8gU3VwcG9ydCBzaWduYWxlIGxvZ2dlciBhbmQgb3RoZXIgbG9nZ2VycyB0aGF0IHVzZSBgc2NvcGVgXG4gICAgaWYgKGlzU3RyaW5nKHRoaXMuY29uZmlnLmxvZ2dlci5zY29wZSkpIHRoaXMuY29uZmlnLmxvZ2dlci5zY29wZSA9IG5hbWU7XG4gICAgZWxzZSB0aGlzLmNvbmZpZy5sb2dnZXIubmFtZSA9IG5hbWU7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICBsb2cobGV2ZWwsIG1lc3NhZ2UsIG1ldGEsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBvcmlnaW5hbEFyZ3MgPSBbXTtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKGxldmVsKSkgb3JpZ2luYWxBcmdzLnB1c2gobGV2ZWwpO1xuICAgIGlmICghaXNVbmRlZmluZWQobWVzc2FnZSkpIG9yaWdpbmFsQXJncy5wdXNoKG1lc3NhZ2UpO1xuICAgIGlmICghaXNVbmRlZmluZWQobWV0YSkpIG9yaWdpbmFsQXJncy5wdXNoKG1ldGEpO1xuICAgIGZvciAoY29uc3QgYXJnIG9mIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpKSB7XG4gICAgICBvcmlnaW5hbEFyZ3MucHVzaChhcmcpO1xuICAgIH1cblxuICAgIGxldCBtb2RpZmllciA9IDA7XG5cbiAgICBpZiAoaXNTdHJpbmcobGV2ZWwpICYmIGlzU3RyaW5nKGFsaWFzZXNbbGV2ZWxdKSkge1xuICAgICAgbGV2ZWwgPSBhbGlhc2VzW2xldmVsXTtcbiAgICB9IGVsc2UgaWYgKGlzRXJyb3IobGV2ZWwpKSB7XG4gICAgICBtZXRhID0gbWVzc2FnZTtcbiAgICAgIG1lc3NhZ2UgPSBsZXZlbDtcbiAgICAgIGxldmVsID0gJ2Vycm9yJztcbiAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhsZXZlbCkgfHwgbGV2ZWxzLmluZGV4T2YobGV2ZWwpID09PSAtMSkge1xuICAgICAgbWV0YSA9IG1lc3NhZ2U7XG4gICAgICBtZXNzYWdlID0gbGV2ZWw7XG4gICAgICBsZXZlbCA9IHRoaXMuZ2V0Tm9ybWFsaXplZExldmVsKGxldmVsKTtcbiAgICAgIG1vZGlmaWVyID0gLTE7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGVhcmx5IGlmIGl0IGlzIG5vdCBhIHZhbGlkIGxvZ2dpbmcgbGV2ZWxcbiAgICBpZiAodGhpcy5jb25maWcubGV2ZWxzLmluZGV4T2YobGV2ZWwpID09PSAtMSkgcmV0dXJuO1xuXG4gICAgLy8gQnVueWFuIHN1cHBvcnQgKG1ldGEsIG1lc3NhZ2UsIC4uLmFyZ3MpXG4gICAgbGV0IGlzQnVueWFuID0gZmFsc2U7XG4gICAgaWYgKChpc09iamVjdChtZXNzYWdlKSB8fCBBcnJheS5pc0FycmF5KG1lc3NhZ2UpKSAmJiBpc1N0cmluZyhtZXRhKSkge1xuICAgICAgaXNCdW55YW4gPSB0cnVlO1xuICAgICAgY29uc3QgX21ldGEgPSBtZXRhO1xuICAgICAgbWV0YSA9IG1lc3NhZ2U7XG4gICAgICBtZXNzYWdlID1cbiAgICAgICAgaXNTdHJpbmcoX21ldGEpICYmIG9yaWdpbmFsQXJncy5sZW5ndGggPj0gMyArIG1vZGlmaWVyXG4gICAgICAgICAgPyBmb3JtYXQoLi4ub3JpZ2luYWxBcmdzLnNsaWNlKDIgKyBtb2RpZmllcikpXG4gICAgICAgICAgOiBfbWV0YTtcbiAgICB9XG5cbiAgICAvLyBJZiBtZXNzYWdlIHdhcyB1bmRlZmluZWQgdGhlbiBzZXQgaXQgdG8gbGV2ZWxcbiAgICBpZiAoaXNVbmRlZmluZWQobWVzc2FnZSkpIG1lc3NhZ2UgPSBsZXZlbDtcblxuICAgIC8vIElmIG9ubHkgYG1lc3NhZ2VgIHdhcyBwYXNzZWQgdGhlbiBpZiBpdCB3YXMgYW4gT2JqZWN0XG4gICAgLy8gcHJlc2VydmUgaXQgYXMgYW4gT2JqZWN0IGJ5IHNldHRpbmcgaXQgYXMgbWV0YVxuICAgIGlmIChcbiAgICAgIG9yaWdpbmFsQXJncy5zbGljZSgxICsgbW9kaWZpZXIpLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgIWlzU3RyaW5nKG1lc3NhZ2UpICYmXG4gICAgICAhaXNFcnJvcihtZXNzYWdlKVxuICAgICkge1xuICAgICAgbWV0YSA9IHsgbWVzc2FnZSB9O1xuICAgICAgbWVzc2FnZSA9IGxldmVsO1xuICAgIH0gZWxzZSBpZiAoIWlzQnVueWFuICYmIG9yaWdpbmFsQXJncy5sZW5ndGggPj0gNCArIG1vZGlmaWVyKSB7XG4gICAgICBtZXNzYWdlID0gdW5kZWZpbmVkO1xuXG4gICAgICBtZXRhID0ge307XG4gICAgICBjb25zdCBtZXNzYWdlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBhcmcgb2Ygb3JpZ2luYWxBcmdzKSB7XG4gICAgICAgIGlmIChpc0Vycm9yKGFyZykpIGVycm9ycy5wdXNoKGFyZyk7XG4gICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nKGFyZykpIG1lc3NhZ2VzLnB1c2goYXJnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDAgJiYgbWVzc2FnZXMubGVuZ3RoID4gMClcbiAgICAgICAgbWVzc2FnZSA9IGZvcm1hdCguLi5tZXNzYWdlcyk7XG4gICAgICBlbHNlIGlmIChlcnJvcnMubGVuZ3RoID4gMCAmJiBsZXZlbCA9PT0gJ2xvZycpIGxldmVsID0gJ2Vycm9yJztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgIWlzQnVueWFuICYmXG4gICAgICBvcmlnaW5hbEFyZ3MubGVuZ3RoID09PSAzICsgbW9kaWZpZXIgJiZcbiAgICAgIGlzU3RyaW5nKG1lc3NhZ2UpICYmXG4gICAgICBmb3JtYXRTcGVjaWZpZXJzLnNvbWUoKHQpID0+IG1lc3NhZ2UuaW5kZXhPZih0KSAhPT0gLTEpXG4gICAgKSB7XG4gICAgICAvLyBPdGhlcndpc2UgaWYgdGhlcmUgYXJlIHRocmVlIGFyZ3MgYW5kIGlmIHRoZSBgbWVzc2FnZWAgY29udGFpbnNcbiAgICAgIC8vIGEgcGxhY2Vob2xkZXIgdG9rZW4gKGUuZy4gJyVzJyBvciAnJWQnIC0gc2VlIGFib3ZlIGBmb3JtYXRTcGVjaWZpZXJzYCB2YXJpYWJsZSlcbiAgICAgIC8vIHRoZW4gd2UgY2FuIGluZmVyIHRoYXQgdGhlIGBtZXRhYCBhcmcgcGFzc2VkIGlzIHVzZWQgZm9yIGZvcm1hdHRpbmdcbiAgICAgIG1lc3NhZ2UgPSBmb3JtYXQobWVzc2FnZSwgbWV0YSk7XG4gICAgICBtZXRhID0ge307XG4gICAgfSBlbHNlIGlmICghaXNFcnJvcihtZXNzYWdlKSkge1xuICAgICAgaWYgKGlzRXJyb3IobWV0YSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobWV0YSk7XG4gICAgICAgIG1ldGEgPSB7fTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzT2JqZWN0KG1ldGEpICYmICFpc1VuZGVmaW5lZChtZXRhKSAmJiAhaXNOdWxsKG1ldGEpKSB7XG4gICAgICAgIC8vIElmIHRoZSBgbWV0YWAgdmFyaWFibGUgcGFzc2VkIHdhcyBub3QgYW4gT2JqZWN0IHRoZW4gY29udmVydCBpdFxuICAgICAgICBtZXNzYWdlID0gZm9ybWF0KG1lc3NhZ2UsIG1ldGEpO1xuICAgICAgICBtZXRhID0ge307XG4gICAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhtZXNzYWdlKSkge1xuICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBub3QgYSBzdHJpbmcgdGhlbiB3ZSBzaG91bGQgcnVuIGB1dGlsLmZvcm1hdGAgb24gaXRcbiAgICAgICAgLy8gYXNzdW1pbmcgd2UncmUgZm9ybWF0dGluZyBpdCBsaWtlIGl0IHdhcyBhbm90aGVyIGFyZ3VtZW50XG4gICAgICAgIC8vIChhcyBvcHBvc2VkIHRvIHVzaW5nIHNvbWV0aGluZyBsaWtlIGZhc3QtanNvbi1zdHJpbmdpZnkpXG4gICAgICAgIG1lc3NhZ2UgPSBmb3JtYXQobWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Vycm9yKG1ldGEpKSB7XG4gICAgICBlcnJvcnMucHVzaChtZXRhKTtcbiAgICAgIC8vIGhhbmRsZSBhZGRpdGlvbmFsIGFyZ3NcbiAgICAgIGZvciAoY29uc3QgYXJnIG9mIG9yaWdpbmFsQXJncy5zbGljZSgyICsgbW9kaWZpZXIpKSB7XG4gICAgICAgIC8vIHNob3VsZCBza2lwIHRoaXMgYmV0dGVyIHdpdGggc2xpY2UgYW5kIG1vZGlmaWVyIGFkanVzdG1lbnRcbiAgICAgICAgaWYgKG1ldGEgPT09IGFyZykgY29udGludWU7XG4gICAgICAgIGlmIChpc0Vycm9yKGFyZykpIGVycm9ycy5wdXNoKGFyZyk7XG4gICAgICB9XG5cbiAgICAgIG1ldGEgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1ldGEpICYmICFpc09iamVjdChtZXRhKSkgbWV0YSA9IHsgb3JpZ2luYWxfbWV0YTogbWV0YSB9O1xuICAgIGVsc2UgaWYgKCFpc09iamVjdChtZXRhKSkgbWV0YSA9IHt9O1xuXG4gICAgaWYgKGlzRXJyb3IobWVzc2FnZSkpIHtcbiAgICAgIGVycm9ycy51bnNoaWZ0KG1lc3NhZ2UpO1xuICAgICAgbWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIHJld3JpdGUgYG1ldGEuZXJyYCB0byBgbWV0YS5vcmlnaW5hbF9lcnJgIGZvciBjb25zaXN0ZW5jeVxuICAgIC8vIChpbiBjYXNlIHNvbWVvbmUgaGFzIGFuIG9iamVjdCB3aXRoIGAuZXJyYCBwcm9wZXJ0eSBvbiBpdCB3aXRoIGFuIGVycm9yKVxuICAgIC8vXG4gICAgaWYgKGlzT2JqZWN0KG1ldGEuZXJyKSkge1xuICAgICAgaWYgKGlzRXJyb3IobWV0YS5lcnIpKSBlcnJvcnMucHVzaChtZXRhLmVycik7XG4gICAgICBtZXRhLm9yaWdpbmFsX2VyciA9IGlzRXJyb3IobWV0YS5lcnIpID8gcGFyc2VFcnIobWV0YS5lcnIpIDogbWV0YS5lcnI7XG4gICAgfVxuXG4gICAgbGV0IGVycjtcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVyciA9IGNvbWJpbmUoZXJyb3JzKTtcbiAgICAgIG1ldGEuZXJyID0gcGFyc2VFcnIoZXJyKTtcbiAgICAgIGlmICghaXNTdHJpbmcobWVzc2FnZSkpIG1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIE5PVEU6IHRoaXMgd2FzIHJlbW92ZWQgaW4gdjEwLjIuMiBkdWUgdG8gY2lyY3VsYXIgcmVmZXJlbmNlIGlzc3Vlc1xuICAgIC8vICAgICAgICh0aGUgd29ya2Fyb3VuZCB3b3VsZCBpbnZvbHZlIHNhZmVTdHJpbmdpZnkgYW5kIHRoZW4gSlNPTi5wYXJzZSB3aGljaCB3b3VsZCBiZSBwZXJmIGJsb2F0KVxuICAgIC8vICAgICAgICh0aGVyZSBzdGlsbCBtaWdodCBiZSBhbm90aGVyIHdvcmthcm91bmQgb3IgcGVyaGFwcyB3ZSBkb24ndCBhZGQgYWxsIHRoZSBhcmdzIGhlcmUgZXhjZXB0IGFkZGl0aW9uYWwpXG4gICAgLy9cbiAgICAvLyBTZXQgYGFyZ3NgIHByb3Agd2l0aCBvcmlnaW5hbCBhcmd1bWVudHMgcGFzc2VkXG4gICAgLy8gbWV0YS5hcmdzID0gb3JpZ2luYWxBcmdzO1xuXG4gICAgLy8gU2V0IGRlZmF1bHQgbGV2ZWwgb24gbWV0YVxuICAgIG1ldGEubGV2ZWwgPSBsZXZlbDtcblxuICAgIC8vIEFkZCBgYXBwYCBvYmplY3QgdG8gbWV0YWRhdGFcbiAgICBpZiAodGhpcy5hcHBJbmZvKSBtZXRhLmFwcCA9IHRoaXMuYXBwSW5mbztcblxuICAgIC8vXG4gICAgLy8gZGV0ZXJtaW5lIGxvZyBtZXRob2QgdG8gdXNlXG4gICAgLy9cbiAgICAvLyBpZiB3ZSBkaWRuJ3QgcGFzcyBhIGxldmVsIGFzIGEgbWV0aG9kXG4gICAgLy8gKGUuZy4gY29uc29sZS5pbmZvKSwgdGhlbiB3ZSBzaG91bGQgc3RpbGxcbiAgICAvLyB1c2UgdGhlIGxvZ2dlcidzIGBsb2dgIG1ldGhvZCB0byBvdXRwdXRcbiAgICAvL1xuICAgIC8vIGFuZCBmYXRhbCBzaG91bGQgdXNlIGVycm9yIChlLmcuIGluIGJyb3dzZXIpXG4gICAgLy9cbiAgICBjb25zdCBtZXRob2QgPSBtb2RpZmllciA9PT0gLTEgPyAnbG9nJyA6IGxldmVsO1xuXG4gICAgLy8gcHJlLWhvb2tzXG4gICAgZm9yIChjb25zdCBob29rIG9mIHRoaXMuY29uZmlnLmhvb2tzLnByZSkge1xuICAgICAgW2VyciwgbWVzc2FnZSwgbWV0YV0gPSBob29rKG1ldGhvZCwgZXJyLCBtZXNzYWdlLCBtZXRhKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIE5PVEU6IHVzaW5nIGxvZGFzaCBfLm9taXQgYW5kIF8ucGljayB3b3VsZCBoYXZlIGJlZW4gX3Zlcnkgc2xvd19cbiAgICAvL1xuICAgIC8vIGNvbnN0IG9taXR0ZWRBbmRQaWNrZWRGaWVsZHMgPSB7XG4gICAgLy8gICAuLi5fLm9taXQobWV0YSwgdGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSxcbiAgICAvLyAgIC4uLl8ucGljayhtZXRhLCB0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcylcbiAgICAvLyB9O1xuICAgIC8vXG4gICAgLy8gYWxzbyB3ZSBkb24ndCB3YW50IHRvIG11dGF0ZSBhbnl0aGluZyBpbiBgbWV0YWBcbiAgICAvLyBhbmQgaWRlYWxseSB3ZSBvbmx5IHdhbnQgdG8gcGljayBleGFjdGx5IHdoYXQgd2UgbmVlZFxuICAgIC8vIChhbmQgbm90IGhhdmUgdHdvIG9wZXJhdGlvbnMsIG9uZSBmb3Igb21pdCwgYW5kIG9uZSBmb3IgcGljaylcbiAgICAvL1xuXG4gICAgLy8gc2V0IGEgYm9vbGVhbiBmbGFnIGlmIHdlIGhhZCB0aGUgc2lsZW50IHN5bWJvbCBvciBub3RcbiAgICBjb25zdCBoYWRUcnVlU2lsZW50U3ltYm9sID0gYm9vbGVhbihtZXRhW3NpbGVudFN5bWJvbF0pO1xuXG4gICAgaWYgKCFpc0VtcHR5KHRoaXMuY29uZmlnLm1ldGEucmVtYXBwZWRGaWVsZHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXModGhpcy5jb25maWcubWV0YS5yZW1hcHBlZEZpZWxkcykpIHtcbiAgICAgICAgc2V0KG1ldGEsIHRoaXMuY29uZmlnLm1ldGEucmVtYXBwZWRGaWVsZHNba2V5XSwgZ2V0KG1ldGEsIGtleSkpO1xuICAgICAgICB1bnNldChtZXRhLCBrZXkpO1xuICAgICAgICAvLyBjbGVhbnVwIGVtcHR5IG9iamVjdHMgYWZ0ZXIgcmVtYXBwaW5nXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5tZXRhLmNsZWFudXBSZW1hcHBpbmcpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGtleS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IHBhcmVudEtleSA9IGtleS5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgICAgaWYgKGlzRW1wdHkoZ2V0KG1ldGEsIHBhcmVudEtleSkpKSB1bnNldChtZXRhLCBwYXJlbnRLZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSB8fFxuICAgICAgIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5waWNrZWRGaWVsZHMpXG4gICAgKSB7XG4gICAgICBjb25zdCBkb3RpZmllZCA9IGRvdGlmeVRvQXJyYXkobWV0YSk7XG4gICAgICAvLyBkb3RpZmllZCA9IFtcbiAgICAgIC8vICAgJ2Vyci5uYW1lJyxcbiAgICAgIC8vICAgJ2Vyci5tZXNzYWdlJyxcbiAgICAgIC8vICAgJ2Vyci5zdGFjaycsXG4gICAgICAvLyAgICdsZXZlbCcsXG4gICAgICAvLyAgICdhcHAubmFtZScsXG4gICAgICAvLyAgICdhcHAudmVyc2lvbicsXG4gICAgICAvLyAgICdhcHAubm9kZScsXG4gICAgICAvLyAgICdhcHAuaGFzaCcsXG4gICAgICAvLyAgIC8vIC4uLlxuICAgICAgLy8gXVxuXG4gICAgICBpZiAoIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgdGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSB7XG4gICAgICAgICAgLy8gPGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85ODgyMzQ5PlxuICAgICAgICAgIGxldCBpID0gZG90aWZpZWQubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZG90aWZpZWRbaV0gPT09IHByb3AgfHxcbiAgICAgICAgICAgICAgKCFpc1N5bWJvbChkb3RpZmllZFtpXSkgJiYgZG90aWZpZWRbaV0uaW5kZXhPZihgJHtwcm9wfS5gKSA9PT0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZG90aWZpZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwaWNrZWRTeW1ib2xzID0gW107XG5cbiAgICAgIGlmICghaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcykpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHRoaXMuY29uZmlnLm1ldGEucGlja2VkRmllbGRzKSB7XG4gICAgICAgICAgLy8gcmVzcG9uc2UuaGVhZGVycy5ib29wXG4gICAgICAgICAgLy8gcmVzcG9uc2UuaGVhZGVycy5iZWVwXG4gICAgICAgICAgLy8gcmVzcG9uc2UuYm9keVxuICAgICAgICAgIC8vIHJlc3BvbnNlLnRleHRcbiAgICAgICAgICAvLyByZXNwb25zZVxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gc28gd2UgbmVlZCB0byBzcGxpdCBieSB0aGUgZmlyc3QgcGVyaW9kIGFuZCBvbWl0IGFueSBrZXlzIGZyb20gZG90aWZpZWQgc3RhcnRpbmcgd2l0aCBpdFxuICAgICAgICAgIGlmIChpc1N5bWJvbChwcm9wKSkge1xuICAgICAgICAgICAgaWYgKG1ldGFbcHJvcF0pIHBpY2tlZFN5bWJvbHMucHVzaChbcHJvcCwgbWV0YVtwcm9wXV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHByb3AuaW5kZXhPZignLicpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gcHJvcC5zbGljZSgwLCBpbmRleCArIDEpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBsZXQgaSA9IGRvdGlmaWVkLmxlbmd0aDtcbiAgICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNTeW1ib2woZG90aWZpZWRbaV0pICYmIGRvdGlmaWVkW2ldLmluZGV4T2Yoa2V5KSA9PT0gMClcbiAgICAgICAgICAgICAgICAgIGRvdGlmaWVkLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGZpbmFsbHkgYWRkIGl0IGlmIGl0IGRpZCBub3QgYWxyZWFkeSBleGlzdFxuICAgICAgICAgIGlmIChkb3RpZmllZC5pbmRleE9mKHByb3ApID09PSAtMSkgZG90aWZpZWQucHVzaChwcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL1xuICAgICAgLy8gaXRlcmF0ZSBvdmVyIGFsbCBkb3RpZmllZCB2YWx1ZXMgdG8gY2hlY2sgZm9yIHN5bWJvbHNcbiAgICAgIC8vXG4gICAgICAvLyBOT1RFOiB0aGlzIGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IHRoYXQgdGhleSBjb3VsZCBhbHJlYWR5IGJlIGluIGBwaWNrZWRTeW1ib2xzYFxuICAgICAgLy8gICAgICAgKGFuZCBpdCBkb2Vzbid0IGFsc28gZG8gYmlnaW50cyB5ZXQpXG4gICAgICAvL1xuICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGRvdGlmaWVkKSB7XG4gICAgICAgIGlmIChpc1N5bWJvbChwcm9wKSAmJiBtZXRhW3Byb3BdKVxuICAgICAgICAgIHBpY2tlZFN5bWJvbHMucHVzaChbcHJvcCwgbWV0YVtwcm9wXV0pO1xuICAgICAgfVxuXG4gICAgICAvL1xuICAgICAgLy8gbm93IHdlIGNhbGwgcGljay1kZWVwIHVzaW5nIHRoZSBmaW5hbCBhcnJheVxuICAgICAgLy9cbiAgICAgIC8vIE5PVEU6IHRoaXMgZG9lcyBub3QgcGljayBzeW1ib2xzIG5vciBiaWdpbnRzXG4gICAgICAvL1xuICAgICAgbWV0YSA9IHBpY2tEZWVwKG1ldGEsIGRvdGlmaWVkKTtcblxuICAgICAgLy9cbiAgICAgIC8vIGlmIHRoZXJlIHdlcmUgYW55IHRvcC1sZXZlbCBzeW1ib2xzIHRvIGJlXG4gICAgICAvLyBwaWNrZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGVtIGJhY2sgaGVyZSB0byB0aGUgbGlzdFxuICAgICAgLy9cbiAgICAgIC8vIE5PVEU6IHdlJ2QgcHJvYmFibHkgd2FudCB0byBkbyB0aGUgc2FtZSBmb3IgYmlnaW50cyBhcyBzeW1ib2xzXG4gICAgICAvL1xuICAgICAgaWYgKHBpY2tlZFN5bWJvbHMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBwaWNrZWRTeW1ib2xzKSB7XG4gICAgICAgICAgbWV0YVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvbmx5IGludm9rZSBsb2dnZXIgbWV0aG9kcyBpZiBpdCB3YXMgbm90IHNpbGVudFxuICAgIGlmICghdGhpcy5jb25maWcuc2lsZW50ICYmICFoYWRUcnVlU2lsZW50U3ltYm9sKSB7XG4gICAgICAvLyBTaG93IHN0YWNrIHRyYWNlIGlmIG5lY2Vzc2FyeSAoYWxvbmcgd2l0aCBhbnkgbWV0YWRhdGEpXG4gICAgICBpZiAoaXNFcnJvcihlcnIpICYmIHRoaXMuY29uZmlnLnNob3dTdGFjaykge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLm1ldGEuc2hvdyB8fCBpc0VtcHR5KG1ldGEpKSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0oZXJyKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0aGlzLmNvbmZpZy5tZXRhLmhpZGVNZXRhICYmXG4gICAgICAgICAgbWV0YVt0aGlzLmNvbmZpZy5tZXRhLmhpZGVNZXRhXVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKGVyciwgbWV0YSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuY29uZmlnLm1ldGEuc2hvdyB8fCBpc0VtcHR5KG1ldGEpKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHRoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGEgJiYgbWV0YVt0aGlzLmNvbmZpZy5tZXRhLmhpZGVNZXRhXSkgfHxcbiAgICAgICAgKHRoaXMuY29uZmlnLm1ldGEuaGlkZUhUVFAgJiYgbWV0YVt0aGlzLmNvbmZpZy5tZXRhLmhpZGVIVFRQXSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShtZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKG1lc3NhZ2UsIG1ldGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHBvc3QtaG9va3NcbiAgICBwTWFwU2VyaWVzKHRoaXMuY29uZmlnLmhvb2tzLnBvc3QsIChob29rKSA9PlxuICAgICAgaG9vayhtZXRob2QsIGVyciwgbWVzc2FnZSwgbWV0YSlcbiAgICApXG4gICAgICAudGhlbigpXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuZXJyb3IoZXJyKTtcbiAgICAgIH0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQXhlO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0FBLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzs7QUFFM0I7QUFDQSxNQUFNQyxFQUFFLEdBQUdELE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFFeEIsTUFBTUUsT0FBTyxHQUFHRixPQUFPLENBQUMsc0JBQXNCLENBQUM7QUFDL0MsTUFBTUcsTUFBTSxHQUFHSCxPQUFPLENBQUMsb0JBQW9CLENBQUM7QUFDNUMsTUFBTUksZ0JBQWdCLEdBQUdKLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztBQUNyRCxNQUFNSyxHQUFHLEdBQUdMLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztBQUN2QyxNQUFNTSxPQUFPLEdBQUdOLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDbEMsTUFBTU8sUUFBUSxHQUFHUCxPQUFPLENBQUMsV0FBVyxD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
491
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwib3MiLCJmb3JtYXQiLCJmb3JtYXRTcGVjaWZpZXJzIiwiZ2V0IiwiaXNFcnJvciIsImlzU3ltYm9sIiwibWVyZ2VPcHRpb25zIiwicE1hcFNlcmllcyIsInBhcnNlQXBwSW5mbyIsInBhcnNlRXJyIiwicGlja0RlZXAiLCJzZXQiLCJ1bnNldCIsImJvb2xlYW4iLCJwa2ciLCJzaWxlbnRTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJvbWl0dGVkTG9nZ2VyS2V5cyIsIlNldCIsImxldmVscyIsImFsaWFzZXMiLCJ3YXJuaW5nIiwiZXJyIiwibGV2ZWxFcnJvciIsImpvaW4iLCJuYW1lIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiSE9TVE5BTUUiLCJob3N0bmFtZSIsImlzUGxhaW5PYmplY3QiLCJ2YWx1ZSIsInByb3RvdHlwZSIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwidG9TdHJpbmdUYWciLCJpdGVyYXRvciIsImRvdGlmeVRvQXJyYXkiLCJvYmoiLCJyZXMiLCJyZWN1cnNlIiwiY3VycmVudCIsImtleSIsIlJlZmxlY3QiLCJvd25LZXlzIiwibmV3S2V5IiwicHVzaCIsImlzRW1wdHkiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJ0cmltIiwiaXNOdWxsIiwiaXNVbmRlZmluZWQiLCJpc09iamVjdCIsIkFycmF5IiwiaXNBcnJheSIsImlzU3RyaW5nIiwiaXNGdW5jdGlvbiIsIkF4ZSIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwicmVtYXBwZWRGaWVsZHMiLCJBWEVfUkVNQVBQRURfTUVUQV9GSUVMRFMiLCJmaWVsZHMiLCJhcnIiLCJzcGxpdCIsIm1hcCIsInYiLCJwcm9wIiwib21pdHRlZEZpZWxkcyIsIkFYRV9PTUlUX01FVEFfRklFTERTIiwicyIsInBpY2tlZEZpZWxkcyIsIkFYRV9QSUNLX01FVEFfRklFTERTIiwic2hvd1N0YWNrIiwiQVhFX1NIT1dfU1RBQ0siLCJtZXRhIiwiYXNzaWduIiwic2hvdyIsIkFYRV9TSE9XX01FVEEiLCJjbGVhbnVwUmVtYXBwaW5nIiwiaGlkZUhUVFAiLCJoaWRlTWV0YSIsInZlcnNpb24iLCJzaWxlbnQiLCJsb2dnZXIiLCJjb25zb2xlIiwibGV2ZWwiLCJhcHBJbmZvIiwiQVhFX0FQUF9JTkZPIiwiaG9va3MiLCJwcmUiLCJwb3N0IiwibG9nIiwiYmluZCIsIm1ldGhvZHMiLCJrZXlzIiwiZmlsdGVyIiwiaGFzIiwiZWxlbWVudCIsImZhdGFsIiwiZXJyb3IiLCJpbmZvIiwiYXJncyIsInNsaWNlIiwiY2FsbCIsInNldExldmVsIiwiZ2V0Tm9ybWFsaXplZExldmVsIiwic2V0TmFtZSIsIndhcm4iLCJmbiIsIl9sZXZlbCIsImluZGV4T2YiLCJFcnJvciIsImxvZ0xldmVsIiwic2NvcGUiLCJtZXNzYWdlIiwib3JpZ2luYWxBcmdzIiwiZXJyb3JzIiwiYXJnIiwibW9kaWZpZXIiLCJpc0J1bnlhbiIsIl9tZXRhIiwibWVzc2FnZXMiLCJzb21lIiwidCIsIm9yaWdpbmFsX21ldGEiLCJ1bnNoaWZ0Iiwib3JpZ2luYWxfZXJyIiwiZSIsIkJvb2xlYW4iLCJzdGFjayIsImFwcCIsIm1ldGhvZCIsImhvb2siLCJoYWRUcnVlU2lsZW50U3ltYm9sIiwiaW5kZXgiLCJsYXN0SW5kZXhPZiIsInBhcmVudEtleSIsImRvdGlmaWVkIiwiaSIsInNwbGljZSIsInBpY2tlZFN5bWJvbHMiLCJ0aGVuIiwiY2F0Y2giLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5hc3NpZ25lZC1pbXBvcnRcbnJlcXVpcmUoJ2NvbnNvbGUtcG9seWZpbGwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLW5vZGUtcHJvdG9jb2xcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcblxuY29uc3QgZm9ybWF0ID0gcmVxdWlyZSgnQGxhZGpzL2Zvcm1hdC11dGlsJyk7XG5jb25zdCBmb3JtYXRTcGVjaWZpZXJzID0gcmVxdWlyZSgnZm9ybWF0LXNwZWNpZmllcnMnKTtcbmNvbnN0IGdldCA9IHJlcXVpcmUoJ0BzdHJpa2VlbnRjby9nZXQnKTtcbmNvbnN0IGlzRXJyb3IgPSByZXF1aXJlKCdpc2Vycm9yJyk7XG5jb25zdCBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuY29uc3QgbWVyZ2VPcHRpb25zID0gcmVxdWlyZSgnbWVyZ2Utb3B0aW9ucycpO1xuY29uc3QgcE1hcFNlcmllcyA9IHJlcXVpcmUoJ3AtbWFwLXNlcmllcycpO1xuY29uc3QgcGFyc2VBcHBJbmZvID0gcmVxdWlyZSgncGFyc2UtYXBwLWluZm8nKTtcbmNvbnN0IHBhcnNlRXJyID0gcmVxdWlyZSgncGFyc2UtZXJyJyk7XG5jb25zdCBwaWNrRGVlcCA9IHJlcXVpcmUoJ3BpY2stZGVlcCcpO1xuY29uc3Qgc2V0ID0gcmVxdWlyZSgnQHN0cmlrZWVudGNvL3NldCcpO1xuY29uc3QgdW5zZXQgPSByZXF1aXJlKCd1bnNldC12YWx1ZScpO1xuY29uc3QgeyBib29sZWFuIH0gPSByZXF1aXJlKCdib29sZWFuJyk7XG5cbmNvbnN0IHBrZyA9IHJlcXVpcmUoJy4uL3BhY2thZ2UuanNvbicpO1xuXG5jb25zdCBzaWxlbnRTeW1ib2wgPSBTeW1ib2wuZm9yKCdheGUuc2lsZW50Jyk7XG5jb25zdCBvbWl0dGVkTG9nZ2VyS2V5cyA9IG5ldyBTZXQoWydjb25maWcnLCAnbG9nJ10pO1xuY29uc3QgbGV2ZWxzID0gWyd0cmFjZScsICdkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InLCAnZmF0YWwnXTtcbmNvbnN0IGFsaWFzZXMgPSB7IHdhcm5pbmc6ICd3YXJuJywgZXJyOiAnZXJyb3InIH07XG5jb25zdCBsZXZlbEVycm9yID0gYFxcYGxldmVsXFxgIGludmFsaWQsIG11c3QgYmU6ICR7bGV2ZWxzLmpvaW4oJywgJyl9YDtcbmNvbnN0IG5hbWUgPVxuICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50J1xuICAgID8gZmFsc2VcbiAgICA6IHByb2Nlc3MuZW52LkhPU1ROQU1FIHx8IG9zLmhvc3RuYW1lKCk7XG5cbi8vIDxodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2lzLXBsYWluLW9iai9ibG9iL21haW4vaW5kZXguanM+XG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgcmV0dXJuIChcbiAgICAocHJvdG90eXBlID09PSBudWxsIHx8XG4gICAgICBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHxcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJlxuICAgICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbHVlKSAmJlxuICAgICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbHVlKSAmJlxuICAgICFpc1N5bWJvbCh2YWx1ZSlcbiAgKTtcbn1cblxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9HZWVuZW5UaWpkL2RvdGlmeS9ibG9iL21hc3Rlci9kb3RpZnkuanM+XG5mdW5jdGlvbiBkb3RpZnlUb0FycmF5KG9iaikge1xuICBjb25zdCByZXMgPSBbXTtcbiAgZnVuY3Rpb24gcmVjdXJzZShvYmosIGN1cnJlbnQpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMob2JqKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgIGNvbnN0IG5ld0tleSA9IGN1cnJlbnQgPyBjdXJyZW50ICsgJy4nICsga2V5IDoga2V5OyAvLyBqb2luZWQga2V5IHdpdGggZG90XG4gICAgICAvLyBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgJiYgIU9iamVjdElELmlzVmFsaWQodmFsdWUpKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmVjdXJzZSh2YWx1ZSwgbmV3S2V5KTsgLy8gaXQncyBhIG5lc3RlZCBvYmplY3QsIHNvIGRvIGl0IGFnYWluXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMucHVzaChuZXdLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlY3Vyc2Uob2JqKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy8gPGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MzIzMzE2Mz5cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0Lm93bktleXModmFsdWUpLmxlbmd0aCA9PT0gMCkgfHxcbiAgICAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKVxuICApO1xufVxuXG5mdW5jdGlvbiBpc051bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJztcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5jbGFzcyBBeGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgIGNvbnN0IHJlbWFwcGVkRmllbGRzID0ge307XG4gICAgaWYgKHByb2Nlc3MuZW52LkFYRV9SRU1BUFBFRF9NRVRBX0ZJRUxEUykge1xuICAgICAgY29uc3QgZmllbGRzID0gcHJvY2Vzcy5lbnYuQVhFX1JFTUFQUEVEX01FVEFfRklFTERTO1xuICAgICAgY29uc3QgYXJyID0gZmllbGRzLnNwbGl0KCcsJykubWFwKCh2KSA9PiB2LnNwbGl0KCc6JykpO1xuICAgICAgZm9yIChjb25zdCBbcHJvcCwgdmFsdWVdIG9mIGFycikge1xuICAgICAgICByZW1hcHBlZEZpZWxkc1twcm9wXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVudmlmeSBkb2VzIG5vdCBzdXBwb3J0IGNvbmRpdGlvbmFscyB3ZWxsIGVub3VnaCBzbyB3ZSBkZWNsYXJlIHZhcnMgb3V0c2lkZVxuICAgIGxldCBvbWl0dGVkRmllbGRzID0gcHJvY2Vzcy5lbnYuQVhFX09NSVRfTUVUQV9GSUVMRFM7XG4gICAgaWYgKHR5cGVvZiBvbWl0dGVkRmllbGRzID09PSAnc3RyaW5nJylcbiAgICAgIG9taXR0ZWRGaWVsZHMgPSBvbWl0dGVkRmllbGRzLnNwbGl0KCcsJykubWFwKChzKSA9PiBzLnRyaW0oKSk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG9taXR0ZWRGaWVsZHMpKSBvbWl0dGVkRmllbGRzID0gW107XG5cbiAgICBsZXQgcGlja2VkRmllbGRzID0gcHJvY2Vzcy5lbnYuQVhFX1BJQ0tfTUVUQV9GSUVMRFM7XG4gICAgaWYgKHR5cGVvZiBwaWNrZWRGaWVsZHMgPT09ICdzdHJpbmcnKVxuICAgICAgcGlja2VkRmllbGRzID0gcGlja2VkRmllbGRzLnNwbGl0KCcsJykubWFwKChzKSA9PiBzLnRyaW0oKSk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBpY2tlZEZpZWxkcykpIHBpY2tlZEZpZWxkcyA9IFtdO1xuXG4gICAgdGhpcy5jb25maWcgPSBtZXJnZU9wdGlvbnMoXG4gICAgICB7XG4gICAgICAgIHNob3dTdGFjazogcHJvY2Vzcy5lbnYuQVhFX1NIT1dfU1RBQ0tcbiAgICAgICAgICA/IGJvb2xlYW4ocHJvY2Vzcy5lbnYuQVhFX1NIT1dfU1RBQ0spXG4gICAgICAgICAgOiB0cnVlLFxuICAgICAgICBtZXRhOiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNob3c6IHByb2Nlc3MuZW52LkFYRV9TSE9XX01FVEFcbiAgICAgICAgICAgICAgPyBib29sZWFuKHByb2Nlc3MuZW52LkFYRV9TSE9XX01FVEEpXG4gICAgICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbWFwcGVkRmllbGRzLFxuICAgICAgICAgICAgb21pdHRlZEZpZWxkcyxcbiAgICAgICAgICAgIHBpY2tlZEZpZWxkcyxcbiAgICAgICAgICAgIGNsZWFudXBSZW1hcHBpbmc6IHRydWUsXG4gICAgICAgICAgICBoaWRlSFRUUDogJ2lzX2h0dHAnLFxuICAgICAgICAgICAgLy8gaW1wbGVtZW50ZWQgbWFpbmx5IGZvciBAbGFkanMvZ3JhY2VmdWwgdG9cbiAgICAgICAgICAgIC8vIHN1cHByZXNzIHVubmVjZXNzYXJ5IG1ldGEgb3V0cHV0IHRvIGNvbnNvbGVcbiAgICAgICAgICAgIGhpZGVNZXRhOiAnaGlkZV9tZXRhJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZW9mIGNvbmZpZy5tZXRhID09PSAnb2JqZWN0JyA/IGNvbmZpZy5tZXRhIDoge31cbiAgICAgICAgKSxcbiAgICAgICAgdmVyc2lvbjogcGtnLnZlcnNpb24sXG4gICAgICAgIHNpbGVudDogZmFsc2UsXG4gICAgICAgIGxvZ2dlcjogY29uc29sZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgbGV2ZWxzOiBbJ2luZm8nLCAnd2FybicsICdlcnJvcicsICdmYXRhbCddLFxuICAgICAgICBhcHBJbmZvOiBwcm9jZXNzLmVudi5BWEVfQVBQX0lORk9cbiAgICAgICAgICA/IGJvb2xlYW4ocHJvY2Vzcy5lbnYuQVhFX0FQUF9JTkZPKVxuICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgaG9va3M6IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJlOiBbXSxcbiAgICAgICAgICAgIHBvc3Q6IFtdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eXBlb2YgY29uZmlnLmhvb2tzID09PSAnb2JqZWN0JyA/IGNvbmZpZy5ob29rcyA6IHt9XG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBjb25maWdcbiAgICApO1xuXG4gICAgdGhpcy5hcHBJbmZvID0gdGhpcy5jb25maWcuYXBwSW5mb1xuICAgICAgPyBpc0Z1bmN0aW9uKHBhcnNlQXBwSW5mbylcbiAgICAgICAgPyBwYXJzZUFwcEluZm8oKVxuICAgICAgICA6IGZhbHNlXG4gICAgICA6IGZhbHNlO1xuXG4gICAgdGhpcy5sb2cgPSB0aGlzLmxvZy5iaW5kKHRoaXMpO1xuXG4gICAgLy8gSW5oZXJpdCBtZXRob2RzIGZyb20gcGFyZW50IGxvZ2dlclxuICAgIGNvbnN0IG1ldGhvZHMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZy5sb2dnZXIpLmZpbHRlcihcbiAgICAgIChrZXkpID0+ICFvbWl0dGVkTG9nZ2VyS2V5cy5oYXMoa2V5KVxuICAgICk7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIG1ldGhvZHMpIHtcbiAgICAgIHRoaXNbZWxlbWVudF0gPSB0aGlzLmNvbmZpZy5sb2dnZXJbZWxlbWVudF07XG4gICAgfVxuXG4gICAgLy8gQmluZCBoZWxwZXIgZnVuY3Rpb25zIGZvciBlYWNoIGxvZyBsZXZlbFxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBsZXZlbHMpIHtcbiAgICAgIC8vIEVuc3VyZSBmdW5jdGlvbiBleGlzdHMgaW4gbG9nZ2VyIHBhc3NlZFxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy5sb2dnZXJbZWxlbWVudF0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09ICdmYXRhbCcpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuZmF0YWwgPVxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmVycm9yIHx8XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuaW5mbyB8fFxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmxvZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbZWxlbWVudF0gPVxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmluZm8gfHwgdGhpcy5jb25maWcubG9nZ2VyLmxvZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBCaW5kIGxvZyBoYW5kbGVyIHdoaWNoIG5vcm1hbGl6ZXMgYXJncyBhbmQgcG9wdWxhdGVzIG1ldGFcbiAgICAgIHRoaXNbZWxlbWVudF0gPSAoLi4uYXJncykgPT5cbiAgICAgICAgdGhpcy5sb2coZWxlbWVudCwgLi4uQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0TGV2ZWwgPSB0aGlzLnNldExldmVsLmJpbmQodGhpcyk7XG4gICAgdGhpcy5nZXROb3JtYWxpemVkTGV2ZWwgPSB0aGlzLmdldE5vcm1hbGl6ZWRMZXZlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc2V0TmFtZSA9IHRoaXMuc2V0TmFtZS5iaW5kKHRoaXMpO1xuXG4gICAgLy8gU2V0IHRoZSBsb2dnZXIgbmFtZVxuICAgIGlmICh0aGlzLmNvbmZpZy5uYW1lKSB0aGlzLnNldE5hbWUodGhpcy5jb25maWcubmFtZSk7XG5cbiAgICAvLyBTZXQgdGhlIGxvZ2dlciBsZXZlbFxuICAgIHRoaXMuc2V0TGV2ZWwodGhpcy5jb25maWcubGV2ZWwpO1xuXG4gICAgLy8gQWxpYXNlc1xuICAgIHRoaXMuZXJyID0gdGhpcy5lcnJvcjtcbiAgICB0aGlzLndhcm5pbmcgPSB0aGlzLndhcm47XG5cbiAgICAvLyBQcmUgYW5kIFBvc3QgSG9va3NcbiAgICB0aGlzLnByZSA9IGZ1bmN0aW9uIChsZXZlbCwgZm4pIHtcbiAgICAgIHRoaXMuY29uZmlnLmhvb2tzLnByZS5wdXNoKGZ1bmN0aW9uIChfbGV2ZWwsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGxldmVsICE9PSBfbGV2ZWwpIHJldHVybiBbLi4uYXJnc107XG4gICAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLnBvc3QgPSBmdW5jdGlvbiAobGV2ZWwsIGZuKSB7XG4gICAgICB0aGlzLmNvbmZpZy5ob29rcy5wb3N0LnB1c2goZnVuY3Rpb24gKF9sZXZlbCwgLi4uYXJncykge1xuICAgICAgICBpZiAobGV2ZWwgIT09IF9sZXZlbCkgcmV0dXJuIFsuLi5hcmdzXTtcbiAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHNldExldmVsKGxldmVsKSB7XG4gICAgaWYgKCFpc1N0cmluZyhsZXZlbCkgfHwgbGV2ZWxzLmluZGV4T2YobGV2ZWwpID09PSAtMSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihsZXZlbEVycm9yKTtcbiAgICAvLyBTdXBwb3J0IHNpZ25hbGUgbG9nZ2VyIGFuZCBvdGhlciBsb2dnZXJzIHRoYXQgdXNlIGBsb2dMZXZlbGBcbiAgICBpZiAoaXNTdHJpbmcodGhpcy5jb25maWcubG9nZ2VyLmxvZ0xldmVsKSlcbiAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5sb2dMZXZlbCA9IGxldmVsO1xuICAgIGVsc2UgdGhpcy5jb25maWcubG9nZ2VyLmxldmVsID0gbGV2ZWw7XG4gICAgLy8gQWRqdXN0cyBgdGhpcy5jb25maWcubGV2ZWxzYCBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQgaGFzIGFsbCBwcm9jZWVkaW5nIChpbmNsdXNpdmUpXG4gICAgdGhpcy5jb25maWcubGV2ZWxzID0gbGV2ZWxzLnNsaWNlKGxldmVscy5pbmRleE9mKGxldmVsKSk7XG4gIH1cblxuICBnZXROb3JtYWxpemVkTGV2ZWwobGV2ZWwpIHtcbiAgICBpZiAoIWlzU3RyaW5nKGxldmVsKSkgcmV0dXJuICdpbmZvJztcbiAgICBpZiAoaXNTdHJpbmcoYWxpYXNlc1tsZXZlbF0pKSByZXR1cm4gYWxpYXNlc1tsZXZlbF07XG4gICAgaWYgKGxldmVscy5pbmRleE9mKGxldmVsKSA9PT0gLTEpIHJldHVybiAnaW5mbyc7XG4gICAgcmV0dXJuIGxldmVsO1xuICB9XG5cbiAgc2V0TmFtZShuYW1lKSB7XG4gICAgaWYgKCFpc1N0cmluZyhuYW1lKSkgdGhyb3cgbmV3IEVycm9yKCdgbmFtZWAgbXVzdCBiZSBhIFN0cmluZycpO1xuICAgIC8vIFN1cHBvcnQgc2lnbmFsZSBsb2dnZXIgYW5kIG90aGVyIGxvZ2dlcnMgdGhhdCB1c2UgYHNjb3BlYFxuICAgIGlmIChpc1N0cmluZyh0aGlzLmNvbmZpZy5sb2dnZXIuc2NvcGUpKSB0aGlzLmNvbmZpZy5sb2dnZXIuc2NvcGUgPSBuYW1lO1xuICAgIGVsc2UgdGhpcy5jb25maWcubG9nZ2VyLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgbG9nKGxldmVsLCBtZXNzYWdlLCBtZXRhLCAuLi5hcmdzKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcmdzID0gW107XG4gICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgaWYgKCFpc1VuZGVmaW5lZChsZXZlbCkpIG9yaWdpbmFsQXJncy5wdXNoKGxldmVsKTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1lc3NhZ2UpKSBvcmlnaW5hbEFyZ3MucHVzaChtZXNzYWdlKTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1ldGEpKSBvcmlnaW5hbEFyZ3MucHVzaChtZXRhKTtcbiAgICBmb3IgKGNvbnN0IGFyZyBvZiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKSkge1xuICAgICAgb3JpZ2luYWxBcmdzLnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICBsZXQgbW9kaWZpZXIgPSAwO1xuXG4gICAgaWYgKGlzU3RyaW5nKGxldmVsKSAmJiBpc1N0cmluZyhhbGlhc2VzW2xldmVsXSkpIHtcbiAgICAgIGxldmVsID0gYWxpYXNlc1tsZXZlbF07XG4gICAgfSBlbHNlIGlmIChpc0Vycm9yKGxldmVsKSkge1xuICAgICAgbWV0YSA9IG1lc3NhZ2U7XG4gICAgICBtZXNzYWdlID0gbGV2ZWw7XG4gICAgICBsZXZlbCA9ICdlcnJvcic7XG4gICAgfSBlbHNlIGlmICghaXNTdHJpbmcobGV2ZWwpIHx8IGxldmVscy5pbmRleE9mKGxldmVsKSA9PT0gLTEpIHtcbiAgICAgIG1ldGEgPSBtZXNzYWdlO1xuICAgICAgbWVzc2FnZSA9IGxldmVsO1xuICAgICAgbGV2ZWwgPSB0aGlzLmdldE5vcm1hbGl6ZWRMZXZlbChsZXZlbCk7XG4gICAgICBtb2RpZmllciA9IC0xO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBlYXJseSBpZiBpdCBpcyBub3QgYSB2YWxpZCBsb2dnaW5nIGxldmVsXG4gICAgaWYgKHRoaXMuY29uZmlnLmxldmVscy5pbmRleE9mKGxldmVsKSA9PT0gLTEpIHJldHVybjtcblxuICAgIC8vIEJ1bnlhbiBzdXBwb3J0IChtZXRhLCBtZXNzYWdlLCAuLi5hcmdzKVxuICAgIGxldCBpc0J1bnlhbiA9IGZhbHNlO1xuICAgIGlmICgoaXNPYmplY3QobWVzc2FnZSkgfHwgQXJyYXkuaXNBcnJheShtZXNzYWdlKSkgJiYgaXNTdHJpbmcobWV0YSkpIHtcbiAgICAgIGlzQnVueWFuID0gdHJ1ZTtcbiAgICAgIGNvbnN0IF9tZXRhID0gbWV0YTtcbiAgICAgIG1ldGEgPSBtZXNzYWdlO1xuICAgICAgbWVzc2FnZSA9XG4gICAgICAgIGlzU3RyaW5nKF9tZXRhKSAmJiBvcmlnaW5hbEFyZ3MubGVuZ3RoID49IDMgKyBtb2RpZmllclxuICAgICAgICAgID8gZm9ybWF0KC4uLm9yaWdpbmFsQXJncy5zbGljZSgyICsgbW9kaWZpZXIpKVxuICAgICAgICAgIDogX21ldGE7XG4gICAgfVxuXG4gICAgLy8gSWYgbWVzc2FnZSB3YXMgdW5kZWZpbmVkIHRoZW4gc2V0IGl0IHRvIGxldmVsXG4gICAgaWYgKGlzVW5kZWZpbmVkKG1lc3NhZ2UpKSBtZXNzYWdlID0gbGV2ZWw7XG5cbiAgICAvLyBJZiBvbmx5IGBtZXNzYWdlYCB3YXMgcGFzc2VkIHRoZW4gaWYgaXQgd2FzIGFuIE9iamVjdFxuICAgIC8vIHByZXNlcnZlIGl0IGFzIGFuIE9iamVjdCBieSBzZXR0aW5nIGl0IGFzIG1ldGFcbiAgICBpZiAoXG4gICAgICBvcmlnaW5hbEFyZ3Muc2xpY2UoMSArIG1vZGlmaWVyKS5sZW5ndGggPT09IDEgJiZcbiAgICAgICFpc1N0cmluZyhtZXNzYWdlKSAmJlxuICAgICAgIWlzRXJyb3IobWVzc2FnZSlcbiAgICApIHtcbiAgICAgIG1ldGEgPSB7IG1lc3NhZ2UgfTtcbiAgICAgIG1lc3NhZ2UgPSBsZXZlbDtcbiAgICB9IGVsc2UgaWYgKCFpc0J1bnlhbiAmJiBvcmlnaW5hbEFyZ3MubGVuZ3RoID49IDQgKyBtb2RpZmllcikge1xuICAgICAgbWVzc2FnZSA9IHVuZGVmaW5lZDtcblxuICAgICAgbWV0YSA9IHt9O1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgYXJnIG9mIG9yaWdpbmFsQXJncykge1xuICAgICAgICBpZiAoaXNFcnJvcihhcmcpKSBlcnJvcnMucHVzaChhcmcpO1xuICAgICAgICBlbHNlIGlmIChpc1N0cmluZyhhcmcpKSBtZXNzYWdlcy5wdXNoKGFyZyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwICYmIG1lc3NhZ2VzLmxlbmd0aCA+IDApXG4gICAgICAgIG1lc3NhZ2UgPSBmb3JtYXQoLi4ubWVzc2FnZXMpO1xuICAgICAgZWxzZSBpZiAoZXJyb3JzLmxlbmd0aCA+IDAgJiYgbGV2ZWwgPT09ICdsb2cnKSBsZXZlbCA9ICdlcnJvcic7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICFpc0J1bnlhbiAmJlxuICAgICAgb3JpZ2luYWxBcmdzLmxlbmd0aCA9PT0gMyArIG1vZGlmaWVyICYmXG4gICAgICBpc1N0cmluZyhtZXNzYWdlKSAmJlxuICAgICAgZm9ybWF0U3BlY2lmaWVycy5zb21lKCh0KSA9PiBtZXNzYWdlLmluZGV4T2YodCkgIT09IC0xKVxuICAgICkge1xuICAgICAgLy8gT3RoZXJ3aXNlIGlmIHRoZXJlIGFyZSB0aHJlZSBhcmdzIGFuZCBpZiB0aGUgYG1lc3NhZ2VgIGNvbnRhaW5zXG4gICAgICAvLyBhIHBsYWNlaG9sZGVyIHRva2VuIChlLmcuICclcycgb3IgJyVkJyAtIHNlZSBhYm92ZSBgZm9ybWF0U3BlY2lmaWVyc2AgdmFyaWFibGUpXG4gICAgICAvLyB0aGVuIHdlIGNhbiBpbmZlciB0aGF0IHRoZSBgbWV0YWAgYXJnIHBhc3NlZCBpcyB1c2VkIGZvciBmb3JtYXR0aW5nXG4gICAgICBtZXNzYWdlID0gZm9ybWF0KG1lc3NhZ2UsIG1ldGEpO1xuICAgICAgbWV0YSA9IHt9O1xuICAgIH0gZWxzZSBpZiAoIWlzRXJyb3IobWVzc2FnZSkpIHtcbiAgICAgIGlmIChpc0Vycm9yKG1ldGEpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG1ldGEpO1xuICAgICAgICBtZXRhID0ge307XG4gICAgICB9IGVsc2UgaWYgKCFpc09iamVjdChtZXRhKSAmJiAhaXNVbmRlZmluZWQobWV0YSkgJiYgIWlzTnVsbChtZXRhKSkge1xuICAgICAgICAvLyBJZiB0aGUgYG1ldGFgIHZhcmlhYmxlIHBhc3NlZCB3YXMgbm90IGFuIE9iamVjdCB0aGVuIGNvbnZlcnQgaXRcbiAgICAgICAgbWVzc2FnZSA9IGZvcm1hdChtZXNzYWdlLCBtZXRhKTtcbiAgICAgICAgbWV0YSA9IHt9O1xuICAgICAgfSBlbHNlIGlmICghaXNTdHJpbmcobWVzc2FnZSkpIHtcbiAgICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgbm90IGEgc3RyaW5nIHRoZW4gd2Ugc2hvdWxkIHJ1biBgdXRpbC5mb3JtYXRgIG9uIGl0XG4gICAgICAgIC8vIGFzc3VtaW5nIHdlJ3JlIGZvcm1hdHRpbmcgaXQgbGlrZSBpdCB3YXMgYW5vdGhlciBhcmd1bWVudFxuICAgICAgICAvLyAoYXMgb3Bwb3NlZCB0byB1c2luZyBzb21ldGhpbmcgbGlrZSBmYXN0LWpzb24tc3RyaW5naWZ5KVxuICAgICAgICBtZXNzYWdlID0gZm9ybWF0KG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNFcnJvcihtZXRhKSkge1xuICAgICAgZXJyb3JzLnB1c2gobWV0YSk7XG4gICAgICAvLyBoYW5kbGUgYWRkaXRpb25hbCBhcmdzXG4gICAgICBmb3IgKGNvbnN0IGFyZyBvZiBvcmlnaW5hbEFyZ3Muc2xpY2UoMiArIG1vZGlmaWVyKSkge1xuICAgICAgICAvLyBzaG91bGQgc2tpcCB0aGlzIGJldHRlciB3aXRoIHNsaWNlIGFuZCBtb2RpZmllciBhZGp1c3RtZW50XG4gICAgICAgIGlmIChtZXRhID09PSBhcmcpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoaXNFcnJvcihhcmcpKSBlcnJvcnMucHVzaChhcmcpO1xuICAgICAgfVxuXG4gICAgICBtZXRhID0ge307XG4gICAgfVxuXG4gICAgaWYgKCFpc1VuZGVmaW5lZChtZXRhKSAmJiAhaXNPYmplY3QobWV0YSkpIG1ldGEgPSB7IG9yaWdpbmFsX21ldGE6IG1ldGEgfTtcbiAgICBlbHNlIGlmICghaXNPYmplY3QobWV0YSkpIG1ldGEgPSB7fTtcblxuICAgIGlmIChpc0Vycm9yKG1lc3NhZ2UpKSB7XG4gICAgICBlcnJvcnMudW5zaGlmdChtZXNzYWdlKTtcbiAgICAgIG1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyByZXdyaXRlIGBtZXRhLmVycmAgdG8gYG1ldGEub3JpZ2luYWxfZXJyYCBmb3IgY29uc2lzdGVuY3lcbiAgICAvLyAoaW4gY2FzZSBzb21lb25lIGhhcyBhbiBvYmplY3Qgd2l0aCBgLmVycmAgcHJvcGVydHkgb24gaXQgd2l0aCBhbiBlcnJvcilcbiAgICAvL1xuICAgIGlmIChpc09iamVjdChtZXRhLmVycikpIHtcbiAgICAgIGlmIChpc0Vycm9yKG1ldGEuZXJyKSkgZXJyb3JzLnB1c2gobWV0YS5lcnIpO1xuICAgICAgbWV0YS5vcmlnaW5hbF9lcnIgPSBpc0Vycm9yKG1ldGEuZXJyKSA/IHBhcnNlRXJyKG1ldGEuZXJyKSA6IG1ldGEuZXJyO1xuICAgIH1cblxuICAgIGxldCBlcnI7XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBlcnIgPSBlcnJvcnNbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgWy4uLm5ldyBTZXQoZXJyb3JzLm1hcCgoZSkgPT4gZS5tZXNzYWdlKS5maWx0ZXIoQm9vbGVhbikpXS5qb2luKCc7ICcpXG4gICAgICAgICk7XG4gICAgICAgIGVyci5zdGFjayA9IFtcbiAgICAgICAgICAuLi5uZXcgU2V0KGVycm9ycy5tYXAoKGUpID0+IGUuc3RhY2spLmZpbHRlcihCb29sZWFuKSlcbiAgICAgICAgXS5qb2luKCdcXG5cXG4nKTtcbiAgICAgICAgZXJyLmVycm9ycyA9IGVycm9ycztcbiAgICAgIH1cblxuICAgICAgbWV0YS5lcnIgPSBwYXJzZUVycihlcnIpO1xuICAgICAgaWYgKCFpc1N0cmluZyhtZXNzYWdlKSkgbWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gTk9URTogdGhpcyB3YXMgcmVtb3ZlZCBpbiB2MTAuMi4yIGR1ZSB0byBjaXJjdWxhciByZWZlcmVuY2UgaXNzdWVzXG4gICAgLy8gICAgICAgKHRoZSB3b3JrYXJvdW5kIHdvdWxkIGludm9sdmUgc2FmZVN0cmluZ2lmeSBhbmQgdGhlbiBKU09OLnBhcnNlIHdoaWNoIHdvdWxkIGJlIHBlcmYgYmxvYXQpXG4gICAgLy8gICAgICAgKHRoZXJlIHN0aWxsIG1pZ2h0IGJlIGFub3RoZXIgd29ya2Fyb3VuZCBvciBwZXJoYXBzIHdlIGRvbid0IGFkZCBhbGwgdGhlIGFyZ3MgaGVyZSBleGNlcHQgYWRkaXRpb25hbClcbiAgICAvL1xuICAgIC8vIFNldCBgYXJnc2AgcHJvcCB3aXRoIG9yaWdpbmFsIGFyZ3VtZW50cyBwYXNzZWRcbiAgICAvLyBtZXRhLmFyZ3MgPSBvcmlnaW5hbEFyZ3M7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsZXZlbCBvbiBtZXRhXG4gICAgbWV0YS5sZXZlbCA9IGxldmVsO1xuXG4gICAgLy8gQWRkIGBhcHBgIG9iamVjdCB0byBtZXRhZGF0YVxuICAgIGlmICh0aGlzLmFwcEluZm8pIG1ldGEuYXBwID0gdGhpcy5hcHBJbmZvO1xuXG4gICAgLy9cbiAgICAvLyBkZXRlcm1pbmUgbG9nIG1ldGhvZCB0byB1c2VcbiAgICAvL1xuICAgIC8vIGlmIHdlIGRpZG4ndCBwYXNzIGEgbGV2ZWwgYXMgYSBtZXRob2RcbiAgICAvLyAoZS5nLiBjb25zb2xlLmluZm8pLCB0aGVuIHdlIHNob3VsZCBzdGlsbFxuICAgIC8vIHVzZSB0aGUgbG9nZ2VyJ3MgYGxvZ2AgbWV0aG9kIHRvIG91dHB1dFxuICAgIC8vXG4gICAgLy8gYW5kIGZhdGFsIHNob3VsZCB1c2UgZXJyb3IgKGUuZy4gaW4gYnJvd3NlcilcbiAgICAvL1xuICAgIGNvbnN0IG1ldGhvZCA9IG1vZGlmaWVyID09PSAtMSA/ICdsb2cnIDogbGV2ZWw7XG5cbiAgICAvLyBwcmUtaG9va3NcbiAgICBmb3IgKGNvbnN0IGhvb2sgb2YgdGhpcy5jb25maWcuaG9va3MucHJlKSB7XG4gICAgICBbZXJyLCBtZXNzYWdlLCBtZXRhXSA9IGhvb2sobWV0aG9kLCBlcnIsIG1lc3NhZ2UsIG1ldGEpO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gTk9URTogdXNpbmcgbG9kYXNoIF8ub21pdCBhbmQgXy5waWNrIHdvdWxkIGhhdmUgYmVlbiBfdmVyeSBzbG93X1xuICAgIC8vXG4gICAgLy8gY29uc3Qgb21pdHRlZEFuZFBpY2tlZEZpZWxkcyA9IHtcbiAgICAvLyAgIC4uLl8ub21pdChtZXRhLCB0aGlzLmNvbmZpZy5tZXRhLm9taXR0ZWRGaWVsZHMpLFxuICAgIC8vICAgLi4uXy5waWNrKG1ldGEsIHRoaXMuY29uZmlnLm1ldGEucGlja2VkRmllbGRzKVxuICAgIC8vIH07XG4gICAgLy9cbiAgICAvLyBhbHNvIHdlIGRvbid0IHdhbnQgdG8gbXV0YXRlIGFueXRoaW5nIGluIGBtZXRhYFxuICAgIC8vIGFuZCBpZGVhbGx5IHdlIG9ubHkgd2FudCB0byBwaWNrIGV4YWN0bHkgd2hhdCB3ZSBuZWVkXG4gICAgLy8gKGFuZCBub3QgaGF2ZSB0d28gb3BlcmF0aW9ucywgb25lIGZvciBvbWl0LCBhbmQgb25lIGZvciBwaWNrKVxuICAgIC8vXG5cbiAgICAvLyBzZXQgYSBib29sZWFuIGZsYWcgaWYgd2UgaGFkIHRoZSBzaWxlbnQgc3ltYm9sIG9yIG5vdFxuICAgIGNvbnN0IGhhZFRydWVTaWxlbnRTeW1ib2wgPSBib29sZWFuKG1ldGFbc2lsZW50U3ltYm9sXSk7XG5cbiAgICBpZiAoIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5yZW1hcHBlZEZpZWxkcykpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyh0aGlzLmNvbmZpZy5tZXRhLnJlbWFwcGVkRmllbGRzKSkge1xuICAgICAgICBzZXQobWV0YSwgdGhpcy5jb25maWcubWV0YS5yZW1hcHBlZEZpZWxkc1trZXldLCBnZXQobWV0YSwga2V5KSk7XG4gICAgICAgIHVuc2V0KG1ldGEsIGtleSk7XG4gICAgICAgIC8vIGNsZWFudXAgZW1wdHkgb2JqZWN0cyBhZnRlciByZW1hcHBpbmdcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm1ldGEuY2xlYW51cFJlbWFwcGluZykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0ga2V5Lmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgY29udGludWU7XG4gICAgICAgICAgY29uc3QgcGFyZW50S2V5ID0ga2V5LnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgICBpZiAoaXNFbXB0eShnZXQobWV0YSwgcGFyZW50S2V5KSkpIHVuc2V0KG1ldGEsIHBhcmVudEtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLm9taXR0ZWRGaWVsZHMpIHx8XG4gICAgICAhaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcylcbiAgICApIHtcbiAgICAgIGNvbnN0IGRvdGlmaWVkID0gZG90aWZ5VG9BcnJheShtZXRhKTtcbiAgICAgIC8vIGRvdGlmaWVkID0gW1xuICAgICAgLy8gICAnZXJyLm5hbWUnLFxuICAgICAgLy8gICAnZXJyLm1lc3NhZ2UnLFxuICAgICAgLy8gICAnZXJyLnN0YWNrJyxcbiAgICAgIC8vICAgJ2xldmVsJyxcbiAgICAgIC8vICAgJ2FwcC5uYW1lJyxcbiAgICAgIC8vICAgJ2FwcC52ZXJzaW9uJyxcbiAgICAgIC8vICAgJ2FwcC5ub2RlJyxcbiAgICAgIC8vICAgJ2FwcC5oYXNoJyxcbiAgICAgIC8vICAgLy8gLi4uXG4gICAgICAvLyBdXG5cbiAgICAgIGlmICghaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLm9taXR0ZWRGaWVsZHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiB0aGlzLmNvbmZpZy5tZXRhLm9taXR0ZWRGaWVsZHMpIHtcbiAgICAgICAgICAvLyA8aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk4ODIzNDk+XG4gICAgICAgICAgbGV0IGkgPSBkb3RpZmllZC5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkb3RpZmllZFtpXSA9PT0gcHJvcCB8fFxuICAgICAgICAgICAgICAoIWlzU3ltYm9sKGRvdGlmaWVkW2ldKSAmJiBkb3RpZmllZFtpXS5pbmRleE9mKGAke3Byb3B9LmApID09PSAwKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBkb3RpZmllZC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBpY2tlZFN5bWJvbHMgPSBbXTtcblxuICAgICAgaWYgKCFpc0VtcHR5KHRoaXMuY29uZmlnLm1ldGEucGlja2VkRmllbGRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgdGhpcy5jb25maWcubWV0YS5waWNrZWRGaWVsZHMpIHtcbiAgICAgICAgICAvLyByZXNwb25zZS5oZWFkZXJzLmJvb3BcbiAgICAgICAgICAvLyByZXNwb25zZS5oZWFkZXJzLmJlZXBcbiAgICAgICAgICAvLyByZXNwb25zZS5ib2R5XG4gICAgICAgICAgLy8gcmVzcG9uc2UudGV4dFxuICAgICAgICAgIC8vIHJlc3BvbnNlXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHNwbGl0IGJ5IHRoZSBmaXJzdCBwZXJpb2QgYW5kIG9taXQgYW55IGtleXMgZnJvbSBkb3RpZmllZCBzdGFydGluZyB3aXRoIGl0XG4gICAgICAgICAgaWYgKGlzU3ltYm9sKHByb3ApKSB7XG4gICAgICAgICAgICBpZiAobWV0YVtwcm9wXSkgcGlja2VkU3ltYm9scy5wdXNoKFtwcm9wLCBtZXRhW3Byb3BdXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcHJvcC5pbmRleE9mKCcuJyk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBwcm9wLnNsaWNlKDAsIGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGxldCBpID0gZG90aWZpZWQubGVuZ3RoO1xuICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1N5bWJvbChkb3RpZmllZFtpXSkgJiYgZG90aWZpZWRbaV0uaW5kZXhPZihrZXkpID09PSAwKVxuICAgICAgICAgICAgICAgICAgZG90aWZpZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZmluYWxseSBhZGQgaXQgaWYgaXQgZGlkIG5vdCBhbHJlYWR5IGV4aXN0XG4gICAgICAgICAgaWYgKGRvdGlmaWVkLmluZGV4T2YocHJvcCkgPT09IC0xKSBkb3RpZmllZC5wdXNoKHByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vXG4gICAgICAvLyBpdGVyYXRlIG92ZXIgYWxsIGRvdGlmaWVkIHZhbHVlcyB0byBjaGVjayBmb3Igc3ltYm9sc1xuICAgICAgLy9cbiAgICAgIC8vIE5PVEU6IHRoaXMgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGV5IGNvdWxkIGFscmVhZHkgYmUgaW4gYHBpY2tlZFN5bWJvbHNgXG4gICAgICAvLyAgICAgICAoYW5kIGl0IGRvZXNuJ3QgYWxzbyBkbyBiaWdpbnRzIHlldClcbiAgICAgIC8vXG4gICAgICBmb3IgKGNvbnN0IHByb3Agb2YgZG90aWZpZWQpIHtcbiAgICAgICAgaWYgKGlzU3ltYm9sKHByb3ApICYmIG1ldGFbcHJvcF0pXG4gICAgICAgICAgcGlja2VkU3ltYm9scy5wdXNoKFtwcm9wLCBtZXRhW3Byb3BdXSk7XG4gICAgICB9XG5cbiAgICAgIC8vXG4gICAgICAvLyBub3cgd2UgY2FsbCBwaWNrLWRlZXAgdXNpbmcgdGhlIGZpbmFsIGFycmF5XG4gICAgICAvL1xuICAgICAgLy8gTk9URTogdGhpcyBkb2VzIG5vdCBwaWNrIHN5bWJvbHMgbm9yIGJpZ2ludHNcbiAgICAgIC8vXG4gICAgICBtZXRhID0gcGlja0RlZXAobWV0YSwgZG90aWZpZWQpO1xuXG4gICAgICAvL1xuICAgICAgLy8gaWYgdGhlcmUgd2VyZSBhbnkgdG9wLWxldmVsIHN5bWJvbHMgdG8gYmVcbiAgICAgIC8vIHBpY2tlZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZW0gYmFjayBoZXJlIHRvIHRoZSBsaXN0XG4gICAgICAvL1xuICAgICAgLy8gTk9URTogd2UnZCBwcm9iYWJseSB3YW50IHRvIGRvIHRoZSBzYW1lIGZvciBiaWdpbnRzIGFzIHN5bWJvbHNcbiAgICAgIC8vXG4gICAgICBpZiAocGlja2VkU3ltYm9scy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBpY2tlZFN5bWJvbHMpIHtcbiAgICAgICAgICBtZXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9ubHkgaW52b2tlIGxvZ2dlciBtZXRob2RzIGlmIGl0IHdhcyBub3Qgc2lsZW50XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5zaWxlbnQgJiYgIWhhZFRydWVTaWxlbnRTeW1ib2wpIHtcbiAgICAgIC8vIFNob3cgc3RhY2sgdHJhY2UgaWYgbmVjZXNzYXJ5IChhbG9uZyB3aXRoIGFueSBtZXRhZGF0YSlcbiAgICAgIGlmIChpc0Vycm9yKGVycikgJiYgdGhpcy5jb25maWcuc2hvd1N0YWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcubWV0YS5zaG93IHx8IGlzRW1wdHkobWV0YSkpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGEgJiZcbiAgICAgICAgICBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGFdXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKGVycik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0oZXJyLCBtZXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5jb25maWcubWV0YS5zaG93IHx8IGlzRW1wdHkobWV0YSkpIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0obWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodGhpcy5jb25maWcubWV0YS5oaWRlTWV0YSAmJiBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGFdKSB8fFxuICAgICAgICAodGhpcy5jb25maWcubWV0YS5oaWRlSFRUUCAmJiBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZUhUVFBdKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0obWVzc2FnZSwgbWV0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcG9zdC1ob29rc1xuICAgIHBNYXBTZXJpZXModGhpcy5jb25maWcuaG9va3MucG9zdCwgKGhvb2spID0+XG4gICAgICBob29rKG1ldGhvZCwgZXJyLCBtZXNzYWdlLCBtZXRhKVxuICAgIClcbiAgICAgIC50aGVuKClcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5lcnJvcihlcnIpO1xuICAgICAgfSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBeGU7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQUEsT0FBTyxDQUFDLGtCQUFrQixDQUFDOztBQUUzQjtBQUNBLE1BQU1DLEVBQUUsR0FBR0Qs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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "axe",
3
3
  "description": "Axe is a logger-agnostic wrapper that normalizes logs regardless of argument style. Great for large development teams, old and new projects, and works with Pino, Bunyan, Winston, console, and more. It is lightweight, performant, highly-configurable, and automatically adds OS, CPU, and Git information to your logs. It supports hooks (useful for masking sensitive data) and dot-notation remapping, omitting, and picking of log metadata properties. Made for Forward Email, Lad, and Cabin.",
4
- "version": "11.2.0",
4
+ "version": "11.2.2",
5
5
  "author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)",
6
6
  "browser": {
7
7
  "parse-app-info": false
@@ -24,43 +24,42 @@
24
24
  "format-specifiers": "^1.0.0",
25
25
  "is-symbol": "^1.0.4",
26
26
  "iserror": "0.0.2",
27
- "maybe-combine-errors": "1.0.0",
28
27
  "merge-options": "3.0.4",
29
28
  "p-map-series": "2",
30
29
  "parse-app-info": "^4.0.3",
31
- "parse-err": "^0.0.12",
30
+ "parse-err": "^1.0.0",
32
31
  "pick-deep": "1.0.0",
33
32
  "unset-value": "2.0.1"
34
33
  },
35
34
  "devDependencies": {
36
- "@babel/cli": "^7.19.3",
37
- "@babel/core": "^7.20.2",
35
+ "@babel/cli": "^7.20.7",
36
+ "@babel/core": "^7.20.12",
38
37
  "@babel/preset-env": "^7.20.2",
39
- "@commitlint/cli": "^17.3.0",
40
- "@commitlint/config-conventional": "^17.3.0",
41
- "ava": "^5.1.0",
38
+ "@commitlint/cli": "^17.4.2",
39
+ "@commitlint/config-conventional": "^17.4.2",
40
+ "ava": "^5.1.1",
42
41
  "babelify": "^10.0.0",
43
42
  "browserify": "^17.0.0",
44
43
  "consola": "^2.15.3",
45
44
  "cross-env": "^7.0.3",
46
- "eslint": "^8.28.0",
45
+ "eslint": "^8.33.0",
47
46
  "eslint-config-xo-lass": "^2.0.1",
48
47
  "eslint-plugin-compat": "^4.0.2",
49
48
  "eslint-plugin-node": "^11.1.0",
50
49
  "express": "^4.18.2",
51
50
  "fixpack": "^4.0.0",
52
- "husky": "^8.0.2",
51
+ "husky": "^8.0.3",
53
52
  "jsdom": "15.x",
54
- "koa": "^2.13.4",
55
- "lint-staged": "^13.0.4",
53
+ "koa": "^2.14.1",
54
+ "lint-staged": "^13.1.0",
56
55
  "lodash": "^4.17.21",
57
56
  "nyc": "^15.1.0",
58
- "pino": "^8.7.0",
57
+ "pino": "^8.8.0",
59
58
  "remark-cli": "^11.0.0",
60
59
  "remark-preset-github": "^4.0.4",
61
- "rimraf": "^3.0.2",
60
+ "rimraf": "^4.1.2",
62
61
  "signale": "^1.4.0",
63
- "sinon": "^14.0.2",
62
+ "sinon": "^15.0.1",
64
63
  "tinyify": "3.0.0",
65
64
  "xo": "^0.53.1"
66
65
  },